From 1eefb88049771407e0d0f9c8711bd473e44a1ba6 Mon Sep 17 00:00:00 2001
From: zhangherong <571457620@qq.com>
Date: 星期四, 07 八月 2025 16:36:19 +0800
Subject: [PATCH] art: SAP 生产订单报工、投料、关闭接口初始代码

---
 src/main/java/org/jeecg/modules/mes/controller/MesProductionWorkOrderController.java |  372 +++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 248 insertions(+), 124 deletions(-)

diff --git a/src/main/java/org/jeecg/modules/mes/controller/MesProductionWorkOrderController.java b/src/main/java/org/jeecg/modules/mes/controller/MesProductionWorkOrderController.java
index 5a340af..d712a21 100644
--- a/src/main/java/org/jeecg/modules/mes/controller/MesProductionWorkOrderController.java
+++ b/src/main/java/org/jeecg/modules/mes/controller/MesProductionWorkOrderController.java
@@ -1,16 +1,26 @@
 package org.jeecg.modules.mes.controller;
 
+import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.system.base.controller.JeecgController;
 import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.mes.dto.MesProductionWorkOrderRepublishRequest;
+import org.jeecg.modules.mes.dto.MesProductionWorkScheduleRequest;
 import org.jeecg.modules.mes.entity.MesProductionWorkOrder;
+import org.jeecg.modules.mes.enums.ProductionWorkOrderStatus;
 import org.jeecg.modules.mes.service.IMesProductionWorkOrderService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -18,144 +28,258 @@
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.util.Arrays;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
-* @Description: 鎺掍骇宸ュ崟
-* @Author: jeecg-boot
-* @Date:   2025-07-04
-* @Version: V1.0
-*/
-@Api(tags="鎺掍骇宸ュ崟")
+ * @Description: 鎺掍骇宸ュ崟
+ * @Author: jeecg-boot
+ * @Date: 2025-07-04
+ * @Version: V1.0
+ */
+@Api(tags = "鎺掍骇宸ュ崟")
 @RestController
 @RequestMapping("/mesproductionworkorder/mesProductionWorkOrder")
 @Slf4j
 public class MesProductionWorkOrderController extends JeecgController<MesProductionWorkOrder, IMesProductionWorkOrderService> {
-   @Autowired
-   private IMesProductionWorkOrderService mesProductionWorkOrderService;
+    @Autowired
+    private IMesProductionWorkOrderService mesProductionWorkOrderService;
 
-   /**
-    * 鍒嗛〉鍒楄〃鏌ヨ
-    *
-    * @param mesProductionWorkOrder
-    * @param pageNo
-    * @param pageSize
-    * @param req
-    * @return
-    */
-   //@AutoLog(value = "鎺掍骇宸ュ崟-鍒嗛〉鍒楄〃鏌ヨ")
-   @ApiOperation(value="鎺掍骇宸ュ崟-鍒嗛〉鍒楄〃鏌ヨ", notes="鎺掍骇宸ュ崟-鍒嗛〉鍒楄〃鏌ヨ")
-   @GetMapping(value = "/list")
-   public Result<IPage<MesProductionWorkOrder>> queryPageList(MesProductionWorkOrder mesProductionWorkOrder,
-                                  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
-                                  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
-                                  HttpServletRequest req) {
-       QueryWrapper<MesProductionWorkOrder> queryWrapper = QueryGenerator.initQueryWrapper(mesProductionWorkOrder, req.getParameterMap());
-       Page<MesProductionWorkOrder> page = new Page<MesProductionWorkOrder>(pageNo, pageSize);
-       IPage<MesProductionWorkOrder> pageList = mesProductionWorkOrderService.page(page, queryWrapper);
-       return Result.OK(pageList);
-   }
+    /**
+     * 鍒嗛〉鍒楄〃鏌ヨ
+     *
+     * @param mesProductionWorkOrder
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    //@AutoLog(value = "鎺掍骇宸ュ崟-鍒嗛〉鍒楄〃鏌ヨ")
+    @ApiOperation(value = "鎺掍骇宸ュ崟-鍒嗛〉鍒楄〃鏌ヨ", notes = "鎺掍骇宸ュ崟-鍒嗛〉鍒楄〃鏌ヨ")
+    @GetMapping(value = "/list")
+    public Result<IPage<MesProductionWorkOrder>> queryPageList(MesProductionWorkOrder mesProductionWorkOrder,
+                                                               @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                               @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                               HttpServletRequest req) {
+        Map<String, String[]> parameterMap = req.getParameterMap();
+        QueryWrapper<MesProductionWorkOrder> queryWrapper = QueryGenerator.initQueryWrapper(mesProductionWorkOrder, parameterMap);
+        String[] startDates = parameterMap.get("startDate");
+        String[] endDates = parameterMap.get("endDate");
+        if (startDates != null && startDates.length > 0) {
+            queryWrapper.ge("work_order_date", startDates[0]);
+        }
+        if (endDates != null && endDates.length > 0) {
+            queryWrapper.le("work_order_date", endDates[0]);
+        }
+        Page<MesProductionWorkOrder> page = new Page<MesProductionWorkOrder>(pageNo, pageSize);
+        IPage<MesProductionWorkOrder> pageList = mesProductionWorkOrderService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
 
-   /**
-    *   娣诲姞
-    *
-    * @param mesProductionWorkOrder
-    * @return
-    */
-   @AutoLog(value = "鎺掍骇宸ュ崟-娣诲姞")
-   @ApiOperation(value="鎺掍骇宸ュ崟-娣诲姞", notes="鎺掍骇宸ュ崟-娣诲姞")
-   //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:add")
-   @PostMapping(value = "/add")
-   public Result<String> add(@RequestBody MesProductionWorkOrder mesProductionWorkOrder) {
-       mesProductionWorkOrderService.save(mesProductionWorkOrder);
-       return Result.OK("娣诲姞鎴愬姛锛�");
-   }
+    /**
+     * 娣诲姞
+     *
+     * @param mesProductionWorkOrder
+     * @return
+     */
+    @AutoLog(value = "鎺掍骇宸ュ崟-娣诲姞")
+    @ApiOperation(value = "鎺掍骇宸ュ崟-娣诲姞", notes = "鎺掍骇宸ュ崟-娣诲姞")
+    //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:add")
+    @PostMapping(value = "/add")
+    public Result<String> add(@RequestBody MesProductionWorkOrder mesProductionWorkOrder) {
+        mesProductionWorkOrderService.save(mesProductionWorkOrder);
+        return Result.OK("娣诲姞鎴愬姛锛�");
+    }
 
-   /**
-    *  缂栬緫
-    *
-    * @param mesProductionWorkOrder
-    * @return
-    */
-   @AutoLog(value = "鎺掍骇宸ュ崟-缂栬緫")
-   @ApiOperation(value="鎺掍骇宸ュ崟-缂栬緫", notes="鎺掍骇宸ュ崟-缂栬緫")
-   //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:edit")
-   @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
-   public Result<String> edit(@RequestBody MesProductionWorkOrder mesProductionWorkOrder) {
-       mesProductionWorkOrderService.updateById(mesProductionWorkOrder);
-       return Result.OK("缂栬緫鎴愬姛!");
-   }
+    @AutoLog(value = "鎺掍骇宸ュ崟-淇濆瓨鎺掍骇璁″垝")
+    @ApiOperation(value = "鎺掍骇宸ュ崟-淇濆瓨鎺掍骇璁″垝", notes = "鎺掍骇宸ュ崟-淇濆瓨鎺掍骇璁″垝")
+    //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:saveSchedulePlan")
+    @PostMapping("/addSchedulePlan")
+    public Result<String> addSchedulePlan(@RequestBody List<MesProductionWorkOrder> mesProductionWorkOrderList) {
+        if (!validatePlan(mesProductionWorkOrderList)) {
+            return Result.error("鎺掍骇璁″垝涓嶅悎鐞嗭紝淇濆瓨澶辫触锛�");
+        }
+        mesProductionWorkOrderList.forEach(item -> item.setWorkOrderStatus(ProductionWorkOrderStatus.NEW.name()));
+        mesProductionWorkOrderService.saveBatch(mesProductionWorkOrderList);
+        return Result.OK("娣诲姞鎴愬姛锛�");
+    }
 
-   /**
-    *   閫氳繃id鍒犻櫎
-    *
-    * @param id
-    * @return
-    */
-   @AutoLog(value = "鎺掍骇宸ュ崟-閫氳繃id鍒犻櫎")
-   @ApiOperation(value="鎺掍骇宸ュ崟-閫氳繃id鍒犻櫎", notes="鎺掍骇宸ュ崟-閫氳繃id鍒犻櫎")
-   //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:delete")
-   @DeleteMapping(value = "/delete")
-   public Result<String> delete(@RequestParam(name="id",required=true) String id) {
-       mesProductionWorkOrderService.removeById(id);
-       return Result.OK("鍒犻櫎鎴愬姛!");
-   }
+    private boolean validatePlan(List<MesProductionWorkOrder> mesProductionWorkOrderList) {
+        //鍚屼竴鐗╂枡銆佸悓涓�鏃ユ湡涓嬨�佸彧鑳藉瓨鍦ㄤ竴涓彮娆�
+        Map<String, List<MesProductionWorkOrder>> orderMapByMaterial = mesProductionWorkOrderList.stream()
+                .collect(Collectors.groupingBy(MesProductionWorkOrder::getMaterialNumber));
+        for (String materialNumber : orderMapByMaterial.keySet()) {
+            List<MesProductionWorkOrder> workOrderList = orderMapByMaterial.get(materialNumber);
+            Map<Date, List<MesProductionWorkOrder>> orderMapByDate = workOrderList.stream()
+                    .collect(Collectors.groupingBy(MesProductionWorkOrder::getWorkOrderDate));
+            for (Date date : orderMapByDate.keySet()) {
+                List<MesProductionWorkOrder> orderList = orderMapByDate.get(date);
+                Map<String, List<MesProductionWorkOrder>> orderMapByShift = orderList.stream()
+                        .collect(Collectors.groupingBy(MesProductionWorkOrder::getShiftId));
+                for (String shiftId : orderMapByShift.keySet()) {
+                    List<MesProductionWorkOrder> list = orderMapByShift.get(shiftId);
+                    if (list.size() > 1) {
+                        return false;
+                    }
+                }
+            }
+        }
+        return true;
+    }
 
-   /**
-    *  鎵归噺鍒犻櫎
-    *
-    * @param ids
-    * @return
-    */
-   @AutoLog(value = "鎺掍骇宸ュ崟-鎵归噺鍒犻櫎")
-   @ApiOperation(value="鎺掍骇宸ュ崟-鎵归噺鍒犻櫎", notes="鎺掍骇宸ュ崟-鎵归噺鍒犻櫎")
-   //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:deleteBatch")
-   @DeleteMapping(value = "/deleteBatch")
-   public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
-       this.mesProductionWorkOrderService.removeByIds(Arrays.asList(ids.split(",")));
-       return Result.OK("鎵归噺鍒犻櫎鎴愬姛!");
-   }
+    @AutoLog(value = "鎺掍骇宸ュ崟-鐢熸垚鎺掍骇璁″垝")
+    @ApiOperation(value = "鎺掍骇宸ュ崟-鐢熸垚鎺掍骇璁″垝", notes = "鎺掍骇宸ュ崟-鐢熸垚鎺掍骇璁″垝")
+    //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:schedule")
+    @GetMapping(value = "/schedule")
+    public Result<?> schedule(MesProductionWorkScheduleRequest request) {
+        if (StringUtils.isBlank(request.getFactoryId())
+                || Objects.isNull(request.getStartDate())
+                || Objects.isNull(request.getEndDate())) {
+            return Result.error("璇蜂紶鍏ュ繀瑕佸弬鏁帮紒");
+        }
+        return Result.ok(mesProductionWorkOrderService.schedule(request));
+    }
 
-   /**
-    * 閫氳繃id鏌ヨ
-    *
-    * @param id
-    * @return
-    */
-   //@AutoLog(value = "鎺掍骇宸ュ崟-閫氳繃id鏌ヨ")
-   @ApiOperation(value="鎺掍骇宸ュ崟-閫氳繃id鏌ヨ", notes="鎺掍骇宸ュ崟-閫氳繃id鏌ヨ")
-   @GetMapping(value = "/queryById")
-   public Result<MesProductionWorkOrder> queryById(@RequestParam(name="id",required=true) String id) {
-       MesProductionWorkOrder mesProductionWorkOrder = mesProductionWorkOrderService.getById(id);
-       if(mesProductionWorkOrder==null) {
-           return Result.error("鏈壘鍒板搴旀暟鎹�");
-       }
-       return Result.OK(mesProductionWorkOrder);
-   }
+    @AutoLog(value = "鎺掍骇宸ュ崟-鍙戝竷鎺掍骇璁″垝")
+    @ApiOperation(value = "鎺掍骇宸ュ崟-鍙戝竷鎺掍骇璁″垝", notes = "鎺掍骇宸ュ崟-鍙戝竷鎺掍骇璁″垝")
+    //@RequiresPermissions("mes:production:work:order:publish")
+    @RequestMapping(value = "/publish", method = {RequestMethod.POST, RequestMethod.PUT})
+    public Result<String> publish(@RequestParam("ids") String ids) {
+        List<String> idList = Arrays.asList(ids.split(","));
+        List<MesProductionWorkOrder> list = mesProductionWorkOrderService.list(new LambdaQueryWrapper<MesProductionWorkOrder>()
+                .in(MesProductionWorkOrder::getId, idList)
+                .eq(MesProductionWorkOrder::getDelFlag, CommonConstant.DEL_FLAG_0)).stream()
+                .filter(i -> !ProductionWorkOrderStatus.NEW.name().equals(i.getWorkOrderStatus()))
+                .collect(Collectors.toList());
+        if (!list.isEmpty()) {
+            return Result.error("宸插彂甯冪殑鎺掍骇璁″垝涓嶈兘閲嶅鍙戝竷锛�");
+        }
+        List<MesProductionWorkOrder> publishList = CollectionUtil.newArrayList();
+        idList.forEach(id -> {
+            MesProductionWorkOrder publish = new MesProductionWorkOrder()
+                    .setId(id)
+                    .setPublishTime(new Date())
+                    .setPublisher(Objects.requireNonNull(getCurrentUser()).getUsername())
+                    .setWorkOrderStatus(ProductionWorkOrderStatus.PUBLISHED.name());
+            publishList.add(publish);
+        });
+        mesProductionWorkOrderService.updateBatchById(publishList);
+        return Result.OK("鍙戝竷鎴愬姛");
+    }
 
-   /**
-   * 瀵煎嚭excel
-   *
-   * @param request
-   * @param mesProductionWorkOrder
-   */
-   //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:exportXls")
-   @RequestMapping(value = "/exportXls")
-   public ModelAndView exportXls(HttpServletRequest request, MesProductionWorkOrder mesProductionWorkOrder) {
-       return super.exportXls(request, mesProductionWorkOrder, MesProductionWorkOrder.class, "鎺掍骇宸ュ崟");
-   }
+    @AutoLog(value = "鎺掍骇宸ュ崟-閲嶅彂甯冩帓浜ц鍒�")
+    @ApiOperation(value="鎺掍骇宸ュ崟-閲嶅彂甯冩帓浜ц鍒�", notes="閲嶅彂甯冩帓浜ц鍒�")
+    //@RequiresPermissions("mes:production:work:order:republish")
+    @PostMapping(value = "/republish")
+    public Result<String> republish(@RequestBody MesProductionWorkOrderRepublishRequest request) {
+        MesProductionWorkOrder workOrder = mesProductionWorkOrderService.getById(request.getId());
+        //todo 鍒ゆ柇鐝鏄惁缁撴潫鐨勯�昏緫
+        if (!ProductionWorkOrderStatus.PUBLISHED.name().equals(workOrder.getWorkOrderStatus())) {
+            return Result.error("褰撳墠宸ュ崟鐘舵�佷笉鏀寔閲嶅彂甯冿紒");
+        }
+        MesProductionWorkOrder republish = new MesProductionWorkOrder()
+                .setId(request.getId())
+                .setPlanQuantity(request.getPlanQuantity())
+                .setRepublisher(Objects.requireNonNull(getCurrentUser()).getUsername())
+                .setRepublishTime(new Date())
+                .setRepublishReason(request.getRepublishReason())
+                .setWorkOrderStatus(ProductionWorkOrderStatus.REPUBLISHED.name());
+        mesProductionWorkOrderService.updateById(republish);
+        return Result.ok("閲嶅彂甯冩垚鍔燂紒");
+    }
 
-   /**
+    /**
+     * 缂栬緫
+     *
+     * @param mesProductionWorkOrder
+     * @return
+     */
+    @AutoLog(value = "鎺掍骇宸ュ崟-缂栬緫")
+    @ApiOperation(value = "鎺掍骇宸ュ崟-缂栬緫", notes = "鎺掍骇宸ュ崟-缂栬緫")
+    //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:edit")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<String> edit(@RequestBody MesProductionWorkOrder mesProductionWorkOrder) {
+        mesProductionWorkOrderService.updateById(mesProductionWorkOrder);
+        return Result.OK("缂栬緫鎴愬姛!");
+    }
+
+    /**
+     * 閫氳繃id鍒犻櫎
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "鎺掍骇宸ュ崟-閫氳繃id鍒犻櫎")
+    @ApiOperation(value = "鎺掍骇宸ュ崟-閫氳繃id鍒犻櫎", notes = "鎺掍骇宸ュ崟-閫氳繃id鍒犻櫎")
+    //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:delete")
+    @DeleteMapping(value = "/delete")
+    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
+        mesProductionWorkOrderService.removeById(id);
+        return Result.OK("鍒犻櫎鎴愬姛!");
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "鎺掍骇宸ュ崟-鎵归噺鍒犻櫎")
+    @ApiOperation(value = "鎺掍骇宸ュ崟-鎵归噺鍒犻櫎", notes = "鎺掍骇宸ュ崟-鎵归噺鍒犻櫎")
+    //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:deleteBatch")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        this.mesProductionWorkOrderService.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<MesProductionWorkOrder> queryById(@RequestParam(name = "id", required = true) String id) {
+        MesProductionWorkOrder mesProductionWorkOrder = mesProductionWorkOrderService.getById(id);
+        if (mesProductionWorkOrder == null) {
+            return Result.error("鏈壘鍒板搴旀暟鎹�");
+        }
+        return Result.OK(mesProductionWorkOrder);
+    }
+
+    /**
+     * 瀵煎嚭excel
+     *
+     * @param request
+     * @param mesProductionWorkOrder
+     */
+    //@RequiresPermissions("org.jeecg.modules:mes_production_work_order:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, MesProductionWorkOrder mesProductionWorkOrder) {
+        return super.exportXls(request, mesProductionWorkOrder, MesProductionWorkOrder.class, "鎺掍骇宸ュ崟");
+    }
+
+    /**
      * 閫氳繃excel瀵煎叆鏁版嵁
-   *
-   * @param request
-   * @param response
-   * @return
-   */
-   //@RequiresPermissions("mes_production_work_order:importExcel")
-   @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
-   public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
-       return super.importExcel(request, response, MesProductionWorkOrder.class);
-   }
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    //@RequiresPermissions("mes_production_work_order:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, MesProductionWorkOrder.class);
+    }
 
+    private LoginUser getCurrentUser() {
+        try {
+            return (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        } catch (Exception e) {
+            return null;
+        }
+    }
 }

--
Gitblit v1.9.3