qiuhongwu 4 months ago
commit 45d8303787

@ -33,4 +33,8 @@ public class CreateStockOutDTO {
private List<RDRecordDetail> RDRecordDetails;
private String Memo;
private DepartmentDTO Department;
}

@ -0,0 +1,13 @@
package com.chanko.yunxi.mes.module.biz.controller.admin.chanjet.dto;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class DepartmentDTO {
private String code;
private String name;
}

@ -26,6 +26,7 @@ import com.chanko.yunxi.mes.module.biz.dal.dataobject.storage.StorageDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.storagemat.StorageMatDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.supplier.SupplierDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.systemparameters.SystemParametersDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.taskdispatch.TaskDispatchDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.taskdispatch.TaskDispatchDetailDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.taskreport.TaskReportDO;
import com.chanko.yunxi.mes.module.biz.dal.dataobject.warehouse.WarehouseDO;
@ -38,6 +39,7 @@ import com.chanko.yunxi.mes.module.biz.dal.mysql.storage.StorageMapper;
import com.chanko.yunxi.mes.module.biz.dal.mysql.supplier.SupplierMapper;
import com.chanko.yunxi.mes.module.biz.dal.mysql.systemparameters.SystemParametersMapper;
import com.chanko.yunxi.mes.module.biz.dal.mysql.taskdispatch.TaskDispatchDetailMapper;
import com.chanko.yunxi.mes.module.biz.dal.mysql.taskdispatch.TaskDispatchMapper;
import com.chanko.yunxi.mes.module.biz.dal.mysql.taskreport.TaskReportMapper;
import com.chanko.yunxi.mes.module.biz.dal.mysql.warehouse.WarehouseMapper;
import com.chanko.yunxi.mes.module.biz.dal.mysql.workshop.WorkshopMapper;
@ -129,6 +131,9 @@ public class ChanjetManager {
@Resource
private HttpServletRequest request;
@Resource
private TaskDispatchMapper taskDispatchMapper;
private Boolean getSystemParameters(){
Boolean chanjet_switch = true;
@ -826,7 +831,7 @@ public class ChanjetManager {
ProjectOrderSubDO subDO = new ProjectOrderSubDO();
BeanUtil.copyProperties(mList.get(0), subDO);
// subDO.setAmount(mList.stream().mapToInt(QuerySaleOrderListResDTO::getAmount).sum());
subDO.setAmount(mList.stream().mapToInt(QuerySaleOrderListResDTO::getAmount).sum());
subDO.setOrderAmount(mList.stream().mapToInt(QuerySaleOrderListResDTO::getAmount).sum());
subDOList.add(subDO);
});
@ -837,28 +842,66 @@ public class ChanjetManager {
// 根据销售订单的每个产品的BOM找到物料编码为6开头的物料原先的生成生产订单的逻辑不变再另外生成一张生产订单
// voList 是订单中的产品列表
List<ProjectOrderSubDO> subJSDOList = new ArrayList<>(100);
voList.stream().collect(Collectors.groupingBy(QuerySaleOrderListResDTO::getMaterialId)).forEach((mid, mList) -> {
MaterialDO materialDO = materialMapper.selectById(mid);
saveSemiFinishedOrder(materialDO,saveReqVO,mList.stream().mapToInt(QuerySaleOrderListResDTO::getAmount).sum());
saveSemiFinishedOrder(materialDO,saveReqVO,mList.stream().mapToInt(QuerySaleOrderListResDTO::getAmount).sum(),subJSDOList);
});
// 保存订单产品信息
if(!CollUtil.isEmpty(subJSDOList)) {
ProjectOrderDO newProjectOrderDO =BeanUtil.toBean(projectOrderMapper.selectById(saveReqVO.getId()),ProjectOrderDO.class);
String code = newProjectOrderDO.getCode()+"-挤塑";
newProjectOrderDO.setId(null)
.setCode(code)
.setExternalCode(code)
.setStatus(ValidStatusEnum.VALID.getCode())
.setOrderSource(ProjectOrderSourceEnum.INTERFACE.getCode())
.setOrderStatus(ProjectOrderStatusEnum.SAVE.getCode())
.setIsUrgency(YesOrNoEnum.N.getCode());
// 保存订单信息
projectOrderMapper.insert(newProjectOrderDO);
// 相同物料累计数量
List<ProjectOrderSubDO> subNewDOList = new ArrayList<>(100);
subJSDOList.stream().collect(Collectors.groupingBy(ProjectOrderSubDO::getMaterialId)).forEach((mid, mList) -> {
ProjectOrderSubDO subDO = new ProjectOrderSubDO();
BeanUtil.copyProperties(mList.get(0), subDO);
subDO.setProjectOrderId(newProjectOrderDO.getId());
subDO.setAmount(mList.stream().mapToInt(ProjectOrderSubDO::getAmount).sum());
subDO.setOrderAmount(mList.stream().mapToInt(ProjectOrderSubDO::getOrderAmount).sum());
subNewDOList.add(subDO);
});
projectOrderSubMapper.insertBatch(subNewDOList);
// 手动记录日志
operateLogFrameworkService.createOperateLog(request,
LocalDateTime.now(),
BusinessTypeEnum.PROJECT_ORDER.name(),
newProjectOrderDO.getId(),
OperateTypeEnum.valueOf(OperateTypeEnum.SAVE.name()).getType(),
"");
}
}
});
}
}
@SneakyThrows
private void saveSemiFinishedOrder(MaterialDO materialDO,ProjectOrderSaveReqVO saveReqVO,Integer orderAmount){
private void saveSemiFinishedOrder(MaterialDO materialDO,ProjectOrderSaveReqVO saveReqVO,Integer orderAmount,List<ProjectOrderSubDO> subJSDOList){
if(saveReqVO.getWarehouseId()==null) return;
// 查询当前物料子件物料信息
List<BomMaterialVO> bomDataList = queryProcessBom(materialDO.getCode(),saveReqVO.getWarehouseId());
if(CollUtil.isNotEmpty(bomDataList) && bomDataList.stream().filter(mo->mo.getProjectSubCode()!=null && mo.getProjectSubCode().toString().startsWith("6")).count()>0){
List<BomMaterialVO> mat6 = bomDataList.stream().filter(mo->mo.getProjectSubCode()!=null && mo.getProjectSubCode().toString().startsWith("6")).collect(Collectors.toList());
ProjectOrderDO newProjectOrderDO =BeanUtil.toBean(projectOrderMapper.selectById(saveReqVO.getId()),ProjectOrderDO.class);
List<ProjectOrderSubDO> subDOList = new ArrayList<>(16);
mat6.forEach(mo->{
MaterialDO item = materialMapper.selectOne("code",mo.getProjectSubCode());
BigDecimal matAmount = new BigDecimal("0");
@ -868,142 +911,20 @@ public class ChanjetManager {
matAmount = mo.getRequiredQuantity().divide(mo.getProduceQuantity()).multiply(new BigDecimal(orderAmount)).subtract(mo.getStockQuantity()).add(item.getInvSafe()==null?new BigDecimal(0):item.getInvSafe());
}
if(matAmount.intValue()>0){
matAmount = mo.getRequiredQuantity().divide(mo.getProduceQuantity()).multiply(new BigDecimal(orderAmount)).add(mo.getStockQuantity()).subtract(item.getInvSafe()==null?new BigDecimal(0):item.getInvSafe());
ProjectOrderSubDO subDO = new ProjectOrderSubDO();
subDO.setAmount(matAmount.intValue());
matAmount = mo.getRequiredQuantity().divide(mo.getProduceQuantity()).multiply(new BigDecimal(orderAmount));
subDO.setMaterialId(item.getId())
// .setAmount(matAmount.intValue())
.setOrderAmount(matAmount.intValue())
.setWarehouseId(saveReqVO.getWarehouseId());
subDOList.add(subDO);
subJSDOList.add(subDO);
}
});
// 保存订单产品信息
if(!CollUtil.isEmpty(subDOList)) {
String code = newProjectOrderDO.getCode()+"-挤塑";
newProjectOrderDO.setId(null)
.setCode(code)
.setExternalCode(code)
.setStatus(ValidStatusEnum.VALID.getCode())
.setOrderSource(ProjectOrderSourceEnum.INTERFACE.getCode())
.setOrderStatus(ProjectOrderStatusEnum.SAVE.getCode())
.setIsUrgency(YesOrNoEnum.N.getCode());
// 保存订单信息
projectOrderMapper.insert(newProjectOrderDO);
subDOList.stream().forEach(vo->vo.setProjectOrderId(newProjectOrderDO.getId()));
projectOrderSubMapper.insertBatch(subDOList);
}
// 手动记录日志
operateLogFrameworkService.createOperateLog(request,
LocalDateTime.now(),
BusinessTypeEnum.PROJECT_ORDER.name(),
newProjectOrderDO.getId(),
OperateTypeEnum.valueOf(OperateTypeEnum.SAVE.name()).getType(),
"");
}
}
@SneakyThrows
private void saveSemiFinishedProjectOrder(Long orderId, List<QuerySaleOrderListResDTO> subDOList){
ProjectOrderDO newProjectOrderDO =BeanUtil.toBean(projectOrderMapper.selectById(orderId),ProjectOrderDO.class);
newProjectOrderDO.setId(null)
.setCode(newProjectOrderDO.getCode()+"-1")
.setStatus(ValidStatusEnum.VALID.getCode())
.setOrderSource(ProjectOrderSourceEnum.INTERFACE.getCode())
.setOrderStatus(ProjectOrderStatusEnum.SAVE.getCode())
.setIsUrgency(YesOrNoEnum.N.getCode());
// 保存订单信息
projectOrderMapper.insert(newProjectOrderDO);
List<QuerySaleOrderListResDTO> queryMatList =subDOList.stream().filter(sub ->{ return sub.getMaterialId().toString().startsWith("6");}).collect(Collectors.toList());
List<String> matCodes = new ArrayList<>();
queryMatList.forEach(mat->{
MaterialDO materialDO = materialMapper.selectById(mat.getMaterialId());
if(materialDO !=null){
mat.setMaterialCode(materialDO.getCode());
mat.setInvSafe(materialDO.getInvSafe());
if(!matCodes.contains(mat.getMaterialCode())){
matCodes.add(mat.getMaterialCode());
}
}
});
// 查询当前物料的实时库存
List<QueryCurrentStockResVO> stockCurrentDatas = queryStock(matCodes,newProjectOrderDO.getWarehouseId());
List<ProjectOrderSubDO> insertList = new ArrayList<>(16);
for (QuerySaleOrderListResDTO o : queryMatList) {
Double matAmount = (double) 0;
if(insertList.stream().filter(uo -> uo.getMaterialCode().equals(o.getMaterialCode())).count()==0
&& materialMapper.selectById(o.getMaterialId())!=null){
ProjectOrderSubDO projectOrderSubDO = new ProjectOrderSubDO();
projectOrderSubDO.setProjectOrderId(newProjectOrderDO.getId()).setMaterialId(o.getMaterialId());
if (!StringUtils.isEmpty(o.getMaterialCode())) {
// 查询当前物料子件物料信息
CommonResult<List<QueryBomResVO>> bomDataList =
chanjetSpi.invokeRetList(QUERY_BOM, new QueryBomReqVO(new QueryBomReqVO.QueryBomDTO(o.getMaterialCode())), QueryBomResVO.class);
// 子件生产数量
AtomicReference<Double> produceQuantity = new AtomicReference<>(0d);
// 子件需求数量
AtomicReference<Double> requiredQuantity = new AtomicReference<>(0d);
bomDataList.getData().get(0).getBOMChildDTOs().forEach(ch->{
produceQuantity.updateAndGet(v -> v + ch.getProduceQuantity());
requiredQuantity.updateAndGet(v -> v + ch.getRequiredQuantity());
});
// 查询当前物料父件物料信息
QueryBomReqVO queryBomReqVOAsChild = new QueryBomReqVO(new QueryBomReqVO.QueryBomDTO(null,o.getMaterialCode()));
CommonResult<List<QueryBomResVO>> result =
chanjetSpi.invokeRetList(QUERY_BOM, queryBomReqVOAsChild,QueryBomResVO.class);
AtomicReference<Integer> parantAmount = new AtomicReference<>(0);
if(result!= null && result.getData()!=null) {
subDOList.stream().collect(Collectors.groupingBy(QuerySaleOrderListResDTO::getMaterialId)).forEach((mid, mList) -> {
if (mid.equals(result.getData().get(0).getID())){
parantAmount.set(mList.stream().mapToInt(QuerySaleOrderListResDTO::getAmount).sum());
}
});
}
QueryCurrentStockResVO currentStock =
stockCurrentDatas.stream().filter(stock->{
return stock.getInventoryCode().equals(o.getMaterialCode());
}).collect(Collectors.toList()).get(0);
// 该物料的实时库存
Integer availableQuantity = currentStock==null?0:new Integer(currentStock.getAvailableQuantity());
matAmount = (requiredQuantity.get()==0 ?0:produceQuantity.get()/requiredQuantity.get())*parantAmount.get()-availableQuantity+o.getInvSafe().doubleValue();
}
projectOrderSubDO.setAmount(matAmount.intValue());
insertList.add(projectOrderSubDO);
}
}
// 保存订单产品信息
if(!CollUtil.isEmpty(insertList)) {
projectOrderSubMapper.insertBatch(insertList);
}
// 手动记录日志
operateLogFrameworkService.createOperateLog(request,
LocalDateTime.now(),
BusinessTypeEnum.PROJECT_ORDER.name(),
newProjectOrderDO.getId(),
OperateTypeEnum.valueOf(OperateTypeEnum.SAVE.name()).getType(),
"");
}
/**
* bom
*
@ -1312,12 +1233,17 @@ public class ChanjetManager {
WarehouseDO aDo = warehouseMapper.selectById(storage.getWhId());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
TaskDispatchDO taskDispatchDO = taskDispatchMapper.selectOne("code",storage.getHeaderNo());
WorkshopDO workshopDO =workshopMapper.selectById(taskDispatchDO.getWorkshopId());
CreateStockOutDTO dto = new CreateStockOutDTO();
ArrayList<RDRecordDetail> detailList = new ArrayList<>();
dto.setExternalCode(storage.getStockNo())
.setVoucherDate(sdf.format(new Date()))
.setRDRecordDetails(detailList)
.setWarehouse(new Warehouse(aDo.getWhNo()))
.setDepartment(new DepartmentDTO().setCode(workshopDO.getCode()).setName(workshopDO.getName()))
;
matList.forEach(mat -> {

Loading…
Cancel
Save