diff --git a/src/main/java/com/gaotao/modules/schedule/controller/ScheduleController.java b/src/main/java/com/gaotao/modules/schedule/controller/ScheduleController.java index 18299ab..99a4752 100644 --- a/src/main/java/com/gaotao/modules/schedule/controller/ScheduleController.java +++ b/src/main/java/com/gaotao/modules/schedule/controller/ScheduleController.java @@ -243,7 +243,7 @@ public class ScheduleController extends AbstractController { } /** - * 更新派工单MRB信息 + * 保存MRB异常单明细(工作台列表/代办审核单条) * @param inData * @return com.gaotao.common.utils.R **/ @@ -256,7 +256,7 @@ public class ScheduleController extends AbstractController { } /** - * 查询派工单MRB信息 + * 查询MRB异常单明细 * @param inData * @return com.gaotao.common.utils.R **/ diff --git a/src/main/java/com/gaotao/modules/schedule/entity/ScheduleMrbExceptionDetailEntity.java b/src/main/java/com/gaotao/modules/schedule/entity/ScheduleMrbExceptionDetailEntity.java new file mode 100644 index 0000000..aaaedc0 --- /dev/null +++ b/src/main/java/com/gaotao/modules/schedule/entity/ScheduleMrbExceptionDetailEntity.java @@ -0,0 +1,81 @@ +package com.gaotao.modules.schedule.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * MRB异常单明细 + */ +@Data +@TableName("schedule_mrb_exception_detail") +public class ScheduleMrbExceptionDetailEntity implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 自增ID + */ + private Long id; + + /** + * 工厂 + */ + private String site; + + /** + * 工单号 + */ + private String orderNo; + + /** + * 派工单号 + */ + private String seqNo; + + /** + * 待办单号(过站采集场景为空字符串) + */ + private String todoInfoCode; + + /** + * 卷号 + */ + private String rollNo; + + /** + * MRB异常单号 + */ + private String mrbNo; + + /** + * 制程异常单号 + */ + private String processExceptionNo; + + /** + * 备注 + */ + private String remark; + + /** + * 创建时间 + */ + private Date createdTime; + + /** + * 创建人 + */ + private String createdBy; + + /** + * 更新时间 + */ + private Date updateTime; + + /** + * 更新人 + */ + private String updateBy; +} diff --git a/src/main/java/com/gaotao/modules/schedule/mapper/ScheduleMapper.java b/src/main/java/com/gaotao/modules/schedule/mapper/ScheduleMapper.java index 7063aa0..617789c 100644 --- a/src/main/java/com/gaotao/modules/schedule/mapper/ScheduleMapper.java +++ b/src/main/java/com/gaotao/modules/schedule/mapper/ScheduleMapper.java @@ -129,19 +129,6 @@ public interface ScheduleMapper { **/ void updateOperatorTime(Map inData); - /** - * 更新派工单MRB信息 - * @param inData - */ - void updateScheduleMrbInfo(Map inData); - - /** - * 查询派工单MRB信息 - * @param inData - * @return Map - */ - Map getScheduleMrbInfo(Map inData); - /** * 只更新操作员上岗时间 * @param inData diff --git a/src/main/java/com/gaotao/modules/schedule/mapper/ScheduleMrbExceptionDetailMapper.java b/src/main/java/com/gaotao/modules/schedule/mapper/ScheduleMrbExceptionDetailMapper.java new file mode 100644 index 0000000..bb3fc43 --- /dev/null +++ b/src/main/java/com/gaotao/modules/schedule/mapper/ScheduleMrbExceptionDetailMapper.java @@ -0,0 +1,32 @@ +package com.gaotao.modules.schedule.mapper; + +import com.gaotao.modules.schedule.entity.ScheduleMrbExceptionDetailEntity; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface ScheduleMrbExceptionDetailMapper { + + int deleteByLinkKeys(@Param("site") String site, + @Param("orderNo") String orderNo, + @Param("seqNo") String seqNo, + @Param("todoInfoCode") String todoInfoCode); + + int deleteByOrderSeq(@Param("site") String site, + @Param("orderNo") String orderNo, + @Param("seqNo") String seqNo); + + int batchInsert(@Param("list") List list); + + List> getDetailList(@Param("site") String site, + @Param("orderNo") String orderNo, + @Param("seqNo") String seqNo, + @Param("todoInfoCode") String todoInfoCode); + + List> getDetailListByOrderSeq(@Param("site") String site, + @Param("orderNo") String orderNo, + @Param("seqNo") String seqNo); +} diff --git a/src/main/java/com/gaotao/modules/schedule/service/ScheduleService.java b/src/main/java/com/gaotao/modules/schedule/service/ScheduleService.java index 53e0ad6..a7b8758 100644 --- a/src/main/java/com/gaotao/modules/schedule/service/ScheduleService.java +++ b/src/main/java/com/gaotao/modules/schedule/service/ScheduleService.java @@ -142,13 +142,13 @@ public interface ScheduleService { void batchUpdateOperatorTime(Map inData); /** - * 更新派工单MRB信息 - * @param inData + * 保存MRB异常单明细(工作台列表/代办审核单条) + * @param inData 请求参数(site/orderNo/seqNo/infoCode/detailList) **/ void updateScheduleMrbInfo(Map inData); /** - * 查询派工单MRB信息 + * 查询MRB异常单明细 * @param inData * @return Map **/ diff --git a/src/main/java/com/gaotao/modules/schedule/service/impl/ScheduleServiceImpl.java b/src/main/java/com/gaotao/modules/schedule/service/impl/ScheduleServiceImpl.java index d315034..b8dc1cd 100644 --- a/src/main/java/com/gaotao/modules/schedule/service/impl/ScheduleServiceImpl.java +++ b/src/main/java/com/gaotao/modules/schedule/service/impl/ScheduleServiceImpl.java @@ -15,10 +15,12 @@ import com.gaotao.modules.schedule.data.dto.ScheduleDateShifDto; import com.gaotao.modules.schedule.data.dto.SfdcNewsfdcDto; import com.gaotao.modules.schedule.data.dto.ShopOrderRollDto; import com.gaotao.modules.schedule.data.dto.WorkbenchPostinspection; +import com.gaotao.modules.schedule.entity.ScheduleMrbExceptionDetailEntity; import com.gaotao.modules.schedule.entity.ProductionReportData; import com.gaotao.modules.schedule.entity.ScheduleTodoMessageEntity; import com.gaotao.modules.schedule.entity.ShiftChangeProductionReportEntity; import com.gaotao.modules.schedule.mapper.ProcedureMapper; +import com.gaotao.modules.schedule.mapper.ScheduleMrbExceptionDetailMapper; import com.gaotao.modules.schedule.mapper.ScheduleMapper; import com.gaotao.modules.schedule.mapper.ScheduleTodoMessageMapper; import com.gaotao.modules.schedule.mapper.ShiftChangeProductionReportMapper; @@ -86,6 +88,8 @@ public class ScheduleServiceImpl implements ScheduleService { @Autowired private ScheduleTodoMessageMapper scheduleTodoMessageMapper; @Autowired + private ScheduleMrbExceptionDetailMapper scheduleMrbExceptionDetailMapper; + @Autowired private TransNoControlMapper transNoControlMapper; @Autowired private SysUserRoleService sysUserRoleService; @@ -250,12 +254,137 @@ public class ScheduleServiceImpl implements ScheduleService { @Override @Transactional(rollbackFor = Exception.class) public void updateScheduleMrbInfo(Map inData) { - scheduleMapper.updateScheduleMrbInfo(inData); + String site = trimToEmpty(inData == null ? null : inData.get("site")); + String orderNo = trimToEmpty(inData == null ? null : inData.get("orderNo")); + String seqNo = trimToEmpty(inData == null ? null : inData.get("seqNo")); + if (!StringUtils.hasText(site) || !StringUtils.hasText(orderNo) || !StringUtils.hasText(seqNo)) { + throw new XJException("MRB异常单参数不完整"); + } + + String todoInfoCode = normalizeTodoInfoCode(inData == null ? null : inData.get("infoCode")); + boolean todoAuditContext = StringUtils.hasText(todoInfoCode); + List> detailRows = extractMrbDetailRows(inData); + if (CollectionUtils.isEmpty(detailRows)) { + if (todoAuditContext) { + throw new XJException("请至少维护一条MRB异常单信息"); + } + scheduleMrbExceptionDetailMapper.deleteByOrderSeq(site, orderNo, seqNo); + return; + } + if (todoAuditContext && detailRows.size() > 1) { + throw new XJException("待办审核仅允许录入一条MRB异常单信息"); + } + + List saveList = new ArrayList<>(); + String createdBy = resolveTodoOperator(inData); + for (int i = 0; i < detailRows.size(); i++) { + Map row = detailRows.get(i); + String rowTag = "第" + (i + 1) + "行"; + String rollNo = truncate(trimToEmpty(row.get("rollNo")), 100); + String mrbNo = truncate(trimToEmpty(row.get("mrb")), 100); + String processExceptionNo = truncate(trimToEmpty(row.get("mrbInspectionReport")), 100); + if (!StringUtils.hasText(processExceptionNo)) { + processExceptionNo = truncate(trimToEmpty(row.get("processExceptionNo")), 100); + } + if (!StringUtils.hasText(rollNo)) { + throw new XJException(rowTag + "卷号不能为空"); + } + if (!StringUtils.hasText(mrbNo)) { + throw new XJException(rowTag + "MRB不能为空"); + } + if (!StringUtils.hasText(processExceptionNo)) { + throw new XJException(rowTag + "制程异常单不能为空"); + } + + ScheduleMrbExceptionDetailEntity entity = new ScheduleMrbExceptionDetailEntity(); + entity.setSite(site); + entity.setOrderNo(orderNo); + entity.setSeqNo(seqNo); + String rowInfoCode = todoAuditContext ? todoInfoCode : normalizeTodoInfoCode(row.get("infoCode")); + entity.setTodoInfoCode(rowInfoCode); + entity.setRollNo(rollNo); + entity.setMrbNo(mrbNo); + entity.setProcessExceptionNo(processExceptionNo); + String remark = truncate(trimToEmpty(row.get("mrbRemark")), 500); + entity.setRemark(StringUtils.hasText(remark) ? remark : null); + entity.setCreatedBy(createdBy); + entity.setUpdateBy(createdBy); + saveList.add(entity); + } + + if (todoAuditContext) { + scheduleMrbExceptionDetailMapper.deleteByLinkKeys(site, orderNo, seqNo, todoInfoCode); + } else { + scheduleMrbExceptionDetailMapper.deleteByOrderSeq(site, orderNo, seqNo); + } + scheduleMrbExceptionDetailMapper.batchInsert(saveList); } @Override public Map getScheduleMrbInfo(Map inData) { - return scheduleMapper.getScheduleMrbInfo(inData); + String site = trimToEmpty(inData == null ? null : inData.get("site")); + String orderNo = trimToEmpty(inData == null ? null : inData.get("orderNo")); + String seqNo = trimToEmpty(inData == null ? null : inData.get("seqNo")); + if (!StringUtils.hasText(site) || !StringUtils.hasText(orderNo) || !StringUtils.hasText(seqNo)) { + return new HashMap<>(); + } + + String todoInfoCode = normalizeTodoInfoCode(inData == null ? null : inData.get("infoCode")); + List> detailList; + if (StringUtils.hasText(todoInfoCode)) { + detailList = scheduleMrbExceptionDetailMapper.getDetailList(site, orderNo, seqNo, todoInfoCode); + } else { + detailList = scheduleMrbExceptionDetailMapper.getDetailListByOrderSeq(site, orderNo, seqNo); + } + Map result = new HashMap<>(); + result.put("detailList", detailList); + if (!CollectionUtils.isEmpty(detailList)) { + Map first = detailList.get(0); + result.put("mrb", first.get("mrb")); + result.put("mrbInspectionReport", first.get("mrbInspectionReport")); + result.put("mrbRemark", first.get("mrbRemark")); + } + return result; + } + + private String normalizeTodoInfoCode(Object value) { + String infoCode = trimToEmpty(value); + return StringUtils.hasText(infoCode) ? truncate(infoCode, 50) : ""; + } + + @SuppressWarnings("unchecked") + private List> extractMrbDetailRows(Map inData) { + List> result = new ArrayList<>(); + if (inData == null || inData.isEmpty()) { + return result; + } + + Object detailListObj = inData.get("detailList"); + if (detailListObj instanceof List) { + List detailList = (List) detailListObj; + for (Object item : detailList) { + if (item instanceof Map) { + result.add((Map) item); + } + } + } + if (!CollectionUtils.isEmpty(result)) { + return result; + } + + // 兼容旧请求体(单条字段),转换为一行明细。 + String mrb = trimToEmpty(inData.get("mrb")); + String mrbInspectionReport = trimToEmpty(inData.get("mrbInspectionReport")); + String mrbRemark = trimToEmpty(inData.get("mrbRemark")); + if (StringUtils.hasText(mrb) || StringUtils.hasText(mrbInspectionReport) || StringUtils.hasText(mrbRemark)) { + Map oneRow = new HashMap<>(); + oneRow.put("rollNo", trimToEmpty(inData.get("rollNo"))); + oneRow.put("mrb", mrb); + oneRow.put("mrbInspectionReport", mrbInspectionReport); + oneRow.put("mrbRemark", mrbRemark); + result.add(oneRow); + } + return result; } @Override diff --git a/src/main/resources/mapper/schedule/ScheduleMapper.xml b/src/main/resources/mapper/schedule/ScheduleMapper.xml index 0b5cf7c..935a3f4 100644 --- a/src/main/resources/mapper/schedule/ScheduleMapper.xml +++ b/src/main/resources/mapper/schedule/ScheduleMapper.xml @@ -554,34 +554,6 @@ - - - UPDATE SOScheduledRouting - SET - mrb = #{mrb}, - mrb_inspection_report = #{mrbInspectionReport}, - mrb_remark = #{mrbRemark} - WHERE - Site = #{site} - AND OrderNo = #{orderNo} - AND ItemNo = #{itemNo} - AND SeqNo = #{seqNo} - - - - - UPDATE sfdc_operator_list diff --git a/src/main/resources/mapper/schedule/ScheduleMrbExceptionDetailMapper.xml b/src/main/resources/mapper/schedule/ScheduleMrbExceptionDetailMapper.xml new file mode 100644 index 0000000..01f25d1 --- /dev/null +++ b/src/main/resources/mapper/schedule/ScheduleMrbExceptionDetailMapper.xml @@ -0,0 +1,99 @@ + + + + + + DELETE FROM schedule_mrb_exception_detail + WHERE site = #{site} + AND order_no = #{orderNo} + AND seq_no = #{seqNo} + AND todo_info_code = #{todoInfoCode} + + + + DELETE FROM schedule_mrb_exception_detail + WHERE site = #{site} + AND order_no = #{orderNo} + AND seq_no = #{seqNo} + + + + INSERT INTO schedule_mrb_exception_detail ( + site, + order_no, + seq_no, + todo_info_code, + roll_no, + mrb_no, + process_exception_no, + remark, + created_time, + created_by, + update_time, + update_by + ) VALUES + + ( + #{item.site}, + #{item.orderNo}, + #{item.seqNo}, + #{item.todoInfoCode}, + #{item.rollNo}, + #{item.mrbNo}, + #{item.processExceptionNo}, + #{item.remark,jdbcType=VARCHAR}, + GETDATE(), + #{item.createdBy,jdbcType=VARCHAR}, + GETDATE(), + #{item.updateBy,jdbcType=VARCHAR} + ) + + + + + + +