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