Browse Source

2026-07-09

工单明细数据汇总
master
fengyuan_yang 4 weeks ago
parent
commit
12a033a8d1
  1. 117
      src/main/java/com/gaotao/modules/shopOrder/controller/WorkOrderDetailsAllocController.java
  2. 56
      src/main/java/com/gaotao/modules/shopOrder/dao/WorkOrderDetailsAllocMapper.java
  3. 90
      src/main/java/com/gaotao/modules/shopOrder/entity/SearchWorkOrderDetailsAlloc.java
  4. 317
      src/main/java/com/gaotao/modules/shopOrder/service/Impl/WorkOrderDetailsAllocServiceImpl.java
  5. 35
      src/main/java/com/gaotao/modules/shopOrder/service/WorkOrderDetailsAllocService.java
  6. 2
      src/main/resources/mapper/boxManage/BoxForNotificationMapper.xml
  7. 1
      src/main/resources/mapper/inboundNotification/InboundNotificationHeadMapper.xml
  8. 218
      src/main/resources/mapper/shopOrder/WorkOrderDetailsAllocMapper.xml

117
src/main/java/com/gaotao/modules/shopOrder/controller/WorkOrderDetailsAllocController.java

@ -0,0 +1,117 @@
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.SearchWorkOrderDetailsAlloc;
import com.gaotao.modules.shopOrder.entity.UspWorkOrderAllocData;
import com.gaotao.modules.shopOrder.service.WorkOrderDetailsAllocService;
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;
/**
* 工单明细数据汇总控制器
*/
@RestController
@RequestMapping("/shopOrder/workOrderDetailsAlloc")
public class WorkOrderDetailsAllocController extends AbstractController {
@Autowired
private WorkOrderDetailsAllocService workOrderDetailsAllocService;
/**
* 分页查询工单明细汇总主信息
*/
@PostMapping("/searchWorkOrderDetails")
public R searchWorkOrderDetails(@RequestBody SearchWorkOrderDetailsAlloc query) {
if (query.getUser() == null || query.getUser().isEmpty()) {
query.setUser(getUser().getUsername());
}
PageUtils page = workOrderDetailsAllocService.searchWorkOrderDetailsForAlloc(query);
return R.ok().put("page", page);
}
/**
* 查询工单汇总数据根据allocType
*/
@PostMapping("/list")
public R list(@RequestBody UspWorkOrderAllocData params) {
List<UspWorkOrderAllocData> list = workOrderDetailsAllocService.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<UspWorkOrderAllocData> 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 SearchWorkOrderDetailsAlloc query) {
if (query.getUser() == null || query.getUser().isEmpty()) {
query.setUser(getUser().getUsername());
}
ResponseData response = workOrderDetailsAllocService.executeWorkOrderDetailsAlloc(query);
if (response.isSuccess()) {
return R.ok(response.getMsg());
} else {
return R.error(response.getMsg());
}
}
/**
* 执行工单数据回传调用U8接口
*/
@PostMapping("/executeSync")
public R executeSync(@RequestBody WorkOrderSyncRequest request) {
ResponseData response = workOrderDetailsAllocService.executeWorkOrderSync(
request.getSite(),
request.getUserName(),
request.getOrderList()
);
if (response.isSuccess()) {
return R.ok(response.getMsg());
} else {
return R.error(response.getMsg());
}
}
/**
* 工单数据回传请求DTO
*/
@lombok.Data
public static class WorkOrderSyncRequest {
private String site;
private String userName;
private List<OrderSiteItem> orderList;
}
/**
* 工单和Site信息
*/
@lombok.Data
public static class OrderSiteItem {
private String orderNo;
private String site;
}
}

56
src/main/java/com/gaotao/modules/shopOrder/dao/WorkOrderDetailsAllocMapper.java

@ -0,0 +1,56 @@
package com.gaotao.modules.shopOrder.dao;
import com.gaotao.modules.shopOrder.entity.SearchWorkOrderDetailsAlloc;
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
*/
@Mapper
@Repository
public interface WorkOrderDetailsAllocMapper {
/**
* 分页查询工单明细汇总主信息
*/
List<SearchWorkOrderDetailsAlloc> searchWorkOrderDetailsForAlloc(@Param("query") SearchWorkOrderDetailsAlloc query);
/**
* 根据allocType查询工单汇总数据
*/
List<UspWorkOrderAllocData> selectByAllocType(UspWorkOrderAllocData data);
/**
* 查询未传输的数据产量未传输或工时未传输
*/
List<UspWorkOrderAllocData> selectUnSyncedData(UspWorkOrderAllocData data);
/**
* 更新SFDC表的synced_code和synced_flag
*/
void updateSfdcSyncedCode(@Param("site") String site,
@Param("orderNo") String orderNo,
@Param("batchNo") String batchNo,
@Param("syncedCode") String syncedCode);
/**
* 更新UspWorkOrderAlloc的同步异常信息
*/
void updateAllocSyncedError(@Param("site") String site,
@Param("orderNo") String orderNo,
@Param("rowNo") String rowNo,
@Param("syncedDate") Date syncedDate,
@Param("syncedMes") String syncedMes);
/**
* 更新UspWorkOrderAlloc的同步成功信息
*/
void updateAllocSyncedSuccess(@Param("site") String site,
@Param("orderNo") String orderNo);
}

90
src/main/java/com/gaotao/modules/shopOrder/entity/SearchWorkOrderDetailsAlloc.java

@ -0,0 +1,90 @@
package com.gaotao.modules.shopOrder.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.gaotao.common.utils.QueryPage;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
/**
* 工单明细数据汇总查询与列表实体
*/
@Data
@EqualsAndHashCode(callSuper=false)
public class SearchWorkOrderDetailsAlloc extends QueryPage {
private String site;
private String orderNo;
private String orderType;
private String seqNo;
private String partNo;
private String partDescription;
private String batchNo;
private String userName;
private String workCenterNo;
private String user;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date date1;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date date2;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date date3;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date date4;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date finishDate1;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date finishDate2;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date reportDate1;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date reportDate2;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createDate;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date planFinishTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date finishTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date sScheduledDate;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date closedDate;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date reportDate;
private String scheduledShiftNo;
private String operatorId;
private BigDecimal lotSize;
private BigDecimal totalReportQty;
private BigDecimal totalApproveQty;
private BigDecimal defectQty;
private BigDecimal totalSetupTime;
private BigDecimal totalManfTime;
private BigDecimal totalDownTime;
}

317
src/main/java/com/gaotao/modules/shopOrder/service/Impl/WorkOrderDetailsAllocServiceImpl.java

@ -0,0 +1,317 @@
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.controller.WorkOrderDetailsAllocController.OrderSiteItem;
import com.gaotao.modules.shopOrder.dao.WorkOrderDetailsAllocMapper;
import com.gaotao.modules.shopOrder.entity.SearchWorkOrderDetailsAlloc;
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.WorkOrderDetailsAllocService;
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.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 工单明细数据汇总服务实现类
*/
@Slf4j
@Service
public class WorkOrderDetailsAllocServiceImpl implements WorkOrderDetailsAllocService {
@Autowired
private WorkOrderDetailsAllocMapper workOrderDetailsAllocMapper;
@Autowired
private ProcedureDao procedureDao;
/**
* U8接口地址从配置文件读取
*/
@Value("${u8.workhour.add.url:}")
private String u8WorkHourAddUrl;
@Override
public PageUtils searchWorkOrderDetailsForAlloc(SearchWorkOrderDetailsAlloc query) {
int pageSize = query.getLimit() > 0 ? query.getLimit() : 20;
int offset = query.getPage();
int currPage = offset / pageSize + 1;
List<SearchWorkOrderDetailsAlloc> list = workOrderDetailsAllocMapper.searchWorkOrderDetailsForAlloc(query);
int total = list.size();
int fromIndex = offset;
int toIndex = Math.min(fromIndex + pageSize, total);
List<SearchWorkOrderDetailsAlloc> pageList;
if (fromIndex < total) {
pageList = list.subList(fromIndex, toIndex);
} else {
pageList = new ArrayList<>();
}
return new PageUtils(pageList, total, pageSize, currPage);
}
@Override
public List<UspWorkOrderAllocData> selectByAllocType(UspWorkOrderAllocData data) {
return workOrderDetailsAllocMapper.selectByAllocType(data);
}
@Override
@Transactional(rollbackFor = Exception.class)
public ResponseData executeWorkOrderDetailsAlloc(SearchWorkOrderDetailsAlloc query) {
ResponseData responseData = new ResponseData();
try {
log.info("开始执行工单明细数据汇总");
List<Object> params = new ArrayList<>();
params.add(defaultString(query.getSite()));
params.add(defaultString(query.getOrderNo()));
params.add(defaultString(query.getSeqNo()));
params.add(formatDateParam(query.getDate1()));
params.add(formatDateParam(query.getDate2()));
params.add(formatDateParam(query.getDate3()));
params.add(formatDateParam(query.getDate4()));
params.add(formatDateParam(query.getFinishDate1()));
params.add(formatDateParam(query.getFinishDate2()));
params.add(formatDateParam(query.getReportDate1()));
params.add(formatDateParam(query.getReportDate2()));
params.add(defaultString(query.getUserName()));
params.add(defaultString(query.getWorkCenterNo()));
List<Map<String, Object>> resultList = procedureDao.getProcedureData("UspInsertWorkOrderDetailsAlloc", params);
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(String site, String userName, List<OrderSiteItem> orderList) {
ResponseData responseData = new ResponseData();
try {
log.info("开始执行工单数据回传");
// 1. 查询未传输的数据
List<UspWorkOrderAllocData> unSyncedList = new ArrayList<>();
if (orderList != null && !orderList.isEmpty()) {
// 有选中行时按每行的site和orderNo查询
for (OrderSiteItem item : orderList) {
UspWorkOrderAllocData queryData = new UspWorkOrderAllocData();
queryData.setSite(item.getSite());
queryData.setOrderNo(item.getOrderNo());
List<UspWorkOrderAllocData> itemList = workOrderDetailsAllocMapper.selectUnSyncedData(queryData);
if (itemList != null) {
unSyncedList.addAll(itemList);
}
}
} else {
// 没有选中行时使用当前用户可见工厂查询
UspWorkOrderAllocData queryData = new UspWorkOrderAllocData();
queryData.setCurrentUser(userName);
unSyncedList = workOrderDetailsAllocMapper.selectUnSyncedData(queryData);
}
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<String, List<UspWorkOrderAllocData>> groupedData = unSyncedList.stream()
.collect(Collectors.groupingBy(item ->
item.getErpOrderNo() + "_" + item.getErpOrderLineNo() + "_" +
(item.getAllocDate() != null ? item.getAllocDate() : "")));
// 3. 逐组调用U8接口
for (Map.Entry<String, List<UspWorkOrderAllocData>> entry : groupedData.entrySet()) {
List<UspWorkOrderAllocData> groupItems = entry.getValue();
if (groupItems.isEmpty()) {
continue;
}
UspWorkOrderAllocData firstItem = groupItems.get(0);
try {
// 构建U8请求参数
U8WorkHourRequestDto requestDto = new U8WorkHourRequestDto();
requestDto.setMocode(firstItem.getErpOrderNo() != null ? firstItem.getErpOrderNo() : "");
requestDto.setIrowNo(firstItem.getErpOrderLineNo() != null ? firstItem.getErpOrderLineNo() : "");
if (firstItem.getAllocDate() != null) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
requestDto.setDDate(sdf.format(firstItem.getAllocDate()));
} else {
requestDto.setDDate("");
}
List<U8WorkHourRequestDto.DetailItem> detailList = new ArrayList<>();
for (UspWorkOrderAllocData item : groupItems) {
U8WorkHourRequestDto.DetailItem detailItem = new U8WorkHourRequestDto.DetailItem();
detailItem.setMesIrowNo(item.getRowNo() != null ? item.getRowNo() : "");
detailItem.setSortSeq(item.getItemNo() != null ? item.getItemNo() : "");
detailItem.setEqId("");
detailItem.setDutyClassCode("");
detailItem.setEmployCode(item.getOperator() != null ? item.getOperator() : "");
detailItem.setQualifiedQty(item.getAllocApproveQty() != null ? String.valueOf(item.getAllocApproveQty()) : "");
detailItem.setRefusedQty("");
detailItem.setScrapQty(item.getAllocScrapQty() != null ? String.valueOf(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.compareTo(BigDecimal.ZERO) == 0 ? "0" : workHr.toString());
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())) {
// 接口调用成功更新UspWorkOrderAlloc同步成功信息
for (UspWorkOrderAllocData item : groupItems) {
workOrderDetailsAllocMapper.updateAllocSyncedSuccess(
item.getSite(),
item.getOrderNo());
}
successCount += groupItems.size();
log.info("U8接口调用成功,返回单号: {}", u8Response.getU8CCode());
} else {
// 接口返回错误
String errMsg = u8Response.getErrMsg();
for (UspWorkOrderAllocData item : groupItems) {
workOrderDetailsAllocMapper.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) {
workOrderDetailsAllocMapper.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) {
workOrderDetailsAllocMapper.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;
}
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;
}
private String formatDateParam(Date date) {
if (date == null) {
return "";
}
return new SimpleDateFormat("yyyy-MM-dd").format(date);
}
private String defaultString(String value) {
return value == null ? "" : value;
}
}

35
src/main/java/com/gaotao/modules/shopOrder/service/WorkOrderDetailsAllocService.java

@ -0,0 +1,35 @@
package com.gaotao.modules.shopOrder.service;
import com.gaotao.common.utils.PageUtils;
import com.gaotao.modules.pda.utils.ResponseData;
import com.gaotao.modules.shopOrder.controller.WorkOrderDetailsAllocController.OrderSiteItem;
import com.gaotao.modules.shopOrder.entity.SearchWorkOrderDetailsAlloc;
import com.gaotao.modules.shopOrder.entity.UspWorkOrderAllocData;
import java.util.List;
/**
* 工单明细数据汇总服务接口
*/
public interface WorkOrderDetailsAllocService {
/**
* 分页查询工单明细汇总主信息
*/
PageUtils searchWorkOrderDetailsForAlloc(SearchWorkOrderDetailsAlloc query);
/**
* 根据allocType查询工单汇总数据
*/
List<UspWorkOrderAllocData> selectByAllocType(UspWorkOrderAllocData data);
/**
* 执行工单明细数据汇总调用存储过程
*/
ResponseData executeWorkOrderDetailsAlloc(SearchWorkOrderDetailsAlloc query);
/**
* 执行工单数据回传调用U8接口
*/
ResponseData executeWorkOrderSync(String site, String userName, List<OrderSiteItem> orderList);
}

2
src/main/resources/mapper/boxManage/BoxForNotificationMapper.xml

@ -368,7 +368,7 @@
AND a.part_no = b.PartNo AND a.part_no = b.PartNo
WHERE WHERE
a.site = #{site} a.site = #{site}
AND a.parent_roll_no = #{rollNo}
AND (a.parent_roll_no = #{rollNo} or roll_no = #{rollNo})
AND a.part_no = #{partNo} AND a.part_no = #{partNo}
</select> </select>

1
src/main/resources/mapper/inboundNotification/InboundNotificationHeadMapper.xml

@ -219,6 +219,7 @@
UPDATE inbound_notification_head UPDATE inbound_notification_head
SET order_status = #{orderStatus}, SET order_status = #{orderStatus},
close_flag = 'Y', close_flag = 'Y',
inspection_flag = 'N',
closed_by = #{closedBy}, closed_by = #{closedBy},
closed_date = GETDATE() closed_date = GETDATE()
WHERE site = #{site} AND bu_no = #{buNo} AND order_no = #{orderNo} AND close_flag = 'N' WHERE site = #{site} AND bu_no = #{buNo} AND order_no = #{orderNo} AND close_flag = 'N'

218
src/main/resources/mapper/shopOrder/WorkOrderDetailsAllocMapper.xml

@ -0,0 +1,218 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gaotao.modules.shopOrder.dao.WorkOrderDetailsAllocMapper">
<sql id="workOrderDetailsBaseConditions">
and A.site in (Select Site from AccessSite where upper(UserID)=#{query.user})
<if test="query.site != null and query.site != ''">
AND A.Site like '%' + #{query.site} + '%'
</if>
<if test="query.orderNo != null and query.orderNo != ''">
AND A.OrderNo like '%' + #{query.orderNo} + '%'
</if>
<if test="query.orderType != null and query.orderType != ''">
AND A.OrderType like '%' + #{query.orderType} + '%'
</if>
<if test="query.seqNo != null and query.seqNo != ''">
AND B.SeqNo like '%' + #{query.seqNo} + '%'
</if>
<if test="query.partNo != null and query.partNo != ''">
AND A.PartNo like '%' + #{query.partNo} + '%'
</if>
<if test="query.partDescription != null and query.partDescription != ''">
AND P.PartDescription like '%' + #{query.partDescription} + '%'
</if>
<if test="query.userName != null and query.userName != ''">
AND C.OperatorID like '%' + #{query.userName} + '%'
</if>
<if test="query.workCenterNo != null and query.workCenterNo != ''">
AND C.WorkCenterNo like '%' + #{query.workCenterNo} + '%'
</if>
<if test="query.date1 != null">
AND A.create_date >= #{query.date1}
</if>
<if test="query.date2 != null">
AND dateadd(DAY, 1, #{query.date2}) > A.create_date
</if>
<if test="query.date3 != null">
AND B.PlanFinishTime >= #{query.date3}
</if>
<if test="query.date4 != null">
AND dateadd(DAY, 1, #{query.date4}) > B.PlanFinishTime
</if>
<if test="query.finishDate1 != null">
AND B.finishtime >= #{query.finishDate1}
</if>
<if test="query.finishDate2 != null">
AND dateadd(DAY, 1, #{query.finishDate2}) > B.finishtime
</if>
<if test="query.reportDate1 != null">
AND C.ReportDate >= #{query.reportDate1}
</if>
<if test="query.reportDate2 != null">
AND dateadd(DAY, 1, #{query.reportDate2}) > C.ReportDate
</if>
</sql>
<!-- 分页查询工单明细汇总主信息 -->
<select id="searchWorkOrderDetailsForAlloc"
parameterType="com.gaotao.modules.shopOrder.entity.SearchWorkOrderDetailsAlloc"
resultType="com.gaotao.modules.shopOrder.entity.SearchWorkOrderDetailsAlloc">
SELECT
A.Site AS site,
A.OrderNo AS orderNo,
A.OrderType AS orderType,
B.SeqNo AS seqNo,
A.PartNo AS partNo,
P.PartDescription AS partDescription,
A.LotSize AS lotSize,
A.batch_no AS batchNo,
A.create_date AS createDate,
B.PlanFinishTime AS planFinishTime,
B.finishtime AS finishTime,
B.S_ScheduledDate AS sScheduledDate,
B.ClosedDate AS closedDate,
C.OperatorID AS operatorId,
C.ReportDate AS reportDate,
C.Scheduled_ShiftNo AS scheduledShiftNo,
C.WorkCenterNo AS workCenterNo,
SUM(ISNULL(C.ReportQty, 0)) AS totalReportQty,
SUM(ISNULL(C.ApproveQty, 0)) AS totalApproveQty,
SUM(ISNULL(C.ReportQty, 0) - ISNULL(C.ApproveQty, 0)) AS defectQty,
SUM(ISNULL(C.ReportedSetupTime, 0)) AS totalSetupTime,
SUM(ISNULL(C.ReportedManfTime, 0)) AS totalManfTime,
SUM(ISNULL(C.downtime, 0)) AS totalDownTime
FROM ShopOrder A
INNER JOIN SOScheduledRouting B ON A.Site = B.Site AND A.OrderNo = B.OrderNo
INNER JOIN SFDC C ON B.Site = C.Site AND B.OrderNo = C.OrderNo AND B.SeqNo = C.AssJobSeqNo
INNER JOIN Part P ON A.Site = P.Site AND A.PartNo = P.PartNo
<where>
<include refid="workOrderDetailsBaseConditions"/>
</where>
GROUP BY
A.Site,
A.OrderNo,
A.OrderType,
B.SeqNo,
A.PartNo,
P.PartDescription,
A.LotSize,
A.batch_no,
A.create_date,
B.PlanFinishTime,
B.finishtime,
B.S_ScheduledDate,
B.ClosedDate,
C.OperatorID,
C.ReportDate,
C.Scheduled_ShiftNo,
C.WorkCenterNo
ORDER BY B.SeqNo, C.ReportDate
</select>
<!-- 根据allocType查询工单汇总数据 -->
<select id="selectByAllocType" parameterType="com.gaotao.modules.shopOrder.entity.UspWorkOrderAllocData"
resultType="com.gaotao.modules.shopOrder.entity.UspWorkOrderAllocData">
SELECT
site,
orderNo,
batchNo,
erp_orderNo as erpOrderNo,
erp_orderLineNo as erpOrderLineNo,
rowNo,
itemNo,
operator,
allocReportQty,
allocApproveQty,
allocScrapQty,
allocSetupTime,
allocManfTime,
allocBy,
allocDate,
synced_date as syncedDate,
synced_mes as syncedMes,
allocType
FROM UspWorkOrderAlloc
<where>
<if test="site != null and site != ''">
AND site = #{site}
</if>
<if test="orderNo != null and orderNo != ''">
AND orderNo = #{orderNo}
</if>
<if test="allocType != null and allocType != ''">
AND allocType = #{allocType}
</if>
</where>
ORDER BY allocDate DESC
</select>
<!-- 查询未传输的数据 -->
<select id="selectUnSyncedData" parameterType="com.gaotao.modules.shopOrder.entity.UspWorkOrderAllocData"
resultType="com.gaotao.modules.shopOrder.entity.UspWorkOrderAllocData">
SELECT
site,
orderNo,
ROW_NUMBER() OVER (ORDER BY MAX(ReportDate) ASC) AS batchNo,
erp_orderNo as erpOrderNo,
erp_orderLineNo as erpOrderLineNo,
ROW_NUMBER() OVER (ORDER BY MAX(ReportDate) ASC) AS rowNo,
MAX(operation_id) as itemNo,
operator,
SUM(ISNULL(allocReportQty,0)),
SUM(ISNULL(allocApproveQty,0)),
SUM(ISNULL(allocScrapQty,0)),
SUM(ISNULL(allocSetupTime,0)) allocSetupTime,
SUM(ISNULL(allocManfTime,0)) allocManfTime,
MAX(allocBy )AS allocBy,
MAX(ReportDate) AS allocDate,
'' allocType
FROM UspWorkOrderAlloc
<where>
AND (allocType = '产量未传输' OR allocType = '工时未传输')
<if test="site != null and site != ''">
AND site = #{site}
</if>
<if test="site == null or site == ''">
AND site in (select site from AccessSite where userID = #{currentUser})
</if>
<if test="orderNo != null and orderNo != ''">
AND orderNo = #{orderNo}
</if>
</where>
GROUP BY site , orderNo , erp_orderNo , erp_orderLineNo , operator
</select>
<!-- 更新SFDC表的同步信息 -->
<update id="updateSfdcSyncedCode">
UPDATE SFDC
SET synced_code = #{syncedCode},
synced_flag = 'Y'
WHERE Site = #{site}
AND OrderNo = #{orderNo}
AND ItemNo = #{batchNo}
</update>
<!-- 更新UspWorkOrderAlloc的同步异常信息 -->
<update id="updateAllocSyncedError">
UPDATE UspWorkOrderAlloc
SET synced_date = GETDATE(),
synced_mes = #{syncedMes}
WHERE site = #{site}
AND orderNo = #{orderNo}
AND rowNo = #{rowNo}
</update>
<!-- 更新UspWorkOrderAlloc的同步成功信息 -->
<update id="updateAllocSyncedSuccess">
UPDATE UspWorkOrderAlloc
SET
allocType = CASE WHEN allocType = '产量未传输' THEN '产量已传输' WHEN allocType = '工时未传输' THEN '工时已传输' END,
synced_date = GETDATE(),
synced_mes = '操作成功'
WHERE site = #{site}
AND orderNo = #{orderNo}
AND allocType IN ('产量未传输', '工时未传输')
</update>
</mapper>
Loading…
Cancel
Save