diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/entity/OemStatementEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/entity/OemStatementEntity.java new file mode 100644 index 00000000..feeb67d8 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/entity/OemStatementEntity.java @@ -0,0 +1,98 @@ +package org.springblade.desk.oem.pojo.entity; + +import lombok.Data; +import io.swagger.v3.oas.annotations.media.Schema; +import com.baomidou.mybatisplus.annotation.TableName; + +import java.math.BigDecimal; + +import lombok.EqualsAndHashCode; +import org.springblade.core.mp.base.BaseEntity; + +import java.io.Serial; +import java.util.HashMap; +import java.util.Map; + +/** + * 外协结算单 实体类 + * + * @author qyl + * @since 2026-02-12 + */ +@Data +@TableName("MES_OEM_STATEMENT") +@Schema(description = "OemStatement对象") +@EqualsAndHashCode(callSuper = true) +public class OemStatementEntity extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 未结算 + */ + public static Short NOT_NEED_SETTLEMENT = -1; + /** + * 未结算 + */ + public static Short NO_SETTLEMENT = 1; + /** + * 结算中 + */ + public static Short IN_SETTLEMENT = 2; + /** + * 结算异常 + */ + public static Short ERR_SETTLEMENT = 3; + /** + * 已结算 + */ + public static Short OK_SETTLEMENT = 4; + + public static Map rosStatusMap = new HashMap<>(8); + + static { + rosStatusMap.put(NOT_NEED_SETTLEMENT, "无需结算"); + rosStatusMap.put(NO_SETTLEMENT, "未结算"); + rosStatusMap.put(IN_SETTLEMENT, "结算中"); + rosStatusMap.put(ERR_SETTLEMENT, "结算异常"); + rosStatusMap.put(OK_SETTLEMENT, "已结算"); + } + + /** + * 车间作业计划ID + */ + @Schema(description = "车间作业计划ID") + private Long wpId; + /** + * 镀层厚度 + */ + @Schema(description = "镀层厚度") + private BigDecimal rosThickness; + /** + * 结算单价 + */ + @Schema(description = "结算单价") + private BigDecimal unitPrice; + /** + * 结算金额 + */ + @Schema(description = "结算金额") + private BigDecimal totalPrice; + /** + * 单位 + */ + @Schema(description = "单位") + private String unit; + /** + * 报价单号 + */ + @Schema(description = "报价单号") + private String quotation; + /** + * 状态 + */ + @Schema(description = "状态") + private Integer rosStatus; + +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemStatementExcel.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemStatementExcel.java new file mode 100644 index 00000000..ee5d1d73 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/excel/OemStatementExcel.java @@ -0,0 +1,94 @@ +package org.springblade.desk.oem.pojo.excel; + + +import lombok.Data; + +import java.util.Date; +import java.math.BigDecimal; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.write.style.ColumnWidth; +import com.alibaba.excel.annotation.write.style.ContentRowHeight; +import com.alibaba.excel.annotation.write.style.HeadRowHeight; + +import java.io.Serializable; +import java.io.Serial; + + +/** + * 外协结算单 Excel实体类 + * + * @author qyl + * @since 2026-02-12 + */ +@Data +@ColumnWidth(25) +@HeadRowHeight(20) +@ContentRowHeight(18) +public class OemStatementExcel implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @ColumnWidth(20) + @ExcelProperty("") + private Long id; + /** + * + */ + @ColumnWidth(20) + @ExcelProperty("") + private String tenantId; + /** + * 删除标记;1:删除,0:正常 + */ + @ColumnWidth(20) + @ExcelProperty("删除标记;1:删除,0:正常") + private Long isDeleted; + /** + * 车间作业计划ID + */ + @ColumnWidth(20) + @ExcelProperty("车间作业计划ID") + private Long wpId; + /** + * 镀层厚度 + */ + @ColumnWidth(20) + @ExcelProperty("镀层厚度") + private BigDecimal rosThickness; + /** + * 结算单价 + */ + @ColumnWidth(20) + @ExcelProperty("结算单价") + private BigDecimal unitPrice; + /** + * 结算金额 + */ + @ColumnWidth(20) + @ExcelProperty("结算金额") + private BigDecimal totalPrice; + /** + * 单位 + */ + @ColumnWidth(20) + @ExcelProperty("单位") + private String unit; + /** + * 报价单号 + */ + @ColumnWidth(20) + @ExcelProperty("报价单号") + private String quotation; + /** + * 状态 + */ + @ColumnWidth(20) + @ExcelProperty("状态") + private Integer rosStatus; + +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/StatementQuery.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/StatementQuery.java new file mode 100644 index 00000000..cb3b48bb --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/request/StatementQuery.java @@ -0,0 +1,67 @@ +package org.springblade.desk.oem.pojo.request; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDate; + +/** + * 外协结算查询条件类 + */ +@Data +public class StatementQuery { + + /** + * 镀后入库时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @Schema(description = "镀后入库时间开始") + private LocalDate postPlatingStorageTimeStart; + /** + * 镀后入库时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd") + @Schema(description = "镀后入库时间结束") + private LocalDate postPlatingStorageTimeEnd; + /** + * 车间订单单号 + */ + @Schema(description = "车间订单单号") + private String woCode; + /** + * 外协单号 + */ + @Schema(description = "外协单号") + private String ocCode; + /** + * 零件号 + */ + @Schema(description = "零件号") + private String partCode; + /** + * 生产标识 + */ + @Schema(description = "生产标识") + private String prodIdent; + /** + * 批次号 + */ + @Schema(description = "批次号") + private String batchNo; + /** + * 工序IDS + */ + @Schema(description = "工序IDs(传字符串1,2,3,4)") + private String ppsIds; + /** + * 外协厂商IDS + */ + @Schema(description = "外协厂商IDs(传字符串1,2,3,4)") + private String ocIds; + /** + * 结算单状态 + */ + @Schema(description = "结算单状态(传字符串1,2,3,4)") + private String rosStatusList; +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/OemStatementVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/OemStatementVO.java new file mode 100644 index 00000000..3efe6fb3 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/OemStatementVO.java @@ -0,0 +1,21 @@ +package org.springblade.desk.oem.pojo.vo; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springblade.desk.oem.pojo.entity.OemStatementEntity; + +import java.io.Serial; + +/** + * 外协结算单 视图实体类 + * + * @author qyl + * @since 2026-02-12 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class OemStatementVO extends OemStatementEntity { + @Serial + private static final long serialVersionUID = 1L; + +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/StatementVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/StatementVO.java new file mode 100644 index 00000000..7c81ce4c --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/oem/pojo/vo/StatementVO.java @@ -0,0 +1,105 @@ +package org.springblade.desk.oem.pojo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 外协订单结算VO + */ +@Data +public class StatementVO { + + @Schema(description = "车间作业计划ID") + private Long wpId; + + @Schema(description = "车间订单ID") + private Long woId; + + @Schema(description = "外协厂商ID") + private Long ocId; + + @Schema(description = "外协结算单ID") + private Long osId; + + @Schema(description = "外协工序ID") + private Long opId; + + @Schema(description = "工序ID") + private Long psId; + + @Schema(description = "工艺能力ID") + private Long caId; + + @Schema(description = "车间运行订单ID") + private Long worId; + + @Schema(description = "生产订单ID") + private Long yoId; + + @Schema(description = "外协单号") + private String oemCode; + + @Schema(description = "车间订单单号") + private String woCode; + + @Schema(description = "零件号") + private String partCode; + + @Schema(description = "零件名称") + private String partName; + + @Schema(description = "批次号") + private String batchNo; + + @Schema(description = "生产标识") + private String prodIdent; + + @Schema(description = "工序") + private String psName; + + @Schema(description = "工艺能力") + private String caName; + + @Schema(description = "镀后入库时间") + private String putStoreTime; + + @Schema(description = "生产数量") + private String makeQty; + + @Schema(description = "单位面积(dm²)") + private String ypArea; + + @Schema(description = "总面积(dm²)") + private String totalArea; + + @Schema(description = "外协厂商") + private String ocCode; + + @Schema(description = "镀种") + private String plate; + + @Schema(description = "镀种厚度") + private String plateThickness; + + @Schema(description = "涂色标个数") + private String tsbNum; + + @Schema(description = "涂色带个数") + private String tsdNum; + + @Schema(description = "涂箭个数") + private String tjtNum; + + @Schema(description = "结算单价") + private String unitPrice; + + @Schema(description = "计量单位") + private String unit; + + @Schema(description = "结算金额") + private String totalPrice; + + @Schema(description = "报价单号") + private String quotation; + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemOrderController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemOrderController.java index f605b110..8e6b261a 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemOrderController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemOrderController.java @@ -13,14 +13,24 @@ import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; +import org.springblade.desk.oem.pojo.entity.OemMeritsEntity; import org.springblade.desk.oem.pojo.excel.OemOrderExcel; import org.springblade.desk.oem.pojo.request.OemApproval; import org.springblade.desk.oem.pojo.request.OemApprovalQuery; import org.springblade.desk.oem.pojo.request.OemOrderQuery; import org.springblade.desk.oem.pojo.request.OemTakeBack; import org.springblade.desk.oem.pojo.vo.OemApprovalVO; +import org.springblade.desk.oem.pojo.vo.OemMeritsVO; import org.springblade.desk.oem.pojo.vo.OemOrderVO; +import org.springblade.desk.oem.wrapper.OemMeritsWrapper; +import org.springblade.desk.order.pojo.entity.YieldOrder; +import org.springblade.desk.order.service.IYieldOrderService; +import org.springblade.desk.produce.pojo.entity.WorkOrder; +import org.springblade.desk.produce.pojo.entity.WorkOrderRun; +import org.springblade.desk.produce.pojo.vo.WorkOrderVO; import org.springblade.desk.produce.service.IWorkOrderRunService; +import org.springblade.desk.produce.service.IWorkOrderService; +import org.springblade.desk.produce.wrapper.WorkOrderWrapper; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -44,6 +54,11 @@ public class OemOrderController extends BladeController { @Autowired IWorkOrderRunService iWorkOrderRunService; + @Autowired + IWorkOrderService workOrderService; + + @Autowired + IYieldOrderService yieldOrderService; /** * 加载外协订单 自定义分页 @@ -84,10 +99,31 @@ public class OemOrderController extends BladeController { @PostMapping("/approval") @ApiOperationSupport(order = 4) @Operation(summary = "审批", description = "") - public R approval(@Valid @RequestBody OemApproval oemApproval) { + public R approval(@Valid @RequestBody OemApproval oemApproval) throws Exception { return iWorkOrderRunService.approval(oemApproval); } + /** + * 外协分批准备数据 + */ + @GetMapping("/prepareOemBatches") + @ApiOperationSupport(order = 5) + @Operation(summary = "外协分批准备数据", description = "worId") + public R detail(@PathVariable Long worId) { + WorkOrderRun oldWorkOrderRun = iWorkOrderRunService.getById(worId); + WorkOrder oldWorkOrder = workOrderService.getById(oldWorkOrderRun.getWoId()); + YieldOrder yieldOrder = yieldOrderService.getById(oldWorkOrder.getYoId()); + // 创建新的分批订单对象 + WorkOrder newWorkOrder = new WorkOrder(); + // 复制原订单基本信息 + newWorkOrder.setYoId(oldWorkOrder.getYoId()); + newWorkOrder.setWoCode(workOrderService.nextCode(yieldOrder.getYpCode())); + newWorkOrder.setCardNo(workOrderService.nextCardNo(yieldOrder.getYpCode(), oldWorkOrder.getCardNo())); + newWorkOrder.setBatchNo(workOrderService.nextBatchNo(yieldOrder.getYpCode(), oldWorkOrder.getBatchNo())); + newWorkOrder.setMesCardNo(workOrderService.nextMesCardNo(oldWorkOrder.getMesCardNo())); + return R.data(WorkOrderWrapper.build().entityVO(newWorkOrder)); + } + /** * 外协订单导出数据 */ diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemStatementController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemStatementController.java new file mode 100644 index 00000000..53182f1e --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/controller/OemStatementController.java @@ -0,0 +1,123 @@ +package org.springblade.desk.oem.controller; + +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import lombok.AllArgsConstructor; +import jakarta.validation.Valid; + +import org.springblade.core.secure.BladeUser; +import org.springblade.core.mp.support.Condition; +import org.springblade.core.mp.support.Query; +import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.Func; +import org.springblade.desk.oem.pojo.excel.OemStatementExcel; +import org.springblade.desk.oem.pojo.request.StatementQuery; +import org.springblade.desk.oem.pojo.vo.StatementVO; +import org.springframework.web.bind.annotation.*; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springblade.desk.oem.pojo.entity.OemStatementEntity; +import org.springblade.desk.oem.pojo.vo.OemStatementVO; +import org.springblade.desk.oem.wrapper.OemStatementWrapper; +import org.springblade.desk.oem.service.IOemStatementService; +import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.tool.utils.DateUtil; +import org.springblade.core.excel.util.ExcelUtil; + +import java.util.Map; +import java.util.List; + +import jakarta.servlet.http.HttpServletResponse; + +/** + * 外协结算单 控制器 + * + * @author qyl + * @since 2026-02-12 + */ +@RestController +@AllArgsConstructor +@RequestMapping("/mesOemStatement") +@Tag(name = "外协结算单", description = "外协结算单接口") +public class OemStatementController extends BladeController { + + private final IOemStatementService mesOemStatementService; + + /** + * 外协结算单 详情 + */ + @GetMapping("/detail") + @ApiOperationSupport(order = 1) + @Operation(summary = "详情", description = "传入mesOemStatement") + public R detail(OemStatementEntity mesOemStatement) { + OemStatementEntity detail = mesOemStatementService.getOne(Condition.getQueryWrapper(mesOemStatement)); + return R.data(OemStatementWrapper.build().entityVO(detail)); + } + + /** + * 外协结算单 自定义分页 + */ + @GetMapping("/page") + @ApiOperationSupport(order = 3) + @Operation(summary = "分页", description = "传入mesOemStatement") + public R> page(StatementQuery mesOemStatement, Query query) { + IPage pages = mesOemStatementService.selectOemStatementPage(Condition.getPage(query), mesOemStatement); + return R.data(pages); + } + + /** + * 外协结算单 新增 + */ + @PostMapping("/save") + @ApiOperationSupport(order = 4) + @Operation(summary = "新增", description = "传入mesOemStatement") + public R save(@Valid @RequestBody OemStatementEntity mesOemStatement) { + return R.status(mesOemStatementService.save(mesOemStatement)); + } + + /** + * 外协结算单 修改 + */ + @PostMapping("/update") + @ApiOperationSupport(order = 5) + @Operation(summary = "修改", description = "传入mesOemStatement") + public R update(@Valid @RequestBody OemStatementEntity mesOemStatement) { + return R.status(mesOemStatementService.updateById(mesOemStatement)); + } + + /** + * 外协结算单 新增或修改 + */ + @PostMapping("/submit") + @ApiOperationSupport(order = 6) + @Operation(summary = "新增或修改", description = "传入mesOemStatement") + public R submit(@Valid @RequestBody OemStatementEntity mesOemStatement) { + return R.status(mesOemStatementService.saveOrUpdate(mesOemStatement)); + } + + /** + * 外协结算单 删除 + */ + @PostMapping("/remove") + @ApiOperationSupport(order = 7) + @Operation(summary = "逻辑删除", description = "传入ids") + public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { + return R.status(mesOemStatementService.deleteLogic(Func.toLongList(ids))); + } + + + /** + * 导出数据 + */ + @GetMapping("/export-mesOemStatement") + @ApiOperationSupport(order = 9) + @Operation(summary = "导出数据", description = "传入mesOemStatement") + public void exportOemStatement(@Parameter(hidden = true) @RequestParam Map mesOemStatement, BladeUser bladeUser, HttpServletResponse response) { + QueryWrapper queryWrapper = Condition.getQueryWrapper(mesOemStatement, OemStatementEntity.class); + List list = mesOemStatementService.exportOemStatement(queryWrapper); + ExcelUtil.export(response, "外协结算单数据" + DateUtil.time(), "外协结算单数据表", list, OemStatementExcel.class); + } + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.java new file mode 100644 index 00000000..7f087e2d --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.java @@ -0,0 +1,40 @@ +package org.springblade.desk.oem.mapper; + +import org.springblade.desk.oem.pojo.entity.OemStatementEntity; +import org.springblade.desk.oem.pojo.excel.OemStatementExcel; +import org.springblade.desk.oem.pojo.request.StatementQuery; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.apache.ibatis.annotations.Param; +import org.springblade.desk.oem.pojo.vo.StatementVO; + +import java.util.List; + +/** + * 外协结算单 Mapper 接口 + * + * @author qyl + * @since 2026-02-12 + */ +public interface OemStatementMapper extends BaseMapper { + + /** + * 自定义分页 + * + * @param page 分页参数 + * @param query 查询参数 + * @return List + */ + List selectOemStatementPage(IPage page, StatementQuery query); + + + /** + * 获取导出数据 + * + * @param queryWrapper 查询条件 + * @return List + */ + List exportOemStatement(@Param("ew") Wrapper queryWrapper); + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml new file mode 100644 index 00000000..803ebd29 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/mapper/OemStatementMapper.xml @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/IOemStatementService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/IOemStatementService.java new file mode 100644 index 00000000..c74d3109 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/IOemStatementService.java @@ -0,0 +1,39 @@ +package org.springblade.desk.oem.service; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import org.springblade.desk.oem.pojo.entity.OemStatementEntity; +import org.springblade.desk.oem.pojo.excel.OemStatementExcel; +import org.springblade.desk.oem.pojo.request.StatementQuery; +import org.springblade.desk.oem.pojo.vo.OemStatementVO; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springblade.core.mp.base.BaseService; +import org.springblade.desk.oem.pojo.vo.StatementVO; + +import java.util.List; + +/** + * 外协结算单 服务类 + * + * @author qyl + * @since 2026-02-12 + */ +public interface IOemStatementService extends BaseService { + /** + * 自定义分页 + * + * @param page 分页参数 + * @param mesOemStatement 查询参数 + * @return IPage + */ + IPage selectOemStatementPage(IPage page, StatementQuery mesOemStatement); + + + /** + * 导出数据 + * + * @param queryWrapper 查询条件 + * @return List + */ + List exportOemStatement(Wrapper queryWrapper); + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java new file mode 100644 index 00000000..434dae97 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/service/impl/OemStatementServiceImpl.java @@ -0,0 +1,41 @@ +package org.springblade.desk.oem.service.impl; + +import org.springblade.desk.oem.pojo.entity.OemStatementEntity; +import org.springblade.desk.oem.pojo.excel.OemStatementExcel; +import org.springblade.desk.oem.pojo.request.StatementQuery; +import org.springblade.desk.oem.pojo.vo.OemStatementVO; +import org.springblade.desk.oem.mapper.OemStatementMapper; +import org.springblade.desk.oem.pojo.vo.StatementVO; +import org.springblade.desk.oem.service.IOemStatementService; +import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.springblade.core.mp.base.BaseServiceImpl; + +import java.util.List; + +/** + * 外协结算单 服务实现类 + * + * @author qyl + * @since 2026-02-12 + */ +@Service +public class OemStatementServiceImpl extends BaseServiceImpl implements IOemStatementService { + + @Override + public IPage selectOemStatementPage(IPage page, StatementQuery mesOemStatement) { + return page.setRecords(baseMapper.selectOemStatementPage(page, mesOemStatement)); + } + + + @Override + public List exportOemStatement(Wrapper queryWrapper) { + List mesOemStatementList = baseMapper.exportOemStatement(queryWrapper); + //mesOemStatementList.forEach(mesOemStatement -> { + // mesOemStatement.setTypeName(DictCache.getValue(DictEnum.YES_NO, OemStatement.getType())); + //}); + return mesOemStatementList; + } + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/wrapper/OemStatementWrapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/wrapper/OemStatementWrapper.java new file mode 100644 index 00000000..e12e2526 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/oem/wrapper/OemStatementWrapper.java @@ -0,0 +1,35 @@ +package org.springblade.desk.oem.wrapper; + +import org.springblade.core.mp.support.BaseEntityWrapper; +import org.springblade.core.tool.utils.BeanUtil; +import org.springblade.desk.oem.pojo.entity.OemStatementEntity; +import org.springblade.desk.oem.pojo.vo.OemStatementVO; + +import java.util.Objects; + +/** + * 外协结算单 包装类,返回视图层所需的字段 + * + * @author qyl + * @since 2026-02-12 + */ +public class OemStatementWrapper extends BaseEntityWrapper { + + public static OemStatementWrapper build() { + return new OemStatementWrapper(); + } + + @Override + public OemStatementVO entityVO(OemStatementEntity mesOemStatement) { + OemStatementVO mesOemStatementVO = Objects.requireNonNull(BeanUtil.copyProperties(mesOemStatement, OemStatementVO.class)); + + //User createUser = UserCache.getUser(mesOemStatement.getCreateUser()); + //User updateUser = UserCache.getUser(mesOemStatement.getUpdateUser()); + //mesOemStatementVO.setCreateUserName(createUser.getName()); + //mesOemStatementVO.setUpdateUserName(updateUser.getName()); + + return mesOemStatementVO; + } + + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java index 8285a526..191e38de 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderRunService.java @@ -51,5 +51,5 @@ public interface IWorkOrderRunService extends BaseService { * @param oemApproval * @return */ - R approval(OemApproval oemApproval); + R approval(OemApproval oemApproval) throws Exception; } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java index 7df8c13a..78d213a5 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IWorkOrderService.java @@ -73,4 +73,49 @@ public interface IWorkOrderService extends BaseService { Map getBarCode(Long woId); Map getPartSubSj(Long woId); + + + /** + *

方法名: nextCardNo

+ *

方法描述: 生产路线卡号

+ * + * @param cardNo 路线卡号 + * @return java.lang.String + * @author lyj + * @date 2022-10-29 15:13 + */ + String nextCardNo(String poCode, String cardNo); + + /** + *

方法名: nextBatchNo

+ *

方法描述: 生成批次号

+ * + * @param batchNo 批次号 + * @return java.lang.String + * @author lyj + * @date 2022-10-29 15:13 + */ + String nextBatchNo(String poCode, String batchNo); + + /** + *

方法名: nextBatchNo

+ *

方法描述: 生成流程卡号

+ * + * @param mesCardNo 批次号 + * @return java.lang.String + * @author lyj + * @date 2022-10-29 15:13 + */ + String nextMesCardNo(String mesCardNo); + + /** + *

方法名: nextCode

+ *

方法描述: 生成订单编号

+ * + * @param code 计划单号 + * @return java.lang.String + * @author lyj + * @date 2022-10-29 15:13 + */ + String nextCode(String code); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java index 71168df6..547b86bd 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderRunServiceImpl.java @@ -8,8 +8,13 @@ import org.springblade.common.exception.BusinessException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.DateUtil; import org.springblade.desk.basic.mapper.OemMapper; +import org.springblade.desk.basic.mapper.TeamSetMapper; import org.springblade.desk.basic.pojo.entity.Oem; +import org.springblade.desk.basic.pojo.entity.TeamSet; +import org.springblade.desk.dashboard.mapper.BsProcessSetMapper; +import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity; import org.springblade.desk.dashboard.utils.DateUtils; import org.springblade.desk.oem.pojo.request.OemApproval; import org.springblade.desk.oem.pojo.request.OemApprovalQuery; @@ -19,9 +24,11 @@ import org.springblade.desk.oem.pojo.vo.OemApprovalVO; import org.springblade.desk.oem.pojo.vo.OemOrderVO; import org.springblade.desk.order.mapper.YieldOrderMapper; import org.springblade.desk.order.pojo.entity.YieldOrder; +import org.springblade.desk.order.pojo.enums.YieldOrderEnum; import org.springblade.desk.produce.mapper.*; import org.springblade.desk.produce.pojo.entity.*; import org.springblade.desk.produce.service.IWorkOrderRunService; +import org.springblade.scheduling.pojo.entity.YieldOrderEntity; import org.springblade.system.cache.UserCache; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -66,6 +73,12 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl() -// .eq(WorkPlan::getWoId, wo.getId())); -// wo.setCollaborate(workOrderRun.getCollaborate()); -// -// // 若当前序小于等于已接收 -// if (wp.getStatus() <= WorkPlan.STATUS_START) { -// // 修改本序 -// wp.setFactStartTime(null); -// wp.setUnqualifiedQty(0); -// wp.setStatus(WorkPlan.STATUS_NO_START); -// workPlanMapper.updateById(wp); -// WorkPlan frontWorkPlan = workPlanMapper.selectOne(new LambdaQueryWrapper() -// .eq(WorkPlan::getFrontWpId, wp.getId())); -// if (frontWorkPlan != null) { -// // 还原上序 -// frontWorkPlan.setStatus(WorkPlan.STATUS_WORK_OK); -// frontWorkPlan.setFactEndTime(null); -// frontWorkPlan.setReceiveMan(null); -// workPlanMapper.updateById(frontWorkPlan); -// -// // 增加入库记录 -// PlateAround prPlateAround = new PlateAround(); -// prPlateAround.setPaType(PlateAround.BEFORE_PLAT_IN); -// prPlateAround.setWpId(frontWorkPlan.getId()); -// prPlateAround.setQuantity(frontWorkPlan.getQualifiedQty()); -// prPlateAround.setCreateUser(AuthUtil.getUser() != null ? AuthUtil.getUser().getUserId() : 1); -// prPlateAround.setCreateTime(new Date()); -// plateAroundMapper.insert(prPlateAround); -// // 修改订单的当前序 -// wo.setWpId(frontWorkPlan.getId()); -// } -// } -// -// //转外协或者转厂内审批是,更改车间订单的审批状态为正常 -// if (WorkOrderRun.RUN_TYPE_1.equals(workOrderRun.getRunType()) || WorkOrderRun.RUN_TYPE_2.equals(workOrderRun.getRunType())) { -// wo.setApprovalStatus(WorkOrder.APPROVAL_STATUS_NORMAL); -// List wprList = workPlanRunMapper.selectList(new LambdaQueryWrapper() -// .eq(WorkPlanRun::getWorId, workOrderRun.getId())); -// List wpList = new ArrayList<>(); -// //转外协业务处理 -// if (WorkOrderRun.RUN_TYPE_1.equals(workOrderRun.getRunType())) { -// for (WorkPlanRun wpr : wprList) { -// wp = workPlanMapper.selectById(wpr.getWpId()); -// //如果不是勾选工序不处理 -// if (!wpr.getHandle()) { -// continue; -// } -// wp.setMakeTeam(null); -// wp.setSubsidiaryTeam(null); -// wp.setStartTime(LocalDateTime.ofInstant( -// wpr.getStartTime().toInstant(), -// ZoneId.systemDefault() -// )); -// wp.setEndTime(LocalDateTime.ofInstant( -// wpr.getEndTime().toInstant(), -// ZoneId.systemDefault() -// )); -// wp.setOem("1"); -// wp.setCaId(wpr.getCaId()); -// wpList.add(wp); -// } -// wo.setWorId(workOrderRun.getId()); -// workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_ISSUED); -// -// //调用转外协自动分派处理 -// if (wpList != null && wpList.size() > 0) { -// //判断工序是否存在外协商,如果存在不进行二次分派 -// WorkPlan workPlan = workPlanMapper.selectById(wprList.get(0).getWpId()); -// if (workPlan.getOcId() == null || workPlan.getOcId() < 1 ) { -// //todo 自动分派后续补充 -//// pjAutomaticDispatchService.runAutomaticDispatch(wpList, yo, Boolean.FALSE, null); -// } -// } -// int days = 0; -// wo.setOemOut("0"); -// if (workOrderRun.getCollaborate() != null && workOrderRun.getCollaborate().equalsIgnoreCase("1")) { -// wo.setOemType(WorkOrder.OEM_TYPE_SINGLE); -// days = Integer.valueOf(bsBusConfigService.getBusConfig(BsBusConfig.BC_TYPE_CYCLE_HELP, BsBusConfig.BC_NAME_CYCLE_HELP).getBcValue()); -// } else { -// wo.setOemType(WorkOrder.OEM_TYPE_WHOLE); -// days = Integer.valueOf(bsBusConfigService.getBusConfig(BsBusConfig.BC_TYPE_CYCLE_OEM, BsBusConfig.BC_NAME_CYCLE_OEM).getBcValue()); -// BsOemAbility oa = null; -// if (wo.getWorkPlan().getStatus().equals(WorkPlan.STATUS_WORK_OK)) { -// oa = bsOemAbilityService.findBsOemAbility(wo.getNextBsOemCustomer().getOcId(), -// wo.getWorkPlan().getNextWorkPlan().getBsCraftAbility().getCaId()); -// } else { -// oa = bsOemAbilityService.findBsOemAbility(wo.getWorkPlan().getOemCustomer().getOcId(), -// wo.getWorkPlan().getBsCraftAbility().getCaId()); -// } -// prWorkOrderService.maintainOrder(wo, oa.getPlanner(), oa.getDispatcher(), workOrderRun, true); -// } -// wo.setPlanEndDate(DateTools.dateAdd(wo.getSendDownTime(), 5, days)); -// -// //如果当前工序已经报工完成,运行记录的转出供应商取下道工序的加工外协商,反之取当前 -// if (wo.getWorkPlan().getStatus().equals(WorkPlan.STATUS_WORK_OK)) { -// workOrderRun.setInCustomer(wo.getNextBsOemCustomer()); -// } else { -// workOrderRun.setInCustomer(wo.getWorkPlan().getOemCustomer()); -// } -// //更新车间订单主责任单位 -// prWorkOrderService.updateHostWorkUnit(wo.getWoId()); -// -// //转厂内业务 -// } else { -// -// WorkPlan nextWorkPlan; -// BsTeamSet teamSet = null; -// for (WorkPlanRun wpr : wprList) { -// wp = wpr.getWorkPlan(); -// //如果不是勾选工序不处理 -// if (!wpr.getHandle()) { -// continue; -// } -// nextWorkPlan = wp.getNextWorkPlan(); -// if (nextWorkPlan.getMakeTeam() != null && !nextWorkPlan.getProcedureSet().getAssist()) { -// teamSet = nextWorkPlan.getMakeTeam(); -// } -// wp.setMakeTeam(teamSet); -// wp.setOemCustomer(null); -// wp.setStartTime(null); -// wp.setUnqualifiedQty(0d); -// wp.setWorkQty(0d); -// wp.setEndTime(null); -// wp.setSubsidiaryTeam(null); -// wp.setOem(Boolean.FALSE); -// wp.setBsCraftAbility(wpr.getBsCraftAbility()); -// wpList.add(wp); -// } -// -// if (wpList == null || wpList.size() == 0) { -// throw new BusinessException("product.notTurnBackProcess", null); -// } -// wo.setWorkOrderRun(workOrderRun); -// workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_ISSUED); -// //调用转厂内自动分派处理 -// if (teamSet == null) { -// //调用转外协自动分派处理 -// pjAutomaticDispatchService.runAutomaticDispatch(wpList, yo, Boolean.TRUE, null); -// //周新昊 20241015 增加调用下方方法 -// //处理包装工序 并且工艺能力包含 包装 并且加工单位为空的 -// pdaLoadService.handleBaoZhuangWorkPlan(wpList, yo); -// } else { -// PlateAround prPlateAround = new PlateAround(wo.getWorkPlan(), wo.getBsOemCustomer(), PlateAround.BEFORE_PLAT_IN, wo.getMakeQty()); -// prPlateAroundService.createPlateAround(workOrderRun.getCreateMan(), prPlateAround, PlateAround.BEFORE_PLAT_IN, 1, true); -// } -// // 如果主工序班组为空后者外协 -// if (wo.getBsOemCustomer() != null || wo.getMakeTeam() == null) { -// wo.setBsOemCustomer(null); -// wo.setMakeTeam(wpList.get(0).getMakeTeam()); -// } -// -// workOrderRun.setInTeam(wo.getMakeTeam()); -// if (workOrderRun.getInTeam() == null) { -// workOrderRun.setInTeam(wo.getNextMakeTeam()); -// wo.setMakeTeam(wo.getNextMakeTeam()); -// } -// wo.setOemType(Short.valueOf("-1")); -// int days = Integer.valueOf(bsBusConfigService.getBusConfig(BsBusConfig.BC_TYPE_CYCLE_HEAT, BsBusConfig.BC_NAME_CYCLE_HEAT).getBcValue()); -// wo.setPlanEndDate(DateTools.dateAdd(wo.getSendDownTime(), 5, days)); -// prWorkOrderService.update(wo); -// -// wo = prWorkOrderService.getByKey(wo.getWoId()); -// -// prWorkOrderService.maintainOrder(wo, wo.getMakeTeam().getPlanner(), wo.getMakeTeam().getDispatcher(), workOrderRun, false); -// //更新车间订单主责任单位 -// prWorkOrderService.updateHostWorkUnit(wo.getWoId()); -// -// //关闭erp外协订单 -// if (!yo.getManualIncrease()) { -// prWorkOrderRunDao.closeErpOrder(wxCode, workOrderRun.getApprovalMemo()); -// } -// Boolean flag = prWorkPlanService.isExistOemProcess(wo.getWoId()); -// if (!flag) { -// wo.setCollaborate(Boolean.FALSE); -// } -// // 修改订单业务中心 -// if (wp.getNextWorkPlan() != null && wp.getNextWorkPlan().getMakeTeam() != null) { -// if (PjYieldOrder.YIELD_TYPE_1.equals(wo.getPjYieldOrder().getYieldType())) { -// wo.getPjYieldOrder().setBusinessType(PjYieldOrder.BUSINESS_TYPE_RB); -// } else { -// wo.getPjYieldOrder().setBusinessType(PjYieldOrder.BUSINESS_TYPE_SJ); -// } -// } -// } -// } else if (WorkOrderRun.RUN_TYPE_3.equals(workOrderRun.getRunType())) { -// //验证同工单下的车间订单 -// this.validateSameYield(yo.getYoId()); -// //处理同订单 -// this.withYield(yo.getYoId()); -// //生产订单接收 -// yo.setCurStatus(PjYieldOrder.CUR_STATUS_NORMAL); -// //关闭erp外协订单 -// if (!yo.getManualIncrease() && oldOemCustomer != null) { -// prWorkOrderRunDao.closeErpOrder(wxCode, workOrderRun.getApprovalMemo()); -// } -// } -// } else { -// wo.setApprovalStatus(WorkOrder.APPROVAL_STATUS_FAIL); -// workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_FAIL); -// } + public R approval(OemApproval oemApproval) throws Exception { + /*WorkOrderRun workOrderRun = workOrderRunMapper.selectById(oemApproval.getWorkOrderRunId()); + WorkOrder wo = workOrderMapper.selectById(workOrderRun.getWoId()); + YieldOrder yo = yieldOrderMapper.selectById(wo.getYoId()); + workOrderRun.setApprovalMan(AuthUtil.getUser() != null ? AuthUtil.getUser().getUserId() : 1); + workOrderRun.setApprovalTime(new Date()); + workOrderRun.setApprovalMemo(oemApproval.getApprovalMemo()); + WorkPlan wp; + + if (WorkOrder.APPROVAL_STATUS_VIA.equals(oemApproval.getApprovalStatus())) { + + //记录订单号和供应商,用于退货时使用 + String wxCode = workOrderRun.getWoCode(); + Oem oldOemCustomer = oemMapper.selectById(workOrderRun.getInCustomer()); + workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_VOIDED); + wp = workPlanMapper.selectOne(new LambdaQueryWrapper() + .eq(WorkPlan::getWoId, wo.getId())); + wo.setCollaborate(workOrderRun.getCollaborate()); + + // 若当前序小于等于已接收 + if (wp.getStatus() <= WorkPlan.STATUS_START) { + // 修改本序 + wp.setFactStartTime(null); + wp.setUnqualifiedQty(0); + wp.setStatus(WorkPlan.STATUS_NO_START); + workPlanMapper.updateById(wp); + WorkPlan frontWorkPlan = workPlanMapper.selectOne(new LambdaQueryWrapper() + .eq(WorkPlan::getFrontWpId, wp.getId())); + if (frontWorkPlan != null) { + // 还原上序 + frontWorkPlan.setStatus(WorkPlan.STATUS_WORK_OK); + frontWorkPlan.setFactEndTime(null); + frontWorkPlan.setReceiveMan(null); + workPlanMapper.updateById(frontWorkPlan); + + // 增加入库记录 + PlateAround prPlateAround = new PlateAround(); + prPlateAround.setPaType(PlateAround.BEFORE_PLAT_IN); + prPlateAround.setWpId(frontWorkPlan.getId()); + prPlateAround.setQuantity(frontWorkPlan.getQualifiedQty()); + prPlateAround.setCreateUser(AuthUtil.getUser() != null ? AuthUtil.getUser().getUserId() : 1); + prPlateAround.setCreateTime(new Date()); + plateAroundMapper.insert(prPlateAround); + // 修改订单的当前序 + wo.setWpId(frontWorkPlan.getId()); + } + } + + //转外协或者转厂内审批是,更改车间订单的审批状态为正常 + if (WorkOrderRun.RUN_TYPE_1.equals(workOrderRun.getRunType()) || WorkOrderRun.RUN_TYPE_2.equals(workOrderRun.getRunType())) { + wo.setApprovalStatus(WorkOrder.APPROVAL_STATUS_NORMAL); + List wprList = workPlanRunMapper.selectList(new LambdaQueryWrapper() + .eq(WorkPlanRun::getWorId, workOrderRun.getId())); + List wpList = new ArrayList<>(); + //转外协业务处理 + if (WorkOrderRun.RUN_TYPE_1.equals(workOrderRun.getRunType())) { + for (WorkPlanRun wpr : wprList) { + WorkPlan wp1 = workPlanMapper.selectById(wpr.getWpId()); + //如果不是勾选工序不处理 + if (!wpr.getHandle()) { + continue; + } + wp1.setMakeTeam(null); + wp1.setSubsidiaryTeam(null); + wp1.setStartTime(LocalDateTime.ofInstant( + wpr.getStartTime().toInstant(), + ZoneId.systemDefault() + )); + wp1.setEndTime(LocalDateTime.ofInstant( + wpr.getEndTime().toInstant(), + ZoneId.systemDefault() + )); + wp1.setOem("1"); + wp1.setCaId(wpr.getCaId()); + wpList.add(wp1); + } + wo.setWorId(workOrderRun.getId()); + workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_ISSUED); + + //调用转外协自动分派处理 + if (wpList != null && wpList.size() > 0) { + //判断工序是否存在外协商,如果存在不进行二次分派 + WorkPlan workPlan = workPlanMapper.selectById(wprList.get(0).getWpId()); + if (workPlan.getOcId() == null || workPlan.getOcId() < 1 ) { + //todo 自动分派后续补充 + pjAutomaticDispatchService.runAutomaticDispatch(wpList, yo, Boolean.FALSE, null); + } + } + int days = 0; + wo.setOemOut("0"); + if (workOrderRun.getCollaborate() != null && workOrderRun.getCollaborate().equalsIgnoreCase("1")) { + wo.setOemType(WorkOrder.OEM_TYPE_SINGLE); + //todo 加工周期(协作)+ + days = Integer.valueOf(bsBusConfigService.getBusConfig(BsBusConfig.BC_TYPE_CYCLE_HELP, BsBusConfig.BC_NAME_CYCLE_HELP).getBcValue()); + } else { + wo.setOemType(WorkOrder.OEM_TYPE_WHOLE); + //todo 加工周期(外协)+ + days = Integer.valueOf(bsBusConfigService.getBusConfig(BsBusConfig.BC_TYPE_CYCLE_OEM, BsBusConfig.BC_NAME_CYCLE_OEM).getBcValue()); + //todo 缺少外协工艺表 + OemAbility oa = null; + if (wo.getWorkPlan().getStatus().equals(WorkPlan.STATUS_WORK_OK)) { + oa = bsOemAbilityService.findBsOemAbility(wo.getNextBsOemCustomer().getOcId(), + wo.getWorkPlan().getNextWorkPlan().getBsCraftAbility().getCaId()); + } else { + oa = bsOemAbilityService.findBsOemAbility(wo.getWorkPlan().getOemCustomer().getOcId(), + wo.getWorkPlan().getBsCraftAbility().getCaId()); + } + //todo 缺少业务配置表 + prWorkOrderService.maintainOrder(wo, oa.getPlanner(), oa.getDispatcher(), workOrderRun, true); + } + Date date = DateUtil.plusDays(wo.getSendDownTime(), days); + wo.setPlanEndDate(DateUtil.format(date,DateUtil.PATTERN_DATETIME)); + + //如果当前工序已经报工完成,运行记录的转出供应商取下道工序的加工外协商,反之取当前 + if (wp.getStatus().equals(WorkPlan.STATUS_WORK_OK)) { + oemMapper.selectById(wp.getNextWpId()); + WorkPlan nextWp = workPlanMapper.selectOne(new LambdaQueryWrapper() + .eq(WorkPlan::getId, wp.getNextWpId())); + workOrderRun.setInCustomer(nextWp.getOcId()); + } else { + workOrderRun.setInCustomer(wp.getOcId()); + } + //todo 缺少外协工艺表 更新车间订单主责任单位 + prWorkOrderService.updateHostWorkUnit(wo.getId()); + + //转厂内业务 + } else { + + WorkPlan nextWorkPlan; + TeamSet teamSet = null; + for (WorkPlanRun wpr : wprList) { + wp = workPlanMapper.selectOne(new LambdaQueryWrapper() + .eq(WorkPlan::getId, wpr.getWpId())); + //如果不是勾选工序不处理 + if (!wpr.getHandle()) { + continue; + } + nextWorkPlan = workPlanMapper.selectOne(new LambdaQueryWrapper() + .eq(WorkPlan::getId, wp.getNextWpId())); + BsProcessSetEntity bsProcessSetEntity = processSetMapper.selectOne(new LambdaQueryWrapper() + .eq(BsProcessSetEntity::getId, nextWorkPlan.getPpsId())); + if (nextWorkPlan.getMakeTeam() != null && !"1".equalsIgnoreCase(bsProcessSetEntity.getIsDispatch())) { + teamSet = teamSetMapper.selectOne(new LambdaQueryWrapper() + .eq(TeamSet::getId, nextWorkPlan.getMakeTeam())); + } + wp.setMakeTeam(teamSet.getId()); + wp.setOem(null); + wp.setStartTime(null); + wp.setUnqualifiedQty(0); + wp.setWorkQty(0d); + wp.setEndTime(null); + wp.setSubsidiaryTeam(null); + wp.setOem("0"); + wp.setCaId(wpr.getCaId()); + wpList.add(wp); + } + + if (wpList == null || wpList.size() == 0) { + throw new BusinessException("product.notTurnBackProcess", null); + } + wo.setWorId(workOrderRun.getId()); + workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_ISSUED); + //调用转厂内自动分派处理 + if (teamSet == null) { + //调用转外协自动分派处理 + //todo 自动分派后续补充 + pjAutomaticDispatchService.runAutomaticDispatch(wpList, yo, Boolean.TRUE, null); + //周新昊 20241015 增加调用下方方法 + //处理包装工序 并且工艺能力包含 包装 并且加工单位为空的 + //todo 手持移动端数据查询接口类未实现 + pdaLoadService.handleBaoZhuangWorkPlan(wpList, yo); + } else { + PlateAround prPlateAround = new PlateAround(); + prPlateAround.setWpId(wo.getWpId()); + prPlateAround.setOcId(wo.getOcId()); + prPlateAround.setCurStatus(PlateAround.BEFORE_PLAT_IN); + prPlateAround.setQuantity(wo.getMakeQty()); + //todo 创建更新镀前镀后对象班组和供应商未实现 + prPlateAroundService.createPlateAround(workOrderRun.getCreateUser(), prPlateAround, PlateAround.BEFORE_PLAT_IN, 1, true); + } + // 如果主工序班组为空后者外协 + if (wo.getOcId() != null || wo.getTsId() == null) { + wo.setOcId(null); + wo.setTsId(wpList.get(0).getMakeTeam()); + } + + workOrderRun.setInTeam(wo.getTsId()); + if (workOrderRun.getInTeam() == null) { + nextWorkPlan = workPlanMapper.selectOne(new LambdaQueryWrapper() + .eq(WorkPlan::getId, wp.getNextWpId())); + workOrderRun.setInTeam(nextWorkPlan.getMakeTeam()); + wo.setTsId(nextWorkPlan.getMakeTeam()); + } + wo.setOemType(Integer.valueOf("-1")); + //todo 加工周期(热表)+ + int days = Integer.valueOf(bsBusConfigService.getBusConfig(BsBusConfig.BC_TYPE_CYCLE_HEAT, BsBusConfig.BC_NAME_CYCLE_HEAT).getBcValue()); + Date date = DateUtil.plusDays(wo.getSendDownTime(), days); + wo.setPlanEndDate(DateUtil.format(date,DateUtil.PATTERN_DATETIME)); + workOrderMapper.updateById(wo); + + wo = workOrderMapper.selectById(wo.getId()); + + //todo 缺少业务配置表 + prWorkOrderService.maintainOrder(wo, wo.getMakeTeam().getPlanner(), wo.getMakeTeam().getDispatcher(), workOrderRun, false); + //更新车间订单主责任单位 + //todo 缺少外协工艺表 更新车间订单主责任单位 + prWorkOrderService.updateHostWorkUnit(wo.getId()); + + //todo 关闭erp外协订单,程序调用存储过程 + if (!yo.getManualIncrease()) { + workOrderRunMapper.closeErpOrder(wxCode, workOrderRun.getApprovalMemo()); + } + //是否存在外协工序 + List workPlans = workPlanMapper.selectList(new LambdaQueryWrapper() + .eq(WorkPlan::getOem, "1") + .eq(WorkPlan::getWoId, wo.getId())); + if (null == workPlans || workPlans.size() < 1) { + wo.setCollaborate("0"); + } + // 修改订单业务中心 + nextWorkPlan = workPlanMapper.selectOne(new LambdaQueryWrapper() + .eq(WorkPlan::getId, wp.getNextWpId())); + if (nextWorkPlan != null && nextWorkPlan.getMakeTeam() != null) { + if (Integer.valueOf(YieldOrderEnum.YIELD_TYPE_1.getCode()).equals(yo.getYieldType())) { + yo.setBusinessType(YieldOrderEnum.BUSINESS_TYPE_RB.getCode()); + } else { + yo.setBusinessType(YieldOrderEnum.BUSINESS_TYPE_SJ.getCode()); + } + } + } + } else if (WorkOrderRun.RUN_TYPE_3.equals(workOrderRun.getRunType())) { + //验证同工单下的车间订单 + this.validateSameYield(yo.getId()); + //处理同订单 + this.withYield(yo.getId()); + //生产订单接收 + yo.setReceiveStatus(YieldOrder.CUR_STATUS_NORMAL); + ////todo 关闭erp外协订单,程序调用存储过程 + if (!yo.getManualIncrease() && oldOemCustomer != null) { + workOrderRunMapper.closeErpOrder(wxCode, workOrderRun.getApprovalMemo()); + } + } + } else { + wo.setApprovalStatus(WorkOrder.APPROVAL_STATUS_FAIL); + workOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_FAIL); + }*/ return null; } @@ -461,4 +506,22 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl woList = workOrderMapper.selectList(new LambdaQueryWrapper() + .eq(WorkOrder::getYoId, yoId)); + for (WorkOrder wo : woList) { + if (WorkOrder.RUN_STATUS_RECEIVE < wo.getRunStatus()) { + throw new BusinessException("product.validateSameYield", new String[]{wo.getWoCode()}); + } + } + }*/ + + /*protected void withYield(Long yoId) { + List woList = workOrderMapper.selectList(new LambdaQueryWrapper() + .eq(WorkOrder::getYoId, yoId)); + for (WorkOrder wo : woList) { + wo.setRunStatus(WorkOrder.RUN_STATUS_VOIDED); + } + }*/ } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java index 82e30bd3..dd02a929 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/WorkOrderServiceImpl.java @@ -923,8 +923,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl