Browse Source

修改库存导入功能

lwx_dev
erdanergou 3 years ago
parent
commit
82dd6e5219
  1. 8
      src/main/java/com/dreamchaser/depository_manage/service/SplitUnitService.java
  2. 44
      src/main/java/com/dreamchaser/depository_manage/service/impl/ExcelServiceImpl.java
  3. 67
      src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java
  4. 32
      src/main/java/com/dreamchaser/depository_manage/service/impl/SplitUnitServiceImpl.java
  5. 23
      src/test/java/com/dreamchaser/depository_manage/TestForOther.java

8
src/main/java/com/dreamchaser/depository_manage/service/SplitUnitService.java

@ -176,6 +176,14 @@ public interface SplitUnitService {
*/ */
boolean findAllSplitInfoForbidden(Integer sid); boolean findAllSplitInfoForbidden(Integer sid);
/**
* 获取当前物料的最底层拆单记录
* @param mid 待查询物料id
* @return
*/
SplitInfo findBaseSplitInfoForMid(Integer mid);
/** /**
* 用于审批通过或无需审批时修改库存 * 用于审批通过或无需审批时修改库存
* *

44
src/main/java/com/dreamchaser/depository_manage/service/impl/ExcelServiceImpl.java

@ -2,13 +2,11 @@ package com.dreamchaser.depository_manage.service.impl;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.dreamchaser.depository_manage.entity.*; import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.mapper.DepositoryRecordMapper;
import com.dreamchaser.depository_manage.mapper.MaterialMapper; import com.dreamchaser.depository_manage.mapper.MaterialMapper;
import com.dreamchaser.depository_manage.pojo.InventoryP; import com.dreamchaser.depository_manage.pojo.InventoryP;
import com.dreamchaser.depository_manage.pojo.MaterialP; import com.dreamchaser.depository_manage.pojo.MaterialP;
import com.dreamchaser.depository_manage.service.ExcelService; import com.dreamchaser.depository_manage.service.*;
import com.dreamchaser.depository_manage.service.MaterialService;
import com.dreamchaser.depository_manage.service.MaterialTypeService;
import com.dreamchaser.depository_manage.service.PlaceService;
import com.dreamchaser.depository_manage.utils.*; import com.dreamchaser.depository_manage.utils.*;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
@ -44,6 +42,12 @@ public class ExcelServiceImpl implements ExcelService {
@Autowired @Autowired
MaterialMapper materialMapper; MaterialMapper materialMapper;
@Autowired
SplitUnitService splitUnitService;
@Autowired
DepositoryRecordMapper depositoryRecordMapper;
/** /**
* 用于导入物料名称 * 用于导入物料名称
* *
@ -245,12 +249,17 @@ public class ExcelServiceImpl implements ExcelService {
map.put("version",version); map.put("version",version);
List<Material> materialPByCondition = materialService.findMaterialPByConditionForTable(map); List<Material> materialPByCondition = materialService.findMaterialPByConditionForTable(map);
if(materialPByCondition.size() == 0){ if(materialPByCondition.size() == 0){
Material materialByCode = materialService.findMaterialByCode(excelInfoByInventory.getCode());
if(materialByCode == null){
// 如果没有当前物料 // 如果没有当前物料
String s = dataIndex.get(i); String s = dataIndex.get(i);
String msg = s + "出现异常:" + excelInfoByInventory.getMname() + " 系统中并未存在该物料"; String msg = s + "出现异常:" + excelInfoByInventory.getMname() + " 系统中并未存在该物料";
errMsg.add(msg); errMsg.add(msg);
continue; continue;
} }
}
String placeCode = excelInfoByInventory.getDepositoryCode(); String placeCode = excelInfoByInventory.getDepositoryCode();
Integer depositoryId = excelInfoByInventory.getDepositoryId(); Integer depositoryId = excelInfoByInventory.getDepositoryId();
// 如果导入时输入库位信息 // 如果导入时输入库位信息
@ -304,7 +313,7 @@ public class ExcelServiceImpl implements ExcelService {
Material material = materialService.findMaterialByMnameAndVersion(insert); Material material = materialService.findMaterialByMnameAndVersion(insert);
if(material == null) if(material == null)
{ {
material = materialMapper.findMaterialByCondition(insert).get(0); material = materialService.findMaterialByCode(excelInfoByInventory.getCode());
} }
// 添加库存记录 // 添加库存记录
@ -323,6 +332,13 @@ public class ExcelServiceImpl implements ExcelService {
String placeCode = excelInfoByInventories.get(i).getDepositoryCode(); String placeCode = excelInfoByInventories.get(i).getDepositoryCode();
Boolean isNew = (Boolean) insert.get("isNew"); Boolean isNew = (Boolean) insert.get("isNew");
if (isNew) { if (isNew) {
SplitInfo baseSplitInfoForMid = splitUnitService.findBaseSplitInfoForMid(material.getId());
double quantity_residue = 0;
if(baseSplitInfoForMid != null){
quantity_residue = quantity - Math.floor(quantity);
quantity = quantity - quantity_residue;
}
MaterialAndPlace placeAndMaterialByMidAndPid = null;
// 如果是新插入物料 // 如果是新插入物料
if (placeCode == null || placeCode.isEmpty() || "0".equals(placeCode)) { // 如果没有输入库位 if (placeCode == null || placeCode.isEmpty() || "0".equals(placeCode)) { // 如果没有输入库位
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
@ -336,6 +352,7 @@ public class ExcelServiceImpl implements ExcelService {
param.put("pid", 0); param.put("pid", 0);
param.put("quantity", (int)(quantity * 100)); param.put("quantity", (int)(quantity * 100));
placeService.addMaterialOnPlace(param); placeService.addMaterialOnPlace(param);
placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialById(ObjectFormatUtil.toInteger(param.get("id")));
} else { } else {
// 如果输入的库位不是默认库位 // 如果输入的库位不是默认库位
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
@ -354,7 +371,24 @@ public class ExcelServiceImpl implements ExcelService {
param.put("quantity", (int)(quantity * 100)); param.put("quantity", (int)(quantity * 100));
// 添加对应关系 // 添加对应关系
placeService.addMaterialOnPlace(param); placeService.addMaterialOnPlace(param);
placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialById(ObjectFormatUtil.toInteger(param.get("id")));
}
if(baseSplitInfoForMid != null){
Map<String, Object> insertForSplitInfoStringObjectMap = new HashMap<>();
insertForSplitInfoStringObjectMap.put("depositoryId", depositoryId);
insertForSplitInfoStringObjectMap.put("quantity", quantity_residue);
insertForSplitInfoStringObjectMap.put("placeId", "0");
insertForSplitInfoStringObjectMap.put("mid", material.getId());
insertForSplitInfoStringObjectMap.put("unit", baseSplitInfoForMid.getNewUnit());
SplitInventory splitInventoryByIidAndSid = splitUnitService.findSplitInventoryByIidAndSid(placeAndMaterialByMidAndPid.getId(), baseSplitInfoForMid.getId());
int splitInfoScaleQuantity = splitUnitService.findSplitInfoScaleQuantity(baseSplitInfoForMid,-1);
splitUnitService.realInInventoryToDepository(quantity_residue * splitInfoScaleQuantity, splitInventoryByIidAndSid, insertForSplitInfoStringObjectMap, baseSplitInfoForMid, placeAndMaterialByMidAndPid, true);
if (insertForSplitInfoStringObjectMap.containsKey("applicationInId")) {
depositoryRecordMapper.deleteApplicationInRecordById(ObjectFormatUtil.toInteger(insertForSplitInfoStringObjectMap.get("applicationInId")));
}
} }
} }
success.add(excelInfoByInventory); success.add(excelInfoByInventory);
} }

67
src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java

@ -972,11 +972,27 @@ public class MaterialServiceImpl implements MaterialService {
double quantity = Double.parseDouble(map.get("quantity").toString()); double quantity = Double.parseDouble(map.get("quantity").toString());
double quantity_residue = 0;
int splitInfoScaleQuantity = 0;
SplitInfo baseSplitInfoForMid = null;
if (Math.floor(quantity) < quantity) {
// 如果当前导入的物料存在小数
// 获取当前物料对应的最小拆单单位
baseSplitInfoForMid = splitUnitService.findBaseSplitInfoForMid(material.getMid());
if (baseSplitInfoForMid != null) {
// 获取当前拆单单位与基础单位的进制
splitInfoScaleQuantity = splitUnitService.findSplitInfoScaleQuantity(baseSplitInfoForMid, -1);
quantity_residue = quantity - Math.floor(quantity);
quantity = quantity - quantity_residue;
}
}
material.setQuantity(material.getQuantity() + (int) (quantity * 100)); material.setQuantity(material.getQuantity() + (int) (quantity * 100));
// 获取当前物料要存入的库位 // 获取当前物料要存入的库位
String tempPlaceCode = (String) map.get("tempPlaceCode"); String tempPlaceCode = (String) map.get("tempPlaceCode");
if ("0".equals(tempPlaceCode)) { if ("0".equals(tempPlaceCode) || "0000".equals(tempPlaceCode) || "000000".equals(tempPlaceCode)) {
// 如果当前导入库位是默认库位 // 如果当前导入库位是默认库位
MaterialAndPlace placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialByMidAndPid(0, material.getId()); MaterialAndPlace placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialByMidAndPid(0, material.getId());
@ -984,7 +1000,6 @@ public class MaterialServiceImpl implements MaterialService {
// 修改当前库位数目 // 修改当前库位数目
placeAndMaterialByMidAndPid.setQuantity(placeAndMaterialByMidAndPid.getQuantity() + (int) (quantity * 100)); placeAndMaterialByMidAndPid.setQuantity(placeAndMaterialByMidAndPid.getQuantity() + (int) (quantity * 100));
placeService.updateMaterialAndPlace(placeAndMaterialByMidAndPid); placeService.updateMaterialAndPlace(placeAndMaterialByMidAndPid);
} else { } else {
// 如果没有对应关系 // 如果没有对应关系
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
@ -993,16 +1008,35 @@ public class MaterialServiceImpl implements MaterialService {
param.put("quantity", (int) (quantity * 100)); param.put("quantity", (int) (quantity * 100));
// 添加对应关系 // 添加对应关系
placeService.addMaterialOnPlace(param); placeService.addMaterialOnPlace(param);
placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialById(ObjectFormatUtil.toInteger(param.get("id")));
} }
// 修改库位存放数量 // 修改库位存放数量
Place placeById = placeService.findPlaceById(0); Place placeById = placeService.findPlaceById(0);
placeById.setQuantity(placeById.getQuantity() + (int) (quantity * 100)); placeById.setQuantity(placeById.getQuantity() + (int) (quantity * 100));
placeService.UpdatePlace(placeById); placeService.UpdatePlace(placeById);
if (baseSplitInfoForMid != null) {
Map<String, Object> insertForSplitInfoStringObjectMap = new HashMap<>();
insertForSplitInfoStringObjectMap.put("depositoryId", map.get("depositoryId"));
insertForSplitInfoStringObjectMap.put("quantity", quantity_residue * splitInfoScaleQuantity);
insertForSplitInfoStringObjectMap.put("placeId", "0");
insertForSplitInfoStringObjectMap.put("mid", material.getMid().toString());
insertForSplitInfoStringObjectMap.put("newInMid", material.getId());
insertForSplitInfoStringObjectMap.put("unit", baseSplitInfoForMid.getNewUnit());
SplitInventory splitInventoryByIidAndSid = splitUnitService.findSplitInventoryByIidAndSid(placeAndMaterialByMidAndPid.getId(), baseSplitInfoForMid.getId());
splitUnitService.realInInventoryToDepository(quantity_residue * splitInfoScaleQuantity, splitInventoryByIidAndSid, insertForSplitInfoStringObjectMap, baseSplitInfoForMid, placeAndMaterialByMidAndPid, true);
if (insertForSplitInfoStringObjectMap.containsKey("applicationInId")) {
depositoryRecordMapper.deleteApplicationInRecordById(ObjectFormatUtil.toInteger(insertForSplitInfoStringObjectMap.get("applicationInId")));
}
}
} else { } else {
// 如果要导入的不是默认库位 // 如果要导入的不是默认库位
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("depositoryId", material.getDepositoryId()); param.put("depositoryId", material.getDepositoryId());
param.put("code", tempPlaceCode); param.put("kingdeecode", tempPlaceCode);
// 获取要导入的库位 // 获取要导入的库位
Place placeByCondition = placeService.findPlaceByCondition(param).get(0); Place placeByCondition = placeService.findPlaceByCondition(param).get(0);
// 修改库位物料数量 // 修改库位物料数量
@ -1018,19 +1052,40 @@ public class MaterialServiceImpl implements MaterialService {
param.put("quantity", (int) (quantity * 100)); param.put("quantity", (int) (quantity * 100));
// 添加对应关系 // 添加对应关系
placeService.addMaterialOnPlace(param); placeService.addMaterialOnPlace(param);
placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialById(ObjectFormatUtil.toInteger(param.get("id")));
} else { } else {
// 如果有对应关系 // 如果有对应关系
placeAndMaterialByMidAndPid.setQuantity(placeAndMaterialByMidAndPid.getQuantity() + (int) (quantity * 100)); placeAndMaterialByMidAndPid.setQuantity(placeAndMaterialByMidAndPid.getQuantity() + (int) (quantity * 100));
// 修改数量 // 修改数量
placeService.updateMaterialAndPlace(placeAndMaterialByMidAndPid); placeService.updateMaterialAndPlace(placeAndMaterialByMidAndPid);
} }
if (baseSplitInfoForMid != null) {
Map<String, Object> insertForSplitInfoStringObjectMap = new HashMap<>();
insertForSplitInfoStringObjectMap.put("depositoryId", map.get("depositoryId"));
insertForSplitInfoStringObjectMap.put("quantity", quantity_residue * splitInfoScaleQuantity);
insertForSplitInfoStringObjectMap.put("placeId", placeByCondition.getId());
insertForSplitInfoStringObjectMap.put("mid", material.getMid().toString());
insertForSplitInfoStringObjectMap.put("newInMid", material.getId());
insertForSplitInfoStringObjectMap.put("type", "in");
insertForSplitInfoStringObjectMap.put("unit", baseSplitInfoForMid.getNewUnit());
SplitInventory splitInventoryByIidAndSid = splitUnitService.findSplitInventoryByIidAndSid(placeAndMaterialByMidAndPid.getId(), baseSplitInfoForMid.getId());
splitUnitService.realInInventoryToDepository(quantity_residue * splitInfoScaleQuantity, splitInventoryByIidAndSid, insertForSplitInfoStringObjectMap, baseSplitInfoForMid, placeAndMaterialByMidAndPid, true);
if (insertForSplitInfoStringObjectMap.containsKey("applicationInId")) {
depositoryRecordMapper.deleteApplicationInRecordById(ObjectFormatUtil.toInteger(insertForSplitInfoStringObjectMap.get("applicationInId")));
}
} }
return materialMapper.updateInventory(material);
} }
else { return materialMapper.updateInventory(material);
} else {
// 用于标志是新插入的物料 // 用于标志是新插入的物料
map.put("isNew", true); map.put("isNew", true);
map.put("quantity",(int)(ObjectFormatUtil.toDouble(map.get("quantity")) * 100)); Double quantity = ObjectFormatUtil.toDouble(map.get("quantity"));
map.put("quantity", (int) (quantity * 100));
SplitInfo baseSplitInfoForMid = splitUnitService.findBaseSplitInfoForMid(ObjectFormatUtil.toInteger(map.get("id")));
if (baseSplitInfoForMid != null) {
map.put("quantity", (int) ((quantity - Math.floor(quantity)) * 100));
}
if (!map.containsKey("producedDate")) { if (!map.containsKey("producedDate")) {
// 如果不包含生产日期 // 如果不包含生产日期
map.put("producedDate", 0); map.put("producedDate", 0);

32
src/main/java/com/dreamchaser/depository_manage/service/impl/SplitUnitServiceImpl.java

@ -544,6 +544,33 @@ public class SplitUnitServiceImpl implements SplitUnitService {
return true; return true;
} }
/**
* 获取当前物料的最底层拆单记录
*
* @param mid 待查询物料id
* @return
*/
@Override
public SplitInfo findBaseSplitInfoForMid(Integer mid) {
// 获取当前物料的所有拆单记录
List<SplitInfo> splitInfoByMid = splitUnitMapper.findSplitInfoByMid(mid);
SplitInfo result = null;
if (splitInfoByMid.size() > 0) {
// 如果存在拆单记录
result = splitInfoByMid.get(0);
// 遍历所有拆单记录
for (SplitInfo splitInfo : splitInfoByMid
) {
if (splitInfo.getParentId() != null) {
if (Integer.compare(splitInfo.getParentId(), result.getId()) == 0) {
result = splitInfo;
}
}
}
}
return result;
}
/** /**
* 用于拆单库存处理记录的修改 * 用于拆单库存处理记录的修改
* *
@ -583,12 +610,13 @@ public class SplitUnitServiceImpl implements SplitUnitService {
// 定义当前实际修改数量 // 定义当前实际修改数量
double new_saveQuantity = (double) splitInventory.getSaveQuantity() / 100 + saveQuantity - splitInfo.getQuantity(); double new_saveQuantity = ((double)splitInventory.getSaveQuantity() / 100) + saveQuantity - splitInfo.getQuantity();
// 令计算处理数量+1 // 令计算处理数量+1
disposeQuantity += 1; disposeQuantity += 1;
// 定义保存数量 // 定义保存数量
splitInventory.setSaveQuantity((int) (splitInventory.getSaveQuantity() + new_saveQuantity * 100)); splitInventory.setSaveQuantity((int) (new_saveQuantity * 100));
// 定义添加数量 // 定义添加数量
splitInventory.setInQuantity((int) (splitInventory.getInQuantity() + new_saveQuantity * 100)); splitInventory.setInQuantity((int) (splitInventory.getInQuantity() + new_saveQuantity * 100));

23
src/test/java/com/dreamchaser/depository_manage/TestForOther.java

@ -3,19 +3,13 @@ package com.dreamchaser.depository_manage;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONPObject; import com.alibaba.fastjson.JSONPObject;
import com.dreamchaser.depository_manage.entity.Depository; import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.entity.MaterialType;
import com.dreamchaser.depository_manage.entity.Place;
import com.dreamchaser.depository_manage.entity.UserByPort;
import com.dreamchaser.depository_manage.mapper.DepositoryMapper; import com.dreamchaser.depository_manage.mapper.DepositoryMapper;
import com.dreamchaser.depository_manage.pojo.RestResponse; import com.dreamchaser.depository_manage.pojo.RestResponse;
import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo; 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_Details;
import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo_Details_Approver; import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo_Details_Approver;
import com.dreamchaser.depository_manage.service.DepositoryRecordService; import com.dreamchaser.depository_manage.service.*;
import com.dreamchaser.depository_manage.service.DepositoryService;
import com.dreamchaser.depository_manage.service.PlaceService;
import com.dreamchaser.depository_manage.service.StockTakingService;
import com.dreamchaser.depository_manage.service.impl.QyWxOperationService; import com.dreamchaser.depository_manage.service.impl.QyWxOperationService;
import com.dreamchaser.depository_manage.utils.CreateQrCodeUtil; import com.dreamchaser.depository_manage.utils.CreateQrCodeUtil;
import com.dreamchaser.depository_manage.utils.LinkInterfaceUtil; import com.dreamchaser.depository_manage.utils.LinkInterfaceUtil;
@ -41,13 +35,16 @@ public class TestForOther {
@Autowired @Autowired
DepositoryRecordService depositoryRecordService; DepositoryRecordService depositoryRecordService;
@Test @Test
public void run() { public void run() {
ApprovalInfo_Details approvalInfo = new ApprovalInfo_Details(); // ApprovalInfo_Details approvalInfo = new ApprovalInfo_Details();
ApprovalInfo_Details_Approver approver = new ApprovalInfo_Details_Approver(); // ApprovalInfo_Details_Approver approver = new ApprovalInfo_Details_Approver();
approver.setUserId("PangFuZhen"); // approver.setUserId("PangFuZhen");
approvalInfo.setApprover(approver); // approvalInfo.setApprover(approver);
depositoryRecordService.reviewByQyWxApprovalOut("1",approvalInfo,"460f46eaefb46bb0c171029f62e2cea6","2","202303180021", false,2); // depositoryRecordService.reviewByQyWxApprovalOut("1",approvalInfo,"460f46eaefb46bb0c171029f62e2cea6","2","202303180021", false,2);
} }

Loading…
Cancel
Save