diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/device/pojo/entity/MeasurementRecordsEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/device/pojo/entity/MeasurementRecordsEntity.java index 8e76c5b7..e155fddb 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/device/pojo/entity/MeasurementRecordsEntity.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/device/pojo/entity/MeasurementRecordsEntity.java @@ -1,15 +1,13 @@ package org.springblade.desk.device.pojo.entity; -import jakarta.validation.constraints.NotNull; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import io.swagger.v3.oas.annotations.media.Schema; import com.baomidou.mybatisplus.annotation.TableName; -import java.math.BigDecimal; import java.util.Date; import lombok.EqualsAndHashCode; import org.springblade.core.mp.base.BaseEntity; -import org.springblade.core.tenant.mp.TenantEntity; import java.io.Serial; @@ -57,7 +55,7 @@ public class MeasurementRecordsEntity extends BaseEntity { * 编号(测量设备编码) */ @Schema(description = "编号(测量设备编码)") - @NotNull(message = "编号不能为空") +// @NotNull(message = "编号不能为空") private String mcCode; /** * 使用单位(试用部门) @@ -83,6 +81,7 @@ public class MeasurementRecordsEntity extends BaseEntity { * 启用日期 */ @Schema(description = "启用日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private Date enableDate; /** * 检定日期 @@ -103,11 +102,13 @@ public class MeasurementRecordsEntity extends BaseEntity { * 到期日期(有效日期) */ @Schema(description = "到期日期(有效日期)") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private Date dueDate; /** * 报废日期 */ @Schema(description = "报废日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private Date date2; /** * 状态 @@ -118,6 +119,7 @@ public class MeasurementRecordsEntity extends BaseEntity { * 停用日期 */ @Schema(description = "停用日期") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private Date whenBuy; /** * 检定部门 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 116b51ed..34f559bb 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 @@ -29,6 +29,7 @@ import org.springblade.desk.oem.pojo.request.*; import org.springblade.desk.oem.pojo.vo.*; import org.springblade.desk.order.pojo.entity.YieldOrder; import org.springblade.desk.order.service.IYieldOrderService; +import org.springblade.desk.produce.pojo.dto.InBatchesDTO; import org.springblade.desk.produce.pojo.entity.WorkOrder; import org.springblade.desk.produce.pojo.entity.WorkOrderRun; import org.springblade.desk.produce.pojo.vo.WorkOrderVO; @@ -133,6 +134,15 @@ public class OemOrderController extends BladeController { return R.data(WorkOrderWrapper.build().entityVO(newWorkOrder)); } + @PostMapping(value = "/inOemBatches") + @ApiOperationSupport(order = 6) + @Operation(summary = "外协分批", description = "") + public R inOemBatches(@RequestBody InBatchesDTO inBatchesDTO) { + Long userId = AuthUtil.getUserId(); + return workOrderService.inOemBatches(inBatchesDTO.getId(), inBatchesDTO, userId); + } + + /** * 更改外协厂商 */ 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 279eeee6..77455e1a 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 @@ -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.core.tool.api.R; import org.springblade.desk.produce.pojo.dto.*; import org.springblade.desk.produce.pojo.entity.WorkOrder; import org.springblade.desk.produce.pojo.entity.WorkOrderRun; @@ -191,4 +192,6 @@ public interface IWorkOrderService extends BaseService { boolean updatePriority(UpdatePriorityDTO updatePriorityDTO); void dataValidation(Long wpId); + + R inOemBatches(Long oldWoId, InBatchesDTO inBatchesDTO, Long userId); } 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 5894628e..227c0c28 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 @@ -1,6 +1,7 @@ package org.springblade.desk.produce.service.impl; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; @@ -12,6 +13,7 @@ import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.secure.BladeUser; import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.desk.basic.mapper.CraftAbilityMapper; import org.springblade.desk.basic.pojo.entity.RelTeamSetUser; import org.springblade.desk.basic.service.IRelTeamSetUserService; import org.springblade.desk.dashboard.pojo.entity.*; @@ -34,6 +36,7 @@ import org.springblade.desk.quality.pojo.vo.WorkPlanItemVO; 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.CraftAbilityEntity; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; @@ -94,6 +97,10 @@ public class PdaLoadServiceImpl extends BaseServiceImpl wpList, YieldOrder yo) { - /*if (wpList == null || wpList.size() == 0) { + if (wpList == null || wpList.size() == 0) { return; } for (WorkPlan wp : wpList) { // 如果工序是包装,并且工艺能力是包装、加工单位为空 - if ("包装".equals(wp.getProcedureSet().getPpsName()) && (wp.getBsCraftAbility() != null && wp.getBsCraftAbility().getCaName().contains("包装")) - && wp.getMakeTeam() == null && wp.getOemCustomer() == null) { + BsProcessSetEntity processSet = bsProcessSetService.getById(wp.getPpsId()); + CraftAbilityEntity craftAbility = new CraftAbilityEntity(); + if (null != wp.getCaId()) { + craftAbility = craftAbilityMapper.selectById(wp.getCaId()); + } + if ("包装".equals(processSet.getName()) && (wp.getCaId() != null && craftAbility.getCaName().contains("包装")) + && wp.getMakeTeam() == null && wp.getOcId() == null) { // 获取当前工序之前的主工序 - PrWorkPlan prWorkPlan = prWorkPlanService.fontMainProcess(wp.getPrWorkOrder().getWoId()); - if (prWorkPlan != null && prWorkPlan.getWpId() != null) { - if (prWorkPlan.getOemCustomer() != null && prWorkPlan.getOemCustomer().getOcId() != null) { - wp.setOemCustomer(prWorkPlan.getOemCustomer()); + // 或者使用 LambdaQueryWrapper(推荐,类型安全) + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(WorkPlan::getWoId, wp.getWoId()) + .eq(WorkPlan::getCruxProcess, "1") + .orderByDesc(WorkPlan::getOrders); + + WorkPlan prWorkPlan = workPlanMapper.selectOne(lambdaQueryWrapper); + if (prWorkPlan != null && prWorkPlan.getId() != null) { + if (prWorkPlan.getOcId() != null) { + wp.setOcId(prWorkPlan.getOcId()); wp.setOem("1"); // } else { // wp.setMakeTeam(prWorkPlan.getMakeTeam()); } } } - }*/ + } + workPlanMapper.insertOrUpdate(wpList); } private WorkOrder checkWo(String cardNo) { 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 1b32c15c..7e40aa38 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 @@ -226,7 +226,8 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl 0) { //判断工序是否存在外协商,如果存在不进行二次分派 @@ -275,8 +276,8 @@ public class WorkOrderRunServiceImpl extends BaseServiceImpl oldList = workPlanService.list(Wrappers.lambdaQuery(WorkPlan.class).eq(WorkPlan::getWoId, oldWoId)); //保存作业计划 List wpList = this.saveWorkPlan(oldList, newWo, oldWoId); @@ -200,7 +200,13 @@ public class WorkOrderServiceImpl extends BaseServiceImpl oldList = workPlanService.list(Wrappers.lambdaQuery(WorkPlan.class).eq(WorkPlan::getWoId, oldWoId)); + //保存作业计划 + List wpList = this.saveWorkPlan(oldList, newWo, oldWoId); + // 获取旧工单的运行记录,用于复用字段 + WorkOrderRun oldWr = workOrderRunService.getById(oldWo.getWorId()); + + // 产生车间运行记录信息(完整设置所有字段) + WorkOrderRun wr = new WorkOrderRun(); + + // 基础关联信息 + wr.setWoId(newWo.getId()); // 新工单对象 + wr.setWoCode(newWo.getWoCode()); // 新工单编号 + wr.setRunType(WorkOrderRun.RUN_TYPE_1); // 运行类型改为外协 + wr.setOemStatus(WorkOrderRun.OEM_STATUS_TO);//外协状态改为待外协 + // 复用旧运行记录的班组和供应商信息 + wr.setOutTeam(oldWr.getOutTeam()); // 转出班组 + wr.setInTeam(oldWr.getInTeam()); // 转入班组 + wr.setOutCustomer(oldWr.getOutCustomer()); // 转出供应商 + wr.setInCustomer(oldWr.getInCustomer()); // 转入供应商 + + // 备注信息修改 + wr.setMemo("分批(外协)"); // 备注改成分批(外协) + + // 时间和人员信息 + wr.setCreateTime(new Date()); // 创建时间为当前时间 + wr.setCreateUser(userId); // 创建人 + wr.setApprovalMan(oldWr.getApprovalMan()); // 审批人(复用旧记录) + wr.setApprovalTime(oldWr.getApprovalTime()); // 审批时间(复用旧记录) + wr.setApprovalMemo(oldWr.getApprovalMemo()); // 审批意见(复用旧记录) + + // 其他状态字段 + wr.setPrintFlag(oldWr.getPrintFlag()); // 打印标记 + wr.setDeliverKey(oldWr.getDeliverKey()); // 交件单号 + wr.setRunStatus(oldWr.getRunStatus()); // 订单状态 + wr.setSystemData(oldWr.getSystemData()); // 系统数据标识 + wr.setPrintMan(oldWr.getPrintMan()); // 打印人 + wr.setCollaborate(newWo.getCollaborate()); // 是否协作计划(取自新工单) + + // 保存新的运行记录并关联到新工单 + workOrderRunService.save(wr); + newWo.setWorId(wr.getId()); + //保存作业计划 + this.calculationWp(newWo, wpList); + // 转存工序的加工信息 + this.saveProcessMarkRec(oldList, wpList); + // 创建并保存工序运行明细记录 + // 获取旧工单对应的工序运行记录列表 + List oldWprList = workPlanRunService.list(Wrappers.lambdaQuery(WorkPlanRun.class).eq(WorkPlanRun::getWorId, oldWr.getId())); + if (oldWprList != null && !oldWprList.isEmpty()) { + // 创建映射表,方便通过wpId查找对应的旧工序运行记录 + Map oldWprMap = new HashMap<>(); + for (WorkPlanRun oldWpr : oldWprList) { + WorkPlan oldWp = workPlanService.getById(oldWpr.getWpId()); + // 假设"工序顺序_工序集合ID"是唯一标识 + String key = oldWp.getOrders() + "_" + oldWp.getPpsId(); + oldWprMap.put(key, oldWpr); + } + + // 为每个新作业计划创建对应的工序运行记录 + List newWprList = new ArrayList<>(); + for (WorkPlan newWp : wpList) { + String key = newWp.getOrders() + "_" + newWp.getPpsId(); + WorkPlanRun oldWpr = oldWprMap.get(key); + if (oldWpr != null) { + WorkPlanRun newWpr = new WorkPlanRun(); + + // 设置新生成的关联字段 + newWpr.setWorId(wr.getId()); // 关联新生成的工单运行记录 + newWpr.setWpId(newWp.getId()); // 关联新生成的作业计划 + newWpr.setCaId(newWp.getCaId()); // 使用新作业计划的工艺能力 + + // 复用旧记录中的字段 + newWpr.setHandle(oldWpr.getHandle()); // 处理工序标记 + newWpr.setStartTime(oldWpr.getStartTime()); // 计划开始时间 + newWpr.setEndTime(oldWpr.getEndTime()); // 计划结束时间 + + newWprList.add(newWpr); + } + } + if (!newWprList.isEmpty()) { + for (WorkPlanRun wpr : newWprList) { + workPlanRunService.save(wpr); // 调用单条保存方法 + } + } + } + return R.success("操作完成"); + } + private void workPlanEnd(WorkPlan workPlan, Date newDate, Double makeQty) { if (workPlan == null) { return;