添加自动出入库逻辑

This commit is contained in:
z 2025-07-01 15:12:14 +08:00
parent 917680e1c6
commit 1af7bb7430
12 changed files with 240 additions and 102 deletions

View File

@ -66,9 +66,8 @@ public class OrderYsController {
@Operation(summary = "获得应收记录") @Operation(summary = "获得应收记录")
@Parameter(name = "id", description = "编号", required = true, example = "1024") @Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('heli:order-ys:query')") @PreAuthorize("@ss.hasPermission('heli:order-ys:query')")
public CommonResult<OrderYsRespVO> getOrderYs(@RequestParam("id") Integer id) { public CommonResult<OrderYsDO> getOrderYs(@RequestParam("id") Integer id) {
OrderYsDO orderYs = orderYsService.getOrderYs(id); return success(orderYsService.getOrderYs(id));
return success(BeanUtils.toBean(orderYs, OrderYsRespVO.class));
} }
@GetMapping("/page") @GetMapping("/page")

View File

@ -59,14 +59,14 @@ public class OrderYsRespVO {
@ExcelProperty("备注") @ExcelProperty("备注")
private String rem; private String rem;
private BigDecimal shouFuKuanBiLi; private BigDecimal shouFuKuan;
private BigDecimal twoFuKuanBiLi; private BigDecimal twoFuKuan;
private BigDecimal threeFuKuanBiLi; private BigDecimal threeFuKuan;
private BigDecimal fourFuKuanBiLi; private BigDecimal fourFuKuan;
private BigDecimal fiveFuKuanBiLi; private BigDecimal fiveFuKuan;
private BigDecimal sixFuKuanBiLi; private BigDecimal sixFuKuan;
} }

View File

@ -171,4 +171,8 @@ public class PartPurchaseOrderPageRespVO extends BaseDO {
* 单据状态,0 待送审1已送审2已审核3已打回 默认是1 * 单据状态,0 待送审1已送审2已审核3已打回 默认是1
*/ */
private Integer status; private Integer status;
private String isFoam;
private Long projectId;
private Long projectPlanId;
private String customerId;
} }

View File

@ -92,6 +92,7 @@ public interface PurchaseOrderMakeDetailMapper extends BaseMapperX<PurchaseOrder
.disableLogicDel() .disableLogicDel()
.disableSubLogicDel() .disableSubLogicDel()
.eq(PurchaseOrderMakeDO::getGoodsType, 2) .eq(PurchaseOrderMakeDO::getGoodsType, 2)
.eq(PurchaseOrderMakeDetailDO::getDeleted, 0)
.eq(Objects.nonNull(pageReqVO.getPurchaseOrderId()), PurchaseOrderMakeDO::getId, pageReqVO.getPurchaseOrderId()) .eq(Objects.nonNull(pageReqVO.getPurchaseOrderId()), PurchaseOrderMakeDO::getId, pageReqVO.getPurchaseOrderId())
.eq(StringUtils.isNotBlank(pageReqVO.getContractNo()), PurchaseOrderMakeDO::getContractNo, pageReqVO.getContractNo()) .eq(StringUtils.isNotBlank(pageReqVO.getContractNo()), PurchaseOrderMakeDO::getContractNo, pageReqVO.getContractNo())
.eq(Objects.nonNull(pageReqVO.getDocumentStatus()), PurchaseOrderMakeDO::getStatus, pageReqVO.getDocumentStatus()) .eq(Objects.nonNull(pageReqVO.getDocumentStatus()), PurchaseOrderMakeDO::getStatus, pageReqVO.getDocumentStatus())
@ -103,8 +104,6 @@ public interface PurchaseOrderMakeDetailMapper extends BaseMapperX<PurchaseOrder
.like(Objects.nonNull(pageReqVO.getOwnerName()), AdminUserDO::getNickname, pageReqVO.getOwnerName()) .like(Objects.nonNull(pageReqVO.getOwnerName()), AdminUserDO::getNickname, pageReqVO.getOwnerName())
.like(Objects.nonNull(pageReqVO.getSupplierName()), SupplierDO::getName, pageReqVO.getSupplierName()); .like(Objects.nonNull(pageReqVO.getSupplierName()), SupplierDO::getName, pageReqVO.getSupplierName());
String sqlStr= query.getTargetSql();
PageResult<PartPurchaseOrderPageRespVO> pageResult = selectJoinPage(pageReqVO, PartPurchaseOrderPageRespVO.class, query); PageResult<PartPurchaseOrderPageRespVO> pageResult = selectJoinPage(pageReqVO, PartPurchaseOrderPageRespVO.class, query);
return pageResult; return pageResult;
} }

View File

@ -134,14 +134,25 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
purchaseOrderNoDetailDO.setUpdateTime(null); purchaseOrderNoDetailDO.setUpdateTime(null);
purchaseOrderNoDetailDO.setPurchaseOrderId(purchaseOrderId); purchaseOrderNoDetailDO.setPurchaseOrderId(purchaseOrderId);
purchaseOrderNoDetailDO.setPurchaseRemAmount(detailDO.getPurchaseAmount()); purchaseOrderNoDetailDO.setPurchaseRemAmount(detailDO.getPurchaseAmount());
PurchaseOrderMakeDetailDO orderMakeDetailDO = purchaseOrderMakeDetailMapper.selectById(detailDO.getId());
if (ObjectUtil.isNotEmpty(orderMakeDetailDO)){
PurchaseOrderMakeDO orderMakeDO = purchaseOrderMakeMapper.selectById(orderMakeDetailDO.getPurchaseOrderId());
if (ObjectUtil.isNotEmpty(orderMakeDO)){
purchaseOrderNoDetailDO.setProjectId(orderMakeDO.getProjectId());
purchaseOrderNoDetailDO.setProjectPlanId(orderMakeDO.getProjectPlanId());
purchaseOrderNoDetailDO.setCustomerId(orderMakeDO.getCustomerId());
}
}
purchaseOrderNoDetailMapper.insert(purchaseOrderNoDetailDO); purchaseOrderNoDetailMapper.insert(purchaseOrderNoDetailDO);
long purchaseOrderDetailId = purchaseOrderNoDetailDO.getId(); long purchaseOrderDetailId = purchaseOrderNoDetailDO.getId();
PurchaseOrderMakeDetailDO purchaseOrderMakeDetailDO = new PurchaseOrderMakeDetailDO(); PurchaseOrderMakeDetailDO purchaseOrderMakeDetailDO = new PurchaseOrderMakeDetailDO();
purchaseOrderMakeDetailDO.setId(detailDO.getId()); purchaseOrderMakeDetailDO.setId(detailDO.getId());
purchaseOrderMakeDetailDO.setOrderStatus(2); purchaseOrderMakeDetailDO.setOrderStatus(2);
purchaseOrderMakeDetailDO.setPurchaseOrderNoId(purchaseOrderId); purchaseOrderMakeDetailDO.setPurchaseOrderNoId(purchaseOrderId);
purchaseOrderMakeDetailDO.setPurchaseOrderNoDetailId(purchaseOrderDetailId); purchaseOrderMakeDetailDO.setPurchaseOrderNoDetailId(purchaseOrderDetailId);
purchaseOrderMakeDetailDO.setPurchaseNo(purchaseOrderNoDO.getPurchaseNo());
purchaseOrderMakeDetailMapper.updateById(purchaseOrderMakeDetailDO); purchaseOrderMakeDetailMapper.updateById(purchaseOrderMakeDetailDO);
}); });
@ -165,10 +176,12 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
List<MaterialPlanBoomDO> materialPlanBoomDOs= materialPlanBoomMapper.selectList("project_purchase_order_make_id", id); List<MaterialPlanBoomDO> materialPlanBoomDOs= materialPlanBoomMapper.selectList("project_purchase_order_make_id", id);
materialPlanBoomDOs.forEach(materialPlanBoomDO -> { materialPlanBoomDOs.forEach(materialPlanBoomDO -> {
MaterialPlanBoomDO materialPlanBoom = new MaterialPlanBoomDO(); UpdateWrapper<MaterialPlanBoomDO> updateWrapper = new UpdateWrapper<>();
materialPlanBoom.setId(materialPlanBoomDO.getId()); updateWrapper.eq("id", materialPlanBoomDO.getId())
materialPlanBoom.setMplanStatus(2); .set("mplan_status", 2)
materialPlanBoomMapper.updateById(materialPlanBoom); .set("rej_remark", null);
materialPlanBoomMapper.update(updateWrapper);
}); });
return true; return true;
} }
@ -181,11 +194,9 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
purchaseOrderMakeMapper.updateById(purchaseOrderMakeDO); purchaseOrderMakeMapper.updateById(purchaseOrderMakeDO);
purchaseOrderMakeMapper.deleteById(purchaseOrderMakeDO); purchaseOrderMakeMapper.deleteById(purchaseOrderMakeDO);
List<PurchaseOrderMakeDetailDO> list= purchaseOrderMakeDetailMapper.selectList("purchase_order_id", updateReqVO.getId()); LambdaUpdateWrapper<PurchaseOrderMakeDetailDO> wrapper = new LambdaUpdateWrapper<>();
list.forEach(detailDO -> { wrapper.eq(PurchaseOrderMakeDetailDO::getPurchaseOrderId, updateReqVO.getId());
purchaseOrderNoDetailMapper.deleteById(detailDO); purchaseOrderMakeDetailMapper.delete(wrapper);
});
List<MaterialPlanBoomDO> materialPlanBoomDOs= materialPlanBoomMapper.selectList("project_purchase_order_make_id", updateReqVO.getId()); List<MaterialPlanBoomDO> materialPlanBoomDOs= materialPlanBoomMapper.selectList("project_purchase_order_make_id", updateReqVO.getId());
materialPlanBoomDOs.forEach(materialPlanBoom -> { materialPlanBoomDOs.forEach(materialPlanBoom -> {
UpdateWrapper<MaterialPlanBoomDO> updateWrapper = new UpdateWrapper<>(); UpdateWrapper<MaterialPlanBoomDO> updateWrapper = new UpdateWrapper<>();
@ -357,13 +368,13 @@ public class PartPurchaseOrderServiceImpl implements PartPurchaseOrderService{
purchaseOrderMakeDetailDO.setTheWeight(updateReqVO.getTheWeight()); purchaseOrderMakeDetailDO.setTheWeight(updateReqVO.getTheWeight());
purchaseOrderMakeDetailDO.setDuEmpId(updateReqVO.getDuEmpId()); purchaseOrderMakeDetailDO.setDuEmpId(updateReqVO.getDuEmpId());
purchaseOrderMakeDetailDO.setIsFoam(updateReqVO.getIsFoam()); purchaseOrderMakeDetailDO.setIsFoam(updateReqVO.getIsFoam());
purchaseOrderMakeDetailDO.setPurchaseNo(purchaseOrderMakeDOPurchaseNo);
purchaseOrderMakeDetailMapper.insert(purchaseOrderMakeDetailDO); purchaseOrderMakeDetailMapper.insert(purchaseOrderMakeDetailDO);
long purchaseOrderMakeDetailId = purchaseOrderMakeDetailDO.getId(); long purchaseOrderMakeDetailId = purchaseOrderMakeDetailDO.getId();
MaterialPlanBoomDO materialPlanBoomDO = new MaterialPlanBoomDO(); MaterialPlanBoomDO materialPlanBoomDO = new MaterialPlanBoomDO();
materialPlanBoomDO.setId(updateReqVO.getId()); materialPlanBoomDO.setId(updateReqVO.getId());
materialPlanBoomDO.setMplanStatus(1); materialPlanBoomDO.setMplanStatus(1);
materialPlanBoomDO.setRejRemark("");
materialPlanBoomDO.setProjectPurchaseOrderMakeId(purchaseOrderMakeId); materialPlanBoomDO.setProjectPurchaseOrderMakeId(purchaseOrderMakeId);
materialPlanBoomDO.setPurchaseNo(purchaseOrderMakeDOPurchaseNo); materialPlanBoomDO.setPurchaseNo(purchaseOrderMakeDOPurchaseNo);
materialPlanBoomDO.setProjectPurchaseOrderMakeDetailId(purchaseOrderMakeDetailId); materialPlanBoomDO.setProjectPurchaseOrderMakeDetailId(purchaseOrderMakeDetailId);

View File

@ -10,19 +10,29 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.materialplandetail.Materi
import com.chanko.yunxi.mes.module.heli.dal.dataobject.procedure.ProcedureDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.procedure.ProcedureDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.processbom.ProcessBomDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storage.StorageDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagemat.StorageMatDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplan.MaterialPlanMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplan.MaterialPlanMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.MaterialPlanBoomMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplanboom.MaterialPlanBoomMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplandetail.MaterialPlanDetailMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.materialplandetail.MaterialPlanDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.processbom.ProcessBomMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storage.StorageMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagemat.StorageMatMapper;
import com.chanko.yunxi.mes.module.heli.enums.CodeEnum;
import com.chanko.yunxi.mes.module.heli.service.procedure.ProcedureService; import com.chanko.yunxi.mes.module.heli.service.procedure.ProcedureService;
import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService;
import com.chanko.yunxi.mes.module.heli.service.storage.StorageService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordernodetail.vo.*; import com.chanko.yunxi.mes.module.heli.controller.admin.purchaseordernodetail.vo.*;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO;
@ -34,6 +44,9 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordernodetail.Purchase
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success; import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success;
import static com.chanko.yunxi.mes.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.STOCK_IN;
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.STOCK_OUT;
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*; import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
/** /**
@ -57,6 +70,16 @@ public class PurchaseOrderNoDetailServiceImpl implements PurchaseOrderNoDetailSe
private MaterialMapper materialMapper; private MaterialMapper materialMapper;
@Resource @Resource
private ProcessBomMapper pocessBomMapper; private ProcessBomMapper pocessBomMapper;
@Resource
private SerialNumberService serialNumberService;
@Resource
private StorageMapper storageMapper;
@Resource
private StorageMatMapper storageMatMapper;
@Resource
private StorageService storageService;
@Override @Override
public Long createPurchaseOrderNoDetail(PurchaseOrderNoDetailSaveReqVO createReqVO) { public Long createPurchaseOrderNoDetail(PurchaseOrderNoDetailSaveReqVO createReqVO) {
@ -124,6 +147,36 @@ public class PurchaseOrderNoDetailServiceImpl implements PurchaseOrderNoDetailSe
@Transactional @Transactional
public CommonResult<Boolean> receiveGoods(List<PurchaseOrderNoDetailDO> list) { public CommonResult<Boolean> receiveGoods(List<PurchaseOrderNoDetailDO> list) {
List<MaterialDO> materialDOList=new ArrayList<MaterialDO>(); List<MaterialDO> materialDOList=new ArrayList<MaterialDO>();
//自动生成入库单
StorageDO storageDO = new StorageDO();
storageDO.setStockType(1);
// 月度流水号
SerialNumberDO serialNumberDO = serialNumberService.getSerialNumber(CodeEnum.STOCK_IN.name(), new SimpleDateFormat("yyyyMMdd").format(new Date()));
serialNumberDO.setSerialNumber(serialNumberDO.getSerialNumber()+1);
// 入库前缀
storageDO.setStockNo(STOCK_IN.getCode(serialNumberDO.getSerialNumber().toString()));
serialNumberService.updateSerialNumber(serialNumberDO);
storageDO.setStatus(2);
storageDO.setKeeper(getLoginUser().getId());
storageDO.setKeeperTime(LocalDateTime.now());
storageMapper.insert(storageDO);
//自动生成出库单
StorageDO out = new StorageDO();
out.setStockType(2);
// 月度流水号
SerialNumberDO serialNumber = serialNumberService.getSerialNumber(CodeEnum.STOCK_OUT.name(), new SimpleDateFormat("yyyyMMdd").format(new Date()));
serialNumber.setSerialNumber(serialNumber.getSerialNumber()+1);
// 出库前缀
out.setStockNo(STOCK_OUT.getCode(serialNumber.getSerialNumber().toString()));
serialNumberService.updateSerialNumber(serialNumber);
out.setStatus(2);
out.setOutbound(getLoginUser().getId());
out.setOutboundTime(LocalDateTime.now());
storageMapper.insert(out);
//入库物料集合
ArrayList<StorageMatDO> storageMatDOS = new ArrayList<>();
//出库库物料集合
ArrayList<StorageMatDO> outList = new ArrayList<>();
for (PurchaseOrderNoDetailDO detailDO : list) { for (PurchaseOrderNoDetailDO detailDO : list) {
PurchaseOrderNoDetailDO byId = purchaseOrderNoDetailMapper.selectById(detailDO.getId()); PurchaseOrderNoDetailDO byId = purchaseOrderNoDetailMapper.selectById(detailDO.getId());
if (ObjectUtil.isNotEmpty(byId)){ if (ObjectUtil.isNotEmpty(byId)){
@ -134,6 +187,16 @@ public class PurchaseOrderNoDetailServiceImpl implements PurchaseOrderNoDetailSe
} }
byId.setPurchaseRemAmount(byId.getPurchaseRemAmount().subtract(detailDO.getPurchaseRemAmounts())); byId.setPurchaseRemAmount(byId.getPurchaseRemAmount().subtract(detailDO.getPurchaseRemAmounts()));
purchaseOrderNoDetailMapper.updateById(byId); purchaseOrderNoDetailMapper.updateById(byId);
StorageMatDO storageMatDO = new StorageMatDO();
StorageMatDO outMat = new StorageMatDO();
storageMatDO.setStockId(storageDO.getId());
storageMatDO.setStorageOkQty(detailDO.getPurchaseRemAmounts());
storageMatDO.setProjectNo(byId.getProjectPlanSubId().toString());
storageMatDO.setProjectSubName(byId.getName());
outMat.setStockId(out.getId());
outMat.setStorageOkQty(detailDO.getPurchaseRemAmounts());
outMat.setProjectNo(byId.getProjectPlanSubId().toString());
outMat.setProjectSubName(byId.getName());
ProcessBomDetailDO bomDetailDO = processBomDetailMapper.selectById(detailDO.getBoomDetailId()); ProcessBomDetailDO bomDetailDO = processBomDetailMapper.selectById(detailDO.getBoomDetailId());
if (ObjectUtil.isNotEmpty(bomDetailDO)){ if (ObjectUtil.isNotEmpty(bomDetailDO)){
String bomCode=""; String bomCode="";
@ -150,9 +213,7 @@ public class PurchaseOrderNoDetailServiceImpl implements PurchaseOrderNoDetailSe
} }
} }
if (ObjectUtil.isNotEmpty(bomDetailDO.getBlueprintNo())){ if (ObjectUtil.isNotEmpty(bomDetailDO.getBlueprintNo())){
if (ObjectUtil.isNotEmpty(processBomDO.getBlueprintNo())){
blueprintNo=bomDetailDO.getBlueprintNo(); blueprintNo=bomDetailDO.getBlueprintNo();
}
} }
MaterialPlanBoomDO boomDO = materialPlanBoomMapper.selectById(detailDO.getProjectMaterialPlanBoomId()); MaterialPlanBoomDO boomDO = materialPlanBoomMapper.selectById(detailDO.getProjectMaterialPlanBoomId());
if (ObjectUtil.isNotEmpty(boomDO)){ if (ObjectUtil.isNotEmpty(boomDO)){
@ -170,13 +231,25 @@ public class PurchaseOrderNoDetailServiceImpl implements PurchaseOrderNoDetailSe
materialDO.setVirtualPart("Y"); materialDO.setVirtualPart("Y");
MaterialDO material = materialMapper.selectMaterial(code); MaterialDO material = materialMapper.selectMaterial(code);
if (ObjectUtil.isEmpty(material)){ if (ObjectUtil.isEmpty(material)){
materialDOList.add(materialDO); // materialDOList.add(materialDO);
materialMapper.insert(materialDO);
storageMatDO.setMatId(materialDO.getId());
outMat.setMatId(materialDO.getId());
}else {
storageMatDO.setMatId(material.getId());
outMat.setMatId(material.getId());
} }
} }
storageMatDOS.add(storageMatDO);
outList.add(outMat);
} }
} }
materialMapper.insertBatch(materialDOList); storageMatMapper.insertBatch(storageMatDOS);
storageMatMapper.insertBatch(outList);
storageService.updateMatLogList(storageDO.getId(),2);
storageService.updateMatLogList(out.getId(),2);
// materialMapper.insertBatch(materialDOList);
return success(true); return success(true);
} }

View File

@ -8,11 +8,17 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.storageindetail.vo.Stor
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderno.PurchaseOrderNoDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseorderno.PurchaseOrderNoDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.purchaseordernodetail.PurchaseOrderNoDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.serialnumber.SerialNumberDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storage.StorageDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageindetail.StorageInDetailDO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageindetail.StorageInDetailDO;
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagemat.StorageMatDO;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseorderno.PurchaseOrderNoMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseorderno.PurchaseOrderNoMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordernodetail.PurchaseOrderNoDetailMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.purchaseordernodetail.PurchaseOrderNoDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storage.StorageMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storageindetail.StorageInDetailMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.storageindetail.StorageInDetailMapper;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagemat.StorageMatMapper;
import com.chanko.yunxi.mes.module.heli.enums.CodeEnum;
import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService; import com.chanko.yunxi.mes.module.heli.service.serialnumber.SerialNumberService;
import com.chanko.yunxi.mes.module.heli.service.storage.StorageService;
import com.sun.corba.se.spi.ior.IdentifiableFactory; import com.sun.corba.se.spi.ior.IdentifiableFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
@ -22,6 +28,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -34,8 +41,8 @@ import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagein.StorageInMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.storagein.StorageInMapper;
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.PURCHASE_ORDER; import static com.chanko.yunxi.mes.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.STOCK_IN; import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.*;
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*; import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
/** /**
@ -57,6 +64,12 @@ public class StorageInServiceImpl implements StorageInService {
private SerialNumberService serialNumberService; private SerialNumberService serialNumberService;
@Resource @Resource
private PurchaseOrderNoMapper purchaseOrderNoMapper; private PurchaseOrderNoMapper purchaseOrderNoMapper;
@Resource
private StorageMapper storageMapper;
@Resource
private StorageMatMapper storageMatMapper;
@Resource
private StorageService storageService;
@Override @Override
public Long createStorageIn(StorageInSaveReqVO createReqVO) { public Long createStorageIn(StorageInSaveReqVO createReqVO) {
// 插入 // 插入
@ -185,6 +198,10 @@ public class StorageInServiceImpl implements StorageInService {
} }
StorageInDO storageInDO = new StorageInDO(); StorageInDO storageInDO = new StorageInDO();
//入库物料集合
ArrayList<StorageMatDO> storageMatDOS = new ArrayList<>();
//出库库物料集合
ArrayList<StorageMatDO> outList = new ArrayList<>();
// 月度流水号 // 月度流水号
SerialNumberDO serialNumberDO = new SerialNumberDO(); SerialNumberDO serialNumberDO = new SerialNumberDO();
serialNumberDO = serialNumberService.getSerialNumber(PURCHASE_ORDER.name(), new SimpleDateFormat("yyyyMMdd").format(new Date())); serialNumberDO = serialNumberService.getSerialNumber(PURCHASE_ORDER.name(), new SimpleDateFormat("yyyyMMdd").format(new Date()));
@ -195,8 +212,54 @@ public class StorageInServiceImpl implements StorageInService {
storageInDO.setIsPrint("N"); storageInDO.setIsPrint("N");
storageInDO.setOrdDate(new Date()); storageInDO.setOrdDate(new Date());
storageInMapper.insert(storageInDO); storageInMapper.insert(storageInDO);
// 回写序列记录
serialNumberService.updateSerialNumber(serialNumberDO);
//自动生成入库单
StorageDO storageDO = new StorageDO();
storageDO.setStockType(1);
// 月度流水号
SerialNumberDO serialNumberDO1 = serialNumberService.getSerialNumber(CodeEnum.STOCK_IN.name(), new SimpleDateFormat("yyyyMMdd").format(new Date()));
serialNumberDO1.setSerialNumber(serialNumberDO1.getSerialNumber()+1);
// 入库前缀
storageDO.setStockNo(STOCK_IN.getCode(serialNumberDO1.getSerialNumber().toString()));
serialNumberService.updateSerialNumber(serialNumberDO1);
storageDO.setStatus(2);
storageDO.setKeeper(getLoginUser().getId());
storageDO.setKeeperTime(LocalDateTime.now());
storageMapper.insert(storageDO);
//自动生成出库单
StorageDO out = new StorageDO();
out.setStockType(2);
// 月度流水号
SerialNumberDO serialNumber = serialNumberService.getSerialNumber(CodeEnum.STOCK_OUT.name(), new SimpleDateFormat("yyyyMMdd").format(new Date()));
serialNumber.setSerialNumber(serialNumber.getSerialNumber()+1);
// 出库前缀
out.setStockNo(STOCK_OUT.getCode(serialNumber.getSerialNumber().toString()));
serialNumberService.updateSerialNumber(serialNumber);
out.setStatus(2);
out.setOutbound(getLoginUser().getId());
out.setOutboundTime(LocalDateTime.now());
storageMapper.insert(out);
List<StorageInDetailDO> storageInDetailDOList = new ArrayList<>(); List<StorageInDetailDO> storageInDetailDOList = new ArrayList<>();
for (PurchaseOrderNoDetailDO orderNoDetailDO : list) { for (PurchaseOrderNoDetailDO orderNoDetailDO : list) {
//入库明细
StorageMatDO storageMatDO = new StorageMatDO();
storageMatDO.setStockId(storageDO.getId());
storageMatDO.setStorageOkQty(orderNoDetailDO.getPurchaseRemAmounts());
storageMatDO.setProjectNo(ObjectUtil.isEmpty(orderNoDetailDO.getProjectPlanSubId())?null:orderNoDetailDO.getProjectPlanSubId().toString());
storageMatDO.setProjectSubName(orderNoDetailDO.getName());
storageMatDO.setMatId(orderNoDetailDO.getMaterialId());
storageMatDOS.add(storageMatDO);
//出库明细
StorageMatDO outMat = new StorageMatDO();
outMat.setStockId(out.getId());
outMat.setStorageOkQty(orderNoDetailDO.getPurchaseRemAmounts());
outMat.setProjectNo(ObjectUtil.isEmpty(orderNoDetailDO.getProjectPlanSubId())?null:orderNoDetailDO.getProjectPlanSubId().toString());
outMat.setProjectSubName(orderNoDetailDO.getName());
outMat.setMatId(orderNoDetailDO.getMaterialId());
outList.add(outMat);
StorageInDetailDO storageInDetailDO = new StorageInDetailDO(); StorageInDetailDO storageInDetailDO = new StorageInDetailDO();
storageInDetailDO.setStorageNoId(storageInDO.getId()); storageInDetailDO.setStorageNoId(storageInDO.getId());
storageInDetailDO.setProjectSubCode(orderNoDetailDO.getProjectSubCode()); storageInDetailDO.setProjectSubCode(orderNoDetailDO.getProjectSubCode());
@ -250,8 +313,10 @@ public class StorageInServiceImpl implements StorageInService {
storageInDetailDOList.add(storageInDetailDO); storageInDetailDOList.add(storageInDetailDO);
} }
storageInDetailMapper.insertBatch(storageInDetailDOList); storageInDetailMapper.insertBatch(storageInDetailDOList);
// 回写序列记录 storageMatMapper.insertBatch(storageMatDOS);
serialNumberService.updateSerialNumber(serialNumberDO); storageMatMapper.insertBatch(outList);
storageService.updateMatLogList(storageDO.getId(),2);
storageService.updateMatLogList(out.getId(),2);
return CommonResult.success(true); return CommonResult.success(true);
} }

View File

@ -78,35 +78,35 @@
> >
<el-row> <el-row>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="首付款" prop="shouFuKuanBiLi" > <el-form-item label="首付款" prop="shouFuKuan" >
<el-input v-model="formData.shouFuKuanBiLi" placeholder="请输入应收金额" disabled /> <el-input v-model="formData.shouFuKuan" placeholder="请输入" disabled />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="第二笔款" prop="twoFuKuanBiLi" > <el-form-item label="第二笔款" prop="twoFuKuan" >
<el-input v-model="formData.twoFuKuanBiLi" placeholder="请输入应收金额" disabled /> <el-input v-model="formData.twoFuKuan" placeholder="请输入" disabled />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="第三笔款" prop="threeFuKuanBiLi" > <el-form-item label="第三笔款" prop="threeFuKuan" >
<el-input v-model="formData.threeFuKuanBiLi" placeholder="请输入应收金额" disabled /> <el-input v-model="formData.threeFuKuan" placeholder="请输入" disabled />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="第四笔款" prop="fourFuKuanBiLi" > <el-form-item label="第四笔款" prop="fourFuKuan" >
<el-input v-model="formData.fourFuKuanBiLi" placeholder="请输入应收金额" disabled /> <el-input v-model="formData.fourFuKuan" placeholder="请输入" disabled />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="第五笔款" prop="fiveFuKuanBiLi" > <el-form-item label="第五笔款" prop="fiveFuKuan" >
<el-input v-model="formData.fiveFuKuanBiLi" placeholder="请输入应收金额" disabled /> <el-input v-model="formData.fiveFuKuan" placeholder="请输入" disabled />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="第六笔款" prop="sixFuKuanBiLi" > <el-form-item label="第六笔款" prop="sixFuKuan" >
<el-input v-model="formData.sixFuKuanBiLi" placeholder="请输入应收金额" disabled /> <el-input v-model="formData.sixFuKuan" placeholder="请输入" disabled />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -209,12 +209,12 @@ const formData = ref({
orderYsDetails: [], orderYsDetails: [],
rem: undefined, rem: undefined,
amount:undefined, amount:undefined,
shouFuKuanBiLi:undefined, shouFuKuan:undefined,
twoFuKuanBiLi:undefined, twoFuKuan:undefined,
threeFuKuanBiLi:undefined, threeFuKuan:undefined,
fourFuKuanBiLi:undefined, fourFuKuan:undefined,
fiveFuKuanBiLi:undefined, fiveFuKuan:undefined,
sixFuKuanBiLi:undefined sixFuKuan:undefined
}) })
// const subFormRules = reactive({ // const subFormRules = reactive({
// paymentDate: [{ // paymentDate: [{

View File

@ -145,6 +145,7 @@
}} }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="打回原因" align="center" prop="rejRemark" min-width="120" />
<el-table-column label="采购单号" align="center" prop="purchaseNo" min-width="120" /> <el-table-column label="采购单号" align="center" prop="purchaseNo" min-width="120" />
</el-table> </el-table>
<!-- 分页 --> <!-- 分页 -->
@ -161,21 +162,15 @@
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict' import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import download from '@/utils/download' import download from '@/utils/download'
import { useCommonStateWithOut } from '@/store/modules/common' import { useCommonStateWithOut } from '@/store/modules/common'
import UserSelect from "@/views/heli/materialplan/userSelectNew.vue";
import {inject, ref} from "vue"; import {inject, ref} from "vue";
import * as MaterialPlanApi from "@/api/heli/materialplan"; import * as MaterialPlanApi from "@/api/heli/materialplan";
import * as MaterialPlanBoomApi from "@/api/heli/materialplanboom"; import * as MaterialPlanBoomApi from "@/api/heli/materialplanboom";
import * as PartPurchaseOrderApi from "@/api/heli/partpurchaseorder"; import * as PartPurchaseOrderApi from "@/api/heli/partpurchaseorder";
import {ElTable} from "element-plus"; import {ElTable} from "element-plus";
import {useUserStore} from "@/store/modules/user"; import {useUserStore} from "@/store/modules/user";
import {dateFormatter1} from "@/utils/formatTime";
import {getPartPurchasePages} from "@/api/heli/materialplan";
import SupplierSelect from "@/views/heli/hlvuestyle/supplierSelect.vue"; import SupplierSelect from "@/views/heli/hlvuestyle/supplierSelect.vue";
import {getMaterialPlanBoom} from "@/api/heli/materialplanboom";
import {createPurchaseOrderMake} from "@/api/heli/partpurchaseorder";
const formLoading = ref(false) // 12 const formLoading = ref(false) // 12
defineOptions({ name: 'standard' })
const userStore = useUserStore() const userStore = useUserStore()
const username = userStore.getUser.nickname const username = userStore.getUser.nickname
const reload: any = inject('reload') const reload: any = inject('reload')
@ -215,8 +210,16 @@ const exportLoading = ref(false) // 导出的加载中
const getList = async () => { const getList = async () => {
loading.value = true loading.value = true
try { try {
list.value=[]
const data = await MaterialPlanApi.getPartPurchasePages(queryParams) const data = await MaterialPlanApi.getPartPurchasePages(queryParams)
list.value = data.list list.value = data.list
list.value.forEach(item=> {
if(item.isFoams == 'Y'){
item.isFoams = true
}else{
item.isFoams = false
}
})
total.value = data.total total.value = data.total
} finally { } finally {
loading.value = false loading.value = false
@ -237,22 +240,16 @@ const handleExportDetail = async () => {
} }
} }
const handleOutsourcingChange= async (row: any) => { const handleOutsourcingChange= async (row: any) => {
console.log(1)
if(row.isFoams == false){ if(row.isFoams == false){
row.isFoam = 'N' row.isFoam = 'N'
console.log(2)
}else{ }else{
console.log(3)
row.isFoam = 'Y' row.isFoam = 'Y'
console.log(row.isFoam)
} }
} }
const handleSelectionChange = (val) => { const handleSelectionChange = (val) => {
// multipleTable.value.clearSelection() // multipleTable.value.clearSelection()
multipleTable.value=val multipleTable.value=val
console.log( val)
console.log( multipleTable.value)
} }
/** 搜索按钮操作 */ /** 搜索按钮操作 */
const handleQuery = () => { const handleQuery = () => {
@ -267,14 +264,6 @@ const handleSelectedUser = (currentIndex, newValue: any) => {
list.value[currentIndex].supplierIds = newValue?.id list.value[currentIndex].supplierIds = newValue?.id
} }
const singleSubmission= (val) =>{
multipleTable.value=[]
multipleTable.value.push(val)
submitForm();
}
const routerToPurchaseOrderNo=()=>{
router.push({ path: '/purchase/purchaseorderno'});
}
const singleSubmissions=()=>{ const singleSubmissions=()=>{
submitForm(); submitForm();
} }

View File

@ -42,6 +42,11 @@
<el-table-column prop="projectSubCode" min-width="200" label="子项目编码" align="center"/> <el-table-column prop="projectSubCode" min-width="200" label="子项目编码" align="center"/>
<el-table-column prop="boomName" min-width="200" label="物料名称" align="center"/> <el-table-column prop="boomName" min-width="200" label="物料名称" align="center"/>
<el-table-column prop="procedureName" min-width="120" label="工序" align="center"/> <el-table-column prop="procedureName" min-width="120" label="工序" align="center"/>
<el-table-column prop="isFoam" min-width="120" label="是否泡沫" align="center">
<template #default="scope">
{{ scope.row.isFoam=='Y'?"是":"否"}}
</template>
</el-table-column>
<el-table-column prop="composition" min-width="120" label="材质" align="center"/> <el-table-column prop="composition" min-width="120" label="材质" align="center"/>
<el-table-column prop="boomAmount" min-width="100" label="需求数量" align="center"/> <el-table-column prop="boomAmount" min-width="100" label="需求数量" align="center"/>
<el-table-column prop="purchaseAmount" min-width="100" label="采购数量" align="center"/> <el-table-column prop="purchaseAmount" min-width="100" label="采购数量" align="center"/>

View File

@ -215,20 +215,13 @@ const submitForm = async () => {
} }
// // 3. // // 3.
// for (const item of list) { for (const item of list) {
// if (item.projectMaterialPlanNo) { if (item.orderStatus==2) {
// message.error(`${item.procedureName} ${item.materialName} ,`); message.error(`工序${item.procedureName}中零件 ${item.boomName} 已生成采购订单,请确认`);
// return; return;
// } }
// if (!item.boomArriveDate) { // boomArriveDate
// message.error(`${item.procedureName} ${item.materialName} ,`); }
// return;
// }
// if (!item.duEmpId) {
// message.error(`${item.procedureName} ${item.materialName} ,`);
// return;
// }
// }
// 4. Element Plus // 4. Element Plus
formLoading.value = true; formLoading.value = true;

View File

@ -81,6 +81,7 @@
<el-button @click="receiveGoods()" type="primary" size="large" >收货</el-button> <el-button @click="receiveGoods()" type="primary" size="large" >收货</el-button>
<el-button @click="isPrint()" type="primary" size="large" :loading="printLoading">打印</el-button> <el-button @click="isPrint()" type="primary" size="large" :loading="printLoading">打印</el-button>
<el-button @click="deleteForm()" type="danger" size="large" >删除</el-button> <el-button @click="deleteForm()" type="danger" size="large" >删除</el-button>
<el-button @click="cancel" size="large"> </el-button>
</div> </div>
</el-card> </el-card>
@ -107,7 +108,7 @@
<span style="margin-left:20px;width: 110px">联系人{{ printData.contactName }}</span> <span style="margin-left:20px;width: 110px">联系人{{ printData.contactName }}</span>
<span style="margin-left:20px;width: 150px">电话{{ printData.contactMobile }}</span> <span style="margin-left:20px;width: 150px">电话{{ printData.contactMobile }}</span>
</div> </div>
</div> </div>
</div> </div>
<table class="print-table"> <table class="print-table">
@ -183,7 +184,7 @@
</div> </div>
</div> </div>
</div> </div>
<template #footer> <template #footer>
<el-button @click="printDialogVisible = false">关闭</el-button> <el-button @click="printDialogVisible = false">关闭</el-button>
@ -260,12 +261,11 @@ const handleSelectionChange = (val) => {
multipleTable.value=val multipleTable.value=val
} }
const cancel = async () => {
const closeForm = async () => {
router.push({ path: '/purchase/purchaseorderno' }) router.push({ path: '/purchase/purchaseorderno' })
tagsViewStore.delVisitedView(router.currentRoute.value) tagsViewStore.delVisitedView(router.currentRoute.value)
} }
const userList = ref<UserApi.UserVO[]>([]) // const userList = ref<UserApi.UserVO[]>([]) //
const queryParams = reactive({ const queryParams = reactive({
@ -337,22 +337,22 @@ function doPrint() {
.order-info { .order-info {
justify-content: space-between; justify-content: space-between;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
align-items: center; align-items: center;
} }
.stamp-info { .stamp-info {
margin-top: 10px; margin-top: 10px;
} }
.stamp-info span{ .stamp-info span{
font-size: 15px !important; font-size: 15px !important;
} }
.order-info span{ .order-info span{
font-size: 15px !important; font-size: 15px !important;
} }
.print-table { .print-table {
width: 100%; width: 100%;
@ -371,7 +371,7 @@ function doPrint() {
} }
@media print { @media print {
body { margin: 0; } body { margin: 0; }
.print-content { .print-content {
width: 100%; width: 100%;
margin: 0; margin: 0;
padding: 10px; padding: 10px;
@ -391,7 +391,7 @@ function doPrint() {
iframe.contentWindow?.print() iframe.contentWindow?.print()
setTimeout(() => document.body.removeChild(iframe), 1000) setTimeout(() => document.body.removeChild(iframe), 1000)
} }
} }
function limitTo20Chars(input) { function limitTo20Chars(input) {
@ -456,12 +456,12 @@ const getList = async () => {
body * { body * {
visibility: hidden; visibility: hidden;
} }
/* 只显示打印区域 */ /* 只显示打印区域 */
#printArea, #printArea * { #printArea, #printArea * {
visibility: visible; visibility: visible;
} }
/* 打印区域定位 */ /* 打印区域定位 */
#printArea { #printArea {
position: absolute; position: absolute;
@ -469,7 +469,7 @@ const getList = async () => {
top: 0; top: 0;
width: 100%; width: 100%;
} }
/* 隐藏弹窗相关元素 */ /* 隐藏弹窗相关元素 */
.el-dialog, .el-dialog__wrapper, .el-dialog__header, .el-dialog__footer { .el-dialog, .el-dialog__wrapper, .el-dialog__header, .el-dialog__footer {
display: none !important; display: none !important;
@ -478,7 +478,7 @@ const getList = async () => {
.order-info { .order-info {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
@ -490,11 +490,11 @@ const getList = async () => {
} }
.stamp-info { .stamp-info {
margin-top: 10px; margin-top: 10px;
} }
.stamp-info span{ .stamp-info span{
font-size: 15px !important; font-size: 15px !important;
} }
.print-table { .print-table {
width: 100%; width: 100%;
@ -515,12 +515,12 @@ const getList = async () => {
} }
.print-table th { .print-table th {
background-color: #f5f7fa; background-color: #f5f7fa;
color: #303133; color: #303133;
font-weight: 600; font-weight: 600;
font-size: 13px !important; font-size: 13px !important;
} }
</style> </style>