477c18391288f0cee90fbaab3a4a7fd752813f11..2786ed1fe266240fa6216c5dd6a9014481963d24
2025-05-20 sfd
Merge branch 'dev' of http://192.168.50.149:8085/r/aps-backend into dev
2786ed 对比 | 目录
2025-05-20 sfd
修改权限字符串
e84930 对比 | 目录
2025-05-20 hongjli
Merge remote-tracking branch 'origin/dev' into dev
67e1e6 对比 | 目录
2025-05-20 hongjli
查询焊缝统计表V2列表、修改焊缝统计表V2、刷新焊缝统计表V2数据
5e3d81 对比 | 目录
2025-05-20 zhanghl
Merge remote-tracking branch 'origin/dev' into dev
fa1a70 对比 | 目录
2025-05-20 zhanghl
钣金详细计划:批量设置的计划完工日期> 导入的需求日期> 工单自身的计划完工日期 钣金工单计划:导入的需求日期> 工单自身的计划完工日期
9ec032 对比 | 目录
2025-05-20 sfd
Merge branch 'dev' of http://192.168.50.149:8085/r/aps-backend into dev
142ded 对比 | 目录
2025-05-20 sfd
修改空单元格判断
f958e4 对比 | 目录
2025-05-20 zhanghl
钣金需求日期:批量导入、删除、分页列表
6cd496 对比 | 目录
2025-05-20 zhanghl
钣金需求日期:批量导入、删除、分页列表
40ac79 对比 | 目录
2025-05-20 sfd
Update ApsMaterialProductGroupManagementController.java
aa422c 对比 | 目录
2025-05-19 zhanghl
Merge remote-tracking branch 'origin/dev' into dev
8cd4e3 对比 | 目录
2025-05-19 zhanghl
钣金工单计划:增加导入需求日期接口
05ae37 对比 | 目录
2025-05-19 sfd
Merge branch 'dev' of http://192.168.50.149:8085/r/aps-backend into dev
930780 对比 | 目录
2025-05-19 sfd
增加产品
ef28d5 对比 | 目录
2025-05-19 zhanghl
钣金工单计划:任务生成完清除批量保存的计划完工日期
874724 对比 | 目录
2025-05-19 zhanghl
计划任务管理:增加swagger描述
cdb233 对比 | 目录
2025-05-19 sfd
增加管路预测数据
8e2bbb 对比 | 目录
2025-05-19 zhanghl
Merge remote-tracking branch 'origin/dev' into dev
e3121b 对比 | 目录
2025-05-19 zhanghl
计划任务管理:增加swagger描述
2fb349 对比 | 目录
2025-05-19 sfd
Merge branch 'dev' of http://192.168.50.149:8085/r/aps-backend into dev
6671f6 对比 | 目录
2025-05-19 sfd
Update ApsGasPipelineMoController.java
fdf89e 对比 | 目录
2025-05-19 sfd
增加气体管路工单管理
9f10fc 对比 | 目录
2025-05-19 zhanghl
钣金工单计划:增加Redis锁 和 业务幂等判断
26dc52 对比 | 目录
已修改15个文件
已添加31个文件
3046 ■■■■■ 文件已修改
aps-common/aps-common-redis/src/main/java/com/aps/common/redis/service/RedisLockUtils.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsGasPipelineMoController.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsGasPipelinePredictionController.java 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsMaterialProductGroupManagementController.java 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlanTaskController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlatePlanController.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlateRequireDateController.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlateStandardRequireController.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsWeldSeamStatisticsV2Controller.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipelineMo.java 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipelinePrediction.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsMaterialProductGroupManagement.java 130 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsPlanTask.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsPlate/ApsPlateRequireDate.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/domain/mainPlan/ApsWeldSeamStatisticsV2.java 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/enums/REDIS_LOCK_KEY.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsGasPipelineMoMapper.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsGasPipelinePredictionMapper.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsMaterialProductGroupManagementMapper.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlatePlanMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateProcessStatMapper.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateRequireDateMapper.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateStandardRequireOrderEndDayMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/mapper/mainPlan/ApsWeldSeamStatisticsV2Mapper.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/ApsPlanTaskService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/ApsPlate/ApsPlateRequireDateService.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/IApsGasPipelineMoService.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/IApsGasPipelinePredictionService.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/IApsMaterialProductGroupManagementService.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipelineMoServiceImpl.java 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipelinePredictionServiceImpl.java 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsMaterialProductGroupManagementServiceImpl.java 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlanTaskServiceImpl.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateRequireDateServiceImpl.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateStandardRequireOrderEndDayServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateStandardRequireServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/mainPlan/IApsWeldSeamStatisticsV2Service.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/java/com/aps/core/service/mainPlan/impl/ApsWeldSeamStatisticsV2ServiceImpl.java 206 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/resources/mapper/core/ApsGasPipelineMoMapper.xml 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/resources/mapper/core/ApsGasPipelinePredictionMapper.xml 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/resources/mapper/core/ApsMaterialProductGroupManagementMapper.xml 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlatePlanMapper.xml 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateProcessStatMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateRequireDateMapper.xml 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateStandardRequireOrderEndDayMapper.xml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-modules/aps-core/src/main/resources/mapper/core/ApsWeldSeamStatisticsV2Mapper.xml 247 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
aps-common/aps-common-redis/src/main/java/com/aps/common/redis/service/RedisLockUtils.java
@@ -26,6 +26,13 @@
    /**
     * åˆ¤æ–­æ˜¯å¦å­˜åœ¨é”
     * */
    public boolean existLock(String key,String value){
        return this.redisTemplate.opsForValue().get(key).equals(value);
    }
    /**
     *  åР锁
     **/
    public Boolean getLock(String key,String value,Long timeoutSeconds){
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsGasPipelineMoController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,120 @@
package com.aps.core.controller.mainPlan;
import com.aps.common.core.utils.poi.ExcelUtil;
import com.aps.common.core.web.controller.BaseController;
import com.aps.common.core.web.domain.AjaxResult;
import com.aps.common.core.web.page.TableDataInfo;
import com.aps.common.log.annotation.Log;
import com.aps.common.log.enums.BusinessType;
import com.aps.common.security.annotation.RequiresPermissions;
import com.aps.core.domain.ApsGasPipelineMo;
import com.aps.core.service.IApsGasPipelineMoService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
 * ç®¡è·¯æ‰‹å·¥æ°”体工单数据Controller
 *
 * @author sfd
 * @date 2025-05-19
 */
@Tag(name = "管路手工气体工单数据", description = "管路手工气体工单数据接口")
@RestController
@RequestMapping("/gasPipelineMo")
public class ApsGasPipelineMoController extends BaseController
{
    @Autowired
    private IApsGasPipelineMoService apsGasPipelineMoService;
    /**
     * æŸ¥è¯¢ç®¡è·¯æ‰‹å·¥æ°”体工单数据列表
     */
    @Operation(summary = "查询管路手工气体工单数据列表", description = "分页查询")
    @RequiresPermissions("gasPipeline:mo:list")
    @GetMapping("/list")
    public TableDataInfo list(ApsGasPipelineMo apsGasPipelineMo)
    {
        startPage();
        List<ApsGasPipelineMo> list = apsGasPipelineMoService.selectApsGasPipelineMoList(apsGasPipelineMo);
        return getDataTable(list);
    }
    @Operation(summary = "导入管路手工气体工单数据", description = "批量导入")
    @Log(title = "导入管路手工气体工单数据", businessType = BusinessType.IMPORT)
    @RequiresPermissions("gasPipeline:mo:import")
    @PostMapping("/importData")
    public AjaxResult importData(MultipartFile file) throws Exception {
        int i = apsGasPipelineMoService.batchInsertGasPipelineMo(file);
        return  toAjax(i);
    }
    /**
     * å¯¼å‡ºç®¡è·¯æ‰‹å·¥æ°”体工单数据列表
     */
    @Operation(summary = "导出管路手工气体工单数据列表", description = "导出")
    @RequiresPermissions("gasPipeline:mo:export")
    @Log(title = "管路手工气体工单数据", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, ApsGasPipelineMo apsGasPipelineMo)
    {
        List<ApsGasPipelineMo> list = apsGasPipelineMoService.selectApsGasPipelineMoList(apsGasPipelineMo);
        ExcelUtil<ApsGasPipelineMo> util = new ExcelUtil<ApsGasPipelineMo>(ApsGasPipelineMo.class);
        util.exportExcel(response, list, "管路手工气体工单数据数据");
    }
    /**
     * èŽ·å–ç®¡è·¯æ‰‹å·¥æ°”ä½“å·¥å•æ•°æ®è¯¦ç»†ä¿¡æ¯
     */
    @Operation(summary = "获取管路手工气体工单数据详细信息", description = "根据id获取")
    @RequiresPermissions("gasPipeline:mo:query")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id)
    {
        return success(apsGasPipelineMoService.selectApsGasPipelineMoById(id));
    }
    /**
     * æ–°å¢žç®¡è·¯æ‰‹å·¥æ°”体工单数据
     */
    @Operation(summary = "新增管路手工气体工单数据", description = "单个新增")
    @RequiresPermissions("gasPipeline:mo:add")
    @Log(title = "管路手工气体工单数据", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody ApsGasPipelineMo apsGasPipelineMo)
    {
        return toAjax(apsGasPipelineMoService.insertApsGasPipelineMo(apsGasPipelineMo));
    }
    /**
     * ä¿®æ”¹ç®¡è·¯æ‰‹å·¥æ°”体工单数据
     */
    @Operation(summary = "修改管路手工气体工单数据", description = "单个修改")
    @RequiresPermissions("gasPipeline:mo:edit")
    @Log(title = "管路手工气体工单数据", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody ApsGasPipelineMo apsGasPipelineMo)
    {
        return toAjax(apsGasPipelineMoService.updateApsGasPipelineMo(apsGasPipelineMo));
    }
    /**
     * åˆ é™¤ç®¡è·¯æ‰‹å·¥æ°”体工单数据
     */
    @Operation(summary = "删除管路手工气体工单数据", description = "批量删除")
    @RequiresPermissions("gasPipeline:mo:remove")
    @Log(title = "管路手工气体工单数据", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable Long[] ids)
    {
        return toAjax(apsGasPipelineMoService.deleteApsGasPipelineMoByIds(ids));
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsGasPipelinePredictionController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,127 @@
package com.aps.core.controller.mainPlan;
import java.util.List;
import com.aps.common.core.web.page.TableDataInfo;
import com.aps.core.domain.ApsGasPipelineMo;
import com.aps.core.domain.ApsGasPipelinePrediction;
import com.aps.core.service.IApsGasPipelinePredictionService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.aps.common.log.annotation.Log;
import com.aps.common.log.enums.BusinessType;
import com.aps.common.security.annotation.RequiresPermissions;
import com.aps.common.core.web.controller.BaseController;
import com.aps.common.core.web.domain.AjaxResult;
import com.aps.common.core.utils.poi.ExcelUtil;
import org.springframework.web.multipart.MultipartFile;
/**
 * ç®¡è·¯æ‰‹å·¥æ°”体预测数据Controller
 *
 * @author ruoyi
 * @date 2025-05-19
 */
@Tag(name = "管路手工气体预测数据", description = "管路手工气体预测数据接口")
@RestController
@RequestMapping("/gasPipelinePrediction")
public class ApsGasPipelinePredictionController extends BaseController
{
    @Autowired
    private IApsGasPipelinePredictionService apsGasPipelinePredictionService;
    /**
     * æŸ¥è¯¢ç®¡è·¯æ‰‹å·¥æ°”体预测数据列表
     */
    @Operation(summary = "查询管路手工气体预测数据列表", description = "分页查询")
    @RequiresPermissions("gasPipeline:prediction:list")
    @GetMapping("/list")
    public TableDataInfo list(ApsGasPipelinePrediction apsGasPipelineMo)
    {
        startPage();
        List<ApsGasPipelinePrediction> list = apsGasPipelinePredictionService.selectApsGasPipelinePredictionList(apsGasPipelineMo);
        return getDataTable(list);
    }
    @Operation(summary = "导入手工气体预测数据", description = "批量导入")
    @Log(title = "导入手工气体预测数据", businessType = BusinessType.IMPORT)
    @RequiresPermissions("gasPipeline:prediction:import")
    @PostMapping("/importData")
    public AjaxResult importData(MultipartFile file) throws Exception {
        int i = apsGasPipelinePredictionService.batchInsertApsGasPipelinePrediction(file);
        return  toAjax(i);
    }
    /**
     * å¯¼å‡ºç®¡è·¯æ‰‹å·¥æ°”体预测数据列表
     */
    @Operation(summary = "导出管路手工气体预测数据列表", description = "导出")
    @RequiresPermissions("gasPipeline:prediction:export")
    @Log(title = "管路手工气体预测数据", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, ApsGasPipelinePrediction apsGasPipelinePrediction)
    {
        List<ApsGasPipelinePrediction> list = apsGasPipelinePredictionService.selectApsGasPipelinePredictionList(apsGasPipelinePrediction);
        ExcelUtil<ApsGasPipelinePrediction> util = new ExcelUtil<ApsGasPipelinePrediction>(ApsGasPipelinePrediction.class);
        util.exportExcel(response, list, "管路手工气体预测数据数据");
    }
    /**
     * èŽ·å–ç®¡è·¯æ‰‹å·¥æ°”ä½“é¢„æµ‹æ•°æ®è¯¦ç»†ä¿¡æ¯
     */
    @Operation(summary = "获取管路手工气体预测数据详细信息", description = "根据id获取")
    @RequiresPermissions("gasPipeline:prediction:query")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id)
    {
        return success(apsGasPipelinePredictionService.selectApsGasPipelinePredictionById(id));
    }
    /**
     * æ–°å¢žç®¡è·¯æ‰‹å·¥æ°”体预测数据
     */
    @Operation(summary = "新增管路手工气体预测数据", description = "单个新增")
    @RequiresPermissions("gasPipeline:prediction:add")
    @Log(title = "管路手工气体预测数据", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody ApsGasPipelinePrediction apsGasPipelinePrediction)
    {
        return toAjax(apsGasPipelinePredictionService.insertApsGasPipelinePrediction(apsGasPipelinePrediction));
    }
    /**
     * ä¿®æ”¹ç®¡è·¯æ‰‹å·¥æ°”体预测数据
     */
    @Operation(summary = "修改管路手工气体预测数据", description = "单个修改")
    @RequiresPermissions("gasPipeline:prediction:edit")
    @Log(title = "管路手工气体预测数据", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody ApsGasPipelinePrediction apsGasPipelinePrediction)
    {
        return toAjax(apsGasPipelinePredictionService.updateApsGasPipelinePrediction(apsGasPipelinePrediction));
    }
    /**
     * åˆ é™¤ç®¡è·¯æ‰‹å·¥æ°”体预测数据
     */
    @Operation(summary = "删除管路手工气体预测数据", description = "批量删除")
    @RequiresPermissions("gasPipeline:prediction:remove")
    @Log(title = "管路手工气体预测数据", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable Long[] ids)
    {
        return toAjax(apsGasPipelinePredictionService.deleteApsGasPipelinePredictionByIds(ids));
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsMaterialProductGroupManagementController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,119 @@
package com.aps.core.controller.mainPlan;
import com.aps.common.core.utils.poi.ExcelUtil;
import com.aps.common.core.web.controller.BaseController;
import com.aps.common.core.web.domain.AjaxResult;
import com.aps.common.core.web.page.TableDataInfo;
import com.aps.common.log.annotation.Log;
import com.aps.common.log.enums.BusinessType;
import com.aps.common.security.annotation.RequiresPermissions;
import com.aps.core.domain.ApsMaterialProductGroupManagement;
import com.aps.core.service.IApsMaterialProductGroupManagementService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
 * ç‰©æ–™äº§å“ç»„数据管理Controller
 *
 * @author ruoyi
 * @date 2025-05-19
 */
@Tag(name = "物料产品组数据管理", description = "物料产品组数据管理接口")
@RestController
@RequestMapping("/materialProductGroupManagement")
public class ApsMaterialProductGroupManagementController extends BaseController
{
    @Autowired
    private IApsMaterialProductGroupManagementService apsMaterialProductGroupManagementService;
    /**
     * æŸ¥è¯¢ç‰©æ–™äº§å“ç»„数据管理列表
     */
    @Operation(summary = "查询物料产品组数据管理列表", description = "分页查询")
    @RequiresPermissions("materialProductGroup:management:list")
    @GetMapping("/list")
    public TableDataInfo list(ApsMaterialProductGroupManagement apsGasPipelineMo)
    {
        startPage();
        List<ApsMaterialProductGroupManagement> list = apsMaterialProductGroupManagementService.selectApsMaterialProductGroupManagementList(apsGasPipelineMo);
        return getDataTable(list);
    }
    @Operation(summary = "导入产品组数据", description = "批量导入")
    @Log(title = "导入产品组数据", businessType = BusinessType.IMPORT)
    @RequiresPermissions("materialProductGroup:management:import")
    @PostMapping("/importData")
    public AjaxResult importData(MultipartFile file) throws Exception {
        int i = apsMaterialProductGroupManagementService.batchInsertApsMaterialProductGroupManagement(file);
        return  toAjax(i);
    }
    /**
     * å¯¼å‡ºç‰©æ–™äº§å“ç»„数据管理列表
     */
    @Operation(summary = "导出物料产品组数据管理列表", description = "导出")
    @RequiresPermissions("materialProductGroup:management:export")
    @Log(title = "物料产品组数据管理", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, ApsMaterialProductGroupManagement apsMaterialProductGroupManagement)
    {
        List<ApsMaterialProductGroupManagement> list = apsMaterialProductGroupManagementService.selectApsMaterialProductGroupManagementList(apsMaterialProductGroupManagement);
        ExcelUtil<ApsMaterialProductGroupManagement> util = new ExcelUtil<ApsMaterialProductGroupManagement>(ApsMaterialProductGroupManagement.class);
        util.exportExcel(response, list, "物料产品组数据管理数据");
    }
    /**
     * èŽ·å–ç‰©æ–™äº§å“ç»„æ•°æ®ç®¡ç†è¯¦ç»†ä¿¡æ¯
     */
    @Operation(summary = "获取物料产品组数据管理详细信息", description = "根据id获取")
    @RequiresPermissions("materialProductGroup:management:query")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id)
    {
        return success(apsMaterialProductGroupManagementService.selectApsMaterialProductGroupManagementById(id));
    }
    /**
     * æ–°å¢žç‰©æ–™äº§å“ç»„数据管理
     */
    @Operation(summary = "新增物料产品组数据管理", description = "单个新增")
    @RequiresPermissions("materialProductGroup:management:add")
    @Log(title = "物料产品组数据管理", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody ApsMaterialProductGroupManagement apsMaterialProductGroupManagement)
    {
        return toAjax(apsMaterialProductGroupManagementService.insertApsMaterialProductGroupManagement(apsMaterialProductGroupManagement));
    }
    /**
     * ä¿®æ”¹ç‰©æ–™äº§å“ç»„数据管理
     */
    @Operation(summary = "修改物料产品组数据管理", description = "单个修改")
    @RequiresPermissions("materialProductGroup:management:edit")
    @Log(title = "修改物料产品组数据管理", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody ApsMaterialProductGroupManagement apsMaterialProductGroupManagement)
    {
        return toAjax(apsMaterialProductGroupManagementService.updateApsMaterialProductGroupManagement(apsMaterialProductGroupManagement));
    }
    /**
     * åˆ é™¤ç‰©æ–™äº§å“ç»„数据管理
     */
    @Operation(summary = "删除物料产品组数据管理", description = "批量删除")
    @RequiresPermissions("materialProductGroup:management:remove")
    @Log(title = "物料产品组数据管理", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable Long[] ids)
    {
        return toAjax(apsMaterialProductGroupManagementService.deleteApsMaterialProductGroupManagementByIds(ids));
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlanTaskController.java
@@ -7,6 +7,9 @@
import com.aps.core.domain.ApsPlanTask;
import com.aps.core.service.ApsPlanTaskService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -16,6 +19,7 @@
/**
 * è®¡åˆ’任务管理
 * */
@Tag(name = "计划任务管理", description = "计划任务管理")
@RestController
@RequestMapping("/planTask")
public class ApsPlanTaskController  extends BaseController {
@@ -23,6 +27,7 @@
    @Autowired
    private ApsPlanTaskService apsPlanTaskService;
    @Operation(summary = "计划任务管理列表", description = "分页查询")
    @RequiresPermissions("planTask:list")
    @GetMapping("/list")
    public Page<ApsPlanTask> list(ApsPlanTask task){
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlatePlanController.java
@@ -10,10 +10,15 @@
import com.aps.common.security.utils.DictUtils;
import com.aps.core.domain.ApsPlate.ApsPlatePlan;
import com.aps.core.domain.ApsPlate.ApsPlatePlanTemp;
import com.aps.core.domain.ApsPlate.ApsPlateRequireDate;
import com.aps.core.domain.export.ApsPlatePlanExport;
import com.aps.core.service.ApsPlate.ApsPlateRequireDateService;
import com.aps.core.service.ApsPlate.IApsPlatePlanService;
import com.aps.core.service.ApsPlate.IApsPlatePlanTempService;
import com.aps.system.api.domain.SysDictData;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -30,6 +35,7 @@
 * @author ruoyi
 * @date 2025-04-08
 */
@Tag(name = "钣金计划列表", description = "钣金计划列表")
@RestController
@RequestMapping("/apsPlatePlan")
public class ApsPlatePlanController extends BaseController {
@@ -37,6 +43,9 @@
    private IApsPlatePlanService apsPlatePlanService;
    @Autowired
    private IApsPlatePlanTempService apsPlatePlanTempService;
    @Resource
    private ApsPlateRequireDateService apsPlateRequireDateService;
    /**
     * æŸ¥è¯¢é’£é‡‘计划管理列表
     */
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlateRequireDateController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,73 @@
package com.aps.core.controller.mainPlan.ApsPlate;
import com.aps.common.core.utils.poi.ExcelUtil;
import com.aps.common.core.web.domain.AjaxResult;
import com.aps.common.log.annotation.Log;
import com.aps.common.log.enums.BusinessType;
import com.aps.common.security.annotation.RequiresPermissions;
import com.aps.core.domain.ApsPlate.ApsPlateRequireDate;
import com.aps.core.service.ApsPlate.ApsPlateRequireDateService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@Tag(name = "钣金工单需求日期管理", description = "钣金工单需求日期管理")
@RestController
@RequestMapping("/plateRequireDate")
public class ApsPlateRequireDateController {
    @Resource
    private ApsPlateRequireDateService apsPlateRequireDateService;
    @RequiresPermissions("plateRequireDate:list")
    @GetMapping("/list")
    @Tag(name = "查询列表")
    public  Page<ApsPlateRequireDate> list(Page<ApsPlateRequireDate> page,ApsPlateRequireDate apsPlateRequireDate){
        return  apsPlateRequireDateService.pagingList(page, apsPlateRequireDate);
    }
    /**
     * å¯¼å…¥Excel数据
     * @param file
     * @return
     * @throws Exception
     */
    @Operation(summary = "导入工单需求日期", description = "导入工单需求日期")
    @RequiresPermissions("plateRequireDate:import")
    @Log(title = "导入工单需求日期", businessType = BusinessType.IMPORT)
    @PostMapping("/importRequireDate")
    public AjaxResult importRequireDate(MultipartFile file) throws Exception {
        ExcelUtil<ApsPlateRequireDate> util = new ExcelUtil<ApsPlateRequireDate>(ApsPlateRequireDate.class);
        List<ApsPlateRequireDate> plateRequireDateList = util.importExcel(file.getInputStream());
        if (!plateRequireDateList.isEmpty()) {
            try {
                apsPlateRequireDateService.batchSave(plateRequireDateList);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        } else {
            return AjaxResult.error("模板内容为空");
        }
        return AjaxResult.success("导入成功!");
    }
    /**
    * æ ¹æ®id删除工单需求日期
     * */
    @Operation(summary = "删除需求日期", description = "删除需求日期")
    @Log(title = "删除需求日期", businessType = BusinessType.DELETE)
    @PostMapping("/deleteRequireDate")
    @RequiresPermissions("plateRequireDate:delete")
    public AjaxResult deleteRequireDate(@RequestBody List<Long> idList) {
        apsPlateRequireDateService.batchDelete(idList);
        return AjaxResult.success("删除成功!");
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsPlate/ApsPlateStandardRequireController.java
@@ -138,14 +138,11 @@
    /**
     * ç”Ÿæˆé’£é‡‘计划
     * */
    @PostMapping("/generatorPlan")
    public AjaxResult generatorPlan()
    {
        String batchNum= requireBatchService.getNewBatchNumber();
        planTaskService.savePlanTask(batchNum);
        apsPlateStandardRequireService.generatorPlan(batchNum);
        planTaskService.updateTaskStatus(batchNum, PLAN_TASK_STATUS.FINISHED);
        return success();
        return  planTaskService.generatorPlan();
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/controller/mainPlan/ApsWeldSeamStatisticsV2Controller.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,81 @@
package com.aps.core.controller.mainPlan;
import com.aps.common.core.utils.poi.ExcelUtil;
import com.aps.common.core.web.controller.BaseController;
import com.aps.common.core.web.domain.AjaxResult;
import com.aps.common.core.web.page.TableDataInfo;
import com.aps.common.log.annotation.Log;
import com.aps.common.log.enums.BusinessType;
import com.aps.common.security.annotation.RequiresPermissions;
import com.aps.common.security.utils.SecurityUtils;
import com.aps.core.domain.mainPlan.ApsWeldSeamStatisticsV2;
import com.aps.core.service.mainPlan.IApsWeldSeamStatisticsV2Service;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
 * ç„Šç¼ç»Ÿè®¡v2Controller
 *
 * @author wwj
 * @date 2025-04-09
 */
@RestController
@RequestMapping("/weldSeamStatisticsV2")
public class ApsWeldSeamStatisticsV2Controller extends BaseController {
    @Autowired
    private IApsWeldSeamStatisticsV2Service apsWeldSeamStatisticsV2Service;
    /**
     * æŸ¥è¯¢ç„Šç¼ç»Ÿè®¡è¡¨V2列表
     */
    @RequiresPermissions("weldSeamStatistics:weldSeamStatisticsV2:list")
    @GetMapping("/list")
    public TableDataInfo list(ApsWeldSeamStatisticsV2 apsWeldSeamStatisticsV2)
    {
        // ä¸éœ€è¦åˆ†é¡µ
        // startPage();
        List<ApsWeldSeamStatisticsV2> list = apsWeldSeamStatisticsV2Service.selectApsWeldSeamStatisticsV2List(apsWeldSeamStatisticsV2);
        return getDataTable(list);
    }
    /**
     * å¯¼å‡ºç„Šç¼ç»Ÿè®¡è¡¨V2列表
     */
    @RequiresPermissions("weldSeamStatistics:weldSeamStatisticsV2:export")
    @Log(title = "焊缝统计表V2", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, ApsWeldSeamStatisticsV2 apsWeldSeamStatisticsV2)
    {
        List<ApsWeldSeamStatisticsV2> list = apsWeldSeamStatisticsV2Service.selectApsWeldSeamStatisticsV2List(apsWeldSeamStatisticsV2);
        ExcelUtil<ApsWeldSeamStatisticsV2> util = new ExcelUtil<ApsWeldSeamStatisticsV2>(ApsWeldSeamStatisticsV2.class);
        util.exportExcel(response, list, "焊缝统计表V2数据");
    }
    /**
     * ä¿®æ”¹ç„Šç¼ç»Ÿè®¡è¡¨V2
     */
    @RequiresPermissions("weldSeamStatistics:weldSeamStatisticsV2:edit")
    @Log(title = "焊缝统计表V2", businessType = BusinessType.UPDATE)
    @PostMapping("/update")
    public AjaxResult edit(@RequestBody ApsWeldSeamStatisticsV2 apsWeldSeamStatisticsV2)
    {
        ApsWeldSeamStatisticsV2 updatedRecord = apsWeldSeamStatisticsV2Service.updateApsWeldSeamStatisticsV2(apsWeldSeamStatisticsV2);
        return AjaxResult.success("修改成功", updatedRecord);
    }
    /**
     * åˆ·æ–°ç„Šç¼ç»Ÿè®¡è¡¨V2数据
     */
    @RequiresPermissions("weldSeamStatistics:weldSeamStatisticsV2:refresh")
    @Log(title = "焊缝统计表V2", businessType = BusinessType.OTHER)
    @PostMapping("/refresh")
    public AjaxResult refreshStatistics() {
        String username = SecurityUtils.getUsername();
        int count = apsWeldSeamStatisticsV2Service.refreshWeldSeamStatistics(username);
        return success("刷新焊缝统计表成功,共更新 " + count + " æ¡è®°å½•");
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipelineMo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,114 @@
package com.aps.core.domain;
import com.aps.common.core.web.domain.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.aps.common.core.annotation.Excel;
import org.springframework.data.annotation.Id;
import java.math.BigDecimal;
import java.sql.Timestamp;
/**
 * ç®¡è·¯æ‰‹å·¥æ°”体工单数据对象 aps_gas_pipeline_mo
 *
 * @author ruoyi
 * @date 2025-05-19
 */
@Schema(description = "管路手工气体工单数据实体类")
@Data
public class ApsGasPipelineMo extends BaseEntity
{
    private static final long serialVersionUID = 1L;
    @Id
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    /** ID */
    @Schema(description = "ID")
    private Long id;
    /** å·¥å•号 */
    @Excel(name = "工单号")
    @Schema(description = "工单号")
    private String mo;
    /** ç”Ÿäº§åŸºåœ° */
    @Excel(name = "生产基地")
    @Schema(description = "生产基地")
    private String factory;
    /** æ–™å· */
    @Excel(name = "料号")
    @Schema(description = "料号")
    private String materialCode;
    /** è®¡åˆ’完工日期 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "计划完工日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @Schema(description = "计划完工日期")
    private Timestamp planEnd;
    /** æ•°é‡ */
    @Excel(name = "数量")
    @Schema(description = "数量")
    private BigDecimal quantity;
    public void setId(Long id)
    {
        this.id = id;
    }
    public Long getId()
    {
        return id;
    }
    public void setMo(String mo)
    {
        this.mo = mo;
    }
    public String getMo()
    {
        return mo;
    }
    public void setFactory(String factory)
    {
        this.factory = factory;
    }
    public String getFactory()
    {
        return factory;
    }
    public void setMaterialCode(String materialCode)
    {
        this.materialCode = materialCode;
    }
    public String getMaterialCode()
    {
        return materialCode;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("id", getId())
            .append("mo", getMo())
            .append("factory", getFactory())
            .append("materialCode", getMaterialCode())
            .append("planEnd", getPlanEnd())
            .append("createBy", getCreateBy())
            .append("createTime", getCreateTime())
            .append("updateBy", getUpdateBy())
            .append("updateTime", getUpdateTime())
            .toString();
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsGasPipelinePrediction.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,52 @@
package com.aps.core.domain;
import com.aps.common.core.annotation.Excel;
import com.aps.common.core.web.domain.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.data.annotation.Id;
import java.math.BigDecimal;
import java.sql.Timestamp;
/**
 * ç®¡è·¯æ‰‹å·¥æ°”体预测数据对象 aps_gas_pipeline_prediction
 *
 * @author ruoyi
 * @date 2025-05-19
 */
@Data
@Schema(description = "管路手工气体预测数据实体类")
public class ApsGasPipelinePrediction extends BaseEntity
{
    private static final long serialVersionUID = 1L;
    @Id
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    /** ID */
    @Schema(description = "ID")
    private Long id;
    /** ç”Ÿäº§åŸºåœ° */
    @Excel(name = "生产基地")
    @Schema(description = "生产基地")
    private String factory;
    /** æ–™å· */
    @Excel(name = "料号")
    @Schema(description = "料号")
    private String materialCode;
    /** é¢„测日期 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "预测日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @Schema(description = "预测日期")
    private Timestamp predictDate;
    /** æ•°é‡ */
    @Excel(name = "数量")
    @Schema(description = "数量")
    private BigDecimal predictQuantity;
}
aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsMaterialProductGroupManagement.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,130 @@
package com.aps.core.domain;
import com.aps.common.core.web.domain.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.aps.common.core.annotation.Excel;
import org.springframework.data.annotation.Id;
/**
 * ç‰©æ–™äº§å“ç»„数据管理对象 aps_material_product_group_management
 *
 * @author ruoyi
 * @date 2025-05-19
 */
@Schema(description = "物料产品组数据管理实体类")
@Data
public class ApsMaterialProductGroupManagement extends BaseEntity
{
    private static final long serialVersionUID = 1L;
    @Id
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    /** ID */
    @Schema(description = "ID")
    private Long id;
    /** é€‚用工厂  å‚考 aps_factory */
    @Excel(name = "适用工厂  å‚考 aps_factory")
    @Schema(description = "适用工厂  å‚考 aps_factory")
    private String factory;
    /** æ–™å· */
    @Excel(name = "料号")
    @Schema(description = "料号")
    private String materialCode;
    /** ä¸“业 å‚考    aps_domain */
    @Excel(name = "专业 å‚考    aps_domain")
    @Schema(description = "专业 å‚考    aps_domain")
    private String domain;
    /** æ˜¯å¦ä¸ºä¸»é˜¶ æ˜¯/否 */
    @Excel(name = "是否为主阶 æ˜¯/否")
    @Schema(description = "是否为主阶 æ˜¯/否")
    private String isMain;
    /** æ–™å·ç±»åˆ« åˆ¶é€ ä»¶/采购件 */
    @Excel(name = "料号类别 åˆ¶é€ ä»¶/采购件")
    @Schema(description = "料号类别 åˆ¶é€ ä»¶/采购件")
    private String materialType;
    public void setId(Long id)
    {
        this.id = id;
    }
    public Long getId()
    {
        return id;
    }
    public void setFactory(String factory)
    {
        this.factory = factory;
    }
    public String getFactory()
    {
        return factory;
    }
    public void setMaterialCode(String materialCode)
    {
        this.materialCode = materialCode;
    }
    public String getMaterialCode()
    {
        return materialCode;
    }
    public void setDomain(String domain)
    {
        this.domain = domain;
    }
    public String getDomain()
    {
        return domain;
    }
    public void setIsMain(String isMain)
    {
        this.isMain = isMain;
    }
    public String getIsMain()
    {
        return isMain;
    }
    public void setMaterialType(String materialType)
    {
        this.materialType = materialType;
    }
    public String getMaterialType()
    {
        return materialType;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("id", getId())
            .append("factory", getFactory())
            .append("materialCode", getMaterialCode())
            .append("domain", getDomain())
            .append("createBy", getCreateBy())
            .append("createTime", getCreateTime())
            .append("updateBy", getUpdateBy())
            .append("updateTime", getUpdateTime())
            .append("isMain", getIsMain())
            .append("materialType", getMaterialType())
            .toString();
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsPlanTask.java
@@ -8,6 +8,7 @@
import java.io.Serializable;
import java.util.Date;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -22,6 +23,7 @@
@TableName(value ="aps_plan_task")
@Data
@Builder
@Schema(description = "计划任务")
public class ApsPlanTask extends BaseEntity implements Serializable {
    @TableField(exist = false)
@@ -31,53 +33,62 @@
     */
    @TableField(value = "id")
    @TableId(type = IdType.INPUT)
    @Schema(description = "主键ID")
    private Long id;
    /**
     * ä»»åŠ¡æ‰¹æ¬¡å·
     */
    @Schema(description = "任务批次号")
    @TableField(value = "batch_num")
    private String batchNum;
    /**
     * ä»»åŠ¡ç±»åž‹
     */
    @Schema(description = "任务类型")
    @TableField(value = "task_type")
    private String taskType;
    /**
     * ä»»åŠ¡çŠ¶æ€
     */
    @Schema(description = "任务状态")
    @TableField(value = "task_status")
    private String taskStatus;
    /**
     * åˆ›å»ºäºº
     */
    @Schema(description = "创建人")
    @TableField(value = "create_by")
    private String createBy;
    /**
     * åˆ›å»ºæ—¶é—´
     */
    @Schema(description = "创建时间")
    @TableField(value = "create_time")
    private Date createTime;
    /**
     * æ›´æ–°äºº
     */
    @Schema(description = "更新人")
    @TableField(value = "update_by")
    private String updateBy;
    /**
     * æ›´æ–°æ—¶é—´
     */
    @Schema(description = "更新时间")
    @TableField(value = "update_time")
    private Date updateTime;
    /**
     * åˆ é™¤æ ‡è®°(0,1)
     */
    @Schema(description = "删除标记(0,1)")
    @TableField(value = "del_flag")
    private Integer delFlag;
aps-modules/aps-core/src/main/java/com/aps/core/domain/ApsPlate/ApsPlateRequireDate.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,82 @@
package com.aps.core.domain.ApsPlate;
import com.aps.common.core.annotation.Excel;
import com.aps.common.core.web.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * å·¥å•计划需求日期表
 * @TableName aps_plate_require_date
 */
@EqualsAndHashCode(callSuper = true)
@TableName(value ="aps_plate_require_date")
@Data
public class ApsPlateRequireDate extends BaseEntity implements Serializable {
    /**
     * ä¸»é”®ID
     */
    @TableId(value = "id")
    private Long id;
    /**
     * å·¥å•Id
     */
    @TableField(value = "plan_id")
    private Long planId;
    /**
     * è®¢å•号
     */
    @Excel(name = "工单号")
    @TableField(value = "doc_no")
    private String docNo;
    /**
     * å·¥å•需求时间
     */
    @Excel(name = "需求日期")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @TableField(value = "require_date")
    private Date requireDate;
    /**
     * æ˜¯å¦åˆ é™¤ 0否 1是
     */
    @TableField(value = "del_flag")
    private Integer delFlag;
    /**
     *
     */
    @TableField(value = "create_by")
    private String createBy;
    /**
     *
     */
    @TableField(value = "create_time")
    private Date createTime;
    /**
     *
     */
    @TableField(value = "update_by")
    private String updateBy;
    /**
     *
     */
    @TableField(value = "update_time")
    private Date updateTime;
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
aps-modules/aps-core/src/main/java/com/aps/core/domain/mainPlan/ApsWeldSeamStatisticsV2.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,74 @@
package com.aps.core.domain.mainPlan;
import com.aps.common.core.annotation.Excel;
import com.aps.common.core.web.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
/**
 * ç„Šç¼ç»Ÿè®¡è¡¨V2对象 aps_weld_seam_statistics_v2
 *
 * @date 2023-08-01
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class ApsWeldSeamStatisticsV2 extends BaseEntity {
    private static final long serialVersionUID = 1L;
    /** ID */
    private String id;
    /** å¹´ä»½ */
    @Excel(name = "年份")
    private Integer year;
    /** æœˆä»½ */
    @Excel(name = "月份")
    private Integer month;
    /** ç”Ÿäº§åŸºåœ° */
    @Excel(name = "生产基地")
    private String productionBase;
    /** ç®¡è·¯è®¢å•需求 */
    @Excel(name = "管路订单需求")
    private BigDecimal pipingOrderRequirement;
    /** æ°”柜订单需求 */
    @Excel(name = "气柜订单需求")
    private BigDecimal gasOrderRequirement;
    /** ç®¡è·¯é¢„测需求 */
    @Excel(name = "管路预测需求")
    private BigDecimal pipingPredictionRequirement;
    /** æ°”柜预测需求 */
    @Excel(name = "气柜预测需求")
    private BigDecimal gasPredictionRequirement;
    /** é¢„留紧急订单产出 */
    @Excel(name = "预留紧急订单产出")
    private BigDecimal reserveEmergencyOrderOutput;
    /** åˆè®¡ */
    @Excel(name = "合计")
    private BigDecimal total;
    /** å¤©æ•° */
    @Excel(name = "天数")
    private BigDecimal days;
    /** éœ€æ±‚日焊缝 */
    @Excel(name = "需求日焊缝")
    private BigDecimal requirementDayWeldSeam;
    /** ç”Ÿäº§æ—¥ç„Šç¼ */
    @Excel(name = "生产日焊缝")
    private BigDecimal productionDayWeldSeam;
    /** æ˜¯å¦æ»¡è¶³ */
    @Excel(name = "是否满足")
    private String isSatisfy;
}
aps-modules/aps-core/src/main/java/com/aps/core/enums/REDIS_LOCK_KEY.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.aps.core.enums;
public enum REDIS_LOCK_KEY {
    /*钣金工单计划任务*/
    PLATE_ORDER_PLAN("PLAN_TASK:PLATE_ORDER_PLAN");
    private String key;
    public String getKey() {
        return key;
    }
    REDIS_LOCK_KEY(String key) {
        this.key = key;
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsGasPipelineMoMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
package com.aps.core.mapper;
import com.aps.core.domain.ApsGasPipelineMo;
import com.aps.core.domain.ApsPlanCycle;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
 * ç®¡è·¯æ‰‹å·¥æ°”体工单数据Mapper接口
 *
 * @author ruoyi
 * @date 2025-05-19
 */
@Mapper
public interface ApsGasPipelineMoMapper extends BaseMapper<ApsGasPipelineMo>
{
    /**
     * æŸ¥è¯¢ç®¡è·¯æ‰‹å·¥æ°”体工单数据
     *
     * @param id ç®¡è·¯æ‰‹å·¥æ°”体工单数据主键
     * @return ç®¡è·¯æ‰‹å·¥æ°”体工单数据
     */
    public ApsGasPipelineMo selectApsGasPipelineMoById(Long id);
    /**
     * æŸ¥è¯¢ç®¡è·¯æ‰‹å·¥æ°”体工单数据列表
     *
     * @param apsGasPipelineMo ç®¡è·¯æ‰‹å·¥æ°”体工单数据
     * @return ç®¡è·¯æ‰‹å·¥æ°”体工单数据集合
     */
    public List<ApsGasPipelineMo> selectApsGasPipelineMoList(ApsGasPipelineMo apsGasPipelineMo);
    /**
     * æ–°å¢žç®¡è·¯æ‰‹å·¥æ°”体工单数据
     *
     * @param apsGasPipelineMo ç®¡è·¯æ‰‹å·¥æ°”体工单数据
     * @return ç»“æžœ
     */
    public int insertApsGasPipelineMo(ApsGasPipelineMo apsGasPipelineMo);
    /**
     * ä¿®æ”¹ç®¡è·¯æ‰‹å·¥æ°”体工单数据
     *
     * @param apsGasPipelineMo ç®¡è·¯æ‰‹å·¥æ°”体工单数据
     * @return ç»“æžœ
     */
    public int updateApsGasPipelineMo(ApsGasPipelineMo apsGasPipelineMo);
    /**
     * åˆ é™¤ç®¡è·¯æ‰‹å·¥æ°”体工单数据
     *
     * @param id ç®¡è·¯æ‰‹å·¥æ°”体工单数据主键
     * @return ç»“æžœ
     */
    public int deleteApsGasPipelineMoById(Long id);
    /**
     * æ‰¹é‡åˆ é™¤ç®¡è·¯æ‰‹å·¥æ°”体工单数据
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteApsGasPipelineMoByIds(Long[] ids);
    void deleteAll();
}
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsGasPipelinePredictionMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
package com.aps.core.mapper;
import com.aps.core.domain.ApsGasPipelinePrediction;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/**
 * ç®¡è·¯æ‰‹å·¥æ°”体预测数据Mapper接口
 *
 * @author ruoyi
 * @date 2025-05-19
 */
public interface ApsGasPipelinePredictionMapper extends BaseMapper<ApsGasPipelinePrediction>
{
    /**
     * æŸ¥è¯¢ç®¡è·¯æ‰‹å·¥æ°”体预测数据
     *
     * @param id ç®¡è·¯æ‰‹å·¥æ°”体预测数据主键
     * @return ç®¡è·¯æ‰‹å·¥æ°”体预测数据
     */
    public ApsGasPipelinePrediction selectApsGasPipelinePredictionById(Long id);
    /**
     * æŸ¥è¯¢ç®¡è·¯æ‰‹å·¥æ°”体预测数据列表
     *
     * @param apsGasPipelinePrediction ç®¡è·¯æ‰‹å·¥æ°”体预测数据
     * @return ç®¡è·¯æ‰‹å·¥æ°”体预测数据集合
     */
    public List<ApsGasPipelinePrediction> selectApsGasPipelinePredictionList(ApsGasPipelinePrediction apsGasPipelinePrediction);
    /**
     * æ–°å¢žç®¡è·¯æ‰‹å·¥æ°”体预测数据
     *
     * @param apsGasPipelinePrediction ç®¡è·¯æ‰‹å·¥æ°”体预测数据
     * @return ç»“æžœ
     */
    public int insertApsGasPipelinePrediction(ApsGasPipelinePrediction apsGasPipelinePrediction);
    /**
     * ä¿®æ”¹ç®¡è·¯æ‰‹å·¥æ°”体预测数据
     *
     * @param apsGasPipelinePrediction ç®¡è·¯æ‰‹å·¥æ°”体预测数据
     * @return ç»“æžœ
     */
    public int updateApsGasPipelinePrediction(ApsGasPipelinePrediction apsGasPipelinePrediction);
    /**
     * åˆ é™¤ç®¡è·¯æ‰‹å·¥æ°”体预测数据
     *
     * @param id ç®¡è·¯æ‰‹å·¥æ°”体预测数据主键
     * @return ç»“æžœ
     */
    public int deleteApsGasPipelinePredictionById(Long id);
    /**
     * æ‰¹é‡åˆ é™¤ç®¡è·¯æ‰‹å·¥æ°”体预测数据
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteApsGasPipelinePredictionByIds(Long[] ids);
    void deleteAll();
}
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsMaterialProductGroupManagementMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
package com.aps.core.mapper;
import com.aps.core.domain.ApsMaterialProductGroupManagement;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/**
 * ç‰©æ–™äº§å“ç»„数据管理Mapper接口
 *
 * @author ruoyi
 * @date 2025-05-19
 */
public interface ApsMaterialProductGroupManagementMapper extends BaseMapper<ApsMaterialProductGroupManagement>
{
    /**
     * æŸ¥è¯¢ç‰©æ–™äº§å“ç»„数据管理
     *
     * @param id ç‰©æ–™äº§å“ç»„数据管理主键
     * @return ç‰©æ–™äº§å“ç»„数据管理
     */
    public ApsMaterialProductGroupManagement selectApsMaterialProductGroupManagementById(Long id);
    /**
     * æŸ¥è¯¢ç‰©æ–™äº§å“ç»„数据管理列表
     *
     * @param apsMaterialProductGroupManagement ç‰©æ–™äº§å“ç»„数据管理
     * @return ç‰©æ–™äº§å“ç»„数据管理集合
     */
    public List<ApsMaterialProductGroupManagement> selectApsMaterialProductGroupManagementList(ApsMaterialProductGroupManagement apsMaterialProductGroupManagement);
    /**
     * æ–°å¢žç‰©æ–™äº§å“ç»„数据管理
     *
     * @param apsMaterialProductGroupManagement ç‰©æ–™äº§å“ç»„数据管理
     * @return ç»“æžœ
     */
    public int insertApsMaterialProductGroupManagement(ApsMaterialProductGroupManagement apsMaterialProductGroupManagement);
    /**
     * ä¿®æ”¹ç‰©æ–™äº§å“ç»„数据管理
     *
     * @param apsMaterialProductGroupManagement ç‰©æ–™äº§å“ç»„数据管理
     * @return ç»“æžœ
     */
    public int updateApsMaterialProductGroupManagement(ApsMaterialProductGroupManagement apsMaterialProductGroupManagement);
    /**
     * åˆ é™¤ç‰©æ–™äº§å“ç»„数据管理
     *
     * @param id ç‰©æ–™äº§å“ç»„数据管理主键
     * @return ç»“æžœ
     */
    public int deleteApsMaterialProductGroupManagementById(Long id);
    /**
     * æ‰¹é‡åˆ é™¤ç‰©æ–™äº§å“ç»„数据管理
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteApsMaterialProductGroupManagementByIds(Long[] ids);
    void deleteAll();
}
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlatePlanMapper.java
@@ -74,7 +74,7 @@
     */
    public List<ApsPlatePlan> selectPlateRedundantOrderList(ApsPlatePlan apsPlatePlan);
    List<ApsPlatePlan> selectPlatePlanByPlantMajor(String plant,String professionalAffiliation);
    List<ApsPlatePlan> selectPlatePlanByPlantMajor(String plant);
    /**
     * èŽ·å–ä¸€æ¡æœªåŒ¹é…çš„å­è®¡åˆ’
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateProcessStatMapper.java
@@ -60,7 +60,9 @@
     * @return ç»“æžœ
     */
    public int deleteApsPlateProcessStatByIds(String[] ids);
    /**统计临时数据*/
    /**统计临时数据
     * æ‰¹é‡è®¾ç½®çš„计划完工日期> å¯¼å…¥çš„需求日期>  å·¥å•自身的计划完工日期
     * */
    List<ApsPlateProcessStat> queryTempStat();
    /**
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateRequireDateMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.aps.core.mapper;
import com.aps.core.domain.ApsPlate.ApsPlateRequireDate;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/**
* @author zhl
* @description é’ˆå¯¹è¡¨ã€aps_plate_require_date(工单计划需求日期表)】的数据库操作Mapper
* @createDate 2025-05-19 16:51:36
* @Entity com.aps.core.domain.ApsPlate.ApsPlateRequireDate
*/
public interface ApsPlateRequireDateMapper extends BaseMapper<ApsPlateRequireDate> {
    int deleteByDocNoList(List<String> list,String updateBy);
    int batchInsert(List<ApsPlateRequireDate> list);
}
aps-modules/aps-core/src/main/java/com/aps/core/mapper/ApsPlateStandardRequireOrderEndDayMapper.java
@@ -1,6 +1,5 @@
package com.aps.core.mapper;
import com.aps.core.domain.ApsPlate.ApsPlateOrderPlanDate;
import com.aps.core.domain.ApsPlate.ApsPlateStandardRequireOrderEndDay;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@@ -17,9 +16,8 @@
public interface ApsPlateStandardRequireOrderEndDayMapper extends BaseMapper<ApsPlateStandardRequireOrderEndDay> {
    Integer batchInsert(List<Long> planIds,String createBy);
    Integer batchRemove(List<Long> planIds);
    Integer batchRemoveByPlanId(List<Long> planIds);
    Integer batchRemove();
}
aps-modules/aps-core/src/main/java/com/aps/core/mapper/mainPlan/ApsWeldSeamStatisticsV2Mapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,84 @@
package com.aps.core.mapper.mainPlan;
import com.aps.core.domain.mainPlan.ApsWeldSeamStatisticsV2;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
 * ç„Šç¼ç»Ÿè®¡è¡¨V2Mapper接口
 *
 * @date 2023-08-01
 */
@Mapper
public interface ApsWeldSeamStatisticsV2Mapper {
    /**
     * æŸ¥è¯¢ç„Šç¼ç»Ÿè®¡è¡¨V2
     *
     * @param id ç„Šç¼ç»Ÿè®¡è¡¨V2主键
     * @return ç„Šç¼ç»Ÿè®¡è¡¨V2
     */
    public ApsWeldSeamStatisticsV2 selectApsWeldSeamStatisticsV2ById(String id);
    /**
     * æŸ¥è¯¢ç„Šç¼ç»Ÿè®¡è¡¨V2列表
     *
     * @param apsWeldSeamStatisticsV2 ç„Šç¼ç»Ÿè®¡è¡¨V2
     * @return ç„Šç¼ç»Ÿè®¡è¡¨V2集合
     */
    public List<ApsWeldSeamStatisticsV2> selectApsWeldSeamStatisticsV2List(ApsWeldSeamStatisticsV2 apsWeldSeamStatisticsV2);
    /**
     * æ–°å¢žç„Šç¼ç»Ÿè®¡è¡¨V2
     *
     * @param apsWeldSeamStatisticsV2 ç„Šç¼ç»Ÿè®¡è¡¨V2
     * @return ç»“æžœ
     */
    public int insertApsWeldSeamStatisticsV2(ApsWeldSeamStatisticsV2 apsWeldSeamStatisticsV2);
    /**
     * ä¿®æ”¹ç„Šç¼ç»Ÿè®¡è¡¨V2
     *
     * @param apsWeldSeamStatisticsV2 ç„Šç¼ç»Ÿè®¡è¡¨V2
     * @return ç»“æžœ
     */
    public int updateApsWeldSeamStatisticsV2(ApsWeldSeamStatisticsV2 apsWeldSeamStatisticsV2);
    /**
     * åˆ é™¤ç„Šç¼ç»Ÿè®¡è¡¨V2
     *
     * @param id ç„Šç¼ç»Ÿè®¡è¡¨V2主键
     * @return ç»“æžœ
     */
    public int deleteApsWeldSeamStatisticsV2ById(String id);
    /**
     * æ‰¹é‡åˆ é™¤ç„Šç¼ç»Ÿè®¡è¡¨V2
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteApsWeldSeamStatisticsV2ByIds(String[] ids);
    /**
     * æ¸…空统计表
     */
    public void truncateTable();
    /**
     * æ‰¹é‡æ’入数据
     *
     * @param list æ•°æ®åˆ—表
     * @return ç»“æžœ
     */
    public int batchInsert(@Param("list") List<ApsWeldSeamStatisticsV2> list);
    /**
     * æŸ¥è¯¢ç»Ÿè®¡æ•°æ®
     *
     * @return ç»Ÿè®¡æ•°æ®åˆ—表
     */
    public List<ApsWeldSeamStatisticsV2> queryWeldSeamStatistics();
}
aps-modules/aps-core/src/main/java/com/aps/core/service/ApsPlanTaskService.java
@@ -1,5 +1,6 @@
package com.aps.core.service;
import com.aps.common.core.web.domain.AjaxResult;
import com.aps.core.domain.ApsPlanTask;
import com.aps.core.enums.PLAN_TASK_STATUS;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -20,4 +21,6 @@
    void savePlanTask(String batchNum);
    void updateTaskStatus(String batchNum, PLAN_TASK_STATUS status);
    AjaxResult generatorPlan();
}
aps-modules/aps-core/src/main/java/com/aps/core/service/ApsPlate/ApsPlateRequireDateService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.aps.core.service.ApsPlate;
import com.aps.common.core.web.domain.AjaxResult;
import com.aps.core.domain.ApsPlate.ApsPlateRequireDate;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* @author zhl
* @description é’ˆå¯¹è¡¨ã€aps_plate_require_date(工单计划需求日期表)】的数据库操作Service
* @createDate 2025-05-19 16:51:36
*/
public interface ApsPlateRequireDateService extends IService<ApsPlateRequireDate> {
    @Transactional
    void batchSave(List<ApsPlateRequireDate> list);
    int batchDelete(List<Long> idList);
    Page<ApsPlateRequireDate> pagingList(Page<ApsPlateRequireDate> page, ApsPlateRequireDate requireDate);
}
aps-modules/aps-core/src/main/java/com/aps/core/service/IApsGasPipelineMoService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
package com.aps.core.service;
import java.util.List;
import com.aps.core.domain.ApsGasPipelineMo;
import org.springframework.web.multipart.MultipartFile;
/**
 * ç®¡è·¯æ‰‹å·¥æ°”体工单数据Service接口
 *
 * @author ruoyi
 * @date 2025-05-19
 */
public interface IApsGasPipelineMoService
{
    /**
     * æŸ¥è¯¢ç®¡è·¯æ‰‹å·¥æ°”体工单数据
     *
     * @param id ç®¡è·¯æ‰‹å·¥æ°”体工单数据主键
     * @return ç®¡è·¯æ‰‹å·¥æ°”体工单数据
     */
    public ApsGasPipelineMo selectApsGasPipelineMoById(Long id);
    /**
     * æŸ¥è¯¢ç®¡è·¯æ‰‹å·¥æ°”体工单数据列表
     *
     * @param apsGasPipelineMo ç®¡è·¯æ‰‹å·¥æ°”体工单数据
     * @return ç®¡è·¯æ‰‹å·¥æ°”体工单数据集合
     */
    public List<ApsGasPipelineMo> selectApsGasPipelineMoList(ApsGasPipelineMo apsGasPipelineMo);
    /**
     * æ–°å¢žç®¡è·¯æ‰‹å·¥æ°”体工单数据
     *
     * @param apsGasPipelineMo ç®¡è·¯æ‰‹å·¥æ°”体工单数据
     * @return ç»“æžœ
     */
    public int insertApsGasPipelineMo(ApsGasPipelineMo apsGasPipelineMo);
    /**
     * ä¿®æ”¹ç®¡è·¯æ‰‹å·¥æ°”体工单数据
     *
     * @param apsGasPipelineMo ç®¡è·¯æ‰‹å·¥æ°”体工单数据
     * @return ç»“æžœ
     */
    public int updateApsGasPipelineMo(ApsGasPipelineMo apsGasPipelineMo);
    /**
     * æ‰¹é‡åˆ é™¤ç®¡è·¯æ‰‹å·¥æ°”体工单数据
     *
     * @param ids éœ€è¦åˆ é™¤çš„管路手工气体工单数据主键集合
     * @return ç»“æžœ
     */
    public int deleteApsGasPipelineMoByIds(Long[] ids);
    /**
     * åˆ é™¤ç®¡è·¯æ‰‹å·¥æ°”体工单数据信息
     *
     * @param id ç®¡è·¯æ‰‹å·¥æ°”体工单数据主键
     * @return ç»“æžœ
     */
    public int deleteApsGasPipelineMoById(Long id);
    /**
     * æ’å…¥ ç®¡è·¯å·¥å•数据
     * @param file
     * @return
     */
    int batchInsertGasPipelineMo(MultipartFile file);
}
aps-modules/aps-core/src/main/java/com/aps/core/service/IApsGasPipelinePredictionService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
package com.aps.core.service;
import java.util.List;
import com.aps.core.domain.ApsGasPipelinePrediction;
import org.springframework.web.multipart.MultipartFile;
/**
 * ç®¡è·¯æ‰‹å·¥æ°”体预测数据Service接口
 *
 * @author ruoyi
 * @date 2025-05-19
 */
public interface IApsGasPipelinePredictionService
{
    /**
     * æŸ¥è¯¢ç®¡è·¯æ‰‹å·¥æ°”体预测数据
     *
     * @param id ç®¡è·¯æ‰‹å·¥æ°”体预测数据主键
     * @return ç®¡è·¯æ‰‹å·¥æ°”体预测数据
     */
    public ApsGasPipelinePrediction selectApsGasPipelinePredictionById(Long id);
    /**
     * æŸ¥è¯¢ç®¡è·¯æ‰‹å·¥æ°”体预测数据列表
     *
     * @param apsGasPipelinePrediction ç®¡è·¯æ‰‹å·¥æ°”体预测数据
     * @return ç®¡è·¯æ‰‹å·¥æ°”体预测数据集合
     */
    public List<ApsGasPipelinePrediction> selectApsGasPipelinePredictionList(ApsGasPipelinePrediction apsGasPipelinePrediction);
    /**
     * æ–°å¢žç®¡è·¯æ‰‹å·¥æ°”体预测数据
     *
     * @param apsGasPipelinePrediction ç®¡è·¯æ‰‹å·¥æ°”体预测数据
     * @return ç»“æžœ
     */
    public int insertApsGasPipelinePrediction(ApsGasPipelinePrediction apsGasPipelinePrediction);
    /**
     * ä¿®æ”¹ç®¡è·¯æ‰‹å·¥æ°”体预测数据
     *
     * @param apsGasPipelinePrediction ç®¡è·¯æ‰‹å·¥æ°”体预测数据
     * @return ç»“æžœ
     */
    public int updateApsGasPipelinePrediction(ApsGasPipelinePrediction apsGasPipelinePrediction);
    /**
     * æ‰¹é‡åˆ é™¤ç®¡è·¯æ‰‹å·¥æ°”体预测数据
     *
     * @param ids éœ€è¦åˆ é™¤çš„管路手工气体预测数据主键集合
     * @return ç»“æžœ
     */
    public int deleteApsGasPipelinePredictionByIds(Long[] ids);
    /**
     * åˆ é™¤ç®¡è·¯æ‰‹å·¥æ°”体预测数据信息
     *
     * @param id ç®¡è·¯æ‰‹å·¥æ°”体预测数据主键
     * @return ç»“æžœ
     */
    public int deleteApsGasPipelinePredictionById(Long id);
    int batchInsertApsGasPipelinePrediction(MultipartFile file);
}
aps-modules/aps-core/src/main/java/com/aps/core/service/IApsMaterialProductGroupManagementService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
package com.aps.core.service;
import com.aps.core.domain.ApsMaterialProductGroupManagement;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
 * ç‰©æ–™äº§å“ç»„数据管理Service接口
 *
 * @author ruoyi
 * @date 2025-05-19
 */
public interface IApsMaterialProductGroupManagementService
{
    /**
     * æŸ¥è¯¢ç‰©æ–™äº§å“ç»„数据管理
     *
     * @param id ç‰©æ–™äº§å“ç»„数据管理主键
     * @return ç‰©æ–™äº§å“ç»„数据管理
     */
    public ApsMaterialProductGroupManagement selectApsMaterialProductGroupManagementById(Long id);
    /**
     * æŸ¥è¯¢ç‰©æ–™äº§å“ç»„数据管理列表
     *
     * @param apsMaterialProductGroupManagement ç‰©æ–™äº§å“ç»„数据管理
     * @return ç‰©æ–™äº§å“ç»„数据管理集合
     */
    public List<ApsMaterialProductGroupManagement> selectApsMaterialProductGroupManagementList(ApsMaterialProductGroupManagement apsMaterialProductGroupManagement);
    /**
     * æ–°å¢žç‰©æ–™äº§å“ç»„数据管理
     *
     * @param apsMaterialProductGroupManagement ç‰©æ–™äº§å“ç»„数据管理
     * @return ç»“æžœ
     */
    public int insertApsMaterialProductGroupManagement(ApsMaterialProductGroupManagement apsMaterialProductGroupManagement);
    /**
     * ä¿®æ”¹ç‰©æ–™äº§å“ç»„数据管理
     *
     * @param apsMaterialProductGroupManagement ç‰©æ–™äº§å“ç»„数据管理
     * @return ç»“æžœ
     */
    public int updateApsMaterialProductGroupManagement(ApsMaterialProductGroupManagement apsMaterialProductGroupManagement);
    /**
     * æ‰¹é‡åˆ é™¤ç‰©æ–™äº§å“ç»„数据管理
     *
     * @param ids éœ€è¦åˆ é™¤çš„物料产品组数据管理主键集合
     * @return ç»“æžœ
     */
    public int deleteApsMaterialProductGroupManagementByIds(Long[] ids);
    /**
     * åˆ é™¤ç‰©æ–™äº§å“ç»„数据管理信息
     *
     * @param id ç‰©æ–™äº§å“ç»„数据管理主键
     * @return ç»“æžœ
     */
    public int deleteApsMaterialProductGroupManagementById(Long id);
    int batchInsertApsMaterialProductGroupManagement(MultipartFile file);
}
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipelineMoServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,155 @@
package com.aps.core.service.impl;
import cn.hutool.core.util.IdUtil;
import com.aps.common.core.utils.DateUtils;
import com.aps.common.security.utils.SecurityUtils;
import com.aps.core.domain.ApsGasPipelineMo;
import com.aps.core.mapper.ApsGasPipelineMoMapper;
import com.aps.core.service.IApsGasPipelineMoService;
import io.micrometer.common.util.StringUtils;
import lombok.SneakyThrows;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * ç®¡è·¯æ‰‹å·¥æ°”体工单数据Service业务层处理
 *
 * @author ruoyi
 * @date 2025-05-19
 */
@Service
public class ApsGasPipelineMoServiceImpl implements IApsGasPipelineMoService {
    @Autowired
    private ApsGasPipelineMoMapper apsGasPipelineMoMapper;
    /**
     * æŸ¥è¯¢ç®¡è·¯æ‰‹å·¥æ°”体工单数据
     *
     * @param id ç®¡è·¯æ‰‹å·¥æ°”体工单数据主键
     * @return ç®¡è·¯æ‰‹å·¥æ°”体工单数据
     */
    @Override
    public ApsGasPipelineMo selectApsGasPipelineMoById(Long id) {
        return apsGasPipelineMoMapper.selectApsGasPipelineMoById(id);
    }
    /**
     * æŸ¥è¯¢ç®¡è·¯æ‰‹å·¥æ°”体工单数据列表
     *
     * @param apsGasPipelineMo ç®¡è·¯æ‰‹å·¥æ°”体工单数据
     * @return ç®¡è·¯æ‰‹å·¥æ°”体工单数据
     */
    @Override
    public List<ApsGasPipelineMo> selectApsGasPipelineMoList(ApsGasPipelineMo apsGasPipelineMo) {
        return apsGasPipelineMoMapper.selectApsGasPipelineMoList(apsGasPipelineMo);
    }
    /**
     * æ–°å¢žç®¡è·¯æ‰‹å·¥æ°”体工单数据
     *
     * @param apsGasPipelineMo ç®¡è·¯æ‰‹å·¥æ°”体工单数据
     * @return ç»“æžœ
     */
    @Override
    public int insertApsGasPipelineMo(ApsGasPipelineMo apsGasPipelineMo) {
        apsGasPipelineMo.setCreateTime(DateUtils.getNowDate());
        apsGasPipelineMo.setId(IdUtil.getSnowflakeNextId());
        apsGasPipelineMo.setCreateBy(SecurityUtils.getUsername());
        return apsGasPipelineMoMapper.insertApsGasPipelineMo(apsGasPipelineMo);
    }
    /**
     * ä¿®æ”¹ç®¡è·¯æ‰‹å·¥æ°”体工单数据
     *
     * @param apsGasPipelineMo ç®¡è·¯æ‰‹å·¥æ°”体工单数据
     * @return ç»“æžœ
     */
    @Override
    public int updateApsGasPipelineMo(ApsGasPipelineMo apsGasPipelineMo) {
        apsGasPipelineMo.setUpdateTime(DateUtils.getNowDate());
        return apsGasPipelineMoMapper.updateApsGasPipelineMo(apsGasPipelineMo);
    }
    /**
     * æ‰¹é‡åˆ é™¤ç®¡è·¯æ‰‹å·¥æ°”体工单数据
     *
     * @param ids éœ€è¦åˆ é™¤çš„管路手工气体工单数据主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteApsGasPipelineMoByIds(Long[] ids) {
        return apsGasPipelineMoMapper.deleteApsGasPipelineMoByIds(ids);
    }
    /**
     * åˆ é™¤ç®¡è·¯æ‰‹å·¥æ°”体工单数据信息
     *
     * @param id ç®¡è·¯æ‰‹å·¥æ°”体工单数据主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteApsGasPipelineMoById(Long id) {
        return apsGasPipelineMoMapper.deleteApsGasPipelineMoById(id);
    }
    @SneakyThrows
    @Transactional(rollbackFor = Exception.class)
    @Override
    public int batchInsertGasPipelineMo(MultipartFile file) {
        Workbook workbook = WorkbookFactory.create(file.getInputStream());
        Sheet sheet = workbook.getSheetAt(0);
        int rows = sheet.getLastRowNum();
        if (rows > 0) {
            List<ApsGasPipelineMo> list = new ArrayList<>();
            /*数据列从1开始*/
            for (int i = 1; i <= rows; i++) {
                Row row = sheet.getRow(i);
                if (row.getCell(0) == null){
                    continue;
                }
                String mo = row.getCell(0).getStringCellValue();
                if (StringUtils.isEmpty(mo)){
                    continue;
                }
                String factory = row.getCell(1).getStringCellValue();
                String materialNum = row.getCell(2).getStringCellValue();
                double quantity = row.getCell(3).getNumericCellValue();
                Date planEnd = row.getCell(4).getDateCellValue();
                if (StringUtils.isNotBlank(factory) &&
                    StringUtils.isNotBlank(materialNum) &&
                    planEnd != null) {
                    ApsGasPipelineMo apsGasPipelineMo = new ApsGasPipelineMo();
                    apsGasPipelineMo.setMo(mo);
                    apsGasPipelineMo.setId(IdUtil.getSnowflakeNextId());
                    apsGasPipelineMo.setFactory(factory);
                    apsGasPipelineMo.setCreateBy(SecurityUtils.getUsername());
                    apsGasPipelineMo.setCreateTime(DateUtils.getNowDate());
                    apsGasPipelineMo.setQuantity(new BigDecimal(quantity));
                    apsGasPipelineMo.setPlanEnd(new Timestamp(planEnd.getTime()));
                    list.add(apsGasPipelineMo);
                }
            }
            if (!list.isEmpty()) {
                apsGasPipelineMoMapper.deleteAll();
                apsGasPipelineMoMapper.insert(list);
            }
            return list.size();
        }
        return 0;
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsGasPipelinePredictionServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,156 @@
package com.aps.core.service.impl;
import cn.hutool.core.util.IdUtil;
import com.aps.common.core.utils.DateUtils;
import com.aps.common.security.utils.SecurityUtils;
import com.aps.core.domain.ApsGasPipelinePrediction;
import com.aps.core.mapper.ApsGasPipelinePredictionMapper;
import com.aps.core.service.IApsGasPipelinePredictionService;
import io.micrometer.common.util.StringUtils;
import lombok.SneakyThrows;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * ç®¡è·¯æ‰‹å·¥æ°”体预测数据Service业务层处理
 *
 * @author ruoyi
 * @date 2025-05-19
 */
@Service
public class ApsGasPipelinePredictionServiceImpl implements IApsGasPipelinePredictionService
{
    @Autowired
    private ApsGasPipelinePredictionMapper apsGasPipelinePredictionMapper;
    /**
     * æŸ¥è¯¢ç®¡è·¯æ‰‹å·¥æ°”体预测数据
     *
     * @param id ç®¡è·¯æ‰‹å·¥æ°”体预测数据主键
     * @return ç®¡è·¯æ‰‹å·¥æ°”体预测数据
     */
    @Override
    public ApsGasPipelinePrediction selectApsGasPipelinePredictionById(Long id)
    {
        return apsGasPipelinePredictionMapper.selectApsGasPipelinePredictionById(id);
    }
    /**
     * æŸ¥è¯¢ç®¡è·¯æ‰‹å·¥æ°”体预测数据列表
     *
     * @param apsGasPipelinePrediction ç®¡è·¯æ‰‹å·¥æ°”体预测数据
     * @return ç®¡è·¯æ‰‹å·¥æ°”体预测数据
     */
    @Override
    public List<ApsGasPipelinePrediction> selectApsGasPipelinePredictionList(ApsGasPipelinePrediction apsGasPipelinePrediction)
    {
        return apsGasPipelinePredictionMapper.selectApsGasPipelinePredictionList(apsGasPipelinePrediction);
    }
    /**
     * æ–°å¢žç®¡è·¯æ‰‹å·¥æ°”体预测数据
     *
     * @param apsGasPipelinePrediction ç®¡è·¯æ‰‹å·¥æ°”体预测数据
     * @return ç»“æžœ
     */
    @Override
    public int insertApsGasPipelinePrediction(ApsGasPipelinePrediction apsGasPipelinePrediction)
    {
        apsGasPipelinePrediction.setCreateTime(DateUtils.getNowDate());
        return apsGasPipelinePredictionMapper.insertApsGasPipelinePrediction(apsGasPipelinePrediction);
    }
    /**
     * ä¿®æ”¹ç®¡è·¯æ‰‹å·¥æ°”体预测数据
     *
     * @param apsGasPipelinePrediction ç®¡è·¯æ‰‹å·¥æ°”体预测数据
     * @return ç»“æžœ
     */
    @Override
    public int updateApsGasPipelinePrediction(ApsGasPipelinePrediction apsGasPipelinePrediction)
    {
        apsGasPipelinePrediction.setUpdateTime(DateUtils.getNowDate());
        return apsGasPipelinePredictionMapper.updateApsGasPipelinePrediction(apsGasPipelinePrediction);
    }
    /**
     * æ‰¹é‡åˆ é™¤ç®¡è·¯æ‰‹å·¥æ°”体预测数据
     *
     * @param ids éœ€è¦åˆ é™¤çš„管路手工气体预测数据主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteApsGasPipelinePredictionByIds(Long[] ids)
    {
        return apsGasPipelinePredictionMapper.deleteApsGasPipelinePredictionByIds(ids);
    }
    /**
     * åˆ é™¤ç®¡è·¯æ‰‹å·¥æ°”体预测数据信息
     *
     * @param id ç®¡è·¯æ‰‹å·¥æ°”体预测数据主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteApsGasPipelinePredictionById(Long id)
    {
        return apsGasPipelinePredictionMapper.deleteApsGasPipelinePredictionById(id);
    }
    @SneakyThrows
    @Override
    public int batchInsertApsGasPipelinePrediction(MultipartFile file) {
        Workbook workbook = WorkbookFactory.create(file.getInputStream());
        Sheet sheet = workbook.getSheetAt(0);
        int rows = sheet.getLastRowNum();
        if (rows > 0) {
            List<ApsGasPipelinePrediction> list = new ArrayList<>();
            /*数据列从1开始*/
            for (int i = 1; i <= rows; i++) {
                Row row = sheet.getRow(i);
                if (row.getCell(0) == null){
                    continue;
                }
                String materialCode = row.getCell(0).getStringCellValue();
                if (StringUtils.isEmpty(materialCode)){
                    continue;
                }
                String factory = row.getCell(1).getStringCellValue();
                double quantity = row.getCell(2).getNumericCellValue();
                Date date = row.getCell(3).getDateCellValue();
                if (StringUtils.isNotBlank(factory) &&
                    date != null) {
                    ApsGasPipelinePrediction item = new ApsGasPipelinePrediction();
                    item.setId(IdUtil.getSnowflakeNextId());
                    item.setFactory(factory);
                    item.setMaterialCode(materialCode);
                    item.setCreateBy(SecurityUtils.getUsername());
                    item.setCreateTime(DateUtils.getNowDate());
                    item.setPredictQuantity(new BigDecimal(quantity));
                    item.setPredictDate(new Timestamp(date.getTime()));
                    list.add(item);
                }
            }
            if (!list.isEmpty()) {
                apsGasPipelinePredictionMapper.deleteAll();
                apsGasPipelinePredictionMapper.insert(list);
            }
            return list.size();
        }
        return 0;
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsMaterialProductGroupManagementServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,159 @@
package com.aps.core.service.impl;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import cn.hutool.core.util.IdUtil;
import com.aps.common.core.utils.DateUtils;
import com.aps.common.security.utils.SecurityUtils;
import com.aps.core.domain.ApsGasPipelinePrediction;
import com.aps.core.domain.ApsMaterialProductGroupManagement;
import com.aps.core.mapper.ApsMaterialProductGroupManagementMapper;
import com.aps.core.service.IApsMaterialProductGroupManagementService;
import io.micrometer.common.util.StringUtils;
import lombok.SneakyThrows;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
/**
 * ç‰©æ–™äº§å“ç»„数据管理Service业务层处理
 *
 * @author ruoyi
 * @date 2025-05-19
 */
@Service
public class ApsMaterialProductGroupManagementServiceImpl implements IApsMaterialProductGroupManagementService
{
    @Autowired
    private ApsMaterialProductGroupManagementMapper apsMaterialProductGroupManagementMapper;
    /**
     * æŸ¥è¯¢ç‰©æ–™äº§å“ç»„数据管理
     *
     * @param id ç‰©æ–™äº§å“ç»„数据管理主键
     * @return ç‰©æ–™äº§å“ç»„数据管理
     */
    @Override
    public ApsMaterialProductGroupManagement selectApsMaterialProductGroupManagementById(Long id)
    {
        return apsMaterialProductGroupManagementMapper.selectApsMaterialProductGroupManagementById(id);
    }
    /**
     * æŸ¥è¯¢ç‰©æ–™äº§å“ç»„数据管理列表
     *
     * @param apsMaterialProductGroupManagement ç‰©æ–™äº§å“ç»„数据管理
     * @return ç‰©æ–™äº§å“ç»„数据管理
     */
    @Override
    public List<ApsMaterialProductGroupManagement> selectApsMaterialProductGroupManagementList(ApsMaterialProductGroupManagement apsMaterialProductGroupManagement)
    {
        return apsMaterialProductGroupManagementMapper.selectApsMaterialProductGroupManagementList(apsMaterialProductGroupManagement);
    }
    /**
     * æ–°å¢žç‰©æ–™äº§å“ç»„数据管理
     *
     * @param apsMaterialProductGroupManagement ç‰©æ–™äº§å“ç»„数据管理
     * @return ç»“æžœ
     */
    @Override
    public int insertApsMaterialProductGroupManagement(ApsMaterialProductGroupManagement apsMaterialProductGroupManagement)
    {
        apsMaterialProductGroupManagement.setCreateTime(DateUtils.getNowDate());
        return apsMaterialProductGroupManagementMapper.insertApsMaterialProductGroupManagement(apsMaterialProductGroupManagement);
    }
    /**
     * ä¿®æ”¹ç‰©æ–™äº§å“ç»„数据管理
     *
     * @param apsMaterialProductGroupManagement ç‰©æ–™äº§å“ç»„数据管理
     * @return ç»“æžœ
     */
    @Override
    public int updateApsMaterialProductGroupManagement(ApsMaterialProductGroupManagement apsMaterialProductGroupManagement)
    {
        apsMaterialProductGroupManagement.setUpdateTime(DateUtils.getNowDate());
        return apsMaterialProductGroupManagementMapper.updateApsMaterialProductGroupManagement(apsMaterialProductGroupManagement);
    }
    /**
     * æ‰¹é‡åˆ é™¤ç‰©æ–™äº§å“ç»„数据管理
     *
     * @param ids éœ€è¦åˆ é™¤çš„物料产品组数据管理主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteApsMaterialProductGroupManagementByIds(Long[] ids)
    {
        return apsMaterialProductGroupManagementMapper.deleteApsMaterialProductGroupManagementByIds(ids);
    }
    /**
     * åˆ é™¤ç‰©æ–™äº§å“ç»„数据管理信息
     *
     * @param id ç‰©æ–™äº§å“ç»„数据管理主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteApsMaterialProductGroupManagementById(Long id)
    {
        return apsMaterialProductGroupManagementMapper.deleteApsMaterialProductGroupManagementById(id);
    }
    @SneakyThrows
    @Override
    public int batchInsertApsMaterialProductGroupManagement(MultipartFile file) {
        Workbook workbook = WorkbookFactory.create(file.getInputStream());
        Sheet sheet = workbook.getSheetAt(0);
        int rows = sheet.getLastRowNum();
        if (rows > 0) {
            List<ApsMaterialProductGroupManagement> list = new ArrayList<>();
            /*数据列从1开始*/
            for (int i = 1; i <= rows; i++) {
                Row row = sheet.getRow(i);
                if (row.getCell(0) == null) {
                    continue;
                }
                String materialCode = row.getCell(0).getStringCellValue();
                if (StringUtils.isEmpty(materialCode)){
                    continue;
                }
                String materialType = row.getCell(1).getStringCellValue();
                String domain = row.getCell(2).getStringCellValue();
                String isMain = row.getCell(3).getStringCellValue();
                String factory = row.getCell(4).getStringCellValue();
                if (StringUtils.isNotBlank(materialType) &&
                    StringUtils.isNotBlank(domain) &&
                    StringUtils.isNotBlank(isMain) &&
                    StringUtils.isNotBlank(factory)) {
                    ApsMaterialProductGroupManagement item = new ApsMaterialProductGroupManagement();
                    item.setId(IdUtil.getSnowflakeNextId());
                    item.setFactory(factory);
                    item.setDomain(domain);
                    item.setMaterialType(materialType);
                    item.setMaterialCode(materialCode);
                    item.setIsMain(isMain);
                    item.setCreateBy(SecurityUtils.getUsername());
                    item.setCreateTime(DateUtils.getNowDate());
                    list.add(item);
                }
            }
            if (!list.isEmpty()) {
                apsMaterialProductGroupManagementMapper.insert(list);
            }
            return list.size();
        }
        return 0;
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlanTaskServiceImpl.java
@@ -1,37 +1,60 @@
package com.aps.core.service.impl;
import cn.hutool.core.util.IdUtil;
import com.aps.common.core.domain.R;
import com.aps.common.core.utils.DateUtils;
import com.aps.common.core.web.domain.AjaxResult;
import com.aps.common.redis.service.RedisLockUtils;
import com.aps.common.security.utils.SecurityUtils;
import com.aps.core.enums.PLAN_TASK_STATUS;
import com.aps.core.enums.PLAN_TASK_TYPE;
import com.aps.core.enums.REDIS_LOCK_KEY;
import com.aps.core.mapper.ApsPlateStandardRequireOrderEndDayMapper;
import com.aps.core.service.ApsPlate.IApsPlateStandardRequireBatchService;
import com.aps.core.service.ApsPlate.IApsPlateStandardRequireService;
import com.aps.core.service.ApsPlateStandardRequireOrderEndDayService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.aps.core.domain.ApsPlanTask;
import com.aps.core.service.ApsPlanTaskService;
import com.aps.core.mapper.ApsPlanTaskMapper;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import static com.aps.common.core.web.domain.AjaxResult.success;
import static com.aps.core.enums.REDIS_LOCK_KEY.PLATE_ORDER_PLAN;
/**
* @author zhl
* @description é’ˆå¯¹è¡¨ã€aps_plan_task(计划生成日志表)】的数据库操作Service实现
* @createDate 2025-05-16 14:41:49
*/
@Slf4j
@Service
public class ApsPlanTaskServiceImpl extends ServiceImpl<ApsPlanTaskMapper, ApsPlanTask> implements ApsPlanTaskService{
    @Autowired
    ApsPlanTaskMapper mapper;
    @Autowired
    private IApsPlateStandardRequireService apsPlateStandardRequireService;
    @Resource
    IApsPlateStandardRequireBatchService requireBatchService;
    @Resource
    RedisLockUtils redisLockUtils;
    @Resource
    ApsPlateStandardRequireOrderEndDayMapper  orderEndDayMapper;
    @Override
    public Page<ApsPlanTask> pagingList(Page<ApsPlanTask> page ,ApsPlanTask task){
        LambdaQueryWrapper<ApsPlanTask> queryWrapper=new LambdaQueryWrapper<>();
        queryWrapper.like( !task.getTaskType().isEmpty(),  ApsPlanTask::getTaskType,task.getTaskType());
        queryWrapper.like( null!=task.getTaskType(),  ApsPlanTask::getTaskType,task.getTaskType());
        return mapper.selectPage(page, queryWrapper);
    }
@@ -65,6 +88,41 @@
                .build();
        baseMapper.update(task,queryWrapper);
    }
    @Override
    public AjaxResult generatorPlan()
    {
        String plateOrderPlanKey = PLATE_ORDER_PLAN.getKey();
        boolean existsLock = redisLockUtils.existLock(plateOrderPlanKey, PLAN_TASK_TYPE.PLATE_PLAN.getCode());
        if (existsLock){
            return AjaxResult.warn("钣金工单计划任务正在执行中!");
        }
        LambdaQueryWrapper<ApsPlanTask> queryWrapper=new LambdaQueryWrapper<>();
        queryWrapper.eq(ApsPlanTask::getTaskType,PLAN_TASK_TYPE.PLATE_PLAN.getCode());
        queryWrapper.eq(ApsPlanTask::getTaskStatus,PLAN_TASK_STATUS.IN_PROCESS.getCode());
        boolean existsDbTask = mapper.exists(queryWrapper);
        if (existsDbTask){
            return AjaxResult.warn("钣金工单计划任务正在执行中!!");
        }
        try {
            redisLockUtils.getLock(plateOrderPlanKey,PLAN_TASK_TYPE.PLATE_PLAN.getCode(), 3*60L);
            String batchNum= requireBatchService.getNewBatchNumber();
            this.savePlanTask(batchNum);
            apsPlateStandardRequireService.generatorPlan(batchNum);
            this.updateTaskStatus(batchNum, PLAN_TASK_STATUS.FINISHED);
            /*清除已经存在的 å·¥å•计划完工时间*/
            orderEndDayMapper.batchRemove();
            log.info("计划任务执行完成!"+batchNum);
            return success();
        }catch (Exception e){
            redisLockUtils.releaseLock(plateOrderPlanKey,PLAN_TASK_TYPE.PLATE_PLAN.getCode());
            log.error("计划任务执行失败!"+e.getMessage());
            return AjaxResult.error("计划任务执行失败!"+e.getMessage());
        }finally {
            redisLockUtils.releaseLock(plateOrderPlanKey,PLAN_TASK_TYPE.PLATE_PLAN.getCode());
        }
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateRequireDateServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,72 @@
package com.aps.core.service.impl.ApsPlate;
import cn.hutool.core.util.IdUtil;
import com.aps.common.security.utils.SecurityUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.aps.core.domain.ApsPlate.ApsPlateRequireDate;
import com.aps.core.service.ApsPlate.ApsPlateRequireDateService;
import com.aps.core.mapper.ApsPlateRequireDateMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
 * @author zhl
 * @description é’ˆå¯¹è¡¨ã€aps_plate_require_date(工单计划需求日期表)】的数据库操作Service实现
 * @createDate 2025-05-19 16:51:36
 */
@Service
public class ApsPlateRequireDateServiceImpl extends ServiceImpl<ApsPlateRequireDateMapper, ApsPlateRequireDate>
        implements ApsPlateRequireDateService {
    @Resource
    private ApsPlateRequireDateMapper apsPlateRequireDateMapper;
    @Transactional
    @Override
    public void batchSave(List<ApsPlateRequireDate> list) {
        if (!list.isEmpty()) {
            list.forEach(apsPlateRequireDate -> {
                apsPlateRequireDate.setId(IdUtil.getSnowflakeNextId());
                apsPlateRequireDate.setCreateBy(SecurityUtils.getUsername());
            });
            int batchSize = 1000;
            for (int i = 0; i < list.size(); i += batchSize) {
                int end = Math.min(i + batchSize, list.size());
                List<ApsPlateRequireDate> batch = list.subList(i, end);
                List<String> docNoList = batch.stream().map(ApsPlateRequireDate::getDocNo).distinct().toList();
                apsPlateRequireDateMapper.deleteByDocNoList(docNoList, SecurityUtils.getUsername());
                apsPlateRequireDateMapper.batchInsert(batch);
            }
        }
    }
    @Override
    public int batchDelete(List<Long> idList){
        //TODO: æ ¹æ®idList批量删除
        LambdaUpdateWrapper<ApsPlateRequireDate> queryWrapper = new LambdaUpdateWrapper<>();
        queryWrapper.in(ApsPlateRequireDate::getId, idList);
        queryWrapper.set(ApsPlateRequireDate::getDelFlag, 0);
        return  apsPlateRequireDateMapper.update(queryWrapper);
    }
    @Override
    public Page<ApsPlateRequireDate> pagingList(Page<ApsPlateRequireDate> page, ApsPlateRequireDate requireDate){
        LambdaQueryWrapper<ApsPlateRequireDate> queryWrapper=new LambdaQueryWrapper<>();
        queryWrapper.eq(ApsPlateRequireDate::getDelFlag,0);
        queryWrapper.like( null!=requireDate.getDocNo(),  ApsPlateRequireDate::getDocNo,requireDate.getDocNo());
        return apsPlateRequireDateMapper.selectPage(page, queryWrapper);
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateStandardRequireOrderEndDayServiceImpl.java
@@ -28,7 +28,7 @@
    @Override
    public int saveBatch(List<Long> planIds)
    {
        mapper.batchRemove(planIds);
        mapper.batchRemoveByPlanId(planIds);
       return mapper.batchInsert(planIds, SecurityUtils.getUsername());
    }
}
aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateStandardRequireServiceImpl.java
@@ -172,10 +172,8 @@
        requireBatchService.initRequireBatch();
        /*定义工厂为南通 */
        String plantCode="FORTUNA";
        /*定义主单类型为钣金主单*/
        String mainOrderType = "main";
        /*获取钣金主单信息*/
        List<ApsPlatePlan> mainPlans = platePlanMapper.selectPlatePlanByPlantMajor(plantCode,mainOrderType);
        List<ApsPlatePlan> mainPlans = platePlanMapper.selectPlatePlanByPlantMajor(plantCode);
        Hashtable<String, ApsMaterialStorageManagement> usedStorage = new Hashtable<>();
        /*内存中存储子件工单*/
        Hashtable<String, List<ApsPlatePlan>> subPlans = new Hashtable<>();
@@ -183,13 +181,9 @@
        for (ApsPlatePlan mainPlan : mainPlans) {
            String itemNumber = mainPlan.getItemNumber();
            /*根据料号 èŽ·å–BOM Header */
            List<ApsPlateStandardRequire> requiresList=new ArrayList<>();
            List<ApsPlateStandardRequireBomStockDetail> stockDetailsList=new ArrayList<>();
            List<ApsPlateStandardRequireBomOrderDetail> orderDetailsList=new ArrayList<>();
            log.info("开始生成需求:工单号:"+mainPlan.getDocumentNumber());
            /*当前Bom节点处理完成后,处理下级BOM*/
            getBomRequires(plantCode, "0","0",itemNumber,BigDecimal.ONE, batchNum, null
aps-modules/aps-core/src/main/java/com/aps/core/service/mainPlan/IApsWeldSeamStatisticsV2Service.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.aps.core.service.mainPlan;
import com.aps.core.domain.mainPlan.ApsWeldSeamStatisticsV2;
import java.util.List;
/**
 * ç„Šç¼ç»Ÿè®¡è¡¨V2服务接口
 *
 * @date 2023-08-01
 */
public interface IApsWeldSeamStatisticsV2Service {
    /**
     * æŸ¥è¯¢ç„Šç¼ç»Ÿè®¡è¡¨V2列表
     *
     * @param apsWeldSeamStatisticsV2 ç„Šç¼ç»Ÿè®¡è¡¨V2
     * @return ç„Šç¼ç»Ÿè®¡è¡¨V2集合
     */
    public List<ApsWeldSeamStatisticsV2> selectApsWeldSeamStatisticsV2List(ApsWeldSeamStatisticsV2 apsWeldSeamStatisticsV2);
    /**
     * ä¿®æ”¹ç„Šç¼ç»Ÿè®¡è¡¨V2
     *
     * @param apsWeldSeamStatisticsV2 ç„Šç¼ç»Ÿè®¡è¡¨V2
     * @return æ›´æ–°åŽçš„记录
     */
    public ApsWeldSeamStatisticsV2 updateApsWeldSeamStatisticsV2(ApsWeldSeamStatisticsV2 apsWeldSeamStatisticsV2);
    /**
     * åˆ·æ–°ç„Šç¼ç»Ÿè®¡è¡¨æ•°æ®
     *
     * @param username æ“ä½œç”¨æˆ·
     * @return å—影响的记录数
     */
    public int refreshWeldSeamStatistics(String username);
}
aps-modules/aps-core/src/main/java/com/aps/core/service/mainPlan/impl/ApsWeldSeamStatisticsV2ServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,206 @@
package com.aps.core.service.mainPlan.impl;
import com.aps.common.core.utils.DateUtils;
import com.aps.common.core.utils.uuid.IdUtils;
import com.aps.common.core.web.page.TableDataInfo;
import com.aps.common.security.utils.SecurityUtils;
import com.aps.core.controller.basicData.ApsGasPipelineCapacityPlanController;
import com.aps.core.domain.ApsGasPipelineCapacityPlan;
import com.aps.core.domain.mainPlan.ApsWeldSeamStatisticsV2;
import com.aps.core.mapper.mainPlan.ApsWeldSeamStatisticsV2Mapper;
import com.aps.core.service.IApsGasPipelineCapacityPlanService;
import com.aps.core.service.mainPlan.IApsWeldSeamStatisticsV2Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
 * ç„Šç¼ç»Ÿè®¡è¡¨V2Service业务层处理
 *
 * @date 2023-08-01
 */
@Service
public class ApsWeldSeamStatisticsV2ServiceImpl implements IApsWeldSeamStatisticsV2Service {
    @Autowired
    private ApsWeldSeamStatisticsV2Mapper apsWeldSeamStatisticsV2Mapper;
    @Autowired
    private ApsGasPipelineCapacityPlanController apsGasPipelineCapacityPlanController;
    /**
     * æŸ¥è¯¢ç„Šç¼ç»Ÿè®¡è¡¨V2列表
     *
     * @param apsWeldSeamStatisticsV2 ç„Šç¼ç»Ÿè®¡è¡¨V2
     * @return ç„Šç¼ç»Ÿè®¡è¡¨V2
     */
    @Override
    public List<ApsWeldSeamStatisticsV2> selectApsWeldSeamStatisticsV2List(ApsWeldSeamStatisticsV2 apsWeldSeamStatisticsV2) {
        return apsWeldSeamStatisticsV2Mapper.selectApsWeldSeamStatisticsV2List(apsWeldSeamStatisticsV2);
    }
    /**
     * ä¿®æ”¹ç„Šç¼ç»Ÿè®¡è¡¨V2
     *
     * @param apsWeldSeamStatisticsV2 ç„Šç¼ç»Ÿè®¡è¡¨V2
     * @return æ›´æ–°åŽçš„记录
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public ApsWeldSeamStatisticsV2 updateApsWeldSeamStatisticsV2(ApsWeldSeamStatisticsV2 apsWeldSeamStatisticsV2)
    {
        // è®¾ç½®æ›´æ–°æ—¶é—´
        apsWeldSeamStatisticsV2.setUpdateTime(DateUtils.getNowDate());
        apsWeldSeamStatisticsV2.setUpdateBy(SecurityUtils.getUsername());
        // 1. ä»Žæ•°æ®åº“获取原始记录,以保留其他字段不变
        ApsWeldSeamStatisticsV2 originalData = apsWeldSeamStatisticsV2Mapper.selectApsWeldSeamStatisticsV2ById(apsWeldSeamStatisticsV2.getId());
        if (originalData == null) {
            throw new RuntimeException("记录不存在,ID: " + apsWeldSeamStatisticsV2.getId());
        }
        // 2. åªæ›´æ–°reserveEmergencyOrderOutput和days两个字段
        originalData.setReserveEmergencyOrderOutput(apsWeldSeamStatisticsV2.getReserveEmergencyOrderOutput());
        originalData.setDays(apsWeldSeamStatisticsV2.getDays());
        originalData.setUpdateTime(apsWeldSeamStatisticsV2.getUpdateTime());
        originalData.setUpdateBy(apsWeldSeamStatisticsV2.getUpdateBy());
        // 3. ç¡®ä¿æ‰€æœ‰ç”¨äºŽè®¡ç®—çš„BigDecimal字段不为null
        java.math.BigDecimal pipingOrderReq = (originalData.getPipingOrderRequirement() != null)
                ? originalData.getPipingOrderRequirement() : java.math.BigDecimal.ZERO;
        java.math.BigDecimal pipingPredictionReq = (originalData.getPipingPredictionRequirement() != null)
                ? originalData.getPipingPredictionRequirement() : java.math.BigDecimal.ZERO;
        java.math.BigDecimal gasOrderReq = (originalData.getGasOrderRequirement() != null)
                ? originalData.getGasOrderRequirement() : java.math.BigDecimal.ZERO;
        java.math.BigDecimal gasPredictionReq = (originalData.getGasPredictionRequirement() != null)
                ? originalData.getGasPredictionRequirement() : java.math.BigDecimal.ZERO;
        java.math.BigDecimal reserveEmergencyOutput = (originalData.getReserveEmergencyOrderOutput() != null)
                ? originalData.getReserveEmergencyOrderOutput() : java.math.BigDecimal.ZERO;
        // 4. å±žæ€§1:重新计算total(合计)
        java.math.BigDecimal total = pipingOrderReq
                .add(pipingPredictionReq)
                .add(gasOrderReq)
                .add(gasPredictionReq)
                .add(reserveEmergencyOutput);
        originalData.setTotal(total);
        // 5. å¦‚æžœdays不为空且大于0,重新计算requirementDayWeldSeam和isSatisfy
        if(originalData.getDays() != null && originalData.getDays().doubleValue() > 0) {
            // å±žæ€§2:计算需求日焊缝 = åˆè®¡/天数,四舍五入
            double result = total.doubleValue() / originalData.getDays().doubleValue();
            java.math.BigDecimal requirementDayWeldSeam = new java.math.BigDecimal(result).setScale(0, java.math.RoundingMode.HALF_UP);
            originalData.setRequirementDayWeldSeam(requirementDayWeldSeam);
            // å±žæ€§3:判断是否满足
            if(originalData.getProductionDayWeldSeam() != null) {
                if(originalData.getProductionDayWeldSeam().compareTo(requirementDayWeldSeam) >= 0) {
                    originalData.setIsSatisfy("1"); // æ»¡è¶³
                } else {
                    originalData.setIsSatisfy("0"); // ä¸æ»¡è¶³
                }
            } else {
                originalData.setIsSatisfy("0"); // é»˜è®¤ä¸æ»¡è¶³
            }
        } else {
            // å¦‚果天数为空或为0,设置为不满足
            originalData.setIsSatisfy("0");
        }
        // 6. æ›´æ–°æ•°æ®åº“
        apsWeldSeamStatisticsV2Mapper.updateApsWeldSeamStatisticsV2(originalData);
        // 7. è¿”回更新后的完整记录
        return originalData;
    }
    /**
     * åˆ·æ–°ç„Šç¼ç»Ÿè®¡è¡¨æ•°æ®
     *
     * @param username æ“ä½œç”¨æˆ·
     * @return å—影响的记录数
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int refreshWeldSeamStatistics(String username) {
        // 1. æ¸…空统计表
        apsWeldSeamStatisticsV2Mapper.truncateTable();
        // 2. èŽ·å–æœ€æ–°çš„ç»Ÿè®¡æ•°æ®
        List<ApsWeldSeamStatisticsV2> statisticsList = apsWeldSeamStatisticsV2Mapper.queryWeldSeamStatistics();
        // 3. è®¾ç½®åˆ›å»ºä¿¡æ¯å’ŒID,并获取生产日焊缝数据
        Date now = new Date();
        for (ApsWeldSeamStatisticsV2 statistics : statisticsList) {
            // ä½¿ç”¨UUID作为ID
            statistics.setId(IdUtils.fastUUID());
            statistics.setCreateBy(username);
            statistics.setCreateTime(now);
            // å…ˆè®¡ç®—需求日焊缝(requirementDayWeldSeam)
            if(statistics.getDays() != null && statistics.getDays().doubleValue() > 0 && statistics.getTotal() != null) {
                // è®¡ç®—需求日焊缝 = åˆè®¡/天数,四舍五入
                double result = statistics.getTotal().doubleValue() / statistics.getDays().doubleValue();
                BigDecimal requirementDayWeldSeam = new BigDecimal(result).setScale(0, java.math.RoundingMode.HALF_UP);
                statistics.setRequirementDayWeldSeam(requirementDayWeldSeam);
            } else if (statistics.getRequirementDayWeldSeam() == null) {
                // å¦‚果无法计算且之前没有值,设置默认值
                statistics.setRequirementDayWeldSeam(BigDecimal.ZERO);
            }
            // è®¾ç½®ç”Ÿäº§æ—¥ç„Šç¼(productionDayWeldSeam)
            // æ ¹æ®year、month、productionBase查询对应的生产日焊缝数据
            if (statistics.getYear() != null && statistics.getMonth() != null && statistics.getProductionBase() != null) {
                // åˆ›å»ºæŸ¥è¯¢æ¡ä»¶
                ApsGasPipelineCapacityPlan queryParam = new ApsGasPipelineCapacityPlan();
                queryParam.setYear(statistics.getYear().toString());
                queryParam.setMonth(statistics.getMonth().toString());
                queryParam.setOrgCode(statistics.getProductionBase());
                // ç›´æŽ¥è°ƒç”¨Controller的list方法获取数据
                TableDataInfo tableDataInfo = apsGasPipelineCapacityPlanController.list(queryParam);
                List<ApsGasPipelineCapacityPlan> capacityPlans = (List<ApsGasPipelineCapacityPlan>) tableDataInfo.getRows();
                // éåŽ†æ‰¾åˆ°processName为"气体管路轨道焊接组"的记录
                for (ApsGasPipelineCapacityPlan plan : capacityPlans) {
                    if ("气体管路轨道焊接组".equals(plan.getProcessName()) && plan.getDayProduceAllNum() != null) {
                        // è®¾ç½®ç”Ÿäº§æ—¥ç„Šç¼å€¼
                        statistics.setProductionDayWeldSeam(plan.getDayProduceAllNum());
                        break; // æ‰¾åˆ°åŒ¹é…è®°å½•后退出循环
                    }
                }
            }
            // å¦‚果没有找到匹配的产能规划数据,设置默认状态
            if (statistics.getProductionDayWeldSeam() == null) {
                statistics.setProductionDayWeldSeam(BigDecimal.ZERO);
            }
            // æœ€åŽç»Ÿä¸€è®¡ç®—isSatisfy(是否满足)
            // å½“生产日焊缝 >= éœ€æ±‚日焊缝时为满足,否则为不满足
            if (statistics.getRequirementDayWeldSeam() != null &&
                statistics.getProductionDayWeldSeam() != null &&
                statistics.getProductionDayWeldSeam().compareTo(statistics.getRequirementDayWeldSeam()) >= 0) {
                statistics.setIsSatisfy("1"); // æ»¡è¶³
            } else {
                statistics.setIsSatisfy("0"); // ä¸æ»¡è¶³
            }
        }
        // 4. æ‰¹é‡æ’入数据
        int count = 0;
        if (!statisticsList.isEmpty()) {
            count = apsWeldSeamStatisticsV2Mapper.batchInsert(statisticsList);
        }
        return count;
    }
}
aps-modules/aps-core/src/main/resources/mapper/core/ApsGasPipelineMoMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,96 @@
<?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="com.aps.core.mapper.ApsGasPipelineMoMapper">
    <resultMap type="com.aps.core.domain.ApsGasPipelineMo" id="ApsGasPipelineMoResult">
        <result property="id"    column="id"    />
        <result property="mo"    column="mo"    />
        <result property="factory"    column="factory"    />
        <result property="materialCode"    column="material_code"    />
        <result property="planEnd"    column="plan_end"    />
        <result property="createBy"    column="create_by"    />
        <result property="createTime"    column="create_time"    />
        <result property="updateBy"    column="update_by"    />
        <result property="updateTime"    column="update_time"    />
        <result property="quantity"    column="quantity"    />
    </resultMap>
    <sql id="selectApsGasPipelineMoVo">
        select id, mo, factory, material_code, plan_end, create_by, create_time, update_by, update_time, quantity from aps_gas_pipeline_mo
    </sql>
    <select id="selectApsGasPipelineMoList" parameterType="ApsGasPipelineMo" resultMap="ApsGasPipelineMoResult">
        <include refid="selectApsGasPipelineMoVo"/>
        <where>
            <if test="mo != null  and mo != ''"> and mo = #{mo}</if>
            <if test="factory != null  and factory != ''"> and factory = #{factory}</if>
            <if test="materialCode != null  and materialCode != ''"> and material_code = #{materialCode}</if>
            <if test="planEnd != null  and planEnd != ''"> and plan_end = #{planEnd}</if>
            <if test="quantity != null  and quantity != ''"> and quantity = #{quantity}</if>
        </where>
    </select>
    <select id="selectApsGasPipelineMoById" parameterType="Long" resultMap="ApsGasPipelineMoResult">
    </select>
    <insert id="insertApsGasPipelineMo" parameterType="ApsGasPipelineMo">
        insert into aps_gas_pipeline_mo
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">id,</if>
            <if test="mo != null">mo,</if>
            <if test="factory != null">factory,</if>
            <if test="materialCode != null">material_code,</if>
            <if test="planEnd != null">plan_end,</if>
            <if test="createBy != null">create_by,</if>
            <if test="createTime != null">create_time,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="quantity != null">quantity,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id},</if>
            <if test="mo != null">#{mo},</if>
            <if test="factory != null">#{factory},</if>
            <if test="materialCode != null">#{materialCode},</if>
            <if test="planEnd != null">#{planEnd},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="quantity != null">#{quantity},</if>
         </trim>
    </insert>
    <update id="updateApsGasPipelineMo" parameterType="ApsGasPipelineMo">
        update aps_gas_pipeline_mo
        <trim prefix="SET" suffixOverrides=",">
            <if test="mo != null">mo = #{mo},</if>
            <if test="factory != null">factory = #{factory},</if>
            <if test="materialCode != null">material_code = #{materialCode},</if>
            <if test="planEnd != null">plan_end = #{planEnd},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="quantity != null">quantity = #{quantity},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteApsGasPipelineMoById" parameterType="Long">
        delete from aps_gas_pipeline_mo where id = #{id}
    </delete>
    <delete id="deleteAll">
        delete from aps_gas_pipeline_mo
    </delete>
    <delete id="deleteApsGasPipelineMoByIds" parameterType="String">
        delete from aps_gas_pipeline_mo where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
</mapper>
aps-modules/aps-core/src/main/resources/mapper/core/ApsGasPipelinePredictionMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,91 @@
<?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="com.aps.core.mapper.ApsGasPipelinePredictionMapper">
    <resultMap type="com.aps.core.domain.ApsGasPipelinePrediction" id="ApsGasPipelinePredictionResult">
        <result property="id"    column="id"    />
        <result property="factory"    column="factory"    />
        <result property="materialCode"    column="material_code"    />
        <result property="predictDate"    column="predict_date"    />
        <result property="createBy"    column="create_by"    />
        <result property="createTime"    column="create_time"    />
        <result property="updateBy"    column="update_by"    />
        <result property="updateTime"    column="update_time"    />
        <result property="predictQuantity"    column="predict_quantity"    />
    </resultMap>
    <sql id="selectApsGasPipelinePredictionVo">
        select id, factory, material_code, predict_date, create_by, create_time, update_by, update_time, predict_quantity from aps_gas_pipeline_prediction
    </sql>
    <select id="selectApsGasPipelinePredictionList" parameterType="ApsGasPipelinePrediction" resultMap="ApsGasPipelinePredictionResult">
        <include refid="selectApsGasPipelinePredictionVo"/>
        <where>
            <if test="factory != null  and factory != ''"> and factory = #{factory}</if>
            <if test="materialCode != null  and materialCode != ''"> and material_code = #{materialCode}</if>
            <if test="predictDate != null  and predictDate != ''"> and predict_date = #{predictDate}</if>
            <if test="predictQuantity != null  and predictQuantity != ''"> and predict_quantity = #{predictQuantity}</if>
        </where>
    </select>
    <select id="selectApsGasPipelinePredictionById" parameterType="Long" resultMap="ApsGasPipelinePredictionResult">
    </select>
    <insert id="insertApsGasPipelinePrediction" parameterType="ApsGasPipelinePrediction">
        insert into aps_gas_pipeline_prediction
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">id,</if>
            <if test="factory != null">factory,</if>
            <if test="materialCode != null">material_code,</if>
            <if test="predictDate != null">predict_date,</if>
            <if test="createBy != null">create_by,</if>
            <if test="createTime != null">create_time,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="predictQuantity != null">predict_quantity,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id},</if>
            <if test="factory != null">#{factory},</if>
            <if test="materialCode != null">#{materialCode},</if>
            <if test="predictDate != null">#{predictDate},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="predictQuantity != null">#{predictQuantity},</if>
         </trim>
    </insert>
    <update id="updateApsGasPipelinePrediction" parameterType="ApsGasPipelinePrediction">
        update aps_gas_pipeline_prediction
        <trim prefix="SET" suffixOverrides=",">
            <if test="factory != null">factory = #{factory},</if>
            <if test="materialCode != null">material_code = #{materialCode},</if>
            <if test="predictDate != null">predict_date = #{predictDate},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="predictQuantity != null">predict_quantity = #{predictQuantity},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteApsGasPipelinePredictionById" parameterType="Long">
        delete from aps_gas_pipeline_prediction where id = #{id}
    </delete>
    <delete id="deleteApsGasPipelinePredictionByIds" parameterType="String">
        delete from aps_gas_pipeline_prediction where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
    <delete id="deleteAll" >
        delete from aps_gas_pipeline_prediction
    </delete>
</mapper>
aps-modules/aps-core/src/main/resources/mapper/core/ApsMaterialProductGroupManagementMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,96 @@
<?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="com.aps.core.mapper.ApsMaterialProductGroupManagementMapper">
    <resultMap type="com.aps.core.domain.ApsMaterialProductGroupManagement" id="ApsMaterialProductGroupManagementResult">
        <result property="id"    column="id"    />
        <result property="factory"    column="factory"    />
        <result property="materialCode"    column="material_code"    />
        <result property="domain"    column="domain"    />
        <result property="createBy"    column="create_by"    />
        <result property="createTime"    column="create_time"    />
        <result property="updateBy"    column="update_by"    />
        <result property="updateTime"    column="update_time"    />
        <result property="isMain"    column="is_main"    />
        <result property="materialType"    column="material_type"    />
    </resultMap>
    <sql id="selectApsMaterialProductGroupManagementVo">
        select id, factory, material_code, domain, create_by, create_time, update_by, update_time, is_main, material_type from aps_material_product_group_management
    </sql>
    <select id="selectApsMaterialProductGroupManagementList" parameterType="ApsMaterialProductGroupManagement" resultMap="ApsMaterialProductGroupManagementResult">
        <include refid="selectApsMaterialProductGroupManagementVo"/>
        <where>
            <if test="factory != null  and factory != ''"> and factory = #{factory}</if>
            <if test="materialCode != null  and materialCode != ''"> and material_code = #{materialCode}</if>
            <if test="domain != null  and domain != ''"> and domain = #{domain}</if>
            <if test="isMain != null  and isMain != ''"> and is_main = #{isMain}</if>
            <if test="materialType != null  and materialType != ''"> and material_type = #{materialType}</if>
        </where>
    </select>
    <select id="selectApsMaterialProductGroupManagementById" parameterType="Long" resultMap="ApsMaterialProductGroupManagementResult">
    </select>
    <insert id="insertApsMaterialProductGroupManagement" parameterType="ApsMaterialProductGroupManagement">
        insert into aps_material_product_group_management
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">id,</if>
            <if test="factory != null">factory,</if>
            <if test="materialCode != null">material_code,</if>
            <if test="domain != null">domain,</if>
            <if test="createBy != null">create_by,</if>
            <if test="createTime != null">create_time,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="isMain != null">is_main,</if>
            <if test="materialType != null">material_type,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id},</if>
            <if test="factory != null">#{factory},</if>
            <if test="materialCode != null">#{materialCode},</if>
            <if test="domain != null">#{domain},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="isMain != null">#{isMain},</if>
            <if test="materialType != null">#{materialType},</if>
         </trim>
    </insert>
    <update id="updateApsMaterialProductGroupManagement" parameterType="ApsMaterialProductGroupManagement">
        update aps_material_product_group_management
        <trim prefix="SET" suffixOverrides=",">
            <if test="factory != null">factory = #{factory},</if>
            <if test="materialCode != null">material_code = #{materialCode},</if>
            <if test="domain != null">domain = #{domain},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="isMain != null">is_main = #{isMain},</if>
            <if test="materialType != null">material_type = #{materialType},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteApsMaterialProductGroupManagementById" parameterType="Long">
        delete from aps_material_product_group_management where id = #{id}
    </delete>
    <delete id="deleteApsMaterialProductGroupManagementByIds" parameterType="String">
        delete from aps_material_product_group_management where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
    <delete id="deleteAll" parameterType="String">
        delete from aps_material_product_group_management
    </delete>
</mapper>
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlatePlanMapper.xml
@@ -277,15 +277,19 @@
    </update>
    <select id="selectPlatePlanByPlantMajor" parameterType="com.aps.core.domain.ApsPlate.ApsPlatePlan" resultMap="ApsPlatePlanResult">
        select  id,document_number,main_part_number,item_number,plant,professional_affiliation,production_quantity,require_id,
        unmatched_quantity,version, production_base,plan_end_day,order_create_time,low_order_code
        from aps_plate_plan
        <where>
            <if test="plant != null "> and plant = #{plant} </if>
            <if test="professionalAffiliation != null "> and professional_affiliation = 'main' </if>
              and del_flag='0'
        </where>
        order by document_number asc,id asc
        with rd as (
            select doc_no,require_date   from aps_plate_require_date where del_flag=0
        )
        select
            app.id,app.document_number,app.main_part_number,app.item_number,app.plant,app.professional_affiliation,app.production_quantity,app.require_id,
            app.unmatched_quantity,app.version, app.production_base,app.order_create_time,app.low_order_code,
            app.plan_end_day as orign_end_day,
            COALESCE(rd.require_date,app.plan_end_day) as plan_end_day
        from aps_plate_plan as  app
        left join rd  on app.document_number=rd.doc_no
        where app.del_flag='0'  and app.professional_affiliation = 'main'
        <if test="plant != null "> and plant = #{plant} </if>
        order by document_number ,id
    </select>
    <select id="selectUnMatchPlateSubPlan" parameterType="com.aps.core.domain.ApsPlate.ApsPlatePlan" resultMap="ApsPlatePlanResult">
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateProcessStatMapper.xml
@@ -133,8 +133,10 @@
    </delete>
    <select id="queryTempStat" resultMap="ApsPlateProcessStatResult">
        with    dt as ( select doc_no,require_date   from aps_plate_require_date where del_flag=0),
                rd as ( select doc_no,plan_end_day   from aps_plate_standard_require_order_end_day where del_flag=0)
        select row_number() over (partition by rt.work_order_no order by rt.process_number desc ) as num,
                rt.work_order_no,
               rt.work_order_no,
               rt.process_name,
               cast(rt.process_number as numeric(18, 2))                                          as route_process_number,
               cast(pl.process_number as numeric(18, 2))                                          as current_process_number,
@@ -144,13 +146,16 @@
               rt.process_plan_start_day,
               rt.process_plan_end_day,
               pl.plan_end_day,
                COALESCE(rd.plan_end_day,pl.plan_end_day)                                         as order_plan_end_day
               rd.plan_end_day as modify_day,
               dt.require_date,
               COALESCE(rd.plan_end_day, COALESCE(dt.require_date, pl.plan_end_day)  )            as order_plan_end_day
        from aps_plate_plan as pl
                 left join aps_process_route as rt on pl.document_number = rt.work_order_no
                 left join aps_plate_standard_require_order_end_day as rd on pl.document_number = rd.doc_no  and rd.del_flag =0
        where pl.document_number is not null and rt.work_order_no is not null and
              (pl.plan_end_day is not null or rd.plan_end_day is not null )
        order by rt.work_order_no asc, rt.process_number desc
                 left join rd on    pl.document_number = rd.doc_no
                 left join dt on    pl.document_number=dt.doc_no
        where pl.document_number is not null
          and rt.work_order_no is not null
        order by rt.work_order_no, rt.process_number desc
    </select>
    <update id="removeOtherStat" parameterType="String">
        delete from aps_plate_process_stat where batch_number != #{batchNumber}
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateRequireDateMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
<?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="com.aps.core.mapper.ApsPlateRequireDateMapper">
    <resultMap id="BaseResultMap" type="com.aps.core.domain.ApsPlate.ApsPlateRequireDate">
            <id property="id" column="id" />
            <result property="planId" column="plan_id" />
            <result property="docNo" column="doc_no" />
            <result property="requireDate" column="require_date" />
            <result property="delFlag" column="del_flag" />
            <result property="createBy" column="create_by" />
            <result property="createTime" column="create_time" />
            <result property="updateBy" column="update_by" />
            <result property="updateTime" column="update_time" />
    </resultMap>
    <sql id="Base_Column_List">
        id,plan_id,doc_no,require_date,del_flag,create_by,
        create_time,update_by,update_time
    </sql>
    <update id="deleteByDocNoList" parameterType="String">
        update aps_plate_require_date
        set del_flag = 1, update_time = now(),update_by=#{updateBy}
        where doc_no in
        <foreach collection="list" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
    </update>
    <insert id="batchInsert" parameterType="com.aps.core.domain.ApsPlate.ApsPlateRequireDate">
        insert into aps_plate_require_date
            (id,plan_id,doc_no,require_date,del_flag,create_by,create_time)
        values
        <foreach item="item" collection="list" separator="," index="index">
            (#{item.id},#{item.planId},#{item.docNo},#{item.requireDate},0,#{item.createBy},now())
        </foreach>
    </insert>
</mapper>
aps-modules/aps-core/src/main/resources/mapper/core/ApsPlate/ApsPlateStandardRequireOrderEndDayMapper.xml
@@ -56,7 +56,7 @@
        from a
    </insert>
    <update id="batchRemove" parameterType="Long">
    <update id="batchRemoveByPlanId" parameterType="Long">
        update aps_plate_standard_require_order_end_day
        set del_flag=1
        where plan_id in
@@ -64,5 +64,10 @@
            #{planId}
        </foreach>
    </update>
    <update id="batchRemove" >
    update aps_plate_standard_require_order_end_day
        set del_flag=1
    where del_flag=0
    </update>
</mapper>
aps-modules/aps-core/src/main/resources/mapper/core/ApsWeldSeamStatisticsV2Mapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,247 @@
<?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="com.aps.core.mapper.mainPlan.ApsWeldSeamStatisticsV2Mapper">
    <resultMap type="com.aps.core.domain.mainPlan.ApsWeldSeamStatisticsV2" id="ApsWeldSeamStatisticsV2Result">
        <id property="id" column="id"/>
        <result property="year" column="year"/>
        <result property="month" column="month"/>
        <result property="productionBase" column="production_base"/>
        <result property="pipingOrderRequirement" column="piping_order_requirement"/>
        <result property="gasOrderRequirement" column="gas_order_requirement"/>
        <result property="pipingPredictionRequirement" column="piping_prediction_requirement"/>
        <result property="gasPredictionRequirement" column="gas_prediction_requirement"/>
        <result property="reserveEmergencyOrderOutput" column="reserve_emergency_order_output"/>
        <result property="total" column="total"/>
        <result property="days" column="days"/>
        <result property="requirementDayWeldSeam" column="requirement_day_weld_seam"/>
        <result property="productionDayWeldSeam" column="production_day_weld_seam"/>
        <result property="isSatisfy" column="is_satisfy"/>
        <result property="createBy" column="create_by"/>
        <result property="createTime" column="create_time"/>
        <result property="updateBy" column="update_by"/>
        <result property="updateTime" column="update_time"/>
    </resultMap>
    <sql id="selectApsWeldSeamStatisticsV2Vo">
        select id, year, month, production_base, piping_order_requirement, gas_order_requirement,
               piping_prediction_requirement, gas_prediction_requirement, reserve_emergency_order_output,
               total, days, requirement_day_weld_seam, production_day_weld_seam, is_satisfy,
               create_by, create_time, update_by, update_time
        from aps_weld_seam_statistics_v2
    </sql>
    <select id="selectApsWeldSeamStatisticsV2ById" parameterType="String" resultMap="ApsWeldSeamStatisticsV2Result">
        <include refid="selectApsWeldSeamStatisticsV2Vo"/>
        where id = #{id}
    </select>
    <select id="selectApsWeldSeamStatisticsV2List" parameterType="com.aps.core.domain.mainPlan.ApsWeldSeamStatisticsV2" resultMap="ApsWeldSeamStatisticsV2Result">
        <include refid="selectApsWeldSeamStatisticsV2Vo"/>
        <where>
            <if test="params.beginYear != null and params.beginYear != '' and params.endYear != null and params.endYear != ''"> and year between #{params.beginYear} and #{params.endYear}</if>
            <if test="params.beginMonth != null and params.beginMonth != '' and params.endMonth != null and params.endMonth != ''"> and month between #{params.beginMonth} and #{params.endMonth}</if>
            <if test="productionBase != null and productionBase != ''"> and production_base like '%'|| #{productionBase}|| '%'</if>
        </where>
        order by year, month, production_base
    </select>
    <insert id="insertApsWeldSeamStatisticsV2" parameterType="com.aps.core.domain.mainPlan.ApsWeldSeamStatisticsV2">
        insert into aps_weld_seam_statistics_v2
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">id,</if>
            <if test="year != null">year,</if>
            <if test="month != null">month,</if>
            <if test="productionBase != null">production_base,</if>
            <if test="pipingOrderRequirement != null">piping_order_requirement,</if>
            <if test="gasOrderRequirement != null">gas_order_requirement,</if>
            <if test="pipingPredictionRequirement != null">piping_prediction_requirement,</if>
            <if test="gasPredictionRequirement != null">gas_prediction_requirement,</if>
            <if test="reserveEmergencyOrderOutput != null">reserve_emergency_order_output,</if>
            <if test="total != null">total,</if>
            <if test="days != null">days,</if>
            <if test="requirementDayWeldSeam != null">requirement_day_weld_seam,</if>
            <if test="productionDayWeldSeam != null">production_day_weld_seam,</if>
            <if test="isSatisfy != null">is_satisfy,</if>
            <if test="createBy != null">create_by,</if>
            <if test="createTime != null">create_time,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="updateTime != null">update_time,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id},</if>
            <if test="year != null">#{year},</if>
            <if test="month != null">#{month},</if>
            <if test="productionBase != null">#{productionBase},</if>
            <if test="pipingOrderRequirement != null">#{pipingOrderRequirement},</if>
            <if test="gasOrderRequirement != null">#{gasOrderRequirement},</if>
            <if test="pipingPredictionRequirement != null">#{pipingPredictionRequirement},</if>
            <if test="gasPredictionRequirement != null">#{gasPredictionRequirement},</if>
            <if test="reserveEmergencyOrderOutput != null">#{reserveEmergencyOrderOutput},</if>
            <if test="total != null">#{total},</if>
            <if test="days != null">#{days},</if>
            <if test="requirementDayWeldSeam != null">#{requirementDayWeldSeam},</if>
            <if test="productionDayWeldSeam != null">#{productionDayWeldSeam},</if>
            <if test="isSatisfy != null">#{isSatisfy},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
         </trim>
    </insert>
    <update id="updateApsWeldSeamStatisticsV2" parameterType="com.aps.core.domain.mainPlan.ApsWeldSeamStatisticsV2">
        update aps_weld_seam_statistics_v2
        <trim prefix="SET" suffixOverrides=",">
            <if test="year != null">year = #{year},</if>
            <if test="month != null">month = #{month},</if>
            <if test="productionBase != null">production_base = #{productionBase},</if>
            <if test="pipingOrderRequirement != null">piping_order_requirement = #{pipingOrderRequirement},</if>
            <if test="gasOrderRequirement != null">gas_order_requirement = #{gasOrderRequirement},</if>
            <if test="pipingPredictionRequirement != null">piping_prediction_requirement = #{pipingPredictionRequirement},</if>
            <if test="gasPredictionRequirement != null">gas_prediction_requirement = #{gasPredictionRequirement},</if>
            <if test="reserveEmergencyOrderOutput != null">reserve_emergency_order_output = #{reserveEmergencyOrderOutput},</if>
            <if test="total != null">total = #{total},</if>
            <if test="days != null">days = #{days},</if>
            <if test="requirementDayWeldSeam != null">requirement_day_weld_seam = #{requirementDayWeldSeam},</if>
            <if test="productionDayWeldSeam != null">production_day_weld_seam = #{productionDayWeldSeam},</if>
            <if test="isSatisfy != null">is_satisfy = #{isSatisfy},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteApsWeldSeamStatisticsV2ById" parameterType="String">
        delete from aps_weld_seam_statistics_v2 where id = #{id}
    </delete>
    <delete id="deleteApsWeldSeamStatisticsV2ByIds" parameterType="String">
        delete from aps_weld_seam_statistics_v2 where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
    <update id="truncateTable">
        TRUNCATE TABLE aps_weld_seam_statistics_v2
    </update>
    <insert id="batchInsert" parameterType="java.util.List">
        INSERT INTO aps_weld_seam_statistics_v2 (
            id, year, month, production_base,
            piping_order_requirement, gas_order_requirement,
            piping_prediction_requirement, gas_prediction_requirement,
            reserve_emergency_order_output, total, days,
            requirement_day_weld_seam, production_day_weld_seam,
            is_satisfy, create_by, create_time
        ) VALUES
        <foreach collection="list" item="item" separator=",">
            (
                #{item.id}, #{item.year}, #{item.month}, #{item.productionBase},
                #{item.pipingOrderRequirement}, #{item.gasOrderRequirement},
                #{item.pipingPredictionRequirement}, #{item.gasPredictionRequirement},
                #{item.reserveEmergencyOrderOutput}, #{item.total}, #{item.days},
                #{item.requirementDayWeldSeam}, #{item.productionDayWeldSeam},
                #{item.isSatisfy}, #{item.createBy}, #{item.createTime}
            )
        </foreach>
    </insert>
    <select id="queryWeldSeamStatistics" resultMap="ApsWeldSeamStatisticsV2Result">
        WITH å·¥å•焊缝计算 AS (
            -- è®¡ç®—工单的焊缝数量
            SELECT
                mo.factory as ç”Ÿäº§åŸºåœ°,
                mo.material_code as æ–™å·,
                EXTRACT(YEAR FROM mo.plan_end) as å¹´ä»½,
                EXTRACT(MONTH FROM mo.plan_end) as æœˆä»½,
                mo.quantity * COALESCE(ws.hup_qty, 0) as å·¥å•焊缝数,
                mgm.domain as ä¸“业
            FROM aps_gas_pipeline_mo mo
            LEFT JOIN aps_weld_seam_standard ws ON mo.material_code = ws.item_code AND ws.del_flag = 0
            LEFT JOIN aps_material_product_group_management mgm ON mo.material_code = mgm.material_code
        ),
        é¢„测焊缝计算 AS (
            -- è®¡ç®—预测的焊缝数量
            SELECT
                gp.factory as ç”Ÿäº§åŸºåœ°,
                gp.material_code as æ–™å·,
                EXTRACT(YEAR FROM gp.predict_date) as å¹´ä»½,
                EXTRACT(MONTH FROM gp.predict_date) as æœˆä»½,
                gp.predict_quantity * COALESCE(ws.hup_qty, 0) as é¢„测焊缝数,
                mgm.domain as ä¸“业
            FROM aps_gas_pipeline_prediction gp
            LEFT JOIN aps_weld_seam_standard ws ON gp.material_code = ws.item_code AND ws.del_flag = 0
            LEFT JOIN aps_material_product_group_management mgm ON gp.material_code = mgm.material_code
        ),
        æ±‡æ€»æ•°æ® AS (
            SELECT
                å¹´ä»½,
                æœˆä»½,
                ç”Ÿäº§åŸºåœ°,
                -- ç®¡è·¯è®¢å•需求
                COALESCE(SUM(CASE
                    WHEN ä¸“业 = 'GL' AND ç±»åž‹ = '工单'
                    THEN ç„Šç¼æ•° ELSE 0
                END), 0) as ç®¡è·¯è®¢å•需求,
                -- æ°”柜订单需求
                COALESCE(SUM(CASE
                    WHEN ä¸“业 = 'QG' AND ç±»åž‹ = '工单'
                    THEN ç„Šç¼æ•° ELSE 0
                END), 0) as æ°”柜订单需求,
                -- ç®¡è·¯é¢„测需求
                COALESCE(SUM(CASE
                    WHEN ä¸“业 = 'GL' AND ç±»åž‹ = '预测'
                    THEN ç„Šç¼æ•° ELSE 0
                END), 0) as ç®¡è·¯é¢„测需求,
                -- æ°”柜预测需求
                COALESCE(SUM(CASE
                    WHEN ä¸“业 = 'QG' AND ç±»åž‹ = '预测'
                    THEN ç„Šç¼æ•° ELSE 0
                END), 0) as æ°”柜预测需求
            FROM (
                SELECT
                    å¹´ä»½,
                    æœˆä»½,
                    ç”Ÿäº§åŸºåœ°,
                    å·¥å•焊缝数 as ç„Šç¼æ•°,
                    '工单' as ç±»åž‹,
                    ä¸“业
                FROM å·¥å•焊缝计算
                UNION ALL
                SELECT
                    å¹´ä»½,
                    æœˆä»½,
                    ç”Ÿäº§åŸºåœ°,
                    é¢„测焊缝数 as ç„Šç¼æ•°,
                    '预测' as ç±»åž‹,
                    ä¸“业
                FROM é¢„测焊缝计算
            ) åˆå¹¶æ•°æ®
            GROUP BY å¹´ä»½, æœˆä»½, ç”Ÿäº§åŸºåœ°
        )
        SELECT
            s.年份 as "year",
            s.月份 as "month",
            s.生产基地 as "production_base",
            ROUND(s.管路订单需求, 4) as "piping_order_requirement",
            ROUND(s.气柜订单需求, 4) as "gas_order_requirement",
            ROUND(s.管路预测需求, 4) as "piping_prediction_requirement",
            ROUND(s.气柜预测需求, 4) as "gas_prediction_requirement",
            0 as "reserve_emergency_order_output",
            ROUND(s.管路订单需求 + s.气柜订单需求 + s.管路预测需求 + s.气柜预测需求, 4) as "total",
            0 as "days",
            0 as "requirement_day_weld_seam",
            0 as "production_day_weld_seam",
            '0' as "is_satisfy",
            'system' as "create_by",
            CURRENT_TIMESTAMP as "create_time"
        FROM æ±‡æ€»æ•°æ® s
        ORDER BY s.年份, s.月份, s.生产基地
    </select>
</mapper>