From b6063acd4c039da611a442f516f699e003167d8a Mon Sep 17 00:00:00 2001 From: fengyuan_yang <1976974459@qq.com> Date: Tue, 6 Jan 2026 13:09:59 +0800 Subject: [PATCH] =?UTF-8?q?2026-01-06=20=E5=B7=A5=E5=8D=95=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=B1=87=E6=80=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WorkOrderAllocController.java | 112 +++++++ .../shopOrder/dao/WorkOrderAllocMapper.java | 81 +++++ .../entity/UspWorkOrderAllocData.java | 129 ++++++++ .../entity/dto/U8WorkHourRequestDto.java | 105 +++++++ .../entity/dto/U8WorkHourResponseDto.java | 32 ++ .../Impl/WorkOrderAllocServiceImpl.java | 294 ++++++++++++++++++ .../service/WorkOrderAllocService.java | 47 +++ src/main/resources/application-dev.yml | 5 + .../mapper/shopOrder/WorkOrderAllocMapper.xml | 267 ++++++++++++++++ 9 files changed, 1072 insertions(+) create mode 100644 src/main/java/com/gaotao/modules/shopOrder/controller/WorkOrderAllocController.java create mode 100644 src/main/java/com/gaotao/modules/shopOrder/dao/WorkOrderAllocMapper.java create mode 100644 src/main/java/com/gaotao/modules/shopOrder/entity/UspWorkOrderAllocData.java create mode 100644 src/main/java/com/gaotao/modules/shopOrder/entity/dto/U8WorkHourRequestDto.java create mode 100644 src/main/java/com/gaotao/modules/shopOrder/entity/dto/U8WorkHourResponseDto.java create mode 100644 src/main/java/com/gaotao/modules/shopOrder/service/Impl/WorkOrderAllocServiceImpl.java create mode 100644 src/main/java/com/gaotao/modules/shopOrder/service/WorkOrderAllocService.java create mode 100644 src/main/resources/mapper/shopOrder/WorkOrderAllocMapper.xml diff --git a/src/main/java/com/gaotao/modules/shopOrder/controller/WorkOrderAllocController.java b/src/main/java/com/gaotao/modules/shopOrder/controller/WorkOrderAllocController.java new file mode 100644 index 0000000..4281bf2 --- /dev/null +++ b/src/main/java/com/gaotao/modules/shopOrder/controller/WorkOrderAllocController.java @@ -0,0 +1,112 @@ +package com.gaotao.modules.shopOrder.controller; + +import com.gaotao.common.utils.PageUtils; +import com.gaotao.common.utils.R; +import com.gaotao.modules.pda.utils.ResponseData; +import com.gaotao.modules.shopOrder.entity.SearchShopOrder; +import com.gaotao.modules.shopOrder.entity.UspWorkOrderAllocData; +import com.gaotao.modules.shopOrder.service.WorkOrderAllocService; +import com.gaotao.modules.sys.controller.AbstractController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; + +import java.util.List; + +/** + * 工单数据汇总控制器 + * @author system + * @date 2026/01/05 + */ +@RestController +@RequestMapping("/shopOrder/workOrderAlloc") +public class WorkOrderAllocController extends AbstractController { + + @Autowired + private WorkOrderAllocService workOrderAllocService; + + /** + * 分页查询生产订单(工单数据汇总专用) + */ + @PostMapping("/searchShopOrder") + public R searchShopOrder(@RequestBody SearchShopOrder query) { + // 设置当前用户 + if (query.getUser() == null || query.getUser().isEmpty()) { + query.setUser(getUser().getUsername()); + } + PageUtils page = workOrderAllocService.searchShopOrderForAlloc(query); + return R.ok().put("page", page); + } + + /** + * 查询工单汇总数据(根据allocType) + */ + @PostMapping("/list") + public R list(@RequestBody UspWorkOrderAllocData params) { + List list = workOrderAllocService.selectByAllocType(params); + + // 手动分页处理 + int totalCount = list.size(); + int pageSize = params.getLimit() > 0 ? params.getLimit() : 20; + int offset = params.getPage(); + int currPage = offset / pageSize + 1; + + int fromIndex = offset; + int toIndex = Math.min(fromIndex + pageSize, totalCount); + + List pageList; + if (fromIndex < totalCount) { + pageList = list.subList(fromIndex, toIndex); + } else { + pageList = new ArrayList<>(); + } + + PageUtils page = new PageUtils(pageList, totalCount, pageSize, currPage); + return R.ok().put("page", page); + } + + /** + * 执行工单数据汇总(调用存储过程) + */ + @PostMapping("/executeAlloc") + public R executeAlloc(@RequestBody WorkOrderAllocRequest request) { + String currentUser = getUser().getUsername(); + + ResponseData response = workOrderAllocService.executeWorkOrderAlloc( + request.getQuery(), + request.getOrderNoList(), + currentUser, + request.isAllocAll() + ); + + if (response.isSuccess()) { + return R.ok(response.getMsg()); + } else { + return R.error(response.getMsg()); + } + } + + /** + * 执行工单数据回传(调用U8接口) + */ + @PostMapping("/executeSync") + public R executeSync(@RequestBody UspWorkOrderAllocData params) { + ResponseData response = workOrderAllocService.executeWorkOrderSync(params); + if (response.isSuccess()) { + return R.ok(response.getMsg()); + } else { + return R.error(response.getMsg()); + } + } + + /** + * 工单数据汇总请求DTO + */ + @lombok.Data + public static class WorkOrderAllocRequest { + private SearchShopOrder query; + private List orderNoList; + private boolean allocAll; + } +} diff --git a/src/main/java/com/gaotao/modules/shopOrder/dao/WorkOrderAllocMapper.java b/src/main/java/com/gaotao/modules/shopOrder/dao/WorkOrderAllocMapper.java new file mode 100644 index 0000000..798cb63 --- /dev/null +++ b/src/main/java/com/gaotao/modules/shopOrder/dao/WorkOrderAllocMapper.java @@ -0,0 +1,81 @@ +package com.gaotao.modules.shopOrder.dao; + +import com.gaotao.modules.shopOrder.entity.SearchShopOrder; +import com.gaotao.modules.shopOrder.entity.UspWorkOrderAllocData; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.Date; +import java.util.List; + +/** + * 工单数据汇总Mapper + * @author system + * @date 2026/01/05 + */ +@Mapper +@Repository +public interface WorkOrderAllocMapper { + + /** + * 分页查询生产订单(工单数据汇总专用) + * @param query 查询条件 + * @return 生产订单列表 + */ + List searchShopOrderForAlloc(@Param("query") SearchShopOrder query); + + /** + * 根据allocType查询工单汇总数据 + * @param data 查询条件 + * @return 汇总数据列表 + */ + List selectByAllocType(UspWorkOrderAllocData data); + + /** + * 查询未传输的数据(产量未传输或工时未传输) + * @param data 查询条件 + * @return 未传输数据列表 + */ + List selectUnSyncedData(UspWorkOrderAllocData data); + + /** + * 更新SFDC表的synced_code和synced_flag + * @param site 工厂编码 + * @param orderNo 订单号 + * @param batchNo 批次号 + * @param syncedCode 同步单号 + */ + void updateSfdcSyncedCode(@Param("site") String site, + @Param("orderNo") String orderNo, + @Param("batchNo") String batchNo, + @Param("syncedCode") String syncedCode); + + /** + * 更新UspWorkOrderAlloc的同步异常信息 + * @param site 工厂编码 + * @param orderNo 订单号 + * @param rowNo 行号 + * @param syncedDate 同步时间 + * @param syncedMes 异常信息 + */ + void updateAllocSyncedError(@Param("site") String site, + @Param("orderNo") String orderNo, + @Param("rowNo") String rowNo, + @Param("syncedDate") Date syncedDate, + @Param("syncedMes") String syncedMes); + + /** + * 插入临时表(单条) + * @param site 工厂编码 + * @param orderNo 订单号 + */ + void insertAllocTemp(@Param("site") String site, + @Param("orderNo") String orderNo); + + /** + * 批量插入临时表(根据查询条件) + * @param query 查询条件 + */ + void insertAllocTempByQuery(@Param("query") SearchShopOrder query); +} diff --git a/src/main/java/com/gaotao/modules/shopOrder/entity/UspWorkOrderAllocData.java b/src/main/java/com/gaotao/modules/shopOrder/entity/UspWorkOrderAllocData.java new file mode 100644 index 0000000..f9f1c85 --- /dev/null +++ b/src/main/java/com/gaotao/modules/shopOrder/entity/UspWorkOrderAllocData.java @@ -0,0 +1,129 @@ +package com.gaotao.modules.shopOrder.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.gaotao.common.utils.QueryPage; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * 工单数据汇总实体类 + * @author system + * @date 2026/01/05 + */ +@Data +public class UspWorkOrderAllocData extends QueryPage { + + /** + * 工厂编码 + */ + private String site; + + /** + * 生产订单号 + */ + private String orderNo; + + /** + * ERP订单号 + */ + private String erpOrderNo; + + /** + * ERP订单行号 + */ + private String erpOrderLineNo; + + /** + * 行号 + */ + private String rowNo; + + /** + * 工序号 + */ + private String itemNo; + + /** + * 操作员 + */ + private String operator; + + /** + * 报告数量 + */ + private Double allocReportQty; + + /** + * 合格数量 + */ + private Double allocApproveQty; + + /** + * 不良数量 + */ + private Double allocScrapQty; + + /** + * 数据类型(产量未传输、产量已传输、工时未传输、工时已传输) + */ + private String allocType; + + /** + * 汇总操作人 + */ + private String allocBy; + + /** + * 汇总时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date allocDate; + + /** + * 调机时长 + */ + private BigDecimal allocSetupTime; + + /** + * 制造时长 + */ + private BigDecimal allocManfTime; + + /** + * 回传时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date syncedDate; + + /** + * 异常原因 + */ + private String syncedMes; + + /** + * 批次号 + */ + private String batchNo; + + /** + * 当前登录人 + */ + private String currentUser; + + /** + * 查询的allocType列表(用于批量查询) + */ + private List allocTypeList; + + /** + * 批量勾选的工单号列表 + */ + private List orderNoList; +} + diff --git a/src/main/java/com/gaotao/modules/shopOrder/entity/dto/U8WorkHourRequestDto.java b/src/main/java/com/gaotao/modules/shopOrder/entity/dto/U8WorkHourRequestDto.java new file mode 100644 index 0000000..5e9fbbe --- /dev/null +++ b/src/main/java/com/gaotao/modules/shopOrder/entity/dto/U8WorkHourRequestDto.java @@ -0,0 +1,105 @@ +package com.gaotao.modules.shopOrder.entity.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * U8生产报工档案接口请求DTO + * @author system + * @date 2026/01/05 + */ +@Data +public class U8WorkHourRequestDto { + + /** + * 生产订单号 + */ + @JsonProperty("Mocode") + private String mocode; + + /** + * 订单行号 + */ + @JsonProperty("IrowNo") + private String irowNo; + + /** + * 汇总日期 + */ + @JsonProperty("DDate") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date dDate; + + /** + * 明细列表 + */ + @JsonProperty("DetailList") + private List detailList; + + /** + * 明细项 + */ + @Data + public static class DetailItem { + + /** + * MES行号 + */ + @JsonProperty("MESIrowNo") + private String mesIrowNo; + + /** + * 工序号 + */ + @JsonProperty("SortSeq") + private String sortSeq; + + /** + * 设备编码 + */ + @JsonProperty("EQId") + private String eqId; + + /** + * 班次编码 + */ + @JsonProperty("DutyClassCode") + private String dutyClassCode; + + /** + * 员工编码 + */ + @JsonProperty("EmployCode") + private String employCode; + + /** + * 合格数量 + */ + @JsonProperty("QualifiedQty") + private Double qualifiedQty; + + /** + * 不合格数量 + */ + @JsonProperty("RefusedQty") + private String refusedQty; + + /** + * 报废数量 + */ + @JsonProperty("ScrapQty") + private Double scrapQty; + + /** + * 工时(调机时长+制造时长) + */ + @JsonProperty("WorkHr") + private BigDecimal workHr; + } +} + diff --git a/src/main/java/com/gaotao/modules/shopOrder/entity/dto/U8WorkHourResponseDto.java b/src/main/java/com/gaotao/modules/shopOrder/entity/dto/U8WorkHourResponseDto.java new file mode 100644 index 0000000..112d36a --- /dev/null +++ b/src/main/java/com/gaotao/modules/shopOrder/entity/dto/U8WorkHourResponseDto.java @@ -0,0 +1,32 @@ +package com.gaotao.modules.shopOrder.entity.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +/** + * U8生产报工档案接口响应DTO + * @author system + * @date 2026/01/05 + */ +@Data +public class U8WorkHourResponseDto { + + /** + * 标记:failure:错误,success 成功 + */ + @JsonProperty("Flag") + private String flag; + + /** + * success 时返回U8单号 + */ + @JsonProperty("U8CCode") + private String u8CCode; + + /** + * 错误消息,成功则不返回 + */ + @JsonProperty("ErrMsg") + private String errMsg; +} + diff --git a/src/main/java/com/gaotao/modules/shopOrder/service/Impl/WorkOrderAllocServiceImpl.java b/src/main/java/com/gaotao/modules/shopOrder/service/Impl/WorkOrderAllocServiceImpl.java new file mode 100644 index 0000000..dc0a5bd --- /dev/null +++ b/src/main/java/com/gaotao/modules/shopOrder/service/Impl/WorkOrderAllocServiceImpl.java @@ -0,0 +1,294 @@ +package com.gaotao.modules.shopOrder.service.Impl; + +import com.alibaba.fastjson.JSON; +import com.gaotao.common.utils.PageUtils; +import com.gaotao.modules.pda.utils.ResponseData; +import com.gaotao.modules.pms.util.HttpClientUtil; +import com.gaotao.modules.report.dao.ProcedureDao; +import com.gaotao.modules.shopOrder.dao.WorkOrderAllocMapper; +import com.gaotao.modules.shopOrder.entity.SearchShopOrder; +import com.gaotao.modules.shopOrder.entity.UspWorkOrderAllocData; +import com.gaotao.modules.shopOrder.entity.dto.U8WorkHourRequestDto; +import com.gaotao.modules.shopOrder.entity.dto.U8WorkHourResponseDto; +import com.gaotao.modules.shopOrder.service.WorkOrderAllocService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 工单数据汇总服务实现类 + * @author system + * @date 2026/01/05 + */ +@Slf4j +@Service +public class WorkOrderAllocServiceImpl implements WorkOrderAllocService { + + @Autowired + private WorkOrderAllocMapper workOrderAllocMapper; + + @Autowired + private ProcedureDao procedureDao; + + /** + * U8接口地址,从配置文件读取 + */ + @Value("${u8.workhour.add.url:}") + private String u8WorkHourAddUrl; + + @Override + public PageUtils searchShopOrderForAlloc(SearchShopOrder query) { + // 查询数据 + List list = workOrderAllocMapper.searchShopOrderForAlloc(query); + + // 构建分页结果 + int total = list.size(); + int pageSize = query.getLimit() > 0 ? query.getLimit() : 20; + int offset = query.getPage(); + int currPage = offset / pageSize + 1; + + // 手动分页处理 + int fromIndex = offset; + int toIndex = Math.min(fromIndex + pageSize, total); + + List pageList; + if (fromIndex < total) { + pageList = list.subList(fromIndex, toIndex); + } else { + pageList = new ArrayList<>(); + } + + return new PageUtils(pageList, total, pageSize, currPage); + } + + @Override + public List selectByAllocType(UspWorkOrderAllocData data) { + return workOrderAllocMapper.selectByAllocType(data); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public ResponseData executeWorkOrderAlloc(SearchShopOrder query, List orderNoList, String currentUser, boolean allocAll) { + ResponseData responseData = new ResponseData(); + try { + log.info("开始执行工单数据汇总,操作人:{},汇总所有:{}", currentUser, allocAll); + + // 1. 插入临时表(存储过程会先清空临时表) + if (allocAll) { + // 汇总所有:根据查询条件插入临时表 + workOrderAllocMapper.insertAllocTempByQuery(query); + log.info("已根据查询条件插入临时表"); + } else { + // 汇总选中的:逐条插入临时表 + String site = query.getSite() != null ? query.getSite() : ""; + for (String orderNo : orderNoList) { + workOrderAllocMapper.insertAllocTemp(site, orderNo); + } + log.info("已插入{}条选中的工单到临时表", orderNoList.size()); + } + + // 2. 调用存储过程,orderNo传空字符串 + List params = new ArrayList<>(); + params.add(query.getSite() != null ? query.getSite() : ""); + params.add(""); // orderNo传空字符串 + params.add(currentUser); + + List> resultList = procedureDao.getProcedureData("UspInsertWorkOrderAlloc", params); + + // 3. 判断执行结果 + String resultMsg = "工单数据汇总完成"; + if (resultList != null && !resultList.isEmpty()) { + String code = String.valueOf(resultList.get(0).get("resultCode")); + if ("400".equalsIgnoreCase(code)) { + String msg = String.valueOf(resultList.get(0).get("resultMsg")); + responseData.setCode("500"); + responseData.setSuccess(false); + responseData.setMsg("工单数据汇总失败: " + msg); + return responseData; + } + // 获取返回消息 + if (resultList.get(0).get("resultMsg") != null) { + resultMsg = String.valueOf(resultList.get(0).get("resultMsg")); + } + } + + responseData.setCode("200"); + responseData.setSuccess(true); + responseData.setMsg(resultMsg); + log.info("工单数据汇总成功:{}", resultMsg); + + } catch (Exception e) { + log.error("执行工单数据汇总时发生异常", e); + responseData.setCode("500"); + responseData.setSuccess(false); + responseData.setMsg("执行工单数据汇总时发生异常: " + e.getMessage()); + } + return responseData; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public ResponseData executeWorkOrderSync(UspWorkOrderAllocData data) { + ResponseData responseData = new ResponseData(); + try { + log.info("开始执行工单数据回传"); + + // 1. 查询未传输的数据 + List unSyncedList = workOrderAllocMapper.selectUnSyncedData(data); + + if (unSyncedList == null || unSyncedList.isEmpty()) { + responseData.setCode("200"); + responseData.setSuccess(true); + responseData.setMsg("没有需要回传的数据"); + return responseData; + } + + log.info("查询到{}条待回传数据", unSyncedList.size()); + + int successCount = 0; + int failCount = 0; + StringBuilder errorMessages = new StringBuilder(); + + // 2. 按照erp_orderNo和erp_orderLineNo分组 + Map> groupedData = unSyncedList.stream() + .collect(Collectors.groupingBy(item -> + item.getErpOrderNo() + "_" + item.getErpOrderLineNo() + "_" + + (item.getAllocDate() != null ? item.getAllocDate().getTime() : ""))); + + // 3. 逐组调用U8接口 + for (Map.Entry> entry : groupedData.entrySet()) { + List groupItems = entry.getValue(); + if (groupItems.isEmpty()) continue; + + UspWorkOrderAllocData firstItem = groupItems.get(0); + + try { + // 构建U8请求参数 + U8WorkHourRequestDto requestDto = new U8WorkHourRequestDto(); + requestDto.setMocode(firstItem.getErpOrderNo()); + requestDto.setIrowNo(firstItem.getErpOrderLineNo()); + requestDto.setDDate(firstItem.getAllocDate()); + + List detailList = new ArrayList<>(); + for (UspWorkOrderAllocData item : groupItems) { + U8WorkHourRequestDto.DetailItem detailItem = new U8WorkHourRequestDto.DetailItem(); + detailItem.setMesIrowNo(item.getRowNo()); + detailItem.setSortSeq(item.getItemNo()); + detailItem.setEqId(""); + detailItem.setDutyClassCode(""); + detailItem.setEmployCode(item.getOperator()); + detailItem.setQualifiedQty(item.getAllocApproveQty()); + detailItem.setRefusedQty(""); + detailItem.setScrapQty(item.getAllocScrapQty()); + + // 计算工时:调机时长 + 制造时长 + BigDecimal workHr = BigDecimal.ZERO; + if (item.getAllocSetupTime() != null) { + workHr = workHr.add(item.getAllocSetupTime()); + } + if (item.getAllocManfTime() != null) { + workHr = workHr.add(item.getAllocManfTime()); + } + detailItem.setWorkHr(workHr); + + detailList.add(detailItem); + } + requestDto.setDetailList(detailList); + + // 调用U8接口 + log.info("调用U8接口,请求参数: {}", JSON.toJSONString(requestDto)); + com.gaotao.modules.pms.util.ResponseData httpResponse = + HttpClientUtil.doPostByRaw(u8WorkHourAddUrl, requestDto); + + if (httpResponse.isSuccess()) { + // 解析响应 + U8WorkHourResponseDto u8Response = JSON.parseObject(httpResponse.getMsg(), U8WorkHourResponseDto.class); + + if ("success".equalsIgnoreCase(u8Response.getFlag())) { + // 接口调用成功,更新SFDC表 + String u8CCode = u8Response.getU8CCode(); + for (UspWorkOrderAllocData item : groupItems) { + workOrderAllocMapper.updateSfdcSyncedCode( + item.getSite(), + item.getOrderNo(), + item.getBatchNo(), + u8CCode); + } + successCount += groupItems.size(); + log.info("U8接口调用成功,返回单号: {}", u8CCode); + } else { + // 接口返回错误 + String errMsg = u8Response.getErrMsg(); + for (UspWorkOrderAllocData item : groupItems) { + workOrderAllocMapper.updateAllocSyncedError( + item.getSite(), + item.getOrderNo(), + item.getRowNo(), + new Date(), + errMsg); + } + failCount += groupItems.size(); + errorMessages.append("订单").append(firstItem.getErpOrderNo()) + .append("回传失败: ").append(errMsg).append("; "); + log.error("U8接口返回错误: {}", errMsg); + } + } else { + // HTTP请求失败 + String errMsg = "HTTP请求失败: " + httpResponse.getMsg(); + for (UspWorkOrderAllocData item : groupItems) { + workOrderAllocMapper.updateAllocSyncedError( + item.getSite(), + item.getOrderNo(), + item.getRowNo(), + new Date(), + errMsg); + } + failCount += groupItems.size(); + errorMessages.append("订单").append(firstItem.getErpOrderNo()) + .append("回传失败: ").append(errMsg).append("; "); + log.error("调用U8接口HTTP请求失败: {}", httpResponse.getMsg()); + } + + } catch (Exception e) { + // 异常处理 + String errMsg = "处理异常: " + e.getMessage(); + for (UspWorkOrderAllocData item : groupItems) { + workOrderAllocMapper.updateAllocSyncedError( + item.getSite(), + item.getOrderNo(), + item.getRowNo(), + new Date(), + errMsg); + } + failCount += groupItems.size(); + errorMessages.append("订单").append(firstItem.getErpOrderNo()) + .append("回传异常: ").append(e.getMessage()).append("; "); + log.error("工单数据回传处理异常,订单号: {}", firstItem.getErpOrderNo(), e); + } + } + + // 返回结果 + String resultMsg = String.format("工单数据回传完成,成功%d条,失败%d条", successCount, failCount); + if (failCount > 0) { + resultMsg += "。失败详情: " + errorMessages.toString(); + } + + responseData.setCode(failCount > 0 ? "500" : "200"); + responseData.setSuccess(failCount == 0); + responseData.setMsg(resultMsg); + + } catch (Exception e) { + log.error("执行工单数据回传时发生异常", e); + responseData.setCode("500"); + responseData.setSuccess(false); + responseData.setMsg("执行工单数据回传时发生异常: " + e.getMessage()); + } + return responseData; + } +} diff --git a/src/main/java/com/gaotao/modules/shopOrder/service/WorkOrderAllocService.java b/src/main/java/com/gaotao/modules/shopOrder/service/WorkOrderAllocService.java new file mode 100644 index 0000000..dce75dc --- /dev/null +++ b/src/main/java/com/gaotao/modules/shopOrder/service/WorkOrderAllocService.java @@ -0,0 +1,47 @@ +package com.gaotao.modules.shopOrder.service; + +import com.gaotao.common.utils.PageUtils; +import com.gaotao.modules.pda.utils.ResponseData; +import com.gaotao.modules.shopOrder.entity.SearchShopOrder; +import com.gaotao.modules.shopOrder.entity.UspWorkOrderAllocData; + +import java.util.List; + +/** + * 工单数据汇总服务接口 + * @author system + * @date 2026/01/05 + */ +public interface WorkOrderAllocService { + + /** + * 分页查询生产订单(工单数据汇总专用) + * @param query 查询条件 + * @return 分页结果 + */ + PageUtils searchShopOrderForAlloc(SearchShopOrder query); + + /** + * 根据allocType查询工单汇总数据 + * @param data 查询条件 + * @return 汇总数据列表 + */ + List selectByAllocType(UspWorkOrderAllocData data); + + /** + * 执行工单数据汇总(调用存储过程) + * @param query 查询条件(用于汇总所有时) + * @param orderNoList 工单号列表(选择的工单) + * @param currentUser 当前登录人 + * @param allocAll 是否汇总所有(true:汇总查询条件下所有工单,false:只汇总选中的) + * @return 执行结果 + */ + ResponseData executeWorkOrderAlloc(SearchShopOrder query, List orderNoList, String currentUser, boolean allocAll); + + /** + * 执行工单数据回传(调用U8接口) + * @param data 查询条件(包含工单筛选条件) + * @return 执行结果 + */ + ResponseData executeWorkOrderSync(UspWorkOrderAllocData data); +} diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index 4427781..90ac1f9 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -223,3 +223,8 @@ sys-file: toacc: name: 888 #ERP账套号 + +u8: + workhour: + add: + url: http://192.168.7.109:8011/InterfaceService.svc/WorkHour/Add \ No newline at end of file diff --git a/src/main/resources/mapper/shopOrder/WorkOrderAllocMapper.xml b/src/main/resources/mapper/shopOrder/WorkOrderAllocMapper.xml new file mode 100644 index 0000000..07c93ee --- /dev/null +++ b/src/main/resources/mapper/shopOrder/WorkOrderAllocMapper.xml @@ -0,0 +1,267 @@ + + + + + + + + + + + + + + + + UPDATE SFDC + SET synced_code = #{syncedCode}, + synced_flag = 'Y' + WHERE Site = #{site} + AND OrderNo = #{orderNo} + AND ItemNo = #{batchNo} + + + + + UPDATE UspWorkOrderAlloc + SET synced_date = #{syncedDate}, + synced_mes = #{syncedMes} + WHERE site = #{site} + AND orderNo = #{orderNo} + AND rowNo = #{rowNo} + + + + + INSERT INTO UspWorkOrderAllocTemp (site, orderNo) + VALUES (#{site}, #{orderNo}) + + + + + INSERT INTO UspWorkOrderAllocTemp (site, orderNo) + SELECT T.Site, T.OrderNo + FROM ShopOrder T + LEFT JOIN Part P ON T.Site = P.Site AND T.PartNo = P.PartNo + + AND T.site in (Select Site from AccessSite where upper(UserID)=#{query.user}) + + AND T.OrderType like '%' + #{query.orderType} + '%' + + + AND T.Site like '%' + #{query.site} + '%' + + + AND T.PartNo like '%' + #{query.partNo} + '%' + + + AND T.Status = #{query.status} + + + AND P.PartDescription like '%' + #{query.partDescription} + '%' + + + AND T.OrderNo like '%' + #{query.orderNo} + '%' + + + AND T.EnterDate >= #{query.date1} + + + AND dateadd(DAY, 1, #{query.date2}) > T.EnterDate + + + AND T.NeedDate >= #{query.date3} + + + AND dateadd(DAY, 1, #{query.date4}) > T.NeedDate + + + + +