启动工单

parent e45bc27d
package com.aps.entity;
import lombok.Data;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
public class ApsOrder {
private String id;
private LocalDateTime creationtime;
private Long creatoruserid;
private LocalDateTime lastmodificationtime;
private Long lastmodifieruserid;
private Long isdeleted;
private LocalDateTime deletiontime;
private Long deleteruserid;
private String exp1;
private String exp2;
private BigDecimal exp3;
private BigDecimal exp4;
private LocalDateTime exp5;
private LocalDateTime exp6;
private String zone;
private Long customerid;
private String customer;
private String code;
private String mmid;
private String mmcode;
private String mmname;
private String unit;
private BigDecimal quantity;
private BigDecimal meetquantity;
private BigDecimal meetrate;
private BigDecimal price;
private LocalDateTime deliverytime;
private Long stockid;
private String stock;
private String prioritry;
private String series;
private Long isinsert;
private Long islock;
private Long part;
private Long delay;
private Long settle;
private String remark;
private Long zoneid;
}
\ No newline at end of file
package com.aps.entity;
import lombok.Data;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
public class EquipCapacityDef {
private Long id;
private Long creatorUserId;
private LocalDateTime creationTime;
private Long lastModifierUserId;
private LocalDateTime lastModificationTime;
private Integer isDeleted;
private Long deleterUserId;
private LocalDateTime deletionTime;
private Short equipId;
private String equipCode;
private String equipName;
private LocalDateTime effectiveStartTime;
private LocalDateTime effectiveEndTime;
private Long referenceId;
private Short referenceType;
private BigDecimal efficiencyCoeff;
private Integer minUtilization;
private Integer maxUtilization;
private String referenceName;
}
\ No newline at end of file
package com.aps.entity;
import lombok.Data;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class MesHoliday {
private Long id;
private String holidayId;
private String holidayName;
private LocalDateTime holidayStart;
private LocalDateTime holidayEnd;
private LocalDateTime creationtime;
private Long creatoruserid;
private LocalDateTime lastmodificationtime;
private Long lastmodifieruserid;
private Long isdeleted;
private LocalDateTime deletiontime;
private Long deleteruserid;
}
\ No newline at end of file
package com.aps.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
@TableName("prod_launch_order")
public class ProdLaunchOrder {
@TableId(value = "order_id", type = IdType.NONE)
private String orderId;
private String sceneId;
private String routingId;
private String serie;
private String createUser;
private String productType;
private String materialCode;
private String materialVer;
private LocalDateTime startDate;
private LocalDateTime endDate;
private String orderDesc;
private String orderPriority;
private String groupCode;
private String colorCode;
private BigDecimal quantity;
private String orderStatus;//S未启动E执行中C已完成
private String materialId;
private String routingCode;
}
\ No newline at end of file
package com.aps.entity;
import lombok.Data;
@Data
public class ProdOrderProcess {
private String sceneId;
private String orderId;
private String processNo;
private String targetOrderId;
private String targetProcessNo;
}
\ No newline at end of file
package com.aps.entity;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
public class ProdProcessExec {
private String execId;
private String sceneId;
private String orderId;
private String processId;
private String processNo;
private String processName;
private String machineId;
private String resourceGroup;
private BigDecimal planQty;
private BigDecimal actualQty;
private Long planDuration;
private Long usedDuration;
private Long remainDuration;
private String processStatus;
private Long standardCapacity;
private Long minCapacity;
private Long maxCapacity;
private Long prepDuration;
private Long changeDuration;
private Short logicalOrder;
private LocalDateTime targetStartDate;
private LocalDateTime targetEndDate;
}
\ No newline at end of file
package com.aps.entity;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
public class ProdSceneConfig {
private String sceneId;
private String sceneName;
private String sceneDesc;
private LocalDateTime createTime;
private String sceneOwner;
private Short sceneStatus;
private String relatePlanId;
private String createUser;
private LocalDateTime updateTime;
private String updateUser;
private String extend1;
private String extend2;
private BigDecimal extend3;
}
\ No newline at end of file
package com.aps.entity;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class RoutingDetailConnect {
private Long id;
private LocalDateTime creationtime;
private Long creatoruserid;
private LocalDateTime lastmodificationtime;
private Long lastmodifieruserid;
private Long isdeleted;
private LocalDateTime deletiontime;
private Long deleteruserid;
private Long destoperationid;
private Long sourceoperationid;
private String destoperation;
private String sourceoperation;
private Long exp1;
private Long exp2;
private String exp3;
private String exp4;
private Long routingHeaderId;
private String strId;
}
\ No newline at end of file
package com.aps.mapper;
import com.aps.entity.ApsOrder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-26
*/
public interface ApsOrderMapper extends BaseMapper<ApsOrder> {
}
package com.aps.mapper;
import com.aps.entity.EquipCapacityDef;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 设备产能定义 Mapper 接口
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-26
*/
public interface EquipCapacityDefMapper extends BaseMapper<EquipCapacityDef> {
}
package com.aps.mapper;
import com.aps.entity.MesHoliday;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 节假日表 Mapper 接口
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-26
*/
public interface MesHolidayMapper extends BaseMapper<MesHoliday> {
}
package com.aps.mapper;
import com.aps.entity.ProdEquipSpecialCal;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 设备特殊日历配置表:记录特定工位/设备在指定时间段的特殊日历规则(如节假日、维护期等) Mapper 接口
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-26
*/
public interface ProdEquipSpecialCalMapper extends BaseMapper<ProdEquipSpecialCal> {
}
package com.aps.mapper;
import com.aps.entity.ProdLaunchOrder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 启动订单表:记录已启动的生产订单信息,关联场景配置 Mapper 接口
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-14
*/
public interface ProdLaunchOrderMapper extends BaseMapper<ProdLaunchOrder> {
}
package com.aps.mapper;
import com.aps.entity.ProdOrderMain;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-14
*/
public interface ProdOrderMainMapper extends BaseMapper<ProdOrderMain> {
}
package com.aps.mapper;
import com.aps.entity.ProdOrderProcess;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-21
*/
public interface ProdOrderProcessMapper extends BaseMapper<ProdOrderProcess> {
}
package com.aps.mapper;
import com.aps.entity.ProdProcessExec;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 工序执行详情表:关联启动订单与工艺工序,记录工序执行核心信息 Mapper 接口
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-14
*/
public interface ProdProcessExecMapper extends BaseMapper<ProdProcessExec> {
}
package com.aps.mapper;
import com.aps.entity.ProdSceneConfig;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-14
*/
public interface ProdSceneConfigMapper extends BaseMapper<ProdSceneConfig> {
}
package com.aps.mapper;
import com.aps.entity.RoutingDetailConnect;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 工序衔接 Mapper 接口
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-21
*/
public interface RoutingDetailConnectMapper extends BaseMapper<RoutingDetailConnect> {
}
package com.aps.service;
import com.aps.entity.ApsOrder;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 服务类
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-26
*/
public interface ApsOrderService extends IService<ApsOrder> {
}
package com.aps.service;
import com.aps.entity.EquipCapacityDef;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 设备产能定义 服务类
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-26
*/
public interface EquipCapacityDefService extends IService<EquipCapacityDef> {
}
package com.aps.service;
import com.aps.common.util.R;
import java.util.List;
/**
* 设备日历服务接口
*/
public interface LanuchService {
/**
* 生成设备日历数据
*
* @author: jdt
* @return 结果
*/
R<String> lanuch(List<String> prodOrderMainIds, String sceneId, String username);
}
\ No newline at end of file
package com.aps.service;
import com.aps.entity.MesHoliday;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 节假日表 服务类
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-26
*/
public interface MesHolidayService extends IService<MesHoliday> {
}
package com.aps.service;
import com.aps.entity.ProdEquipSpecialCal;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 设备特殊日历配置表:记录特定工位/设备在指定时间段的特殊日历规则(如节假日、维护期等) 服务类
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-26
*/
public interface ProdEquipSpecialCalService extends IService<ProdEquipSpecialCal> {
/**
* 从EquipCapacityDef表中复制is_deleted为0的数据到ProdEquipSpecialCal表
*/
void copyFromEquipCapacityDef(String sceneId);
}
\ No newline at end of file
package com.aps.service;
import com.aps.entity.ProdLaunchOrder;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 启动订单表:记录已启动的生产订单信息,关联场景配置 服务类
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-14
*/
public interface ProdLaunchOrderService extends IService<ProdLaunchOrder> {
}
package com.aps.service;
import com.aps.entity.ProdOrderProcess;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 服务类
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-21
*/
public interface ProdOrderProcessService extends IService<ProdOrderProcess> {
}
package com.aps.service;
import com.aps.entity.ProdProcessExec;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 工序执行详情表:关联启动订单与工艺工序,记录工序执行核心信息 服务类
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-14
*/
public interface ProdProcessExecService extends IService<ProdProcessExec> {
}
package com.aps.service;
import com.aps.entity.ProdSceneConfig;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 服务类
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-14
*/
public interface ProdSceneConfigService extends IService<ProdSceneConfig> {
}
package com.aps.service;
import com.aps.entity.RoutingDetailConnect;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 工序衔接 服务类
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-21
*/
public interface RoutingDetailConnectService extends IService<RoutingDetailConnect> {
}
package com.aps.service.impl;
import com.aps.entity.ApsOrder;
import com.aps.entity.EquipCapacityDef;
import com.aps.mapper.ApsOrderMapper;
import com.aps.mapper.EquipCapacityDefMapper;
import com.aps.service.ApsOrderService;
import com.aps.service.EquipCapacityDefService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* ApsOrderServiceImpl.java
*
* @author jdt
* @description 订单
* @since 2025-11-26
*/
@Service
public class ApsOrderServiceImpl extends ServiceImpl<ApsOrderMapper, ApsOrder> implements ApsOrderService {
}
package com.aps.service.impl;
import com.aps.entity.EquipCapacityDef;
import com.aps.mapper.EquipCapacityDefMapper;
import com.aps.service.EquipCapacityDefService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 设备产能定义 服务实现类
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-26
*/
@Service
public class EquipCapacityDefServiceImpl extends ServiceImpl<EquipCapacityDefMapper, EquipCapacityDef> implements EquipCapacityDefService {
}
package com.aps.service.impl;
import com.aps.common.util.R;
import com.aps.entity.*;
import com.aps.mapper.RoutingDetailMapper;
import com.aps.mapper.RoutingHeaderMapper;
import com.aps.service.*;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
import java.util.stream.Collectors;
/**
* 设备日历服务实现类
* 负责生成设备日历数据、处理订单数据转换等功能
*/
@Slf4j
@Service
@RequiredArgsConstructor // 使用构造器注入替代@Autowired
public class LanuchServiceImpl implements LanuchService {
@Autowired
ProdEquipSpecialCalService prodEquipSpecialCalService;
@Autowired
ApsOrderService apsOrderService;
@Autowired
RoutingHeaderService routingHeaderService;
@Autowired
ProdLaunchOrderService prodLaunchOrderService;
@Autowired
RoutingDetailMapper routingDetailMapper;
@Autowired
ProdProcessExecService prodProcessExecService;
@Autowired
RoutingDetailConnectService routingDetailConnectService;
@Autowired
ProdOrderProcessService prodOrderProcessService;
@Autowired
RoutingHeaderMapper routingHeaderMapper;
@Autowired
ProdSceneConfigService prodSceneConfigService;
/**
* 生成场景数据
*
* @param prodOrderMainIds 工单ID列表
* @param sceneName 场景名称
* @param username 操作用户
* @return 处理结果
*/
@Override
@Transactional(rollbackFor = Exception.class)
public R<String> lanuch(List<String> prodOrderMainIds, String sceneName, String username) {
try {
// 参数校验
if (sceneName == null || sceneName.trim().isEmpty()) {
return R.failed("场景名称不能为空");
}
if (CollectionUtils.isEmpty(prodOrderMainIds)) {
return R.failed("工单ID列表不能为空");
}
// 1. 创建场景
String sceneId = createScene(sceneName);
if (sceneId == null) {
return R.failed("场景名称已存在");
}
prodEquipSpecialCalService.copyFromEquipCapacityDef(sceneId);
List<ApsOrder> apsOrders = apsOrderService.list();
// 4. 处理订单数据转换
List<ProdLaunchOrder> prodLaunchOrders = processOrderData(sceneId, apsOrders);
// 5. 转换工单于工序执行表
convertToProcessExecBatch(prodLaunchOrders, sceneId);
// 6. 生成工序关联关系
generateProcessRelationsBatch(prodLaunchOrders, sceneId);
log.info("场景数据生成完成,场景ID:{}", sceneId);
return R.ok("场景数据生成成功");
} catch (Exception e) {
log.error("生成场景数据失败", e);
return R.failed("生成场景数据失败: " + e.getMessage());
}
}
/**
* 处理订单数据:批量转换ProdOrderMain到ProdLaunchOrder
*
* @param sceneId 场景ID
*/
private List<ProdLaunchOrder> processOrderData(String sceneId, List<ApsOrder> prodOrderMainList) {
// 批量转换并插入
List<ProdLaunchOrder> launchOrderList = prodOrderMainList.stream()
.map(order -> convertToLaunchOrder(order, sceneId))
.filter(Objects::nonNull)
.collect(Collectors.toList());
// 批量保存
if (!CollectionUtils.isEmpty(launchOrderList)) {
prodLaunchOrderService.saveBatch(launchOrderList);
log.info("批量插入{}条ProdLaunchOrder记录", launchOrderList.size());
}
log.info("成功处理{}条订单数据", prodOrderMainList.size());
return launchOrderList;
}
/**
* 将ProdOrderMain转换为ProdLaunchOrder
*
* @param order 源订单
* @param sceneId 场景ID
* @return 转换后的ProdLaunchOrder
*/
private ProdLaunchOrder convertToLaunchOrder(ApsOrder order, String sceneId) {
try {
ProdLaunchOrder launchOrder = new ProdLaunchOrder();
String mmid = order.getMmid();
// 通过mmid查找对应的工艺
if (mmid != null && !mmid.isEmpty()) {
LambdaQueryWrapper<RoutingHeader> routingWrapper = new LambdaQueryWrapper<>();
routingWrapper.eq(RoutingHeader::getMaterialId, mmid);
RoutingHeader routingHeader = routingHeaderService.getOne(routingWrapper);
if (routingHeader != null) {
launchOrder.setRoutingId(routingHeader.getId().toString());
launchOrder.setRoutingCode(defaultIfBlank(routingHeader.getCode(), ""));
launchOrder.setOrderId(order.getId());
launchOrder.setSceneId(sceneId);
launchOrder.setSerie(order.getSeries());
launchOrder.setCreateUser(String.valueOf(order.getCreatoruserid()));
launchOrder.setMaterialCode(order.getMmcode());
// launchOrder.setStartDate(order.get);
launchOrder.setEndDate(order.getDeliverytime());
launchOrder.setOrderPriority(order.getPrioritry());
launchOrder.setQuantity(order.getQuantity());
launchOrder.setMaterialId(order.getMmid());
}
}
return launchOrder;
} catch (Exception e) {
log.error("转换订单[{}]失败", order.getId(), e);
return null;
}
}
/**
* 创建场景
*
* @param sceneName 场景名称
* @return 场景ID,如果场景已存在则返回null
*/
private String createScene(String sceneName) {
// 检查场景名称是否已存在
boolean exists = prodSceneConfigService.lambdaQuery()
.eq(ProdSceneConfig::getSceneName, sceneName)
.exists();
if (exists) {
log.warn("场景名称[{}]已存在", sceneName);
return null;
}
// 创建新场景
String sceneId = generateSceneId();
ProdSceneConfig sceneConfig = new ProdSceneConfig();
sceneConfig.setSceneId(sceneId);
sceneConfig.setSceneName(sceneName);
sceneConfig.setSceneStatus((short) 1);
sceneConfig.setCreateTime(LocalDateTime.now());
prodSceneConfigService.save(sceneConfig);
log.info("创建新场景成功,场景ID:{},名称:{}", sceneId, sceneName);
return sceneId;
}
/**
* 生成场景ID
*
* @return 格式化的场景ID
*/
private String generateSceneId() {
return UUID.randomUUID().toString().replace("-", "").toUpperCase();
}
/**
* 生成日历数据
*
* @param sceneId 场景ID
* @param planResource 设备信息
* @param shiftWorkSchedList 班次信息
* @param startTime 开始时间
* @param endTime 结束时间
*/
private void generateCalendarData(String sceneId, PlanResource planResource,
List<MesShiftWorkSched> shiftWorkSchedList,
LocalDateTime startTime, LocalDateTime endTime) {
LocalDate currentDate = startTime.toLocalDate();
LocalDate endDate = endTime.toLocalDate();
// 批量保存列表
List<ProdEquipSpecialCal> calendarList = new java.util.ArrayList<>();
while (!currentDate.isAfter(endDate)) {
int dayOfWeekValue = currentDate.getDayOfWeek().getValue();
for (MesShiftWorkSched shiftWorkSched : shiftWorkSchedList) {
if (shiftWorkSched.getStartWeekDay() == dayOfWeekValue) {
processSingleShift(sceneId, planResource, shiftWorkSched,
currentDate, startTime, endTime, calendarList);
}
}
currentDate = currentDate.plusDays(1);
}
// 批量保存日历数据
if (!CollectionUtils.isEmpty(calendarList)) {
prodEquipSpecialCalService.saveBatch(calendarList);
log.info("设备[{}]生成{}条日历记录", planResource.getReferenceCode(), calendarList.size());
}
}
/**
* 处理单个班次
*
* @param sceneId 场景ID
* @param planResource 设备信息
* @param shiftWorkSched 班次信息
* @param currentDate 当前日期
* @param startTime 开始时间
* @param endTime 结束时间
* @param calendarList 日历列表
*/
private void processSingleShift(String sceneId, PlanResource planResource,
MesShiftWorkSched shiftWorkSched, LocalDate currentDate,
LocalDateTime startTime, LocalDateTime endTime,
List<ProdEquipSpecialCal> calendarList) {
LocalTime shiftStartTimeRaw = shiftWorkSched.getShiftStart().toLocalTime();
LocalTime shiftEndTimeRaw = shiftWorkSched.getShiftEnd().toLocalTime();
LocalDateTime shiftStartTime = LocalDateTime.of(currentDate, shiftStartTimeRaw);
LocalDateTime shiftEndTime = LocalDateTime.of(currentDate, shiftEndTimeRaw);
// 处理跨天班次
if (shiftEndTimeRaw.isBefore(shiftStartTimeRaw)) {
shiftEndTime = shiftEndTime.plusDays(1);
}
// 时间范围校验
if (shiftStartTime.isAfter(endTime) || shiftEndTime.isBefore(startTime)) {
return;
}
// 调整时间到范围内
LocalDateTime actualStartTime = shiftStartTime.isBefore(startTime) ? startTime : shiftStartTime;
LocalDateTime actualEndTime = shiftEndTime.isAfter(endTime) ? endTime : shiftEndTime;
if (actualStartTime.isBefore(actualEndTime)) {
ProdEquipSpecialCal equipSpecialCal = createCalendarRecord(sceneId, planResource,
shiftWorkSched, actualStartTime, actualEndTime);
calendarList.add(equipSpecialCal);
}
}
/**
* 创建日历记录
*
* @param sceneId 场景ID
* @param planResource 设备信息
* @param shiftWorkSched 班次信息
* @param startTime 开始时间
* @param endTime 结束时间
* @return 日历记录
*/
private ProdEquipSpecialCal createCalendarRecord(String sceneId, PlanResource planResource,
MesShiftWorkSched shiftWorkSched,
LocalDateTime startTime, LocalDateTime endTime) {
ProdEquipSpecialCal equipSpecialCal = new ProdEquipSpecialCal();
equipSpecialCal.setSceneId(sceneId);
equipSpecialCal.setEquipId(planResource.getReferenceId());
equipSpecialCal.setEquipCode(planResource.getReferenceCode());
equipSpecialCal.setStartDate(startTime);
equipSpecialCal.setEndDate(endTime);
equipSpecialCal.setShiftWorkSchedCode(shiftWorkSched.getShiftWorkSchedCode());
equipSpecialCal.setPeriodDesc(shiftWorkSched.getShiftName());
return equipSpecialCal;
}
/**
* 批量转换工单于工序执行表
*
* @param order 工单列表
* @param sceneId 场景ID
*/
private void convertToProcessExecBatch(List<ProdLaunchOrder> order, String sceneId) {
if (CollectionUtils.isEmpty(order)) {
log.warn("工单列表为空,跳过工序转换");
return;
}
for (ProdLaunchOrder prodOrderMain : order) {
try {
convertToProcessExec(prodOrderMain, sceneId);
} catch (Exception e) {
log.error("转换工单[{}]到工序执行表失败", prodOrderMain.getOrderId(), e);
continue;
}
}
log.info("完成{}个工单的工序转换",order.size());
}
/**
* 转换工单到工序执行表
*
* @param prodOrderMain 工单ID
* @param sceneId 场景ID
* @return 转换结果
*/
public boolean convertToProcessExec(ProdLaunchOrder prodOrderMain, String sceneId) {
// 查询对应的工艺
RoutingHeader routingHeader = getRoutingHeader(prodOrderMain.getRoutingId());
// 查询该工艺下的所有工序
List<RoutingDetail> routingDetails = getRoutingDetails(routingHeader.getId());
// 批量插入新的工序工单记录
batchInsertProcessExec(prodOrderMain, routingDetails, sceneId);
return true;
}
/**
* 获取工艺信息
*
* @param routingId 工艺ID
* @return 工艺信息
*/
private RoutingHeader getRoutingHeader(String routingId) {
LambdaQueryWrapper<RoutingHeader> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(RoutingHeader::getId, routingId);
RoutingHeader routingHeader = routingHeaderMapper.selectOne(wrapper);
if (routingHeader == null) {
log.error("未找到对应工艺: {}", routingId);
throw new RuntimeException("未找到对应工艺: " + routingId);
}
return routingHeader;
}
/**
* 获取工艺工序列表
*
* @param routingHeaderId 工艺头ID
* @return 工序列表
*/
private List<RoutingDetail> getRoutingDetails(Integer routingHeaderId) {
LambdaQueryWrapper<RoutingDetail> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(RoutingDetail::getRoutingHeaderId, routingHeaderId)
.orderByAsc(RoutingDetail::getTaskSeq);
List<RoutingDetail> routingDetails = routingDetailMapper.selectList(wrapper);
if (CollectionUtils.isEmpty(routingDetails)) {
log.error("工艺下无工序信息: {}", routingHeaderId);
throw new RuntimeException("工艺下无工序信息: " + routingHeaderId);
}
return routingDetails;
}
/**
* 批量插入工序执行记录
*
* @param prodOrderMain 工单信息
* @param routingDetails 工序列表
* @param sceneId 场景ID
*/
private void batchInsertProcessExec(ProdLaunchOrder prodOrderMain,
List<RoutingDetail> routingDetails,
String sceneId) {
List<ProdProcessExec> processExecList = routingDetails.stream()
.map(detail -> createProcessExec(prodOrderMain, detail, sceneId))
.collect(Collectors.toList());
// 批量插入
if (!CollectionUtils.isEmpty(processExecList)) {
prodProcessExecService.saveBatch(processExecList); // 假设MyBatis-Plus支持批量插入
}
}
/**
* 创建工序执行记录
*
* @param prodOrderMain 工单信息
* @param detail 工序详情
* @param sceneId 场景ID
* @return 工序执行记录
*/
private ProdProcessExec createProcessExec(ProdLaunchOrder prodOrderMain,
RoutingDetail detail,
String sceneId) {
ProdProcessExec prodProcessExec = new ProdProcessExec();
prodProcessExec.setExecId(UUID.randomUUID().toString().replace("-", ""));
prodProcessExec.setOrderId(prodOrderMain.getOrderId());
prodProcessExec.setProcessId(String.valueOf(detail.getId()));
prodProcessExec.setProcessNo(String.valueOf(detail.getTaskSeq()));
prodProcessExec.setProcessName(detail.getName());
prodProcessExec.setMachineId(detail.getResourceCode());
prodProcessExec.setResourceGroup(String.valueOf(detail.getResourceId()));
prodProcessExec.setPlanQty(prodOrderMain.getQuantity());
prodProcessExec.setTargetStartDate(prodOrderMain.getStartDate());
prodProcessExec.setTargetEndDate(prodOrderMain.getEndDate());
prodProcessExec.setSceneId(sceneId);
return prodProcessExec;
}
/**
* 批量生成工序关联关系
*
* @param prodOrderMains 工单ID列表
* @param sceneId 场景ID
*/
private void generateProcessRelationsBatch(List<ProdLaunchOrder> prodOrderMains, String sceneId) {
if (CollectionUtils.isEmpty(prodOrderMains)) {
log.warn("工单列表为空,跳过工序关系生成");
return;
}
generateProcessRelations(prodOrderMains, sceneId);
log.info("完成{}个工单的工序关系生成", prodOrderMains.size());
}
/**
* 生成工序关联关系
*
* @param prodOrderMains 工单列表
* @param sceneId 场景ID
*/
public void generateProcessRelations(List<ProdLaunchOrder> prodOrderMains, String sceneId) {
if (CollectionUtils.isEmpty(prodOrderMains)) {
return;
}
List<ProdOrderProcess> processRelations = new java.util.ArrayList<>();
for (ProdLaunchOrder prodOrderMain : prodOrderMains) {
try {
List<ProdOrderProcess> relations = createProcessRelations(prodOrderMain, sceneId);
processRelations.addAll(relations);
} catch (Exception e) {
log.error("生成工单[{}]工序关系失败", prodOrderMain.getOrderId(), e);
continue;
}
}
// 批量保存
if (!CollectionUtils.isEmpty(processRelations)) {
prodOrderProcessService.saveBatch(processRelations);
}
}
/**
* 创建工单工序关系
*
* @param prodOrderMain 工单信息
* @param sceneId 场景ID
* @return 工序关系列表
*/
private List<ProdOrderProcess> createProcessRelations(ProdLaunchOrder prodOrderMain, String sceneId) {
LambdaQueryWrapper<RoutingDetailConnect> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(RoutingDetailConnect::getRoutingHeaderId, prodOrderMain.getRoutingId());
List<RoutingDetailConnect> connections = routingDetailConnectService.list(wrapper);
return connections.stream()
.map(connection -> createProcessRelation(prodOrderMain, connection, sceneId))
.collect(Collectors.toList());
}
/**
* 创建单个工序关系
*
* @param prodOrderMain 工单信息
* @param connection 工序连接
* @param sceneId 场景ID
* @return 工序关系
*/
private ProdOrderProcess createProcessRelation(ProdLaunchOrder prodOrderMain,
RoutingDetailConnect connection,
String sceneId) {
ProdOrderProcess prodOrderProcess = new ProdOrderProcess();
prodOrderProcess.setSceneId(sceneId);
prodOrderProcess.setOrderId(prodOrderMain.getOrderId());
prodOrderProcess.setProcessNo(connection.getSourceoperation());
prodOrderProcess.setTargetOrderId(prodOrderMain.getOrderId());
prodOrderProcess.setTargetProcessNo(connection.getDestoperation());
return prodOrderProcess;
}
/**
* 如果值为null或空白,返回默认值
*
* @param value 原始值
* @param defaultValue 默认值
* @param <T> 类型
* @return 处理后的值
*/
private <T> T defaultIfBlank(T value, T defaultValue) {
if (value == null) {
return defaultValue;
}
if (value instanceof String && ((String) value).trim().isEmpty()) {
return defaultValue;
}
return value;
}
/**
* 如果值为null,返回默认值
*
* @param value 原始值
* @param defaultValue 默认值
* @param <T> 类型
* @return 处理后的值
*/
private <T> T defaultIfNull(T value, T defaultValue) {
return value != null ? value : defaultValue;
}
}
\ No newline at end of file
package com.aps.service.impl;
import com.aps.entity.MesHoliday;
import com.aps.mapper.MesHolidayMapper;
import com.aps.service.MesHolidayService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 节假日表 服务实现类
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-26
*/
@Service
public class MesHolidayServiceImpl extends ServiceImpl<MesHolidayMapper, MesHoliday> implements MesHolidayService {
}
package com.aps.service.impl;
import com.aps.entity.ProdEquipSpecialCal;
import com.aps.entity.EquipCapacityDef;
import com.aps.mapper.ProdEquipSpecialCalMapper;
import com.aps.service.ProdEquipSpecialCalService;
import com.aps.service.EquipCapacityDefService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;
/**
* <p>
* 设备特殊日历配置表:记录特定工位/设备在指定时间段的特殊日历规则(如节假日、维护期等) 服务实现类
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-26
*/
@Service
public class ProdEquipSpecialCalServiceImpl extends ServiceImpl<ProdEquipSpecialCalMapper, ProdEquipSpecialCal> implements ProdEquipSpecialCalService {
@Autowired
private EquipCapacityDefService equipCapacityDefService;
/**
* 从EquipCapacityDef表中复制is_deleted为0的数据到ProdEquipSpecialCal表
*/
@Override
public void copyFromEquipCapacityDef(String sceneId) {
// 查询EquipCapacityDef表中is_deleted为0的所有记录
List<EquipCapacityDef> capacityDefs = equipCapacityDefService.list();
// 过滤出is_deleted为0的记录
List<EquipCapacityDef> activeCapacityDefs = capacityDefs.stream()
.filter(e -> e.getIsDeleted() != null && e.getIsDeleted() == 0)
.collect(Collectors.toList());
// 转换对象并设置必要字段
List<ProdEquipSpecialCal> specialCals = activeCapacityDefs.stream()
.map(capacityDef -> convertToProdEquipSpecialCal(capacityDef, sceneId))
.collect(Collectors.toList());
// 批量保存到ProdEquipSpecialCal表
if (!specialCals.isEmpty()) {
this.saveBatch(specialCals);
}
}
/**
* 将EquipCapacityDef转换为ProdEquipSpecialCal
* @param capacityDef 源对象
* @return 转换后的对象
*/
private ProdEquipSpecialCal convertToProdEquipSpecialCal(EquipCapacityDef capacityDef,String sceneId) {
ProdEquipSpecialCal specialCal = new ProdEquipSpecialCal();
// 设置特定字段
specialCal.setEquipId(capacityDef.getEquipId() != null ? (int)capacityDef.getEquipId() : null);
specialCal.setEquipCode(capacityDef.getEquipCode());
specialCal.setStartDate(capacityDef.getEffectiveStartTime());
specialCal.setEndDate(capacityDef.getEffectiveEndTime());
specialCal.setEfficiencyCoeff(capacityDef.getEfficiencyCoeff() != null ?
capacityDef.getEfficiencyCoeff().longValue() : null);
specialCal.setReferenceId(capacityDef.getReferenceId());
specialCal.setReferenceName(capacityDef.getReferenceName());
specialCal.setCreatorUserId(capacityDef.getCreatorUserId());
specialCal.setCreationTime(LocalDateTime.now());
specialCal.setSceneId(sceneId);
return specialCal;
}
}
\ No newline at end of file
package com.aps.service.impl;
import com.aps.entity.ProdLaunchOrder;
import com.aps.mapper.ProdLaunchOrderMapper;
import com.aps.service.ProdLaunchOrderService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 启动订单表:记录已启动的生产订单信息,关联场景配置 服务实现类
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-14
*/
@Service
public class ProdLaunchOrderServiceImpl extends ServiceImpl<ProdLaunchOrderMapper, ProdLaunchOrder> implements ProdLaunchOrderService {
}
package com.aps.service.impl;
import com.aps.entity.ProdOrderProcess;
import com.aps.entity.RoutingDetailConnect;
import com.aps.mapper.ProdOrderProcessMapper;
import com.aps.service.ProdOrderProcessService;
import com.aps.service.RoutingDetailConnectService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* <p>
* 服务实现类
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-21
*/
@Service
public class ProdOrderProcessServiceImpl extends ServiceImpl<ProdOrderProcessMapper, ProdOrderProcess> implements ProdOrderProcessService {
}
\ No newline at end of file
package com.aps.service.impl;
import com.aps.entity.ProdProcessExec;
import com.aps.mapper.ProdProcessExecMapper;
import com.aps.service.ProdProcessExecService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 工序执行详情表:关联启动订单与工艺工序,记录工序执行核心信息 服务实现类
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-14
*/
@Service
public class ProdProcessExecServiceImpl extends ServiceImpl<ProdProcessExecMapper, ProdProcessExec> implements ProdProcessExecService {
}
\ No newline at end of file
package com.aps.service.impl;
import com.aps.entity.ProdSceneConfig;
import com.aps.mapper.ProdSceneConfigMapper;
import com.aps.service.ProdSceneConfigService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-14
*/
@Service
public class ProdSceneConfigServiceImpl extends ServiceImpl<ProdSceneConfigMapper, ProdSceneConfig> implements ProdSceneConfigService {
}
package com.aps.service.impl;
import com.aps.entity.RoutingDetailConnect;
import com.aps.mapper.RoutingDetailConnectMapper;
import com.aps.service.RoutingDetailConnectService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 工序衔接 服务实现类
* </p>
*
* @author MyBatis-Plus
* @since 2025-11-21
*/
@Service
public class RoutingDetailConnectServiceImpl extends ServiceImpl<RoutingDetailConnectMapper, RoutingDetailConnect> implements RoutingDetailConnectService {
}
<?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.aps.mapper.ApsOrderMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.aps.entity.ApsOrder">
<result column="ID" property="id" />
<result column="CREATIONTIME" property="creationtime" />
<result column="CREATORUSERID" property="creatoruserid" />
<result column="LASTMODIFICATIONTIME" property="lastmodificationtime" />
<result column="LASTMODIFIERUSERID" property="lastmodifieruserid" />
<result column="ISDELETED" property="isdeleted" />
<result column="DELETIONTIME" property="deletiontime" />
<result column="DELETERUSERID" property="deleteruserid" />
<result column="EXP1" property="exp1" />
<result column="EXP2" property="exp2" />
<result column="EXP3" property="exp3" />
<result column="EXP4" property="exp4" />
<result column="EXP5" property="exp5" />
<result column="EXP6" property="exp6" />
<result column="ZONE" property="zone" />
<result column="CUSTOMERID" property="customerid" />
<result column="CUSTOMER" property="customer" />
<result column="CODE" property="code" />
<result column="MMID" property="mmid" />
<result column="MMCODE" property="mmcode" />
<result column="MMNAME" property="mmname" />
<result column="UNIT" property="unit" />
<result column="QUANTITY" property="quantity" />
<result column="MEETQUANTITY" property="meetquantity" />
<result column="MEETRATE" property="meetrate" />
<result column="PRICE" property="price" />
<result column="DELIVERYTIME" property="deliverytime" />
<result column="STOCKID" property="stockid" />
<result column="STOCK" property="stock" />
<result column="PRIORITRY" property="prioritry" />
<result column="SERIES" property="series" />
<result column="ISINSERT" property="isinsert" />
<result column="ISLOCK" property="islock" />
<result column="PART" property="part" />
<result column="DELAY" property="delay" />
<result column="SETTLE" property="settle" />
<result column="REMARK" property="remark" />
<result column="ZONEID" property="zoneid" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
ID, CREATIONTIME, CREATORUSERID, LASTMODIFICATIONTIME, LASTMODIFIERUSERID, ISDELETED, DELETIONTIME, DELETERUSERID, EXP1, EXP2, EXP3, EXP4, EXP5, EXP6, ZONE, CUSTOMERID, CUSTOMER, CODE, MMID, MMCODE, MMNAME, UNIT, QUANTITY, MEETQUANTITY, MEETRATE, PRICE, DELIVERYTIME, STOCKID, STOCK, PRIORITRY, SERIES, ISINSERT, ISLOCK, PART, DELAY, SETTLE, REMARK, ZONEID
</sql>
</mapper>
<?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.aps.mapper.EquipCapacityDefMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.aps.entity.EquipCapacityDef">
<id column="ID" property="id" />
<result column="CREATOR_USER_ID" property="creatorUserId" />
<result column="CREATION_TIME" property="creationTime" />
<result column="LAST_MODIFIER_USER_ID" property="lastModifierUserId" />
<result column="LAST_MODIFICATION_TIME" property="lastModificationTime" />
<result column="IS_DELETED" property="isDeleted" />
<result column="DELETER_USER_ID" property="deleterUserId" />
<result column="DELETION_TIME" property="deletionTime" />
<result column="EQUIP_ID" property="equipId" />
<result column="EQUIP_CODE" property="equipCode" />
<result column="EQUIP_NAME" property="equipName" />
<result column="EFFECTIVE_START_TIME" property="effectiveStartTime" />
<result column="EFFECTIVE_END_TIME" property="effectiveEndTime" />
<result column="REFERENCE_ID" property="referenceId" />
<result column="REFERENCE_TYPE" property="referenceType" />
<result column="EFFICIENCY_COEFF" property="efficiencyCoeff" />
<result column="MIN_UTILIZATION" property="minUtilization" />
<result column="MAX_UTILIZATION" property="maxUtilization" />
<result column="REFERENCE_NAME" property="referenceName" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
ID, CREATOR_USER_ID, CREATION_TIME, LAST_MODIFIER_USER_ID, LAST_MODIFICATION_TIME, IS_DELETED, DELETER_USER_ID, DELETION_TIME, EQUIP_ID, EQUIP_CODE, EQUIP_NAME, EFFECTIVE_START_TIME, EFFECTIVE_END_TIME, REFERENCE_ID, REFERENCE_TYPE, EFFICIENCY_COEFF, MIN_UTILIZATION, MAX_UTILIZATION, REFERENCE_NAME
</sql>
</mapper>
<?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.aps.mapper.MesHolidayMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.aps.entity.MesHoliday">
<id column="ID" property="id" />
<result column="HOLIDAY_ID" property="holidayId" />
<result column="HOLIDAY_NAME" property="holidayName" />
<result column="HOLIDAY_START" property="holidayStart" />
<result column="HOLIDAY_END" property="holidayEnd" />
<result column="CREATIONTIME" property="creationtime" />
<result column="CREATORUSERID" property="creatoruserid" />
<result column="LASTMODIFICATIONTIME" property="lastmodificationtime" />
<result column="LASTMODIFIERUSERID" property="lastmodifieruserid" />
<result column="ISDELETED" property="isdeleted" />
<result column="DELETIONTIME" property="deletiontime" />
<result column="DELETERUSERID" property="deleteruserid" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
ID, HOLIDAY_ID, HOLIDAY_NAME, HOLIDAY_START, HOLIDAY_END, CREATIONTIME, CREATORUSERID, LASTMODIFICATIONTIME, LASTMODIFIERUSERID, ISDELETED, DELETIONTIME, DELETERUSERID
</sql>
</mapper>
<?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.aps.mapper.ProdEquipSpecialCalMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.aps.entity.ProdEquipSpecialCal">
<id column="SCENE_ID" property="sceneId" />
<id column="EQUIP_CODE" property="equipCode" />
<id column="START_DATE" property="startDate" />
<id column="END_DATE" property="endDate" />
<result column="SHIFT_WORK_SCHED_CODE" property="shiftWorkSchedCode" />
<result column="PERIOD_DESC" property="periodDesc" />
<result column="EQUIP_ID" property="equipId" />
<result column="EFFICIENCY_COEFF" property="efficiencyCoeff" />
<result column="REFERENCE_ID" property="referenceId" />
<result column="REFERENCE_NAME" property="referenceName" />
<result column="CREATOR_USER_ID" property="creatorUserId" />
<result column="CREATION_TIME" property="creationTime" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
SCENE_ID, EQUIP_CODE, START_DATE, END_DATE, SHIFT_WORK_SCHED_CODE, PERIOD_DESC, EQUIP_ID, EFFICIENCY_COEFF, REFERENCE_ID, REFERENCE_NAME, CREATOR_USER_ID, CREATION_TIME
</sql>
</mapper>
<?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.aps.mapper.ProdLaunchOrderMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.aps.entity.ProdLaunchOrder">
<id column="ORDER_ID" property="orderId" />
<result column="SCENE_ID" property="sceneId" />
<result column="ROUTING_ID" property="routingId" />
<result column="SERIE" property="serie" />
<result column="CREATE_USER" property="createUser" />
<result column="PRODUCT_TYPE" property="productType" />
<result column="MATERIAL_CODE" property="materialCode" />
<result column="MATERIAL_VER" property="materialVer" />
<result column="START_DATE" property="startDate" />
<result column="END_DATE" property="endDate" />
<result column="ORDER_DESC" property="orderDesc" />
<result column="ORDER_PRIORITY" property="orderPriority" />
<result column="GROUP_CODE" property="groupCode" />
<result column="COLOR_CODE" property="colorCode" />
<result column="QUANTITY" property="quantity" />
<result column="ORDER_STATUS" property="orderStatus" />
<result column="MATERIAL_ID" property="materialId" />
<result column="ROUTING_CODE" property="routingCode" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
ORDER_ID, SCENE_ID, ROUTING_ID, SERIE, CREATE_USER, PRODUCT_TYPE, MATERIAL_CODE, MATERIAL_VER, START_DATE, END_DATE, ORDER_DESC, ORDER_PRIORITY, GROUP_CODE, COLOR_CODE, QUANTITY, ORDER_STATUS, MATERIAL_ID, ROUTING_CODE
</sql>
</mapper>
<?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.aps.mapper.ProdOrderMainMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.aps.entity.ProdOrderMain">
<id column="ORDER_ID" property="orderId" />
<result column="ROUTING_ID" property="routingId" />
<result column="SERIE" property="serie" />
<result column="CREATE_USER" property="createUser" />
<result column="PRODUCT_TYPE" property="productType" />
<result column="MATERIAL_CODE" property="materialCode" />
<result column="MATERIAL_VER" property="materialVer" />
<result column="START_DATE" property="startDate" />
<result column="END_DATE" property="endDate" />
<result column="ORDER_DESC" property="orderDesc" />
<result column="ORDER_PRIORITY" property="orderPriority" />
<result column="GROUP_CODE" property="groupCode" />
<result column="COLOR_CODE" property="colorCode" />
<result column="QUANTITY" property="quantity" />
<result column="ORDER_STATUS" property="orderStatus" />
<result column="MATERIAL_ID" property="materialId" />
<result column="ROUTING_CODE" property="routingCode" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
ORDER_ID, ROUTING_ID, SERIE, CREATE_USER, PRODUCT_TYPE, MATERIAL_CODE, MATERIAL_VER, START_DATE, END_DATE, ORDER_DESC, ORDER_PRIORITY, GROUP_CODE, COLOR_CODE, QUANTITY, ORDER_STATUS, MATERIAL_ID, ROUTING_CODE
</sql>
</mapper>
<?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.aps.mapper.ProdOrderProcessMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.aps.entity.ProdOrderProcess">
<id column="SCENE_ID" property="sceneId" />
<id column="ORDER_ID" property="orderId" />
<id column="PROCESS_NO" property="processNo" />
<id column="TARGET_ORDER_ID" property="targetOrderId" />
<id column="TARGET_PROCESS_NO" property="targetProcessNo" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
SCENE_ID, ORDER_ID, PROCESS_NO, TARGET_ORDER_ID, TARGET_PROCESS_NO
</sql>
</mapper>
<?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.aps.mapper.ProdProcessExecMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.aps.entity.ProdProcessExec">
<id column="EXEC_ID" property="execId" />
<id column="SCENE_ID" property="sceneId" />
<id column="ORDER_ID" property="orderId" />
<result column="PROCESS_ID" property="processId" />
<result column="PROCESS_NO" property="processNo" />
<result column="PROCESS_NAME" property="processName" />
<result column="MACHINE_ID" property="machineId" />
<result column="RESOURCE_GROUP" property="resourceGroup" />
<result column="PLAN_QTY" property="planQty" />
<result column="ACTUAL_QTY" property="actualQty" />
<result column="PLAN_DURATION" property="planDuration" />
<result column="USED_DURATION" property="usedDuration" />
<result column="REMAIN_DURATION" property="remainDuration" />
<result column="PROCESS_STATUS" property="processStatus" />
<result column="STANDARD_CAPACITY" property="standardCapacity" />
<result column="MIN_CAPACITY" property="minCapacity" />
<result column="MAX_CAPACITY" property="maxCapacity" />
<result column="PREP_DURATION" property="prepDuration" />
<result column="CHANGE_DURATION" property="changeDuration" />
<result column="LOGICAL_ORDER" property="logicalOrder" />
<result column="TARGET_START_DATE" property="targetStartDate" />
<result column="TARGET_END_DATE" property="targetEndDate" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
EXEC_ID, SCENE_ID, ORDER_ID, PROCESS_ID, PROCESS_NO, PROCESS_NAME, MACHINE_ID, RESOURCE_GROUP, PLAN_QTY, ACTUAL_QTY, PLAN_DURATION, USED_DURATION, REMAIN_DURATION, PROCESS_STATUS, STANDARD_CAPACITY, MIN_CAPACITY, MAX_CAPACITY, PREP_DURATION, CHANGE_DURATION, LOGICAL_ORDER, TARGET_START_DATE, TARGET_END_DATE
</sql>
</mapper>
<?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.aps.mapper.ProdSceneConfigMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.aps.entity.ProdSceneConfig">
<id column="SCENE_ID" property="sceneId" />
<result column="SCENE_NAME" property="sceneName" />
<result column="SCENE_DESC" property="sceneDesc" />
<result column="CREATE_TIME" property="createTime" />
<result column="SCENE_OWNER" property="sceneOwner" />
<result column="SCENE_STATUS" property="sceneStatus" />
<result column="RELATE_PLAN_ID" property="relatePlanId" />
<result column="CREATE_USER" property="createUser" />
<result column="UPDATE_TIME" property="updateTime" />
<result column="UPDATE_USER" property="updateUser" />
<result column="EXTEND1" property="extend1" />
<result column="EXTEND2" property="extend2" />
<result column="EXTEND3" property="extend3" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
SCENE_ID, SCENE_NAME, SCENE_DESC, CREATE_TIME, SCENE_OWNER, SCENE_STATUS, RELATE_PLAN_ID, CREATE_USER, UPDATE_TIME, UPDATE_USER, EXTEND1, EXTEND2, EXTEND3
</sql>
</mapper>
<?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.aps.mapper.RoutingDetailConnectMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.aps.entity.RoutingDetailConnect">
<id column="ID" property="id" />
<result column="CREATIONTIME" property="creationtime" />
<result column="CREATORUSERID" property="creatoruserid" />
<result column="LASTMODIFICATIONTIME" property="lastmodificationtime" />
<result column="LASTMODIFIERUSERID" property="lastmodifieruserid" />
<result column="ISDELETED" property="isdeleted" />
<result column="DELETIONTIME" property="deletiontime" />
<result column="DELETERUSERID" property="deleteruserid" />
<result column="DESTOPERATIONID" property="destoperationid" />
<result column="SOURCEOPERATIONID" property="sourceoperationid" />
<result column="DESTOPERATION" property="destoperation" />
<result column="SOURCEOPERATION" property="sourceoperation" />
<result column="EXP1" property="exp1" />
<result column="EXP2" property="exp2" />
<result column="EXP3" property="exp3" />
<result column="EXP4" property="exp4" />
<result column="ROUTING_HEADER_ID" property="routingHeaderId" />
<result column="STR_ID" property="strId" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
ID, CREATIONTIME, CREATORUSERID, LASTMODIFICATIONTIME, LASTMODIFIERUSERID, ISDELETED, DELETIONTIME, DELETERUSERID, DESTOPERATIONID, SOURCEOPERATIONID, DESTOPERATION, SOURCEOPERATION, EXP1, EXP2, EXP3, EXP4, ROUTING_HEADER_ID, STR_ID
</sql>
</mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment