diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/feign/IApsProduceClient.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/feign/IApsProduceClient.java new file mode 100644 index 00000000..11c88262 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/feign/IApsProduceClient.java @@ -0,0 +1,30 @@ +package org.springblade.desk.produce.feign; + +import org.springblade.core.launch.constant.AppConstant; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; + +/** + * 排产相关定时任务接口声明 + * + * @author lqk + */ +@FeignClient( + value = AppConstant.APPLICATION_DESK_NAME +) +public interface IApsProduceClient { + + String API_PREFIX = "/feign/aps/produce"; + + String SYNC_ORDER_FROM_OLD_MES = API_PREFIX + "/syncOrderFromOldMes"; + + + /** + * 从旧mes平台同步生产订单 + * + * @return + */ + @GetMapping(SYNC_ORDER_FROM_OLD_MES) + Boolean syncOrderFromOldMes(); + +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/MesRbRedoRoutDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/MesRbRedoRoutDTO.java new file mode 100644 index 00000000..72d2614a --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/MesRbRedoRoutDTO.java @@ -0,0 +1,119 @@ +package org.springblade.desk.produce.pojo.dto; + +import lombok.Data; + +/** + *

Description: 返工订单

+ * + * @author lyj + * @date 2023-03-07 14:54 + */ +@Data +public class MesRbRedoRoutDTO { + /** + * 返修单号 + */ + private String redono; + /** + * 路线编号 + */ + private Integer seqno; + /** + * 处理单位 + */ + private String seqdept; + /** + * 物料号 + */ + private String prtno; + /** + * 执行状态 + */ + private Short excstatus; + /** + * 加工数量 + */ + private Double amount; + /** + * 需求日期 + */ + private String reqdate; + /** + * 需求数量 + */ + private String reqqty; + /** + * 接收日期 + */ + private String recdate; + /** + * 接收人 + */ + private String recman; + /** + * 接收数量 + */ + private String recqty; + /** + * 完成时间 + */ + private String enddat; + /** + * 完成人 + */ + private String endman; + /** + * 完成数量 + */ + private String endqty; + /** + * 批次号 + */ + private String splcode; + /** + * 备注 + */ + private String remark; + /** + * 交接日期 + */ + private String hrecdate; + /** + * 报废数量 + */ + private Integer bfqty; + + /** + * 发生单位 + */ + private String usedept; + /** + * 处理意见 + */ + private String detail; + /** + * 生产标识 + */ + private String prtlotno; + /** + * 工艺路线 + */ + private String deptcode; + /** + * 是否无工艺 + */ + private String reworkgyFlag; + /** + * 开单车间订单号 + */ + private String sono; + /** + * 镀种 + */ + private String plate; + /** + * 工艺责任人 + */ + private String gyname; + +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/ShiftTransferDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/ShiftTransferDTO.java new file mode 100644 index 00000000..5c499667 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/ShiftTransferDTO.java @@ -0,0 +1,12 @@ +package org.springblade.desk.produce.pojo.dto; + +import lombok.Data; + +@Data +public class ShiftTransferDTO { + private Long woId; + + private Long oldTsId; + + private Long newTsId; +} diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/TaskCompleteOrderDTO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/TaskCompleteOrderDTO.java new file mode 100644 index 00000000..fd213e89 --- /dev/null +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/produce/pojo/dto/TaskCompleteOrderDTO.java @@ -0,0 +1,24 @@ +package org.springblade.desk.produce.pojo.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +/** + * 调度任务分派 数据传输对象实体类 + * @author litao + */ +@Data +public class TaskCompleteOrderDTO { + + @Schema(description = "id集合") + private List ddtIdList; + + @Schema(description = "审理单号") + private String rsCode; + + @Schema(description = "处理结果") + private String handleResult; + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/DisTaskingController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/DisTaskingController.java index ef27ce8b..b52bf5ee 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/DisTaskingController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/DisTaskingController.java @@ -15,6 +15,7 @@ import org.springblade.core.mp.support.Query; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.desk.produce.pojo.dto.TaskCompleteDTO; +import org.springblade.desk.produce.pojo.dto.TaskCompleteOrderDTO; import org.springblade.desk.produce.pojo.entity.DisTasking; import org.springblade.desk.produce.pojo.entity.MakeRec; import org.springblade.desk.produce.pojo.entity.WorkPlanLog; @@ -22,7 +23,6 @@ import org.springblade.desk.produce.pojo.vo.ByCardNoByPlanVO; import org.springblade.desk.produce.pojo.vo.TaskCompleteVO; import org.springblade.desk.produce.service.IDisTaskingService; import org.springblade.desk.produce.service.IWorkPlanLogService; -import org.springblade.job.pojo.entity.JobInfo; import org.springframework.web.bind.annotation.*; import java.util.Date; @@ -103,6 +103,13 @@ public class DisTaskingController extends BladeController { public R> workPlanLogPage(WorkPlanLog workPlanLog, Query query) { return R.data(workPlanLogService.page(Condition.getPage(query), Wrappers.lambdaQuery(workPlanLog))); } + @PostMapping("/taskCompleteOrder") + @ApiOperationSupport(order = 6) + @Operation(summary = "质量任务处理", description = "传入TaskCompleteOrderDTO") + public R taskCompleteOrder(@RequestBody TaskCompleteOrderDTO taskCompleteDTO) { + disTaskingService.taskCompleteOrder(taskCompleteDTO); + return R.success(); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PlateAroundController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PlateAroundController.java index ee426dbf..9154caa3 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PlateAroundController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PlateAroundController.java @@ -5,25 +5,17 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import org.apache.commons.lang3.StringUtils; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; -import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; -import org.springblade.desk.order.pojo.entity.YieldOrder; -import org.springblade.desk.order.service.IYieldOrderService; import org.springblade.desk.produce.pojo.dto.PlateAroundDto; import org.springblade.desk.produce.pojo.dto.SavePlateAroundDto; import org.springblade.desk.produce.pojo.entity.PlateAround; -import org.springblade.desk.produce.pojo.entity.WorkOrder; import org.springblade.desk.produce.pojo.entity.WorkPlan; -import org.springblade.desk.produce.pojo.vo.AfterPlateInVO; import org.springblade.desk.produce.pojo.vo.PlateAroundVO; import org.springblade.desk.produce.service.IPlateAroundService; -import org.springblade.desk.produce.service.IWorkOrderService; -import org.springframework.beans.BeanUtils; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; @@ -113,4 +105,17 @@ public class PlateAroundController extends BladeController { public R queryDelLogRecord(PlateAroundDto plateAroundDto, Query query) { return R.data(plateAroundService.queryDelLogRecord(Condition.getPage(query), plateAroundDto)); } + @PostMapping(value = "/savePlateFrontEnter") + @ApiOperationSupport(order = 7) + @Operation(summary = "保存镀前入库", description = "") + public R savePlateFrontEnter(@RequestBody List plateArounds) { + plateAroundService.savePlateFrontEnter(plateArounds); + return R.success(); + } + @PostMapping(value = "/getByPartCode") + @ApiOperationSupport(order = 8) + @Operation(summary = "获取零件信息", description = "") + public R getByPartCode(@RequestParam String partCode) { + return R.data(plateAroundService.getByPartCode(partCode)); + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PrWorkPlanController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PrWorkPlanController.java index fcac541c..c1fe2757 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PrWorkPlanController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/PrWorkPlanController.java @@ -9,6 +9,7 @@ import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; +import org.springblade.desk.order.service.IYieldPlanService; import org.springblade.desk.produce.pojo.vo.WorkPlanVO; import org.springblade.desk.produce.service.IWorkPlanService; import org.springframework.web.bind.annotation.GetMapping; @@ -29,6 +30,8 @@ public class PrWorkPlanController extends BladeController { private final IWorkPlanService workPlanService; + private final IYieldPlanService yieldPlanService; + /** * 车间作业计划 */ diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/WorkProcessController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/WorkProcessController.java new file mode 100644 index 00000000..a99c6479 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/controller/WorkProcessController.java @@ -0,0 +1,94 @@ +package org.springblade.desk.produce.controller; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import lombok.AllArgsConstructor; +import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.mp.support.Condition; +import org.springblade.core.mp.support.Query; +import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.core.tool.api.R; +import org.springblade.core.tool.utils.Func; +import org.springblade.desk.dashboard.pojo.entity.PrReworkProcessEntity; +import org.springblade.desk.dashboard.pojo.vo.PrReworkProcessVO; +import org.springblade.desk.dashboard.service.IPrReworkProcessService; +import org.springblade.desk.dashboard.wrapper.PrReworkProcessWrapper; +import org.springblade.desk.produce.pojo.dto.MesRbRedoRoutDTO; +import org.springblade.desk.produce.pojo.dto.ShiftTransferDTO; +import org.springblade.desk.produce.pojo.entity.MacToolUse; +import org.springblade.desk.produce.pojo.entity.WorkPlan; +import org.springblade.desk.produce.pojo.vo.WorkPlanVO; +import org.springblade.desk.produce.service.IMacToolUseService; +import org.springblade.desk.produce.service.IPdaSaveService; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + +/** + * 返工任务表 控制器 + * + * @author BladeX + * @since 2025-12-03 + */ +@RestController +@AllArgsConstructor +@RequestMapping("/workProcess") +@Tag(name = "返工任务表", description = "返工任务表接口") +public class WorkProcessController extends BladeController { + + private final IPdaSaveService pdaSaveService; + + private final IMacToolUseService macToolUseService; + /** + *订单接收 + */ + @PostMapping("/receiveOrder") + @ApiOperationSupport(order = 1) + @Operation(summary = "订单接收", description = "传入prReworkProcess") + public R receiveOrder(@Valid @RequestBody MesRbRedoRoutDTO mesRbRedoRoutDTO) { + pdaSaveService.receiveOrder(mesRbRedoRoutDTO); + return R.success(); + } + /** + *订单接收 + */ + @PostMapping("/completeOrder") + @ApiOperationSupport(order = 2) + @Operation(summary = "订单完成", description = "传入mesRbRedoRoutDTO") + public R completeOrder(@Valid @RequestBody MesRbRedoRoutDTO mesRbRedoRoutDTO) { + pdaSaveService.completeOrder(mesRbRedoRoutDTO,AuthUtil.getUser().getUserName()); + return R.success(); + } + /** + *订单接收 + */ + @PostMapping("/uploadPlan") + @ApiOperationSupport(order = 3) + @Operation(summary = "更新车间作业计划", description = "传入workPlanList") + public R uploadPlan(@Valid @RequestBody List workPlanList) { + pdaSaveService.uploadPlan(workPlanList); + return R.success(); + } + @PostMapping("/shiftTransfer") + @ApiOperationSupport(order = 4) + @Operation(summary = "转班", description = "传入shiftTransferDTO") + public R shiftTransfer(@Valid @RequestBody ShiftTransferDTO shiftTransferDTO) { + pdaSaveService.shiftTransfer(shiftTransferDTO); + return R.success(); + } + @GetMapping("/queryData") + @ApiOperationSupport(order = 5) + @Operation(summary = "分页", description = "传入macToolUse") + public R> page(MacToolUse macToolUse, Query query) { + IPage pages = macToolUseService.queryMacToolUse(Condition.getPage(query), macToolUse); + return R.data(pages); + } + + + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/feign/ApsProduceClient.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/feign/ApsProduceClient.java new file mode 100644 index 00000000..765ecf88 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/feign/ApsProduceClient.java @@ -0,0 +1,38 @@ +package org.springblade.desk.produce.feign; + +import io.swagger.v3.oas.annotations.Hidden; +import lombok.RequiredArgsConstructor; +import org.springblade.core.tenant.annotation.NonDS; +import org.springblade.desk.order.service.IYieldOrderService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * Feign 排产相关定时任务接口 + * + * @author Chill + */ +@NonDS +@Hidden() +@RestController +@RequiredArgsConstructor +public class ApsProduceClient implements IApsProduceClient { + + private final IYieldOrderService yieldOrderService; + + + @Override + @GetMapping(SYNC_ORDER_FROM_OLD_MES) + public Boolean syncOrderFromOldMes() { + // 同步生产订单 + List cardNoList = yieldOrderService.syncYieldOrderFromOldMes(); + + // 推送同步结果,避免重复同步 + yieldOrderService.syncYieldOrderResultToOldMes(cardNoList); + + return Boolean.TRUE; + } + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MacToolUseMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MacToolUseMapper.java index ee879704..f2fc6084 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MacToolUseMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MacToolUseMapper.java @@ -1,8 +1,11 @@ package org.springblade.desk.produce.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.desk.produce.pojo.entity.MacToolUse; +import java.util.List; + /** * 设备,工装使用记录 Mapper 接口 * @@ -10,4 +13,5 @@ import org.springblade.desk.produce.pojo.entity.MacToolUse; */ public interface MacToolUseMapper extends BaseMapper { + List queryMacToolUse(IPage page, MacToolUse macToolUse); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MacToolUseMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MacToolUseMapper.xml new file mode 100644 index 00000000..11a324c3 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/mapper/MacToolUseMapper.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IDisTaskingService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IDisTaskingService.java index 2fa7e0e8..a815a352 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IDisTaskingService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IDisTaskingService.java @@ -3,6 +3,7 @@ package org.springblade.desk.produce.service; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; import org.springblade.desk.produce.pojo.dto.TaskCompleteDTO; +import org.springblade.desk.produce.pojo.dto.TaskCompleteOrderDTO; import org.springblade.desk.produce.pojo.entity.DisTasking; import org.springblade.desk.produce.pojo.entity.MakeRec; import org.springblade.desk.produce.pojo.vo.ByCardNoByPlanVO; @@ -22,4 +23,6 @@ public interface IDisTaskingService extends BaseService { List getByCardNoByPlan(String cardNo); List queryByWpIdlLst(Long wpId); + + void taskCompleteOrder(TaskCompleteOrderDTO taskCompleteDTO); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMacToolUseService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMacToolUseService.java index 22073f8f..4be9164b 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMacToolUseService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IMacToolUseService.java @@ -1,5 +1,6 @@ package org.springblade.desk.produce.service; +import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; import org.springblade.desk.produce.pojo.entity.MacToolUse; @@ -26,4 +27,6 @@ public interface IMacToolUseService extends BaseService { * @param mtuList */ void unMacToolUseBind(List mtuList); + + IPage queryMacToolUse(IPage page, MacToolUse macToolUse); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPdaLoadService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPdaLoadService.java index 4df91140..4597c67a 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPdaLoadService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPdaLoadService.java @@ -59,4 +59,6 @@ public interface IPdaLoadService extends BaseService { List loadPrMacToolUseByMtnCode(String mtnCode); void deletedProduceRun(String mtnCode); + + public WorkOrder checkPrWorkOrder(String cardNo); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPdaSaveService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPdaSaveService.java index 1d4d2b28..9d577406 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPdaSaveService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPdaSaveService.java @@ -1,6 +1,8 @@ package org.springblade.desk.produce.service; import org.springblade.core.mp.base.BaseService; +import org.springblade.desk.produce.pojo.dto.MesRbRedoRoutDTO; +import org.springblade.desk.produce.pojo.dto.ShiftTransferDTO; import org.springblade.desk.produce.pojo.entity.MacToolUse; import org.springblade.desk.produce.pojo.entity.WorkPlan; import org.springblade.desk.produce.pojo.vo.SjEcBingCardVo; @@ -58,4 +60,12 @@ public interface IPdaSaveService extends BaseService { * @param unBingDeviceVo 解绑数据 */ void sjDeviceUnBind(UnBingDeviceVo unBingDeviceVo); + + void receiveOrder(MesRbRedoRoutDTO mesRbRedoRoutDTO); + + void completeOrder(MesRbRedoRoutDTO mesRbRedoRoutDTO, String user); + + void uploadPlan(List workPlanList); + + void shiftTransfer(ShiftTransferDTO shiftTransferDTO); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPlateAroundService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPlateAroundService.java index 405d0f7a..45abe912 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPlateAroundService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/IPlateAroundService.java @@ -2,6 +2,7 @@ package org.springblade.desk.produce.service; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; +import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; import org.springblade.desk.produce.pojo.dto.PlateAroundDto; import org.springblade.desk.produce.pojo.dto.SavePlateAroundDto; import org.springblade.desk.produce.pojo.entity.PlateAround; @@ -33,4 +34,8 @@ public interface IPlateAroundService extends BaseService { boolean deletePlateAround(Long id); IPage queryDelLogRecord(IPage page, PlateAroundDto plateAroundDto); + + void savePlateFrontEnter(List plateArounds); + + DsPartEntity getByPartCode(String partCode); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/DisTaskingServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/DisTaskingServiceImpl.java index 2aa579b7..7414cf97 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/DisTaskingServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/DisTaskingServiceImpl.java @@ -1,28 +1,33 @@ package org.springblade.desk.produce.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.desk.dashboard.pojo.entity.DsTaskingEntity; +import org.springblade.desk.dashboard.service.IDsTaskingService; import org.springblade.desk.produce.mapper.DisTaskingMapper; import org.springblade.desk.produce.pojo.dto.TaskCompleteDTO; -import org.springblade.desk.produce.pojo.entity.DisTasking; -import org.springblade.desk.produce.pojo.entity.MakeRec; -import org.springblade.desk.produce.pojo.entity.WorkOrder; -import org.springblade.desk.produce.pojo.entity.WorkOrderRun; +import org.springblade.desk.produce.pojo.dto.TaskCompleteOrderDTO; +import org.springblade.desk.produce.pojo.entity.*; import org.springblade.desk.produce.pojo.vo.ByCardNoByPlanVO; import org.springblade.desk.produce.pojo.vo.TaskCompleteVO; import org.springblade.desk.produce.service.IDisTaskingService; import org.springblade.desk.produce.service.IWorkOrderRunService; import org.springblade.desk.produce.service.IWorkOrderService; +import org.springblade.desk.produce.service.IWorkPlanService; +import org.springblade.desk.quality.pojo.entity.WorkPlanItem; +import org.springblade.desk.quality.service.IWorkPlanItemService; import org.springblade.system.cache.UserCache; import org.springblade.system.feign.IUserClient; import org.springblade.system.pojo.entity.User; import org.springframework.stereotype.Service; +import java.util.Date; import java.util.List; /** @@ -39,6 +44,12 @@ public class DisTaskingServiceImpl extends BaseServiceImpl queryByWpIdlLst(Long wpId) { return baseMapper.queryByWpIdlLst(wpId); } + + @Override + public void taskCompleteOrder(TaskCompleteOrderDTO taskCompleteDTO) { + List ddtIds=taskCompleteDTO.getDdtIdList(); + for (Long ddtId : ddtIds) { + DisTasking dsDisTasking = baseMapper.selectById(ddtId); + dsDisTasking.setDispatchTime(new Date()); + dsDisTasking.setDispatchMan(AuthUtil.getUserId()); + dsDisTasking.setRsCode(taskCompleteDTO.getRsCode()); + dsDisTasking.setHandleResult(taskCompleteDTO.getHandleResult()); + dsDisTasking.setDisTaskStatus(DisTasking.TASK_STATUS_COMPLETED); + DsTaskingEntity dsTaskingEntity = dsTaskingService.getById(dsDisTasking.getDtId()); + // 通过零件号查询所有工艺变更的单子 + if (dsDisTasking.getDtId() != null && dsTaskingEntity.getId() != null ) { + String partCode = dsTaskingEntity.getPartCode(); + if (StringUtils.isNotBlank(partCode) && dsTaskingEntity.getTaskStatus().equals(DisTasking.TASK_STATUS_COMPLETED)) { + List prWorkOrderList=workOrderService.list(Wrappers.lambdaQuery(WorkOrder.class).eq(WorkOrder::getPartCode, partCode).eq(WorkOrder::getRunStatus, WorkOrder.RUN_STATUS_CRAFT_CHANGE)); + for (WorkOrder prWorkOrder : prWorkOrderList) { + if (prWorkOrder != null && prWorkOrder.getId() != null) { + prWorkOrder.setRunStatus(WorkOrder.RUN_STATUS_RECEIVE); + //zxh 20250522 增加记录订单变更为加工中日志 + // syDockingLogService.sendDockingLog("修改订单执行状态为加工中",prWorkOrder.getWoCode(),"taskCompleteOrder()"); + //判定是否是检验项目,并且还有未检验 + WorkPlan wp=workPlanService.getById(prWorkOrder.getWpId()); + List list =workPlanItemService.list(Wrappers.lambdaQuery(WorkPlanItem.class) + .eq(WorkPlanItem::getWpId,wp.getId()).eq(WorkPlanItem::getCheckResult, -1)); + if (list != null && list.size() > 0) { + prWorkOrder.setRunStatus(WorkOrder.RUN_STATUS_CHECK); + } + workOrderService.updateById(prWorkOrder); + } + } + } + } + } + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MacToolUseServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MacToolUseServiceImpl.java index b8ebd968..b4ca573a 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MacToolUseServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/MacToolUseServiceImpl.java @@ -1,5 +1,6 @@ package org.springblade.desk.produce.service.impl; +import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.mp.base.BaseServiceImpl; @@ -73,6 +74,11 @@ public class MacToolUseServiceImpl extends BaseServiceImpl queryMacToolUse(IPage page, MacToolUse macToolUse) { + return page.setRecords(baseMapper.queryMacToolUse(page, macToolUse)); + } + public static final int time2Integer(Date d) { Calendar cal = Calendar.getInstance(); cal.setTime(d); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaLoadServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaLoadServiceImpl.java index 9a7dbfa4..cdd47a9c 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaLoadServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaLoadServiceImpl.java @@ -237,7 +237,7 @@ public class PdaLoadServiceImpl extends BaseServiceImpl WorkOrder.RUN_STATUS_RECEIVE) { diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaSaveServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaSaveServiceImpl.java index 8b36fb63..a7a0ae98 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaSaveServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PdaSaveServiceImpl.java @@ -1,6 +1,8 @@ package org.springblade.desk.produce.service.impl; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.BeanUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; @@ -10,13 +12,20 @@ import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.desk.basic.service.IRelTeamSetUserService; +import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity; +import org.springblade.desk.dashboard.pojo.entity.BsTeamSetEntity; +import org.springblade.desk.dashboard.pojo.entity.PrReworkProcessEntity; import org.springblade.desk.dashboard.service.*; import org.springblade.desk.device.pojo.entity.FeiBaSetEntity; import org.springblade.desk.device.pojo.entity.RackSetEntity; import org.springblade.desk.device.service.IFeiBaSetService; import org.springblade.desk.device.service.IRackSetService; +import org.springblade.desk.order.pojo.entity.YieldOrder; +import org.springblade.desk.order.service.IYieldOrderService; import org.springblade.desk.produce.mapper.WorkPlanMapper; +import org.springblade.desk.produce.pojo.dto.MesRbRedoRoutDTO; import org.springblade.desk.produce.pojo.dto.PrMacTooUseSpec; +import org.springblade.desk.produce.pojo.dto.ShiftTransferDTO; import org.springblade.desk.produce.pojo.entity.*; import org.springblade.desk.produce.pojo.vo.SjEcBingCardVo; import org.springblade.desk.produce.pojo.vo.UnBingDeviceVo; @@ -25,8 +34,10 @@ import org.springblade.desk.produce.service.*; import org.springblade.desk.quality.service.IInspectionTaskService; import org.springblade.desk.quality.service.IPlanTestService; import org.springblade.desk.quality.service.IWorkPlanItemService; +import org.springblade.scheduling.pojo.entity.ProcessSetEntity; import org.springframework.stereotype.Service; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -79,6 +90,10 @@ public class PdaSaveServiceImpl extends BaseServiceImpl rpList = listByReworkCode(rr.getRedono(), rr.getSeqno(), rr.getPrtno(), rr.getSplcode()); + if (rpList == null && rpList.size() == 0) { + //修改erp返工单工艺状态为无工艺 + //prReworkProcessDao.receiveOrder(rr, user.getLdapName(), 0); + }else { + //查询原订单 + // WorkOrder wo = prWorkOrderService.getWorkOrderUniqueRec(rr.getPrtno(), rr.getSplcode(), rr.getSono()); + WorkOrder wo =workOrderService.getOne(Wrappers.lambdaQuery().eq(WorkOrder::getBatchNo, rr.getSplcode())); + //syDockingLogService.sendDockingLog("查询原单", rr.getRedono(), rr.getPrtno()+","+rr.getSplcode()+","+rr.getSono()); + if (wo == null) { + wo = workOrderService.getOne(Wrappers.lambdaQuery().eq(WorkOrder::getBatchNo, rr.getSplcode())); + //syDockingLogService.sendDockingLog("查询原单", rr.getRedono(), rr.getPrtno()+","+rr.getSplcode()); + } + memo = memo + "物料号:" + rr.getPrtno() + "批次号:" + rr.getSplcode() + " 订单号:" + rr.getSono() + " ---- "; + YieldOrder yieldOrder; + WorkOrder newWo = new WorkOrder(); + //zxh 20250820 返修发现部门为3400的才进行原单覆盖 + if (wo != null && rr.getUsedept().equals("3400")) { + memo = memo + "找到原单,woId:" + wo.getId() + " ---- "; + yieldOrder = yieldOrderService.getYoByCardNo(wo.getCardNo()); + List wpList = null; + //返工路线是3400-3400内部返工的,需要COPY原订单且不更新上账时间和上账人,反之则走非车间内部返工处理 + if (StringUtils.isNotBlank(rr.getDeptcode()) && rr.getDeptcode().trim().equals("3400-3400")) { + //顺延原WO号 + //newWo.setWoCode(prWorkOrderCodeService.nextCode(yieldOrder.getPoCode())); + newWo.setWpId(wo.getWpId()); + //zxh 20250520 返修路线为3400-3400的返修订单在车间订单级记录返修订单接收人 + newWo.setMemo("返工路线是3400-3400,记录返修接收人为" + rr.getRecman()); + //非3400返工 + memo = memo + "返工路线是3400-3400 ---- "; + log.info("3400-3400新车间订单:woCode:{},oldYoCode:{}", newWo.getWoCode(), yieldOrder.getYoCode()); + }else { + //copy原生产订单,更新单号和关键信息 + YieldOrder newYieldOrder = yieldOrder; + newYieldOrder.setYoCode(null); + newYieldOrder.setDemandDate(new Date()); + //如果接收人不为空,则默认此接收人和接收时间 + if (StringUtils.isNotBlank(rr.getRecman())) { + //user = epDosingRecDao.getUserByLdapName(rr.getRecman().trim()); + } + //zxh 20241128 接收人赋值为返修订单接收人 + newYieldOrder.setReceiveUser(Long.valueOf(rr.getRecman())); +// newYieldOrder.setFailureTime(StringUtils.isNotBlank(rr.getRecdate()) ? +// DateTime.parse(rr.getRecdate()) : new Date()); + newYieldOrder.setMemo(rr.getRemark()); + newYieldOrder.setReworkMemo(rr.getDetail()); + //newYieldOrder.setPoQty(Double.valueOf(rr.getAmount())); + newYieldOrder.setPrimaryCraft(rr.getDeptcode()); + //newYieldOrder.setSyncTime(new Date()); + newYieldOrder.setReworkCode(rr.getRedono()); + newYieldOrder.setReworkNo(Long.valueOf(rr.getSeqno())); + newYieldOrder.setYoCode(rr.getRedono()); + //zxh 20250522 找到原单,非3400-3400,复制pj后不再更改pocode + //newYieldOrder.setPoCode(rr.getRedono()); + newYieldOrder.setProduceBool(Boolean.TRUE); + // newYieldOrder.setCurStatus(PjYieldOrder.CUR_STATUS_PROCESSING); + //周新昊 20240912 返修订单找到原单复制pj后为使用部门代码赋值 + //newYieldOrder.setUseDeptcode(rr.getUsedept()); + yieldOrderService.save(newYieldOrder); + log.info("不是厂内,保存新生产订单:yoId{},yoCode{}", newYieldOrder.getId(), newYieldOrder.getYoCode()); + //原订单已经入库,则更新接收人、接收时间并且车间订单号不顺延原订单号,反之则需要顺延原订单号 + if (wo.getPutStoreTime() != null) { + //newWo.setWoCode(prWorkOrderCodeService.nextCode(rr.getRedono())); + newWo.setReInStore("1"); + //newYieldOrder.setPoCode(rr.getRedono()); + } else { + // newWo.setWoCode(prWorkOrderCodeService.nextCode(yieldOrder.getPoCode())); + } + //绑定新车间订单的接收信息 + //newWo.setPjYieldOrder(newYieldOrder); + + //更新原生产订单状态为已关闭 + YieldOrder oldYo = yieldOrderService.getById(wo.getYoId()); + if (oldYo != null) { + // oldYo.setCurStatus(PjYieldOrder.CUR_STATUS_VOIDED); + oldYo.setCustodian(rr.getRecman()); + yieldOrderService.updateById(oldYo); + } + memo = memo + "新生产订单,yoId:" + newYieldOrder.getId() + " ---- "; + } + //返工订单流程卡号重新生成 + //newWo.setCardNo(prWorkOrderService.nextCardNo(wo.getPjYieldOrder().getPoCode(), wo.getCardNo())); + newWo.setBatchNo(rr.getSplcode()); + newWo.setMakeQty(Double.valueOf(rr.getAmount())); + newWo.setRunStatus(WorkOrder.RUN_STATUS_NORMAL); + newWo.setPriority(wo.getPriority()); + newWo.setReworkCode(rr.getRedono()); + newWo.setReworkNo(rr.getSeqno().intValue()); + newWo.setOem("0"); + newWo.setOemOut("1"); + //newWo.setOemType(FlowBusinessBean.STATUS_NEW); + newWo.setPlanner(wo.getPlanner()); + newWo.setDispatcher(wo.getDispatcher()); + newWo.setReworkMemo(rr.getDetail()); + newWo.setDemandDate(new Date()); + workOrderService.save(newWo); + log.info("保存新车间订单:woId{},woCode{}", newWo.getId(), newWo.getWoCode()); + //组装生产工序 + wpList = new ArrayList<>(rpList.size()); + WorkPlan wp; + for (PrReworkProcessEntity rp : rpList) { + wp = new WorkPlan(); + wp.setOrders(rp.getProcessNo()); + wp.setHourQuota(rp.getHourQuota()); + wp.setMakeMemo(rp.getMakeMemo()); + wp.setStatus(WorkPlan.STATUS_NO_START); + wp.setStartTime(rp.getStartTime().toInstant() + .atZone(ZoneId.systemDefault()) // 指定时区(通常用系统默认) + .toLocalDateTime()); + wp.setEndTime(rp.getEndTime().toInstant() + .atZone(ZoneId.systemDefault()) // 指定时区(通常用系统默认) + .toLocalDateTime()); + wp.setRpId(rp.getId()); + if (rp.getMakeTeam() != null) { + wp.setMakeTeam(rp.getMakeTeam()); + wp.setOem("0"); + } else { + wp.setOem(rp.getOcName()); + wp.setOem("1"); + } + wpList.add(wp); + } + } + } + } + + private List listByReworkCode(String redono, Integer seqno, String prtno, String splcode) { + List prReworkProcessList = new ArrayList<>(); + // 首先根据返工单号+零件号——批次号去查 + prReworkProcessList = null; //prReworkProcessDao.listByReworkCode(reworkCode, reworkNo, partCode, batchNo); + if (prReworkProcessList != null && prReworkProcessList.size() > 0) { + return prReworkProcessList; + } + return prReworkProcessList; + } + + public void completeOrder(MesRbRedoRoutDTO rr, String userName) { + WorkOrder wo =workOrderService.getOne(Wrappers.lambdaQuery(WorkOrder.class) + .eq(WorkOrder::getBatchNo, rr.getSplcode())); + if (wo != null) { + //记录返工单号 + wo.setQcReworkCode(rr.getRedono()); + //如果原车间订单状态小于已交接,就更改原订单状态为返工,否则不更改 + if (wo.getRunStatus() < WorkOrder.RUN_STATUS_HANDOVER) { + //修改旧订单状态 + workOrderService.updateStatus(null,WorkOrder.RUN_STATUS_REWORK,wo.getId(), null); + } + // 如果有 FatherYoId 有值,则代表他是子件 修改部件状态为返工 + YieldOrder pjYieldOrder = yieldOrderService.getById(wo.getYoId()); + if (pjYieldOrder.getFatherYoId() != null) { + List fatherPrWorkOrderList = workOrderService.list(Wrappers.lambdaQuery(WorkOrder.class).eq(WorkOrder::getYoId, pjYieldOrder.getFatherYoId())); + if (fatherPrWorkOrderList != null && fatherPrWorkOrderList.size() > 0) { + for (WorkOrder fatherPrWorkOrder : fatherPrWorkOrderList) { + // 记录原状态 + fatherPrWorkOrder.setOldRunStatus(fatherPrWorkOrder.getRunStatus()); + // 修改为返工 + fatherPrWorkOrder.setRunStatus(WorkOrder.RUN_STATUS_REWORK); + workOrderService.updateById(fatherPrWorkOrder); + } + } + } + }else { + + } + this.completeOrder(rr, userName); + } + + @Override + public void uploadPlan(List list) { + if (list.size() == 0) { + return; + } + WorkPlan prWorkPlan; + List ptLst; + Long woId = null; + for (WorkPlan item : list) { + + if (item.getMakeTeam() == null || item.getId() == null) { + continue; + } + + //获取车间订单Id + woId = item.getWoId(); + + prWorkPlan = baseMapper.selectById(item.getWoId()); + if (item.getReceiveMan() != null) { + prWorkPlan.setReceiveMan(item.getReceiveMan()); + } else { + prWorkPlan.setReceiveMan(null); + } + //判定工序是否特殊工序,如果是,则附属班组存在值 + if (prWorkPlan.getOcId() == null && prWorkPlan.getSubsidiaryTeam() == null && prWorkPlan.getOcId() == null) { + ptLst = bsProcedureTeamService.findBsProcedureTeamByPpsId(prWorkPlan.getPpsId()); + if (ptLst != null && ptLst.size() > 0) { + prWorkPlan.setSubsidiaryTeam(ptLst.get(0).getPpsId()); + } + } + if (prWorkPlan.getOem().equals("1")) { + prWorkPlan.setOem("0"); + prWorkPlan.setOem(null); + } + prWorkPlan.setMakeTeam(item.getMakeTeam()); + // 2025-07-23 线上迁移修改注释掉代码 + if(item.getPapers() != null && (item.getMakeTeam() != null || item.getReceiveMan() != null)){ + WorkPlanLog log = new WorkPlanLog(); + log.setUpdateUser(AuthUtil.getUser().getUserId()); + log.setUpdateTime(new Date()); + log.setWoId(woId); + workPlanLogService.save(log); + } + } + + } + + @Override + public void shiftTransfer(ShiftTransferDTO shiftTransferDTO) { + List wpList = baseMapper.selectList(new QueryWrapper().eq("wo_id", shiftTransferDTO.getWoId())); + + BsTeamSetEntity makeTeam = new BsTeamSetEntity(); + makeTeam.setId(shiftTransferDTO.getNewTsId()); + BsProcessSetEntity processSet = bsProcessSetService.getOne(Wrappers.lambdaQuery(BsProcessSetEntity.class).eq(BsProcessSetEntity::getId, shiftTransferDTO.getNewTsId())); + wpList.forEach(wp -> { + if (processSet.getIsSpecial() == null) { + return; + } + if (WorkPlan.STATUS_NO_START.equals(wp.getStatus())) { + wp.setMakeTeam(makeTeam.getId()); + } + }); + // prWorkOrderAdjustService.saveAdjust(woId, oldTsId, newTsId, userInfo); + //更新订单主加工单位 + // prWorkOrderService.updateHostWorkUnit(woId); + } + private void unBindBsRackSet(RackSetEntity bsRackSet) { if (bsRackSet != null) { bsRackSet.setBindQty((short) 0); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PlateAroundServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PlateAroundServiceImpl.java index 02b9484d..683ed52b 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PlateAroundServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/produce/service/impl/PlateAroundServiceImpl.java @@ -11,28 +11,33 @@ import org.apache.commons.lang3.StringUtils; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.mp.support.Condition; +import org.springblade.core.secure.BladeUser; import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.desk.dashboard.pojo.entity.BsTeamSetEntity; +import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; +import org.springblade.desk.dashboard.service.IDsPartService; import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springblade.desk.order.service.IYieldOrderService; import org.springblade.desk.produce.mapper.PlateAroundMapper; import org.springblade.desk.produce.pojo.dto.PlateAroundDto; import org.springblade.desk.produce.pojo.dto.SavePlateAroundDto; -import org.springblade.desk.produce.pojo.entity.PlateAround; -import org.springblade.desk.produce.pojo.entity.PlateAroundDelLog; -import org.springblade.desk.produce.pojo.entity.WorkOrder; -import org.springblade.desk.produce.pojo.entity.WorkPlan; +import org.springblade.desk.produce.pojo.entity.*; import org.springblade.desk.produce.pojo.vo.AfterPlateInVO; import org.springblade.desk.produce.pojo.vo.PlateAroundVO; -import org.springblade.desk.produce.service.IPlateAroundDelLogService; -import org.springblade.desk.produce.service.IPlateAroundService; -import org.springblade.desk.produce.service.IWorkOrderService; +import org.springblade.desk.produce.service.*; import org.springblade.job.pojo.entity.JobInfo; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Date; import java.util.List; +import static com.fasterxml.jackson.databind.type.LogicalType.DateTime; + /** * 镀前镀后 服务实现类 * @@ -49,6 +54,15 @@ public class PlateAroundServiceImpl extends BaseServiceImpl queryByReadStatus(IPage page, PlateAroundDto plateAroundDto) { return page.setRecords(baseMapper.queryByReadStatus(page, plateAroundDto)); @@ -164,4 +178,224 @@ public class PlateAroundServiceImpl extends BaseServiceImpl wrapper = Wrappers.lambdaQuery(PlateAroundDelLog.class); return plateAroundDelLogService.page(page, wrapper); } + + @Override + public void savePlateFrontEnter(List list) { + if (list == null || list.size() == 0) { + return; + } + int next = 0; + List woList = new ArrayList<>(list.size()); + WorkOrder wo; + Date date = new Date(); + Short paType = PlateAround.CUR_STATUS_NEW; + for (PlateAround plateAround : list) { + this.savePlateAround(AuthUtil.getUser(), plateAround, paType, next, Boolean.FALSE); + if (paType.equals(PlateAround.AFTER_PLAN_IN)) { + WorkPlan prWorkPlan = workPlanService.getById(plateAround.getWpId()); + wo = workOrderService.getById(prWorkPlan.getWoId()); + wo.setHandoverTime( date); + woList.add(wo); + // 计算主工序对应的金额 + //bsTeamWagesLevelService.countTeamSalary(wo.getWoId()); + } + if (paType.equals(PlateAround.AFTER_PLAN_IN)) { + // prHandoverRecordService.saveHandoverRecord(woList, AuthUtil.getUser()); + } + } + } + + @Override + public DsPartEntity getByPartCode(String partCode) { + return dsPartService.getOne(Wrappers.lambdaQuery().eq(DsPartEntity::getPartCode, partCode)); + } + + private void savePlateAround(BladeUser user, PlateAround plateAround, Short paType, int next, Boolean aTure) { + PlateAround newPa = null; + PlateAround oldPa=null; + Date date = new Date(); + WorkPlan wp = workPlanService.getById(plateAround.getWpId()); + if (paType.equals(PlateAround.BEFORE_PLAT_IN) || paType.equals(PlateAround.AFTER_PLAN_IN)) { + plateAround.setPaType(paType); + plateAround.setCreateUser(user.getUserId()); + plateAround.setCreateTime(date); + if (aTure) { + plateAround.setPaCode(this.nextCode(paType, next)); + plateAround.setMakeTime(new Date()); + plateAround.setMakeMan(user.getUserId()); + } + plateAround = this.updatePrPlateAround(plateAround); + baseMapper.insert(plateAround); + if (paType.equals(PlateAround.BEFORE_PLAT_IN)) { + WorkPlan nextWorkPlan = workPlanService.getById(wp.getNextWpId()); + if (nextWorkPlan != null && nextWorkPlan.getNextWpId()== null) { + throw new ServiceException("pda.nextWorkPlan.noNext"); + } + WorkOrder prWorkOrder = workOrderService.getById(wp.getWoId()); + pdaLoadService.checkPrWorkOrder(prWorkOrder.getCardNo()); + + //下序不能为空,并且下序班组或者供应商都没有值的情况下再进行自动分派 + if (nextWorkPlan != null && nextWorkPlan.getMakeTeam() == null && nextWorkPlan.getOcId() == null) { + //调用自动分派处理类 + //pjAutomaticDispatchService.beforePlatingAutomatic(prWorkOrder.getCardNo(), pfUserInfo); + } else { + // 如果下序是外协,将订单发外协的标记标为未发送 + if (nextWorkPlan != null && nextWorkPlan.getOcId() != null && nextWorkPlan.getMakeTeam() == null) { + prWorkOrder.setOem("1"); + prWorkOrder.setOemOut("0"); + if (prWorkOrder.getOcId()== null) { + prWorkOrder.setTsId(null); + prWorkOrder.setOcId(nextWorkPlan.getOcId()); + } + prWorkOrder.setOemType(WorkOrder.OEM_TYPE_WHOLE); + nextWorkPlan.setEndTime(LocalDateTime.now()); + workPlanService.updateById(nextWorkPlan); + //产生外协生产进度记录信息 + WorkOrderRun wr = new WorkOrderRun(); + wr.setWoId(prWorkOrder.getId()); + wr.setWoCode(prWorkOrder.getWoCode()); + wr.setRunType(WorkOrderRun.RUN_TYPE_1); + wr.setInTeam(wp.getMakeTeam()); + wr.setInCustomer(nextWorkPlan.getOcId()); + wr.setMemo("入库派外协"); + wr.setCreateTime(date); + wr.setCreateUser(user.getUserId()); + wr.setUpdateTime(date); + wr.setUpdateUser(user.getUserId()); + wr.setStatus(Integer.valueOf(WorkOrderRun.RUN_STATUS_UNDER)); + wr.setSystemData("1"); + wr.setCollaborate("1"); + wr.setRunStatus(WorkOrderRun.RUN_STATUS_UNDER); + workOrderRunService.save(wr); + prWorkOrder.setWorId(wr.getId()); + workOrderService.updateById(prWorkOrder); + } + } + wp = workPlanService.getById(wp.getId()); + //通知下序进行镀前出库 + if (nextWorkPlan.getMakeTeam() != null) { + String str = "流程卡号:【" + prWorkOrder.getCardNo() + "】,零件号:【" + prWorkOrder + .getPartCode() + "】批次号:【" + prWorkOrder.getBatchNo() + "】,已入镀前库,请及时处理!"; +// pfMessageService.sendMessage(str, nextWorkPlan.getMakeTeam().getTeamLeader().getUserId(), +// PfMessageType.MTCODE_0200, null, Boolean.FALSE, null); + } + //镀前入库后默认拉满当前工序完成进度 + wp.setFactEndTime(date); + workPlanService.updateById(wp); + } + if (paType.equals(PlateAround.AFTER_PLAN_IN)) { + WorkOrder prWorkOrder = workOrderService.getById(wp.getWoId()); + pdaLoadService.checkPrWorkOrder(prWorkOrder.getCardNo()); + } + }else { + WorkPlan nextWorkPlan = workPlanService.getById(plateAround.getWpId()); + if (wp.getNextWpId() != null && nextWorkPlan.getNextWpId() == null) { + throw new ServiceException("pda.nextWorkPlan.noNext"); + } + //如果是镀前出库,判定是否下序有班组或者供应商,若没有重新自动分派 + if (nextWorkPlan.getNextWpId() != null) { + if (nextWorkPlan.getMakeTeam() == null && nextWorkPlan.getOcId() == null) { + //调用自动分派处理类 + WorkOrderRun wor = workOrderRunService.getById(nextWorkPlan.getWoId()); + // pjAutomaticDispatchService.beforePlatingAutomatic(wp.getPrWorkOrder().getCardNo(), pfUserInfo); + wp = workPlanService.getById(wp.getId()); + //如果当前序是供应商,下序分派至班组(不是检验),或者其他供应商则调用erp关闭订单(待定) + if (nextWorkPlan.getOcId() != null && nextWorkPlan.getNextWpId() != null) { + if (nextWorkPlan.getPpsId()!= null) { + if (StringUtils.isNotBlank(wor.getDeliverKey())) { + //调用erp检验接口 +// prWorkCheckService.checkCompleteErpBackFill(wor.getWoCode(), wor.getDeliverKey(), wp.getWorkQty(), +// 0, pfUserInfo); + } + } + } + //如果下序供应商不为空,则代表存在原有供应商,则根据此供应商获取最后一个该供应商未关闭的运行记录,并绑定 + }else if (wp.getNextWpId() != null &&nextWorkPlan.getOcId() != null) { + WorkOrderRun prWorkOrderRun =workOrderRunService.getById(nextWorkPlan.getOcId()); + if (prWorkOrderRun != null) { + WorkOrder workOrder = workOrderService.getById(prWorkOrderRun.getWoId()); + workOrder.setWorId(prWorkOrderRun.getId()); + workOrderService.updateById(workOrder); + //改回下达状态,让调度收回 + prWorkOrderRun.setRunStatus(WorkOrderRun.RUN_STATUS_ISSUED); + workOrderRunService.updateById(prWorkOrderRun); + } else { + throw new ServiceException("pda.dataFormat.error"); + } + } + } + BeanUtils.copyProperties(plateAround, newPa); + newPa.setPaCode(plateAround.getPaCode()); + newPa.setPaType(paType); + newPa.setCreateUser(user.getUserId()); + newPa.setCreateTime(date); + newPa.setPaCode(this.nextCode(paType, next)); + if (aTure) { + newPa.setMakeTime(date); + newPa.setMakeMan(user.getUserId()); + } + newPa.setWpId(wp.getNextWpId()); + + newPa = this.updatePrPlateAround(newPa); + baseMapper.insert(newPa); + oldPa = baseMapper.selectById(plateAround.getId()); + oldPa.setCurStatus(PlateAround.CUR_STATUS_OK); + } + next++; + } + + private PlateAround updatePrPlateAround(PlateAround plateAround) { + BsTeamSetEntity makeTeam; + // BsOemCustomer oemCustomer; + makeTeam = null; + // oemCustomer = plateAround.getOemCustomer(); + if (makeTeam != null && makeTeam.getId() == null) { + plateAround.setMakeMan(null); + } +// if (oemCustomer != null && oemCustomer.getOcId() == null) { +// plateAround.setOemCustomer(null); +// } + return plateAround; + } + + private String nextCode(Short paType, int next) { + String prefix = null; + if (paType.equals(PlateAround.BEFORE_PLAT_IN)) { + // 镀前入库 + prefix = "FE-"; + } else if (paType.equals(PlateAround.BEFORE_PLAN_OUT)) { + // 镀前出库 + prefix = "FI-"; + } else if (paType.equals(PlateAround.AFTER_PLAN_IN)) { + // 镀后入库 + prefix = "AE-"; + } + // 自增总长度 + int len = 3; + // 自增值 + int num = 0; + // 编码模式 + String codePattern = prefix + new SimpleDateFormat("yyyyMMdd").format(new Date()); + // 当前模式下最大编码 + List plateAroundList= baseMapper.selectList(Wrappers.lambdaQuery(). + likeLeft(PlateAround::getPaCode, codePattern).orderByAsc(PlateAround::getPaCode)); + String maxCode = plateAroundList.size() > 0 ? plateAroundList.get(0).getPaCode() : null; + if (maxCode != null) { + num = Integer.parseInt(maxCode.substring(codePattern.length())); + } + num = num + 1 + next; + // 下个编码 + String code = codePattern + + prefix(String.valueOf(num), "0", len); + return code; + } + public static final String prefix(String StringToFix, String fixChar, int targetLen) { + int len = StringToFix.length(); + + for(int i = 0; i < targetLen - len; i += fixChar.length()) { + StringToFix = fixChar + StringToFix; + } + + return StringToFix; + } }