package com.jcdm.main.om.productionOrde.controller; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.jcdm.common.annotation.Log; import com.jcdm.common.core.controller.BaseController; import com.jcdm.common.core.domain.AjaxResult; import com.jcdm.common.core.page.TableDataInfo; import com.jcdm.common.enums.BusinessType; import com.jcdm.common.exception.ServiceException; import com.jcdm.common.utils.poi.ExcelUtil; import com.jcdm.main.bs.modelNumber.domain.BsModelNumber; import com.jcdm.main.bs.modelNumber.service.IBsModelNumberService; import com.jcdm.main.bs.orderScheduling.domain.BsOrderScheduling; import com.jcdm.main.bs.orderScheduling.service.IBsOrderSchedulingService; import com.jcdm.main.om.productionOrde.domain.OmProductionOrdeInfo; import com.jcdm.main.om.productionOrde.service.IOmProductionOrdeInfoService; import com.jcdm.main.webservice.service.ReceivingServices; import org.apache.commons.lang3.StringUtils; 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.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; import static org.apache.commons.lang3.SystemUtils.getUserName; /** * 生产工单Controller * * @author ruimin * @date 2023-12-11 */ @RestController @RequestMapping("/om/productionOrde") public class OmProductionOrdeInfoController extends BaseController { @Autowired private IOmProductionOrdeInfoService omProductionOrdeInfoService; @Autowired private IBsOrderSchedulingService bsOrderSchedulingService; @Autowired private IBsModelNumberService bsModelNumberService; /** * 查询生产工单列表 */ @PreAuthorize("@ss.hasPermi('om:productionOrde:list')") @GetMapping("/list") public TableDataInfo list(OmProductionOrdeInfo omProductionOrdeInfo) { startPage(); if (StrUtil.isNotBlank(omProductionOrdeInfo.getEngineNo())){ BsOrderScheduling bsOrderScheduling = bsOrderSchedulingService.selectBsOrderSchedulingSNCode(omProductionOrdeInfo.getEngineNo()); if (ObjectUtil.isNotEmpty(bsOrderScheduling)){ String orderNo = bsOrderScheduling.getOrderNo(); if (StrUtil.isNotBlank(orderNo)){ omProductionOrdeInfo.setWorkOrderNo(orderNo); } } } List list = omProductionOrdeInfoService.selectOmProductionOrdeInfoList(omProductionOrdeInfo); return getDataTable(list); } /** * 导出生产工单列表 */ @PreAuthorize("@ss.hasPermi('om:productionOrde:export')") @Log(title = "生产工单", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, OmProductionOrdeInfo omProductionOrdeInfo) { List list = omProductionOrdeInfoService.selectOmProductionOrdeInfoList(omProductionOrdeInfo); ExcelUtil util = new ExcelUtil(OmProductionOrdeInfo.class); util.exportExcel(response, list, "生产工单数据"); } /** * 获取生产工单详细信息 */ @PreAuthorize("@ss.hasPermi('om:productionOrde:query')") @GetMapping(value = "/{id}") public AjaxResult getInfo(@PathVariable("id") Long id) { return success(omProductionOrdeInfoService.selectOmProductionOrdeInfoById(id)); } /** * 获取生产工单详细信息 */ @PreAuthorize("@ss.hasPermi('om:productionOrde:query')") @GetMapping("/ids/{ids}") public AjaxResult getInfo(@PathVariable Long[] ids) { List omProductionOrdeInfos = omProductionOrdeInfoService.selectOmProductionOrderListById(ids); if (CollUtil.isNotEmpty(omProductionOrdeInfos)){ List collect = omProductionOrdeInfos.stream().map(OmProductionOrdeInfo::getProductCode).distinct().collect(Collectors.toList()); if (CollUtil.isNotEmpty(collect)){ if (collect.size()>1){ return error("存在多个不同的产品编号,请检查"); } } List collect1 = omProductionOrdeInfos.stream().map(OmProductionOrdeInfo::getOrderStatus).distinct().collect(Collectors.toList()); if (CollUtil.isNotEmpty(collect1)){ if (collect1.size()>1){ return error("存在多个不同的工单状态,请检查"); } } } return success(omProductionOrdeInfoService.selectOmProductionOrdeInfoByIds(ids)); } /** * 新增生产工单 */ @PreAuthorize("@ss.hasPermi('om:productionOrde:add')") @Log(title = "生产工单", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@RequestBody OmProductionOrdeInfo omProductionOrdeInfo) { return toAjax(omProductionOrdeInfoService.insertOmProductionOrdeInfo(omProductionOrdeInfo)); } /** * 生成按钮 */ @PostMapping("/orderSchedulingForBoxCode") public AjaxResult addOrderSchedulingForBoxCode(@RequestBody OmProductionOrdeInfo omProductionOrdeInfo) { //获取当前时间 LocalDateTime date= LocalDateTime.now(); //创建日期时间对象格式化器,日期格式类似: 2023-05-23 22:18:38 DateTimeFormatter formatter= DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); //将时间转化为对应格式的字符串 String fomateDate=date.format(formatter).toString(); Integer startCode = Integer.parseInt(omProductionOrdeInfo.getStartCode());//开始编号 String dateTimeRule = omProductionOrdeInfo.getDateTimeRule(); //校验编号重复 BsModelNumber bsModelNumberCheck = new BsModelNumber(); bsModelNumberCheck.setModel(omProductionOrdeInfo.getTypeZ()); bsModelNumberCheck.setModelDate(dateTimeRule); List numbers = bsModelNumberService.selectBsModelNumberList(bsModelNumberCheck); BsModelNumber bsModelNumber = new BsModelNumber(); Integer maxNum = 0; if (CollUtil.isNotEmpty(numbers)){ bsModelNumber = numbers.get(0); String maxnumValue = bsModelNumber.getMaxnumValue(); if (StrUtil.isNotBlank(maxnumValue)){ maxNum = Integer.parseInt(maxnumValue); } } if (startCode<=maxNum){ return AjaxResult.error("编号重复,请检查!"); } Long[] id=omProductionOrdeInfo.getIdNums(); List omProductionOrdeInfoList = omProductionOrdeInfoService.selectOmProductionOrderListById(id); if (CollUtil.isNotEmpty(omProductionOrdeInfoList)){ omProductionOrdeInfoList.forEach(x -> { if (ObjectUtil.isNotNull(x.getWorkOrderNo())){ long l = Long.parseLong(x.getWorkOrderNo()); x.setWorkOrderNoLong(l); } }); List sortList = omProductionOrdeInfoList.stream().sorted(Comparator.comparing(OmProductionOrdeInfo::getWorkOrderNoLong)).collect(Collectors.toList()); for (OmProductionOrdeInfo ProductionOrde : sortList) { Integer planQty = Math.toIntExact(ProductionOrde.getPlanQty());//计划数量 if(planQty>0) { for (int i = 0; i < planQty; i++) { String engineNo = omProductionOrdeInfo.getTypeZ() + " " + dateTimeRule + StringUtils.leftPad(String.valueOf(startCode), 3, "0"); BsOrderScheduling bsOrderScheduling = new BsOrderScheduling(); bsOrderScheduling.setOrderNo(ProductionOrde.getWorkOrderNo()); bsOrderScheduling.setWorkingHours(String.valueOf(i+1)); bsOrderScheduling.setModel(ProductionOrde.getTypeZ()); bsOrderScheduling.setEngineNo(engineNo); bsOrderScheduling.setProductionStatus("1"); bsOrderScheduling.setOperator(getUserName()); bsOrderScheduling.setOperateTime(fomateDate); bsOrderScheduling.setProductType(ProductionOrde.getTypeL());//产品类型 bsOrderScheduling.setWhetherOrPrint("0"); bsOrderSchedulingService.insertBsOrderScheduling(bsOrderScheduling); startCode++; } } //更新工单状态 ProductionOrde.setOrderStatus("2"); omProductionOrdeInfoService.updateOmProductionOrdeInfo(ProductionOrde); } } //新增机型序号 if (ObjectUtil.isNotNull(bsModelNumber.getId())){ bsModelNumber.setMaxnumValue((startCode - 1) + ""); bsModelNumber.setSaveTime(fomateDate); bsModelNumber.setLastNumber((startCode - 1) + ""); bsModelNumberService.updateBsModelNumber(bsModelNumber); } else { BsModelNumber bsModelNumberSave = new BsModelNumber(); bsModelNumberSave.setModel(omProductionOrdeInfo.getTypeZ()); bsModelNumberSave.setModelDate(dateTimeRule); bsModelNumberSave.setMaxnumValue((startCode - 1) + ""); bsModelNumberSave.setSaveTime(fomateDate); bsModelNumberSave.setLastNumber((startCode - 1) + ""); bsModelNumberService.insertBsModelNumber(bsModelNumberSave); } return toAjax(1); } /** * 修改生产工单 */ @PreAuthorize("@ss.hasPermi('om:productionOrde:edit')") @Log(title = "生产工单", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@RequestBody OmProductionOrdeInfo omProductionOrdeInfo) { return toAjax(omProductionOrdeInfoService.updateOmProductionOrdeInfo(omProductionOrdeInfo)); } /** * 删除生产工单 */ @PreAuthorize("@ss.hasPermi('om:productionOrde:remove')") @Log(title = "生产工单", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public AjaxResult remove(@PathVariable Long[] ids) { return toAjax(omProductionOrdeInfoService.deleteOmProductionOrdeInfoByIds(ids)); } /** * table列上移下移 */ @Log(title = "生产工单", businessType = BusinessType.DELETE) @GetMapping("/upDownMove") public AjaxResult upDownMove(OmProductionOrdeInfo omProductionOrdeInfo) { return omProductionOrdeInfoService.upDownMove(omProductionOrdeInfo); } /** * 接收工单 */ @PreAuthorize("@ss.hasPermi('om:productionOrde:receive')") @GetMapping("/getProductionNotice") public AjaxResult getProductionNotice(OmProductionOrdeInfo omProductionOrdeInfo) { String factory = omProductionOrdeInfo.getWorkshopCode(); String productionNotice = omProductionOrdeInfo.getProductionNotice(); if (StrUtil.isBlank(productionNotice)){ throw new ServiceException("请输入生产通知单号"); } if (StrUtil.isBlank(factory)){ throw new ServiceException("请选择工厂编号"); } OmProductionOrdeInfo queryProductOrder = new OmProductionOrdeInfo(); queryProductOrder.setWorkshopCode(factory); queryProductOrder.setProductionNotice(productionNotice); List omProductionOrdeInfos = omProductionOrdeInfoService.selectOmProductionOrdeInfoList(queryProductOrder); if(CollUtil.isEmpty(omProductionOrdeInfos)){ try { logger.info("接收工单号:,{}",productionNotice); ReceivingServices.insertWebserviceData(factory,productionNotice); } catch (Exception e) { return error("接收失败!请检查通知单号"); } }else { return warn("该通知单已经接收完毕,不能重复接收!"); } return AjaxResult.success("接收成功!"); } }