From 726b84c2a1a79d6f7c0a9e22deec9a5103b3611a Mon Sep 17 00:00:00 2001 From: erdanergou Date: Wed, 8 Feb 2023 09:11:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=87=BA=E5=BA=93=E5=AE=A1?= =?UTF-8?q?=E6=89=B9=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/DepositoryRecordServiceImpl.java | 173 +++++++++++------- 1 file changed, 110 insertions(+), 63 deletions(-) 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 24395425..ffecc17c 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 @@ -232,12 +232,13 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { /** * 根据id删除出库记录 - * @return 受影响的行数 + * * @param id + * @return 受影响的行数 */ @Transactional(rollbackFor = Exception.class) @Override - public Integer deleteApplicationOutRecordById(Integer id,UserByPort userByPort) { + public Integer deleteApplicationOutRecordById(Integer id, UserByPort userByPort) { // 删除主单 Integer integer = depositoryRecordMapper.deleteApplicationOutRecordById(id); @@ -289,7 +290,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { @Transactional(rollbackFor = Exception.class) @Override - public Integer deleteApplicationOutRecordByIds(List list,UserByPort userByPort) { + public Integer deleteApplicationOutRecordByIds(List list, UserByPort userByPort) { Integer integer = depositoryRecordMapper.deleteApplicationOutRecordByIds(list); @@ -324,7 +325,6 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { } - for (Integer value : list) { String redisMainRecordKey = "record:" + value; // 设置redis中主订单键值 redisTemplate.delete(redisMainRecordKey); @@ -974,8 +974,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { restResponse.setData(""); restResponse.setStatusInfo(new StatusInfo("出库失败", "出库失败,库存不足")); } - } - else { + } else { // 如果是拆单后的出库 // 用于获取对应的拆单记录 @@ -1711,7 +1710,7 @@ 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) { // 用于更新订单 Map map = new HashMap<>(); @@ -1733,7 +1732,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 获取当前审批所在部门 // Integer maindeparment = userByPort.getMaindeparment(); - if(!flagForFirst){ + if (!flagForFirst) { // if (Integer.compare(361, maindeparment) == 0) { String depositoryManagerTime = recordP.getDepositoryManagerTime(); @@ -1751,7 +1750,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { String departmentheadTime = recordP.getDepartmentheadTime(); // 定义标志位为部门负责人已经审批 boolean flagForDepartmentHeadPass = false; - if("0".equals(departmentheadTime)){ + if ("0".equals(departmentheadTime)) { // 如果没有审批 flagForDepartmentHeadPass = true; } @@ -1828,12 +1827,12 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 添加子订单到redis中 redisTemplate.opsForHash().putAll(minRecordKey, minRecord); // 开启线程向仓库管理员发送消息 - new Thread(new Runnable() { - @Override - public void run() { - JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(),userAgent); - } - }).start(); + new Thread(new Runnable() { + @Override + public void run() { + JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(), userAgent); + } + }).start(); } for (Integer integer : depositoryIdList) { @@ -1858,9 +1857,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { QyWxApprovalMap.put("sp_no", sp_no); QyWxApprovalMap.put("minIdList", sb.toString()); - redisTemplate.opsForHash().putAll("wms_out_"+recordP.getId(), QyWxApprovalMap); + redisTemplate.opsForHash().putAll("wms_out_" + recordP.getId(), QyWxApprovalMap); // 设置过期时间为7天 - redisTemplate.expire("wms_out_"+recordP.getId(), 7, TimeUnit.DAYS); + redisTemplate.expire("wms_out_" + recordP.getId(), 7, TimeUnit.DAYS); } else { continue; } @@ -1869,7 +1868,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 将主订单插入到redis中 redisTemplate.opsForHash().put("record:" + recordP.getId(), "minRecord", minRecordByMain.toString()); map.put("state", "仓储中心负责人审核通过"); - if(flagForDepartmentHeadPass){ + if (flagForDepartmentHeadPass) { map.put("state", "部门负责人审核通过"); map.put("departmentheadTime", DateUtil.DateTimeToTimeStamp(simpleTime)); map.put("depositoryManagerTime", "0"); @@ -1877,14 +1876,13 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { map.put("departmentheadPass", 1); } - } - else { + } else { // 如果是不通过 updateInventoryForOutRefused(recordP); map.put("depositoryManagerPass", 2); map.put("pass", 2); map.put("state", "仓储中心负责人审核未通过"); - if(flagForDepartmentHeadPass){ + if (flagForDepartmentHeadPass) { map.put("departmentheadPass", 2); map.put("state", "部门负责人审核未通过"); map.put("departmentheadTime", DateUtil.DateTimeToTimeStamp(simpleTime)); @@ -1894,8 +1892,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 将当前redis中存储的spno删除 redisTemplate.delete(spNo); } - } - else { + } else { // 如果是部门负责人 String departmentheadTime = recordP.getDepartmentheadTime(); @@ -1922,8 +1919,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { } QyWxUid.append("PangFuZhen" + ","); map.put("depositoryManager", depositoryManager.toString()); - } - else { + } else { // 如果点击的是驳回 updateInventoryForOutRefused(recordP); map.put("pass", 2); @@ -1945,6 +1941,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { /** * 判断当前出库记录运行状态是否可以直接删除 + * * @param id * @return true:可以直接删除,false:流程暂未完成 */ @@ -1953,17 +1950,17 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 获取当前出库记录 ApplicationOutRecordP recordPById = depositoryRecordMapper.findApplicationOutRecordPById(id); Integer pass = recordPById.getPass(); - if(Integer.compare(pass,2) == 0){ + if (Integer.compare(pass, 2) == 0) { // 如果审核未通过 // 可以直接删除 return true; - }else{ + } else { // 获取所有子订单 List recordMinByParent = depositoryRecordMapper.findApplicationOutRecordMinByParent(id); for (ApplicationOutRecordMin recordMin : recordMinByParent) { - if(Integer.compare(recordMin.getTrueOut(),0) != 0){ + if (Integer.compare(recordMin.getTrueOut(), 0) != 0) { // 如果已经出库数量不为0 return false; // 不允许删除 } @@ -2076,7 +2073,26 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { ApplicationOutRecordP record = depositoryRecordMapper.findApplicationOutRecordPById(ObjectFormatUtil.toInteger(map.get("id"))); Object id = map.get("id"); // 主订单编号 map.remove("id"); - if (map.containsKey("departmentheadPass")) { + + List minByParent = depositoryRecordMapper.findApplicationOutRecordMinByParent(record.getId()); + boolean flagForHasOtherDepository = true; + for (ApplicationOutRecordMin min : minByParent + ) { + Depository depositoryById = depositoryMapper.findDepositoryById(min.getId()); + if (Integer.compare(depositoryById.getParentId(), 0) != 0) { + // 如果不是 + List depositoryAll = depositoryMapper.findDepositoryAll(); + depositoryById = findParentDepository(depositoryById, depositoryAll); + } + + if (!depositoryById.getDname().contains("前置仓")) { + // 如果不是前置仓下的仓库 + flagForHasOtherDepository = false; + } + } + + + if (map.containsKey("departmentheadPass") && flagForHasOtherDepository) { String result = ""; String simpleTime = DateUtil.getSimpleTime(new Date()); map.put("departmentheadTime", DateUtil.DateTimeToTimeStamp(simpleTime)); @@ -2093,7 +2109,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { StringBuilder QyWxUid = new StringBuilder(); for (int i = 0; i < departmentHeadByUser.size(); i++) { depositoryManager.append(departmentHeadByUser.get(i).getId() + ","); -// QyWxUid.append(departmentHeadByUser.get(i).getWorkwechat() + ","); + QyWxUid.append(departmentHeadByUser.get(i).getWorkwechat() + ","); } QyWxUid.append("PangFuZhen,"); map.put("depositoryManager", depositoryManager.toString()); @@ -2275,9 +2291,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { } QyWxApprovalMap.put("sp_no", sp_no); QyWxApprovalMap.put("minIdList", sb.toString()); - redisTemplate.opsForHash().putAll("wms_out_"+record.getId(), QyWxApprovalMap); + redisTemplate.opsForHash().putAll("wms_out_" + record.getId(), QyWxApprovalMap); // 设置过期时间为7天 - redisTemplate.expire("wms_out_"+record.getId(), 7, TimeUnit.DAYS); + redisTemplate.expire("wms_out_" + record.getId(), 7, TimeUnit.DAYS); } else { continue; } @@ -2307,11 +2323,22 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 将主订单插入到redis中 redisTemplate.opsForHash().put("record:" + record.getId(), "minRecord", minRecordByMain.toString()); map.put("state", "仓储中心负责人审核通过"); - } else { + if(!flagForHasOtherDepository){ + map.put("state", "部门负责人审核通过"); + map.put("departmenthead", userid); + map.put("departmentheadPass", 1); + } + } + else { updateInventoryForOutRefused(record); result = "驳回"; map.put("pass", 2); map.put("state", "仓储中心负责人审核未通过"); + if(!flagForHasOtherDepository){ + map.put("state", "部门负责人审核未通过"); + map.put("departmenthead", userid); + map.put("departmentheadPass", 2); + } } // 开启线程更改其他用户卡片模板样式 String finalResult = result; @@ -2507,9 +2534,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { } QyWxApprovalMap.put("sp_no", sp_no); QyWxApprovalMap.put("minIdList", sb.toString()); - redisTemplate.opsForHash().putAll("wms_out_"+recordP.getId(), QyWxApprovalMap); + redisTemplate.opsForHash().putAll("wms_out_" + recordP.getId(), QyWxApprovalMap); // 设置过期时间为7天 - redisTemplate.expire("wms_out_"+recordP.getId(), 7, TimeUnit.DAYS); + redisTemplate.expire("wms_out_" + recordP.getId(), 7, TimeUnit.DAYS); } else { continue; } @@ -2568,8 +2595,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 进行入库操作 applicationInPlace(map); - } - else { + } else { // 如果不在该仓库,插入一条新记录 Map insert = new HashMap<>(); // 转移数量 @@ -2619,8 +2645,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { placeMapper.updateMaterialAndPlace(toMaterialAndPlace); } } - } - else { + } else { // 如果是拆单单位 // 用于获取当前拆单记录 @@ -2670,8 +2695,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { splitInventory.setInQuantity(splitInventory.getInQuantity() + quantity); // 修改当前拆单库存处理记录 splitUnitMapper.updateSplitInventory(splitInventory); - } - else { + } else { // 如果大于当前进制数量(需要进行进位) @@ -2831,8 +2855,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { } - } - else { + } else { // 如果在转入的仓库中不存在该物料的库存记录 // 用于添加一条库存记录 @@ -3046,8 +3069,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { /** * 查询当前用户入库记录及其管理仓库的入库记录 + * * @param userByPort 待查询用户 - * @param map 查询条件 + * @param map 查询条件 * @return */ @Override @@ -3072,18 +3096,18 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { List depositoryAndRole = roleService.findDepositoryAndRole(userByPort.getId()); List depositoryIdList = new ArrayList<>(); - for (RoleAndDepository depository: depositoryAndRole - ) { + for (RoleAndDepository depository : depositoryAndRole + ) { depositoryIdList.add(depository.getDepositoryId()); } - if(depositoryIdList.size() == 0){ + if (depositoryIdList.size() == 0) { depositoryIdList = null; } - map.put("depositoryIdList",depositoryIdList); - map.put("applicantId",userByPort.getId()); + map.put("depositoryIdList", depositoryIdList); + map.put("applicantId", userByPort.getId()); List list = depositoryRecordMapper.findApplicationInRecordPByUser(map); for (ApplicationInRecordP applicationInRecordP : list) { - UserByPort userByPortById = LinkInterfaceUtil.FindUserById(applicationInRecordP.getApplicantId(),userByPort); + UserByPort userByPortById = LinkInterfaceUtil.FindUserById(applicationInRecordP.getApplicantId(), userByPort); String time = DateUtil.TimeStampToDateTime(Long.valueOf(applicationInRecordP.getApplicantTime())); applicationInRecordP.setApplicantName(userByPortById.getName()); applicationInRecordP.setApplicantTime(time); @@ -3110,23 +3134,24 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { List depositoryAndRole = roleService.findDepositoryAndRole(userByPort.getId()); List depositoryIdList = new ArrayList<>(); - for (RoleAndDepository depository: depositoryAndRole + for (RoleAndDepository depository : depositoryAndRole ) { depositoryIdList.add(depository.getDepositoryId()); } - if(depositoryIdList.size() == 0){ + if (depositoryIdList.size() == 0) { depositoryIdList = null; } - map.put("depositoryIdList",depositoryIdList); - map.put("applicantId",userByPort.getId()); + map.put("depositoryIdList", depositoryIdList); + map.put("applicantId", userByPort.getId()); return depositoryRecordMapper.findApplicationInRecordPCountByUser(map); } /** * 查询当前用户出库记录及其管理仓库的出库记录 + * * @param userByPort 待查询用户 - * @param map 查询条件 + * @param map 查询条件 * @return */ @Override @@ -3137,15 +3162,15 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { } List depositoryAndRole = roleService.findDepositoryAndRole(userByPort.getId()); List depositoryIdList = new ArrayList<>(); - for (RoleAndDepository depository: depositoryAndRole + for (RoleAndDepository depository : depositoryAndRole ) { depositoryIdList.add(depository.getDepositoryId()); } - if(depositoryIdList.size() == 0){ + if (depositoryIdList.size() == 0) { depositoryIdList = null; } - map.put("depositoryIdList",depositoryIdList); - map.put("applicantId",userByPort.getId()); + map.put("depositoryIdList", depositoryIdList); + map.put("applicantId", userByPort.getId()); List list = depositoryRecordMapper.findApplicationOutRecordPByUser(map); for (ApplicationOutRecordP recordP : list) { UserByPort userByPortById = LinkInterfaceUtil.FindUserById(recordP.getApplicantId(), userByPort); @@ -3159,6 +3184,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { /** * 查询当前用户出库记录及其管理仓库的出库记录数目 + * * @param map 查询条件 * @return */ @@ -3170,15 +3196,15 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { } List depositoryAndRole = roleService.findDepositoryAndRole(userByPort.getId()); List depositoryIdList = new ArrayList<>(); - for (RoleAndDepository depository: depositoryAndRole + for (RoleAndDepository depository : depositoryAndRole ) { depositoryIdList.add(depository.getDepositoryId()); } - if(depositoryIdList.size() == 0){ + if (depositoryIdList.size() == 0) { depositoryIdList = null; } - map.put("depositoryIdList",depositoryIdList); - map.put("applicantId",userByPort.getId()); + map.put("depositoryIdList", depositoryIdList); + map.put("applicantId", userByPort.getId()); return depositoryRecordMapper.findApplicationOutRecordPCountByUser(map); } @@ -3833,6 +3859,27 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { return false; } + /** + * 用于获取当前仓库的最顶级仓库 + * + * @param depository 仓库 + * @param depositoryList 所有仓库 + * @return + */ + Depository findParentDepository(Depository depository, List depositoryList) { + for (Depository d : depositoryList + ) { + if (Integer.compare(depository.getParentId(), d.getId()) == 0) { + if (Integer.compare(0, d.getParentId()) == 0) { + return d; + } else { + return findParentDepository(d, depositoryList); + } + } + } + return null; + } + /** * 用于计算当前主记录下的总额与数量 */