diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java b/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java index 7d32b3bf..33f2a3b3 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java @@ -1247,16 +1247,16 @@ public class MaterialController { MaterialAndBarCode materialByBarCode = materialService.findMaterialByBarCode(barCode); if (materialByBarCode != null) { List placePList = new ArrayList<>(); - for (int j = 0; j < depositoryByAdminorg.size(); j++) { + for (Depository depository : depositoryByAdminorg) { Boolean isExist = false; Map param = new HashMap<>(); - param.put("depositoryId", depositoryByAdminorg.get(j).getId()); + param.put("depositoryId", depository.getId()); param.put("mid", materialByBarCode.getMid()); List inventory = materialService.findInventory(param); if (inventory.size() > 0) { // 如果存在该物料 InventoryP inventoryP = inventory.get(0); - List placeByMidAndDid = placeService.findPlaceByMidAndDid(inventoryP.getId(), depositoryByAdminorg.get(j).getId()); + List placeByMidAndDid = placeService.findPlaceByMidAndDid(inventoryP.getId(), depository.getId()); materialByBarCode.setIid(inventoryP.getId()); placePList.addAll(placeByMidAndDid); isExist = true; diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java b/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java index be027ba9..9b5ea25f 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java @@ -2099,8 +2099,7 @@ public class PageController { // 获取当前库位中存储的物料 List placeAndMaterialByPid = placeService.findPlaceAndMaterialByPid(pid); - for (int i = 0; i < placeAndMaterialByPid.size(); i++) { - MaterialAndPlace materialAndPlace = placeAndMaterialByPid.get(i); + for (MaterialAndPlace materialAndPlace : placeAndMaterialByPid) { midList.add(materialAndPlace.getMid()); } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java b/src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java index e345b378..994b69fd 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java @@ -8,10 +8,7 @@ import com.dreamchaser.depository_manage.config.QyWxJMJM.com.qq.weixin.mp.aes.WX import com.dreamchaser.depository_manage.entity.CallBackLog; import com.dreamchaser.depository_manage.entity.UserByPort; import com.dreamchaser.depository_manage.pojo.RestResponse; -import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalCallBackInfo; -import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo; -import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo_Details; -import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo_SpRecord; +import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.*; import com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard.TemplateCard; import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool; import com.dreamchaser.depository_manage.security.pool.UserKeyAndTokenPool; @@ -532,19 +529,23 @@ public class QyWxOperationController { ApprovalInfo_Details approvalInfo_details = null; // 定义当前流程审批时间 String as_SpTime = ""; - // 定义当前审批流程是是否为第一个节点 - boolean flagForFirst = spRecord_list.size() > 1; // 当审批节点大于1时默认是第一个 + // 定义当前审批流程是是否要通过仓储中心 + boolean flagForFirst = true; // 默认通过 + // 设置当前审批是否为仓库管理员(1为部门负责人,2为仓储中心,3为仓库管理员) + int flagForDepository = 1; // 默认为部门负责人 + + // 定义已完成审批的节点数 + int approval_count = 0; // 获取审批申请状态变化类型:1-提单;2-同意;3-驳回;4-转审;5-催办;6-撤销;8-通过后撤销;10-添加备注 String spStatus = approvalInfo.getStatuChangeEvent(); for (ApprovalInfo_SpRecord approvalInfo_SpRecord : spRecord_list) { - - // 获取当前审批节点详情。当节点为标签或上级时,一个节点可能有多个分支 List details = approvalInfo_SpRecord.getDetails(); + // 定义审批操作时间 String spTime = ""; // 定义审批操作状态 @@ -552,17 +553,20 @@ public class QyWxOperationController { // 定义审批详情 ApprovalInfo_Details ap_detail = null; - for (ApprovalInfo_Details ad : details) { + // 获取节点分支审批人审批操作时间,0为尚未操作 spTime = ad.getSpTime(); - // 如果当前审批人暂未处理 + + // 如果当前审批节点已经处理 if (!("0".equals(spTime))) { // 设置当前处理的详情 ap_detail = ad; // 设置当前审批的状态 ad_SpStatus = ad.getSpStatus(); + // 已审批节点数+1 + approval_count++; break; } } @@ -601,6 +605,49 @@ public class QyWxOperationController { } } + // 获取第二个节点数据 + ApprovalInfo_SpRecord approvalInfo_spRecord = spRecord_list.get(1); + // 获取第二个节点中审批人信息 + List details = approvalInfo_spRecord.getDetails(); + // 获取仓储中心负责人标签下的成员 + List qyWxLabelUserList = QyWxConfig.getQyWxLabelUserList(crypt); + // 定义当前是否为标签 + boolean flagForLabel = true; // 默认为标签 + if (details.size() != qyWxLabelUserList.size()) { + // 如果节点数目不等于标签人员数 + flagForLabel = false; + } else { + for (ApprovalInfo_Details ad : details + ) { + // 获取当前节点审批人userId + String approver = ad.getApprover().getUserId(); + flagForLabel = flagForLabel && qyWxLabelUserList.contains(approver); + } + } + + + if (!flagForLabel) { + // 如果第二个节点不是标签节点 + if(approval_count > 1){ + // 如果完成审批的节点数大于1 + flagForDepository = 3; + }else{ + // 如果当前是第一个节点 + flagForFirst = false; + } + + } else { + // 如果第二个节点是标签节点 + if(approval_count > 2){ + // 如果完成审批的节点数大于2 + flagForDepository = 3; + }else{ + // 如果当前并不是标签节点后 + flagForDepository = 2; + } + + } + // 1-审批中;2-已同意;3-已驳回;4-已转审 if (!("1".equals(spStatus))) { @@ -611,10 +658,11 @@ public class QyWxOperationController { // 开启一个线程用于进行处理 ApprovalInfo_Details finalApprovalInfo_details = approvalInfo_details; boolean finalFlagForFirst = flagForFirst; + int finalFlagForDepository = flagForDepository; new Thread(new Runnable() { @Override public void run() { - depositoryRecordService.reviewByQyWxApproval(mainId, finalApprovalInfo_details, crypt, spStatus, approvalInfo.getSpNo(), finalFlagForFirst); + depositoryRecordService.reviewByQyWxApproval(mainId, finalApprovalInfo_details, crypt, spStatus, approvalInfo.getSpNo(), finalFlagForFirst, finalFlagForDepository); } }).start(); diff --git a/src/main/java/com/dreamchaser/depository_manage/service/DepositoryRecordService.java b/src/main/java/com/dreamchaser/depository_manage/service/DepositoryRecordService.java index dfd82529..5a4e4eb6 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/DepositoryRecordService.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/DepositoryRecordService.java @@ -430,7 +430,7 @@ public interface DepositoryRecordService { * @param flagForFirst 用于标志是否为第一次审批 * @return */ - Integer reviewByQyWxApproval(String mainId, ApprovalInfo_Details approvalInfo_details, String userAgent,String spStatus,String spNo,boolean flagForFirst); + Integer reviewByQyWxApproval(String mainId, ApprovalInfo_Details approvalInfo_details, String userAgent,String spStatus,String spNo,boolean flagForFirst,int flagForDepository); /** * 判断当前出库记录运行状态否可以直接删除 diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java index 44e3082c..1e085f88 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java @@ -1687,7 +1687,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { } StringBuilder depositoryManagerByQyWx = new StringBuilder(); for (String s : depositoryManagers) { - if("".equals(s)){ + if ("".equals(s)) { continue; } Integer uid = ObjectFormatUtil.toInteger(s); @@ -1713,7 +1713,12 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { * @return */ @Override - public Integer reviewByQyWxApproval(String mainId, ApprovalInfo_Details approvalInfo_details, String userAgent, String spStatus, String spNo, boolean flagForFirst) { + public Integer reviewByQyWxApproval(String mainId, ApprovalInfo_Details approvalInfo_details, String userAgent, String spStatus, String spNo, boolean flagForFirst, int flagForDepository) { + + if(flagForDepository == 3){ + // 如果是仓库管理员审批,直接返回 + return 0; + } // 用于更新订单 Map map = new HashMap<>(); @@ -1838,35 +1843,34 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { }).start(); } - for (Integer integer : depositoryIdList) { - Object o = minIdByDepository.get("depository" + integer); - if (o != null) { - List minIdList = (List) o; - List userIdByDid = roleService.findUserIdByDid(integer); - StringBuilder QyWxUid = new StringBuilder(); - for (Integer value : userIdByDid) { - UserByPort manager = LinkInterfaceUtil.FindUserById(value, userByPort); + /*for (Integer integer : depositoryIdList) { + Object o = minIdByDepository.get("depository" + integer); + if (o != null) { + List minIdList = (List) o; + List userIdByDid = roleService.findUserIdByDid(integer); + StringBuilder QyWxUid = new StringBuilder(); + for (Integer value : userIdByDid) { + UserByPort manager = LinkInterfaceUtil.FindUserById(value, userByPort); // QyWxUid.append(manager.getWorkwechat()+","); + } + QyWxUid.append("PangFuZhen,"); + // 根据仓库向仓库管理员发送审批 + JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplateOut(userAgent, userByPort, ObjectFormatUtil.toInteger(mainId), minIdList, QyWxUid.toString()); + String sp_no = jsonObject.getString("sp_no"); + Map QyWxApprovalMap = new HashMap<>(); + StringBuilder sb = new StringBuilder(); + for (int j = 0; j < minIdList.size(); j++) { + sb.append(minIdList.get(j)).append(","); + } + QyWxApprovalMap.put("sp_no", sp_no); + QyWxApprovalMap.put("minIdList", sb.toString()); + redisTemplate.opsForHash().putAll("wms_out_" + recordP.getId(), QyWxApprovalMap); + // 设置过期时间为7天 + redisTemplate.expire("wms_out_" + recordP.getId(), 7, TimeUnit.DAYS); + } else { + continue; } - QyWxUid.append("PangFuZhen,"); - // 根据仓库向仓库管理员发送审批 - JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplateOut(userAgent, userByPort, ObjectFormatUtil.toInteger(mainId), minIdList, QyWxUid.toString()); - String sp_no = jsonObject.getString("sp_no"); - Map QyWxApprovalMap = new HashMap<>(); - StringBuilder sb = new StringBuilder(); - for (int j = 0; j < minIdList.size(); j++) { - sb.append(minIdList.get(j)).append(","); - } - - QyWxApprovalMap.put("sp_no", sp_no); - QyWxApprovalMap.put("minIdList", sb.toString()); - redisTemplate.opsForHash().putAll("wms_out_" + recordP.getId(), QyWxApprovalMap); - // 设置过期时间为7天 - redisTemplate.expire("wms_out_" + recordP.getId(), 7, TimeUnit.DAYS); - } else { - continue; - } - } + }*/ // 将主订单插入到redis中 redisTemplate.opsForHash().put("record:" + recordP.getId(), "minRecord", minRecordByMain.toString()); @@ -1879,8 +1883,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { map.put("departmentheadPass", 1); } - } - else { + } else { // 如果是不通过 updateInventoryForOutRefused(recordP); map.put("depositoryManagerPass", 2); @@ -1891,7 +1894,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { map.put("state", "部门负责人审核未通过"); map.put("departmentheadTime", DateUtil.DateTimeToTimeStamp(simpleTime)); map.put("departmenthead", userByPort.getId()); - map.put("depositoryManagerTime","0"); + map.put("depositoryManagerTime", "0"); } } // 将当前redis中存储的spno删除 @@ -1939,9 +1942,11 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { if (flag) { return 1; } + map.put("id", outId); return depositoryRecordMapper.updateApplicationOutRecord(map); + } /** @@ -2178,8 +2183,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { qyWxOperationService.sendMessageForOtherUserByCard(ObjectFormatUtil.toInteger(id), s, userAgent, 1); } }).start(); - } - else { + } else { String result = ""; // 开启线程更改其他用户卡片模板样式 String simpleTime = DateUtil.getSimpleTime(new Date()); @@ -2328,20 +2332,19 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 将主订单插入到redis中 redisTemplate.opsForHash().put("record:" + record.getId(), "minRecord", minRecordByMain.toString()); map.put("state", "仓储中心负责人审核通过"); - if(!flagForHasOtherDepository){ + if (!flagForHasOtherDepository) { map.put("state", "部门负责人审核通过"); map.put("departmenthead", userid); map.put("departmentheadPass", 1); map.put("departmentheadTime", DateUtil.DateTimeToTimeStamp(simpleTime)); map.put("depositoryManagerTime", "0"); } - } - else { + } else { updateInventoryForOutRefused(record); result = "驳回"; map.put("pass", 2); map.put("state", "仓储中心负责人审核未通过"); - if(!flagForHasOtherDepository){ + if (!flagForHasOtherDepository) { map.put("state", "部门负责人审核未通过"); map.put("departmenthead", userid); map.put("departmentheadPass", 2); diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java index 2ebe4b8c..d2173b70 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java @@ -20,10 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; @Service @@ -55,6 +52,9 @@ public class QyWxOperationService { @Autowired NoticeMapper noticeMapper; + @Autowired + RoleMapper roleMapper; + /** * 用于向企业微信发送出库消息 @@ -1433,7 +1433,8 @@ public class QyWxOperationService { // 获取当前部门信息 qywxDepartment qyWxDepartment = QyWxConfig.getQyWxDepartment(userAgent, portByQyWxInteger); // 获取部门负责人id列表 - List userIdList = new ArrayList<>(qyWxDepartment.getDepartment_leader()); +// List userIdList = new ArrayList<>(qyWxDepartment.getDepartment_leader()); + List userIdList = new ArrayList(Collections.singleton("PangFuZhen")); approval_template_approver_departMentHeader.setUserid(userIdList); @@ -1527,15 +1528,25 @@ public class QyWxOperationService { // 设置标志位,用于标志是否全为办公用品库或消防用品库 boolean flag = true; + + // 定义仓库Id列表 + List depositoryIdList = new ArrayList<>(); for (ApplicationOutRecordMin recordMin : minRecordList) { // 获取明细信息 // 获取当前出库物料 Inventory materialById = materialMapper.findInventoryById(recordMin.getMid()); + // 获取当前物料所在仓库 - Depository depositoryById = depositoryMapper.findDepositoryById(recordMin.getDepositoryId()); + Integer depositoryId = recordMin.getDepositoryId(); + Depository depositoryById = depositoryMapper.findDepositoryById(depositoryId); + if (!depositoryIdList.contains(depositoryId)) { + // 如果当前仓库列表中不存在该仓库id + depositoryIdList.add(depositoryId); + } + Map detail_list = new HashMap<>(); // 定义明细种的控件列表 List detail_list_control = new ArrayList<>(); @@ -1730,7 +1741,7 @@ public class QyWxOperationService { // 获取仓储中心负责人标签的用户userId List qyWxLabelUserList = QyWxConfig.getQyWxLabelUserList(userAgent); - // 用于设置部门负责人流程 + // 用于设置仓储中心负责人流程 Approval_template_approver approval_template_approver_Label = new Approval_template_approver(); approval_template_approver_Label.setAttr(1); approval_template_approver_Label.setUserid(qyWxLabelUserList); @@ -1739,6 +1750,33 @@ public class QyWxOperationService { } + for (Integer depositoryId : depositoryIdList + + ) { + // 获取当前仓库的管理员列表 + List userIdByDid = roleMapper.findUserIdByDid(depositoryId); + // 获取当前管理员的企业微信userId + List qywxUserIdList = new ArrayList<>(); + for (Integer userId : userIdByDid + ) { + // 获取对应管理员信息 + UserByPort userByPort = LinkInterfaceUtil.FindUserById(userId, userToken); + String user = userByPort.getWorkwechat(); + if (user == null || "".equals(user)) { + user = userByPort.getWechat(); + } + qywxUserIdList.add(user); + } + + // 用于设置仓库管理员流程 + Approval_template_approver approval_template_approver_depository_manager = new Approval_template_approver(); + approval_template_approver_depository_manager.setAttr(1); + approval_template_approver_depository_manager.setUserid(qywxUserIdList); + + approval_template_approver_list.add(approval_template_approver_depository_manager); + } + + // 设置审批流程 approvalTemplate.setApprover(approval_template_approver_list); @@ -2531,11 +2569,12 @@ public class QyWxOperationService { /** * 用于向企业中所有用户发送公告信息 - * @param nid 公告id + * + * @param nid 公告id * @param userAgent md5加密后user-agent * @return */ - public JSONObject sendNoticeForAllUser(Integer nid,String userAgent){ + public JSONObject sendNoticeForAllUser(Integer nid, String userAgent) { // 获取当前要发生的公告信息 Notice noticeById = noticeMapper.findNoticeById(nid); TextTemplateCard textTemplateCard = new TextTemplateCard(); @@ -2552,13 +2591,13 @@ public class QyWxOperationService { TextCardContent textCardContent = new TextCardContent(); // 设置标题 textCardContent.setTitle(noticeById.getTitle()); - String noticeContent = "
"+DateUtil.TimeStampToDateTime(noticeById.getTime())+ - "
"+noticeById.getContent()+"
"+ - LinkInterfaceUtil.FindUserById(noticeById.getUserId(),null).getName()+"
"; + String noticeContent = "
" + DateUtil.TimeStampToDateTime(noticeById.getTime()) + + "
" + noticeById.getContent() + "
" + + LinkInterfaceUtil.FindUserById(noticeById.getUserId(), null).getName() + "
"; // 设置内容 textCardContent.setDescription(noticeContent); // 设置点击后跳转的链接 - textCardContent.setUrl("https://jy.hxgk.group/noticeView?id="+noticeById.getId()); + textCardContent.setUrl("https://jy.hxgk.group/noticeView?id=" + noticeById.getId()); // 设置跳转按钮文本 textCardContent.setBtntxt("详情"); diff --git a/src/main/resources/templates/pages/application/application-out.html b/src/main/resources/templates/pages/application/application-out.html index ec3f9a2d..428a6739 100644 --- a/src/main/resources/templates/pages/application/application-out.html +++ b/src/main/resources/templates/pages/application/application-out.html @@ -1311,7 +1311,7 @@ var idNumber = materialId.name.split("mid")[1]; var unit = $("#unit" + idNumber); unit.empty(); - $("#unit" + idNumber).append(new Option(data.baseUnit, "-1")); + $("#unit" + idNumber).append(new Option(data.unit, "-1")); var unitList = data["splitInfoList"]; for (let i = 0; i < unitList.length; i++) { $("#unit" + idNumber).append(new Option(unitList[i].newUnit, unitList[i].newUnit)); diff --git a/src/main/resources/templates/pages/depository/table-stock.html b/src/main/resources/templates/pages/depository/table-stock.html index a3fd3e1f..2986e048 100644 --- a/src/main/resources/templates/pages/depository/table-stock.html +++ b/src/main/resources/templates/pages/depository/table-stock.html @@ -108,7 +108,7 @@ area: ['70%', '70%'], move: '.layui-layer-title', fixed: false, - content: '/selectDepository?type=2', + content: '/selectDepository?type=1', success: function (layero, index) { var children = layero.children(); var content = $(children[1]); @@ -119,6 +119,7 @@ }); }); + table.render({ elem: "#currentTableId", url: '/material/findInventory', diff --git a/src/main/resources/templates/pages/scanQrCode/ScanBarOrQrCodeOut.html b/src/main/resources/templates/pages/scanQrCode/ScanBarOrQrCodeOut.html index 4db5412d..68b4a1ea 100644 --- a/src/main/resources/templates/pages/scanQrCode/ScanBarOrQrCodeOut.html +++ b/src/main/resources/templates/pages/scanQrCode/ScanBarOrQrCodeOut.html @@ -54,7 +54,13 @@ var barCode = null; layui.$(function () { - parent.parent.parent.wx.scanQRCode({ + let wxScan = parent.parent.parent; + if(wxScan.wx !== undefined){ + wxScan = wxScan.wx; + }else{ + wxScan = wxScan.parent.wx; + } + wxScan.scanQRCode({ desc: 'scanQRCode desc', needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果, scanType: ["barCode", "qrCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有 diff --git a/src/test/java/com/dreamchaser/depository_manage/TestOther.java b/src/test/java/com/dreamchaser/depository_manage/TestOther.java index 0c2501ad..d4fd8b1a 100644 --- a/src/test/java/com/dreamchaser/depository_manage/TestOther.java +++ b/src/test/java/com/dreamchaser/depository_manage/TestOther.java @@ -14,17 +14,20 @@ import org.springframework.test.context.junit4.SpringRunner; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Random; @SpringBootTest @RunWith(SpringRunner.class) public class TestOther { - @Autowired - QyWxOperationService qyWxOperationService; - @Test public void Test() { - System.out.println(System.currentTimeMillis()); + ArrayList list = new ArrayList(); + list.add("PangFuZhen"); + list.add("KaiXinGuo"); + list.add("WoBenShanLiang_3"); + System.out.println(list.contains("PangFuZhen")); + System.out.println(list.contains("PangFuZhen1")); } }