diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java index 08298839..2454ac7d 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java @@ -236,8 +236,12 @@ public class DepositoryRecordController { Map result = new HashMap<>(); // 定义列表用于储存入库单id List recordIds = new ArrayList<>(); - // 定义列表用于存储入库仓库id + // 定义列表用于存储入库物料类型id List mtIdList = new ArrayList<>(); + // 定义列表用于存储入库仓库id + List depositoryIdList = new ArrayList<>(); + + List typeList = new ArrayList<>(); if (params.size() < 1 && map.size() > 3) { @@ -250,6 +254,8 @@ public class DepositoryRecordController { integer += addSplitInventory; recordIds.add(ObjectFormatUtil.toInteger(map.get("applicationInId"))); mtIdList.add(ObjectFormatUtil.toLong(map.get("mtId"))); + typeList.add((String) map.get("inType")); + depositoryIdList.add(ObjectFormatUtil.toInteger(map.get("depositoryId"))); } } else { // 获取库位id @@ -259,12 +265,16 @@ public class DepositoryRecordController { integer += depositoryRecordService.applicationInPlace(map, false); recordIds.add(ObjectFormatUtil.toInteger(map.get("applicationInId"))); mtIdList.add(ObjectFormatUtil.toLong(map.get("mtId"))); + typeList.add((String) map.get("inType")); + depositoryIdList.add(ObjectFormatUtil.toInteger(map.get("depositoryId"))); } else { // 如果具体到库位 Integer flag = depositoryRecordService.applicationInPlace(map, false); if (flag != -1) { integer += flag; recordIds.add(ObjectFormatUtil.toInteger(map.get("applicationInId"))); mtIdList.add(ObjectFormatUtil.toLong(map.get("mtId"))); + typeList.add((String) map.get("inType")); + depositoryIdList.add(ObjectFormatUtil.toInteger(map.get("depositoryId"))); } } } @@ -294,6 +304,8 @@ public class DepositoryRecordController { integer += addSplitInventory; recordIds.add(ObjectFormatUtil.toInteger(insert.get("applicationInId"))); mtIdList.add(ObjectFormatUtil.toLong(map.get("mtId"))); + typeList.add((String) map.get("inType")); + depositoryIdList.add(ObjectFormatUtil.toInteger(map.get("depositoryId"))); successMsg.add(insert); } else { errMsg.add(insert); @@ -309,6 +321,8 @@ public class DepositoryRecordController { successMsg.add(insert); recordIds.add(ObjectFormatUtil.toInteger(insert.get("applicationInId"))); mtIdList.add(ObjectFormatUtil.toLong(map.get("mtId"))); + typeList.add((String) map.get("inType")); + depositoryIdList.add(ObjectFormatUtil.toInteger(map.get("depositoryId"))); } } else {// 如果具体到库位 @@ -321,6 +335,8 @@ public class DepositoryRecordController { integer += flag; recordIds.add(ObjectFormatUtil.toInteger(insert.get("applicationInId"))); mtIdList.add(ObjectFormatUtil.toLong(map.get("mtId"))); + typeList.add((String) map.get("inType")); + depositoryIdList.add(ObjectFormatUtil.toInteger(map.get("depositoryId"))); } } @@ -335,6 +351,8 @@ public class DepositoryRecordController { successMsg.add(map); recordIds.add(ObjectFormatUtil.toInteger(map.get("applicationInId"))); mtIdList.add(ObjectFormatUtil.toLong(map.get("mtId"))); + typeList.add((String) map.get("inType")); + depositoryIdList.add(ObjectFormatUtil.toInteger(map.get("depositoryId"))); } else { errMsg.add(map); } @@ -351,6 +369,8 @@ public class DepositoryRecordController { successMsg.add(map); recordIds.add(ObjectFormatUtil.toInteger(map.get("applicationInId"))); mtIdList.add(ObjectFormatUtil.toLong(map.get("mtId"))); + typeList.add((String) map.get("inType")); + depositoryIdList.add(ObjectFormatUtil.toInteger(map.get("depositoryId"))); } } else { // 如果具体到库位 @@ -362,6 +382,8 @@ public class DepositoryRecordController { integer += flag; recordIds.add(ObjectFormatUtil.toInteger(map.get("applicationInId"))); mtIdList.add(ObjectFormatUtil.toLong(map.get("mtId"))); + typeList.add((String) map.get("inType")); + depositoryIdList.add(ObjectFormatUtil.toInteger(map.get("depositoryId"))); } } } @@ -375,28 +397,47 @@ public class DepositoryRecordController { @Override public void run() { Map> MtIdToRecordId = new HashMap<>(); + Map> depositoryIdToRecordId = new HashMap<>(); for (int i = 0; i < recordIds.size(); i++) { Integer recordId = recordIds.get(i); if (recordId != null) { // 如果当前id不是空 获取对应的入库仓库id - Long mtId = mtIdList.get(i); - // 将对应仓库与订单id添加映射关系 - List integers = MtIdToRecordId.get(mtId); - if (integers != null) { - // 如果有对应关系 - integers.add(recordId); - } else { - // 如果没有 - integers = new ArrayList<>(); - integers.add(recordId); - MtIdToRecordId.put(mtId, integers); + String type = typeList.get(i); + if("mt".equals(type)){ + Long mtId = mtIdList.get(i); + // 将对应仓库与订单id添加映射关系 + List integers = MtIdToRecordId.get(mtId); + if (integers != null) { + // 如果有对应关系 + integers.add(recordId); + } else { + // 如果没有 + integers = new ArrayList<>(); + integers.add(recordId); + MtIdToRecordId.put(mtId, integers); + } + }else{ + Integer did = depositoryIdList.get(i); + // 将对应仓库与订单id添加映射关系 + List integers = depositoryIdToRecordId.get(did); + if (integers != null) { + // 如果有对应关系 + integers.add(recordId); + } else { + // 如果没有 + integers = new ArrayList<>(); + integers.add(recordId); + depositoryIdToRecordId.put(did, integers); + } } + + } } // 获取遍历器 Iterator iterator = MtIdToRecordId.keySet().iterator(); if (iterator.hasNext()) { - // 获取当前仓库 + // 获取当前类别 Long next = iterator.next(); // 获取入库到当前仓库的订单id List integerList = MtIdToRecordId.get(next); @@ -424,6 +465,37 @@ public class DepositoryRecordController { redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); } + + Iterator iterator1 = depositoryIdToRecordId.keySet().iterator(); + if (iterator1.hasNext()) { + // 获取当前类别 + Integer next = iterator1.next(); + // 获取入库到当前仓库的订单id + List integerList = depositoryIdToRecordId.get(next); + // 获取当前类型的管理员 + List materialTypeIdForIn = roleService.findRoleAndDepositoryByDid(next); + // 用于存储当前仓库的管理员企业微信userId + StringBuilder sb = new StringBuilder(); + for (RoleAndDepository mt : materialTypeIdForIn + ) { + // 获取管理员数据 + UserByPort userByPort = LinkInterfaceUtil.FindUserById(mt.getUserId(), userToken); + String workwechat = userByPort.getWorkwechat(); + if (workwechat == null || "".equals(workwechat)) { + workwechat = userByPort.getWechat(); + } + sb.append(workwechat).append(","); + } + JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateIn(crypt, userToken, integerList, sb.toString()); + String sp_no = jsonObject.getString("sp_no"); + Map QyWxApprovalMap = new HashMap<>(); + QyWxApprovalMap.put("sp_no", sp_no); + QyWxApprovalMap.put("mainId", integerList.toString()); + redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap); + // 设置过期为7天 + redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); + + } } }).start(); if (integer != 0 && params.size() < 1 && integer != -1) { @@ -1236,16 +1308,136 @@ public class DepositoryRecordController { String type = (String) map.get("type"); Integer success = 0; if ("in".equals(type)) { + List typeList = new ArrayList<>(); + List mtIdList = new ArrayList<>(); + List depositoryIdList = new ArrayList<>(); + List recordIds = new ArrayList<>(); String unit = (String) (map.get("unit")); if (!"-1".equals(unit)) { map.put("type", "in"); Integer addSplitInventory = splitUnitService.addSplitInventory(map); if (addSplitInventory != -1) { success += addSplitInventory; + recordIds.add(ObjectFormatUtil.toInteger(map.get("applicationInId"))); + mtIdList.add(ObjectFormatUtil.toLong(map.get("mtId"))); + typeList.add((String) map.get("inType")); + depositoryIdList.add(ObjectFormatUtil.toInteger(map.get("depositoryId"))); + } } else { success += depositoryRecordService.applicationInPlace(map, false); + recordIds.add(ObjectFormatUtil.toInteger(map.get("applicationInId"))); + mtIdList.add(ObjectFormatUtil.toLong(map.get("mtId"))); + typeList.add((String) map.get("inType")); + depositoryIdList.add(ObjectFormatUtil.toInteger(map.get("depositoryId"))); } + // 开启一个线程用于发送入库申请 + new Thread(new Runnable() { + @Override + public void run() { + Map> MtIdToRecordId = new HashMap<>(); + Map> depositoryIdToRecordId = new HashMap<>(); + for (int i = 0; i < recordIds.size(); i++) { + Integer recordId = recordIds.get(i); + if (recordId != null) { + // 如果当前id不是空 获取对应的入库仓库id + String type = typeList.get(i); + if("mt".equals(type)){ + Long mtId = mtIdList.get(i); + // 将对应仓库与订单id添加映射关系 + List integers = MtIdToRecordId.get(mtId); + if (integers != null) { + // 如果有对应关系 + integers.add(recordId); + } else { + // 如果没有 + integers = new ArrayList<>(); + integers.add(recordId); + MtIdToRecordId.put(mtId, integers); + } + }else{ + Integer did = depositoryIdList.get(i); + // 将对应仓库与订单id添加映射关系 + List integers = depositoryIdToRecordId.get(did); + if (integers != null) { + // 如果有对应关系 + integers.add(recordId); + } else { + // 如果没有 + integers = new ArrayList<>(); + integers.add(recordId); + depositoryIdToRecordId.put(did, integers); + } + } + + + } + } + // 获取遍历器 + Iterator iterator = MtIdToRecordId.keySet().iterator(); + if (iterator.hasNext()) { + // 获取当前类别 + Long next = iterator.next(); + // 获取入库到当前仓库的订单id + List integerList = MtIdToRecordId.get(next); + // 获取当前类型的管理员 + List materialTypeIdForIn = roleService.findRoleAndMaterialTypeByMtId(next); + // 用于存储当前仓库的管理员企业微信userId + StringBuilder sb = new StringBuilder(); + for (RoleAndMaterialType mt : materialTypeIdForIn + ) { + // 获取管理员数据 + UserByPort userByPort = LinkInterfaceUtil.FindUserById(mt.getUid(), userToken); + String workwechat = userByPort.getWorkwechat(); + if (workwechat == null || "".equals(workwechat)) { + workwechat = userByPort.getWechat(); + } + sb.append(workwechat).append(","); + } + JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateIn(crypt, userToken, integerList, sb.toString()); + String sp_no = jsonObject.getString("sp_no"); + Map QyWxApprovalMap = new HashMap<>(); + QyWxApprovalMap.put("sp_no", sp_no); + QyWxApprovalMap.put("mainId", integerList.toString()); + redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap); + // 设置过期为7天 + redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); + + } + + Iterator iterator1 = depositoryIdToRecordId.keySet().iterator(); + if (iterator1.hasNext()) { + // 获取当前类别 + Integer next = iterator1.next(); + // 获取入库到当前仓库的订单id + List integerList = depositoryIdToRecordId.get(next); + // 获取当前类型的管理员 + List materialTypeIdForIn = roleService.findRoleAndDepositoryByDid(next); + // 用于存储当前仓库的管理员企业微信userId + StringBuilder sb = new StringBuilder(); + for (RoleAndDepository mt : materialTypeIdForIn + ) { + // 获取管理员数据 + UserByPort userByPort = LinkInterfaceUtil.FindUserById(mt.getUserId(), userToken); + String workwechat = userByPort.getWorkwechat(); + if (workwechat == null || "".equals(workwechat)) { + workwechat = userByPort.getWechat(); + } + sb.append(workwechat).append(","); + } + JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateIn(crypt, userToken, integerList, sb.toString()); + String sp_no = jsonObject.getString("sp_no"); + Map QyWxApprovalMap = new HashMap<>(); + QyWxApprovalMap.put("sp_no", sp_no); + QyWxApprovalMap.put("mainId", integerList.toString()); + redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap); + // 设置过期为7天 + redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); + + } + } + }).start(); + } else if ("out".equals(type)) { // 获取部门负责人 List departmentHeadByUsers = LinkInterfaceUtil.findDepartmentHeadByUser(userToken); @@ -1344,6 +1536,10 @@ public class DepositoryRecordController { StringBuilder errMsg = new StringBuilder(); Integer id = 0; if ("in".equals(type)) { + List typeList = new ArrayList<>(); + List mtIdList = new ArrayList<>(); + List depositoryIdList = new ArrayList<>(); + List recordIds = new ArrayList<>(); for (int i = 0; i < mids.size(); i++) { // 获取库位 String placeCode = placeCodes.get(i); @@ -1375,12 +1571,129 @@ public class DepositoryRecordController { Integer addSplitInventory = splitUnitService.addSplitInventory(inRecord); if (addSplitInventory != -1) { success += addSplitInventory; + recordIds.add(ObjectFormatUtil.toInteger(inRecord.get("applicationInId"))); + mtIdList.add(ObjectFormatUtil.toLong(inRecord.get("mtId"))); + typeList.add((String) inRecord.get("inType")); + depositoryIdList.add(ObjectFormatUtil.toInteger(inRecord.get("depositoryId"))); } - } else { + } + else { success += depositoryRecordService.applicationInPlace(inRecord, false); + recordIds.add(ObjectFormatUtil.toInteger(inRecord.get("applicationInId"))); + mtIdList.add(ObjectFormatUtil.toLong(inRecord.get("mtId"))); + typeList.add((String) inRecord.get("inType")); + depositoryIdList.add(ObjectFormatUtil.toInteger(inRecord.get("depositoryId"))); } + } - } else if ("out".equals(type)) { + // 开启一个线程用于发送入库申请 + new Thread(new Runnable() { + @Override + public void run() { + Map> MtIdToRecordId = new HashMap<>(); + Map> depositoryIdToRecordId = new HashMap<>(); + for (int i = 0; i < recordIds.size(); i++) { + Integer recordId = recordIds.get(i); + if (recordId != null) { + // 如果当前id不是空 获取对应的入库仓库id + String type = typeList.get(i); + if("mt".equals(type)){ + Long mtId = mtIdList.get(i); + // 将对应仓库与订单id添加映射关系 + List integers = MtIdToRecordId.get(mtId); + if (integers != null) { + // 如果有对应关系 + integers.add(recordId); + } else { + // 如果没有 + integers = new ArrayList<>(); + integers.add(recordId); + MtIdToRecordId.put(mtId, integers); + } + }else{ + Integer did = depositoryIdList.get(i); + // 将对应仓库与订单id添加映射关系 + List integers = depositoryIdToRecordId.get(did); + if (integers != null) { + // 如果有对应关系 + integers.add(recordId); + } else { + // 如果没有 + integers = new ArrayList<>(); + integers.add(recordId); + depositoryIdToRecordId.put(did, integers); + } + } + + + } + } + // 获取遍历器 + Iterator iterator = MtIdToRecordId.keySet().iterator(); + if (iterator.hasNext()) { + // 获取当前类别 + Long next = iterator.next(); + // 获取入库到当前仓库的订单id + List integerList = MtIdToRecordId.get(next); + // 获取当前类型的管理员 + List materialTypeIdForIn = roleService.findRoleAndMaterialTypeByMtId(next); + // 用于存储当前仓库的管理员企业微信userId + StringBuilder sb = new StringBuilder(); + for (RoleAndMaterialType mt : materialTypeIdForIn + ) { + // 获取管理员数据 + UserByPort userByPort = LinkInterfaceUtil.FindUserById(mt.getUid(), userToken); + String workwechat = userByPort.getWorkwechat(); + if (workwechat == null || "".equals(workwechat)) { + workwechat = userByPort.getWechat(); + } + sb.append(workwechat).append(","); + } + JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateIn(crypt, userToken, integerList, sb.toString()); + String sp_no = jsonObject.getString("sp_no"); + Map QyWxApprovalMap = new HashMap<>(); + QyWxApprovalMap.put("sp_no", sp_no); + QyWxApprovalMap.put("mainId", integerList.toString()); + redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap); + // 设置过期为7天 + redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); + + } + + Iterator iterator1 = depositoryIdToRecordId.keySet().iterator(); + if (iterator1.hasNext()) { + // 获取当前类别 + Integer next = iterator1.next(); + // 获取入库到当前仓库的订单id + List integerList = depositoryIdToRecordId.get(next); + // 获取当前类型的管理员 + List materialTypeIdForIn = roleService.findRoleAndDepositoryByDid(next); + // 用于存储当前仓库的管理员企业微信userId + StringBuilder sb = new StringBuilder(); + for (RoleAndDepository mt : materialTypeIdForIn + ) { + // 获取管理员数据 + UserByPort userByPort = LinkInterfaceUtil.FindUserById(mt.getUserId(), userToken); + String workwechat = userByPort.getWorkwechat(); + if (workwechat == null || "".equals(workwechat)) { + workwechat = userByPort.getWechat(); + } + sb.append(workwechat).append(","); + } + JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateIn(crypt, userToken, integerList, sb.toString()); + String sp_no = jsonObject.getString("sp_no"); + Map QyWxApprovalMap = new HashMap<>(); + QyWxApprovalMap.put("sp_no", sp_no); + QyWxApprovalMap.put("mainId", integerList.toString()); + redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap); + // 设置过期为7天 + redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); + + } + } + }).start(); + } + else if ("out".equals(type)) { Map mainRecord = new HashMap<>(); Integer sumQuantity = 0; for (Object o : quantitys) { 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 adb43171..aea8cb2c 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 @@ -697,35 +697,71 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { @Transactional(rollbackFor = Exception.class) public Integer applicationInPlace(Map map, boolean isApprovalPass) { Integer placeId = ObjectFormatUtil.toInteger(map.get("placeId")); + Integer depositoryId = ObjectFormatUtil.toInteger(map.get("depositoryId")); if (placeId == null) { placeId = 0; } Double quantity = ObjectFormatUtil.toDouble(map.get("quantity")); Place placeById = placeMapper.findPlaceById(placeId); + // 获取入库的仓库 + Depository depositoryById = depositoryMapper.findDepositoryById(depositoryId); // 获取当前物料基本信息 Integer mid = ObjectFormatUtil.toInteger(map.get("mid")); Material materialById = materialMapper.findMaterialById(mid); map.put("mtId", materialById.getMaterialTypeId()); + String unit = (String) map.get("unit"); if ("-1".equals(unit)) { map.put("unit", materialById.getUnit()); } - // 获取当前类别物料是否需要审批 - List roleAndMaterials = roleService.findRoleAndMaterialTypeByMtId(materialById.getMaterialTypeId()); - boolean flagForApproval = false; // 默认不需要审批 - if (roleAndMaterials.size() > 0) { - flagForApproval = true; + List depositoryAll = depositoryMapper.findDepositoryAll(); + Depository parentDepository = findParentDepository(depositoryById, depositoryAll); + // 用于标志出库人员通过物料类型还说仓库获取 // 默认是仓库 + boolean flagForMtOrDepository = true; + if (!parentDepository.getDname().contains("前置仓")) { + // 如果不是前置仓下的仓库 + flagForMtOrDepository = false; } - if (isApprovalPass) { - if (flagForApproval) { - flagForApproval = false; + boolean flagForApproval = false; // 默认不需要审批 + if (flagForMtOrDepository) { + // 设置审批权限 + map.put("inType","d"); + // 获取当前类别物料是否需要审批 + List roleAndMaterials = roleService.findRoleAndDepositoryByDid(depositoryId); + + if (roleAndMaterials.size() > 0) { + flagForApproval = true; } + if (isApprovalPass) { + if (flagForApproval) { + flagForApproval = false; + } + } + if (map.containsKey("isGroup")) { + flagForApproval = isApprovalPass; + } + map.put("flagForApproval", flagForApproval); + }else{ + // 设置审批权限 + map.put("inType","mt"); + // 获取当前类别物料是否需要审批 + List roleAndMaterials = roleService.findRoleAndMaterialTypeByMtId(materialById.getMaterialTypeId()); + + if (roleAndMaterials.size() > 0) { + flagForApproval = true; + } + if (isApprovalPass) { + if (flagForApproval) { + flagForApproval = false; + } + } + if (map.containsKey("isGroup")) { + flagForApproval = isApprovalPass; + } + map.put("flagForApproval", flagForApproval); } - if (map.containsKey("isGroup")) { - flagForApproval = isApprovalPass; - } - map.put("flagForApproval", flagForApproval); + if (placeById.getMax() - placeById.getQuantity() >= quantity) { // 如果当前库位还能存放 @@ -1040,8 +1076,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { restResponse.setStatusInfo(new StatusInfo("出库失败", "当前位置未发现该物料")); return restResponse; } - } - else { // 如果是默认库位 + } else { // 如果是默认库位 Map params = new HashMap<>(); params.put("mid", inventory.getId()); params.put("pid", 0); @@ -1126,8 +1161,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { restResponse.setData(""); restResponse.setStatusInfo(new StatusInfo("出库失败", "出库失败,库存不足")); } - } - else { + } else { // 如果是拆单后的出库 // 用于获取对应的拆单记录 @@ -1786,7 +1820,6 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { if (trueOut >= (int) (quantity * 100)) { // 如果已经出库的数量大于要修改的数量 - // 如果已经完成了出库 // 获取要退库的数量 double returnQuantity = (double) (trueOut / 100) - quantity; @@ -1802,11 +1835,14 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // 获取库存与库存之间的映射 MaterialAndPlace placeAndMaterialByMidAndPid = placeMapper.findPlaceAndMaterialByMidAndPid(paramForPlaceAndMaterial); - + Object applicationInId = null; + Object mtId = null; if ("-1".equals(unit)) { // 如果是基础单位 + /* 不进行审核 + // 设置库存数量 inventoryById.setQuantity(inventoryById.getQuantity() + (int) (returnQuantity * 100)); // 设置库位数量 @@ -1817,11 +1853,29 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { materialMapper.updateInventory(inventoryById); placeMapper.updateMaterialAndPlace(placeAndMaterialByMidAndPid); placeMapper.UpdatePlace(placeById); - } - else { + + */ + + Map paramForUpdateSplitInventory = new HashMap<>(); + paramForUpdateSplitInventory.put("placeId", outRecordMin.getPlaceId()); + paramForUpdateSplitInventory.put("depositoryId", outRecordMin.getDepositoryId()); + paramForUpdateSplitInventory.put("quantity", returnQuantity); + paramForUpdateSplitInventory.put("mid", inventoryById.getMid()); + paramForUpdateSplitInventory.put("unit", unit); + paramForUpdateSplitInventory.put("code", inventoryById.getCode()); + if (inventoryById.getProducedDate() != null) { + paramForUpdateSplitInventory.put("producedDate", DateUtil.TimeStampToDateTime(inventoryById.getProducedDate())); + } + paramForUpdateSplitInventory.put("applyRemark", "退库"); + applicationInPlace(paramForUpdateSplitInventory, false); + applicationInId = paramForUpdateSplitInventory.get("applicationInId"); + mtId = map.get("mtId"); + + } else { // 如果是拆单 - Map paramForSplitInfo = new HashMap<>(); + /* 不进行审核 + Map paramForSplitInfo = new HashMap<>(); paramForSplitInfo.put("mid", inventoryById.getMid()); paramForSplitInfo.put("newUnit", unit); // 获取拆单记录 @@ -1842,7 +1896,19 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { result = splitUnitService.realInInventoryToDepository(returnQuantity, splitInventory, paramForUpdateSplitInventory, splitInfo, placeAndMaterialByMidAndPid, true); if (paramForUpdateSplitInventory.containsKey("applicationInId")) { depositoryRecordMapper.deleteApplicationInRecordById(ObjectFormatUtil.toInteger(paramForUpdateSplitInventory.get("applicationInId"))); - } + }*/ + Map paramForUpdateSplitInventory = new HashMap<>(); + paramForUpdateSplitInventory.put("placeId", outRecordMin.getPlaceId()); + paramForUpdateSplitInventory.put("depositoryId", outRecordMin.getDepositoryId()); + paramForUpdateSplitInventory.put("quantity", returnQuantity); + paramForUpdateSplitInventory.put("mid", inventoryById.getMid()); + paramForUpdateSplitInventory.put("unit", unit); + paramForUpdateSplitInventory.put("code", inventoryById.getCode()); + paramForUpdateSplitInventory.put("type", "in"); + paramForUpdateSplitInventory.put("applyRemark", "退库"); + splitUnitService.addSplitInventory(paramForUpdateSplitInventory); + applicationInId = paramForUpdateSplitInventory.get("applicationInId"); + mtId = map.get("mtId"); } @@ -1854,15 +1920,58 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { if (Integer.compare(trueOut, outQuantity) != 0) { //如果没有完成出库 - // 强行完成出库 + Integer numberOfTemporary = inventoryById.getNumberOfTemporary() + trueOut - outQuantity + (int) (quantity * 100); + if (numberOfTemporary < 0) { + numberOfTemporary = 0; + } + inventoryById.setNumberOfTemporary(numberOfTemporary); + materialMapper.updateInventory(inventoryById); + // 强行完成出库 updateApplicationMinOutInfo(id, outRecordMin, outRecord, (double) (quantity / 100), userToken, placeById.getId(), userAgent); } + if (applicationInId != null && mtId != null) { + // 如果成功 + // 获取当前类型的管理员 + List materialTypeIdForIn = roleService.findRoleAndMaterialTypeByMtId(Long.valueOf(mtId.toString())); + // 用于存储当前仓库的管理员企业微信userId + StringBuilder sb = new StringBuilder(); + for (RoleAndMaterialType mt : materialTypeIdForIn + ) { + // 获取管理员数据 + UserByPort userByPort = LinkInterfaceUtil.FindUserById(mt.getUid(), userToken); + String workwechat = userByPort.getWorkwechat(); + if (workwechat == null || "".equals(workwechat)) { + workwechat = userByPort.getWechat(); + } + sb.append(workwechat).append(","); + } + List integerList = new ArrayList<>(); + integerList.add(ObjectFormatUtil.toInteger(applicationInId)); + JSONObject jsonObject = qyWxOperationService.sendApprovalTemplateIn(userAgent, userToken, integerList, sb.toString()); + String sp_no = jsonObject.getString("sp_no"); + Map QyWxApprovalMap = new HashMap<>(); + QyWxApprovalMap.put("sp_no", sp_no); + QyWxApprovalMap.put("mainId", integerList.toString()); + redisTemplate.opsForHash().putAll(sp_no, QyWxApprovalMap); + // 设置过期为7天 + redisTemplate.expire(sp_no, 7, TimeUnit.DAYS); + } + } else { // 如果不大于 + + if (inventoryById.getNumberOfTemporary() != null && inventoryById.getNumberOfTemporary() > 0) { + Integer numberOfTemporary = inventoryById.getNumberOfTemporary() + trueOut - outQuantity + (int) (quantity * 100); + if (numberOfTemporary < 0) { + numberOfTemporary = 0; + } + inventoryById.setNumberOfTemporary(numberOfTemporary); + materialMapper.updateInventory(inventoryById); + } // 设置新数量 outRecordMin.setQuantity((int) (quantity * 100)); // 修改记录 @@ -1876,6 +1985,15 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { outRecordMin.setQuantity((int) (quantity * 100)); // 修改记录 result = depositoryRecordMapper.updateApplicationOutRecordMin(outRecordMin); + + if (inventoryById.getNumberOfTemporary() != null && inventoryById.getNumberOfTemporary() > 0) { + Integer numberOfTemporary = inventoryById.getNumberOfTemporary() - outQuantity + (int) (quantity * 100); + if (numberOfTemporary < 0) { + numberOfTemporary = 0; + } + inventoryById.setNumberOfTemporary(numberOfTemporary); + materialMapper.updateInventory(inventoryById); + } } // 修改主记录的出库数量 @@ -1903,12 +2021,13 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { BigDecimal bg = new BigDecimal(newPrice); newPrice = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); - outRecord.setPrice(outRecord.getPrice() - (newPrice * (outQuantity / 100) ) + newPrice * quantity); + outRecord.setPrice(outRecord.getPrice() - (newPrice * (outQuantity / 100)) + newPrice * quantity); } - } + + return result; } diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/SplitUnitServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/SplitUnitServiceImpl.java index fa5c336e..17e24831 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/SplitUnitServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/SplitUnitServiceImpl.java @@ -94,18 +94,54 @@ public class SplitUnitServiceImpl implements SplitUnitService { Material materialById = materialMapper.findMaterialById(ObjectFormatUtil.toInteger(map.get("mid"))); paramForMtRole.put("mtid", materialById.getMaterialTypeId()); map.put("mtId", materialById.getMaterialTypeId()); + + Integer depositoryId = ObjectFormatUtil.toInteger(map.get("depositoryId")); + // 获取入库的仓库 + Depository depositoryById = depositoryMapper.findDepositoryById(depositoryId); + List depositoryAll = depositoryMapper.findDepositoryAll(); + Depository parentDepository = findParentDepository(depositoryById, depositoryAll); + // 用于标志出库人员通过物料类型还说仓库获取 // 默认是仓库 + boolean flagForMtOrDepository = true; + if (!parentDepository.getDname().contains("前置仓")) { + // 如果不是前置仓下的仓库 + flagForMtOrDepository = false; + } boolean flagForApproval = false; // 默认不需要 - if(!map.containsKey("flagForApproval")){ - List roleAndMaterials = roleMapper.findRoleAndMaterialTypeByCondition(paramForMtRole); - // 用于标志该仓库是否需要进行审批 - if (roleAndMaterials.size() > 0) { - flagForApproval = true; + if(flagForMtOrDepository){ + // 如果是仓库 + + // 设置审批权限 + map.put("inType","d"); + + if(!map.containsKey("flagForApproval")){ + paramForMtRole.put("depositoryId",depositoryId); + List roleAndMaterials = roleMapper.findRoleAndDepositoryByCondition(paramForMtRole); + // 用于标志该仓库是否需要进行审批 + if (roleAndMaterials.size() > 0) { + flagForApproval = true; + } + map.put("flagForApproval", flagForApproval); + }else{ + flagForApproval = ObjectFormatUtil.toBoolean(map.get("flagForApproval")); } - map.put("flagForApproval", flagForApproval); }else{ - flagForApproval = ObjectFormatUtil.toBoolean(map.get("flagForApproval")); + + // 设置审批权限 + map.put("inType","mt"); + if(!map.containsKey("flagForApproval")){ + List roleAndMaterials = roleMapper.findRoleAndMaterialTypeByCondition(paramForMtRole); + // 用于标志该仓库是否需要进行审批 + if (roleAndMaterials.size() > 0) { + flagForApproval = true; + } + map.put("flagForApproval", flagForApproval); + }else{ + flagForApproval = ObjectFormatUtil.toBoolean(map.get("flagForApproval")); + } } + + // 用于存储最终计算结果 Integer result = 0; @@ -877,4 +913,26 @@ public class SplitUnitServiceImpl implements SplitUnitService { return splitUnitMapper.findSplitInventoryByIid(Iid); } + + /** + * 用于获取当前仓库的最顶级仓库 + * + * @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; + } + }