Browse Source

[feat]

生产管理 生产订单
修改生产入库单明细对象,新增售后设备列表字段;
修改生产订单对象,新增采购确认状态字段和生产bom列表字段;
修改设备履历详情字段,新增品质状态字段;
修改生产订单部门主管确认service方法,新增判断采购部门领导确认,设置采购确认状态为已确认;
新增生产订单跳转采购审核、下载上传模板、导入工序问题列表、显示问题列表、查找已加的设备履历、查找未提交/不合格设备履历controller接口;
修改生成生产订单、工程审核、采购审核service方法;
修改生产订单mapper,添加字段;
dev
王晓迪 1 week ago
parent
commit
0f3e7c31d6
  1. 13
      ruoyi-admin/src/main/java/com/ruoyi/erp/domain/ErpInboundOrderDetail.java
  2. 140
      ruoyi-admin/src/main/java/com/ruoyi/system/controller/SysMakeOrderController.java
  3. 24
      ruoyi-admin/src/main/java/com/ruoyi/system/domain/SysMakeOrder.java
  4. 1
      ruoyi-admin/src/main/java/com/ruoyi/system/dto/SysEquipDetailDto.java
  5. 10
      ruoyi-admin/src/main/java/com/ruoyi/system/service/ISysMakeOrderService.java
  6. 277
      ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/SysMakeOrderServiceImpl.java
  7. 8
      ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/SysMakeorderDeptServiceImpl.java
  8. 9
      ruoyi-admin/src/main/resources/mapper/system/SysMakeOrderMapper.xml

13
ruoyi-admin/src/main/java/com/ruoyi/erp/domain/ErpInboundOrderDetail.java

@ -1,6 +1,9 @@
package com.ruoyi.erp.domain;
import java.math.BigDecimal;
import java.util.List;
import com.ruoyi.aftersales.domain.AfterSalesShippingDevice;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
@ -57,6 +60,8 @@ public class ErpInboundOrderDetail extends BaseEntity
private String salesOrderMaterialNo;
private List<AfterSalesShippingDevice> salesShippingDeviceList;
public void setId(Long id)
{
this.id = id;
@ -164,6 +169,14 @@ public class ErpInboundOrderDetail extends BaseEntity
this.salesOrderMaterialNo = salesOrderMaterialNo;
}
public List<AfterSalesShippingDevice> getSalesShippingDeviceList() {
return salesShippingDeviceList;
}
public void setSalesShippingDeviceList(List<AfterSalesShippingDevice> salesShippingDeviceList) {
this.salesShippingDeviceList = salesShippingDeviceList;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

140
ruoyi-admin/src/main/java/com/ruoyi/system/controller/SysMakeOrderController.java

@ -14,6 +14,7 @@ import com.ruoyi.common.exception.BusinessException;
import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.erp.domain.ErpBomImportVo;
import com.ruoyi.erp.domain.ErpInboundOrder;
import com.ruoyi.erp.service.IErpMaterialService;
import com.ruoyi.financial.domain.FinancialReceivables;
@ -24,19 +25,21 @@ import com.ruoyi.system.dto.SysEquipMaterialDto;
import com.ruoyi.system.dto.SysMakeorderDeptDto;
import com.ruoyi.system.dto.SysMakeorderMaterialDto;
import com.ruoyi.system.mapper.OutsourceMaterialMapper;
import com.ruoyi.system.service.ISysMakeOrderService;
import com.ruoyi.system.service.ISysMakeorderDeptService;
import com.ruoyi.system.service.ISysSalesOrderChildService;
import com.ruoyi.system.service.ISysSalesOrderService;
import com.ruoyi.system.service.*;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
* 生产订单Controller
@ -68,6 +71,9 @@ public class SysMakeOrderController extends BaseController
@Autowired
private OutsourceMaterialMapper outsourceMaterialMapper;
@Autowired
private IProcessIssueRecordService processIssueRecordService;
@GetMapping("/test")
public AjaxResult test(){
sysMakeOrderService.generateMakeOrderBySalesOrderCode("XS20240411007");
@ -140,6 +146,25 @@ public class SysMakeOrderController extends BaseController
return prefix + "/gcsh";
}
/**
* 跳转采购审核页面
*/
@GetMapping("/cgsh/{id}")
public String cgsh(@PathVariable("id") Long id, ModelMap mmap)
{
SysMakeOrder sysMakeOrder = sysMakeOrderService.selectSysMakeOrderById(id);
SysSalesOrder sysSalesOrder = salesOrderService.selectSysSalesOrderBySalesOrderCode(sysMakeOrder.getSaleNo());
if(StringUtils.isNotNull(sysSalesOrder)){
sysMakeOrder.setOrderType(sysSalesOrder.getSalesOrderType());
sysMakeOrder.setSalesman(sysSalesOrder.getBusinessMembers());
sysMakeOrder.setCustomerName(sysSalesOrder.getEnterpriseName());
sysMakeOrder.setCustomerId(sysSalesOrder.getEnterpriseCode());
sysMakeOrder.setCustomerOderCode(sysSalesOrder.getSalesOrderNumber());
}
mmap.put("sysMakeOrder", sysMakeOrder);
return prefix + "/cgsh";
}
/**
* 跳转添加领料页面
*/
@ -192,8 +217,6 @@ public class SysMakeOrderController extends BaseController
/**
* 保存添加委外计划
*/
// @RequiresPermissions("system:makeorder:edit")
// @Log(title = "生产订单", businessType = BusinessType.UPDATE)
@PostMapping("/addOutsourcePlan")
@ResponseBody
public AjaxResult addOutsourcePlan(@RequestBody OutsourcePlan outsourcePlan)
@ -252,7 +275,63 @@ public class SysMakeOrderController extends BaseController
return toAjax(sysMakeOrderService.addProduceInboundSave(erpInboundOrder));
}
/**
* 下载导入模板
*/
@GetMapping("/importTemplate")
@ResponseBody
public AjaxResult importTemplate()
{
ExcelUtil<ProcessIssueRecord> util = new ExcelUtil<ProcessIssueRecord>(ProcessIssueRecord.class);
return util.importTemplateExcel("工序问题记录模板");
}
/*
* 导入工序问题列表*/
@Transactional(rollbackFor = Exception.class)
@PostMapping("/importProcessIssueRecord")
@ResponseBody
public AjaxResult handleFileUpload(@RequestParam("file") MultipartFile file,
@RequestParam(value = "serialNo",required = true) String serialNo,
@RequestParam(value = "materialNo") String materialNo,
@RequestParam(value = "makeNo") String makeNo){
// 处理文件上传
try {
// 验证文件类型
if (!file.getContentType().equals("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")) {
return AjaxResult.error("无效的文件类型,请上传Excel文件。");
}
ExcelUtil<ProcessIssueRecord> excelUtil = new ExcelUtil<ProcessIssueRecord>(ProcessIssueRecord.class);
List<ProcessIssueRecord> processIssueRecords = excelUtil.importExcel(file.getInputStream());
String msg = processIssueRecordService.importProcessIssueRecord(serialNo,materialNo,makeNo,processIssueRecords);
return AjaxResult.success(msg);
} catch (Exception e) {
return AjaxResult.error("文件上传失败: " + e.getMessage());
}
}
/*
* 显示工序问题列表*/
@GetMapping("/showRecords/{serialNo}")
public String showRecords(@PathVariable("serialNo") String serialNo, ModelMap mmap)
{
ProcessIssueRecord tempRecord = new ProcessIssueRecord();
tempRecord.setSerialNo(serialNo);
List<ProcessIssueRecord> processIssueRecordList = processIssueRecordService.selectProcessIssueRecordList(tempRecord);
mmap.put("processIssueRecordList", processIssueRecordList);
return prefix + "/showRecords";
}
@PostMapping("/removeRecords")
@ResponseBody
public AjaxResult removeRecords(@RequestParam(value = "serialNo",required = true) String serialNo,
@RequestParam(value = "materialNo") String materialNo,
@RequestParam(value = "makeNo") String makeNo){
ProcessIssueRecord processIssueRecord = new ProcessIssueRecord();
processIssueRecord.setMakeNo(makeNo);
processIssueRecord.setMaterialNo(materialNo);
processIssueRecord.setSerialNo(serialNo);
return toAjax(processIssueRecordService.removeProcessIssueRecord(processIssueRecord));
}
/**
@ -282,16 +361,15 @@ public class SysMakeOrderController extends BaseController
@PostMapping("/addEquipmentResumeSave")
public AjaxResult addEquipmentResumeSave(@RequestBody SysEquipMaterialDto equipMaterialDto)
{
return toAjax(sysMakeOrderService.addEquipmentResumeSave(equipMaterialDto));
return AjaxResult.success(sysMakeOrderService.addEquipmentResumeSave(equipMaterialDto));
}
/**
* 查找已经添加的设备履历
*/
@PostMapping("/getEquipMaterialDetails")
@ResponseBody
public TableDataInfo getEquipMaterialDetails(SysEquipMaterialDto equipMaterialDto){
// @PostMapping("/getEquipMaterialDetails")
// @ResponseBody
public List<SysEquipDetailDto> getEquipMaterialDetails(SysEquipMaterialDto equipMaterialDto){
startPage();
String makeNo = equipMaterialDto.getMakeNo();
String salesOrderCode = equipMaterialDto.getQuoteId();
@ -300,9 +378,38 @@ public class SysMakeOrderController extends BaseController
afterSalesShippingDevice.setSalesOrderCode(salesOrderCode);
afterSalesShippingDevice.setMaterialNo(equipMaterialDto.getMaterialCode());
List<SysEquipDetailDto> equipDetailDtos = salesShippingDeviceService.selectAfterSalesShippingDeviceByNoAndCode(afterSalesShippingDevice);
return getDataTable(equipDetailDtos);
return equipDetailDtos;
}
/**
* 查找未提交/品质不合格设备履历
*/
@PostMapping("/getUnqualifyEquipMaterialDetails")
@ResponseBody
public TableDataInfo getUnqualifyEquipMaterialDetails(SysEquipMaterialDto equipMaterialDto){
startPage();
List<SysEquipDetailDto> equipDetailDtos = getEquipMaterialDetails(equipMaterialDto);
List<SysEquipDetailDto> filteredEquipDetailDtos = equipDetailDtos.stream()
.filter(dto -> dto.getQualityStatus().equals("0") || dto.getQualityStatus().equals("3"))
.collect(Collectors.toList());
return getDataTable(filteredEquipDetailDtos);
}
/**
* 查找已经添加的设备履历
*/
@PostMapping("/getQualifyEquipMaterialDetails")
@ResponseBody
public TableDataInfo getQualifyEquipMaterialDetails(SysEquipMaterialDto equipMaterialDto){
startPage();
List<SysEquipDetailDto> equipDetailDtos = getEquipMaterialDetails(equipMaterialDto);
List<SysEquipDetailDto> filteredEquipDetailDtos = equipDetailDtos.stream()
.filter(dto -> dto.getQualityStatus().equals("1") || dto.getQualityStatus().equals("2"))
.collect(Collectors.toList());
return getDataTable(filteredEquipDetailDtos);
}
/**
* 部门评审
@ -347,11 +454,18 @@ public class SysMakeOrderController extends BaseController
@RequiresPermissions("system:makeorder:engineer")
@PostMapping("/gcReview")
@ResponseBody
public AjaxResult gcReview(SysMakeOrder sysMakeOrder){
public AjaxResult gcReview(@RequestBody SysMakeOrder sysMakeOrder){
sysMakeOrderService.gcReview(sysMakeOrder);
return AjaxResult.success("工程审核成功!");
}
@RequiresPermissions("system:makeorder:purchase")
@PostMapping("/cgReview")
@ResponseBody
public AjaxResult cgReview(@RequestBody SysMakeOrder sysMakeOrder){
sysMakeOrderService.cgReview(sysMakeOrder);
return AjaxResult.success("采购审核成功!");
}
/**
* 查询生产订单列表

24
ruoyi-admin/src/main/java/com/ruoyi/system/domain/SysMakeOrder.java

@ -6,6 +6,7 @@ import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import java.math.BigDecimal;
import java.util.List;
/**
* 生产订单对象 sys_makeorder
@ -36,6 +37,11 @@ public class SysMakeOrder extends BaseEntity
@Excel(name = "使用状态")
private String useStatus;
/*采购确认状态(0待确认,1已确认)*/
private String purchaseStatus;
/** 生产订单号 */
@Excel(name = "生产订单号")
private String makeNo;
@ -94,6 +100,8 @@ public class SysMakeOrder extends BaseEntity
/** 部门主管确认状态 */
private String deptLeaderConfirmStatus;
private List<SysMakeorderBom> sysMakeorderBomList;
public void setId(Long id)
{
this.id = id;
@ -281,6 +289,22 @@ public class SysMakeOrder extends BaseEntity
this.deptLeaderConfirmStatus = deptLeaderConfirmStatus;
}
public String getPurchaseStatus() {
return purchaseStatus;
}
public void setPurchaseStatus(String purchaseStatus) {
this.purchaseStatus = purchaseStatus;
}
public List<SysMakeorderBom> getSysMakeorderBomList() {
return sysMakeorderBomList;
}
public void setSysMakeorderBomList(List<SysMakeorderBom> sysMakeorderBomList) {
this.sysMakeorderBomList = sysMakeorderBomList;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

1
ruoyi-admin/src/main/java/com/ruoyi/system/dto/SysEquipDetailDto.java

@ -37,5 +37,6 @@ public class SysEquipDetailDto implements Serializable {
/** 是否添加工序问题记录(0代表是 1代表否) */
private String addProcessIssueRecordFlag;
private String qualityStatus;
}

10
ruoyi-admin/src/main/java/com/ruoyi/system/service/ISysMakeOrderService.java

@ -1,8 +1,10 @@
package com.ruoyi.system.service;
import com.ruoyi.aftersales.domain.AfterSalesShippingDevice;
import com.ruoyi.erp.domain.ErpInboundOrder;
import com.ruoyi.system.domain.OutsourcePlan;
import com.ruoyi.system.domain.SysMakeOrder;
import com.ruoyi.system.domain.SysMakeorderBom;
import com.ruoyi.system.dto.SysEquipMaterialDto;
import com.ruoyi.system.dto.SysMakeorderMaterialDto;
import com.ruoyi.warehouse.domain.WarehouseStorageOrder;
@ -104,6 +106,12 @@ public interface ISysMakeOrderService
*/
void gcReview(SysMakeOrder sysMakeOrder);
/**
* 采购审核
* @param sysMakeOrder
*/
void cgReview(SysMakeOrder sysMakeOrder);
List<SysMakeorderMaterialDto> selectMaterialList(SysMakeOrder sysMakeOrder);
/*
@ -119,7 +127,7 @@ public interface ISysMakeOrderService
/**
* 添加保存设备履历
*/
int addEquipmentResumeSave(SysEquipMaterialDto equipMaterialDto);
List<AfterSalesShippingDevice> addEquipmentResumeSave(SysEquipMaterialDto equipMaterialDto);
/**
* 添加保存创建生产入库和设备履历设置

277
ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/SysMakeOrderServiceImpl.java

@ -12,6 +12,8 @@ import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.erp.domain.ErpBom;
import com.ruoyi.erp.domain.ErpInboundOrder;
import com.ruoyi.erp.domain.ErpInboundOrderDetail;
import com.ruoyi.erp.domain.ErpMaterial;
import com.ruoyi.erp.mapper.ErpMaterialMapper;
import com.ruoyi.erp.service.IErpBomService;
import com.ruoyi.purchase.service.IPurchasePlanService;
import com.ruoyi.quality.domain.QualityOrder;
@ -37,6 +39,7 @@ import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
* 生产订单Service业务层处理
@ -98,6 +101,12 @@ public class SysMakeOrderServiceImpl implements ISysMakeOrderService
@Autowired
private SysMakeorderBomMapper makeorderBomMapper;
@Autowired
private ProcessIssueRecordMapper processIssueRecordMapper;
@Autowired
private ErpMaterialMapper erpMaterialMapper;
/**
* 查询生产订单
*
@ -242,7 +251,7 @@ public class SysMakeOrderServiceImpl implements ISysMakeOrderService
// 是
makeOrder.setUseStatus("1");
makeOrder.setSaleNo(salesOrderCode);
makeOrder.setMakeStatus("0");
makeOrder.setPurchaseStatus("0");
makeOrder.setSalesman(sysSalesOrderVo.getBusinessMembers());
makeOrder.setSaleNo(sysSalesOrderVo.getSalesOrderCode());
makeOrder.setOrderType(sysSalesOrderVo.getSalesOrderType());
@ -253,50 +262,46 @@ public class SysMakeOrderServiceImpl implements ISysMakeOrderService
makeOrder.setMaterial(String.valueOf(sysSalesOrderVo.getMaterialSum()));
String makeNo = redisCache.generateBillNo("PO");
makeOrder.setMakeNo(makeNo);
makeOrder.setCreateTime(sysSalesOrderVo.getApplyTime());
insertSysMakeOrder(makeOrder);
// 生成部门待预审数据
List<SysSalesOrderChild> salesOrderChildList = salesOrderChildService.selectSysSalesOrderChildByQuoteId(salesOrderCode);
if(CollectionUtil.isNotEmpty(salesOrderChildList)){
salesOrderChildList.forEach(t->{
String materialCode = t.getMaterialCode();
makeorderDeptService.generateYsDataByMakeNoAndMaterialNo(makeNo,materialCode,salesOrderType);
});
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void gcReview(SysMakeOrder sysMakeOrder) {
String makeNo = sysMakeOrder.getMakeNo();
// 定义一个列表用于收集新插入的SysMakeorderBom
List<SysMakeorderBom> insertedSysMakeorderBoms = new ArrayList<>();
// 待生产
sysMakeOrder.setMakeStatus("3");
updateByMakeNo(sysMakeOrder);
// 根据销售订单物料生成BOM
String saleNo = sysMakeOrder.getSaleNo();
List<SysSalesOrderChild> salesOrderChildList = salesOrderChildService.selectSysSalesOrderChildByQuoteId(saleNo);
if(CollectionUtil.isNotEmpty(salesOrderChildList)){
// 根据销售订单物料生成生产订单BOM
Long sortNo = 0L;
for (int i = 0; i < salesOrderChildList.size(); i++) {
SysSalesOrderChild sysSalesOrderChild = salesOrderChildList.get(i);
for (SysSalesOrderChild sysSalesOrderChild:salesOrderChildList) {
String materialCode = sysSalesOrderChild.getMaterialCode();
// 0阶
// 0阶保存(后续采购审核可能会修改0阶)
ErpBom erpBom = erpBomService.selectErpBomByOneMaterialNo(materialCode);
if (erpBom != null){
SysMakeorderBom makeorderBom = new SysMakeorderBom();
BeanUtils.copyProperties(erpBom,makeorderBom, "id","delFlag","createBy","createTime","updateBy","updateTime","remark");
makeorderBom.setMakeNo(makeNo);
makeorderBom.setSalesOrderCode(salesOrderCode);
makeorderBom.setLossRate(erpBom.getLossRate());
makeorderBom.setUseNum(erpBom.getUseNum());
makeorderBom.setLevel(0L);
sortNo ++;
makeorderBom.setSortNo(sortNo);
makeorderBom.setOrderNum(sysSalesOrderChild.getMaterialNum());
makeorderBom.setDeliveryTime(sysSalesOrderChild.getDeliveryTime());
makeorderBom.setCreateBy(ShiroUtils.getLoginName());
makeorderBom.setCreateTime(DateUtils.getNowDate());
makeorderBomService.insertSysMakeorderBom(makeorderBom);
Long id = erpBom.getId();
//采购类型无下阶物料, 只有料号为5/6/7/8/9开头时才有bom,其他为原料/辅料
if(!erpBom.getProcessMethod().equals("0") && materialCode!=null && ((materialCode.startsWith("5"))||(materialCode.startsWith("6"))
||(materialCode.startsWith("7"))||(materialCode.startsWith("8"))||(materialCode.startsWith("9")))){
// 查询1阶及以下
ErpBom oneLevelBom = new ErpBom();
oneLevelBom.setParentId(id);
List<ErpBom> subBomList = erpBomService.selectOtherOrderErpBomAllLevelList(oneLevelBom);
List<ErpBom> subBomList = erpBomService.selectPurchaseLimitedErpBomAllLevelList(oneLevelBom);
for (int j = 0; j < subBomList.size(); j++) {
ErpBom subBom = subBomList.get(j);
SysMakeorderBom orderBom = new SysMakeorderBom();
BeanUtils.copyProperties(subBom,orderBom, "id","delFlag","createBy","createTime","updateBy","updateTime","remark");
orderBom.setMakeNo(makeNo);
orderBom.setSalesOrderCode(saleNo);
orderBom.setSalesOrderCode(salesOrderCode);
orderBom.setSalesOrderMaterialNo(materialCode);
orderBom.setLossRate(subBom.getLossRate());
orderBom.setUseNum(subBom.getUseNum());
@ -304,17 +309,150 @@ public class SysMakeOrderServiceImpl implements ISysMakeOrderService
//orderBom.setWarehouseDept(subBom.getWarehouseDept());
sortNo++;
orderBom.setSortNo(sortNo);
makeorderBom.setCreateBy(ShiroUtils.getLoginName());
makeorderBom.setCreateTime(DateUtils.getNowDate());
makeorderBomService.insertSysMakeorderBom(orderBom);
insertedSysMakeorderBoms.add(orderBom);
}
}
}else {
throw new BusinessException("料号为"+materialCode+"的Bom信息不全,请补充!");
sortNo ++;
SysMakeorderBom sysMakeorderBom = generateMakeorderBom(sortNo,sysSalesOrderChild);
sysMakeorderBom.setMakeNo(makeNo);
sysMakeorderBom.setSalesOrderCode(salesOrderCode);
int result = makeorderBomMapper.insertSysMakeorderBom(sysMakeorderBom);
if(result<=0){
throw new BusinessException("新增生产bom" + materialCode +"失败");
}
}
makeorderDeptService.generateYsDataByMakeNoAndMaterialNo(makeNo,materialCode,salesOrderType);
}
}
makeOrder.setCreateTime(sysSalesOrderVo.getApplyTime());
insertSysMakeOrder(makeOrder);
}
//根据销售订单子表生成生产bom0阶
public SysMakeorderBom generateMakeorderBom(Long sortNo,SysSalesOrderChild sysSalesOrderChild){
SysMakeorderBom makeorderBom = new SysMakeorderBom();
makeorderBom.setMaterialNo(sysSalesOrderChild.getMaterialCode());
makeorderBom.setMaterialName(sysSalesOrderChild.getMaterialName());
makeorderBom.setMaterialType(sysSalesOrderChild.getMaterialType());
makeorderBom.setMaterialModel(sysSalesOrderChild.getMaterialModel());
makeorderBom.setUnit(sysSalesOrderChild.getUnit());
makeorderBom.setBrand(sysSalesOrderChild.getBrand());
makeorderBom.setDescribe(sysSalesOrderChild.getDescribe());
makeorderBom.setProcessMethod(sysSalesOrderChild.getProcessMethod());
makeorderBom.setLevel(0L);
makeorderBom.setSortNo(sortNo);
makeorderBom.setOrderNum(sysSalesOrderChild.getMaterialNum());
makeorderBom.setDeliveryTime(sysSalesOrderChild.getDeliveryTime());
makeorderBom.setCreateBy(ShiroUtils.getLoginName());
makeorderBom.setCreateTime(DateUtils.getNowDate());
return makeorderBom;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void gcReview(SysMakeOrder sysMakeOrder) {
String makeNo = sysMakeOrder.getMakeNo();
String salesOrderCode = sysMakeOrder.getSaleNo();
List<SysMakeorderBom> makeorderBoms = sysMakeOrder.getSysMakeorderBomList();
/*
* 获取前端返回生产bom列表0阶料号合集(只返回有修改的bom)*/
Set<String> uniqueMaterialNos = new HashSet<>();
for (SysMakeorderBom bom : makeorderBoms) {
uniqueMaterialNos.add(bom.getSalesOrderMaterialNo());
}
/*
* 获取该生产订单关联销售订单中的0阶物料存在bom*/
/*SysSalesOrderChild tempChild = new SysSalesOrderChild();
tempChild.setQuoteId(salesOrderCode);
List<SysSalesOrderChild> salesOrderChildList = salesOrderChildService.selectSysSalesOrderChildListWithBom(tempChild);
*/
/*
* 获取该生产订单关联销售订单中的0阶物料存在bom*/
SysMakeorderBom tempMakeorderBom = new SysMakeorderBom();
tempMakeorderBom.setMakeNo(makeNo);
tempMakeorderBom.setSalesOrderCode(salesOrderCode);
tempMakeorderBom.setLevel(0L);
List<SysMakeorderBom> tempBomList = makeorderBomService.selectSysMakeorderBomList(tempMakeorderBom);
/*
* 比对获取前端未修改过的bom料号后续查找生产bom表看其子阶是否为空,另外要去除加工类型为采购的数据*/
List<String> filteredList = tempBomList.stream()
.filter(child -> !uniqueMaterialNos.contains(child.getMaterialNo()))
.filter(child -> child.getMaterialNo().startsWith("5")||child.getMaterialNo().startsWith("6")
||child.getMaterialNo().startsWith("7")||child.getMaterialNo().startsWith("8")
||child.getMaterialNo().startsWith("9"))
.filter(child -> !child.getProcessMethod().equals("0"))
.map(SysMakeorderBom::getMaterialNo)
.collect(Collectors.toList());
/*
* 判断bom是否为空*/
if(StringUtils.isNotEmpty(filteredList)){
for (String code:filteredList) {
SysMakeorderBom tempMakeBom = new SysMakeorderBom();
tempMakeBom.setMakeNo(makeNo);
tempMakeBom.setSalesOrderCode(salesOrderCode);
tempMakeBom.setSalesOrderMaterialNo(code);
List<SysMakeorderBom> makeorderBomList = makeorderBomService.selectSysMakeorderBomList(tempMakeBom);
if(StringUtils.isEmpty(makeorderBomList)){
throw new BusinessException(code + "BOM不能为空");
}
}
}
/*
* 删除返回0阶料号的原有bom*/
for (String materialNo:uniqueMaterialNos) {
SysMakeorderBom tempBom = new SysMakeorderBom();
tempBom.setMakeNo(makeNo);
tempBom.setSalesOrderCode(salesOrderCode);
tempBom.setSalesOrderMaterialNo(materialNo);
makeorderBomMapper.deleteSysMakeorderBomByNos(tempBom);
}
Long sortNo = 0L;
for (SysMakeorderBom makeBom:makeorderBoms) {
sortNo ++;
makeBom.setSortNo(sortNo);
int insertResult = makeorderBomMapper.insertSysMakeorderBom(makeBom);
if(insertResult<=0){
throw new BusinessException("bom"+makeBom.getSalesOrderMaterialNo()+"层级添加失败!");
}
}
// 待采购审核
sysMakeOrder.setMakeStatus("7");
updateByMakeNo(sysMakeOrder);
// todo 加工方式“采购”的物料生成采购计划
purchasePlanService.generatePurchasePlanByMakeOrder(insertedSysMakeorderBoms);
// purchasePlanService.generatePurchasePlanByMakeOrder(insertedSysMakeorderBoms);
}
/*
* 采购审核修改加工方式委外或采购为采购若修改则删除下阶物料
* */
@Override
@Transactional(rollbackFor = Exception.class)
public void cgReview(SysMakeOrder sysMakeOrder) {
List<SysMakeorderBom> makeorderBomList = sysMakeOrder.getSysMakeorderBomList();
if(StringUtils.isNotEmpty(makeorderBomList)){
for (SysMakeorderBom makeBom:makeorderBomList) {
if(makeBom.getProcessMethod().equals("0")){
SysMakeorderBom tempBom = new SysMakeorderBom();
tempBom.setMakeNo(sysMakeOrder.getMakeNo());
tempBom.setSalesOrderCode(sysMakeOrder.getSaleNo());
tempBom.setSalesOrderMaterialNo(makeBom.getMaterialNo());
makeorderBomMapper.deleteSysMakeorderBomByNos(tempBom);
}
makeBom.setUpdateBy(ShiroUtils.getLoginName());
makeBom.setUpdateTime(DateUtils.getNowDate());
makeorderBomMapper.updateSysMakeorderBom(makeBom);
}
}
// sysMakeOrder.setMakeStatus("3");//生产状态-待生产
// sysMakeOrder.setEceiptStatus("0");//入库状态-待采购
//测试用状态(跳过采购)
sysMakeOrder.setMakeStatus("4");//生产状态-待生产
sysMakeOrder.setEceiptStatus("7");//入库状态-待采购
updateSysMakeOrder(sysMakeOrder);
}
@Override
@ -380,7 +518,7 @@ public class SysMakeOrderServiceImpl implements ISysMakeOrderService
*/
@Transactional(rollbackFor = Exception.class)
@Override
public int addEquipmentResumeSave(SysEquipMaterialDto equipMaterialDto) {
public List<AfterSalesShippingDevice> addEquipmentResumeSave(SysEquipMaterialDto equipMaterialDto) {
if (CollectionUtils.isEmpty(equipMaterialDto.getSysEquipDetailDtos())) {
log.warn("设备履历详情数据为空");
throw new BusinessException("设备履历详情数据为空");
@ -388,6 +526,7 @@ public class SysMakeOrderServiceImpl implements ISysMakeOrderService
int result = 0;
List<AfterSalesShippingDevice> shippingDevice = new ArrayList<>();
for (SysEquipDetailDto sysEquipDetailDto : equipMaterialDto.getSysEquipDetailDtos()) {
AfterSalesShippingDevice afterSalesShippingDevice = new AfterSalesShippingDevice();
@ -402,24 +541,43 @@ public class SysMakeOrderServiceImpl implements ISysMakeOrderService
afterSalesShippingDevice.setMaterialDescribe(equipMaterialDto.getDescribe());
afterSalesShippingDevice.setDeviceModelCode(sysEquipDetailDto.getEquipmentModel());
afterSalesShippingDevice.setDeviceRunningNumber(sysEquipDetailDto.getSerialNo());
afterSalesShippingDevice.setStartMakeTime(sysEquipDetailDto.getStartMakeTime());
afterSalesShippingDevice.setEndMakeTime(sysEquipDetailDto.getEndMakeTime());
afterSalesShippingDevice.setAddProcessIssueRecordFlag(sysEquipDetailDto.getAddProcessIssueRecordFlag());
if (StringUtils.isEmpty(sysEquipDetailDto.getEquipmentId())) {
// 如果设备ID为空,说明是新记录,需要插入
afterSalesShippingDevice.setShippingDeviceId(redisCache.generateBillNo("CHSB"));
afterSalesShippingDevice.setCreateBy(ShiroUtils.getLoginName());
afterSalesShippingDevice.setCreateTime(new Date());
afterSalesShippingDevice.setCreateTime(DateUtils.getNowDate());
afterSalesShippingDevice.setQualityStatus("0");//待申请
result += afterSalesShippingDeviceMapper.insertAfterSalesShippingDevice(afterSalesShippingDevice);
} else {
// 设备ID不为空,假设需要更新逻辑(根据业务需求确定是否需要此分支)
afterSalesShippingDevice.setShippingDeviceId(sysEquipDetailDto.getEquipmentId()); // 确保ID设置正确
afterSalesShippingDevice.setUpdateBy(ShiroUtils.getLoginName());
afterSalesShippingDevice.setUpdateTime(new Date());
afterSalesShippingDevice.setUpdateTime(DateUtils.getNowDate());
afterSalesShippingDevice.setQualityStatus("0");//待申请
// 注意:这里假设了updateAfterSalesShippingDevice方法是存在的且逻辑正确,根据实际情况调整
result += afterSalesShippingDeviceMapper.updateAfterSalesShippingDevice(afterSalesShippingDevice);
}
}
return result;
if(result<=0){
throw new BusinessException("新增设备履历失败");
}
shippingDevice.add(afterSalesShippingDevice);
ProcessIssueRecord tempRecord = new ProcessIssueRecord();
tempRecord.setSerialNo(afterSalesShippingDevice.getDeviceRunningNumber());
List<ProcessIssueRecord> processIssueRecords = processIssueRecordMapper.selectProcessIssueRecordList(tempRecord);
if(StringUtils.isNotEmpty(processIssueRecords)){
for (ProcessIssueRecord processRecord:processIssueRecords) {
processRecord.setShippingDeviceId(afterSalesShippingDevice.getShippingDeviceId());
processIssueRecordMapper.updateProcessIssueRecord(processRecord);
}
}
}
return shippingDevice;
}
@ -432,23 +590,40 @@ public class SysMakeOrderServiceImpl implements ISysMakeOrderService
String loginName = ShiroUtils.getLoginName();
erpInboundOrder.setCreateBy(loginName);
erpInboundOrder.setCreateTime(DateUtils.getNowDate());
String qualityOrderCode = redisCache.generateBillNo("PZ");
QualityOrder qualityOrder = createQualityOrder(qualityOrderCode, erpInboundOrder, loginName);
//更新生产订单的本次完成数
List<ErpInboundOrderDetail> inboundDetails = erpInboundOrder.getInboundDetails();
if(StringUtils.isEmpty(inboundDetails)){
throw new BusinessException("入库单物料为空!");
}
int result = 0;
long finishNum = erpInboundOrder.getInboundDetails().stream().mapToLong(ErpInboundOrderDetail::getCurrentNum).sum();
SysMakeOrder sysMakeOrder = sysMakeOrderMapper.selectMakeOrderByMakeNo(erpInboundOrder.getMakeNo());
sysMakeOrder.setFinishNum(finishNum);
int updateSysMakeOrderResult = sysMakeOrderMapper.updateSysMakeOrder(sysMakeOrder);
if (updateSysMakeOrderResult <= 0){
throw new BusinessException("更新生产订单失败");
if(finishNum == 0){
throw new BusinessException("本次完成数不能全为0");
}
for (ErpInboundOrderDetail inboundDetail:inboundDetails) {
String qualityOrderCode = redisCache.generateBillNo("PZ");
QualityOrder qualityOrder = createQualityOrder(qualityOrderCode, erpInboundOrder, loginName);
Map<String, SysSalesOrderChild> materialInfoMap = fetchMaterialInfoMap(erpInboundOrder);
result += qualityOrderMapper.insertQualityOrder(qualityOrder);
List<AfterSalesShippingDevice> deviceList = inboundDetail.getSalesShippingDeviceList();
if(StringUtils.isNotEmpty(deviceList)){
for (AfterSalesShippingDevice device:deviceList) {
device.setQualityStatus("1");//待品质
afterSalesShippingDeviceMapper.updateAfterSalesShippingDevice(device);
}
}
}
addQualityOrderDetails(qualityOrder, erpInboundOrder, materialInfoMap);
addQualityOrderReports(qualityOrder, erpInboundOrder, materialInfoMap);
//品质报告单审核通过后再更新已完成数
// SysMakeOrder sysMakeOrder = sysMakeOrderMapper.selectMakeOrderByMakeNo(erpInboundOrder.getMakeNo());
// long hasFinished = sysMakeOrder.getFinishNum();
// finishNum += hasFinished;
// sysMakeOrder.setFinishNum(finishNum);
// int updateSysMakeOrderResult = sysMakeOrderMapper.updateSysMakeOrder(sysMakeOrder);
// if (updateSysMakeOrderResult <= 0){
// throw new BusinessException("更新生产订单失败");
// }
return qualityOrderMapper.insertQualityOrder(qualityOrder);
return result;
}
private QualityOrder createQualityOrder(String code, ErpInboundOrder erpInboundOrder, String loginName) {
@ -458,7 +633,7 @@ public class SysMakeOrderServiceImpl implements ISysMakeOrderService
qualityOrder.setQualityStatus("0");
qualityOrder.setQualityStorageStatus("4");
qualityOrder.setQualityOrderType("1");
qualityOrder.setCreateTime(new Date());
qualityOrder.setCreateTime(DateUtils.getNowDate());
qualityOrder.setCreateBy(loginName);
return qualityOrder;
}
@ -502,7 +677,7 @@ public class SysMakeOrderServiceImpl implements ISysMakeOrderService
qualityOrderDetail.setMakeTotal(salesOrderChild.getMaterialNum());
qualityOrderDetail.setMakeCompletionNum(Math.toIntExact(detail.getCurrentNum()));
qualityOrderDetail.setCreateBy(ShiroUtils.getLoginName());
qualityOrderDetail.setCreateTime(new Date());
qualityOrderDetail.setCreateTime(DateUtils.getNowDate());
return qualityOrderDetail;
}

8
ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/SysMakeorderDeptServiceImpl.java

@ -239,6 +239,14 @@ public class SysMakeorderDeptServiceImpl implements ISysMakeorderDeptService
makeOrder.setMakeStatus("2");
makeOrderService.updateByMakeNo(makeOrder);
}
// 采购部门领导确认完,采购确认状态更新为已确认
if ("PUD".equals(deptNumber)) {
SysMakeOrder makeOrder = new SysMakeOrder();
makeOrder.setMakeNo(makeNo);
// 待采购审核
makeOrder.setPurchaseStatus("1");
makeOrderService.updateByMakeNo(makeOrder);
}
}
@Override

9
ruoyi-admin/src/main/resources/mapper/system/SysMakeOrderMapper.xml

@ -31,20 +31,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="delFlag" column="del_flag" />
<result property="deptNumber" column="dept_number" />
<result property="purchaseStatus" column="purchase_status" />
<result property="deptLeaderConfirmStatus" column="dept_leader_confirm_status" />
</resultMap>
<sql id="selectSysMakeOrderVo">
select a.id, a.make_status, a.eceipt_status, a.quality_status, a.use_status, a.makeNo, a.saleNo, a.Salesman, a.customerId, a.customerName, a.customerOderCode, a.material
, a.materialSum, a.finishNum, a.eceiptNum, a.noRate, a.rate
, a.create_by, a.create_time, a.update_by, a.update_time, a.remark, a.del_flag
, a.create_by, a.create_time, a.update_by, a.update_time, a.remark, a.del_flag,a.purchase_status
from sys_makeorder a
</sql>
<select id="selectSysMakeOrderList" parameterType="SysMakeOrder" resultMap="SysMakeOrderResult">
select a.id, a.make_status, a.eceipt_status, a.quality_status, a.use_status, a.makeNo, a.saleNo,
a.Salesman, a.customerId, a.customerName, a.customerOderCode, a.material
, a.materialSum, a.finishNum, a.eceiptNum, a.noRate, a.rate
, a.materialSum, a.finishNum, a.eceiptNum, a.noRate, a.rate, a.purchase_status
, a.create_by, a.create_time, a.update_by, a.update_time, a.remark, a.del_flag
, b.dept_leader_confirm_status
from sys_makeorder a
@ -102,6 +103,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="updateTime != null">update_time,</if>
<if test="remark != null">remark,</if>
<if test="delFlag != null">del_flag,</if>
<if test="purchaseStatus != null">purchase_status,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="makeStatus != null">#{makeStatus},</if>
@ -127,6 +129,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="updateTime != null">#{updateTime},</if>
<if test="remark != null">#{remark},</if>
<if test="delFlag != null">#{delFlag},</if>
<if test="purchaseStatus != null">#{purchaseStatus},</if>
</trim>
</insert>
@ -156,6 +159,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="delFlag != null">del_flag = #{delFlag},</if>
<if test="purchaseStatus != null">purchase_status = #{purchaseStatus},</if>
</trim>
where id = #{id}
</update>
@ -203,6 +207,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="delFlag != null">del_flag = #{delFlag},</if>
<if test="purchaseStatus != null">purchase_status = #{purchaseStatus},</if>
</trim>
where makeNo = #{makeNo}
</update>

Loading…
Cancel
Save