新火炬后端单体项目初始化代码
zhangherong
2 天以前 182c04e399f5db26406234767f7ef34b5adc0015
Merge remote-tracking branch 'origin/master'

# Conflicts:
# db/双林新火炬MES数据库设计.pdma.json
已添加2个文件
已修改11个文件
607 ■■■■ 文件已修改
.gitignore 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
db/双林新火炬MES数据库设计.pdma.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/cms/controller/CuttingInboundController.java 385 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/cms/entity/CuttingInboundDetail.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/cms/mapper/CuttingInboundMapper.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/cms/mapper/xml/CuttingInboundMapper.xml 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/cms/vo/CuttingInboundExportVo.java 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/controller/MesWorkReportingController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/entity/MesProductionWorkOrder.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/entity/MesWorkReporting.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/service/IMesWorkReportingService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/mes/service/impl/MesWorkReportingServiceImpl.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/org/jeecg/modules/qms/enums/PlanCategoryEnum.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
@@ -13,3 +13,4 @@
os_del_doc.cmd
.svn
derby.log
.gitignore
db/Ë«ÁÖлð¾æMESÊý¾Ý¿âÉè¼Æ.pdma.json
@@ -632,7 +632,7 @@
      "#DDE5FF"
    ],
    "DDLToggleCase": "L",
    "menuWidth": "364px"
    "menuWidth": "304px"
  },
  "entities": [
    {
@@ -64807,7 +64807,7 @@
          "notNull": false,
          "autoIncrement": false,
          "defaultValue": "",
          "hideInGraph": true,
          "hideInGraph": false,
          "refDict": "",
          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64",
          "extProps": {},
src/main/java/org/jeecg/modules/cms/controller/CuttingInboundController.java
@@ -1,13 +1,6 @@
package org.jeecg.modules.cms.controller;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -15,9 +8,9 @@
import com.alibaba.fastjson.JSONObject;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.cms.entity.CuttingInbound;
import org.jeecg.modules.cms.entity.CuttingInboundDetail;
import org.jeecg.modules.cms.mapper.CuttingInboundMapper;
import org.jeecg.modules.cms.service.ICuttingInboundDetailService;
import org.jeecg.modules.cms.service.ICuttingInboundService;
@@ -26,186 +19,260 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecg.modules.cms.vo.CuttingInboundExportVo;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
 /**
/**
 * @Description: åˆ€å…·å…¥åº“单
 * @Author: jeecg-boot
 * @Date:   2025-07-28
 * @Date: 2025-07-28
 * @Version: V1.0
 */
@Api(tags="刀具入库单")
@Api(tags = "刀具入库单")
@RestController
@RequestMapping("/cms/cuttingInbound")
@Slf4j
public class CuttingInboundController extends JeecgController<CuttingInbound, ICuttingInboundService> {
    @Autowired
    private ICuttingInboundService cuttingInboundService;
    @Autowired
    private ICuttingInboundService cuttingInboundService;
     @Autowired
     private ICuttingInboundDetailService cuttingInboundDetailService;
    /**
     * åˆ†é¡µåˆ—表查询
     *
     * @param cuttingInbound
     * @param pageNo
     * @param pageSize
     * @param req
     * @return
     */
    //@AutoLog(value = "刀具入库单-分页列表查询")
    @ApiOperation(value="刀具入库单-分页列表查询", notes="刀具入库单-分页列表查询")
    @GetMapping(value = "/list")
    public Result<IPage<CuttingInbound>> queryPageList(CuttingInbound cuttingInbound,
                                   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
                                   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
                                   HttpServletRequest req) {
        QueryWrapper<CuttingInbound> queryWrapper = QueryGenerator.initQueryWrapper(cuttingInbound, req.getParameterMap());
        Page<CuttingInbound> page = new Page<CuttingInbound>(pageNo, pageSize);
        IPage<CuttingInbound> pageList = cuttingInboundService.page(page, queryWrapper);
        return Result.OK(pageList);
    }
    /**
     *   æ·»åŠ 
     *
     * @param jSONObject
     * @return
     */
    @AutoLog(value = "刀具入库单-添加")
    @ApiOperation(value="刀具入库单-添加", notes="刀具入库单-添加")
    //@RequiresPermissions("org.jeecg.modules:cms_cutting_inbound:add")
    @PostMapping(value = "/add")
    public Result<String> add(@RequestBody JSONObject jSONObject) {
        CuttingInbound cuttingInbound = jSONObject.toJavaObject(CuttingInbound.class);
        cuttingInbound.setOrderStatus("1");
        cuttingInboundService.saveOrUpdate(cuttingInbound);
        //删除原关联数据
        List<CuttingInboundDetail> cuttingInboundDetailList = cuttingInboundDetailService.lambdaQuery().eq(CuttingInboundDetail::getOrderId,cuttingInbound.getId()).list();
        cuttingInboundDetailService.removeBatchByIds(cuttingInboundDetailList);
        //添加新关联数据
        JSONArray jsonArray = jSONObject.getJSONArray("detailData");
        List<CuttingInboundDetail> list = jsonArray.toJavaList(CuttingInboundDetail.class);
        for (int i = 0; i < list.size(); i++) {
            CuttingInboundDetail temp = list.get(i);
            temp.setOrderId(cuttingInbound.getId());
            cuttingInboundDetailService.save(temp);
        }
        return Result.OK("入库成功!");
    }
    /**
     *  ç¼–辑
     *
     * @param cuttingInbound
     * @return
     */
    @AutoLog(value = "刀具入库单-编辑")
    @ApiOperation(value="刀具入库单-编辑", notes="刀具入库单-编辑")
    //@RequiresPermissions("org.jeecg.modules:cms_cutting_inbound:edit")
    @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
    public Result<String> edit(@RequestBody CuttingInbound cuttingInbound) {
        cuttingInboundService.updateById(cuttingInbound);
        return Result.OK("编辑成功!");
    }
    /**
     *   é€šè¿‡id删除
     *
     * @param id
     * @return
     */
    @AutoLog(value = "刀具入库单-通过id删除")
    @ApiOperation(value="刀具入库单-通过id删除", notes="刀具入库单-通过id删除")
    //@RequiresPermissions("org.jeecg.modules:cms_cutting_inbound:delete")
    @DeleteMapping(value = "/delete")
    public Result<String> delete(@RequestParam(name="id",required=true) String id) {
        cuttingInboundService.removeById(id);
        return Result.OK("删除成功!");
    }
    /**
     *  æ‰¹é‡åˆ é™¤
     *
     * @param ids
     * @return
     */
    @AutoLog(value = "刀具入库单-批量删除")
    @ApiOperation(value="刀具入库单-批量删除", notes="刀具入库单-批量删除")
    //@RequiresPermissions("org.jeecg.modules:cms_cutting_inbound:deleteBatch")
    @DeleteMapping(value = "/deleteBatch")
    public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
        this.cuttingInboundService.removeByIds(Arrays.asList(ids.split(",")));
        return Result.OK("批量删除成功!");
    }
    /**
     * é€šè¿‡id查询
     *
     * @param id
     * @return
     */
    //@AutoLog(value = "刀具入库单-通过id查询")
    @ApiOperation(value="刀具入库单-通过id查询", notes="刀具入库单-通过id查询")
    @GetMapping(value = "/queryById")
    public Result<CuttingInbound> queryById(@RequestParam(name="id",required=true) String id) {
        CuttingInbound cuttingInbound = cuttingInboundService.getById(id);
        if(cuttingInbound==null) {
            return Result.error("未找到对应数据");
        }
        return Result.OK(cuttingInbound);
    }
    @Autowired
    private ICuttingInboundDetailService cuttingInboundDetailService;
    @Autowired
    private CuttingInboundMapper cuttingInboundMapper;
    /**
    * å¯¼å‡ºexcel
    *
    * @param request
    * @param cuttingInbound
    */
    //@RequiresPermissions("org.jeecg.modules:cms_cutting_inbound:exportXls")
    @RequestMapping(value = "/exportXls")
    public ModelAndView exportXls(HttpServletRequest request, CuttingInbound cuttingInbound) {
        return super.exportXls(request, cuttingInbound, CuttingInbound.class, "刀具入库单");
     * åˆ†é¡µåˆ—表查询
     *
     * @param cuttingInbound
     * @param pageNo
     * @param pageSize
     * @param req
     * @return
     */
    //@AutoLog(value = "刀具入库单-分页列表查询")
    @ApiOperation(value = "刀具入库单-分页列表查询", notes = "刀具入库单-分页列表查询")
    @GetMapping(value = "/list")
    public Result<IPage<CuttingInbound>> queryPageList(CuttingInbound cuttingInbound,
                                                       @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
                                                       @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
                                                       HttpServletRequest req) {
        QueryWrapper<CuttingInbound> queryWrapper = QueryGenerator.initQueryWrapper(cuttingInbound, req.getParameterMap());
        Page<CuttingInbound> page = new Page<CuttingInbound>(pageNo, pageSize);
        IPage<CuttingInbound> pageList = cuttingInboundService.page(page, queryWrapper);
        return Result.OK(pageList);
    }
    /**
      * é€šè¿‡excel导入数据
    *
    * @param request
    * @param response
    * @return
    */
     * æ·»åŠ 
     *
     * @param jSONObject
     * @return
     */
    @AutoLog(value = "刀具入库单-添加")
    @ApiOperation(value = "刀具入库单-添加", notes = "刀具入库单-添加")
    //@RequiresPermissions("org.jeecg.modules:cms_cutting_inbound:add")
    @PostMapping(value = "/add")
    public Result<String> add(@RequestBody JSONObject jSONObject) {
        CuttingInbound cuttingInbound = jSONObject.toJavaObject(CuttingInbound.class);
        cuttingInbound.setOrderStatus("1");
        cuttingInboundService.saveOrUpdate(cuttingInbound);
        //删除原关联数据
        List<CuttingInboundDetail> cuttingInboundDetailList = cuttingInboundDetailService.lambdaQuery().eq(CuttingInboundDetail::getOrderId, cuttingInbound.getId()).list();
        cuttingInboundDetailService.removeBatchByIds(cuttingInboundDetailList);
        //添加新关联数据
        JSONArray jsonArray = jSONObject.getJSONArray("detailData");
        List<CuttingInboundDetail> list = jsonArray.toJavaList(CuttingInboundDetail.class);
        for (int i = 0; i < list.size(); i++) {
            CuttingInboundDetail temp = list.get(i);
            temp.setOrderId(cuttingInbound.getId());
            cuttingInboundDetailService.save(temp);
        }
        return Result.OK("入库成功!");
    }
    /**
     * ç¼–辑
     *
     * @param cuttingInbound
     * @return
     */
    @AutoLog(value = "刀具入库单-编辑")
    @ApiOperation(value = "刀具入库单-编辑", notes = "刀具入库单-编辑")
    //@RequiresPermissions("org.jeecg.modules:cms_cutting_inbound:edit")
    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
    public Result<String> edit(@RequestBody CuttingInbound cuttingInbound) {
        cuttingInboundService.updateById(cuttingInbound);
        return Result.OK("编辑成功!");
    }
    /**
     * é€šè¿‡id删除
     *
     * @param id
     * @return
     */
    @AutoLog(value = "刀具入库单-通过id删除")
    @ApiOperation(value = "刀具入库单-通过id删除", notes = "刀具入库单-通过id删除")
    //@RequiresPermissions("org.jeecg.modules:cms_cutting_inbound:delete")
    @DeleteMapping(value = "/delete")
    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
        cuttingInboundService.removeById(id);
        return Result.OK("删除成功!");
    }
    /**
     * æ‰¹é‡åˆ é™¤
     *
     * @param ids
     * @return
     */
    @AutoLog(value = "刀具入库单-批量删除")
    @ApiOperation(value = "刀具入库单-批量删除", notes = "刀具入库单-批量删除")
    //@RequiresPermissions("org.jeecg.modules:cms_cutting_inbound:deleteBatch")
    @DeleteMapping(value = "/deleteBatch")
    public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
        this.cuttingInboundService.removeByIds(Arrays.asList(ids.split(",")));
        return Result.OK("批量删除成功!");
    }
    /**
     * é€šè¿‡id查询
     *
     * @param id
     * @return
     */
    //@AutoLog(value = "刀具入库单-通过id查询")
    @ApiOperation(value = "刀具入库单-通过id查询", notes = "刀具入库单-通过id查询")
    @GetMapping(value = "/queryById")
    public Result<CuttingInbound> queryById(@RequestParam(name = "id", required = true) String id) {
        CuttingInbound cuttingInbound = cuttingInboundService.getById(id);
        if (cuttingInbound == null) {
            return Result.error("未找到对应数据");
        }
        return Result.OK(cuttingInbound);
    }
    /**
     * å¯¼å‡ºexcel
     *
     * @param request
     * @param cuttingInbound
     */
    //@RequiresPermissions("org.jeecg.modules:cms_cutting_inbound:exportXls")
    @RequestMapping(value = "/exportXls")
    public ModelAndView exportXls(CuttingInbound cuttingInbound, HttpServletRequest request) {
//        return super.exportXls(request, cuttingInbound, CuttingInbound.class, "刀具入库单");
        // èŽ·å–æŸ¥è¯¢æ¡ä»¶
        QueryWrapper<CuttingInbound> queryWrapper = QueryGenerator.initQueryWrapper(cuttingInbound, request.getParameterMap());
        // æŸ¥è¯¢ä¸»è¡¨æ•°æ®
        List<CuttingInbound> pageList = cuttingInboundService.list(queryWrapper);
        // ä¸ºæ¯ä¸ªä¸»è¡¨æ•°æ®è®¾ç½®æ˜Žç»†æ•°æ®
        List<CuttingInboundExportVo> exportList = new ArrayList<>();
        for (CuttingInbound item : pageList) {
            CuttingInboundExportVo exportVo = new CuttingInboundExportVo();
            // å¤åˆ¶ä¸»è¡¨å­—段
            exportVo.setId(item.getId());
            exportVo.setReceiver(item.getReceiver());
            exportVo.setReceiveTime(item.getReceiveTime());
            exportVo.setReceiveComment(item.getReceiveComment());
            exportVo.setConfirmer(item.getConfirmer());
            exportVo.setConfirmTime(item.getConfirmTime());
            exportVo.setConfirmComment(item.getConfirmComment());
            exportVo.setOrderStatus(item.getOrderStatus());
            // æŸ¥è¯¢å¹¶è®¾ç½®æ˜Žç»†æ•°æ®
            List<CuttingInboundDetail> details = cuttingInboundDetailService.lambdaQuery()
                    .eq(CuttingInboundDetail::getOrderId, item.getId())
                    .list();
            exportVo.setDetailList(details);
            exportList.add(exportVo);
        }
        // è®¾ç½®å¯¼å‡ºå‚æ•°
        ExportParams params = new ExportParams("刀具入库单", "导出数据");
        // è¿”回Excel视图
        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
        mv.addObject(NormalExcelConstants.PARAMS, params);
        mv.addObject(NormalExcelConstants.DATA_LIST, exportList);
        mv.addObject(NormalExcelConstants.CLASS, CuttingInboundExportVo.class);
        return mv;
    }
    /**
     * é€šè¿‡excel导入数据
     *
     * @param request
     * @param response
     * @return
     */
    //@RequiresPermissions("cms_cutting_inbound:importExcel")
    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
        return super.importExcel(request, response, CuttingInbound.class);
//        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
//        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
//
//        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
//            MultipartFile file = entity.getValue();
//            ImportParams params = new ImportParams();
//            params.setTitleRows(1);
//            params.setHeadRows(1);
//            try {
//                // è§£æžExcel文件
//                List<CuttingInbound> list = ExcelImportUtil.importExcel(file.getInputStream(), CuttingInbound.class, params);
//
//                for (CuttingInbound cuttingInbound : list) {
//                    // ä¿å­˜ä¸»è¡¨æ•°æ®
//                    cuttingInboundService.save(cuttingInbound);
//
//                    // èŽ·å–ä¸»è¡¨ID
//                    String orderId = cuttingInbound.getId();
//
//                    // å¤„理从表数据
//                    List<CuttingInboundDetail> detailList = cuttingInbound.getDetailList(); // å‡è®¾ä¸»è¡¨å®žä½“中有从表数据列表
//                    if (detailList != null && !detailList.isEmpty()) {
//                        for (CuttingInboundDetail detail : detailList) {
//                            detail.setOrderId(orderId); // è®¾ç½®å¤–键关联
//                            cuttingInboundDetailService.save(detail);
//                        }
//                    }
//                }
//                return Result.ok("导入成功");
//            } catch (Exception e) {
//                log.error("导入失败", e);
//                return Result.error("导入失败");
//            }
//        }
//        return Result.error("导入失败");
    }
     /**
      * æ ¹æ®å…¥åº“id查询入库明细
      *
      * @param orderId
      * @return
      */
     @GetMapping("/detailList")
     public Result<?> detailList(@RequestParam("orderId") String orderId) {
         List<Map<String, Object>> list = cuttingInboundDetailService.detailList(orderId);
         return Result.ok(list);
     }
    /**
     * æ ¹æ®å…¥åº“id查询入库明细
     *
     * @param orderId
     * @return
     */
    @GetMapping("/detailList")
    public Result<?> detailList(@RequestParam("orderId") String orderId) {
        List<Map<String, Object>> list = cuttingInboundDetailService.detailList(orderId);
        return Result.ok(list);
    }
}
src/main/java/org/jeecg/modules/cms/entity/CuttingInboundDetail.java
@@ -48,7 +48,7 @@
    @ApiModelProperty(value = "入库单")
    private String orderId;
    /**刀具ID*/
    @Excel(name = "刀具ID", width = 15)
    @Excel(name = "刀具ID", width = 15,dictTable = "cms_cutting_tool",dicCode = "id",dicText = "cutting_code")
    @ApiModelProperty(value = "刀具ID")
    private String cuttingId;
    /**入库数量*/
src/main/java/org/jeecg/modules/cms/mapper/CuttingInboundMapper.java
@@ -2,9 +2,12 @@
import java.util.List;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.cms.entity.CuttingInbound;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.jeecg.modules.cms.vo.CuttingInboundExportVo;
/**
 * @Description: åˆ€å…·å…¥åº“单
@@ -14,4 +17,6 @@
 */
public interface CuttingInboundMapper extends BaseMapper<CuttingInbound> {
    List<CuttingInboundExportVo> exportList(@Param(Constants.WRAPPER) QueryWrapper<CuttingInboundExportVo> queryWrapper);
}
src/main/java/org/jeecg/modules/cms/mapper/xml/CuttingInboundMapper.xml
@@ -2,4 +2,22 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.cms.mapper.CuttingInboundMapper">
    <select id="exportList" resultType="org.jeecg.modules.cms.vo.CuttingInboundExportVo">
        SELECT
            t1.id,
            t1.order_status AS oderStatus,
            t1.receiver AS  receiver,
            t1.receive_time AS  receiveTime,
            t1.receive_comment AS  receiveComment,
            t1.confirmer AS  confirmer,
            t1.confirm_time AS  confirmTime,
            t1.confirm_comment AS confirmComment,
            t2.order_id AS orderId,
            t2.cutting_id AS cuttingId,
            t2.receive_number AS receiveNumber
        FROM
            cms_cutting_inbound t1
                LEFT JOIN
            cms_cutting_inbound_detail t2 on t1.id=t2.order_id
    </select>
</mapper>
src/main/java/org/jeecg/modules/cms/vo/CuttingInboundExportVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,117 @@
package org.jeecg.modules.cms.vo;
import org.jeecg.modules.cms.entity.CuttingInboundDetail;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecgframework.poi.excel.annotation.ExcelCollection;
import java.util.List;
public class CuttingInboundExportVo {
    /** ä¸»é”® */
    @Excel(name = "入库单", width = 15)
    private String id;
    /** å…¥åº“人 */
    @Excel(name = "入库人", width = 15,dictTable = "sys_user",dicCode = "id",dicText = "realname")
    private String receiver;
    /** å…¥åº“æ—¶é—´ */
    @Excel(name = "入库时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
    private java.util.Date receiveTime;
    /** å…¥åº“说明 */
    @Excel(name = "入库说明", width = 15)
    private String receiveComment;
    /** ç¡®è®¤äºº */
    @Excel(name = "确认人", width = 15,dictTable = "sys_user",dicCode = "id",dicText = "realname")
    private String confirmer;
    /** ç¡®è®¤æ—¶é—´ */
    @Excel(name = "确认时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
    private java.util.Date confirmTime;
    /** ç¡®è®¤æ„è§ */
    @Excel(name = "确认意见", width = 15)
    private String confirmComment;
    /** è®¢å•状态 */
    @Excel(name = "订单状态", width = 15)
    private String orderStatus;
    // æ˜Žç»†é›†åˆ
    @ExcelCollection(name = "入库明细")
    private List<CuttingInboundDetail> detailList;
    // getter和setter方法...
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getReceiver() {
        return receiver;
    }
    public void setReceiver(String receiver) {
        this.receiver = receiver;
    }
    public java.util.Date getReceiveTime() {
        return receiveTime;
    }
    public void setReceiveTime(java.util.Date receiveTime) {
        this.receiveTime = receiveTime;
    }
    public String getReceiveComment() {
        return receiveComment;
    }
    public void setReceiveComment(String receiveComment) {
        this.receiveComment = receiveComment;
    }
    public String getConfirmer() {
        return confirmer;
    }
    public void setConfirmer(String confirmer) {
        this.confirmer = confirmer;
    }
    public java.util.Date getConfirmTime() {
        return confirmTime;
    }
    public void setConfirmTime(java.util.Date confirmTime) {
        this.confirmTime = confirmTime;
    }
    public String getConfirmComment() {
        return confirmComment;
    }
    public void setConfirmComment(String confirmComment) {
        this.confirmComment = confirmComment;
    }
    public String getOrderStatus() {
        return orderStatus;
    }
    public void setOrderStatus(String orderStatus) {
        this.orderStatus = orderStatus;
    }
    public List<CuttingInboundDetail> getDetailList() {
        return detailList;
    }
    public void setDetailList(List<CuttingInboundDetail> detailList) {
        this.detailList = detailList;
    }
}
src/main/java/org/jeecg/modules/mes/controller/MesWorkReportingController.java
@@ -67,9 +67,9 @@
   @ApiOperation(value="工单报工-新增报工", notes="工单报工-新增报工")
   //@RequiresPermissions("org.jeecg.modules:mes_work_reporting:add")
   @PostMapping(value = "/add")
   public Result<String> add(@RequestBody MesWorkReporting mesWorkReporting) {
       mesWorkReportingService.addReporting(mesWorkReporting);
       return Result.OK("添加成功!");
   public Result<MesWorkReporting> add(@RequestBody MesWorkReporting mesWorkReporting) {
       MesWorkReporting workReporting = mesWorkReportingService.addReporting(mesWorkReporting);
       return Result.OK("添加成功!", workReporting);
   }
   /**
src/main/java/org/jeecg/modules/mes/entity/MesProductionWorkOrder.java
@@ -115,7 +115,7 @@
    /**实际报工数量*/
    @Excel(name = "实际报工数量", width = 15)
    @ApiModelProperty(value = "实际报工数量")
    private BigDecimal actualQuantity;
    private BigDecimal actualQuantity = BigDecimal.ZERO;
    /**已生产托数(当前班次已生产的托数量,每次报工时更新)*/
    @Excel(name = "已生产托数", width = 15)
    @ApiModelProperty(value = "已生产托数")
src/main/java/org/jeecg/modules/mes/entity/MesWorkReporting.java
@@ -114,5 +114,11 @@
    @TableField(exist = false)
    @ApiModelProperty(value = "仓库名称")
    private String warehouseName;
    @TableField(exist = false)
    @ApiModelProperty(value = "仓库编码")
    private String warehouseCode;
    @TableField(exist = false)
    @ApiModelProperty(value = "报工类型(成品FINISHED、半成品HALF)")
    private String reportType;
}
src/main/java/org/jeecg/modules/mes/service/IMesWorkReportingService.java
@@ -15,5 +15,5 @@
    List<MesWorkReporting> queryWorkReportingByWorkOrderId(String workOrderId);
    List<MesWorkReporting> queryWorkReportingByOrderId(String orderId);
    void addReporting(MesWorkReporting mesWorkReporting);
    MesWorkReporting addReporting(MesWorkReporting mesWorkReporting);
}
src/main/java/org/jeecg/modules/mes/service/impl/MesWorkReportingServiceImpl.java
@@ -34,6 +34,11 @@
import org.jeecg.modules.pms.service.IPmsMaterialProcessService;
import org.jeecg.modules.pms.service.IPmsProcessBillMaterialsService;
import org.jeecg.modules.pms.vo.ProcessBillMaterialsDetailVo;
import org.jeecg.modules.qms.entity.InspectionPlan;
import org.jeecg.modules.qms.entity.InspectionPlanItem;
import org.jeecg.modules.qms.enums.PlanCategoryEnum;
import org.jeecg.modules.qms.service.IInspectionPlanItemService;
import org.jeecg.modules.qms.service.IInspectionPlanService;
import org.jeecg.modules.sap.request.OrderLoadRequest;
import org.jeecg.modules.sap.request.OrderReportRequest;
import org.jeecg.modules.sap.service.OrderLoadService;
@@ -88,6 +93,10 @@
    private OrderReportService orderReportService;
    @Autowired
    private OrderLoadService orderLoadService;
    @Autowired
    private IInspectionPlanService inspectionPlanService;
    @Autowired
    private IInspectionPlanItemService inspectionPlanItemService;
    @Override
    public List<MesWorkReporting> queryWorkReportingByWorkOrderId(String workOrderId) {
@@ -101,7 +110,7 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void addReporting(MesWorkReporting mesWorkReporting) {
    public MesWorkReporting addReporting(MesWorkReporting mesWorkReporting) {
        MesProductionWorkOrder workOrder = mesProductionWorkOrderService.getById(mesWorkReporting.getWorkOrderId());
        if (workOrder == null) {
            throw new JeecgBootException("工单不存在!");
@@ -134,7 +143,9 @@
        int currentPallets = workOrder.getFinishedPallets() + 1;
        String batchNumber = yearLastTwo + dayOfYearStr + shiftGroup.getGroupCode() + currentPallets;
        mesWorkReporting.setBatchNumber(batchNumber)
                .setWorkOrderCode(workOrder.getWorkOrderCode())
                .setWarehouseId(lineSideWarehouse.getId())
                .setWarehouseCode(lineSideWarehouse.getWarehouseCode())
                .setReporter(Objects.requireNonNull(CommonUtils.getCurrentUser()).getUsername())
                .setReportTime(new Date());
        String date = today.format(DateTimeFormatter.ofPattern("yyMMdd"));
@@ -144,11 +155,12 @@
            case FINISHED_PRODUCT:
                //成品报工
                productReport(mesWorkReporting, workOrder, lineSideWarehouse);
                //生成检验工单
                generateInspectionOrder(mesWorkReporting, workOrder);
                //拼接成品报工托号
                String palletNumber4 = sysBusinessCodeRuleService.generateBusinessCodeSeq("WorkReportingPalletNumber4");
                String finishedPalletNumber = material.getMaterialNumber() + date + palletNumber4;
                mesWorkReporting.setPalletNumber(finishedPalletNumber);
                //todo æ‰“印成品托标签、检验标识卡、移库单、完工检验工单
                mesWorkReporting.setPalletNumber(finishedPalletNumber).setReportType("FINISHED");
                break;
            case INNER_FLANGE:
            case OUTER_FLANGE:
@@ -158,7 +170,7 @@
                Shift shift = shiftService.getById(workOrder.getShiftId());
                String palletNumber6 = sysBusinessCodeRuleService.generateBusinessCodeSeq("WorkReportingPalletNumber6");
                String halfPalletNumber = factory.getFactoryCode() + material.getMaterialNumber() + date + shift.getShiftCode() + palletNumber6;
                mesWorkReporting.setPalletNumber(halfPalletNumber);
                mesWorkReporting.setPalletNumber(halfPalletNumber).setReportType("HALF");
                break;
        }
        //新增报工记录
@@ -169,6 +181,8 @@
                .setActualQuantity(workOrder.getActualQuantity().add(mesWorkReporting.getQuantity()))
                .setFinishedPallets(workOrder.getFinishedPallets() + 1);
        mesProductionWorkOrderService.updateById(productionWorkUpdateOrder);
        //返回报工记录,用于托标签打印
        return mesWorkReporting;
    }
    //半成品(内法兰、外法兰)、成品报工
@@ -246,6 +260,27 @@
        }
    }
    //根据检验方案生成检验工单
    private void generateInspectionOrder(MesWorkReporting mesWorkReporting, MesProductionWorkOrder workOrder) {
        //1.根据物料编码查询检验方案
        InspectionPlan inspectionPlan = inspectionPlanService.list(new LambdaQueryWrapper<InspectionPlan>()
                .eq(InspectionPlan::getMaterialNumber, workOrder.getMaterialNumber())
                .eq(InspectionPlan::getPlanCategory, PlanCategoryEnum.COMPLETION_INSPECTION.name())
                .eq(InspectionPlan::getPlanStatus, CommonConstant.STATUS_1)
                .eq(InspectionPlan::getDelFlag, CommonConstant.DEL_FLAG_0)).stream().findFirst().orElse(null);
        if (inspectionPlan == null) {
            throw new JeecgBootException("未找到该物料的检验方案!");
        }
        List<InspectionPlanItem> inspectionPlanItemList = inspectionPlanItemService.list(new LambdaQueryWrapper<InspectionPlanItem>()
                .eq(InspectionPlanItem::getPlanId, inspectionPlan.getId())
                .orderByAsc(InspectionPlanItem::getSorter));
        if (inspectionPlanItemList.isEmpty()) {
            throw new JeecgBootException("未找到该物料的检验方案检验项明细!");
        }
        //2.生成检验工单
        //todo æ£€éªŒå·¥å•目前还没有生成代码,没有功能
    }
    private List<MesMaterialLoading> deductQuantity(List<MesMaterialLoading> materialLoadingRecordList, BigDecimal quantity) {
        for (MesMaterialLoading mesMaterialLoading : materialLoadingRecordList) {
            if (mesMaterialLoading.getRemainingQuantity().compareTo(quantity) >= 0) {
src/main/java/org/jeecg/modules/qms/enums/PlanCategoryEnum.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package org.jeecg.modules.qms.enums;
public enum PlanCategoryEnum {
    FIRST_INSPECTION, //首检
    ROUTING_INSPECTION, //巡检
    COMPLETION_INSPECTION; //完工检
    public static PlanCategoryEnum fromName(String name) {
        for (PlanCategoryEnum category : PlanCategoryEnum.values()) {
            if (category.name().equals(name)) {
                return category;
            }
        }
        return null;
    }
}