admin
2024-11-22 5f5d7234dd98684c286e5984ffa78b5bc3c3e1cb
Merge remote-tracking branch 'origin/master'
已添加17个文件
已修改5个文件
2171 ■■■■■ 文件已修改
billion-admin/src/main/resources/application.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-framework/src/main/java/com/billion/framework/config/MyMetaObjectHandler.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-framework/src/main/java/com/billion/framework/config/MybatisPlusConfig.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/common/BaseEntity.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/common/Constant.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/da/controller/DaParamCollectionController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/om/controller/OmOrderSchedulingController.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/om/controller/OmProductionOrderInfoController.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/om/domain/OmOrderScheduling.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/om/domain/OmProductionOrderInfo.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/om/mapper/OmOrderSchedulingMapper.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/om/mapper/OmProductionOrderInfoMapper.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/om/service/IOmOrderSchedulingService.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/om/service/IOmProductionOrderInfoService.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/om/service/impl/OmOrderSchedulingServiceImpl.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/java/com/billion/main/om/service/impl/OmProductionOrderInfoServiceImpl.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/resources/mapper/om/OmOrderSchedulingMapper.xml 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-main/src/main/resources/mapper/om/OmProductionOrderInfoMapper.xml 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-ui/src/api/main/om/info.js 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-ui/src/api/main/om/scheduling.js 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-ui/src/views/main/om/info/index.vue 506 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-ui/src/views/main/om/scheduling/index.vue 424 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
billion-admin/src/main/resources/application.yml
@@ -141,9 +141,9 @@
      capitalMode: false
      logicDeleteField: del_flag
      # é€»è¾‘已删除值
      logicDeleteValue: 1
      logicDeleteValue: "1"
      # é€»è¾‘未删除值
      logicNotDeleteValue: 0
      logicNotDeleteValue: "0"
      insertStrategy: NOT_NULL
      updateStrategy: NOT_NULL
billion-framework/src/main/java/com/billion/framework/config/MyMetaObjectHandler.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,74 @@
package com.billion.framework.config;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.billion.common.core.domain.model.LoginUser;
import com.billion.common.utils.SecurityUtils;
import com.billion.common.utils.StringUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.Date;
/**
 * ç®€ä»‹è¯´æ˜Ž:Mybatis-Plus配置
 *
 * @author: Eric
 * @date: 2024-11-20 15:46:49
 * @version: 1.0
 */
@Component
public class MyMetaObjectHandler implements MetaObjectHandler{
    @Override
    public void insertFill(MetaObject metaObject) {
        // æ£€æŸ¥æ˜¯å¦æœ‰åä¸ºcreateTime的字段,如果有则设置当前时间
        boolean hasCreateTime = metaObject.hasSetter("createTime");
        if (hasCreateTime) {
            metaObject.setValue("createTime", new Date());
        }
        // æ£€æŸ¥æ˜¯å¦æœ‰åä¸ºupdateTime的字段,如果有则设置当前时间
        boolean hasUpdateTime = metaObject.hasSetter("updateTime");
        if (hasUpdateTime) {
            metaObject.setValue("updateTime", new Date());
        }
        LoginUser securityUser = SecurityUtils.getLoginUser();
        if (ObjectUtils.isNotEmpty(securityUser)){
            String username = securityUser.getUsername();
            if (StringUtils.isNoneBlank(username)){
                boolean hasCreateBy = metaObject.hasSetter("createBy");
                if (hasCreateBy){
                    metaObject.setValue("createBy", username);
                }
                boolean hasUpdateBy = metaObject.hasSetter("updateBy");
                if (hasUpdateBy){
                    metaObject.setValue("updateBy", username);
                }
            }
        }
    }
    @Override
    public void updateFill(MetaObject metaObject) {
        // æ£€æŸ¥æ˜¯å¦æœ‰åä¸ºupdateTime的字段,如果有则设置当前时间
        boolean hasUpdateTime = metaObject.hasSetter("updateTime");
        if (hasUpdateTime) {
            metaObject.setValue("updateTime", new Date());
        }
        LoginUser securityUser = SecurityUtils.getLoginUser();
        if (ObjectUtils.isNotEmpty(securityUser)){
            String username = securityUser.getUsername();
            if (StringUtils.isNoneBlank(username)){
                boolean hasUpdateBy = metaObject.hasSetter("updateBy");
                if (hasUpdateBy){
                    metaObject.setValue("updateBy", username);
                }
            }
        }
    }
}
billion-framework/src/main/java/com/billion/framework/config/MybatisPlusConfig.java
@@ -1,6 +1,7 @@
package com.billion.framework.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
@@ -31,6 +32,13 @@
        return interceptor;
    }
    @Bean
    public GlobalConfig globalConfig() {
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setMetaObjectHandler(new MyMetaObjectHandler()); // è®¾ç½®MetaObjectHandler
        return globalConfig;
    }
    /**
     * åˆ†é¡µæ’件,自动识别数据库类型 https://baomidou.com/guide/interceptor-pagination.html
     */
billion-main/src/main/java/com/billion/main/common/BaseEntity.java
@@ -1,6 +1,9 @@
package com.billion.main.common;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
@@ -18,20 +21,25 @@
    private Long id;
    /** åˆ›å»ºè€… */
    @TableField(fill = FieldFill.INSERT)
    private String createBy;
    /** åˆ›å»ºæ—¶é—´ */
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    /** æ›´æ–°è€… */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateBy;
    /** æ›´æ–°æ—¶é—´ */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
    private Integer deleted;
    @TableLogic
    private String delFlag;
}
billion-main/src/main/java/com/billion/main/common/Constant.java
@@ -10,4 +10,11 @@
public class Constant {
    /**
     * å·¥å•çŠ¶æ€ï¼ˆ1未开始2生产中3已完成4已关闭)
     */
    public static final String ORDER_STATUS_NOT_START = "1";
    public static final String ORDER_STATUS_IN_PRODUCT = "2";
    public static final String ORDER_STATUS_FINISHED = "3";
    public static final String ORDER_STATUS_CLOSED = "4";
}
billion-main/src/main/java/com/billion/main/da/controller/DaParamCollectionController.java
@@ -2,6 +2,8 @@
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.billion.main.da.service.IDaParamCollectionService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@@ -17,7 +19,6 @@
import com.billion.common.core.domain.AjaxResult;
import com.billion.common.enums.BusinessType;
import com.billion.main.da.domain.DaParamCollection;
import com.billion.main.da.service.IDaParamCollectionService;
import com.billion.common.utils.poi.ExcelUtil;
import com.billion.common.core.page.TableDataInfo;
billion-main/src/main/java/com/billion/main/om/controller/OmOrderSchedulingController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,98 @@
package com.billion.main.om.controller;
import com.billion.common.annotation.Log;
import com.billion.common.core.controller.BaseController;
import com.billion.common.core.domain.AjaxResult;
import com.billion.common.core.page.TableDataInfo;
import com.billion.common.enums.BusinessType;
import com.billion.common.utils.poi.ExcelUtil;
import com.billion.main.om.domain.OmOrderScheduling;
import com.billion.main.om.service.IOmOrderSchedulingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * è®¢å•æŽ’产Controller
 *
 * @author Billion
 * @date 2024-11-20
 */
@RestController
@RequestMapping("/main/scheduling")
public class OmOrderSchedulingController extends BaseController
{
    @Autowired
    private IOmOrderSchedulingService omOrderSchedulingService;
    /**
     * æŸ¥è¯¢è®¢å•æŽ’产列表
     */
    @PreAuthorize("@ss.hasPermi('main:scheduling:list')")
    @GetMapping("/list")
    public TableDataInfo list(OmOrderScheduling omOrderScheduling)
    {
        startPage();
        List<OmOrderScheduling> list = omOrderSchedulingService.selectOmOrderSchedulingList(omOrderScheduling);
        return getDataTable(list);
    }
    /**
     * å¯¼å‡ºè®¢å•æŽ’产列表
     */
    @PreAuthorize("@ss.hasPermi('main:scheduling:export')")
    @Log(title = "订单排产", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, OmOrderScheduling omOrderScheduling)
    {
        List<OmOrderScheduling> list = omOrderSchedulingService.selectOmOrderSchedulingList(omOrderScheduling);
        ExcelUtil<OmOrderScheduling> util = new ExcelUtil<OmOrderScheduling>(OmOrderScheduling.class);
        util.exportExcel(response, list, "订单排产数据");
    }
    /**
     * èŽ·å–订单排产详细信息
     */
    @PreAuthorize("@ss.hasPermi('main:scheduling:query')")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id)
    {
        return success(omOrderSchedulingService.selectOmOrderSchedulingById(id));
    }
    /**
     * æ–°å¢žè®¢å•æŽ’产
     */
    @PreAuthorize("@ss.hasPermi('main:scheduling:add')")
    @Log(title = "订单排产", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody OmOrderScheduling omOrderScheduling)
    {
        return toAjax(omOrderSchedulingService.insertOmOrderScheduling(omOrderScheduling));
    }
    /**
     * ä¿®æ”¹è®¢å•æŽ’产
     */
    @PreAuthorize("@ss.hasPermi('main:scheduling:edit')")
    @Log(title = "订单排产", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody OmOrderScheduling omOrderScheduling)
    {
        return toAjax(omOrderSchedulingService.updateOmOrderScheduling(omOrderScheduling));
    }
    /**
     * åˆ é™¤è®¢å•æŽ’产
     */
    @PreAuthorize("@ss.hasPermi('main:scheduling:remove')")
    @Log(title = "订单排产", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable Long[] ids)
    {
        return toAjax(omOrderSchedulingService.deleteOmOrderSchedulingByIds(ids));
    }
}
billion-main/src/main/java/com/billion/main/om/controller/OmProductionOrderInfoController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,106 @@
package com.billion.main.om.controller;
import com.billion.common.annotation.Log;
import com.billion.common.core.controller.BaseController;
import com.billion.common.core.domain.AjaxResult;
import com.billion.common.core.domain.R;
import com.billion.common.core.page.TableDataInfo;
import com.billion.common.enums.BusinessType;
import com.billion.common.utils.poi.ExcelUtil;
import com.billion.main.om.domain.OmProductionOrderInfo;
import com.billion.main.om.service.IOmProductionOrderInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.stream.Collectors;
/**
 * ç”Ÿäº§å·¥å•Controller
 *
 * @author Billion
 * @date 2024-11-20
 */
@RestController
@RequestMapping("/main/info")
public class OmProductionOrderInfoController extends BaseController
{
    @Autowired
    private IOmProductionOrderInfoService OmProductionOrderInfoService;
    /**
     * æŸ¥è¯¢ç”Ÿäº§å·¥å•åˆ—表
     */
    @PreAuthorize("@ss.hasPermi('main:info:list')")
    @GetMapping("/list")
    public TableDataInfo list(OmProductionOrderInfo OmProductionOrderInfo)
    {
        startPage();
        List<OmProductionOrderInfo> list = OmProductionOrderInfoService.selectOmProductionOrderInfoList(OmProductionOrderInfo);
        return getDataTable(list);
    }
    @GetMapping("/getOrderList")
    public R getOrderList(){
        List<String> collect = OmProductionOrderInfoService.list().stream().map(OmProductionOrderInfo::getWorkOrderNo).collect(Collectors.toList());
        return R.ok(collect);
    }
    /**
     * å¯¼å‡ºç”Ÿäº§å·¥å•åˆ—表
     */
    @PreAuthorize("@ss.hasPermi('main:info:export')")
    @Log(title = "生产工单", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, OmProductionOrderInfo OmProductionOrderInfo)
    {
        List<OmProductionOrderInfo> list = OmProductionOrderInfoService.selectOmProductionOrderInfoList(OmProductionOrderInfo);
        ExcelUtil<OmProductionOrderInfo> util = new ExcelUtil<OmProductionOrderInfo>(OmProductionOrderInfo.class);
        util.exportExcel(response, list, "生产工单数据");
    }
    /**
     * èŽ·å–生产工单详细信息
     */
    @PreAuthorize("@ss.hasPermi('main:info:query')")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id)
    {
        return success(OmProductionOrderInfoService.selectOmProductionOrderInfoById(id));
    }
    /**
     * æ–°å¢žç”Ÿäº§å·¥å•
     */
    @PreAuthorize("@ss.hasPermi('main:info:add')")
    @Log(title = "生产工单", businessType = BusinessType.INSERT)
    @PostMapping
    public void add(@RequestBody OmProductionOrderInfo OmProductionOrderInfo)
    {
        OmProductionOrderInfoService.insertOmProductionOrderInfo(OmProductionOrderInfo);
    }
    /**
     * ä¿®æ”¹ç”Ÿäº§å·¥å•
     */
    @PreAuthorize("@ss.hasPermi('main:info:edit')")
    @Log(title = "生产工单", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody OmProductionOrderInfo OmProductionOrderInfo)
    {
        return toAjax(OmProductionOrderInfoService.updateOmProductionOrderInfo(OmProductionOrderInfo));
    }
    /**
     * åˆ é™¤ç”Ÿäº§å·¥å•
     */
    @PreAuthorize("@ss.hasPermi('main:info:remove')")
    @Log(title = "生产工单", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable Long[] ids)
    {
        return toAjax(OmProductionOrderInfoService.deleteOmProductionOrderInfoByIds(ids));
    }
}
billion-main/src/main/java/com/billion/main/om/domain/OmOrderScheduling.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
package com.billion.main.om.domain;
import com.billion.common.annotation.Excel;
import com.billion.common.core.domain.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
 * è®¢å•æŽ’产对象 om_order_scheduling
 *
 * @author Billion
 * @date 2024-11-20
 */
@Data
public class OmOrderScheduling extends BaseEntity
{
    private static final long serialVersionUID = 1L;
    /** ID */
    private Long id;
    /** å·¥å•ç¼–号 */
    @Excel(name = "工单编号")
    private String workOrderNo;
    /** æ€»æˆåºåˆ—号 */
    @Excel(name = "总成序列号")
    private String sfcCode;
    /** äº§å“ç¼–码 */
    @Excel(name = "产品编码")
    private String productCode;
    /** ä¸Šçº¿æ—¶é—´ */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "上线时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date onlineTime;
    /** ä¸‹çº¿æ—¶é—´ */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "下线时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date offlineTime;
    /** è´¨é‡çŠ¶æ€(1合格,2不合格) */
    @Excel(name = "质量状态(1合格,2不合格)")
    private String qualityStatus;
    /** çŠ¶æ€(1未开始,2执行中,3已完成) */
    @Excel(name = "状态(1未开始,2执行中,3已完成)")
    private String status;
    /** å¤‡æ³¨ */
    @Excel(name = "备注")
    private String remarks;
}
billion-main/src/main/java/com/billion/main/om/domain/OmProductionOrderInfo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,57 @@
package com.billion.main.om.domain;
import com.billion.common.annotation.Excel;
import com.billion.main.common.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
 * ç”Ÿäº§å·¥å•å¯¹è±¡ om_production_order_info
 *
 * @author Billion
 * @date 2024-11-20
 */
@Data
public class OmProductionOrderInfo extends BaseEntity
{
    /** å·¥å•ç¼–号 */
    @Excel(name = "工单编号")
    private String workOrderNo;
    /** è®¢å•ç¼–号 */
    @Excel(name = "订单编号")
    private String salesOrderCode;
    /** äº§å“ç¼–号 */
    @Excel(name = "产品编号")
    private String productCode;
    /** äº§çº¿ç¼–号 */
    @Excel(name = "产线编号")
    private String lineCode;
    /** è®¡åˆ’数量 */
    @Excel(name = "计划数量")
    private Long planQty;
    /** è®¡åˆ’开始时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "计划开始时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date planStartTime;
    /** è®¡åˆ’结束时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "计划结束时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date planEndTime;
    /** å·¥å•çŠ¶æ€ï¼ˆ1未开始2生产中3已完成4已关闭) */
    @Excel(name = "工单状态", readConverterExp = "1=未开始2生产中3已完成4已关闭")
    private String orderStatus;
    /** å¤‡æ³¨ */
    @Excel(name = "备注")
    private String remarks;
}
billion-main/src/main/java/com/billion/main/om/mapper/OmOrderSchedulingMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
package com.billion.main.om.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.billion.main.om.domain.OmOrderScheduling;
import java.util.List;
/**
 * è®¢å•æŽ’产Mapper接口
 *
 * @author Billion
 * @date 2024-11-20
 */
public interface OmOrderSchedulingMapper extends BaseMapper<OmOrderScheduling>
{
    /**
     * æŸ¥è¯¢è®¢å•æŽ’产
     *
     * @param id è®¢å•æŽ’产主键
     * @return è®¢å•æŽ’产
     */
    public OmOrderScheduling selectOmOrderSchedulingById(Long id);
    /**
     * æŸ¥è¯¢è®¢å•æŽ’产列表
     *
     * @param omOrderScheduling è®¢å•æŽ’产
     * @return è®¢å•æŽ’产集合
     */
    public List<OmOrderScheduling> selectOmOrderSchedulingList(OmOrderScheduling omOrderScheduling);
    /**
     * æ–°å¢žè®¢å•æŽ’产
     *
     * @param omOrderScheduling è®¢å•æŽ’产
     * @return ç»“æžœ
     */
    public int insertOmOrderScheduling(OmOrderScheduling omOrderScheduling);
    /**
     * ä¿®æ”¹è®¢å•æŽ’产
     *
     * @param omOrderScheduling è®¢å•æŽ’产
     * @return ç»“æžœ
     */
    public int updateOmOrderScheduling(OmOrderScheduling omOrderScheduling);
    /**
     * åˆ é™¤è®¢å•æŽ’产
     *
     * @param id è®¢å•æŽ’产主键
     * @return ç»“æžœ
     */
    public int deleteOmOrderSchedulingById(Long id);
    /**
     * æ‰¹é‡åˆ é™¤è®¢å•æŽ’产
     *
     * @param ids éœ€è¦åˆ é™¤çš„数据主键集合
     * @return ç»“æžœ
     */
    public int deleteOmOrderSchedulingByIds(Long[] ids);
}
billion-main/src/main/java/com/billion/main/om/mapper/OmProductionOrderInfoMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
package com.billion.main.om.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.billion.main.om.domain.OmProductionOrderInfo;
import java.util.List;
/**
 * ç”Ÿäº§å·¥å•Mapper接口
 *
 * @author Billion
 * @date 2024-11-20
 */
public interface OmProductionOrderInfoMapper extends BaseMapper<OmProductionOrderInfo>
{
    /**
     * æŸ¥è¯¢ç”Ÿäº§å·¥å•
     *
     * @param id ç”Ÿäº§å·¥å•ä¸»é”®
     * @return ç”Ÿäº§å·¥å•
     */
    public OmProductionOrderInfo selectOmProductionOrderInfoById(Long id);
    /**
     * æŸ¥è¯¢ç”Ÿäº§å·¥å•åˆ—表
     *
     * @param omProductionOrderInfo ç”Ÿäº§å·¥å•
     * @return ç”Ÿäº§å·¥å•é›†åˆ
     */
    public List<OmProductionOrderInfo> selectOmProductionOrderInfoList(OmProductionOrderInfo omProductionOrderInfo);
    /**
     * æ–°å¢žç”Ÿäº§å·¥å•
     *
     * @param omProductionOrderInfo ç”Ÿäº§å·¥å•
     * @return ç»“æžœ
     */
    public int insertOmProductionOrderInfo(OmProductionOrderInfo omProductionOrderInfo);
    /**
     * ä¿®æ”¹ç”Ÿäº§å·¥å•
     *
     * @param omProductionOrderInfo ç”Ÿäº§å·¥å•
     * @return ç»“æžœ
     */
    public int updateOmProductionOrderInfo(OmProductionOrderInfo omProductionOrderInfo);
    /**
     * åˆ é™¤ç”Ÿäº§å·¥å•
     *
     * @param id ç”Ÿäº§å·¥å•ä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteOmProductionOrderInfoById(Long id);
    /**
     * æ‰¹é‡åˆ é™¤ç”Ÿäº§å·¥å•
     *
     * @param ids éœ€è¦åˆ é™¤çš„数据主键集合
     * @return ç»“æžœ
     */
    public int deleteOmProductionOrderInfoByIds(Long[] ids);
}
billion-main/src/main/java/com/billion/main/om/service/IOmOrderSchedulingService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
package com.billion.main.om.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.billion.main.om.domain.OmOrderScheduling;
import java.util.List;
/**
 * è®¢å•æŽ’产Service接口
 *
 * @author Billion
 * @date 2024-11-20
 */
public interface IOmOrderSchedulingService extends IService<OmOrderScheduling>
{
    /**
     * æŸ¥è¯¢è®¢å•æŽ’产
     *
     * @param id è®¢å•æŽ’产主键
     * @return è®¢å•æŽ’产
     */
    public OmOrderScheduling selectOmOrderSchedulingById(Long id);
    /**
     * æŸ¥è¯¢è®¢å•æŽ’产列表
     *
     * @param omOrderScheduling è®¢å•æŽ’产
     * @return è®¢å•æŽ’产集合
     */
    public List<OmOrderScheduling> selectOmOrderSchedulingList(OmOrderScheduling omOrderScheduling);
    /**
     * æ–°å¢žè®¢å•æŽ’产
     *
     * @param omOrderScheduling è®¢å•æŽ’产
     * @return ç»“æžœ
     */
    public int insertOmOrderScheduling(OmOrderScheduling omOrderScheduling);
    /**
     * ä¿®æ”¹è®¢å•æŽ’产
     *
     * @param omOrderScheduling è®¢å•æŽ’产
     * @return ç»“æžœ
     */
    public int updateOmOrderScheduling(OmOrderScheduling omOrderScheduling);
    /**
     * æ‰¹é‡åˆ é™¤è®¢å•æŽ’产
     *
     * @param ids éœ€è¦åˆ é™¤çš„订单排产主键集合
     * @return ç»“æžœ
     */
    public int deleteOmOrderSchedulingByIds(Long[] ids);
    /**
     * åˆ é™¤è®¢å•æŽ’产信息
     *
     * @param id è®¢å•æŽ’产主键
     * @return ç»“æžœ
     */
    public int deleteOmOrderSchedulingById(Long id);
}
billion-main/src/main/java/com/billion/main/om/service/IOmProductionOrderInfoService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
package com.billion.main.om.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.billion.main.om.domain.OmProductionOrderInfo;
import java.util.List;
/**
 * ç”Ÿäº§å·¥å•Service接口
 *
 * @author Billion
 * @date 2024-11-20
 */
public interface IOmProductionOrderInfoService extends IService<OmProductionOrderInfo>
{
    /**
     * æŸ¥è¯¢ç”Ÿäº§å·¥å•
     *
     * @param id ç”Ÿäº§å·¥å•ä¸»é”®
     * @return ç”Ÿäº§å·¥å•
     */
    public OmProductionOrderInfo selectOmProductionOrderInfoById(Long id);
    /**
     * æŸ¥è¯¢ç”Ÿäº§å·¥å•åˆ—表
     *
     * @param OmProductionOrderInfo ç”Ÿäº§å·¥å•
     * @return ç”Ÿäº§å·¥å•é›†åˆ
     */
    public List<OmProductionOrderInfo> selectOmProductionOrderInfoList(OmProductionOrderInfo OmProductionOrderInfo);
    /**
     * æ–°å¢žç”Ÿäº§å·¥å•
     *
     * @param OmProductionOrderInfo ç”Ÿäº§å·¥å•
     */
    public void insertOmProductionOrderInfo(OmProductionOrderInfo OmProductionOrderInfo);
    /**
     * ä¿®æ”¹ç”Ÿäº§å·¥å•
     *
     * @param OmProductionOrderInfo ç”Ÿäº§å·¥å•
     * @return ç»“æžœ
     */
    public int updateOmProductionOrderInfo(OmProductionOrderInfo OmProductionOrderInfo);
    /**
     * æ‰¹é‡åˆ é™¤ç”Ÿäº§å·¥å•
     *
     * @param ids éœ€è¦åˆ é™¤çš„生产工单主键集合
     * @return ç»“æžœ
     */
    public int deleteOmProductionOrderInfoByIds(Long[] ids);
    /**
     * åˆ é™¤ç”Ÿäº§å·¥å•ä¿¡æ¯
     *
     * @param id ç”Ÿäº§å·¥å•ä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteOmProductionOrderInfoById(Long id);
}
billion-main/src/main/java/com/billion/main/om/service/impl/OmOrderSchedulingServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,123 @@
package com.billion.main.om.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.billion.common.core.domain.entity.SysUser;
import com.billion.common.core.domain.model.LoginUser;
import com.billion.common.exception.ServiceException;
import com.billion.common.utils.SecurityUtils;
import com.billion.main.om.domain.OmOrderScheduling;
import com.billion.main.om.mapper.OmOrderSchedulingMapper;
import com.billion.main.om.service.IOmOrderSchedulingService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.text.MessageFormat;
import java.util.Date;
import java.util.List;
/**
 * è®¢å•æŽ’产Service业务层处理
 *
 * @author Billion
 * @date 2024-11-20
 */
@Service
public class OmOrderSchedulingServiceImpl extends ServiceImpl<OmOrderSchedulingMapper, OmOrderScheduling> implements IOmOrderSchedulingService
{
    @Resource
    private OmOrderSchedulingMapper omOrderSchedulingMapper;
    /**
     * æŸ¥è¯¢è®¢å•æŽ’产
     *
     * @param id è®¢å•æŽ’产主键
     * @return è®¢å•æŽ’产
     */
    @Override
    public OmOrderScheduling selectOmOrderSchedulingById(Long id)
    {
        return omOrderSchedulingMapper.selectOmOrderSchedulingById(id);
    }
    /**
     * æŸ¥è¯¢è®¢å•æŽ’产列表
     *
     * @param omOrderScheduling è®¢å•æŽ’产
     * @return è®¢å•æŽ’产
     */
    @Override
    public List<OmOrderScheduling> selectOmOrderSchedulingList(OmOrderScheduling omOrderScheduling)
    {
        return omOrderSchedulingMapper.selectOmOrderSchedulingList(omOrderScheduling);
    }
    /**
     * æ–°å¢žè®¢å•æŽ’产
     *
     * @param omOrderScheduling è®¢å•æŽ’产
     * @return ç»“æžœ
     */
    @Override
    public int insertOmOrderScheduling(OmOrderScheduling omOrderScheduling)
    {
        List<OmOrderScheduling> list = this.list(new LambdaQueryWrapper<OmOrderScheduling>().eq(OmOrderScheduling::getSfcCode, omOrderScheduling.getSfcCode()));
        if (CollUtil.isNotEmpty(list)){
            throw new ServiceException(MessageFormat.format("已存在总成序列号为{0}的数据",omOrderScheduling.getSfcCode()));
        }
        LoginUser loginUser = SecurityUtils.getLoginUser();
        SysUser user = loginUser.getUser();
        omOrderScheduling.setCreateTime(new Date());
        omOrderScheduling.setUpdateTime(new Date());
        omOrderScheduling.setCreateBy(user.getUserName());
        omOrderScheduling.setUpdateBy(user.getUserName());
        return omOrderSchedulingMapper.insertOmOrderScheduling(omOrderScheduling);
    }
    /**
     * ä¿®æ”¹è®¢å•æŽ’产
     *
     * @param omOrderScheduling è®¢å•æŽ’产
     * @return ç»“æžœ
     */
    @Override
    public int updateOmOrderScheduling(OmOrderScheduling omOrderScheduling)
    {
        List<OmOrderScheduling> list = this.list(new LambdaQueryWrapper<OmOrderScheduling>()
                .eq(OmOrderScheduling::getSfcCode, omOrderScheduling.getSfcCode())
                .notIn(OmOrderScheduling::getId,omOrderScheduling.getId()));
        if (CollUtil.isNotEmpty(list)){
            throw new ServiceException(MessageFormat.format("已存在总成序列号为{0}的数据",omOrderScheduling.getSfcCode()));
        }
        LoginUser loginUser = SecurityUtils.getLoginUser();
        SysUser user = loginUser.getUser();
        omOrderScheduling.setUpdateTime(new Date());
        omOrderScheduling.setUpdateBy(user.getUserName());
        return omOrderSchedulingMapper.updateOmOrderScheduling(omOrderScheduling);
    }
    /**
     * æ‰¹é‡åˆ é™¤è®¢å•æŽ’产
     *
     * @param ids éœ€è¦åˆ é™¤çš„订单排产主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteOmOrderSchedulingByIds(Long[] ids)
    {
        return omOrderSchedulingMapper.deleteOmOrderSchedulingByIds(ids);
    }
    /**
     * åˆ é™¤è®¢å•æŽ’产信息
     *
     * @param id è®¢å•æŽ’产主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteOmOrderSchedulingById(Long id)
    {
        return omOrderSchedulingMapper.deleteOmOrderSchedulingById(id);
    }
}
billion-main/src/main/java/com/billion/main/om/service/impl/OmProductionOrderInfoServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,126 @@
package com.billion.main.om.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.billion.common.core.domain.entity.SysUser;
import com.billion.common.core.domain.model.LoginUser;
import com.billion.common.exception.ServiceException;
import com.billion.common.utils.SecurityUtils;
import com.billion.main.common.BaseEntity;
import com.billion.main.om.domain.OmProductionOrderInfo;
import com.billion.main.om.mapper.OmProductionOrderInfoMapper;
import com.billion.main.om.service.IOmProductionOrderInfoService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
/**
 * ç”Ÿäº§å·¥å•Service业务层处理
 *
 * @author Billion
 * @date 2024-11-20
 */
@Service
public class OmProductionOrderInfoServiceImpl extends ServiceImpl<OmProductionOrderInfoMapper, OmProductionOrderInfo> implements IOmProductionOrderInfoService
{
    @Resource
    private OmProductionOrderInfoMapper OmProductionOrderInfoMapper;
    /**
     * æŸ¥è¯¢ç”Ÿäº§å·¥å•
     *
     * @param id ç”Ÿäº§å·¥å•ä¸»é”®
     * @return ç”Ÿäº§å·¥å•
     */
    @Override
    public OmProductionOrderInfo selectOmProductionOrderInfoById(Long id)
    {
        return OmProductionOrderInfoMapper.selectOmProductionOrderInfoById(id);
    }
    /**
     * æŸ¥è¯¢ç”Ÿäº§å·¥å•åˆ—表
     *
     * @param OmProductionOrderInfo ç”Ÿäº§å·¥å•
     * @return ç”Ÿäº§å·¥å•
     */
    @Override
    public List<OmProductionOrderInfo> selectOmProductionOrderInfoList(OmProductionOrderInfo OmProductionOrderInfo)
    {
        return OmProductionOrderInfoMapper.selectOmProductionOrderInfoList(OmProductionOrderInfo);
    }
    /**
     * æ–°å¢žç”Ÿäº§å·¥å•
     *
     * @param omProductionOrderInfo ç”Ÿäº§å·¥å•
     */
    @Override
    public void insertOmProductionOrderInfo(OmProductionOrderInfo omProductionOrderInfo)
    {
        List<OmProductionOrderInfo> checkList = this.list(new LambdaQueryWrapper<OmProductionOrderInfo>().eq(OmProductionOrderInfo::getWorkOrderNo, omProductionOrderInfo.getWorkOrderNo()));
        if (CollUtil.isNotEmpty(checkList)){
            throw new ServiceException("已存在工单编号为"+omProductionOrderInfo.getWorkOrderNo()+"的数据");
        }
        this.save(omProductionOrderInfo);
//        LoginUser loginUser = SecurityUtils.getLoginUser();
//        SysUser user = loginUser.getUser();
//        OmProductionOrderInfo.setCreateTime(new Date());
//        OmProductionOrderInfo.setUpdateTime(new Date());
//        OmProductionOrderInfo.setCreateBy(user.getUserName());
//        OmProductionOrderInfo.setUpdateBy(user.getUserName());
//        OmProductionOrderInfo.setOrderStatus(Constant.ORDER_STATUS_NOT_START);
//        return OmProductionOrderInfoMapper.insertOmProductionOrderInfo(OmProductionOrderInfo);
    }
    /**
     * ä¿®æ”¹ç”Ÿäº§å·¥å•
     *
     * @param omProductionOrderInfo ç”Ÿäº§å·¥å•
     * @return ç»“æžœ
     */
    @Override
    public int updateOmProductionOrderInfo(OmProductionOrderInfo omProductionOrderInfo)
    {
        List<OmProductionOrderInfo> checkList = this.list(new LambdaQueryWrapper<OmProductionOrderInfo>()
                .eq(OmProductionOrderInfo::getWorkOrderNo, omProductionOrderInfo.getWorkOrderNo())
                        .notIn(BaseEntity::getId,omProductionOrderInfo.getId()));
//                .stream().filter(x -> !x.getId().equals(omProductionOrderInfo.getId()))
//                .collect(Collectors.toList());
        if (CollUtil.isNotEmpty(checkList)){
            throw new ServiceException("已存在工单编号为"+omProductionOrderInfo.getWorkOrderNo()+"的数据");
        }
        LoginUser loginUser = SecurityUtils.getLoginUser();
        SysUser user = loginUser.getUser();
        omProductionOrderInfo.setUpdateTime(new Date());
        omProductionOrderInfo.setUpdateBy(user.getUserName());
        return OmProductionOrderInfoMapper.updateOmProductionOrderInfo(omProductionOrderInfo);
    }
    /**
     * æ‰¹é‡åˆ é™¤ç”Ÿäº§å·¥å•
     *
     * @param ids éœ€è¦åˆ é™¤çš„生产工单主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteOmProductionOrderInfoByIds(Long[] ids)
    {
        return OmProductionOrderInfoMapper.deleteOmProductionOrderInfoByIds(ids);
    }
    /**
     * åˆ é™¤ç”Ÿäº§å·¥å•ä¿¡æ¯
     *
     * @param id ç”Ÿäº§å·¥å•ä¸»é”®
     * @return ç»“æžœ
     */
    @Override
    public int deleteOmProductionOrderInfoById(Long id)
    {
        return OmProductionOrderInfoMapper.deleteOmProductionOrderInfoById(id);
    }
}
billion-main/src/main/resources/mapper/om/OmOrderSchedulingMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,105 @@
<?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.billion.main.om.mapper.OmOrderSchedulingMapper">
    <resultMap type="OmOrderScheduling" id="OmOrderSchedulingResult">
        <result property="id"    column="id"    />
        <result property="workOrderNo"    column="work_order_no"    />
        <result property="sfcCode"    column="sfc_code"    />
        <result property="productCode"    column="product_code"    />
        <result property="onlineTime"    column="online_time"    />
        <result property="offlineTime"    column="offline_time"    />
        <result property="qualityStatus"    column="quality_status"    />
        <result property="status"    column="status"    />
        <result property="createBy"    column="create_by"    />
        <result property="createTime"    column="create_time"    />
        <result property="updateBy"    column="update_by"    />
        <result property="updateTime"    column="update_time"    />
        <result property="remarks"    column="remarks"    />
    </resultMap>
    <sql id="selectOmOrderSchedulingVo">
        select id, work_order_no, sfc_code, product_code, online_time, offline_time, quality_status, status, create_by, create_time, update_by, update_time, remarks from om_order_scheduling
    </sql>
    <select id="selectOmOrderSchedulingList" parameterType="OmOrderScheduling" resultMap="OmOrderSchedulingResult">
        <include refid="selectOmOrderSchedulingVo"/>
        <where>
            <if test="workOrderNo != null  and workOrderNo != ''"> and work_order_no = #{workOrderNo}</if>
            <if test="sfcCode != null  and sfcCode != ''"> and sfc_code = #{sfcCode}</if>
            <if test="productCode != null  and productCode != ''"> and product_code = #{productCode}</if>
            <if test="params.beginOnlineTime != null and params.beginOnlineTime != '' and params.endOnlineTime != null and params.endOnlineTime != ''"> and online_time between #{params.beginOnlineTime} and #{params.endOnlineTime}</if>
            <if test="params.beginOfflineTime != null and params.beginOfflineTime != '' and params.endOfflineTime != null and params.endOfflineTime != ''"> and offline_time between #{params.beginOfflineTime} and #{params.endOfflineTime}</if>
            <if test="status != null  and status != ''"> and status = #{status}</if>
        </where>
    </select>
    <select id="selectOmOrderSchedulingById" parameterType="Long" resultMap="OmOrderSchedulingResult">
        <include refid="selectOmOrderSchedulingVo"/>
        where id = #{id}
    </select>
    <insert id="insertOmOrderScheduling" parameterType="OmOrderScheduling">
        insert into om_order_scheduling
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="workOrderNo != null and workOrderNo != ''">work_order_no,</if>
            <if test="sfcCode != null and sfcCode != ''">sfc_code,</if>
            <if test="productCode != null and productCode != ''">product_code,</if>
            <if test="onlineTime != null">online_time,</if>
            <if test="offlineTime != null">offline_time,</if>
            <if test="qualityStatus != null">quality_status,</if>
            <if test="status != null">status,</if>
            <if test="createBy != null">create_by,</if>
            <if test="createTime != null">create_time,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="remarks != null">remarks,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="workOrderNo != null and workOrderNo != ''">#{workOrderNo},</if>
            <if test="sfcCode != null and sfcCode != ''">#{sfcCode},</if>
            <if test="productCode != null and productCode != ''">#{productCode},</if>
            <if test="onlineTime != null">#{onlineTime},</if>
            <if test="offlineTime != null">#{offlineTime},</if>
            <if test="qualityStatus != null">#{qualityStatus},</if>
            <if test="status != null">#{status},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="remarks != null">#{remarks},</if>
         </trim>
    </insert>
    <update id="updateOmOrderScheduling" parameterType="OmOrderScheduling">
        update om_order_scheduling
        <trim prefix="SET" suffixOverrides=",">
            <if test="workOrderNo != null and workOrderNo != ''">work_order_no = #{workOrderNo},</if>
            <if test="sfcCode != null and sfcCode != ''">sfc_code = #{sfcCode},</if>
            <if test="productCode != null and productCode != ''">product_code = #{productCode},</if>
            <if test="onlineTime != null">online_time = #{onlineTime},</if>
            <if test="offlineTime != null">offline_time = #{offlineTime},</if>
            <if test="qualityStatus != null">quality_status = #{qualityStatus},</if>
            <if test="status != null">status = #{status},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="remarks != null">remarks = #{remarks},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteOmOrderSchedulingById" parameterType="Long">
        delete from om_order_scheduling where id = #{id}
    </delete>
    <delete id="deleteOmOrderSchedulingByIds" parameterType="String">
        delete from om_order_scheduling where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
</mapper>
billion-main/src/main/resources/mapper/om/OmProductionOrderInfoMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,112 @@
<?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.billion.main.om.mapper.OmProductionOrderInfoMapper">
    <resultMap type="OmProductionOrderInfo" id="OmProductionOrderInfoResult">
        <result property="id"    column="id"    />
        <result property="workOrderNo"    column="work_order_no"    />
        <result property="salesOrderCode"    column="sales_order_code"    />
        <result property="productCode"    column="product_code"    />
        <result property="lineCode"    column="line_code"    />
        <result property="planQty"    column="plan_qty"    />
        <result property="planStartTime"    column="plan_start_time"    />
        <result property="planEndTime"    column="plan_end_time"    />
        <result property="orderStatus"    column="order_status"    />
        <result property="createTime"    column="create_time"    />
        <result property="updateTime"    column="update_time"    />
        <result property="createBy"    column="create_by"    />
        <result property="updateBy"    column="update_by"    />
        <result property="remarks"    column="remarks"    />
        <result property="delFlag"    column="del_flag"    />
    </resultMap>
    <sql id="selectOmProductionOrderInfoVo">
        select id, work_order_no, sales_order_code, product_code, line_code, plan_qty, plan_start_time, plan_end_time, order_status, create_time, update_time, create_by, update_by, remarks, del_flag from om_production_order_info
    </sql>
    <select id="selectOmProductionOrderInfoList" parameterType="OmProductionOrderInfo" resultMap="OmProductionOrderInfoResult">
        <include refid="selectOmProductionOrderInfoVo"/>
        <where>
            <if test="workOrderNo != null  and workOrderNo != ''"> and work_order_no = #{workOrderNo}</if>
            <if test="salesOrderCode != null  and salesOrderCode != ''"> and sales_order_code = #{salesOrderCode}</if>
            <if test="productCode != null  and productCode != ''"> and product_code = #{productCode}</if>
            <if test="orderStatus != null  and orderStatus != ''"> and order_status = #{orderStatus}</if>
            and del_flag = "0"
        </where>
    </select>
    <select id="selectOmProductionOrderInfoById" parameterType="Long" resultMap="OmProductionOrderInfoResult">
        <include refid="selectOmProductionOrderInfoVo"/>
        where id = #{id} and del_flag = "0"
    </select>
    <insert id="insertOmProductionOrderInfo" parameterType="OmProductionOrderInfo" useGeneratedKeys="true" keyProperty="id">
        insert into om_production_order_info
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="workOrderNo != null and workOrderNo != ''">work_order_no,</if>
            <if test="salesOrderCode != null and salesOrderCode != ''">sales_order_code,</if>
            <if test="productCode != null and productCode != ''">product_code,</if>
            <if test="lineCode != null and lineCode != ''">line_code,</if>
            <if test="planQty != null">plan_qty,</if>
            <if test="planStartTime != null">plan_start_time,</if>
            <if test="planEndTime != null">plan_end_time,</if>
            <if test="orderStatus != null">order_status,</if>
            <if test="createTime != null">create_time,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="createBy != null">create_by,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="remarks != null">remarks,</if>
            <if test="delFlag != null">del_flag,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="workOrderNo != null and workOrderNo != ''">#{workOrderNo},</if>
            <if test="salesOrderCode != null and salesOrderCode != ''">#{salesOrderCode},</if>
            <if test="productCode != null and productCode != ''">#{productCode},</if>
            <if test="lineCode != null and lineCode != ''">#{lineCode},</if>
            <if test="planQty != null">#{planQty},</if>
            <if test="planStartTime != null">#{planStartTime},</if>
            <if test="planEndTime != null">#{planEndTime},</if>
            <if test="orderStatus != null">#{orderStatus},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="remarks != null">#{remarks},</if>
            <if test="delFlag != null">#{delFlag},</if>
         </trim>
    </insert>
    <update id="updateOmProductionOrderInfo" parameterType="OmProductionOrderInfo">
        update om_production_order_info
        <trim prefix="SET" suffixOverrides=",">
            <if test="workOrderNo != null and workOrderNo != ''">work_order_no = #{workOrderNo},</if>
            <if test="salesOrderCode != null and salesOrderCode != ''">sales_order_code = #{salesOrderCode},</if>
            <if test="productCode != null and productCode != ''">product_code = #{productCode},</if>
            <if test="lineCode != null and lineCode != ''">line_code = #{lineCode},</if>
            <if test="planQty != null">plan_qty = #{planQty},</if>
            <if test="planStartTime != null">plan_start_time = #{planStartTime},</if>
            <if test="planEndTime != null">plan_end_time = #{planEndTime},</if>
            <if test="orderStatus != null">order_status = #{orderStatus},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="remarks != null">remarks = #{remarks},</if>
            <if test="delFlag != null">del_flag = #{delFlag},</if>
        </trim>
        where id = #{id}
    </update>
    <update id="deleteOmProductionOrderInfoById" parameterType="Long">
        update om_production_order_info set del_flag = "1" where id = #{id}
    </update>
    <update id="deleteOmProductionOrderInfoByIds" parameterType="String">
        update om_production_order_info set del_flag = "1" where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </update>
</mapper>
billion-ui/src/api/main/om/info.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,51 @@
import request from '@/utils/request'
// æŸ¥è¯¢ç”Ÿäº§å·¥å•åˆ—表
export function listInfo(query) {
  return request({
    url: '/main/info/list',
    method: 'get',
    params: query
  })
}
export function getOrderList() {
  return request({
    url: '/main/info/getOrderList',
    method: 'get',
  })
}
// æŸ¥è¯¢ç”Ÿäº§å·¥å•è¯¦ç»†
export function getInfo(id) {
  return request({
    url: '/main/info/' + id,
    method: 'get'
  })
}
// æ–°å¢žç”Ÿäº§å·¥å•
export function addInfo(data) {
  return request({
    url: '/main/info',
    method: 'post',
    data: data
  })
}
// ä¿®æ”¹ç”Ÿäº§å·¥å•
export function updateInfo(data) {
  return request({
    url: '/main/info',
    method: 'put',
    data: data
  })
}
// åˆ é™¤ç”Ÿäº§å·¥å•
export function delInfo(id) {
  return request({
    url: '/main/info/' + id,
    method: 'delete'
  })
}
billion-ui/src/api/main/om/scheduling.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
import request from '@/utils/request'
// æŸ¥è¯¢è®¢å•æŽ’产列表
export function listScheduling(query) {
  return request({
    url: '/main/scheduling/list',
    method: 'get',
    params: query
  })
}
// æŸ¥è¯¢è®¢å•æŽ’产详细
export function getScheduling(id) {
  return request({
    url: '/main/scheduling/' + id,
    method: 'get'
  })
}
// æ–°å¢žè®¢å•æŽ’产
export function addScheduling(data) {
  return request({
    url: '/main/scheduling',
    method: 'post',
    data: data
  })
}
// ä¿®æ”¹è®¢å•æŽ’产
export function updateScheduling(data) {
  return request({
    url: '/main/scheduling',
    method: 'put',
    data: data
  })
}
// åˆ é™¤è®¢å•æŽ’产
export function delScheduling(id) {
  return request({
    url: '/main/scheduling/' + id,
    method: 'delete'
  })
}
billion-ui/src/views/main/om/info/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,506 @@
<template>
  <div class="app-container">
    <div>
      <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="90px">
        <el-form-item label="工单编号" prop="workOrderNo">
          <el-input
            v-model="queryParams.workOrderNo"
            placeholder="请输入工单编号"
            clearable
            @keyup.enter.native="handleQuery"
          />
        </el-form-item>
        <el-form-item label="订单编号" prop="salesOrderCode">
          <el-input
            v-model="queryParams.salesOrderCode"
            placeholder="请输入订单编号"
            clearable
            @keyup.enter.native="handleQuery"
          />
        </el-form-item>
        <el-form-item label="产品编号" prop="productCode">
          <el-input
            v-model="queryParams.productCode"
            placeholder="请输入产品编号"
            clearable
            @keyup.enter.native="handleQuery"
          />
        </el-form-item>
        <el-form-item label="工单状态" prop="orderStatus">
          <el-select v-model="queryParams.orderStatus" placeholder="请选择工单状态" clearable>
            <el-option
              v-for="dict in dict.type.order_status"
              :key="dict.value"
              :label="dict.label"
              :value="dict.value"
            />
          </el-select>
        </el-form-item>
        <el-form-item style="float: right; margin-right: 90px">
          <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
          <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
        </el-form-item>
      </el-form>
    </div>
    <div style="width: 600px">
      <el-row :gutter="10" class="mb8" >
        <el-col :span="1.5">
          <el-button
            type="primary"
            plain
            icon="el-icon-plus"
            size="mini"
            @click="handleAdd"
            v-hasPermi="['main:info:add']"
          >新增</el-button>
        </el-col>
        <el-col :span="1.5">
          <el-button
            type="success"
            plain
            icon="el-icon-edit"
            size="mini"
            :disabled="single"
            @click="handleUpdate"
            v-hasPermi="['main:info:edit']"
          >修改</el-button>
        </el-col>
        <el-col :span="1.5">
          <el-button
            type="danger"
            plain
            icon="el-icon-delete"
            size="mini"
            :disabled="multiple"
            @click="handleDelete"
            v-hasPermi="['main:info:remove']"
          >删除</el-button>
        </el-col>
        <el-col :span="1.5">
          <el-button
            type="warning"
            plain
            icon="el-icon-download"
            size="mini"
            @click="handleExport"
            v-hasPermi="['main:info:export']"
          >导出</el-button>
        </el-col>
        <el-col :span="1.5">
          <el-button
            type="primary"
            plain
            icon="el-icon-receiving"
            size="mini"
            @click="handleReceive"
          >接收工单</el-button>
        </el-col>
        <el-col :span="1.5">
          <el-button
            type="primary"
            plain
            :disabled="multiple"
            icon="el-icon-magic-stick"
            size="mini"
            @click="handleCreate"
          >生成</el-button>
        </el-col>
        <!--      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>-->
      </el-row>
    </div>
    <el-table v-loading="loading" :data="infoList" @selection-change="handleSelectionChange">
      <el-table-column type="selection" width="55" align="center" />
      <el-table-column label="工单编号" align="center" prop="workOrderNo">
        <template slot-scope="scope">
          <a style="color: #7099F9"  @click="orderDetail(scope.row.workOrderNo)" >{{scope.row.workOrderNo}}
          </a>
<!--          <div @click="orderDetail(scope.row.workOrderNo)">{{scope.row.workOrderNo}}</div>-->
        </template>
      </el-table-column>
      <el-table-column label="订单编号" align="center" prop="salesOrderCode" />
      <el-table-column label="产品编号" align="center" prop="productCode" />
      <el-table-column label="产线编号" align="center" prop="lineCode" />
      <el-table-column label="计划数量" align="center" prop="planQty" />
      <el-table-column label="计划开始时间" align="center" prop="planStartTime" width="120">
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.planStartTime, '{y}-{m}-{d}') }}</span>
        </template>
      </el-table-column>
      <el-table-column label="计划结束时间" align="center" prop="planEndTime" width="120">
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.planEndTime, '{y}-{m}-{d}') }}</span>
        </template>
      </el-table-column>
      <el-table-column label="工单状态" align="center" prop="orderStatus">
        <template slot-scope="scope">
          <dict-tag :options="dict.type.order_status" :value="scope.row.orderStatus"/>
        </template>
      </el-table-column>
      <el-table-column label="更新时间" align="center" prop="updateTime" width="180">
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
        </template>
      </el-table-column>
      <el-table-column label="更新用户" align="center" prop="updateBy" />
      <el-table-column label="备注" width="180px" show-overflow-tooltip align="center" prop="remarks" />
<!--      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">-->
<!--        <template slot-scope="scope">-->
<!--          <el-button-->
<!--            size="mini"-->
<!--            type="text"-->
<!--            icon="el-icon-edit"-->
<!--            @click="handleUpdate(scope.row)"-->
<!--            v-hasPermi="['main:info:edit']"-->
<!--          >修改</el-button>-->
<!--          <el-button-->
<!--            size="mini"-->
<!--            type="text"-->
<!--            icon="el-icon-delete"-->
<!--            @click="handleDelete(scope.row)"-->
<!--            v-hasPermi="['main:info:remove']"-->
<!--          >删除</el-button>-->
<!--        </template>-->
<!--      </el-table-column>-->
    </el-table>
    <pagination
      v-show="total>0"
      :total="total"
      :page.sync="queryParams.pageNum"
      :limit.sync="queryParams.pageSize"
      @pagination="getList"
    />
    <!-- æ·»åŠ æˆ–修改生产工单对话框 -->
    <el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
      <el-form ref="form" :model="form" :rules="rules" label-width="120px">
        <el-form-item label="工单编号" prop="workOrderNo">
          <el-input v-model="form.workOrderNo" placeholder="请输入工单编号" />
        </el-form-item>
        <el-form-item label="订单编号" prop="salesOrderCode">
          <el-input v-model="form.salesOrderCode" placeholder="请输入订单编号" />
        </el-form-item>
        <el-form-item label="产品编号" prop="productCode">
          <el-input v-model="form.productCode" placeholder="请输入产品编号" />
        </el-form-item>
        <el-form-item label="产线编号" prop="lineCode">
          <el-input v-model="form.lineCode" placeholder="请输入产线编号" />
        </el-form-item>
        <el-form-item label="计划数量" prop="planQty">
          <el-input v-model="form.planQty" placeholder="请输入计划数量" />
        </el-form-item>
        <el-form-item label="计划开始时间" prop="planStartTime">
          <el-date-picker clearable
            v-model="form.planStartTime"
            type="date"
            value-format="yyyy-MM-dd"
            placeholder="请选择计划开始时间">
          </el-date-picker>
        </el-form-item>
        <el-form-item label="计划结束时间" prop="planEndTime">
          <el-date-picker clearable
            v-model="form.planEndTime"
            type="date"
            value-format="yyyy-MM-dd"
            placeholder="请选择计划结束时间">
          </el-date-picker>
        </el-form-item>
        <el-form-item label="工单状态" prop="orderStatus" v-if = updateFlag>
          <el-radio-group v-model="form.orderStatus">
            <el-radio
              v-for="dict in dict.type.order_status"
              :key="dict.value"
              :label="dict.value"
            >{{dict.label}}</el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item label="备注" prop="remarks">
          <el-input
            type="textarea"
            placeholder="请输入备注"
            v-model="form.remarks"
            maxlength="30"
            show-word-limit
          >
          </el-input>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitForm">ç¡® å®š</el-button>
        <el-button @click="cancel">取 æ¶ˆ</el-button>
      </div>
    </el-dialog>
    <el-dialog
      title="工单详情"
      :visible.sync="detailVisible"
      width="80%"
      center>
      <el-table v-loading="detailLoading" :data="schedulingList">
        <el-table-column label="工单编号" align="center" prop="workOrderNo" />
        <el-table-column label="总成序列号" width="180px" align="center" prop="sfcCode" />
        <el-table-column label="产品编码" align="center" prop="productCode" />
        <el-table-column label="上线时间" align="center" prop="onlineTime" width="180">
          <template slot-scope="scope">
            <span>{{ parseTime(scope.row.onlineTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
          </template>
        </el-table-column>
        <el-table-column label="下线时间" align="center" prop="offlineTime" width="180">
          <template slot-scope="scope">
            <span>{{ parseTime(scope.row.offlineTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
          </template>
        </el-table-column>
        <el-table-column label="质量状态" align="center" prop="qualityStatus">
          <template slot-scope="scope">
            <dict-tag :options="dict.type.product_status" :value="scope.row.qualityStatus"/>
          </template>
        </el-table-column>
        <el-table-column label="状态" align="center" prop="status">
          <template slot-scope="scope">
            <dict-tag :options="dict.type.status" :value="scope.row.status"/>
          </template>
        </el-table-column>
        <el-table-column label="更新用户" align="center" prop="updateBy" />
        <el-table-column label="更新时间" align="center" prop="updateTime" width="180">
          <template slot-scope="scope">
            <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
          </template>
        </el-table-column>
        <el-table-column label="备注" width="180px" show-overflow-tooltip align="center" prop="remarks" />
      </el-table>
      <pagination
        v-show="detailTotal>0"
        :total="detailTotal"
        :page.sync="queryDetailParams.pageNum"
        :limit.sync="queryDetailParams.pageSize"
        @pagination="getDetail"
      />
    <span slot="footer" class="dialog-footer">
<!--    <el-button @click="detailVisible = false">取 æ¶ˆ</el-button>-->
<!--    <el-button type="primary" @click="detailVisible = false">ç¡® å®š</el-button>-->
  </span>
    </el-dialog>
  </div>
</template>
<script>
import { listInfo, getInfo, delInfo, addInfo, updateInfo } from "@/api/main/om/info";
import {listScheduling} from "@/api/main/om/scheduling";
export default {
  name: "Info",
  dicts: ['order_status','product_status', 'status'],
  data() {
    return {
      schedulingList: [],
      detailVisible : false,
      addFlag : false,
      updateFlag : false,
      // é®ç½©å±‚
      loading: true,
      detailLoading: true,
      // é€‰ä¸­æ•°ç»„
      ids: [],
      // éžå•ä¸ªç¦ç”¨
      single: true,
      // éžå¤šä¸ªç¦ç”¨
      multiple: true,
      // æ˜¾ç¤ºæœç´¢æ¡ä»¶
      showSearch: true,
      // æ€»æ¡æ•°
      total: 0,
      // ç”Ÿäº§å·¥å•è¡¨æ ¼æ•°æ®
      infoList: [],
      // å¼¹å‡ºå±‚标题
      title: "",
      // æ˜¯å¦æ˜¾ç¤ºå¼¹å‡ºå±‚
      open: false,
      // æŸ¥è¯¢å‚æ•°
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        workOrderNo: null,
        salesOrderCode: null,
        productCode: null,
        orderStatus: null,
      },
      queryDetailParams: {
        pageNum: 1,
        pageSize: 10,
        workOrderNo: null,
      },
      detailTotal: 0,
      // è¡¨å•å‚æ•°
      form: {},
      // è¡¨å•æ ¡éªŒ
      rules: {
        workOrderNo: [
          { required: true, message: "工单编号不能为空", trigger: "blur" }
        ],
        salesOrderCode: [
          { required: true, message: "订单编号不能为空", trigger: "blur" }
        ],
        productCode: [
          { required: true, message: "产品编号不能为空", trigger: "blur" }
        ],
        lineCode: [
          { required: true, message: "产线编号不能为空", trigger: "blur" }
        ],
        planQty: [
          { required: true, message: "计划数量不能为空", trigger: "blur" }
        ],
        planStartTime: [
          { required: true, message: "计划开始时间不能为空", trigger: "blur" }
        ],
        planEndTime: [
          { required: true, message: "计划结束时间不能为空", trigger: "blur" }
        ],
      }
    };
  },
  created() {
    this.getList();
  },
  methods: {
    orderDetail(workOrderNo){
      console.log('000',workOrderNo)
      this.detailVisible = true
      this.queryDetailParams.params = {}
      this.queryDetailParams.workOrderNo = workOrderNo
      this.getDetail()
    },
    getDetail(){
      listScheduling(this.queryDetailParams).then(response => {
        this.schedulingList = response.rows;
        this.detailTotal = response.total;
        this.detailLoading = false;
      });
    },
    handleReceive(){
      this.$message({
        message: "配置接收方法",
        type: "info"
      })
    },
    handleCreate(){
      this.$message({
        message: "配置生成方法",
        type: "info"
      })
    },
    /** æŸ¥è¯¢ç”Ÿäº§å·¥å•åˆ—表 */
    getList() {
      this.loading = true;
      listInfo(this.queryParams).then(response => {
        this.infoList = response.rows;
        this.detailTotal = response.total;
        this.loading = false;
      });
    },
    // å–消按钮
    cancel() {
      this.open = false;
      this.reset();
    },
    // è¡¨å•é‡ç½®
    reset() {
      this.form = {
        id: null,
        workOrderNo: null,
        salesOrderCode: null,
        productCode: null,
        lineCode: null,
        planQty: null,
        planStartTime: null,
        planEndTime: null,
        orderStatus: null,
        createTime: null,
        updateTime: null,
        createBy: null,
        updateBy: null,
        remarks: null,
        delFlag: null,
      };
      this.resetForm("form");
      this.addFlag = false
      this.updateFlag = false
    },
    /** æœç´¢æŒ‰é’®æ“ä½œ */
    handleQuery() {
      console.log('111')
      this.queryParams.pageNum = 1;
      this.getList();
    },
    /** é‡ç½®æŒ‰é’®æ“ä½œ */
    resetQuery() {
      this.resetForm("queryForm");
      this.handleQuery();
    },
    // å¤šé€‰æ¡†é€‰ä¸­æ•°æ®
    handleSelectionChange(selection) {
      this.ids = selection.map(item => item.id)
      this.single = selection.length!==1
      this.multiple = !selection.length
    },
    /** æ–°å¢žæŒ‰é’®æ“ä½œ */
    handleAdd() {
      this.reset();
      this.addFlag = true
      this.open = true;
      this.title = "添加生产工单";
    },
    /** ä¿®æ”¹æŒ‰é’®æ“ä½œ */
    handleUpdate(row) {
      this.reset();
      this.updateFlag = true
      const id = row.id || this.ids
      getInfo(id).then(response => {
        this.form = response.data;
        this.open = true;
        this.title = "修改生产工单";
      });
    },
    /** æäº¤æŒ‰é’® */
    submitForm() {
      this.$refs["form"].validate(valid => {
        if (valid) {
          if (this.form.id != null) {
            updateInfo(this.form).then(response => {
              this.$modal.msgSuccess("修改成功");
              this.open = false;
              this.getList();
            });
          } else {
            addInfo(this.form).then(response => {
              this.$modal.msgSuccess("新增成功");
              this.open = false;
              this.getList();
            });
          }
        }
      });
    },
    /** åˆ é™¤æŒ‰é’®æ“ä½œ */
    handleDelete(row) {
      const ids = row.id || this.ids;
      this.$modal.confirm('是否确认删除?').then(function() {
        return delInfo(ids);
      }).then(() => {
        this.getList();
        this.$modal.msgSuccess("删除成功");
      }).catch(() => {});
    },
    /** å¯¼å‡ºæŒ‰é’®æ“ä½œ */
    handleExport() {
      this.download('main/info/export', {
        ...this.queryParams
      }, `info_${new Date().getTime()}.xlsx`)
    }
  }
};
</script>
billion-ui/src/views/main/om/scheduling/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,424 @@
<template>
  <div class="app-container">
    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="90px">
      <el-form-item label="工单编号" prop="workOrderNo">
        <el-input
          v-model="queryParams.workOrderNo"
          placeholder="请输入工单编号"
          clearable
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item label="总成序列号" prop="sfcCode">
        <el-input
          v-model="queryParams.sfcCode"
          placeholder="请输入总成序列号"
          clearable
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item label="产品编码" prop="productCode">
        <el-input
          v-model="queryParams.productCode"
          placeholder="请输入产品编码"
          clearable
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item label="状态" prop="status">
        <el-select v-model="queryParams.status" placeholder="请选择状态" clearable>
          <el-option
            v-for="dict in dict.type.status"
            :key="dict.value"
            :label="dict.label"
            :value="dict.value"
          />
        </el-select>
      </el-form-item>
      <el-form-item label="上线时间">
        <el-date-picker
          v-model="daterangeOnlineTime"
          style="width: 340px"
          value-format="yyyy-MM-dd HH:mm:ss"
          type="datetimerange"
          range-separator="-"
          start-placeholder="开始日期"
          end-placeholder="结束日期"
        ></el-date-picker>
      </el-form-item>
      <el-form-item label="下线时间" prop="offlineTime">
        <el-date-picker
          v-model="daterangeOfflineTime"
          style="width: 340px"
          value-format="yyyy-MM-dd HH:mm:ss"
          type="datetimerange"
          range-separator="-"
          start-placeholder="开始日期"
          end-placeholder="结束日期"
        ></el-date-picker>
      </el-form-item>
      <el-form-item style="float: right; margin-right: 90px">
        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
      </el-form-item>
    </el-form>
    <el-row :gutter="10" class="mb8" >
      <el-col :span="1.5">
        <el-button
          type="primary"
          plain
          icon="el-icon-plus"
          size="mini"
          @click="handleAdd"
          v-hasPermi="['main:scheduling:add']"
        >新增</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="success"
          plain
          icon="el-icon-edit"
          size="mini"
          :disabled="single"
          @click="handleUpdate"
          v-hasPermi="['main:scheduling:edit']"
        >修改</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="danger"
          plain
          icon="el-icon-delete"
          size="mini"
          :disabled="multiple"
          @click="handleDelete"
          v-hasPermi="['main:scheduling:remove']"
        >删除</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="warning"
          plain
          icon="el-icon-download"
          size="mini"
          @click="handleExport"
          v-hasPermi="['main:scheduling:export']"
        >导出</el-button>
      </el-col>
<!--      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>-->
    </el-row>
    <el-table v-loading="loading" :data="schedulingList" @selection-change="handleSelectionChange">
      <el-table-column type="selection" width="55" align="center" />
      <el-table-column label="工单编号" align="center" prop="workOrderNo" />
      <el-table-column label="总成序列号" width="180px" align="center" prop="sfcCode" />
      <el-table-column label="产品编码" align="center" prop="productCode" />
      <el-table-column label="上线时间" align="center" prop="onlineTime" width="180">
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.onlineTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
        </template>
      </el-table-column>
      <el-table-column label="下线时间" align="center" prop="offlineTime" width="180">
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.offlineTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
        </template>
      </el-table-column>
      <el-table-column label="质量状态" align="center" prop="qualityStatus">
        <template slot-scope="scope">
          <dict-tag :options="dict.type.product_status" :value="scope.row.qualityStatus"/>
        </template>
      </el-table-column>
      <el-table-column label="状态" align="center" prop="status">
        <template slot-scope="scope">
          <dict-tag :options="dict.type.status" :value="scope.row.status"/>
        </template>
      </el-table-column>
      <el-table-column label="更新用户" align="center" prop="updateBy" />
      <el-table-column label="更新时间" align="center" prop="updateTime" width="180">
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
        </template>
      </el-table-column>
      <el-table-column label="备注" width="180px" show-overflow-tooltip align="center" prop="remarks" />
<!--      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">-->
<!--        <template slot-scope="scope">-->
<!--          <el-button-->
<!--            size="mini"-->
<!--            type="text"-->
<!--            icon="el-icon-edit"-->
<!--            @click="handleUpdate(scope.row)"-->
<!--            v-hasPermi="['main:scheduling:edit']"-->
<!--          >修改</el-button>-->
<!--          <el-button-->
<!--            size="mini"-->
<!--            type="text"-->
<!--            icon="el-icon-delete"-->
<!--            @click="handleDelete(scope.row)"-->
<!--            v-hasPermi="['main:scheduling:remove']"-->
<!--          >删除</el-button>-->
<!--        </template>-->
<!--      </el-table-column>-->
    </el-table>
    <pagination
      v-show="total>0"
      :total="total"
      :page.sync="queryParams.pageNum"
      :limit.sync="queryParams.pageSize"
      @pagination="getList"
    />
    <!-- æ·»åŠ æˆ–修改订单排产对话框 -->
    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
        <el-form-item label="工单编号" prop="workOrderNo">
          <el-select v-model="form.workOrderNo" filterable placeholder="请选择工单编号" style="width: 360px">
            <el-option
              v-for="item in workOrderNoOptions"
              :key="item.value"
              :label="item"
              :value="item">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="总成序列号" prop="sfcCode">
          <el-input v-model="form.sfcCode" placeholder="请输入总成序列号" />
        </el-form-item>
        <el-form-item label="产品编码" prop="productCode">
          <el-input v-model="form.productCode" placeholder="请输入产品编码" />
        </el-form-item>
        <el-form-item label="质量状态" prop="qualityStatus" v-if = updateFlag>
          <el-radio-group v-model="form.qualityStatus">
            <el-radio
              v-for="dict in dict.type.product_status"
              :key="dict.value"
              :label="dict.value"
            >{{dict.label}}</el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item label="状态" prop="status" v-if = updateFlag>
          <el-radio-group v-model="form.status">
            <el-radio
              v-for="dict in dict.type.status"
              :key="dict.value"
              :label="dict.value"
            >{{dict.label}}</el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item label="备注" prop="remarks">
          <el-input
            type="textarea"
            placeholder="请输入备注"
            v-model="form.remarks"
            maxlength="30"
            show-word-limit
          >
          </el-input>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitForm">ç¡® å®š</el-button>
        <el-button @click="cancel">取 æ¶ˆ</el-button>
      </div>
    </el-dialog>
  </div>
</template>
<script>
import { listScheduling, getScheduling, delScheduling, addScheduling, updateScheduling } from "@/api/main/om/scheduling";
import {getOrderList} from "@/api/main/om/info";
export default {
  name: "Scheduling",
  dicts: ['product_status', 'status'],
  data() {
    return {
      workOrderNoOptions: [],
      addFlag : false,
      updateFlag : false,
      // é®ç½©å±‚
      loading: true,
      // é€‰ä¸­æ•°ç»„
      ids: [],
      // éžå•ä¸ªç¦ç”¨
      single: true,
      // éžå¤šä¸ªç¦ç”¨
      multiple: true,
      // æ˜¾ç¤ºæœç´¢æ¡ä»¶
      showSearch: true,
      // æ€»æ¡æ•°
      total: 0,
      // è®¢å•æŽ’产表格数据
      schedulingList: [],
      // å¼¹å‡ºå±‚标题
      title: "",
      // æ˜¯å¦æ˜¾ç¤ºå¼¹å‡ºå±‚
      open: false,
      // å¤‡æ³¨æ—¶é—´èŒƒå›´
      daterangeOnlineTime: [],
      daterangeOfflineTime: [],
      // æŸ¥è¯¢å‚æ•°
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        workOrderNo: null,
        sfcCode: null,
        productCode: null,
        onlineTime: null,
        offlineTime: null,
        status: null,
      },
      // è¡¨å•å‚æ•°
      form: {},
      // è¡¨å•æ ¡éªŒ
      rules: {
        workOrderNo: [
          { required: true, message: "工单编号不能为空", trigger: "change" }
        ],
        sfcCode: [
          { required: true, message: "总成序列号不能为空", trigger: "blur" }
        ],
        productCode: [
          { required: true, message: "产品编码不能为空", trigger: "blur" }
        ],
      }
    };
  },
  created() {
    this.getList();
  },
  methods: {
    getOrderList(){
      getOrderList().then(res => {
        console.log('res',res)
        if (res.code === 200){
          this.workOrderNoOptions = res.data
          console.log('this.workOrderNoOptions',this.workOrderNoOptions)
        }
      })
    },
    /** æŸ¥è¯¢è®¢å•æŽ’产列表 */
    getList() {
      this.loading = true;
      this.queryParams.params = {};
      if (null != this.daterangeOnlineTime && '' != this.daterangeOnlineTime) {
        this.queryParams.params["beginOnlineTime"] = this.daterangeOnlineTime[0];
        this.queryParams.params["endOnlineTime"] = this.daterangeOnlineTime[1];
      }
      if (null != this.daterangeOfflineTime && '' != this.daterangeOfflineTime) {
        this.queryParams.params["beginOfflineTime"] = this.daterangeOfflineTime[0];
        this.queryParams.params["endOfflineTime"] = this.daterangeOfflineTime[1];
      }
      listScheduling(this.queryParams).then(response => {
        this.schedulingList = response.rows;
        this.total = response.total;
        this.loading = false;
      });
    },
    // å–消按钮
    cancel() {
      this.open = false;
      this.reset();
    },
    // è¡¨å•é‡ç½®
    reset() {
      this.form = {
        id: null,
        workOrderNo: null,
        sfcCode: null,
        productCode: null,
        onlineTime: null,
        offlineTime: null,
        qualityStatus: null,
        status: null,
        createBy: null,
        createTime: null,
        updateBy: null,
        updateTime: null,
        remarks: null
      };
      this.resetForm("form");
      this.addFlag = false
      this.updateFlag = false
    },
    /** æœç´¢æŒ‰é’®æ“ä½œ */
    handleQuery() {
      this.queryParams.pageNum = 1;
      this.getList();
    },
    /** é‡ç½®æŒ‰é’®æ“ä½œ */
    resetQuery() {
      this.daterangeOnlineTime = [];
      this.daterangeOfflineTime = [];
      this.resetForm("queryForm");
      this.handleQuery();
    },
    // å¤šé€‰æ¡†é€‰ä¸­æ•°æ®
    handleSelectionChange(selection) {
      this.ids = selection.map(item => item.id)
      this.single = selection.length!==1
      this.multiple = !selection.length
    },
    /** æ–°å¢žæŒ‰é’®æ“ä½œ */
    handleAdd() {
      this.reset();
      this.getOrderList()
      this.addFlag = true
      this.open = true;
      this.title = "添加订单排产";
    },
    /** ä¿®æ”¹æŒ‰é’®æ“ä½œ */
    handleUpdate(row) {
      this.reset();
      this.updateFlag = true
      const id = row.id || this.ids
      getScheduling(id).then(response => {
        this.form = response.data;
        this.open = true;
        this.title = "修改订单排产";
      });
      this.getOrderList()
    },
    /** æäº¤æŒ‰é’® */
    submitForm() {
      this.$refs["form"].validate(valid => {
        if (valid) {
          if (this.form.id != null) {
            updateScheduling(this.form).then(response => {
              this.$modal.msgSuccess("修改成功");
              this.open = false;
              this.getList();
            });
          } else {
            addScheduling(this.form).then(response => {
              this.$modal.msgSuccess("新增成功");
              this.open = false;
              this.getList();
            });
          }
        }
      });
    },
    /** åˆ é™¤æŒ‰é’®æ“ä½œ */
    handleDelete(row) {
      const ids = row.id || this.ids;
      this.$modal.confirm('是否确认删除?').then(function() {
        return delScheduling(ids);
      }).then(() => {
        this.getList();
        this.$modal.msgSuccess("删除成功");
      }).catch(() => {});
    },
    /** å¯¼å‡ºæŒ‰é’®æ“ä½œ */
    handleExport() {
      this.download('main/scheduling/export', {
        ...this.queryParams
      }, `scheduling_${new Date().getTime()}.xlsx`)
    }
  }
};
</script>