|
|
|
@ -1,12 +1,14 @@
|
|
|
|
|
package com.chanko.yunxi.mes.module.biz.service.storage;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
|
|
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
|
|
|
|
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
|
|
|
|
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
|
|
|
|
|
import com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum;
|
|
|
|
|
import com.chanko.yunxi.mes.module.biz.controller.admin.storage.vo.StoragePageReqVO;
|
|
|
|
|
import com.chanko.yunxi.mes.module.biz.controller.admin.storage.vo.StorageSaveReqVO;
|
|
|
|
|
import com.chanko.yunxi.mes.module.biz.controller.admin.storagemat.vo.StorageMatPageReqVO;
|
|
|
|
|
import com.chanko.yunxi.mes.module.biz.controller.admin.tplusstorageout.vo.TplusStorageOutPageReqVO;
|
|
|
|
|
import com.chanko.yunxi.mes.module.biz.dal.dataobject.material.MaterialDO;
|
|
|
|
|
import com.chanko.yunxi.mes.module.biz.dal.dataobject.projectorder.ProjectOrderDO;
|
|
|
|
|
import com.chanko.yunxi.mes.module.biz.dal.dataobject.projectorder.ProjectOrderSubDO;
|
|
|
|
@ -22,6 +24,7 @@ import com.chanko.yunxi.mes.module.biz.dal.mysql.procedure.ProcedureMapper;
|
|
|
|
|
import com.chanko.yunxi.mes.module.biz.dal.mysql.projectorder.ProjectOrderMapper;
|
|
|
|
|
import com.chanko.yunxi.mes.module.biz.dal.mysql.projectorder.ProjectOrderSubMapper;
|
|
|
|
|
import com.chanko.yunxi.mes.module.biz.dal.mysql.storage.StorageMapper;
|
|
|
|
|
import com.chanko.yunxi.mes.module.biz.dal.mysql.storagemat.StorageMatMapper;
|
|
|
|
|
import com.chanko.yunxi.mes.module.biz.dal.mysql.systemparameters.SystemParametersMapper;
|
|
|
|
|
import com.chanko.yunxi.mes.module.biz.dal.mysql.tpluslastestbom.TplusLastestBomMapper;
|
|
|
|
|
import com.chanko.yunxi.mes.module.biz.dal.mysql.tpluslasteststock.TplusLastestStockMapper;
|
|
|
|
@ -42,7 +45,9 @@ import org.springframework.validation.annotation.Validated;
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
|
import java.time.LocalDate;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.Calendar;
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
@ -101,6 +106,9 @@ public class StorageServiceImpl implements StorageService {
|
|
|
|
|
@Resource
|
|
|
|
|
private ProcedureMapper procedureMapper;
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
private StorageMatMapper storageMatMapper;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@ -147,7 +155,12 @@ public class StorageServiceImpl implements StorageService {
|
|
|
|
|
StorageMatPageReqVO reqVO = new StorageMatPageReqVO();
|
|
|
|
|
reqVO.setStockId(updateReqVO.getId())
|
|
|
|
|
.setWhId(updateReqVO.getWhId());
|
|
|
|
|
List<StorageMatDO> storageMatList = storageMatService.getStorageMatPage(reqVO);
|
|
|
|
|
List<StorageMatDO> storageMatList = new ArrayList<>();
|
|
|
|
|
if(updateObj.getStockType() == StockTypeEnum.IN.getCode()){
|
|
|
|
|
storageMatList =storageMatMapper.selectMatByStorckID(updateObj.getId());
|
|
|
|
|
}else{
|
|
|
|
|
storageMatList = storageMatService.getStorageMatPage(reqVO);
|
|
|
|
|
}
|
|
|
|
|
// if(CollUtil.isEmpty(storageMatList)) {
|
|
|
|
|
// throw exception(STORAGE_MAT_NOT_EXISTS);
|
|
|
|
|
// }
|
|
|
|
@ -165,8 +178,8 @@ public class StorageServiceImpl implements StorageService {
|
|
|
|
|
for (StorageMatDO storageMatDO : storageMatList) {
|
|
|
|
|
if (storageMatDO.getStorageOkQty() == null) storageMatDO.setStorageOkQty(new BigDecimal(0));
|
|
|
|
|
if (storageMatDO.getStockQuantity() == null) storageMatDO.setStockQuantity(new BigDecimal(0));
|
|
|
|
|
if (storageMatDO.getStorageOkQty().compareTo(new BigDecimal(0)) == 0
|
|
|
|
|
|| storageMatDO.getStockQuantity().compareTo(storageMatDO.getStorageOkQty()) < 0) {
|
|
|
|
|
if (updateObj.getStockType() == StockTypeEnum.OUT.getCode() && (storageMatDO.getStorageOkQty().compareTo(new BigDecimal(0)) == 0
|
|
|
|
|
|| storageMatDO.getStockQuantity().compareTo(storageMatDO.getStorageOkQty()) < 0)) {
|
|
|
|
|
throw exception(STORAGE_STOCK_QUANTITY_LACK);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -175,7 +188,7 @@ public class StorageServiceImpl implements StorageService {
|
|
|
|
|
|
|
|
|
|
List<TplusStorageOutDO> insertList = new ArrayList<>();
|
|
|
|
|
List<TplusStorageOutDO> updateList = new ArrayList<>();
|
|
|
|
|
if(OperateTypeEnum.AUDIT.name().equals(updateReqVO.getActive()) && !StringUtils.isEmpty(updateObj.getProjectOrderCode())){
|
|
|
|
|
if(OperateTypeEnum.AUDIT.name().equals(updateReqVO.getActive()) && updateObj.getStockType() == StockTypeEnum.OUT.getCode() && !StringUtils.isEmpty(updateObj.getProjectOrderCode())){
|
|
|
|
|
|
|
|
|
|
ProjectOrderDO projectOrderDO = projectOrderMapper.selectOne(ProjectOrderDO::getCode,updateObj.getProjectOrderCode());
|
|
|
|
|
List<ProjectOrderSubDO> projectOrderSubDOList = projectOrderSubMapper.selectListByProjectOrderId(projectOrderDO.getId());
|
|
|
|
@ -203,8 +216,9 @@ public class StorageServiceImpl implements StorageService {
|
|
|
|
|
.setProjectOrderCode(projectOrderDO.getCode())
|
|
|
|
|
.setDeptName(deptMapper.selectById(projectOrderDO.getBusinessDeptId()).getName())
|
|
|
|
|
.setStockCreateDate(updateObj.getOutboundTime())
|
|
|
|
|
.setWhName(warehouseMapper.selectById(projectOrderDO.getWarehouseId()).getWhName())
|
|
|
|
|
.setWhNo(warehouseMapper.selectById(projectOrderDO.getWarehouseId()).getWhNo())
|
|
|
|
|
.setWhId(updateObj.getWhId())
|
|
|
|
|
.setWhName(warehouseMapper.selectById(updateObj.getWhId()).getWhName())
|
|
|
|
|
.setWhNo(warehouseMapper.selectById(updateObj.getWhId()).getWhNo())
|
|
|
|
|
.setProductName(materialMapper.selectOne(MaterialDO::getCode,to.getTopCode()).getName())
|
|
|
|
|
.setProjectSubName(materialMapper.selectOne(MaterialDO::getCode,to.getProjectSubCode()).getName())
|
|
|
|
|
.setProcedureCode(to.getProcedureId()==null?null:procedureMapper.selectById(to.getProcedureId()).getCode())
|
|
|
|
@ -223,8 +237,9 @@ public class StorageServiceImpl implements StorageService {
|
|
|
|
|
.setProjectOrderCode(projectOrderDO.getCode())
|
|
|
|
|
.setDeptName(deptMapper.selectById(projectOrderDO.getBusinessDeptId()).getName())
|
|
|
|
|
.setStockCreateDate(updateObj.getOutboundTime())
|
|
|
|
|
.setWhName(warehouseMapper.selectById(projectOrderDO.getWarehouseId()).getWhName())
|
|
|
|
|
.setWhNo(warehouseMapper.selectById(projectOrderDO.getWarehouseId()).getWhNo())
|
|
|
|
|
.setWhId(updateObj.getWhId())
|
|
|
|
|
.setWhName(warehouseMapper.selectById(updateObj.getWhId()).getWhName())
|
|
|
|
|
.setWhNo(warehouseMapper.selectById(updateObj.getWhId()).getWhNo())
|
|
|
|
|
.setProductName(materialMapper.selectOne(MaterialDO::getCode,to.getTopCode()).getName())
|
|
|
|
|
.setProjectSubName(materialMapper.selectOne(MaterialDO::getCode,to.getProjectSubCode()).getName())
|
|
|
|
|
.setProcedureCode(to.getProcedureId()==null?null:procedureMapper.selectById(to.getProcedureId()).getCode())
|
|
|
|
@ -234,36 +249,62 @@ public class StorageServiceImpl implements StorageService {
|
|
|
|
|
.setIsSend(0);
|
|
|
|
|
updateList.add(tplusStorageOutDO);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
else if(OperateTypeEnum.AUDIT.name().equals(updateReqVO.getActive()) && updateObj.getStockType() == StockTypeEnum.OUT.getCode() && updateObj.getMaterialMode().equals(2)) {
|
|
|
|
|
// 如为提交同步生成出库单
|
|
|
|
|
if(updateObj.getStockType() == StockTypeEnum.OUT.getCode()){
|
|
|
|
|
|
|
|
|
|
// 逻辑变更:由提交状态改为审核状态时,通过用友接口推送出库单到TPlus
|
|
|
|
|
if(OperateTypeEnum.AUDIT.name().equals(updateReqVO.getActive())){
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
crossOrderManager.createStockOutOrder(updateObj.getId());
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
throw exception(CALL_API_ERROR);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// storageMatList.forEach(to->{
|
|
|
|
|
// TplusStorageOutDO tplusStorageOutDO =
|
|
|
|
|
// tplusStorageOutMapper.selectOne(TplusStorageOutDO::getStockId,updateObj.getId(),
|
|
|
|
|
// TplusStorageOutDO::getProjectSubCode,to.getProjectSubCode());
|
|
|
|
|
//
|
|
|
|
|
// if(tplusStorageOutDO==null){
|
|
|
|
|
// tplusStorageOutDO = new TplusStorageOutDO();
|
|
|
|
|
// tplusStorageOutDO.setId(null)
|
|
|
|
|
// .setStockId(updateObj.getId())
|
|
|
|
|
// .setStorageOkQty(to.getStorageOkQty())
|
|
|
|
|
// .setProjectSubCode(to.getProjectSubCode())
|
|
|
|
|
// .setProcedureId(to.getProcedureId())
|
|
|
|
|
// .setIsSend(0);
|
|
|
|
|
// insertList.add(tplusStorageOutDO);
|
|
|
|
|
// }else{
|
|
|
|
|
// tplusStorageOutDO.setStockId(updateObj.getId())
|
|
|
|
|
// .setStorageOkQty(to.getStorageOkQty())
|
|
|
|
|
// .setProjectSubCode(to.getProjectSubCode())
|
|
|
|
|
// .setProcedureId(to.getProcedureId())
|
|
|
|
|
// .setIsSend(0);
|
|
|
|
|
// updateList.add(tplusStorageOutDO);
|
|
|
|
|
// }
|
|
|
|
|
// });
|
|
|
|
|
}
|
|
|
|
|
else if(OperateTypeEnum.AUDIT.name().equals(updateReqVO.getActive()) && updateObj.getStockType() == StockTypeEnum.IN.getCode()){
|
|
|
|
|
|
|
|
|
|
Calendar calendar = Calendar.getInstance();
|
|
|
|
|
calendar.setTime(new Date(String.valueOf(LocalDate.now())));
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else if(OperateTypeEnum.AUDIT.name().equals(updateReqVO.getActive()) && updateObj.getMaterialMode().equals(2)) {
|
|
|
|
|
String firstDay = calendar.get(Calendar.YEAR)+"-"+calendar.get(Calendar.MONDAY)+"-01 00:00:00";
|
|
|
|
|
String lastDay = getLastDayOfMonth(new Date(String.valueOf(LocalDate.now()))).toString()+" 23:59:59";
|
|
|
|
|
|
|
|
|
|
storageMatList.forEach(to->{
|
|
|
|
|
TplusStorageOutDO tplusStorageOutDO =
|
|
|
|
|
tplusStorageOutMapper.selectOne(TplusStorageOutDO::getStockId,updateObj.getId(),
|
|
|
|
|
TplusStorageOutDO::getProjectSubCode,to.getProjectSubCode());
|
|
|
|
|
TplusStorageOutPageReqVO reqOutVO = new TplusStorageOutPageReqVO();
|
|
|
|
|
reqOutVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
|
|
|
|
reqOutVO.setSDate(firstDay);
|
|
|
|
|
reqOutVO.setEDate(lastDay);
|
|
|
|
|
|
|
|
|
|
if(tplusStorageOutDO==null){
|
|
|
|
|
tplusStorageOutDO = new TplusStorageOutDO();
|
|
|
|
|
tplusStorageOutDO.setId(null)
|
|
|
|
|
.setStockId(updateObj.getId())
|
|
|
|
|
.setStorageOkQty(to.getStorageOkQty())
|
|
|
|
|
.setProjectSubCode(to.getProjectSubCode())
|
|
|
|
|
.setProcedureId(to.getProcedureId())
|
|
|
|
|
.setIsSend(0);
|
|
|
|
|
insertList.add(tplusStorageOutDO);
|
|
|
|
|
}else{
|
|
|
|
|
tplusStorageOutDO.setStockId(updateObj.getId())
|
|
|
|
|
.setStorageOkQty(to.getStorageOkQty())
|
|
|
|
|
.setProjectSubCode(to.getProjectSubCode())
|
|
|
|
|
.setProcedureId(to.getProcedureId())
|
|
|
|
|
.setIsSend(0);
|
|
|
|
|
updateList.add(tplusStorageOutDO);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
PageResult<TplusStorageOutDO> storageOutList = tplusStorageOutMapper.selectPage(reqOutVO);
|
|
|
|
|
|
|
|
|
|
saveTplusStockInDate(updateObj,storageMatList,storageOutList.getList());
|
|
|
|
|
}
|
|
|
|
|
if(CollUtil.isNotEmpty(insertList)) {
|
|
|
|
|
tplusStorageOutMapper.insertBatch(insertList);
|
|
|
|
@ -279,12 +320,11 @@ public class StorageServiceImpl implements StorageService {
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
if(CollUtil.isNotEmpty(updateList)){
|
|
|
|
|
if(CollUtil.isNotEmpty(updateList)) {
|
|
|
|
|
tplusStorageOutMapper.updateBatch(updateList);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// // 如为提交同步生成出库单
|
|
|
|
|
// if(updateObj.getStockType() == StockTypeEnum.OUT.getCode()){
|
|
|
|
|
//
|
|
|
|
@ -300,6 +340,33 @@ public class StorageServiceImpl implements StorageService {
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
private void saveTplusStockInDate(StorageDO storageDO,List<StorageMatDO> storageMatDOS,List<TplusStorageOutDO> tplusStorageOutDOS){
|
|
|
|
|
|
|
|
|
|
// if(CollUtil.isNotEmpty(tplusStorageOutDOS)){
|
|
|
|
|
// tplusStorageOutDOS.stream().filter(ot->{
|
|
|
|
|
// storageMatDOS.stream().anyMatch(mo->mo.getWhId().equals(ot.getWhId()))
|
|
|
|
|
// });
|
|
|
|
|
// }
|
|
|
|
|
}
|
|
|
|
|
private Date getLastDayOfMonth(Date date) {
|
|
|
|
|
|
|
|
|
|
// 创建一个日历对象,并设置为传入的日期
|
|
|
|
|
Calendar calendar = Calendar.getInstance();
|
|
|
|
|
calendar.setTime(date);
|
|
|
|
|
|
|
|
|
|
// 获取传入日期的月份和年份
|
|
|
|
|
int year = calendar.get(Calendar.YEAR);
|
|
|
|
|
int month = calendar.get(Calendar.MONTH);
|
|
|
|
|
|
|
|
|
|
// 将日历日期设置为下个月的第一天
|
|
|
|
|
calendar.set(year, month+1, 1);
|
|
|
|
|
|
|
|
|
|
// 将日历日期向前推一天,即为传入日期的最后一天
|
|
|
|
|
calendar.add(Calendar.DATE, -1);
|
|
|
|
|
|
|
|
|
|
// 返回最后一天的日期
|
|
|
|
|
return calendar.getTime();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void deleteStorage(Long id) {
|
|
|
|
|