From 0c1d417c2ff873f2d2ef9f0de57c20d0966e2e85 Mon Sep 17 00:00:00 2001 From: liweidong-hj Date: Fri, 19 Dec 2025 18:18:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E8=89=BA=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dashboard/constant/BatchConstant.java | 82 ++++++ .../dashboard/constant/TaskingConstant.java | 5 + .../controller/BsCraftAbilityController.java | 11 + .../controller/BsProcessSetController.java | 78 ++++- .../DsBatchPreservePlanController.java | 68 +++-- .../DsBatchPreserveTaskController.java | 51 +++- .../DsBatchWorkCenterSetController.java | 44 +-- .../DsMainSaltAddQuantityController.java | 31 +- .../controller/DsSimilarPartsController.java | 70 +++++ .../controller/DsSpecialProController.java | 60 ++++ .../controller/DsTaskingController.java | 35 ++- .../dashboard/excel/BsProcessSetExcel.java | 47 +--- .../dashboard/excel/DsSimilarPartsExcel.java | 48 ++-- .../dashboard/excel/DsSpecialProExcel.java | 33 +-- .../mapper/BatchPreservePlanMapper.xml | 43 ++- .../mapper/BatchPreserveTaskMapper.xml | 21 +- .../mapper/BatchWorkCenterSetMapper.xml | 5 +- .../mapper/BsCraftAbilityMapper.java | 1 + .../dashboard/mapper/BsProcessSetMapper.java | 2 + .../dashboard/mapper/BsWorkCenterMapper.java | 2 + .../dashboard/mapper/CraftAbilityMapper.xml | 3 + .../mapper/DsBatchPreservePlanMapper.java | 24 +- .../mapper/DsBatchPreserveTaskMapper.java | 5 +- .../mapper/DsBatchWorkCenterSetMapper.java | 3 +- .../mapper/DsMainSaltAddQuantityMapper.java | 3 +- .../mapper/MainSaltAddQuantityMapper.xml | 12 +- .../dashboard/mapper/ProcessSetMapper.xml | 5 +- .../dashboard/mapper/ReworkProcessMapper.xml | 2 +- .../dashboard/mapper/SpecialProMapper.xml | 3 + .../desk/dashboard/mapper/TaskBillMapper.xml | 2 + .../desk/dashboard/mapper/TaskingMapper.xml | 3 +- .../dashboard/mapper/WorkCenterMapper.xml | 5 + .../pojo/dto/DsBatchPreservePlanDTO.java | 10 + .../pojo/dto/DsBatchPreserveTaskDTO.java | 8 + .../pojo/dto/DsMainSaltAddQuantityDTO.java | 4 + .../pojo/entity/BsProcessSetEntity.java | 16 +- .../entity/DsBatchPreservePlanEntity.java | 44 ++- .../entity/DsBatchPreserveTaskEntity.java | 23 +- .../entity/DsBatchWorkCenterSetEntity.java | 6 +- .../entity/DsMainSaltAddQuantityEntity.java | 4 +- .../pojo/entity/DsSpecialProEntity.java | 27 +- .../pojo/entity/DsTaskBillEntity.java | 12 + .../pojo/entity/PrReworkProcessEntity.java | 12 +- .../pojo/vo/DsBatchPreservePlanVO.java | 13 + .../pojo/vo/DsBatchPreserveTaskVO.java | 31 ++ .../pojo/vo/DsBatchWorkCenterSetVO.java | 13 + .../pojo/vo/DsMainSaltAddQuantityVO.java | 19 ++ .../dashboard/pojo/vo/DsPartSynthesisVO.java | 5 + .../dashboard/pojo/vo/DsSimilarPartsVO.java | 4 +- .../service/IBsCraftAbilityService.java | 5 + .../service/IBsProcessSetService.java | 13 + .../service/IBsWorkCenterService.java | 7 + .../service/IDsBatchPreservePlanService.java | 48 ++++ .../service/IDsBatchPreserveTaskService.java | 15 + .../service/IDsBatchWorkCenterSetService.java | 6 + .../IDsMainSaltAddQuantityService.java | 7 + .../service/IDsSimilarPartsService.java | 6 + .../service/IDsSpecialProService.java | 6 + .../dashboard/service/IDsTaskingService.java | 14 +- .../impl/BsCraftAbilityServiceImpl.java | 11 + .../service/impl/BsProcessSetServiceImpl.java | 38 ++- .../service/impl/BsWorkCenterServiceImpl.java | 5 + .../impl/DsBatchPreservePlanServiceImpl.java | 157 ++++++++++- .../impl/DsBatchPreserveTaskServiceImpl.java | 92 +++++- .../impl/DsBatchWorkCenterSetServiceImpl.java | 76 ++++- .../DsMainSaltAddQuantityServiceImpl.java | 38 ++- .../impl/DsSimilarPartsServiceImpl.java | 37 +++ .../service/impl/DsSpecialProServiceImpl.java | 56 ++++ .../service/impl/DsTaskingServiceImpl.java | 36 ++- .../desk/dashboard/utils/DateUtils.java | 266 ++++++++++++++++++ .../Excel/QA/ImportTemplate-CycleTestItem.xls | Bin 25600 -> 25600 bytes .../resources/Excel/QA/工序导入模板.xls | Bin 0 -> 19456 bytes .../QA/工艺特殊过程项导入模板.xls | Bin 0 -> 20480 bytes .../Excel/QA/相似零件导入模板.xls | Bin 0 -> 8963 bytes 74 files changed, 1758 insertions(+), 239 deletions(-) create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/constant/BatchConstant.java create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/utils/DateUtils.java create mode 100644 blade-service/blade-desk/src/main/resources/Excel/QA/工序导入模板.xls create mode 100644 blade-service/blade-desk/src/main/resources/Excel/QA/工艺特殊过程项导入模板.xls create mode 100644 blade-service/blade-desk/src/main/resources/Excel/QA/相似零件导入模板.xls diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/constant/BatchConstant.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/constant/BatchConstant.java new file mode 100644 index 000000000..2d9a9f67e --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/constant/BatchConstant.java @@ -0,0 +1,82 @@ +package org.springblade.desk.dashboard.constant; + +/** + * @author: liweidong + * @create: 2025-11-13 + */ +public interface BatchConstant { + /** 槽液类型*/ + /** + * 计划类 + */ + Integer PLAN = 1; + /** + * 累计类 + */ + Integer ACCUMULATE = 2; + /** + * 定期类-槽液 + */ + Integer REGULAR_BATH = 3; + /** + * 定期类-设备 + */ + Integer REGULAR_DEVICE = 4; + + + + /** 槽液检查任务状态*/ + /** + * 待维护 + */ + Integer TO_BE_MAINTAINED = 1; + + /** + * 待审核 + */ + Integer PENDING_REVIEW = 2; + + /** + * 审核通过 + */ + Integer AUDIT_PASS = 3; + + /** + * 审核不通过 + */ + Integer AUDIT_NO_PASS = 4; + + /** + * 过期未维护 + */ + Integer PAST_UNTOUCHED = 5; + + + + /** 槽液审批状态*/ + /** + * 待审核 + */ + Integer STATUS_NEW = 1; + /** + * 主任审核通过 + */ + Integer DIRECTOR_STATUS_RECEIPT = 2; + + /** + * 厂长审核通过 + */ + Integer FACTORY_STATUS_RECEIPT = 3; + + /** + * 主任审核未通过 + */ + Integer DIRECTOR_STATUS_ASSIGN = 4 ; + + /** + * 厂长审核未通过 + */ + Integer FACTORY_STATUS_ASSIGN = 5 ; + + +} diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/constant/TaskingConstant.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/constant/TaskingConstant.java index c89c8c6d8..5b1807b53 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/constant/TaskingConstant.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/constant/TaskingConstant.java @@ -94,6 +94,11 @@ public interface TaskingConstant { */ String REWORK_PLAN_EDIT = "6"; + /** + * 维护任务 + */ + String MAINTAIN_TASK = "7"; + /** 零件工艺状态*/ /** diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/BsCraftAbilityController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/BsCraftAbilityController.java index ee86ee187..f9bdd25a5 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/BsCraftAbilityController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/BsCraftAbilityController.java @@ -158,4 +158,15 @@ public class BsCraftAbilityController extends BladeController { ExcelUtil.export(response, "工艺能力表数据" + DateUtil.time(), "工艺能力表数据表", list, BsCraftAbilityExcel.class); } + /** + * 获取所有工艺能力 + */ + @GetMapping("/getCraftAbilityList") + @ApiOperationSupport(order = 2) + @Operation(summary = "获取所有工艺能力", description = "传入bsCraftAbility") + public R> getCraftAbilityList() { + List craftAbilityList = bsCraftAbilityService.getCraftAbilityList(); + return R.data(craftAbilityList); + } + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/BsProcessSetController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/BsProcessSetController.java index ac56ce069..4f6ff504c 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/BsProcessSetController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/BsProcessSetController.java @@ -35,6 +35,7 @@ import jakarta.annotation.Resource; import lombok.AllArgsConstructor; import jakarta.validation.Valid; +import org.apache.commons.lang3.StringUtils; import org.springblade.core.secure.BladeUser; import org.springblade.core.secure.annotation.IsAdmin; import org.springblade.core.mp.support.Condition; @@ -44,15 +45,15 @@ import org.springblade.core.tool.utils.Func; import org.springblade.desk.dashboard.pojo.dto.BsTeamSetDTO; import org.springblade.desk.dashboard.pojo.entity.BsProcessSetEntity; import org.springblade.desk.dashboard.pojo.entity.BsTeamSetEntity; -import org.springblade.desk.dashboard.pojo.vo.BsProcessSetVO; +import org.springblade.desk.dashboard.pojo.vo.*; import org.springblade.desk.dashboard.excel.BsProcessSetExcel; -import org.springblade.desk.dashboard.pojo.vo.BsProcessTeamVO; -import org.springblade.desk.dashboard.pojo.vo.BsTeamProcessVO; -import org.springblade.desk.dashboard.pojo.vo.BsTeamSetEntityVO; import org.springblade.desk.dashboard.service.IBsProcessSetService; import org.springblade.desk.dashboard.service.IBsProcessTeamService; import org.springblade.desk.dashboard.service.IBsTeamSetService; import org.springblade.desk.dashboard.wrapper.BsProcessSetWrapper; +import org.springblade.desk.quality.util.ExcelExtUtil; +import org.springframework.http.ResponseEntity; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import org.springblade.core.boot.ctrl.BladeController; @@ -62,9 +63,7 @@ import org.springblade.core.excel.util.ExcelUtil; import java.util.Map; import java.util.List; import jakarta.servlet.http.HttpServletResponse; - - - +import org.springframework.web.multipart.MultipartFile; /** @@ -215,5 +214,70 @@ public class BsProcessSetController extends BladeController { } + /** + * + * 导入模版 + */ + @GetMapping("/import-template") + @ApiOperationSupport(order = 9) + @Operation(summary = "下载Excel模板", description = "") + public ResponseEntity importTemplate() { + return ExcelExtUtil.downloadXlsTemplate( + "Excel/QA/工序导入模板.xls", + "导入模版-工序导入模板.xls"); + } + + + /** + * 导入Excel(简洁版) + */ + @PostMapping("/import-excel-processSet") + @ApiOperationSupport(order = 10) + @Transactional(rollbackFor = Exception.class) + public R importExcelProcessSet(@RequestParam("file") MultipartFile file) { + try { + // 1. 快速文件校验 + if (file.isEmpty() || !isValidExcelFile(file)) { + return R.fail("请上传有效的Excel文件"); + } + + // 2. 读取数据 + List list = ExcelUtil.read(file, 0, 1, BsProcessSetExcel.class); + + return R.status(bsProcessSetService.importExcelProcessSet(list)); + + } catch (Exception e) { + return R.fail("导入失败: " + e.getLocalizedMessage()); + } + } + + /** + * 快速文件校验 + */ + private boolean isValidExcelFile(MultipartFile file) { + if (file == null || file.isEmpty()) { + return false; + } + + String fileName = file.getOriginalFilename(); + if (StringUtils.isBlank(fileName)) { + return false; + } + + String lowerName = fileName.toLowerCase(); + return lowerName.endsWith(".xls") || lowerName.endsWith(".xlsx"); + } + + /** + * 获取所有工序 + */ + @GetMapping("/getProcessSetList") + @ApiOperationSupport(order = 3) + @Operation(summary = "获取所有工序", description = "传入bsProcessSet") + public R> getProcessSetList() { + List processSetList = bsProcessSetService.getProcessSetList(); + return R.data(processSetList); + } + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsBatchPreservePlanController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsBatchPreservePlanController.java index d8df9c270..00124b67f 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsBatchPreservePlanController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsBatchPreservePlanController.java @@ -38,6 +38,7 @@ import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; +import org.springblade.desk.dashboard.pojo.dto.DsBatchPreservePlanDTO; import org.springframework.web.bind.annotation.*; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -78,22 +79,12 @@ public class DsBatchPreservePlanController extends BladeController { DsBatchPreservePlanEntity detail = dsBatchPreservePlanService.getOne(Condition.getQueryWrapper(dsBatchPreservePlan)); return R.data(DsBatchPreservePlanWrapper.build().entityVO(detail)); } - /** - * 槽液维护计划表 分页 - */ - @GetMapping("/list") - @ApiOperationSupport(order = 2) - @Operation(summary = "分页", description = "传入dsBatchPreservePlan") - public R> list(@Parameter(hidden = true) @RequestParam Map dsBatchPreservePlan, Query query) { - IPage pages = dsBatchPreservePlanService.page(Condition.getPage(query), Condition.getQueryWrapper(dsBatchPreservePlan, DsBatchPreservePlanEntity.class)); - return R.data(DsBatchPreservePlanWrapper.build().pageVO(pages)); - } /** * 槽液维护计划表 自定义分页 */ - @GetMapping("/page") - @ApiOperationSupport(order = 3) + @GetMapping("/list") + @ApiOperationSupport(order = 2) @Operation(summary = "分页", description = "传入dsBatchPreservePlan") public R> page(DsBatchPreservePlanVO dsBatchPreservePlan, Query query) { IPage pages = dsBatchPreservePlanService.selectDsBatchPreservePlanPage(Condition.getPage(query), dsBatchPreservePlan); @@ -104,7 +95,7 @@ public class DsBatchPreservePlanController extends BladeController { * 槽液维护计划表 新增 */ @PostMapping("/save") - @ApiOperationSupport(order = 4) + @ApiOperationSupport(order = 3) @Operation(summary = "新增", description = "传入dsBatchPreservePlan") public R save(@Valid @RequestBody DsBatchPreservePlanEntity dsBatchPreservePlan) { return R.status(dsBatchPreservePlanService.save(dsBatchPreservePlan)); @@ -114,7 +105,7 @@ public class DsBatchPreservePlanController extends BladeController { * 槽液维护计划表 修改 */ @PostMapping("/update") - @ApiOperationSupport(order = 5) + @ApiOperationSupport(order = 4) @Operation(summary = "修改", description = "传入dsBatchPreservePlan") public R update(@Valid @RequestBody DsBatchPreservePlanEntity dsBatchPreservePlan) { return R.status(dsBatchPreservePlanService.updateById(dsBatchPreservePlan)); @@ -124,17 +115,17 @@ public class DsBatchPreservePlanController extends BladeController { * 槽液维护计划表 新增或修改 */ @PostMapping("/submit") - @ApiOperationSupport(order = 6) + @ApiOperationSupport(order = 5) @Operation(summary = "新增或修改", description = "传入dsBatchPreservePlan") - public R submit(@Valid @RequestBody DsBatchPreservePlanEntity dsBatchPreservePlan) { - return R.status(dsBatchPreservePlanService.saveOrUpdate(dsBatchPreservePlan)); + public R submit(@Valid @RequestBody List dsBatchPreservePlan) { + return R.status(dsBatchPreservePlanService.saveOrUpdateBatchPreservePlan(dsBatchPreservePlan)); } /** * 槽液维护计划表 删除 */ @PostMapping("/remove") - @ApiOperationSupport(order = 7) + @ApiOperationSupport(order = 6) @Operation(summary = "逻辑删除", description = "传入ids") public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) { return R.status(dsBatchPreservePlanService.deleteLogic(Func.toLongList(ids))); @@ -146,7 +137,7 @@ public class DsBatchPreservePlanController extends BladeController { */ @IsAdmin @GetMapping("/export-dsBatchPreservePlan") - @ApiOperationSupport(order = 9) + @ApiOperationSupport(order = 7) @Operation(summary = "导出数据", description = "传入dsBatchPreservePlan") public void exportDsBatchPreservePlan(@Parameter(hidden = true) @RequestParam Map dsBatchPreservePlan, BladeUser bladeUser, HttpServletResponse response) { QueryWrapper queryWrapper = Condition.getQueryWrapper(dsBatchPreservePlan, DsBatchPreservePlanEntity.class); @@ -158,4 +149,43 @@ public class DsBatchPreservePlanController extends BladeController { ExcelUtil.export(response, "槽液维护计划表数据" + DateUtil.time(), "槽液维护计划表数据表", list, DsBatchPreservePlanExcel.class); } + + /** + * 主任审批 + */ + @PostMapping("/directorApproval") + @ApiOperationSupport(order = 8) + @Operation(summary = "审批", description = "传入dsBatchPreservePlan") + public R directorApproval( @RequestBody DsBatchPreservePlanDTO dsBatchPreservePlan) { + return R.status(dsBatchPreservePlanService.directorApproval(dsBatchPreservePlan)); + } + + /** + * 厂长审批 + */ + @PostMapping("/factoryApproval") + @ApiOperationSupport(order = 8) + @Operation(summary = "审批", description = "传入dsBatchPreservePlan") + public R factoryApproval( @RequestBody DsBatchPreservePlanDTO dsBatchPreservePlan) { + return R.status(dsBatchPreservePlanService.factoryApproval(dsBatchPreservePlan)); + } + + /** + * 模拟定时任务 + */ + @GetMapping("/test") + @ApiOperationSupport(order = 8) + @Operation(summary = "审批", description = "") + public R factoryApproval() { + //todo 新增时没有向任务表中增加任务状态 是否更改 + //todo 创建槽液精细化-计划类-任务发起任务定时器运行... + dsBatchPreservePlanService.createPlanClassTask(); + //todo 创建槽液精细化-定期类-任务发起任务定时器运行 + //todo 存在问题 查询3和4 没有时间限制 每天查询 每天新增 + dsBatchPreservePlanService.createPeriodicalClassTask(); + //todo 创建槽液精细化-累计类-任务发起任务定时器运行 + dsBatchPreservePlanService.createAccumulateClassTask(); + return R.status(true); + } + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsBatchPreserveTaskController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsBatchPreserveTaskController.java index 1ac6f49ba..04a7d23d3 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsBatchPreserveTaskController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsBatchPreserveTaskController.java @@ -25,6 +25,8 @@ */ package org.springblade.desk.dashboard.controller; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -38,6 +40,7 @@ import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; +import org.springblade.desk.dashboard.pojo.dto.DsBatchPreserveTaskDTO; import org.springframework.web.bind.annotation.*; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -50,6 +53,8 @@ import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.excel.util.ExcelUtil; import org.springblade.core.tool.constant.BladeConstant; + +import java.math.BigDecimal; import java.util.Map; import java.util.List; import jakarta.servlet.http.HttpServletResponse; @@ -78,21 +83,21 @@ public class DsBatchPreserveTaskController extends BladeController { DsBatchPreserveTaskEntity detail = dsBatchPreserveTaskService.getOne(Condition.getQueryWrapper(dsBatchPreserveTask)); return R.data(DsBatchPreserveTaskWrapper.build().entityVO(detail)); } - /** - * 槽液维护任务表 分页 - */ - @GetMapping("/list") - @ApiOperationSupport(order = 2) - @Operation(summary = "分页", description = "传入dsBatchPreserveTask") - public R> list(@Parameter(hidden = true) @RequestParam Map dsBatchPreserveTask, Query query) { - IPage pages = dsBatchPreserveTaskService.page(Condition.getPage(query), Condition.getQueryWrapper(dsBatchPreserveTask, DsBatchPreserveTaskEntity.class)); - return R.data(DsBatchPreserveTaskWrapper.build().pageVO(pages)); - } +// /** +// * 槽液维护任务表 分页 +// */ +// @GetMapping("/list") +// @ApiOperationSupport(order = 2) +// @Operation(summary = "分页", description = "传入dsBatchPreserveTask") +// public R> list(@Parameter(hidden = true) @RequestParam Map dsBatchPreserveTask, Query query) { +// IPage pages = dsBatchPreserveTaskService.page(Condition.getPage(query), Condition.getQueryWrapper(dsBatchPreserveTask, DsBatchPreserveTaskEntity.class)); +// return R.data(DsBatchPreserveTaskWrapper.build().pageVO(pages)); +// } /** * 槽液维护任务表 自定义分页 */ - @GetMapping("/page") + @GetMapping("/list") @ApiOperationSupport(order = 3) @Operation(summary = "分页", description = "传入dsBatchPreserveTask") public R> page(DsBatchPreserveTaskVO dsBatchPreserveTask, Query query) { @@ -158,4 +163,28 @@ public class DsBatchPreserveTaskController extends BladeController { ExcelUtil.export(response, "槽液维护任务表数据" + DateUtil.time(), "槽液维护任务表数据表", list, DsBatchPreserveTaskExcel.class); } + + /** + * 槽液维护任务表 批量维护 + */ + @PostMapping("/batchMaintain") + @ApiOperationSupport(order = 10) + @Operation(summary = "批量维护", description = "传入dsBatchPreserveTask") + public R batchMaintain(@Valid @RequestBody List dsBatchPreserveTaskEntityList) { + + return R.status(dsBatchPreserveTaskService.batchMaintain(dsBatchPreserveTaskEntityList)); + } + + + /** + * 槽液维护任务表 批量审批 + */ + @PostMapping("/batchApproval") + @ApiOperationSupport(order = 10) + @Operation(summary = "批量审批", description = "传入dsBatchPreserveTask") + public R batchApproval(@Valid @RequestBody List dsBatchPreserveTaskEntityList) { + + return R.status(dsBatchPreserveTaskService.batchApproval(dsBatchPreserveTaskEntityList)); + } + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsBatchWorkCenterSetController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsBatchWorkCenterSetController.java index 19d93040c..f2229a661 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsBatchWorkCenterSetController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsBatchWorkCenterSetController.java @@ -78,21 +78,21 @@ public class DsBatchWorkCenterSetController extends BladeController { DsBatchWorkCenterSetEntity detail = dsBatchWorkCenterSetService.getOne(Condition.getQueryWrapper(dsBatchWorkCenterSet)); return R.data(DsBatchWorkCenterSetWrapper.build().entityVO(detail)); } - /** - * 槽液作业中心配置 分页 - */ - @GetMapping("/list") - @ApiOperationSupport(order = 2) - @Operation(summary = "分页", description = "传入dsBatchWorkCenterSet") - public R> list(@Parameter(hidden = true) @RequestParam Map dsBatchWorkCenterSet, Query query) { - IPage pages = dsBatchWorkCenterSetService.page(Condition.getPage(query), Condition.getQueryWrapper(dsBatchWorkCenterSet, DsBatchWorkCenterSetEntity.class)); - return R.data(DsBatchWorkCenterSetWrapper.build().pageVO(pages)); - } +// /** +// * 槽液作业中心配置 分页 +// */ +// @GetMapping("/list") +// @ApiOperationSupport(order = 2) +// @Operation(summary = "分页", description = "传入dsBatchWorkCenterSet") +// public R> list(@Parameter(hidden = true) @RequestParam Map dsBatchWorkCenterSet, Query query) { +// IPage pages = dsBatchWorkCenterSetService.page(Condition.getPage(query), Condition.getQueryWrapper(dsBatchWorkCenterSet, DsBatchWorkCenterSetEntity.class)); +// return R.data(DsBatchWorkCenterSetWrapper.build().pageVO(pages)); +// } /** * 槽液作业中心配置 自定义分页 */ - @GetMapping("/page") + @GetMapping("/list") @ApiOperationSupport(order = 3) @Operation(summary = "分页", description = "传入dsBatchWorkCenterSet") public R> page(DsBatchWorkCenterSetVO dsBatchWorkCenterSet, Query query) { @@ -100,26 +100,6 @@ public class DsBatchWorkCenterSetController extends BladeController { return R.data(pages); } - /** - * 槽液作业中心配置 新增 - */ - @PostMapping("/save") - @ApiOperationSupport(order = 4) - @Operation(summary = "新增", description = "传入dsBatchWorkCenterSet") - public R save(@Valid @RequestBody DsBatchWorkCenterSetEntity dsBatchWorkCenterSet) { - return R.status(dsBatchWorkCenterSetService.save(dsBatchWorkCenterSet)); - } - - /** - * 槽液作业中心配置 修改 - */ - @PostMapping("/update") - @ApiOperationSupport(order = 5) - @Operation(summary = "修改", description = "传入dsBatchWorkCenterSet") - public R update(@Valid @RequestBody DsBatchWorkCenterSetEntity dsBatchWorkCenterSet) { - return R.status(dsBatchWorkCenterSetService.updateById(dsBatchWorkCenterSet)); - } - /** * 槽液作业中心配置 新增或修改 */ @@ -127,7 +107,7 @@ public class DsBatchWorkCenterSetController extends BladeController { @ApiOperationSupport(order = 6) @Operation(summary = "新增或修改", description = "传入dsBatchWorkCenterSet") public R submit(@Valid @RequestBody DsBatchWorkCenterSetEntity dsBatchWorkCenterSet) { - return R.status(dsBatchWorkCenterSetService.saveOrUpdate(dsBatchWorkCenterSet)); + return R.status(dsBatchWorkCenterSetService.saveBatchWorkCenterSet(dsBatchWorkCenterSet)); } /** diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsMainSaltAddQuantityController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsMainSaltAddQuantityController.java index f0dfee23f..d5f77877d 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsMainSaltAddQuantityController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsMainSaltAddQuantityController.java @@ -38,6 +38,8 @@ import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; +import org.springblade.desk.dashboard.pojo.dto.DsMainSaltAddQuantityDTO; +import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -78,21 +80,21 @@ public class DsMainSaltAddQuantityController extends BladeController { DsMainSaltAddQuantityEntity detail = dsMainSaltAddQuantityService.getOne(Condition.getQueryWrapper(dsMainSaltAddQuantity)); return R.data(DsMainSaltAddQuantityWrapper.build().entityVO(detail)); } - /** - * 主盐添加量表 分页 - */ - @GetMapping("/list") - @ApiOperationSupport(order = 2) - @Operation(summary = "分页", description = "传入dsMainSaltAddQuantity") - public R> list(@Parameter(hidden = true) @RequestParam Map dsMainSaltAddQuantity, Query query) { - IPage pages = dsMainSaltAddQuantityService.page(Condition.getPage(query), Condition.getQueryWrapper(dsMainSaltAddQuantity, DsMainSaltAddQuantityEntity.class)); - return R.data(DsMainSaltAddQuantityWrapper.build().pageVO(pages)); - } +// /** +// * 主盐添加量表 分页 +// */ +// @GetMapping("/list") +// @ApiOperationSupport(order = 2) +// @Operation(summary = "分页", description = "传入dsMainSaltAddQuantity") +// public R> list(@Parameter(hidden = true) @RequestParam Map dsMainSaltAddQuantity, Query query) { +// IPage pages = dsMainSaltAddQuantityService.page(Condition.getPage(query), Condition.getQueryWrapper(dsMainSaltAddQuantity, DsMainSaltAddQuantityEntity.class)); +// return R.data(DsMainSaltAddQuantityWrapper.build().pageVO(pages)); +// } /** * 主盐添加量表 自定义分页 */ - @GetMapping("/page") + @GetMapping("/list") @ApiOperationSupport(order = 3) @Operation(summary = "分页", description = "传入dsMainSaltAddQuantity") public R> page(DsMainSaltAddQuantityVO dsMainSaltAddQuantity, Query query) { @@ -126,8 +128,11 @@ public class DsMainSaltAddQuantityController extends BladeController { @PostMapping("/submit") @ApiOperationSupport(order = 6) @Operation(summary = "新增或修改", description = "传入dsMainSaltAddQuantity") - public R submit(@Valid @RequestBody DsMainSaltAddQuantityEntity dsMainSaltAddQuantity) { - return R.status(dsMainSaltAddQuantityService.saveOrUpdate(dsMainSaltAddQuantity)); + public R submit(@Valid @RequestBody List mainSaltAddQuantityList) { + if(CollectionUtils.isEmpty(mainSaltAddQuantityList)){ + return R.fail("数据为空"); + } + return R.status(dsMainSaltAddQuantityService.saveOrUpdateMainSaltAddQuantity(mainSaltAddQuantityList)); } /** diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsSimilarPartsController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsSimilarPartsController.java index 26c1ba3b4..e8cff7791 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsSimilarPartsController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsSimilarPartsController.java @@ -32,12 +32,22 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import lombok.AllArgsConstructor; import jakarta.validation.Valid; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springblade.core.log.exception.ServiceException; import org.springblade.core.secure.BladeUser; import org.springblade.core.secure.annotation.IsAdmin; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; +import org.springblade.desk.quality.constant.ExcelConst; +import org.springblade.desk.quality.pojo.entity.CycleTestItem; +import org.springblade.desk.quality.util.ExcelExtUtil; +import org.springframework.core.io.Resource; +import org.springframework.http.ResponseEntity; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -52,7 +62,10 @@ import org.springblade.core.excel.util.ExcelUtil; import org.springblade.core.tool.constant.BladeConstant; import java.util.Map; import java.util.List; +import java.util.stream.Collectors; + import jakarta.servlet.http.HttpServletResponse; +import org.springframework.web.multipart.MultipartFile; /** * 相似零件表 控制器 @@ -60,6 +73,7 @@ import jakarta.servlet.http.HttpServletResponse; * @author BladeX * @since 2025-11-21 */ +@Slf4j @RestController @AllArgsConstructor @RequestMapping("/dsSimilarParts") @@ -158,4 +172,60 @@ public class DsSimilarPartsController extends BladeController { ExcelUtil.export(response, "相似零件表数据" + DateUtil.time(), "相似零件表数据表", list, DsSimilarPartsExcel.class); } + /** + * + * 导入模版 + */ + @GetMapping("/import-template") + @ApiOperationSupport(order = 9) + @Operation(summary = "下载Excel模板", description = "") + public ResponseEntity importTemplate() { + return ExcelExtUtil.downloadXlsTemplate( + "Excel/QA/相似零件导入模板.xls", + "导入模版-相似零件导入模板.xls"); + } + + + /** + * 导入Excel(简洁版) + */ + @PostMapping("/import-excel-simple") + @ApiOperationSupport(order = 10) + @Transactional(rollbackFor = Exception.class) + public R importExcelSimple(@RequestParam("file") MultipartFile file) { + try { + // 1. 快速文件校验 + if (file.isEmpty() || !isValidExcelFile(file)) { + return R.fail("请上传有效的Excel文件"); + } + + // 2. 读取数据 + List list = ExcelUtil.read(file, 0, 1, DsSimilarPartsVO.class); + + return R.status(dsSimilarPartsService.importExcelSimple(list)); + + } catch (Exception e) { + log.error("导入异常", e); + return R.fail("导入失败: " + e.getLocalizedMessage()); + } + } + + /** + * 快速文件校验 + */ + private boolean isValidExcelFile(MultipartFile file) { + if (file == null || file.isEmpty()) { + return false; + } + + String fileName = file.getOriginalFilename(); + if (StringUtils.isBlank(fileName)) { + return false; + } + + String lowerName = fileName.toLowerCase(); + return lowerName.endsWith(".xls") || lowerName.endsWith(".xlsx"); + } + + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsSpecialProController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsSpecialProController.java index 78b96af6b..827fd7ab8 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsSpecialProController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsSpecialProController.java @@ -32,12 +32,18 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import lombok.AllArgsConstructor; import jakarta.validation.Valid; +import org.apache.commons.lang3.StringUtils; import org.springblade.core.secure.BladeUser; import org.springblade.core.secure.annotation.IsAdmin; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; +import org.springblade.desk.dashboard.excel.BsProcessSetExcel; +import org.springblade.desk.quality.util.ExcelExtUtil; +import org.springframework.core.io.Resource; +import org.springframework.http.ResponseEntity; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -53,6 +59,7 @@ import org.springblade.core.tool.constant.BladeConstant; import java.util.Map; import java.util.List; import jakarta.servlet.http.HttpServletResponse; +import org.springframework.web.multipart.MultipartFile; /** * 特殊过程表 控制器 @@ -158,4 +165,57 @@ public class DsSpecialProController extends BladeController { ExcelUtil.export(response, "特殊过程表数据" + DateUtil.time(), "特殊过程表数据表", list, DsSpecialProExcel.class); } + /** + * + * 导入模版 + */ + @GetMapping("/import-template") + @ApiOperationSupport(order = 10) + @Operation(summary = "下载Excel模板", description = "") + public ResponseEntity importTemplate() { + return ExcelExtUtil.downloadXlsTemplate( + "Excel/QA/工艺特殊过程项导入模板.xls", + "导入模版-工艺特殊过程项导入模板.xls"); + } + + /** + * 导入Excel(简洁版) + */ + @PostMapping("/import-excel-SpecialPro") + @ApiOperationSupport(order = 10) + @Transactional(rollbackFor = Exception.class) + public R importExcelSpecialPro(@RequestParam("file") MultipartFile file) { + try { + // 1. 快速文件校验 + if (file.isEmpty() || !isValidExcelFile(file)) { + return R.fail("请上传有效的Excel文件"); + } + + // 2. 读取数据 + List list = ExcelUtil.read(file, 0, 1, DsSpecialProExcel.class); + + return R.status(dsSpecialProService.importExcelSpecialPro(list)); + + } catch (Exception e) { + return R.fail("导入失败: " + e.getLocalizedMessage()); + } + } + + /** + * 快速文件校验 + */ + private boolean isValidExcelFile(MultipartFile file) { + if (file == null || file.isEmpty()) { + return false; + } + + String fileName = file.getOriginalFilename(); + if (StringUtils.isBlank(fileName)) { + return false; + } + + String lowerName = fileName.toLowerCase(); + return lowerName.endsWith(".xls") || lowerName.endsWith(".xlsx"); + } + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsTaskingController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsTaskingController.java index 605ffc5b4..1545210ed 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsTaskingController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/controller/DsTaskingController.java @@ -195,18 +195,22 @@ public class DsTaskingController extends BladeController { @GetMapping("/taskComplete") @ApiOperationSupport(order = 4) @Operation(summary = "任务完成") - public R taskComplete( @RequestParam List taskIds) { - return R.status(dsTaskingService.taskComplete(taskIds)); + public R taskComplete( @RequestParam String taskIds) { + List longs = Func.toLongList(taskIds); + System.out.println(longs); + + return R.status(dsTaskingService.taskComplete(longs)); } /** * 任务接收 */ - @PostMapping("/taskReception") + @GetMapping("/taskReception") @ApiOperationSupport(order = 4) @Operation(summary = "任务接收") - public R taskReception( @RequestBody Long taskId) { - return R.status(dsTaskingService.taskReception(taskId)); + public R taskReception( @RequestParam String taskIds) { + Long Id = Long.valueOf(taskIds); + return R.status(dsTaskingService.taskReception(Id)); } @@ -238,11 +242,28 @@ public class DsTaskingController extends BladeController { @ApiOperationSupport(order = 1) @Operation(summary = "工艺编制", description = "传入dsCraft") public R processAuthorized(Long taskId, String rank) { + DsPartAuthorizedVO detail = dsTaskingService.processAuthorized(taskId,rank); return R.data(detail); } + /** + * 编制 - 零件 - 保存 + */ + @PostMapping("/authorizedPart") + @ApiOperationSupport(order = 1) + @Operation(summary = "工艺编制-零件-保存") + public R authorizedPart( + @RequestBody BsCompilationCompletedVO compilationCompleted + + ) { + DsPartEntity dsPart = compilationCompleted.getDsPart(); + List zPartList = compilationCompleted.getPartList(); + return R.status(dsTaskingService.authorizedPart(dsPart,zPartList)); + } + + /** * 编制 - 工艺编制 - 保存 */ @@ -253,12 +274,10 @@ public class DsTaskingController extends BladeController { @RequestBody BsCompilationCompletedVO compilationCompleted ) { - DsPartEntity dsPart = compilationCompleted.getDsPart(); - List zPartList = compilationCompleted.getPartList(); DsCraftEntity craft = compilationCompleted.getCraft(); List processList = compilationCompleted.getProcessList(); List deleteIds = compilationCompleted.getDeleteIds(); - return R.status(dsTaskingService.authorizedAccomplish(dsPart,zPartList,craft,processList,deleteIds)); + return R.status(dsTaskingService.authorizedAccomplish(craft,processList,deleteIds)); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/excel/BsProcessSetExcel.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/excel/BsProcessSetExcel.java index 67c961ab8..5ec693232 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/excel/BsProcessSetExcel.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/excel/BsProcessSetExcel.java @@ -26,6 +26,7 @@ package org.springblade.desk.dashboard.excel; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.math.BigDecimal; @@ -52,59 +53,37 @@ public class BsProcessSetExcel implements Serializable { @Serial private static final long serialVersionUID = 1L; - /** - * 主键 - */ - @ColumnWidth(20) - @ExcelProperty("主键") - private Short id; /** * 编码 */ @ColumnWidth(20) - @ExcelProperty("编码") + @ExcelProperty("工序编码") private String code; /** * 名称 */ @ColumnWidth(20) - @ExcelProperty("名称") + @ExcelProperty("工序名称") private String name; - /** - * 标准周期 - */ - @ColumnWidth(20) - @ExcelProperty("标准周期") - private BigDecimal cycle; - /** - * 是否主工序 - */ - @ColumnWidth(20) - @ExcelProperty("是否主工序") - private String isMain; - /** - * 是否特殊 - */ - @ColumnWidth(20) - @ExcelProperty("是否特殊") - private String isSpecial; + /** * 是否分派 */ @ColumnWidth(20) - @ExcelProperty("是否分派") + @ExcelProperty("不分派") private String isDispatch; + /** - * 备注 + * 是否特殊 */ @ColumnWidth(20) - @ExcelProperty("备注") - private String remarks; + @ExcelProperty("特殊") + private String isSpecial; + /** - * 是否删除 + * 是否主工序 */ @ColumnWidth(20) - @ExcelProperty("是否删除") - private Long isDeleted; - + @ExcelProperty("主工序") + private String isMain; } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/excel/DsSimilarPartsExcel.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/excel/DsSimilarPartsExcel.java index 5922348fc..2407c1549 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/excel/DsSimilarPartsExcel.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/excel/DsSimilarPartsExcel.java @@ -53,35 +53,35 @@ public class DsSimilarPartsExcel implements Serializable { @Serial private static final long serialVersionUID = 1L; - /** - * 主键ID - */ - @ColumnWidth(20) - @ExcelProperty("主键ID") - private BigDecimal id; +// /** +// * 主键ID +// */ +// @ColumnWidth(20) +// @ExcelProperty("主键ID") +// private BigDecimal id; /** * 零件号 */ - @ColumnWidth(20) - @ExcelProperty("零件号") - private BigDecimal partOne; + @ColumnWidth(30) + @ExcelProperty("零件工艺编码") + private String partOne; /** * 相似零件 */ - @ColumnWidth(20) - @ExcelProperty("相似零件") - private BigDecimal partTwo; - /** - * 备注 - */ - @ColumnWidth(20) - @ExcelProperty("备注") - private String remarks; - /** - * 删除标记 - */ - @ColumnWidth(20) - @ExcelProperty("删除标记") - private Long isDeleted; + @ColumnWidth(30) + @ExcelProperty("相似零件工艺编码") + private String partTwo; +// /** +// * 备注 +// */ +// @ColumnWidth(20) +// @ExcelProperty("备注") +// private String remarks; +// /** +// * 删除标记 +// */ +// @ColumnWidth(20) +// @ExcelProperty("删除标记") +// private Long isDeleted; } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/excel/DsSpecialProExcel.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/excel/DsSpecialProExcel.java index 7b6af892d..4d88adec0 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/excel/DsSpecialProExcel.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/excel/DsSpecialProExcel.java @@ -53,41 +53,38 @@ public class DsSpecialProExcel implements Serializable { @Serial private static final long serialVersionUID = 1L; + /** - * 主键ID + * 作业中心(外键) */ @ColumnWidth(20) - @ExcelProperty("主键ID") - private BigDecimal id; + @ExcelProperty("作业中心编码") + private String wcCode; + /** - * 作业中心(外键) + * 产线编码 */ @ColumnWidth(20) - @ExcelProperty("作业中心(外键)") - private BigDecimal wcId; + @ExcelProperty("产线编码") + private String equipmentCode; /** * 过程项 */ @ColumnWidth(20) - @ExcelProperty("过程项") + @ExcelProperty("确认名称") private String proItem; /** * 确认条件 */ @ColumnWidth(20) - @ExcelProperty("确认条件") + @ExcelProperty("确认编号") private String condition; - /** - * 周期天数 - */ - @ColumnWidth(20) - @ExcelProperty("周期天数") - private Long cycle; + /** * 上次确认日期 */ @ColumnWidth(20) - @ExcelProperty("上次确认日期") + @ExcelProperty("确认到期日期") private Date lastDueTime; /** * 提前提醒(天) @@ -99,12 +96,12 @@ public class DsSpecialProExcel implements Serializable { * 工艺员(外键-人员) */ @ColumnWidth(20) - @ExcelProperty("工艺员(外键-人员)") - private BigDecimal proMan; + @ExcelProperty("工艺员域账户") + private String proMan; /** * 备注 */ - @ColumnWidth(20) + @ColumnWidth(40) @ExcelProperty("备注") private String remarks; diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BatchPreservePlanMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BatchPreservePlanMapper.xml index 50880ffc5..ad4bf5267 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BatchPreservePlanMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BatchPreservePlanMapper.xml @@ -25,11 +25,34 @@ + + + + + - select * from DS_BATCH_PRESERVE_PLAN where is_deleted = 0 + + and BBP_TYPE = #{dsBatchPreservePlan.bbpType} + + + and APPROVAL_STATUS = #{dsBatchPreservePlan.approvalStatus} + + + and WC_ID = #{dsBatchPreservePlan.wcId} + + + AND BATCH_NO LIKE '%' || #{dsBatchPreservePlan.batchNo} || '%' + + + AND PRESERVE_CONTENT LIKE '%' || #{dsBatchPreservePlan.preserveContent} || '%' + + + and RULE_TYPE = #{dsBatchPreservePlan.ruleType} + @@ -37,4 +60,22 @@ SELECT * FROM DS_BATCH_PRESERVE_PLAN ${ew.customSqlSegment} + + + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BatchPreserveTaskMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BatchPreserveTaskMapper.xml index 5a68661b0..286bf5593 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BatchPreserveTaskMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BatchPreserveTaskMapper.xml @@ -27,8 +27,25 @@ - + select b.WC_ID,b.BATCH_NO,a.* from DS_BATCH_PRESERVE_TASK a + left join DS_BATCH_PRESERVE_PLAN b + on a.BPP_ID = b.ID where 1=1 + + and b.WC_ID = #{dsBatchPreserveTask.wcId} + + + and b.BATCH_NO = #{dsBatchPreserveTask.batchNo} + + + and a.TASK_STATUS = #{dsBatchPreserveTask.taskStatus} + + + and a.TASK_STATUS in + + #{taskStatus} + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BatchWorkCenterSetMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BatchWorkCenterSetMapper.xml index 757482f03..374fceb30 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BatchWorkCenterSetMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BatchWorkCenterSetMapper.xml @@ -21,8 +21,11 @@ - select * from DS_BATCH_WORK_CENTER_SET where is_deleted = 0 + + and WC_ID = #{dsBatchWorkCenterSet.wcId} + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BsCraftAbilityMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BsCraftAbilityMapper.java index 3f1a5bd3b..a63f39731 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BsCraftAbilityMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BsCraftAbilityMapper.java @@ -60,4 +60,5 @@ public interface BsCraftAbilityMapper extends BaseMapper { */ List exportBsCraftAbility(@Param("ew") Wrapper queryWrapper); + List selectAll(); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BsProcessSetMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BsProcessSetMapper.java index 26d450e4d..cc752b812 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BsProcessSetMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BsProcessSetMapper.java @@ -62,4 +62,6 @@ public interface BsProcessSetMapper extends BaseMapper { List exportBsProcessSet(@Param("ew") Wrapper queryWrapper); BsProcessSetEntity selectBsProcessSetByProcessCode(@Param("processCode")String processCode); + + List selectAll(); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BsWorkCenterMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BsWorkCenterMapper.java index 563af84f9..bb8370cae 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BsWorkCenterMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/BsWorkCenterMapper.java @@ -61,4 +61,6 @@ public interface BsWorkCenterMapper extends BaseMapper { List exportBsWorkCenter(@Param("ew") Wrapper queryWrapper); List getList(); + + BsWorkCenterEntity selectBsWorkCenterByWcCode(@Param("wcCode")String wcCode); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/CraftAbilityMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/CraftAbilityMapper.xml index 8f8100eb1..0d8221492 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/CraftAbilityMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/CraftAbilityMapper.xml @@ -26,5 +26,8 @@ + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsBatchPreservePlanMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsBatchPreservePlanMapper.java index 03fe33202..dfe278ca9 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsBatchPreservePlanMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsBatchPreservePlanMapper.java @@ -32,6 +32,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Param; + +import java.util.Date; import java.util.List; /** @@ -49,7 +51,8 @@ public interface DsBatchPreservePlanMapper extends BaseMapper */ - List selectDsBatchPreservePlanPage(IPage page, DsBatchPreservePlanVO dsBatchPreservePlan); + List selectDsBatchPreservePlanPage(IPage page, + @Param("dsBatchPreservePlan")DsBatchPreservePlanVO dsBatchPreservePlan); /** @@ -60,4 +63,23 @@ public interface DsBatchPreservePlanMapper extends BaseMapper exportDsBatchPreservePlan(@Param("ew") Wrapper queryWrapper); + /** + * 查询今天要发起的计划类得任务 + * @param bbpType + * @param approvalStatus + * @param startTime + * @param endTime + * @return + */ + List queryTodayPlanData(@Param("bbpType")Integer bbpType, + @Param("approvalStatus")Integer approvalStatus, + @Param("startTime")Date startTime, + @Param("endTime")Date endTime); + + /** + * 查询今天要发起的定期类得任务 + * @param bbpTypeList + * @return + */ + List queryTodayPeriodicalData(@Param("bbpTypeList")List bbpTypeList); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsBatchPreserveTaskMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsBatchPreserveTaskMapper.java index f281dc4f6..d0db6b57f 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsBatchPreserveTaskMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsBatchPreserveTaskMapper.java @@ -47,9 +47,12 @@ public interface DsBatchPreserveTaskMapper extends BaseMapper */ - List selectDsBatchPreserveTaskPage(IPage page, DsBatchPreserveTaskVO dsBatchPreserveTask); + List selectDsBatchPreserveTaskPage(IPage page, + @Param("dsBatchPreserveTask")DsBatchPreserveTaskVO dsBatchPreserveTask, + @Param("taskStatusList")List taskStatusList); /** diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsBatchWorkCenterSetMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsBatchWorkCenterSetMapper.java index 88fe48e7c..6baa0eeb1 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsBatchWorkCenterSetMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsBatchWorkCenterSetMapper.java @@ -49,7 +49,8 @@ public interface DsBatchWorkCenterSetMapper extends BaseMapper */ - List selectDsBatchWorkCenterSetPage(IPage page, DsBatchWorkCenterSetVO dsBatchWorkCenterSet); + List selectDsBatchWorkCenterSetPage(IPage page, + @Param("dsBatchWorkCenterSet")DsBatchWorkCenterSetVO dsBatchWorkCenterSet); /** diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsMainSaltAddQuantityMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsMainSaltAddQuantityMapper.java index 7c1aff9de..5a334c70e 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsMainSaltAddQuantityMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/DsMainSaltAddQuantityMapper.java @@ -49,7 +49,8 @@ public interface DsMainSaltAddQuantityMapper extends BaseMapper */ - List selectDsMainSaltAddQuantityPage(IPage page, DsMainSaltAddQuantityVO dsMainSaltAddQuantity); + List selectDsMainSaltAddQuantityPage(IPage page, + @Param("dsMainSaltAddQuantity")DsMainSaltAddQuantityVO dsMainSaltAddQuantity); /** diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/MainSaltAddQuantityMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/MainSaltAddQuantityMapper.xml index 7aef5cb48..db4790ed8 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/MainSaltAddQuantityMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/MainSaltAddQuantityMapper.xml @@ -23,8 +23,18 @@ - select * from DS_MAIN_SALT_ADD_QUANTITY where is_deleted = 0 + + and WC_ID = #{dsMainSaltAddQuantity.wcId} + + + AND BATCH_NO LIKE '%' || #{dsMainSaltAddQuantity.batchNo} || '%' + + + and ADD_TIME BETWEEN TO_DATE(#{dsMainSaltAddQuantity.startDate}, 'YYYY-MM-DD') + AND TO_DATE(#{dsMainSaltAddQuantity.endDate}, 'YYYY-MM-DD') + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ProcessSetMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ProcessSetMapper.xml index 85a685932..d303d1fdb 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ProcessSetMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ProcessSetMapper.xml @@ -23,7 +23,7 @@ - + @@ -44,5 +44,8 @@ select * from BS_PROCESS_SET where is_deleted = 0 and CODE = #{processCode} + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ReworkProcessMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ReworkProcessMapper.xml index 26930f13c..3f6090b86 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ReworkProcessMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/ReworkProcessMapper.xml @@ -8,7 +8,6 @@ - @@ -30,6 +29,7 @@ + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/SpecialProMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/SpecialProMapper.xml index b2dcce66b..4c2dafc44 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/SpecialProMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/SpecialProMapper.xml @@ -21,6 +21,9 @@ + + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/TaskBillMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/TaskBillMapper.xml index 69c0f430d..33ae11c58 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/TaskBillMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/TaskBillMapper.xml @@ -23,6 +23,8 @@ + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/TaskingMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/TaskingMapper.xml index 8a90351fd..a27a26cd2 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/TaskingMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/mapper/TaskingMapper.xml @@ -45,7 +45,7 @@ and PART_CODE = #{dsTasking.partCode} - + ORDER BY CREATE_TIME DESC @@ -78,6 +78,7 @@ #{taskStatus} + ORDER BY CREATE_TIME DESC + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsBatchPreservePlanDTO.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsBatchPreservePlanDTO.java index fdd36f67b..dcdef0d87 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsBatchPreservePlanDTO.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsBatchPreservePlanDTO.java @@ -25,6 +25,7 @@ */ package org.springblade.desk.dashboard.pojo.dto; +import io.swagger.v3.oas.annotations.media.Schema; import org.springblade.desk.dashboard.pojo.entity.DsBatchPreservePlanEntity; import lombok.Data; import lombok.EqualsAndHashCode; @@ -42,4 +43,13 @@ public class DsBatchPreservePlanDTO extends DsBatchPreservePlanEntity { @Serial private static final long serialVersionUID = 1L; + /** + * 是否通过 + */ + @Schema(description = "是否通过") + private Boolean isPass; + + + + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsBatchPreserveTaskDTO.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsBatchPreserveTaskDTO.java index afeb53a22..1872d27d9 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsBatchPreserveTaskDTO.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsBatchPreserveTaskDTO.java @@ -25,6 +25,8 @@ */ package org.springblade.desk.dashboard.pojo.dto; +import com.alibaba.fastjson.JSONArray; +import io.swagger.v3.oas.annotations.media.Schema; import org.springblade.desk.dashboard.pojo.entity.DsBatchPreserveTaskEntity; import lombok.Data; import lombok.EqualsAndHashCode; @@ -42,4 +44,10 @@ public class DsBatchPreserveTaskDTO extends DsBatchPreserveTaskEntity { @Serial private static final long serialVersionUID = 1L; + /** + * 槽液任务ID + */ + @Schema(description = "槽液任务ID") + private String bptIdList; + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsMainSaltAddQuantityDTO.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsMainSaltAddQuantityDTO.java index ca39a43f8..1ca2084b1 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsMainSaltAddQuantityDTO.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/dto/DsMainSaltAddQuantityDTO.java @@ -28,7 +28,10 @@ package org.springblade.desk.dashboard.pojo.dto; import org.springblade.desk.dashboard.pojo.entity.DsMainSaltAddQuantityEntity; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springblade.desk.dashboard.pojo.vo.DsMainSaltAddQuantityVO; + import java.io.Serial; +import java.util.List; /** * 主盐添加量表 数据传输对象实体类 @@ -42,4 +45,5 @@ public class DsMainSaltAddQuantityDTO extends DsMainSaltAddQuantityEntity { @Serial private static final long serialVersionUID = 1L; + private List mainSaltAddQuantityList; } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsProcessSetEntity.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsProcessSetEntity.java index f71473d1b..324b3b005 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsProcessSetEntity.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/BsProcessSetEntity.java @@ -51,14 +51,14 @@ public class BsProcessSetEntity extends BaseEntity { private static final long serialVersionUID = 1L; /** - * 编码 + * 工序编码 */ - @Schema(description = "编码") + @Schema(description = "工序编码") private String code; /** - * 名称 + * 工序名称 */ - @Schema(description = "名称") + @Schema(description = "工序名称") private String name; /** * 标准周期 @@ -68,17 +68,17 @@ public class BsProcessSetEntity extends BaseEntity { /** * 是否主工序 */ - @Schema(description = "是否主工序") + @Schema(description = "主工序") private String isMain; /** * 是否特殊 */ - @Schema(description = "是否特殊") + @Schema(description = "特殊") private String isSpecial; /** * 是否分派 */ - @Schema(description = "是否分派") + @Schema(description = "不分派") private String isDispatch; /** * 备注 @@ -114,7 +114,7 @@ public class BsProcessSetEntity extends BaseEntity { * 转速/振频 */ @Schema(description = "转速/振频") - private String vSpeed; + private String viSpeed; /** * 整流机控制模式 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchPreservePlanEntity.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchPreservePlanEntity.java index c4e20ceb5..81f00c7e5 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchPreservePlanEntity.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchPreservePlanEntity.java @@ -69,7 +69,7 @@ public class DsBatchPreservePlanEntity extends BaseEntity { * 作业中心(外键) */ @Schema(description = "作业中心(外键)") - private BigDecimal wcId; + private Long wcId; /** * 维护时间 */ @@ -79,17 +79,17 @@ public class DsBatchPreservePlanEntity extends BaseEntity { * 维护人(外键-人员) */ @Schema(description = "维护人(外键-人员)") - private BigDecimal keepMan; + private Long keepMan; /** * 审批状态 */ @Schema(description = "审批状态") - private Long approvalStatus; + private Integer approvalStatus; /** * 任务类型 */ @Schema(description = "任务类型") - private Long bbpType; + private Integer bbpType; /** * 上次任务生产时间 */ @@ -121,4 +121,40 @@ public class DsBatchPreservePlanEntity extends BaseEntity { @Schema(description = "备注") private String remarks; + /** + * 添加量 + */ + @Schema(description = "添加量") + private Integer addQuantity; + + /** + * 添加量倍数 + */ + @Schema(description = "添加量倍数") + private Integer addQuantityMultiple; + + /** + * 累计触发值 + */ + @Schema(description = "累计触发值") + private Integer cumulativeTriggerValue; + + /** + * 当前值(累计) + */ + @Schema(description = "当前值(累计)") + private Integer currentValue; + + /** + * 累计初始值 + */ + @Schema(description = "累计初始值") + private Integer cumulativeInitialValue; + + /** + * 审核意见 + */ + @Schema(description = "审核意见") + private String approvalOpinion; + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchPreserveTaskEntity.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchPreserveTaskEntity.java index 2808866c4..b54875153 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchPreserveTaskEntity.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchPreserveTaskEntity.java @@ -50,21 +50,12 @@ public class DsBatchPreserveTaskEntity extends BaseEntity { @Serial private static final long serialVersionUID = 1L; - /** - * 备注 - */ - @Schema(description = "备注") - private String remarks; - /** - * 主键ID - */ - @Schema(description = "主键ID") - private BigDecimal bptId; + /** * 槽液维护计划(外键) */ @Schema(description = "槽液维护计划(外键)") - private BigDecimal bppId; + private Long bppId; /** * 任务产生时间 */ @@ -84,7 +75,7 @@ public class DsBatchPreserveTaskEntity extends BaseEntity { * 完成人(外键-人员) */ @Schema(description = "完成人(外键-人员)") - private BigDecimal finishMan; + private Long finishMan; /** * 完成时间 */ @@ -99,7 +90,7 @@ public class DsBatchPreserveTaskEntity extends BaseEntity { * 审核人(外键-人员) */ @Schema(description = "审核人(外键-人员)") - private BigDecimal auditMan; + private Long auditMan; /** * 审核时间 */ @@ -121,4 +112,10 @@ public class DsBatchPreserveTaskEntity extends BaseEntity { @Schema(description = "维护内容") private String preserveContent; + /** + * 备注 + */ + @Schema(description = "备注") + private String remarks; + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchWorkCenterSetEntity.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchWorkCenterSetEntity.java index 29dde9ccd..61316da87 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchWorkCenterSetEntity.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsBatchWorkCenterSetEntity.java @@ -61,12 +61,12 @@ public class DsBatchWorkCenterSetEntity extends BaseEntity { @Schema(description = "设备(外键)") private Long device; /** - * 工艺id + * 工艺员 */ @Schema(description = "工艺id") private String craftManId; /** - * 工艺名称(工艺员) + * 工艺员名称(工艺员) */ @Schema(description = "工艺名称") private String craftManName; @@ -79,7 +79,7 @@ public class DsBatchWorkCenterSetEntity extends BaseEntity { * 维护人(外键-人员) */ @Schema(description = "维护人(外键-人员)") - private BigDecimal keepMan; + private Long keepMan; /** * 备注 */ diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsMainSaltAddQuantityEntity.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsMainSaltAddQuantityEntity.java index 5d69802c0..b8d5964d0 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsMainSaltAddQuantityEntity.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsMainSaltAddQuantityEntity.java @@ -54,7 +54,7 @@ public class DsMainSaltAddQuantityEntity extends BaseEntity { * 作业中心(外键) */ @Schema(description = "作业中心(外键)") - private BigDecimal wcId; + private Long wcId; /** * 槽号 */ @@ -79,7 +79,7 @@ public class DsMainSaltAddQuantityEntity extends BaseEntity { * 维护人(外键-人员) */ @Schema(description = "维护人(外键-人员)") - private BigDecimal keepMan; + private Long keepMan; /** * 类型(1-日常,2-累计) */ diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsSpecialProEntity.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsSpecialProEntity.java index 5eb30cdd5..3568d79a2 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsSpecialProEntity.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsSpecialProEntity.java @@ -25,12 +25,14 @@ */ package org.springblade.desk.dashboard.pojo.entity; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import io.swagger.v3.oas.annotations.media.Schema; import com.baomidou.mybatisplus.annotation.TableName; import java.math.BigDecimal; import java.util.Date; import lombok.EqualsAndHashCode; +import org.springblade.core.mp.base.BaseEntity; import org.springblade.core.tenant.mp.TenantEntity; import java.io.Serial; @@ -44,7 +46,7 @@ import java.io.Serial; @TableName("DS_SPECIAL_PRO") @Schema(description = "DsSpecialPro对象") @EqualsAndHashCode(callSuper = true) -public class DsSpecialProEntity extends TenantEntity { +public class DsSpecialProEntity extends BaseEntity { @Serial private static final long serialVersionUID = 1L; @@ -53,7 +55,7 @@ public class DsSpecialProEntity extends TenantEntity { * 作业中心(外键) */ @Schema(description = "作业中心(外键)") - private BigDecimal wcId; + private Long wcId; /** * 过程项 */ @@ -72,6 +74,7 @@ public class DsSpecialProEntity extends TenantEntity { /** * 上次确认日期 */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @Schema(description = "上次确认日期") private Date lastDueTime; /** @@ -83,7 +86,7 @@ public class DsSpecialProEntity extends TenantEntity { * 工艺员(外键-人员) */ @Schema(description = "工艺员(外键-人员)") - private BigDecimal proMan; + private Long proMan; /** * 备注 */ @@ -101,4 +104,22 @@ public class DsSpecialProEntity extends TenantEntity { @Schema(description = "外协名称") private String ocName; + /** + * 产线编码 + */ + @Schema(description = "产线编码") + private String equipmentCode; + + /** + * 设备ID + */ + @Schema(description = "设备ID") + private Long equipmentId; + + /** + * 设备名称 + */ + @Schema(description = "设备名称") + private Long equipmentName; + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsTaskBillEntity.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsTaskBillEntity.java index 64e391b26..ff1dae9b2 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsTaskBillEntity.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsTaskBillEntity.java @@ -111,4 +111,16 @@ public class DsTaskBillEntity extends BaseEntity { @Schema(description = "备注") private String remarks; + /** + * 设备ID + */ + @Schema(description = "设备ID") + private Long equipmentId; + + /** + * 设备名称 + */ + @Schema(description = "设备名称") + private Long equipmentName; + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/PrReworkProcessEntity.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/PrReworkProcessEntity.java index 4e3b62f98..fd978f32a 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/PrReworkProcessEntity.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/entity/PrReworkProcessEntity.java @@ -55,11 +55,7 @@ public class PrReworkProcessEntity extends BaseEntity { */ @Schema(description = "备注") private String remarks; - /** - * - */ - @Schema(description = "") - private BigDecimal newColumn; + /** * 返工单号 */ @@ -147,4 +143,10 @@ public class PrReworkProcessEntity extends BaseEntity { @Schema(description = "实验编号") private String trialNo; + /** + * 工序名称 + */ + @Schema(description = "工序名称") + private String ppsName; + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBatchPreservePlanVO.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBatchPreservePlanVO.java index e788c243c..88d720e1c 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBatchPreservePlanVO.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBatchPreservePlanVO.java @@ -25,6 +25,7 @@ */ package org.springblade.desk.dashboard.pojo.vo; +import io.swagger.v3.oas.annotations.media.Schema; import org.springblade.desk.dashboard.pojo.entity.DsBatchPreservePlanEntity; import lombok.Data; import lombok.EqualsAndHashCode; @@ -42,4 +43,16 @@ public class DsBatchPreservePlanVO extends DsBatchPreservePlanEntity { @Serial private static final long serialVersionUID = 1L; + /** + * 作业中心 + */ + @Schema(description = "作业中心") + private String wcName; + + /** + * 维护人 + */ + @Schema(description = "维护人") + private String keepManStr; + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBatchPreserveTaskVO.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBatchPreserveTaskVO.java index abac37113..6d84f647c 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBatchPreserveTaskVO.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBatchPreserveTaskVO.java @@ -25,6 +25,7 @@ */ package org.springblade.desk.dashboard.pojo.vo; +import io.swagger.v3.oas.annotations.media.Schema; import org.springblade.desk.dashboard.pojo.entity.DsBatchPreserveTaskEntity; import lombok.Data; import lombok.EqualsAndHashCode; @@ -42,4 +43,34 @@ public class DsBatchPreserveTaskVO extends DsBatchPreserveTaskEntity { @Serial private static final long serialVersionUID = 1L; + /** + * 维护内容 + */ + @Schema(description = "维护内容") + private String accumulateRelevantInfo; + + /** + * 作业中心ID + */ + @Schema(description = "作业中心ID") + private Long wcId; + + /** + * 作业中心名称 + */ + @Schema(description = "作业中心名称") + private String wcName; + + /** + * 槽号 + */ + @Schema(description = "槽号") + private String batchNo; + + /** + * 责任人 + */ + @Schema(description = "责任人") + private String finishManStr; + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBatchWorkCenterSetVO.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBatchWorkCenterSetVO.java index 6ad71d166..e2e0836cf 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBatchWorkCenterSetVO.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsBatchWorkCenterSetVO.java @@ -25,6 +25,7 @@ */ package org.springblade.desk.dashboard.pojo.vo; +import io.swagger.v3.oas.annotations.media.Schema; import org.springblade.desk.dashboard.pojo.entity.DsBatchWorkCenterSetEntity; import lombok.Data; import lombok.EqualsAndHashCode; @@ -42,4 +43,16 @@ public class DsBatchWorkCenterSetVO extends DsBatchWorkCenterSetEntity { @Serial private static final long serialVersionUID = 1L; + /** + * 维护人(外键-人员) + */ + @Schema(description = "维护人") + private String keepManStr; + + /** + *作业中心名称 + */ + @Schema(description = "作业中心名称") + private String wcName; + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsMainSaltAddQuantityVO.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsMainSaltAddQuantityVO.java index 0dc5c8080..bb2f83751 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsMainSaltAddQuantityVO.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsMainSaltAddQuantityVO.java @@ -25,6 +25,7 @@ */ package org.springblade.desk.dashboard.pojo.vo; +import io.swagger.v3.oas.annotations.media.Schema; import org.springblade.desk.dashboard.pojo.entity.DsMainSaltAddQuantityEntity; import lombok.Data; import lombok.EqualsAndHashCode; @@ -42,4 +43,22 @@ public class DsMainSaltAddQuantityVO extends DsMainSaltAddQuantityEntity { @Serial private static final long serialVersionUID = 1L; + /** + * 开始时间 + */ + @Schema(description = "开始时间") + private String startDate; + + /** + * 结束时间 + */ + @Schema(description = "结束时间") + private String endDate; + + /** + * 作业中心名称 + */ + @Schema(description = "作业中心名称") + private String wcName; + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartSynthesisVO.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartSynthesisVO.java index 84f818e93..ff239b9fb 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartSynthesisVO.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsPartSynthesisVO.java @@ -49,4 +49,9 @@ public class DsPartSynthesisVO{ */ private List dsPartEntities; + /** + * 零件版本号 + */ + private String partVersion; + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsSimilarPartsVO.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsSimilarPartsVO.java index 9ff9e5ef7..58b864b60 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsSimilarPartsVO.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/pojo/vo/DsSimilarPartsVO.java @@ -46,13 +46,13 @@ public class DsSimilarPartsVO extends DsSimilarPartsEntity { /** * 零件号 */ - @Schema(description = "零件号") + @Schema(description = "零件工艺编码") private String partOneCode; /** * 相似零件 */ - @Schema(description = "相似零件") + @Schema(description = "相似零件工艺编码") private String partTwoCode; diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IBsCraftAbilityService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IBsCraftAbilityService.java index 925896306..f5c93f83a 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IBsCraftAbilityService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IBsCraftAbilityService.java @@ -58,4 +58,9 @@ public interface IBsCraftAbilityService extends BaseService exportBsCraftAbility(Wrapper queryWrapper); + /** + * 获取所有工艺能力 + * @return + */ + List getCraftAbilityList(); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IBsProcessSetService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IBsProcessSetService.java index 745f8a11f..0f3f7e5eb 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IBsProcessSetService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IBsProcessSetService.java @@ -73,4 +73,17 @@ public interface IBsProcessSetService extends BaseService { * @return */ BsProcessSetEntity selectBsProcessSetByProcessCode(String processCode); + + /** + * 导入 + * @param list + * @return + */ + boolean importExcelProcessSet(List list); + + /** + * 获取所有工序 + * @return + */ + List getProcessSetList(); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IBsWorkCenterService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IBsWorkCenterService.java index dc97186c1..cf1dd8ac3 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IBsWorkCenterService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IBsWorkCenterService.java @@ -63,4 +63,11 @@ public interface IBsWorkCenterService extends BaseService { * @return */ List getList(); + + /** + * 根据作业中心编码查询作业中心 + * @param wcCode + * @return + */ + BsWorkCenterEntity selectBsWorkCenterByWcCode(String wcCode); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsBatchPreservePlanService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsBatchPreservePlanService.java index aedeaba47..12e7dd0fb 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsBatchPreservePlanService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsBatchPreservePlanService.java @@ -26,6 +26,7 @@ package org.springblade.desk.dashboard.service; import com.baomidou.mybatisplus.core.conditions.Wrapper; +import org.springblade.desk.dashboard.pojo.dto.DsBatchPreservePlanDTO; import org.springblade.desk.dashboard.pojo.entity.DsBatchPreservePlanEntity; import org.springblade.desk.dashboard.pojo.vo.DsBatchPreservePlanVO; import org.springblade.desk.dashboard.excel.DsBatchPreservePlanExcel; @@ -58,4 +59,51 @@ public interface IDsBatchPreservePlanService extends BaseService exportDsBatchPreservePlan(Wrapper queryWrapper); + /** + * 新增和修改 + * @param dsBatchPreservePlan + * @return + */ + boolean saveOrUpdateBatchPreservePlan(List dsBatchPreservePlan); + + /** + * 主任审批 + * @param dsBatchPreservePlan + * @return + */ + boolean directorApproval(DsBatchPreservePlanDTO dsBatchPreservePlan); + + /** + * 厂长审核 + * @param dsBatchPreservePlan + * @return + */ + boolean factoryApproval(DsBatchPreservePlanDTO dsBatchPreservePlan); + + /** + *

方法描述: 槽液精细化-计划类-任务发起

+ *

方法名: createPlanClassTask

+ * + * @param + * @return void + */ + void createPlanClassTask(); + + /** + *

方法描述: 槽液精细化-定期类-任务发起

+ *

方法名: createPlanClassTask

+ * + * @param + * @return void + */ + void createPeriodicalClassTask(); + + /** + *

方法描述: 创建槽液精细化-累计类-任务发起

+ *

方法名: createAccumulateClassTask

+ * + * @param + * @return void + */ + void createAccumulateClassTask(); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsBatchPreserveTaskService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsBatchPreserveTaskService.java index 51c55389d..0280f7b36 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsBatchPreserveTaskService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsBatchPreserveTaskService.java @@ -31,6 +31,8 @@ import org.springblade.desk.dashboard.pojo.vo.DsBatchPreserveTaskVO; import org.springblade.desk.dashboard.excel.DsBatchPreserveTaskExcel; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; + +import java.math.BigDecimal; import java.util.List; /** @@ -58,4 +60,17 @@ public interface IDsBatchPreserveTaskService extends BaseService exportDsBatchPreserveTask(Wrapper queryWrapper); + /** + * 批量维护 + * @param dsBatchPreserveTaskEntityList + * @return + */ + boolean batchMaintain( List dsBatchPreserveTaskEntityList); + + /** + * 批量审核 + * @param dsBatchPreserveTaskEntityList + * @return + */ + boolean batchApproval(List dsBatchPreserveTaskEntityList); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsBatchWorkCenterSetService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsBatchWorkCenterSetService.java index 9fb3f51bf..7aabe82c2 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsBatchWorkCenterSetService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsBatchWorkCenterSetService.java @@ -58,4 +58,10 @@ public interface IDsBatchWorkCenterSetService extends BaseService exportDsBatchWorkCenterSet(Wrapper queryWrapper); + /** + * 新增修改 + * @param dsBatchWorkCenterSet + * @return + */ + boolean saveBatchWorkCenterSet(DsBatchWorkCenterSetEntity dsBatchWorkCenterSet); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsMainSaltAddQuantityService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsMainSaltAddQuantityService.java index 7a372f024..ab8c8ff70 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsMainSaltAddQuantityService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsMainSaltAddQuantityService.java @@ -26,6 +26,7 @@ package org.springblade.desk.dashboard.service; import com.baomidou.mybatisplus.core.conditions.Wrapper; +import org.springblade.desk.dashboard.pojo.dto.DsMainSaltAddQuantityDTO; import org.springblade.desk.dashboard.pojo.entity.DsMainSaltAddQuantityEntity; import org.springblade.desk.dashboard.pojo.vo.DsMainSaltAddQuantityVO; import org.springblade.desk.dashboard.excel.DsMainSaltAddQuantityExcel; @@ -58,4 +59,10 @@ public interface IDsMainSaltAddQuantityService extends BaseService exportDsMainSaltAddQuantity(Wrapper queryWrapper); + /** + * 新增或修改 + * @param mainSaltAddQuantityList + * @return + */ + boolean saveOrUpdateMainSaltAddQuantity(List mainSaltAddQuantityList); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsSimilarPartsService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsSimilarPartsService.java index dc340640c..8c71be2e9 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsSimilarPartsService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsSimilarPartsService.java @@ -58,4 +58,10 @@ public interface IDsSimilarPartsService extends BaseService exportDsSimilarParts(Wrapper queryWrapper); + /** + * 导入 + * @param list + * @return + */ + boolean importExcelSimple(List list); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsSpecialProService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsSpecialProService.java index bfb09fcfc..20f44b3a5 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsSpecialProService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsSpecialProService.java @@ -58,4 +58,10 @@ public interface IDsSpecialProService extends BaseService { */ List exportDsSpecialPro(Wrapper queryWrapper); + /** + * 导入 + * @param list + * @return + */ + boolean importExcelSpecialPro(List list); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsTaskingService.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsTaskingService.java index 36325dfff..2cc18e4ec 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsTaskingService.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/IDsTaskingService.java @@ -100,7 +100,7 @@ public interface IDsTaskingService extends BaseService { boolean timeoutUntreated(); /** - * 任务五处理列表 + * 任务处理列表 * @param page * @param dsTasking * @return @@ -152,14 +152,12 @@ public interface IDsTaskingService extends BaseService { /** * 工艺编制 完成 - * @param dsPart 零件 - * @param zPartList 子件集合 * @param craft 工艺 * @param processList 工序 * @param deleteIds 删除ID * @return */ - boolean authorizedAccomplish(DsPartEntity dsPart, List zPartList, DsCraftEntity craft, List processList, List deleteIds); + boolean authorizedAccomplish( DsCraftEntity craft, List processList, List deleteIds); /** * 任务处理 编制 项目保存 @@ -214,4 +212,12 @@ public interface IDsTaskingService extends BaseService { * @return */ DsPartAuthorizedVO craftDetail(Long partId, String partVersion, String rank); + + /** + * 零件保存 + * @param dsPart + * @param zPartList + * @return + */ + boolean authorizedPart(DsPartEntity dsPart, List zPartList); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/BsCraftAbilityServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/BsCraftAbilityServiceImpl.java index 7a9dc9d4c..8c0381744 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/BsCraftAbilityServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/BsCraftAbilityServiceImpl.java @@ -30,6 +30,7 @@ import org.springblade.desk.dashboard.pojo.vo.BsCraftAbilityVO; import org.springblade.desk.dashboard.excel.BsCraftAbilityExcel; import org.springblade.desk.dashboard.mapper.BsCraftAbilityMapper; import org.springblade.desk.dashboard.service.IBsCraftAbilityService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -45,6 +46,11 @@ import java.util.List; @Service public class BsCraftAbilityServiceImpl extends BaseServiceImpl implements IBsCraftAbilityService { + + @Autowired + BsCraftAbilityMapper craftAbilityMapper; + + @Override public IPage selectBsCraftAbilityPage(IPage page, BsCraftAbilityVO bsCraftAbility) { return page.setRecords(baseMapper.selectBsCraftAbilityPage(page, bsCraftAbility)); @@ -60,4 +66,9 @@ public class BsCraftAbilityServiceImpl extends BaseServiceImpl getCraftAbilityList() { + return craftAbilityMapper.selectAll(); + } + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/BsProcessSetServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/BsProcessSetServiceImpl.java index 250dd7c2f..96854756d 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/BsProcessSetServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/BsProcessSetServiceImpl.java @@ -42,8 +42,10 @@ import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseServiceImpl; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; import java.util.List; -import java.util.Objects; /** * 工序设置表 服务实现类 @@ -135,4 +137,38 @@ public class BsProcessSetServiceImpl extends BaseServiceImpl list) { + if (CollectionUtils.isEmpty(list)) { + throw new ServiceException("Excel文件中没有数据"); + } + + List processSetList = new ArrayList<>(); + for (BsProcessSetExcel bsProcessSet : list) { + if(null == bsProcessSet.getCode() || null == bsProcessSet.getName()){ + throw new ServiceException("工序编码或工序名称不能为空"); + } + BsProcessSetEntity processSetEntity = bsProcessSetMapper.selectBsProcessSetByProcessCode(bsProcessSet.getCode()); + if(null != processSetEntity){ + throw new ServiceException("工序编码: "+bsProcessSet.getCode()+" 已存在不允许添加"); + } + BsProcessSetEntity process = new BsProcessSetEntity(); + process.setCode(bsProcessSet.getCode()); + process.setName(bsProcessSet.getName()); + process.setIsDispatch("是".equals(bsProcessSet.getIsDispatch())?"1":"2"); + process.setIsSpecial("是".equals(bsProcessSet.getIsSpecial())?"1":"2"); + process.setIsMain("是".equals(bsProcessSet.getIsMain())?"1":"2"); + processSetList.add(process); + } + + saveBatch(processSetList); + return true; + } + + @Override + public List getProcessSetList() { + List processSetVOList = bsProcessSetMapper.selectAll(); + return processSetVOList; + } + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/BsWorkCenterServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/BsWorkCenterServiceImpl.java index 2785c133d..1379628e9 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/BsWorkCenterServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/BsWorkCenterServiceImpl.java @@ -69,4 +69,9 @@ public class BsWorkCenterServiceImpl extends BaseServiceImpl implements IDsBatchPreservePlanService { + @Autowired + IBsWorkCenterService workCenterService; + + @Autowired + IUserClient userClient; + + @Autowired + DsBatchPreservePlanMapper batchPreservePlanMapper; + + @Autowired + @Lazy + IDsBatchPreserveTaskService batchPreserveTaskService; + @Override public IPage selectDsBatchPreservePlanPage(IPage page, DsBatchPreservePlanVO dsBatchPreservePlan) { - return page.setRecords(baseMapper.selectDsBatchPreservePlanPage(page, dsBatchPreservePlan)); + + List dsBatchPreservePlanVOS = baseMapper.selectDsBatchPreservePlanPage(page, dsBatchPreservePlan); + for (DsBatchPreservePlanVO dsBatchPreservePlanVO : dsBatchPreservePlanVOS) { + if(null != dsBatchPreservePlanVO.getWcId()){ + BsWorkCenterEntity workCenterEntity = workCenterService.getById(dsBatchPreservePlanVO.getWcId()); + dsBatchPreservePlanVO.setWcName(workCenterEntity.getWcName()); + } + if(null != dsBatchPreservePlanVO.getKeepMan()){ + String name = userClient.userInfo(dsBatchPreservePlanVO.getKeepMan()).getData().getUser().getName(); + dsBatchPreservePlanVO.setKeepManStr(name); + } + } + return page.setRecords(dsBatchPreservePlanVOS); } @@ -60,4 +98,119 @@ public class DsBatchPreservePlanServiceImpl extends BaseServiceImpl dsBatchPreservePlan) { + for (DsBatchPreservePlanEntity batchPreservePlan : dsBatchPreservePlan) { + Long userId = AuthUtil.getUser().getUserId(); + batchPreservePlan.setKeepMan(userId); + batchPreservePlan.setKeepTime(new Date()); + if(null != batchPreservePlan.getId()){ + updateById(batchPreservePlan); + }else { + if(BatchConstant.PLAN.equals(batchPreservePlan.getBbpType())){ + batchPreservePlan.setApprovalStatus(BatchConstant.STATUS_NEW); + } + batchPreservePlan.setLastTaskTime(new Date()); + save(batchPreservePlan); + } + } + return true; + } + + @Override + public boolean directorApproval(DsBatchPreservePlanDTO dsBatchPreservePlan) { + DsBatchPreservePlanEntity batchPreservePlanEntity = batchPreservePlanMapper.selectById(dsBatchPreservePlan.getId()); + if(dsBatchPreservePlan.getIsPass()){ + batchPreservePlanEntity.setApprovalStatus(BatchConstant.DIRECTOR_STATUS_RECEIPT); + + }else { + batchPreservePlanEntity.setApprovalStatus(BatchConstant.DIRECTOR_STATUS_ASSIGN); + } + batchPreservePlanEntity.setApprovalOpinion(dsBatchPreservePlan.getApprovalOpinion()); + updateById(batchPreservePlanEntity); + return true; + } + + @Override + public boolean factoryApproval(DsBatchPreservePlanDTO dsBatchPreservePlan) { + DsBatchPreservePlanEntity batchPreservePlanEntity = batchPreservePlanMapper.selectById(dsBatchPreservePlan.getId()); + if(dsBatchPreservePlan.getIsPass()){ + batchPreservePlanEntity.setApprovalStatus(BatchConstant.FACTORY_STATUS_RECEIPT); + + }else { + batchPreservePlanEntity.setApprovalStatus(BatchConstant.FACTORY_STATUS_ASSIGN); + } + batchPreservePlanEntity.setApprovalOpinion(dsBatchPreservePlan.getApprovalOpinion()); + updateById(batchPreservePlanEntity); + return true; + } + + @Override + public void createPlanClassTask() { + Date startTime = DateUtils.getStartTime(new Date()); + Date endTime = DateUtils.getEndTime(new Date()); + // 查询今天要发起的计划类得任务 + List batchPreservePlanList = batchPreservePlanMapper.queryTodayPlanData(BatchConstant.PLAN,BatchConstant.FACTORY_STATUS_RECEIPT,startTime,endTime); + if(!CollectionUtils.isEmpty(batchPreservePlanList)){ + for (DsBatchPreservePlanEntity batchPreservePlanEntity : batchPreservePlanList) { + DsBatchPreserveTaskEntity dsBatchPreserveTaskEntity = new DsBatchPreserveTaskEntity(); + dsBatchPreserveTaskEntity.setBppId(batchPreservePlanEntity.getId()); + dsBatchPreserveTaskEntity.setTaskCreateTime(new Date()); + dsBatchPreserveTaskEntity.setTaskStatus(BatchConstant.TO_BE_MAINTAINED.longValue()); + batchPreserveTaskService.save(dsBatchPreserveTaskEntity); + } + } + } + + @Override + public void createPeriodicalClassTask() { + List bbpTypeList = new ArrayList<>(Arrays.asList( + BatchConstant.REGULAR_BATH, + BatchConstant.REGULAR_DEVICE + )); + // 查询今天要发起的定期类得任务 + List batchPreservePlanList = batchPreservePlanMapper.queryTodayPeriodicalData(bbpTypeList); + if(!CollectionUtils.isEmpty(batchPreservePlanList)){ + for (DsBatchPreservePlanEntity batchPreservePlanEntity : batchPreservePlanList) { + DsBatchPreserveTaskEntity dsBatchPreserveTaskEntity = new DsBatchPreserveTaskEntity(); + dsBatchPreserveTaskEntity.setBppId(batchPreservePlanEntity.getId()); + dsBatchPreserveTaskEntity.setTaskCreateTime(new Date()); + dsBatchPreserveTaskEntity.setTaskStatus(BatchConstant.TO_BE_MAINTAINED.longValue()); + batchPreserveTaskService.save(dsBatchPreserveTaskEntity); + } + } + + } + + @Override + public void createAccumulateClassTask() { + List bbpTypeList = new ArrayList<>(Arrays.asList( + BatchConstant.ACCUMULATE + )); + List batchPreservePlanList = batchPreservePlanMapper.queryTodayPeriodicalData(bbpTypeList); + DsBatchPreserveTaskEntity dsBatchPreserveTask = null; + if(!CollectionUtils.isEmpty(batchPreservePlanList)){ + for (DsBatchPreservePlanEntity batchPreservePlan : batchPreservePlanList) { + // 先判断是否有上次触发时间 在判断是否符合触发条件, + if (batchPreservePlan.getLastTaskTime() != null) { + int days = (int) ((System.currentTimeMillis() - batchPreservePlan.getLastTaskTime().getTime()) / (1000 * 3600 * 24)); + if (days >= batchPreservePlan.getFrequency()) { + this.createTask(batchPreservePlan, dsBatchPreserveTask); + } + } + } + } + } + + /** + * 累计类 添加任务 计算逻辑 + * @param batchPreservePlan + * @param dsBatchPreserveTask + */ + private void createTask(DsBatchPreservePlanEntity batchPreservePlan, DsBatchPreserveTaskEntity dsBatchPreserveTask) { + + + } + + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsBatchPreserveTaskServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsBatchPreserveTaskServiceImpl.java index cc3d8379e..718c60ba3 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsBatchPreserveTaskServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsBatchPreserveTaskServiceImpl.java @@ -25,15 +25,34 @@ */ package org.springblade.desk.dashboard.service.impl; +import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.core.tool.utils.Func; +import org.springblade.desk.dashboard.constant.BatchConstant; +import org.springblade.desk.dashboard.constant.TaskingConstant; +import org.springblade.desk.dashboard.pojo.entity.BsWorkCenterEntity; +import org.springblade.desk.dashboard.pojo.entity.DsBatchPreservePlanEntity; import org.springblade.desk.dashboard.pojo.entity.DsBatchPreserveTaskEntity; +import org.springblade.desk.dashboard.pojo.entity.DsBatchWorkCenterSetEntity; import org.springblade.desk.dashboard.pojo.vo.DsBatchPreserveTaskVO; import org.springblade.desk.dashboard.excel.DsBatchPreserveTaskExcel; import org.springblade.desk.dashboard.mapper.DsBatchPreserveTaskMapper; +import org.springblade.desk.dashboard.service.IBsWorkCenterService; +import org.springblade.desk.dashboard.service.IDsBatchPreservePlanService; import org.springblade.desk.dashboard.service.IDsBatchPreserveTaskService; +import org.springblade.desk.dashboard.service.IDsBatchWorkCenterSetService; +import org.springblade.system.feign.IUserClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseServiceImpl; +import org.springframework.util.CollectionUtils; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; import java.util.List; /** @@ -45,9 +64,45 @@ import java.util.List; @Service public class DsBatchPreserveTaskServiceImpl extends BaseServiceImpl implements IDsBatchPreserveTaskService { + @Autowired + @Lazy + IDsBatchPreservePlanService batchPreservePlanService; + + @Autowired + IBsWorkCenterService workCenterService; + + @Autowired + DsBatchPreserveTaskMapper batchPreserveTaskMapper; + + @Autowired + IUserClient userClient; + @Override public IPage selectDsBatchPreserveTaskPage(IPage page, DsBatchPreserveTaskVO dsBatchPreserveTask) { - return page.setRecords(baseMapper.selectDsBatchPreserveTaskPage(page, dsBatchPreserveTask)); + List taskStatusList = new ArrayList<>(Arrays.asList( + BatchConstant.TO_BE_MAINTAINED, + BatchConstant.PENDING_REVIEW, + BatchConstant.AUDIT_NO_PASS + )); + + List dsBatchPreserveTaskVOS = baseMapper.selectDsBatchPreserveTaskPage(page, dsBatchPreserveTask,taskStatusList); + for (DsBatchPreserveTaskVO dsBatchPreserveTaskVO : dsBatchPreserveTaskVOS) { + if(null != dsBatchPreserveTaskVO.getBppId()){ + DsBatchPreservePlanEntity batchPreservePlan = batchPreservePlanService.getById(dsBatchPreserveTaskVO.getBppId()); + if(null != batchPreservePlan){ + dsBatchPreserveTaskVO.setAccumulateRelevantInfo(batchPreservePlan.getPreserveContent()); + } + } + if(null != dsBatchPreserveTaskVO.getWcId()){ + BsWorkCenterEntity workCenterEntity = workCenterService.getById(dsBatchPreserveTaskVO.getWcId()); + dsBatchPreserveTaskVO.setWcName(workCenterEntity.getWcName()); + } + if(null != dsBatchPreserveTaskVO.getFinishMan()){ + dsBatchPreserveTaskVO.setFinishManStr(userClient.userInfo(Func.toLong(dsBatchPreserveTaskVO.getFinishMan())).getData().getUser().getName()); + } + } + + return page.setRecords(dsBatchPreserveTaskVOS); } @@ -60,4 +115,39 @@ public class DsBatchPreserveTaskServiceImpl extends BaseServiceImpl dsBatchPreserveTaskEntityList) { + + if(!CollectionUtils.isEmpty(dsBatchPreserveTaskEntityList)){ + for (DsBatchPreserveTaskEntity dsBatchPreserveTask : dsBatchPreserveTaskEntityList) { + DsBatchPreserveTaskEntity dsBatchPreserveTaskEntity = batchPreserveTaskMapper.selectById(dsBatchPreserveTask.getId()); + dsBatchPreserveTaskEntity.setTaskStatus(BatchConstant.PENDING_REVIEW.longValue()); + Long userId = AuthUtil.getUser().getUserId(); + dsBatchPreserveTaskEntity.setFinishMan(userId); + dsBatchPreserveTaskEntity.setFinishTime(new Date()); + dsBatchPreserveTaskEntity.setIsQualified(dsBatchPreserveTask.getIsQualified()); + dsBatchPreserveTaskEntity.setActualValue(dsBatchPreserveTask.getActualValue()); + batchPreserveTaskMapper.updateById(dsBatchPreserveTaskEntity); + } + } + + return true; + } + + @Override + public boolean batchApproval(List dsBatchPreserveTaskEntityList) { + if(!CollectionUtils.isEmpty(dsBatchPreserveTaskEntityList)){ + for (DsBatchPreserveTaskEntity dsBatchPreserveTaskEntity : dsBatchPreserveTaskEntityList) { + DsBatchPreserveTaskEntity dsBatchPreserveTask = batchPreserveTaskMapper.selectById(dsBatchPreserveTaskEntity.getId()); + dsBatchPreserveTask.setAuditStatus(dsBatchPreserveTaskEntity.getAuditStatus()); + Long userId = AuthUtil.getUser().getUserId(); + dsBatchPreserveTask.setAuditMan(userId); + dsBatchPreserveTask.setAuditTime(new Date()); + dsBatchPreserveTask.setAuditDescribe(dsBatchPreserveTaskEntity.getAuditDescribe()); + batchPreserveTaskMapper.updateById(dsBatchPreserveTask); + } + } + return true; + } + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsBatchWorkCenterSetServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsBatchWorkCenterSetServiceImpl.java index dc171a61a..7739a0763 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsBatchWorkCenterSetServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsBatchWorkCenterSetServiceImpl.java @@ -25,15 +25,26 @@ */ package org.springblade.desk.dashboard.service.impl; +import org.springblade.core.log.exception.ServiceException; +import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.core.tool.utils.Func; +import org.springblade.desk.dashboard.pojo.entity.BsWorkCenterEntity; import org.springblade.desk.dashboard.pojo.entity.DsBatchWorkCenterSetEntity; import org.springblade.desk.dashboard.pojo.vo.DsBatchWorkCenterSetVO; import org.springblade.desk.dashboard.excel.DsBatchWorkCenterSetExcel; import org.springblade.desk.dashboard.mapper.DsBatchWorkCenterSetMapper; +import org.springblade.desk.dashboard.service.IBsWorkCenterService; import org.springblade.desk.dashboard.service.IDsBatchWorkCenterSetService; +import org.springblade.system.feign.IUserClient; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseServiceImpl; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.Date; import java.util.List; /** @@ -45,9 +56,34 @@ import java.util.List; @Service public class DsBatchWorkCenterSetServiceImpl extends BaseServiceImpl implements IDsBatchWorkCenterSetService { + @Autowired + IUserClient userClient; + + @Autowired + DsBatchWorkCenterSetMapper batchWorkCenterSetMapper; + + @Autowired + IBsWorkCenterService workCenterService; + @Override public IPage selectDsBatchWorkCenterSetPage(IPage page, DsBatchWorkCenterSetVO dsBatchWorkCenterSet) { - return page.setRecords(baseMapper.selectDsBatchWorkCenterSetPage(page, dsBatchWorkCenterSet)); + + List dsBatchWorkCenterSetVOS = baseMapper.selectDsBatchWorkCenterSetPage(page, dsBatchWorkCenterSet); + if(!CollectionUtils.isEmpty(dsBatchWorkCenterSetVOS)){ + for (DsBatchWorkCenterSetVO dsBatchWorkCenterSetVO : dsBatchWorkCenterSetVOS) { + if(null != dsBatchWorkCenterSetVO.getKeepMan()){ + String name = userClient.userInfo(dsBatchWorkCenterSetVO.getKeepMan()).getData().getUser().getName(); + dsBatchWorkCenterSetVO.setKeepManStr(name); + } + if(null != dsBatchWorkCenterSetVO.getWcId()){ + BsWorkCenterEntity workCenter = workCenterService.getById(dsBatchWorkCenterSetVO.getWcId()); + if(null != workCenter.getWcName()){ + dsBatchWorkCenterSetVO.setWcName(workCenter.getWcName()); + } + } + } + } + return page.setRecords(dsBatchWorkCenterSetVOS); } @@ -60,4 +96,42 @@ public class DsBatchWorkCenterSetServiceImpl extends BaseServiceImpl 0) { + // 查询单个用户信息 + String name = userClient.userInfo(userId).getData().getUser().getName(); + if (userNameBuilder.length() > 0) { + userNameBuilder.append(","); + } + userNameBuilder.append(name); + } + } + } + + dsBatchWorkCenterSet.setCraftManName(userNameBuilder.toString()); + } + Long userId = AuthUtil.getUser().getUserId(); + dsBatchWorkCenterSet.setKeepMan(userId); + dsBatchWorkCenterSet.setKeepTime(new Date()); + if(null != dsBatchWorkCenterSet.getId()){ + updateById(dsBatchWorkCenterSet); + }else { + save(dsBatchWorkCenterSet); + } + return true; + } + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsMainSaltAddQuantityServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsMainSaltAddQuantityServiceImpl.java index 412d398cd..64625c855 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsMainSaltAddQuantityServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsMainSaltAddQuantityServiceImpl.java @@ -25,15 +25,21 @@ */ package org.springblade.desk.dashboard.service.impl; +import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.desk.dashboard.pojo.entity.BsWorkCenterEntity; import org.springblade.desk.dashboard.pojo.entity.DsMainSaltAddQuantityEntity; import org.springblade.desk.dashboard.pojo.vo.DsMainSaltAddQuantityVO; import org.springblade.desk.dashboard.excel.DsMainSaltAddQuantityExcel; import org.springblade.desk.dashboard.mapper.DsMainSaltAddQuantityMapper; +import org.springblade.desk.dashboard.service.IBsWorkCenterService; import org.springblade.desk.dashboard.service.IDsMainSaltAddQuantityService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseServiceImpl; + +import java.util.Date; import java.util.List; /** @@ -45,9 +51,22 @@ import java.util.List; @Service public class DsMainSaltAddQuantityServiceImpl extends BaseServiceImpl implements IDsMainSaltAddQuantityService { + + @Autowired + IBsWorkCenterService workCenterService; + @Override public IPage selectDsMainSaltAddQuantityPage(IPage page, DsMainSaltAddQuantityVO dsMainSaltAddQuantity) { - return page.setRecords(baseMapper.selectDsMainSaltAddQuantityPage(page, dsMainSaltAddQuantity)); + List dsMainSaltAddQuantityVOS = baseMapper.selectDsMainSaltAddQuantityPage(page, dsMainSaltAddQuantity); + for (DsMainSaltAddQuantityVO dsMainSaltAddQuantityVO : dsMainSaltAddQuantityVOS) { + if(null != dsMainSaltAddQuantityVO.getWcId()){ + BsWorkCenterEntity workCenterEntity = workCenterService.getById(dsMainSaltAddQuantityVO.getWcId()); + if(null != workCenterEntity){ + dsMainSaltAddQuantityVO.setWcName(workCenterEntity.getWcName()); + } + } + } + return page.setRecords(dsMainSaltAddQuantityVOS); } @@ -60,4 +79,21 @@ public class DsMainSaltAddQuantityServiceImpl extends BaseServiceImpl mainSaltAddQuantityList) { + Long userId = AuthUtil.getUser().getUserId(); + for (DsMainSaltAddQuantityVO dsMainSaltAddQuantityVO : mainSaltAddQuantityList) { + if(null != dsMainSaltAddQuantityVO.getId()){ + dsMainSaltAddQuantityVO.setKeepMan(userId); + dsMainSaltAddQuantityVO.setKeepTime(new Date()); + updateById(dsMainSaltAddQuantityVO); + }else { + dsMainSaltAddQuantityVO.setKeepMan(userId); + dsMainSaltAddQuantityVO.setAddTime(new Date()); + save(dsMainSaltAddQuantityVO); + } + } + return true; + } + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsSimilarPartsServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsSimilarPartsServiceImpl.java index 89d5a9929..1803c1d9e 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsSimilarPartsServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsSimilarPartsServiceImpl.java @@ -25,6 +25,9 @@ */ package org.springblade.desk.dashboard.service.impl; +import org.apache.commons.lang3.StringUtils; +import org.springblade.core.log.exception.ServiceException; +import org.springblade.core.tool.api.R; import org.springblade.desk.dashboard.pojo.entity.DsPartEntity; import org.springblade.desk.dashboard.pojo.entity.DsSimilarPartsEntity; import org.springblade.desk.dashboard.pojo.vo.DsSimilarPartsVO; @@ -37,7 +40,11 @@ import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseServiceImpl; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** * 相似零件表 服务实现类 @@ -51,6 +58,9 @@ public class DsSimilarPartsServiceImpl extends BaseServiceImpl selectDsSimilarPartsPage(IPage page, DsSimilarPartsVO dsSimilarParts) { List dsSimilarPartsList = baseMapper.selectDsSimilarPartsPage(page, dsSimilarParts); @@ -75,4 +85,31 @@ public class DsSimilarPartsServiceImpl extends BaseServiceImpl list) { + if (CollectionUtils.isEmpty(list)) { + throw new ServiceException("Excel文件中没有数据"); + } + + List similarPartsList = new ArrayList<>(); + for (DsSimilarPartsVO dsSimilarPartsVO : list) { + DsPartEntity partOne = partService.selectDsPartByPatCode(dsSimilarPartsVO.getPartOneCode()); + DsPartEntity partTwo = partService.selectDsPartByPatCode(dsSimilarPartsVO.getPartTwoCode()); + if(null != partOne && null != partTwo){ + DsSimilarPartsEntity dsSimilarPartsEntity = new DsSimilarPartsEntity(); + dsSimilarPartsEntity.setPartOne(partOne.getId()); + dsSimilarPartsEntity.setPartTwo(partTwo.getId()); + similarPartsList.add(dsSimilarPartsEntity); + }else { + throw new ServiceException("请检查零件号: "+dsSimilarPartsVO.getPartOneCode()+" 或 "+dsSimilarPartsVO.getPartTwoCode()); + } + } + // 4. 批量保存 + saveBatch(similarPartsList); + return true; + } + + + + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsSpecialProServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsSpecialProServiceImpl.java index d2a769c4e..176b9ba29 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsSpecialProServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsSpecialProServiceImpl.java @@ -25,16 +25,28 @@ */ package org.springblade.desk.dashboard.service.impl; +import cn.hutool.core.stream.CollectorUtil; +import org.springblade.core.log.exception.ServiceException; +import org.springblade.core.tool.utils.Func; +import org.springblade.desk.dashboard.pojo.entity.BsWorkCenterEntity; import org.springblade.desk.dashboard.pojo.entity.DsSpecialProEntity; import org.springblade.desk.dashboard.pojo.vo.DsSpecialProVO; import org.springblade.desk.dashboard.excel.DsSpecialProExcel; import org.springblade.desk.dashboard.mapper.DsSpecialProMapper; +import org.springblade.desk.dashboard.service.IBsWorkCenterService; import org.springblade.desk.dashboard.service.IDsSpecialProService; +import org.springblade.system.feign.IUserClient; +import org.springblade.system.pojo.entity.User; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseServiceImpl; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** * 特殊过程表 服务实现类 @@ -45,6 +57,12 @@ import java.util.List; @Service public class DsSpecialProServiceImpl extends BaseServiceImpl implements IDsSpecialProService { + @Autowired + IBsWorkCenterService workCenterService; + + @Autowired + IUserClient userClient; + @Override public IPage selectDsSpecialProPage(IPage page, DsSpecialProVO dsSpecialPro) { return page.setRecords(baseMapper.selectDsSpecialProPage(page, dsSpecialPro)); @@ -60,4 +78,42 @@ public class DsSpecialProServiceImpl extends BaseServiceImpl list) { + if(CollectionUtils.isEmpty(list)){ + throw new ServiceException("Excel文件中没有数据"); + } + List specialProList = new ArrayList<>(); + for (DsSpecialProExcel dsSpecialProExcel : list) { + if(null == dsSpecialProExcel.getWcCode() || null == dsSpecialProExcel.getEquipmentCode()){ + throw new ServiceException("作业中心编码或产线编码不允许为空"); + } + BsWorkCenterEntity workCenterEntity = workCenterService.selectBsWorkCenterByWcCode(dsSpecialProExcel.getWcCode()); + if(null == workCenterEntity){ + throw new ServiceException("作业中心编码: "+dsSpecialProExcel.getWcCode()+"不存在"); + } + if(null == dsSpecialProExcel.getProMan()){ + throw new ServiceException("工艺员不能为空"); + } + User user = userClient.userInfo(Func.toLong(dsSpecialProExcel.getProMan())).getData().getUser(); + if(null == user){ + throw new ServiceException("工艺员: "+dsSpecialProExcel.getProMan()+" 不存在"); + } + + //todo 验证产线是否存在 + DsSpecialProEntity dsSpecialProEntity = new DsSpecialProEntity(); + dsSpecialProEntity.setWcId(workCenterEntity.getId()); + dsSpecialProEntity.setEquipmentCode(dsSpecialProExcel.getEquipmentCode()); + dsSpecialProEntity.setProItem(dsSpecialProExcel.getProItem()); + dsSpecialProEntity.setCondition(dsSpecialProExcel.getCondition()); + dsSpecialProEntity.setLastDueTime(dsSpecialProExcel.getLastDueTime()); + dsSpecialProEntity.setRemDays(dsSpecialProExcel.getRemDays()); + dsSpecialProEntity.setProMan(user.getId()); + dsSpecialProEntity.setRemarks(dsSpecialProExcel.getRemarks()); + specialProList.add(dsSpecialProEntity); + } + saveBatch(specialProList); + return true; + } + } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java index 9de92186f..e57b7e291 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/service/impl/DsTaskingServiceImpl.java @@ -27,7 +27,6 @@ package org.springblade.desk.dashboard.service.impl; import com.alibaba.fastjson2.JSONObject; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.math3.random.ValueServer; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; @@ -50,8 +49,6 @@ import org.springblade.core.mp.base.BaseServiceImpl; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; -import javax.xml.crypto.Data; -import java.net.DatagramSocket; import java.sql.Connection; import java.sql.SQLException; import java.util.*; @@ -409,6 +406,8 @@ public class DsTaskingServiceImpl extends BaseServiceImpl idList = partRelationEntityList.stream() .map(DsPartRelationEntity::getChildPartId) .collect(Collectors.toList()); - List dsPartEntityList = partService.selectDsPartByIds(idList); - dsPartSynthesisVO.setDsPartEntities(dsPartEntityList); + if(!CollectionUtils.isEmpty(idList)){ + List dsPartEntityList = partService.selectDsPartByIds(idList); + dsPartSynthesisVO.setDsPartEntities(dsPartEntityList); + } } dsPartSynthesisVO.setDsPartEntity(partEntity); + dsPartSynthesisVO.setPartVersion(dsTaskingEntity.getVersion()); return dsPartSynthesisVO; } @@ -585,10 +587,8 @@ public class DsTaskingServiceImpl extends BaseServiceImpl zPartList, DsCraftEntity craft, List processList, List deleteIds) { + public boolean authorizedAccomplish( DsCraftEntity craft, List processList, List deleteIds) { - //零件 - partService.updateDsPart(dsPart,zPartList); //工艺 craftService.addOrEdit(craft); //工序 @@ -600,21 +600,27 @@ public class DsTaskingServiceImpl extends BaseServiceImpl processProjectEntityList, List deleteIds) { processProjectService.saveProcessProjectSave(processEntity,processProjectEntityList); - processProjectService.deleteLogic(deleteIds); + if(!CollectionUtils.isEmpty(deleteIds)){ + processProjectService.deleteLogic(deleteIds); + } return true; } @Override public boolean saveProcessMeasuringTool(DsProcessEntity processEntity, List processMeasuringToolEntities, List deleteIds) { processMeasuringToolService.saveProcessMeasuringTool(processEntity,processMeasuringToolEntities); - processMeasuringToolService.deleteLogic(deleteIds); + if(!CollectionUtils.isEmpty(deleteIds)){ + processProjectService.deleteLogic(deleteIds); + } return true; } @Override public boolean saveProcessMoldTool(DsProcessEntity processEntity, List processMoldToolEntities, List deleteIds) { processMoldToolService.saveProcessMoldTool(processEntity,processMoldToolEntities); - processMoldToolService.deleteLogic(deleteIds); + if(!CollectionUtils.isEmpty(deleteIds)){ + processProjectService.deleteLogic(deleteIds); + } return true; } @@ -724,6 +730,14 @@ public class DsTaskingServiceImpl extends BaseServiceImpl zPartList) { + + //零件 + partService.updateDsPart(dsPart,zPartList); + return true; + } + /** * 处理单个返工任务 * 对应: loop 循环内的处理逻辑 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/utils/DateUtils.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/utils/DateUtils.java new file mode 100644 index 000000000..cec40ce09 --- /dev/null +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/dashboard/utils/DateUtils.java @@ -0,0 +1,266 @@ +package org.springblade.desk.dashboard.utils; + +import org.apache.commons.lang3.time.DateFormatUtils; + +import java.lang.management.ManagementFactory; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.*; +import java.util.Calendar; +import java.util.Date; + +/** + * 时间工具类 + * + * @author ruoyi + */ +public class DateUtils extends org.apache.commons.lang3.time.DateUtils +{ + public static String YYYY = "yyyy"; + + public static String YYYY_MM = "yyyy-MM"; + + public static String YYYY_MM_DD = "yyyy-MM-dd"; + + public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss"; + + public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; + + private static String[] parsePatterns = { + "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", + "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", + "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"}; + + /** + * 获取当前Date型日期 + * + * @return Date() 当前日期 + */ + public static Date getNowDate() + { + return new Date(); + } + + /** + * 获取当前日期, 默认格式为yyyy-MM-dd + * + * @return String + */ + public static String getDate() + { + return dateTimeNow(YYYY_MM_DD); + } + + public static final String getTime() + { + return dateTimeNow(YYYY_MM_DD_HH_MM_SS); + } + + public static final String dateTimeNow() + { + return dateTimeNow(YYYYMMDDHHMMSS); + } + + public static final String dateTimeNow(final String format) + { + return parseDateToStr(format, new Date()); + } + + public static final String dateTime(final Date date) + { + return parseDateToStr(YYYY_MM_DD, date); + } + + public static final String parseDateToStr(final String format, final Date date) + { + return new SimpleDateFormat(format).format(date); + } + + public static final Date dateTime(final String format, final String ts) + { + try + { + return new SimpleDateFormat(format).parse(ts); + } + catch (ParseException e) + { + throw new RuntimeException(e); + } + } + + /** + * 日期路径 即年/月/日 如2018/08/08 + */ + public static final String datePath() + { + Date now = new Date(); + return DateFormatUtils.format(now, "yyyy/MM/dd"); + } + + /** + * 日期路径 即年/月/日 如20180808 + */ + public static final String dateTime() + { + Date now = new Date(); + return DateFormatUtils.format(now, "yyyyMMdd"); + } + + /** + * 日期型字符串转化为日期 格式 + */ + public static Date parseDate(Object str) + { + if (str == null) + { + return null; + } + try + { + return parseDate(str.toString(), parsePatterns); + } + catch (ParseException e) + { + return null; + } + } + + /** + * 获取服务器启动时间 + */ + public static Date getServerStartDate() + { + long time = ManagementFactory.getRuntimeMXBean().getStartTime(); + return new Date(time); + } + + /** + * 计算相差天数 + */ + public static int differentDaysByMillisecond(Date date1, Date date2) + { + return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24))); + } + + /** + * 计算相差天数 分钟 + */ + public static int differentDaysByMin(Date date1, Date date2) + { + return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 60 ))); + } + + + /** + * 计算时间差 + * + * @param endDate 最后时间 + * @param startTime 开始时间 + * @return 时间差(天/小时/分钟) + */ + public static String timeDistance(Date endDate, Date startTime) + { + long nd = 1000 * 24 * 60 * 60; + long nh = 1000 * 60 * 60; + long nm = 1000 * 60; + // long ns = 1000; + // 获得两个时间的毫秒时间差异 + long diff = endDate.getTime() - startTime.getTime(); + // 计算差多少天 + long day = diff / nd; + // 计算差多少小时 + long hour = diff % nd / nh; + // 计算差多少分钟 + long min = diff % nd % nh / nm; + // 计算差多少秒//输出结果 + // long sec = diff % nd % nh % nm / ns; + return day + "天" + hour + "小时" + min + "分钟"; + } + + /** + * 增加 LocalDateTime ==> Date + */ + public static Date toDate(LocalDateTime temporalAccessor) + { + ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault()); + return Date.from(zdt.toInstant()); + } + + /** + * 增加 LocalDate ==> Date + */ + public static Date toDate(LocalDate temporalAccessor) + { + LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0)); + ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault()); + return Date.from(zdt.toInstant()); + } + + /** + * 当前时刻在两个时间之间 + * + * @param beginDate 开始时间 2018-05-10 00:00:00 + * @param endDate 结束时间 2019-05-10 00:00:00 + * @return 是否在这两个时间之内 + */ + public static boolean nowIsBetween(Date beginDate, Date endDate) { + if (beginDate == null || endDate == null) { + return false; + } + + LocalDateTime begin = beginDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + LocalDateTime end = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + + LocalDateTime now = LocalDateTime.now(); + if (begin.isBefore(now) && end.isAfter(now)) { + return true; + } + return false; + } + + public static Date getStartTime(Date date) { + if(date == null){ + return null; + } + Calendar c = Calendar.getInstance(); + c.setTime(date); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + c.set(Calendar.MILLISECOND, 0); + return c.getTime(); + } + + /** + * 获取时间的最后一刻 + * + * @param date 时间 + * @return 时间的最后一刻 + */ + public static Date getEndTime(Date date) { + if(date == null){ + return null; + } + Calendar c = Calendar.getInstance(); + c.setTime(date); + c.set(Calendar.HOUR_OF_DAY, 23); + c.set(Calendar.MINUTE, 59); + c.set(Calendar.SECOND, 59); + return c.getTime(); + } + + //比较两个时间 取其大 + public static Date compareDates(Date date1, Date date2) { + if (date1.before(date2)) { + // date1在date2之前 + return date2; + } else if (date1.after(date2)) { + // date1在date2之后 + return date1; + } else { + // date1和date2相等 + return date1; + } + } + +} diff --git a/blade-service/blade-desk/src/main/resources/Excel/QA/ImportTemplate-CycleTestItem.xls b/blade-service/blade-desk/src/main/resources/Excel/QA/ImportTemplate-CycleTestItem.xls index d2a6afaa8510630397cafd8f4f336b8e0f6dfaa6..7f9c5c83cc57205d1c05bc40a1f5609240045394 100644 GIT binary patch delta 48 zcmZoT!Pszuaf1dEKN|yM4nrzK9z#Au84yo4WJ=sTgXu~<$A&dZnH{Nj7&n(B^)Lbe DTCER^ delta 39 vcmZoT!Pszuaf1dEI}-z=UwUZ8WJjj($pK74n`baxiJ#1C%dxp6sfQ5&_m&Kp diff --git a/blade-service/blade-desk/src/main/resources/Excel/QA/工序导入模板.xls b/blade-service/blade-desk/src/main/resources/Excel/QA/工序导入模板.xls new file mode 100644 index 0000000000000000000000000000000000000000..d27448bc3df17fa217d9ecd0e73621957ef5174d GIT binary patch literal 19456 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 N748wo3&MY<`)`8I))D{! literal 0 HcmV?d00001 diff --git a/blade-service/blade-desk/src/main/resources/Excel/QA/相似零件导入模板.xls b/blade-service/blade-desk/src/main/resources/Excel/QA/相似零件导入模板.xls new file mode 100644 index 0000000000000000000000000000000000000000..4ee9eaf77bd68cf9e70b714f911a30731ac187bb GIT binary patch literal 8963 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