1
0

2 Incheckningar cb76c5a448 ... 6692a78b60

Upphovsman SHA1 Meddelande Datum
  SJ 6692a78b60 feat:tool转换 报表统计分组合并 2 veckor sedan
  SJ 9f57ed4ceb feat: tool转换规则 2 veckor sedan

+ 171 - 0
lg-code/src/main/java/org/jeecg/modules/ProdPlan/controller/ToolRuleController.java

@@ -0,0 +1,171 @@
+package org.jeecg.modules.ProdPlan.controller;
+
+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 javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.ProdPlan.entity.ToolRule;
+import org.jeecg.modules.ProdPlan.service.IToolRuleService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+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: tool转换规则
+ * @Author: jeecg-boot
+ * @Date:   2025-07-03
+ * @Version: V1.0
+ */
+@Api(tags="tool转换规则")
+@RestController
+@RequestMapping("/ProdPlan/toolRule")
+@Slf4j
+public class ToolRuleController extends JeecgController<ToolRule, IToolRuleService> {
+	@Autowired
+	private IToolRuleService toolRuleService;
+	
+	/**
+	 * 分页列表查询
+	 *
+	 * @param toolRule
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "tool转换规则-分页列表查询")
+	@ApiOperation(value="tool转换规则-分页列表查询", notes="tool转换规则-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<ToolRule>> queryPageList(ToolRule toolRule,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<ToolRule> queryWrapper = QueryGenerator.initQueryWrapper(toolRule, req.getParameterMap());
+		Page<ToolRule> page = new Page<ToolRule>(pageNo, pageSize);
+		IPage<ToolRule> pageList = toolRuleService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param toolRule
+	 * @return
+	 */
+	@AutoLog(value = "tool转换规则-添加")
+	@ApiOperation(value="tool转换规则-添加", notes="tool转换规则-添加")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody ToolRule toolRule) {
+		toolRuleService.save(toolRule);
+		return Result.OK("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param toolRule
+	 * @return
+	 */
+	@AutoLog(value = "tool转换规则-编辑")
+	@ApiOperation(value="tool转换规则-编辑", notes="tool转换规则-编辑")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody ToolRule toolRule) {
+		toolRuleService.updateById(toolRule);
+		return Result.OK("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "tool转换规则-通过id删除")
+	@ApiOperation(value="tool转换规则-通过id删除", notes="tool转换规则-通过id删除")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		toolRuleService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "tool转换规则-批量删除")
+	@ApiOperation(value="tool转换规则-批量删除", notes="tool转换规则-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.toolRuleService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("批量删除成功!");
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "tool转换规则-通过id查询")
+	@ApiOperation(value="tool转换规则-通过id查询", notes="tool转换规则-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<ToolRule> queryById(@RequestParam(name="id",required=true) String id) {
+		ToolRule toolRule = toolRuleService.getById(id);
+		if(toolRule==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(toolRule);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param toolRule
+    */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, ToolRule toolRule) {
+        return super.exportXls(request, toolRule, ToolRule.class, "tool转换规则");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, ToolRule.class);
+    }
+
+}

+ 3 - 0
lg-code/src/main/java/org/jeecg/modules/ProdPlan/entity/DelayProduct.java

@@ -5,6 +5,8 @@ import java.io.UnsupportedEncodingException;
 import java.time.LocalDate;
 import java.util.Date;
 import java.math.BigDecimal;
+import java.util.Objects;
+
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -123,4 +125,5 @@ public class DelayProduct implements Serializable {
     /**region*/
     @Excel(name = "Region", width = 15)
     private String region;
+
 }

+ 66 - 0
lg-code/src/main/java/org/jeecg/modules/ProdPlan/entity/ToolRule.java

@@ -0,0 +1,66 @@
+package org.jeecg.modules.ProdPlan.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: tool转换规则
+ * @Author: jeecg-boot
+ * @Date:   2025-07-03
+ * @Version: V1.0
+ */
+@Data
+@TableName("lg_tool_rule")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="lg_tool_rule对象", description="tool转换规则")
+public class ToolRule implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键")
+    private java.lang.String id;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private java.lang.String createBy;
+	/**创建日期*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建日期")
+    private java.util.Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private java.lang.String updateBy;
+	/**更新日期*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新日期")
+    private java.util.Date updateTime;
+	/**所属部门*/
+    @ApiModelProperty(value = "所属部门")
+    private java.lang.String sysOrgCode;
+	/**Original Tool*/
+	@Excel(name = "Original Tool", width = 15)
+    @ApiModelProperty(value = "Original Tool")
+    private java.lang.String originaltool;
+	/**Reversed Tool*/
+	@Excel(name = "Reversed Tool", width = 15)
+    @ApiModelProperty(value = "Reversed Tool")
+    private java.lang.String reversedtool;
+}

+ 17 - 0
lg-code/src/main/java/org/jeecg/modules/ProdPlan/mapper/ToolRuleMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.ProdPlan.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.ProdPlan.entity.ToolRule;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: tool转换规则
+ * @Author: jeecg-boot
+ * @Date:   2025-07-03
+ * @Version: V1.0
+ */
+public interface ToolRuleMapper extends BaseMapper<ToolRule> {
+
+}

+ 5 - 0
lg-code/src/main/java/org/jeecg/modules/ProdPlan/mapper/xml/ToolRuleMapper.xml

@@ -0,0 +1,5 @@
+<?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="org.jeecg.modules.ProdPlan.mapper.ToolRuleMapper">
+
+</mapper>

+ 14 - 0
lg-code/src/main/java/org/jeecg/modules/ProdPlan/service/IToolRuleService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.ProdPlan.service;
+
+import org.jeecg.modules.ProdPlan.entity.ToolRule;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: tool转换规则
+ * @Author: jeecg-boot
+ * @Date:   2025-07-03
+ * @Version: V1.0
+ */
+public interface IToolRuleService extends IService<ToolRule> {
+
+}

+ 38 - 2
lg-code/src/main/java/org/jeecg/modules/ProdPlan/service/impl/ProdPlanServiceImpl.java

@@ -17,10 +17,12 @@ import org.jeecg.modules.DestRule.service.IDestRuleService;
 import org.jeecg.modules.ProdPlan.entity.DelayProduct;
 import org.jeecg.modules.ProdPlan.entity.DeliveredQuantity;
 import org.jeecg.modules.ProdPlan.entity.ProdPlan;
+import org.jeecg.modules.ProdPlan.entity.ToolRule;
 import org.jeecg.modules.ProdPlan.mapper.ProdPlanMapper;
 import org.jeecg.modules.ProdPlan.service.IDelayProductService;
 import org.jeecg.modules.ProdPlan.service.IDeliveredQuantityService;
 import org.jeecg.modules.ProdPlan.service.IProdPlanService;
+import org.jeecg.modules.ProdPlan.service.IToolRuleService;
 import org.jeecg.modules.ProdPlan.util.EmailUtil;
 import org.jeecg.modules.ProdPlan.vo.ReportDetailVo;
 import org.jeecg.modules.ReasonRule.entity.ReasonRule;
@@ -73,6 +75,9 @@ public class ProdPlanServiceImpl extends ServiceImpl<ProdPlanMapper, ProdPlan> i
     @Autowired
     private IContactService contactService;
 
+    @Autowired
+    private IToolRuleService toolRuleService;
+
     @Override
     public List<DelayProduct> parseExcel(String filePath) {
         List<DelayProduct> delayProducts = new ArrayList<>();
@@ -115,6 +120,8 @@ public class ProdPlanServiceImpl extends ServiceImpl<ProdPlanMapper, ProdPlan> i
             Map<String, String> destRules = destRuleList.stream().collect(Collectors.toMap(DestRule::getDestination, DestRule::getSchedule));
             List<ReasonRule> reasonRuleList = reasonRuleService.list();
             Map<String, ReasonRule> reasonRules = reasonRuleList.stream().collect(Collectors.toMap(i-> i.getDept()+" "+i.getReason(), i->i));
+            List<ToolRule> toolRuleList = toolRuleService.list();
+            Map<String, String> toolRules = toolRuleList.stream().collect(Collectors.toMap(ToolRule::getOriginaltool, ToolRule::getReversedtool));
 
             // 清洗数据,按规则匹配规定交付时间,计算超出时间,并转换延期原因
             for (int i = 0; i < delayProducts.size(); i++) {
@@ -163,6 +170,10 @@ public class ProdPlanServiceImpl extends ServiceImpl<ProdPlanMapper, ProdPlan> i
                     delayProduct.setRemark("OTHER");
                     delayProduct.setDept("OTHER");
                 }
+
+                if(toolRules.get(delayProduct.getTool())!=null){
+                    delayProduct.setTool(toolRules.get(delayProduct.getTool()));
+                }
             }
         } catch (FileNotFoundException e) {
             throw new RuntimeException(e);
@@ -424,7 +435,7 @@ public class ProdPlanServiceImpl extends ServiceImpl<ProdPlanMapper, ProdPlan> i
         sheet.setPrintGridlines(false);
         sheet.setDefaultRowHeightInPoints(20f);
         try {
-            insertImageToSheetAtPosition(workbook,sheet,pie,"pie",0,0,6,17);
+            insertImageToSheetAtPosition(workbook,sheet,pie,"pie",0,0,7,17);
             insertImageToSheetAtPosition(workbook,sheet,barLine,"barLine",0,7,10,18);
         } catch (Exception e) {
             throw new RuntimeException(e);
@@ -646,13 +657,37 @@ public class ProdPlanServiceImpl extends ServiceImpl<ProdPlanMapper, ProdPlan> i
 
     @NotNull
     private List<ReportDetailVo> getReportDetailVos(ProdPlan prodPlan, int currentWeek) {
+        // 查询前四后三周的延期生产
         QueryWrapper<DelayProduct> delayProductQueryWrapper = new QueryWrapper<>();
         delayProductQueryWrapper.between("pst", prodPlan.getPlanDate().minusWeeks(4), prodPlan.getPlanDate().plusWeeks(3));
         List<DelayProduct> delayProductList = this.delayProductService.list(delayProductQueryWrapper);
+        Map<String, List<DelayProduct>> delayProductMap = delayProductList.stream().collect(Collectors.groupingBy(i->{
+            return String.join("|",
+                    Objects.toString(i.getRegion(), ""),
+                    Objects.toString(i.getModel(), ""),
+                    Objects.toString(i.getWeek(), ""),
+                    Objects.toString(i.getLine(), ""),
+                    Objects.toString(i.getTool(), ""),
+                    Objects.toString(i.getBucket(), ""),
+                    Objects.toString(i.getPst(), ""),
+                    Objects.toString(i.getDueDate(), ""),
+                    Objects.toString(i.getDept(), ""),
+                    Objects.toString(i.getRemark(), ""),
+                    Objects.toString(i.getOverdueDays(), "")
+            );
+        }, Collectors.toList()));
+
         List<ReportDetailVo> detailVoList = new ArrayList<>();
-        delayProductList.forEach(delayProduct -> {
+        delayProductMap.forEach((key,delayProducts)->{
+            DelayProduct delayProduct = delayProducts.get(0);
             ReportDetailVo detailVo = new ReportDetailVo();
             BeanUtils.copyProperties(delayProduct, detailVo);
+
+            Integer totalPO = delayProducts.stream()
+                    .mapToInt(i -> i.getPo() != null ? i.getPo() : 0)
+                    .sum();
+            detailVo.setPo(totalPO);
+
             detailVo.setPst(delayProduct.getPst().format(DateTimeFormatter.ofPattern("MM/dd")));
             detailVo.setDueDate(delayProduct.getDueDate().format(DateTimeFormatter.ofPattern("MM/dd")));
             LocalDate endDate = delayProduct.getPst();
@@ -677,6 +712,7 @@ public class ProdPlanServiceImpl extends ServiceImpl<ProdPlanMapper, ProdPlan> i
             detailVoList.add(detailVo);
         });
 
+        //不良品
         QueryWrapper<DefectiveProduct> defectiveProductQueryWrapper = new QueryWrapper<>();
         delayProductQueryWrapper.between("due_date", prodPlan.getPlanDate().minusWeeks(4), prodPlan.getPlanDate().plusWeeks(3));
         List<DefectiveProduct> defectiveProductList = this.defectiveProductService.list(defectiveProductQueryWrapper);

+ 19 - 0
lg-code/src/main/java/org/jeecg/modules/ProdPlan/service/impl/ToolRuleServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.ProdPlan.service.impl;
+
+import org.jeecg.modules.ProdPlan.entity.ToolRule;
+import org.jeecg.modules.ProdPlan.mapper.ToolRuleMapper;
+import org.jeecg.modules.ProdPlan.service.IToolRuleService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: tool转换规则
+ * @Author: jeecg-boot
+ * @Date:   2025-07-03
+ * @Version: V1.0
+ */
+@Service
+public class ToolRuleServiceImpl extends ServiceImpl<ToolRuleMapper, ToolRule> implements IToolRuleService {
+
+}