Browse Source

修改入库审批功能

lwx_dev
erdanergou 3 years ago
parent
commit
35af64521b
  1. 343
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java
  2. 169
      src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java
  3. 72
      src/main/java/com/dreamchaser/depository_manage/service/impl/SplitUnitServiceImpl.java

343
src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java

@ -236,8 +236,12 @@ public class DepositoryRecordController {
Map<String, Object> result = new HashMap<>();
// 定义列表用于储存入库单id
List<Integer> recordIds = new ArrayList<>();
// 定义列表用于存储入库仓库id
// 定义列表用于存储入库物料类型id
List<Long> mtIdList = new ArrayList<>();
// 定义列表用于存储入库仓库id
List<Integer> depositoryIdList = new ArrayList<>();
List<String> 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<Long, List<Integer>> MtIdToRecordId = new HashMap<>();
Map<Integer, List<Integer>> 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<Integer> 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<Integer> 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<Integer> integers = depositoryIdToRecordId.get(did);
if (integers != null) {
// 如果有对应关系
integers.add(recordId);
} else {
// 如果没有
integers = new ArrayList<>();
integers.add(recordId);
depositoryIdToRecordId.put(did, integers);
}
}
}
}
// 获取遍历器
Iterator<Long> iterator = MtIdToRecordId.keySet().iterator();
if (iterator.hasNext()) {
// 获取当前仓库
// 获取当前类别
Long next = iterator.next();
// 获取入库到当前仓库的订单id
List<Integer> integerList = MtIdToRecordId.get(next);
@ -424,6 +465,37 @@ public class DepositoryRecordController {
redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS);
}
Iterator<Integer> iterator1 = depositoryIdToRecordId.keySet().iterator();
if (iterator1.hasNext()) {
// 获取当前类别
Integer next = iterator1.next();
// 获取入库到当前仓库的订单id
List<Integer> integerList = depositoryIdToRecordId.get(next);
// 获取当前类型的管理员
List<RoleAndDepository> 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<String, Object> 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<String> typeList = new ArrayList<>();
List<Long> mtIdList = new ArrayList<>();
List<Integer> depositoryIdList = new ArrayList<>();
List<Integer> 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<Long, List<Integer>> MtIdToRecordId = new HashMap<>();
Map<Integer, List<Integer>> 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<Integer> 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<Integer> integers = depositoryIdToRecordId.get(did);
if (integers != null) {
// 如果有对应关系
integers.add(recordId);
} else {
// 如果没有
integers = new ArrayList<>();
integers.add(recordId);
depositoryIdToRecordId.put(did, integers);
}
}
}
}
// 获取遍历器
Iterator<Long> iterator = MtIdToRecordId.keySet().iterator();
if (iterator.hasNext()) {
// 获取当前类别
Long next = iterator.next();
// 获取入库到当前仓库的订单id
List<Integer> integerList = MtIdToRecordId.get(next);
// 获取当前类型的管理员
List<RoleAndMaterialType> 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<String, Object> 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<Integer> iterator1 = depositoryIdToRecordId.keySet().iterator();
if (iterator1.hasNext()) {
// 获取当前类别
Integer next = iterator1.next();
// 获取入库到当前仓库的订单id
List<Integer> integerList = depositoryIdToRecordId.get(next);
// 获取当前类型的管理员
List<RoleAndDepository> 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<String, Object> 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<UserByPort> departmentHeadByUsers = LinkInterfaceUtil.findDepartmentHeadByUser(userToken);
@ -1344,6 +1536,10 @@ public class DepositoryRecordController {
StringBuilder errMsg = new StringBuilder();
Integer id = 0;
if ("in".equals(type)) {
List<String> typeList = new ArrayList<>();
List<Long> mtIdList = new ArrayList<>();
List<Integer> depositoryIdList = new ArrayList<>();
List<Integer> 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<Long, List<Integer>> MtIdToRecordId = new HashMap<>();
Map<Integer, List<Integer>> 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<Integer> 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<Integer> integers = depositoryIdToRecordId.get(did);
if (integers != null) {
// 如果有对应关系
integers.add(recordId);
} else {
// 如果没有
integers = new ArrayList<>();
integers.add(recordId);
depositoryIdToRecordId.put(did, integers);
}
}
}
}
// 获取遍历器
Iterator<Long> iterator = MtIdToRecordId.keySet().iterator();
if (iterator.hasNext()) {
// 获取当前类别
Long next = iterator.next();
// 获取入库到当前仓库的订单id
List<Integer> integerList = MtIdToRecordId.get(next);
// 获取当前类型的管理员
List<RoleAndMaterialType> 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<String, Object> 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<Integer> iterator1 = depositoryIdToRecordId.keySet().iterator();
if (iterator1.hasNext()) {
// 获取当前类别
Integer next = iterator1.next();
// 获取入库到当前仓库的订单id
List<Integer> integerList = depositoryIdToRecordId.get(next);
// 获取当前类型的管理员
List<RoleAndDepository> 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<String, Object> 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<String, Object> mainRecord = new HashMap<>();
Integer sumQuantity = 0;
for (Object o : quantitys) {

169
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<String, Object> 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<RoleAndMaterialType> roleAndMaterials = roleService.findRoleAndMaterialTypeByMtId(materialById.getMaterialTypeId());
boolean flagForApproval = false; // 默认不需要审批
if (roleAndMaterials.size() > 0) {
flagForApproval = true;
List<Depository> 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<RoleAndDepository> 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<RoleAndMaterialType> 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<String, Object> 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<String, Object> 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<String, Object> paramForSplitInfo = new HashMap<>();
/* 不进行审核
Map<String, Object> 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<String, Object> 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<RoleAndMaterialType> 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<Integer> 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<String, Object> 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;
}

72
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<Depository> 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<RoleAndMaterialType> 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<RoleAndDepository> 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<RoleAndMaterialType> 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<Depository> 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;
}
}

Loading…
Cancel
Save