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. 103
      src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java
  4. 38
      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);
/**
* 获取当前物料的最底层拆单记录
* @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.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.mapper.DepositoryRecordMapper;
import com.dreamchaser.depository_manage.mapper.MaterialMapper;
import com.dreamchaser.depository_manage.pojo.InventoryP;
import com.dreamchaser.depository_manage.pojo.MaterialP;
import com.dreamchaser.depository_manage.service.ExcelService;
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.service.*;
import com.dreamchaser.depository_manage.utils.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
@ -44,6 +42,12 @@ public class ExcelServiceImpl implements ExcelService {
@Autowired
MaterialMapper materialMapper;
@Autowired
SplitUnitService splitUnitService;
@Autowired
DepositoryRecordMapper depositoryRecordMapper;
/**
* 用于导入物料名称
*
@ -245,12 +249,17 @@ public class ExcelServiceImpl implements ExcelService {
map.put("version",version);
List<Material> materialPByCondition = materialService.findMaterialPByConditionForTable(map);
if(materialPByCondition.size() == 0){
Material materialByCode = materialService.findMaterialByCode(excelInfoByInventory.getCode());
if(materialByCode == null){
// 如果没有当前物料
String s = dataIndex.get(i);
String msg = s + "出现异常:" + excelInfoByInventory.getMname() + " 系统中并未存在该物料";
errMsg.add(msg);
continue;
}
}
String placeCode = excelInfoByInventory.getDepositoryCode();
Integer depositoryId = excelInfoByInventory.getDepositoryId();
// 如果导入时输入库位信息
@ -304,7 +313,7 @@ public class ExcelServiceImpl implements ExcelService {
Material material = materialService.findMaterialByMnameAndVersion(insert);
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();
Boolean isNew = (Boolean) insert.get("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)) { // 如果没有输入库位
Map<String, Object> param = new HashMap<>();
@ -336,6 +352,7 @@ public class ExcelServiceImpl implements ExcelService {
param.put("pid", 0);
param.put("quantity", (int)(quantity * 100));
placeService.addMaterialOnPlace(param);
placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialById(ObjectFormatUtil.toInteger(param.get("id")));
} else {
// 如果输入的库位不是默认库位
Map<String, Object> param = new HashMap<>();
@ -354,7 +371,24 @@ public class ExcelServiceImpl implements ExcelService {
param.put("quantity", (int)(quantity * 100));
// 添加对应关系
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);
}

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

@ -515,7 +515,7 @@ public class MaterialServiceImpl implements MaterialService {
map.put("did", depositoryId);
Inventory inventory = materialMapper.findInventoryByMidAndDid(map);
if (inventory != null) {
result.add((double)inventory.getQuantity() / 100);
result.add((double) inventory.getQuantity() / 100);
} else {
result.add(0.0);
}
@ -539,7 +539,7 @@ public class MaterialServiceImpl implements MaterialService {
for (MaterialAndPlaceForViewP materialAndPlaceForView : placeAndMaterialByDidAndMid) {
paramForSplitInventory.put("iid", materialAndPlaceForView.getId());
MaterialAndPlace materialAndPlace = new MaterialAndPlace();
materialAndPlace.setQuantity((int)(materialAndPlaceForView.getInventory() / 100));
materialAndPlace.setQuantity((int) (materialAndPlaceForView.getInventory() / 100));
materialAndPlace.setId(materialAndPlaceForView.getId());
quantity += splitUnitService.findAllInventoryForSplitInfo(-1, materialAndPlace, splitInfo.getId(), 0, true);
}
@ -569,7 +569,7 @@ public class MaterialServiceImpl implements MaterialService {
List<MaterialAndPlaceForViewP> placeAndMaterialByDidsAndMid = placeService.findPlaceAndMaterialByDidsAndMid(depositoryList, map);
if (placeAndMaterialByDidsAndMid.size() > 0) {
// 如果存在库存记录
for (MaterialAndPlaceForViewP materialByDidsAndMid:placeAndMaterialByDidsAndMid
for (MaterialAndPlaceForViewP materialByDidsAndMid : placeAndMaterialByDidsAndMid
) {
materialByDidsAndMid.setInventory(materialByDidsAndMid.getInventory() / 100);
}
@ -795,8 +795,8 @@ public class MaterialServiceImpl implements MaterialService {
Map<String, Double> splitInventoryForUnit = new HashMap<>();
splitInventoryForUnit.put(inventory.getUnit(), (double)inventory.getQuantity() / 100);
m.setBaseUnitQuantity((double)inventory.getQuantity() / 100);
splitInventoryForUnit.put(inventory.getUnit(), (double) inventory.getQuantity() / 100);
m.setBaseUnitQuantity((double) inventory.getQuantity() / 100);
// 定义最后展示单位及数目
String unit = inventory.getUnit();
@ -955,7 +955,7 @@ public class MaterialServiceImpl implements MaterialService {
@Override
public Integer insertInventoryForImport(Map<String, Object> map) {
if (!map.containsKey("quantity")) {
map.put("quantity",0);
map.put("quantity", 0);
}
Map<String, Object> params = new HashMap<>();
// params.put("code", map.get("code"));
@ -972,41 +972,75 @@ public class MaterialServiceImpl implements MaterialService {
double quantity = Double.parseDouble(map.get("quantity").toString());
material.setQuantity(material.getQuantity() + (int)(quantity * 100));
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));
// 获取当前物料要存入的库位
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());
if (placeAndMaterialByMidAndPid != null) {
// 修改当前库位数目
placeAndMaterialByMidAndPid.setQuantity(placeAndMaterialByMidAndPid.getQuantity() + (int)(quantity * 100));
placeAndMaterialByMidAndPid.setQuantity(placeAndMaterialByMidAndPid.getQuantity() + (int) (quantity * 100));
placeService.updateMaterialAndPlace(placeAndMaterialByMidAndPid);
} else {
// 如果没有对应关系
Map<String, Object> param = new HashMap<>();
param.put("pid", 0);
param.put("mid", material.getId());
param.put("quantity", (int)(quantity * 100));
param.put("quantity", (int) (quantity * 100));
// 添加对应关系
placeService.addMaterialOnPlace(param);
placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialById(ObjectFormatUtil.toInteger(param.get("id")));
}
// 修改库位存放数量
Place placeById = placeService.findPlaceById(0);
placeById.setQuantity(placeById.getQuantity() + (int)(quantity * 100));
placeById.setQuantity(placeById.getQuantity() + (int) (quantity * 100));
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 {
// 如果要导入的不是默认库位
Map<String, Object> param = new HashMap<>();
param.put("depositoryId", material.getDepositoryId());
param.put("code", tempPlaceCode);
param.put("kingdeecode", tempPlaceCode);
// 获取要导入的库位
Place placeByCondition = placeService.findPlaceByCondition(param).get(0);
// 修改库位物料数量
placeByCondition.setQuantity(placeByCondition.getQuantity() + (int)(quantity * 100));
placeByCondition.setQuantity(placeByCondition.getQuantity() + (int) (quantity * 100));
placeService.UpdatePlace(placeByCondition);
// 获取库位与物料的对应关系
@ -1015,22 +1049,43 @@ public class MaterialServiceImpl implements MaterialService {
// 如果没有对应关系
param.put("pid", placeByCondition.getId());
param.put("mid", material.getId());
param.put("quantity", (int)(quantity * 100));
param.put("quantity", (int) (quantity * 100));
// 添加对应关系
placeService.addMaterialOnPlace(param);
placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialById(ObjectFormatUtil.toInteger(param.get("id")));
} else {
// 如果有对应关系
placeAndMaterialByMidAndPid.setQuantity(placeAndMaterialByMidAndPid.getQuantity() + (int)(quantity * 100));
placeAndMaterialByMidAndPid.setQuantity(placeAndMaterialByMidAndPid.getQuantity() + (int) (quantity * 100));
// 修改数量
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("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")) {
// 如果不包含生产日期
map.put("producedDate", 0);
@ -1686,7 +1741,7 @@ public class MaterialServiceImpl implements MaterialService {
// 如果当前转移的数量大于进制数
// 获取进位数量
int dispose = (int)( Math.floor(quantity / (double) splitInfo.getQuantity()));
int dispose = (int) (Math.floor(quantity / (double) splitInfo.getQuantity()));
// 获取当前入库数量
int realQuantity = quantity - dispose * splitInfo.getQuantity();
@ -2624,7 +2679,7 @@ public class MaterialServiceImpl implements MaterialService {
map.remove("placeId");
}
List<MaterialAndPlaceForViewP> placeAndMaterialByCondition = placeService.findPlaceAndMaterialByCondition(map);
for (MaterialAndPlaceForViewP placeAndPlaceForViewP:placeAndMaterialByCondition
for (MaterialAndPlaceForViewP placeAndPlaceForViewP : placeAndMaterialByCondition
) {
placeAndPlaceForViewP.setInventory(placeAndPlaceForViewP.getInventory() / 100);
}
@ -2673,13 +2728,13 @@ public class MaterialServiceImpl implements MaterialService {
mpv.setTakingInventory(number);
if ("Inventory_down".equals(takingResult)) {
// 如果盘亏
mpv.setStockTakingQuantity((int)(splitInventory.get(unit) - ObjectFormatUtil.toDouble(number)));
mpv.setStockTakingQuantity((int) (splitInventory.get(unit) - ObjectFormatUtil.toDouble(number)));
} else if ("Inventory_up".equals(takingResult)) {
// 如果盘盈
mpv.setStockTakingQuantity((int)(splitInventory.get(unit) + ObjectFormatUtil.toDouble(number)));
mpv.setStockTakingQuantity((int) (splitInventory.get(unit) + ObjectFormatUtil.toDouble(number)));
} else {
// 如果正常
mpv.setStockTakingQuantity((int)(splitInventory.get(unit) * 100));
mpv.setStockTakingQuantity((int) (splitInventory.get(unit) * 100));
}
}

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

@ -228,7 +228,7 @@ public class SplitUnitServiceImpl implements SplitUnitService {
disposeQuantity = disposeQuantity * 100 + quantity_in * 100;
// 拆单库存实际入库的数量
realQuantity = realQuantity - quantity_in * 100 * scale;
}else{
} else {
disposeQuantity *= 100;
}
// 设置当前计量单位的库存
@ -474,7 +474,7 @@ public class SplitUnitServiceImpl implements SplitUnitService {
// 当前基础单位的库存
SplitInventory baseSplitInventory = splitUnitMapper.findSplitInventoryByIidAndSid(paramForSplitInventory);
saveQuantity += (double)baseSplitInventory.getSaveQuantity() / 100;
saveQuantity += (double) baseSplitInventory.getSaveQuantity() / 100;
}
// 获取当前拆单记录与基础拆单记录之间的进制
@ -482,7 +482,7 @@ public class SplitUnitServiceImpl implements SplitUnitService {
paramForSplitInventory.put("sid", splitInfoId);
// 获取当前拆单记录的库存
SplitInventory splitInventory = splitUnitMapper.findSplitInventoryByIidAndSid(paramForSplitInventory);
saveQuantity += (double)splitInventory.getSaveQuantity() / 100 * splitInfoScaleQuantity;
saveQuantity += (double) splitInventory.getSaveQuantity() / 100 * splitInfoScaleQuantity;
// 获取当前的子类
SplitInfo splitInfoByParentId = splitUnitMapper.findSplitInfoByParentId(splitInfoId);
@ -544,6 +544,33 @@ public class SplitUnitServiceImpl implements SplitUnitService {
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
disposeQuantity += 1;
// 定义保存数量
splitInventory.setSaveQuantity((int) (splitInventory.getSaveQuantity() + new_saveQuantity * 100));
splitInventory.setSaveQuantity((int) (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.JSONObject;
import com.alibaba.fastjson.JSONPObject;
import com.dreamchaser.depository_manage.entity.Depository;
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.entity.*;
import com.dreamchaser.depository_manage.mapper.DepositoryMapper;
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_Details;
import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo_Details_Approver;
import com.dreamchaser.depository_manage.service.DepositoryRecordService;
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.*;
import com.dreamchaser.depository_manage.service.impl.QyWxOperationService;
import com.dreamchaser.depository_manage.utils.CreateQrCodeUtil;
import com.dreamchaser.depository_manage.utils.LinkInterfaceUtil;
@ -41,13 +35,16 @@ public class TestForOther {
@Autowired
DepositoryRecordService depositoryRecordService;
@Test
public void run() {
ApprovalInfo_Details approvalInfo = new ApprovalInfo_Details();
ApprovalInfo_Details_Approver approver = new ApprovalInfo_Details_Approver();
approver.setUserId("PangFuZhen");
approvalInfo.setApprover(approver);
depositoryRecordService.reviewByQyWxApprovalOut("1",approvalInfo,"460f46eaefb46bb0c171029f62e2cea6","2","202303180021", false,2);
// ApprovalInfo_Details approvalInfo = new ApprovalInfo_Details();
// ApprovalInfo_Details_Approver approver = new ApprovalInfo_Details_Approver();
// approver.setUserId("PangFuZhen");
// approvalInfo.setApprover(approver);
// depositoryRecordService.reviewByQyWxApprovalOut("1",approvalInfo,"460f46eaefb46bb0c171029f62e2cea6","2","202303180021", false,2);
}

Loading…
Cancel
Save