From 12115fe05b8d804509124ee54a189403c44ffc3a Mon Sep 17 00:00:00 2001 From: pangyang <475446853@qq.com> Date: Wed, 4 Mar 2026 16:56:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A7=BD=E6=B6=B2=E5=A4=84=E7=90=86=E9=9C=80?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=87=8F=E5=AD=97=E6=AE=B5=E8=B5=8B=E5=80=BC?= =?UTF-8?q?=EF=BC=8C=E6=A7=BD=E6=B6=B2=E6=8A=A5=E5=91=8A=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=EF=BC=8C=E5=88=86=E6=B4=BE=E8=A7=84=E5=88=99=E6=96=B0=E5=A2=9E?= =?UTF-8?q?bug=E5=A4=84=E7=90=86=EF=BC=8C=E6=96=B0=E5=A2=9E=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basic/pojo/entity/BsAssignEntity.java | 2 +- .../desk/basic/pojo/vo/BsAssignVO.java | 1 + .../pojo/entity/LiquidTankTaskCopy.java | 4 + .../scheduling/feign/IWorkOrderClient.java | 12 + .../feign/IWorkOrderClientFallback.java | 11 + .../basic/controller/BsAssignController.java | 115 ++++++++ .../desk/basic/mapper/AssignMapper.xml | 26 +- .../desk/basic/mapper/BsAssignMapper.java | 2 +- .../service/impl/BsAssignServiceImpl.java | 231 +++++++++------ .../controller/LiquidTankController.java | 91 ++++-- .../LiquidTankTaskCopyController.java | 53 +++- .../desk/quality/mapper/ReviewSheetMapper.xml | 6 +- .../impl/LiquidTankTaskCopyServiceImpl.java | 2 +- .../impl/LiquidTankTaskServiceImpl.java | 2 +- .../desk/quality/util/FullMergeExcelUtil.java | 279 ++++++++++++++++++ .../main/resources/Excel/QA/槽液信息.xls | Bin 0 -> 8192 bytes .../scheduling/feign/WorkOrderClient.java | 22 +- 17 files changed, 729 insertions(+), 130 deletions(-) create mode 100644 blade-service/blade-desk/src/main/java/org/springblade/desk/quality/util/FullMergeExcelUtil.java create mode 100644 blade-service/blade-desk/src/main/resources/Excel/QA/槽液信息.xls diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/entity/BsAssignEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/entity/BsAssignEntity.java index 4e741f0a..1777e11e 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/entity/BsAssignEntity.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/entity/BsAssignEntity.java @@ -74,7 +74,7 @@ public class BsAssignEntity extends BaseEntity { * 生产标识id */ @Schema(description = "生产标识id") - private BigDecimal prodMarkId; + private String prodMarkId; /** * 单面积上限 */ diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/vo/BsAssignVO.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/vo/BsAssignVO.java index 455100cf..45f1120a 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/vo/BsAssignVO.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/vo/BsAssignVO.java @@ -45,5 +45,6 @@ public class BsAssignVO extends BsAssignEntity { private String areaName; private String limitAreaName; + private String createUserName; } diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTankTaskCopy.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTankTaskCopy.java index 8c9145c2..5afe627d 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTankTaskCopy.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTankTaskCopy.java @@ -531,5 +531,9 @@ public class LiquidTankTaskCopy extends BaseEntity { @Schema(description = "有效期") private LocalDate validDate; + @Schema(description = "药品添加人签名") + private String drugAddUserSign; + @Schema(description = "药品监督人签名") + private String drugSuUserSign; } diff --git a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/feign/IWorkOrderClient.java b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/feign/IWorkOrderClient.java index 18ea0dfd..5a4b6ce7 100644 --- a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/feign/IWorkOrderClient.java +++ b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/feign/IWorkOrderClient.java @@ -3,10 +3,13 @@ package org.springblade.scheduling.feign; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.tool.api.R; import org.springblade.scheduling.config.NoRetryFeignConfig; +import org.springblade.scheduling.pojo.entity.QualityGradeEntity; import org.springblade.scheduling.pojo.vo.GlassCakeOrderPageQuery; import org.springblade.scheduling.pojo.vo.WorkOrderVO; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; /** * TODO:功能描述 @@ -29,6 +32,10 @@ public interface IWorkOrderClient { String GLASS_CAKE_ORDER = API_PREFIX + "/glassCakeOrderPage"; + String GLASS_CAKE_QUALITY = API_PREFIX + "/getById"; + + String GLASS_CAKE_QUALITY_NAME = API_PREFIX + "/getByName"; + /** * 排产 * @@ -41,4 +48,9 @@ public interface IWorkOrderClient { @GetMapping(GLASS_CAKE_ORDER) R> selectGlassCakeOrderPage(GlassCakeOrderPageQuery glassCakeOrderPageQuery); + @PostMapping(GLASS_CAKE_QUALITY) + R getById(@RequestBody Long id); + + @PostMapping(GLASS_CAKE_QUALITY_NAME) + R getByName(@RequestBody String name); } diff --git a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/feign/IWorkOrderClientFallback.java b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/feign/IWorkOrderClientFallback.java index bf70c0c5..1dda1bee 100644 --- a/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/feign/IWorkOrderClientFallback.java +++ b/blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/feign/IWorkOrderClientFallback.java @@ -28,6 +28,7 @@ package org.springblade.scheduling.feign; import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; +import org.springblade.scheduling.pojo.entity.QualityGradeEntity; import org.springblade.scheduling.pojo.vo.GlassCakeOrderPageQuery; import org.springblade.scheduling.pojo.vo.WorkOrderVO; import org.springframework.stereotype.Component; @@ -54,4 +55,14 @@ public class IWorkOrderClientFallback implements IWorkOrderClient { public R> selectGlassCakeOrderPage(GlassCakeOrderPageQuery glassCakeOrderPageQuery) { return R.fail("获取玻璃饼订单失败"); } + + @Override + public R getById(Long id) { + return null; + } + + @Override + public R getByName(String name) { + return null; + } } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/BsAssignController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/BsAssignController.java index e60b07b3..a306c130 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/BsAssignController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/BsAssignController.java @@ -34,6 +34,9 @@ import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.extern.slf4j.Slf4j; import org.springblade.core.boot.ctrl.BladeController; import org.springblade.core.excel.util.ExcelUtil; import org.springblade.core.mp.support.Condition; @@ -56,6 +59,8 @@ import org.springblade.desk.basic.util.ExcelExtUtil; import org.springblade.desk.basic.wrapper.BsAssignWrapper; import org.springblade.scheduling.pojo.entity.CraftAbilityEntity; import org.springblade.system.cache.DictCache; +import org.springblade.system.feign.IUserClient; +import org.springblade.system.pojo.entity.User; import org.springframework.core.io.Resource; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -65,6 +70,8 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; + /** * 分派规则维护 控制器 * @@ -75,6 +82,9 @@ import java.util.Map; @AllArgsConstructor @RequestMapping("/bsAssign") @Tag(name = "分派规则维护", description = "分派规则维护接口") +@Data +@EqualsAndHashCode(callSuper = true) +@Slf4j public class BsAssignController extends BladeController { private final IBsAssignService bsAssignService; @@ -82,6 +92,8 @@ public class BsAssignController extends BladeController { private final IOemService service; @jakarta.annotation.Resource private IWorkCenterService centerService; + @jakarta.annotation.Resource + private IUserClient iUserClient; /** * 分派规则维护 详情 */ @@ -115,7 +127,12 @@ public class BsAssignController extends BladeController { for(BsAssignVO vo:list){ vo.setAreaName(vo.getLowArea()+"~"+vo.getUpArea()); vo.setLimitAreaName(vo.getSingleDownArea()+"~"+vo.getSingleUpArea()); + R user = iUserClient.userInfoById(vo.getCreateUser()); + vo.setCreateUserName(user.getData().getRealName()); } + pages.getRecords() + .stream() + .collect(Collectors.toList()); return R.data(pages); } @@ -149,6 +166,104 @@ public class BsAssignController extends BladeController { @ApiOperationSupport(order = 5) @Operation(summary = "修改", description = "传入bsAssign") public R update(@Valid @RequestBody BsAssignEntity bsAssign) { + + List list = bsAssignService.list(); + List traversedList = new ArrayList<>(); + + // 获取当前数据的单面积上限 + BigDecimal currentUpperArea = bsAssign.getUpArea(); + // 获取当前数据的单面积下限 + BigDecimal currentLowArea = bsAssign.getLowArea(); + //单批面积上限 + BigDecimal singleUpArea = bsAssign.getSingleUpArea(); + //单批面积下限 + BigDecimal singleLowArea = bsAssign.getSingleDownArea(); + + Long currentCraftId = bsAssign.getCraftAbilityId(); + + + for(BsAssignEntity entity:list){ + if(entity.getId() == bsAssign.getId()){ + continue; + } + + + // 检查当前数据的上限是否在已遍历数据的任意区间内 + for (BsAssignEntity traversed : traversedList) { + BigDecimal traversedLowerArea = traversed.getLowArea(); + BigDecimal traversedUpperArea = traversed.getUpArea(); + + //单批面积上限 + BigDecimal traversedSingleUpArea = traversed.getSingleUpArea(); + //单批面积下限 + BigDecimal traversedSingleLowArea = traversed.getSingleDownArea(); + + Long traversedCraftId = traversed.getCraftAbilityId(); + + if(currentCraftId.equals(traversedCraftId)){ + // 核心判断:当前上限 是否在 已遍历数据的[下限, 上限]区间内 + if((currentLowArea.compareTo(traversedLowerArea)==1 && currentLowArea.compareTo(traversedUpperArea)==-1) + || (currentUpperArea.compareTo(traversedLowerArea)==1 && currentUpperArea.compareTo(traversedUpperArea)==-1)){ + return R.fail("单面积上下限已存在,请检查数据"); + } + + if(currentLowArea.compareTo(traversedLowerArea)<=0 + && (currentUpperArea.compareTo(traversedLowerArea)>=0 && currentUpperArea.compareTo(traversedUpperArea)<=0)){ + return R.fail("单面积上下限已存在,请检查数据"); + } + + if((currentLowArea.compareTo(traversedLowerArea)>=0 && currentLowArea.compareTo(traversedUpperArea)<=0) + && currentUpperArea.compareTo(traversedUpperArea)>=0){ + return R.fail("单面积上下限已存在,请检查数据"); + } + + if(currentLowArea.compareTo(traversedLowerArea)<=0 + && currentUpperArea.compareTo(traversedUpperArea)>=0){ + return R.fail("单面积上下限已存在,请检查数据"); + } + + if(currentLowArea.compareTo(traversedLowerArea)==0 + && currentUpperArea.compareTo(traversedUpperArea)==0){ + return R.fail("单面积上下限已存在,请检查数据"); + } + + if((singleLowArea.compareTo(traversedSingleLowArea)==1 && singleLowArea.compareTo(traversedSingleUpArea)==-1) || + (singleUpArea.compareTo(traversedSingleLowArea)==1 && singleUpArea.compareTo(traversedSingleUpArea)==-1)){ + return R.fail("单批面积上下限已存在,请检查数据"); + } + + if(singleLowArea.compareTo(traversedSingleLowArea)<=0 + && (singleUpArea.compareTo(traversedSingleLowArea)>=0 && singleUpArea.compareTo(traversedSingleUpArea)<=0)){ + return R.fail("单批面积上下限已存在,请检查数据"); + } + + if((singleLowArea.compareTo(traversedSingleLowArea)>=0 && currentLowArea.compareTo(traversedSingleUpArea)<=0) + && singleUpArea.compareTo(traversedSingleUpArea)>=0){ + return R.fail("单批面积上下限已存在,请检查数据"); + } + + if(singleLowArea.compareTo(traversedSingleLowArea)<=0 + && singleUpArea.compareTo(traversedSingleUpArea)>=0){ + return R.fail("单批面积上下限已存在,请检查数据"); + } + + if(singleLowArea.compareTo(traversedSingleLowArea)==0 && + singleUpArea.compareTo(traversedSingleUpArea)==0){ + return R.fail("单批面积上下限已存在,请检查数据"); + } + } + + + +// if(singleUpArea.compareTo(traversedSingleLowArea)>=0 && singleUpArea.compareTo(traversedSingleUpArea)<=0){ +// return R.fail("单批面积上限已存在,请检查数据"); +// } + } + // 未匹配,将当前数据加入已遍历集合,继续下一条 + traversedList.add(entity); + System.out.println("未匹配到已遍历区间,将当前数据加入已遍历集合"); + } + return R.status(bsAssignService.updateById(bsAssign)); } diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/AssignMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/AssignMapper.xml index dd5b7ccb..219c199c 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/AssignMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/AssignMapper.xml @@ -31,8 +31,32 @@ - select * from BS_ASSIGN where is_deleted = 0 + + + AND craft_ability_id = #{bsAssign.craftAbilityId} + + + AND part_code LIKE CONCAT('%', CONCAT(#{bsAssign.partCode}, '%')) + + + + AND limit_type = #{bsAssign.limitType} + + + + AND point_type = #{bsAssign.pointType} + + + + AND oem_id = #{bsAssign.oemId} + + + + AND center_id = #{bsAssign.centerId} + + diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/BsAssignMapper.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/BsAssignMapper.java index 1ca3b31c..3af1ae20 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/BsAssignMapper.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/BsAssignMapper.java @@ -51,7 +51,7 @@ public interface BsAssignMapper extends BaseMapper { * @param bsAssign 查询参数 * @return List */ - List selectBsAssignPage(IPage page, BsAssignVO bsAssign); + List selectBsAssignPage(IPage page, @Param("bsAssign") BsAssignVO bsAssign); /** diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/BsAssignServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/BsAssignServiceImpl.java index 55eecf65..845e70fe 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/BsAssignServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/BsAssignServiceImpl.java @@ -42,13 +42,17 @@ import org.springblade.desk.basic.service.IBsAssignService; import org.springblade.desk.basic.service.ICraftAbilityService; import org.springblade.desk.basic.service.IOemService; import org.springblade.desk.basic.service.IWorkCenterService; +import org.springblade.scheduling.feign.IWorkOrderClient; import org.springblade.scheduling.pojo.entity.CraftAbilityEntity; +import org.springblade.scheduling.pojo.entity.QualityGradeEntity; import org.springblade.system.cache.DictCache; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; /** * 分派规则维护 服务实现类 @@ -64,6 +68,8 @@ public class BsAssignServiceImpl extends BaseServiceImpl selectBsAssignPage(IPage page, BsAssignVO bsAssign) { return page.setRecords(baseMapper.selectBsAssignPage(page, bsAssign)); @@ -86,6 +92,17 @@ public class BsAssignServiceImpl extends BaseServiceImpl names = new ArrayList<>(); + List prodMarkIds = Arrays.asList(prodMarkId.split(",")); + for (String prodMarkId1 : prodMarkIds){ + R entity = iWorkOrderClient.getById(Long.parseLong(prodMarkId1)); + names.add(entity.getData().getQualityGrade()); + } + String str = names.stream().collect(Collectors.joining(",")); + current.setProdMark(str); + } @@ -106,6 +123,7 @@ public class BsAssignServiceImpl extends BaseServiceImpl=0 && currentUpperArea.compareTo(traversedUpperArea)<=0)){ - return R.fail("单面积上下限已存在,请检查数据"); - } - - if((currentLowArea.compareTo(traversedLowerArea)>=0 && currentLowArea.compareTo(traversedUpperArea)<=0) - && currentUpperArea.compareTo(traversedUpperArea)>=0){ - return R.fail("单面积上下限已存在,请检查数据"); - } - - if(currentLowArea.compareTo(traversedLowerArea)<=0 - && currentUpperArea.compareTo(traversedUpperArea)>=0){ - return R.fail("单面积上下限已存在,请检查数据"); - } - - if(currentLowArea.compareTo(traversedLowerArea)==0 - && currentUpperArea.compareTo(traversedUpperArea)==0){ - return R.fail("单面积上下限已存在,请检查数据"); - } - - if((singleLowArea.compareTo(traversedSingleLowArea)==1 && singleLowArea.compareTo(traversedSingleUpArea)==-1) || - (singleUpArea.compareTo(traversedSingleLowArea)==1 && singleUpArea.compareTo(traversedSingleUpArea)==-1)){ - return R.fail("单批面积上下限已存在,请检查数据"); - } - if(singleLowArea.compareTo(traversedSingleLowArea)<=0 - && (singleUpArea.compareTo(traversedSingleLowArea)>=0 && singleUpArea.compareTo(traversedSingleUpArea)<=0)){ - return R.fail("单批面积上下限已存在,请检查数据"); + Long traversedCraftId = traversed.getCraftAbilityId(); + + if(currentCraftId.equals(traversedCraftId)){ + // 核心判断:当前上限 是否在 已遍历数据的[下限, 上限]区间内 + if((currentLowArea.compareTo(traversedLowerArea)==1 && currentLowArea.compareTo(traversedUpperArea)==-1) + || (currentUpperArea.compareTo(traversedLowerArea)==1 && currentUpperArea.compareTo(traversedUpperArea)==-1)){ + return R.fail("单面积上下限已存在,请检查数据"); + } + + if(currentLowArea.compareTo(traversedLowerArea)<=0 + && (currentUpperArea.compareTo(traversedLowerArea)>=0 && currentUpperArea.compareTo(traversedUpperArea)<=0)){ + return R.fail("单面积上下限已存在,请检查数据"); + } + + if((currentLowArea.compareTo(traversedLowerArea)>=0 && currentLowArea.compareTo(traversedUpperArea)<=0) + && currentUpperArea.compareTo(traversedUpperArea)>=0){ + return R.fail("单面积上下限已存在,请检查数据"); + } + + if(currentLowArea.compareTo(traversedLowerArea)<=0 + && currentUpperArea.compareTo(traversedUpperArea)>=0){ + return R.fail("单面积上下限已存在,请检查数据"); + } + + if(currentLowArea.compareTo(traversedLowerArea)==0 + && currentUpperArea.compareTo(traversedUpperArea)==0){ + return R.fail("单面积上下限已存在,请检查数据"); + } + + if((singleLowArea.compareTo(traversedSingleLowArea)==1 && singleLowArea.compareTo(traversedSingleUpArea)==-1) || + (singleUpArea.compareTo(traversedSingleLowArea)==1 && singleUpArea.compareTo(traversedSingleUpArea)==-1)){ + return R.fail("单批面积上下限已存在,请检查数据"); + } + + if(singleLowArea.compareTo(traversedSingleLowArea)<=0 + && (singleUpArea.compareTo(traversedSingleLowArea)>=0 && singleUpArea.compareTo(traversedSingleUpArea)<=0)){ + return R.fail("单批面积上下限已存在,请检查数据"); + } + + if((singleLowArea.compareTo(traversedSingleLowArea)>=0 && currentLowArea.compareTo(traversedSingleUpArea)<=0) + && singleUpArea.compareTo(traversedSingleUpArea)>=0){ + return R.fail("单批面积上下限已存在,请检查数据"); + } + + if(singleLowArea.compareTo(traversedSingleLowArea)<=0 + && singleUpArea.compareTo(traversedSingleUpArea)>=0){ + return R.fail("单批面积上下限已存在,请检查数据"); + } + + if(singleLowArea.compareTo(traversedSingleLowArea)==0 && + singleUpArea.compareTo(traversedSingleUpArea)==0){ + return R.fail("单批面积上下限已存在,请检查数据"); + } } - if((singleLowArea.compareTo(traversedSingleLowArea)>=0 && currentLowArea.compareTo(traversedSingleUpArea)<=0) - && singleUpArea.compareTo(traversedSingleUpArea)>=0){ - return R.fail("单批面积上下限已存在,请检查数据"); - } - if(singleLowArea.compareTo(traversedSingleLowArea)<=0 - && singleUpArea.compareTo(traversedSingleUpArea)>=0){ - return R.fail("单批面积上下限已存在,请检查数据"); - } - - if(singleLowArea.compareTo(traversedSingleLowArea)==0 && - singleUpArea.compareTo(traversedSingleUpArea)==0){ - return R.fail("单批面积上下限已存在,请检查数据"); - } // if(singleUpArea.compareTo(traversedSingleLowArea)>=0 && singleUpArea.compareTo(traversedSingleUpArea)<=0){ // return R.fail("单批面积上限已存在,请检查数据"); @@ -236,6 +261,17 @@ public class BsAssignServiceImpl extends BaseServiceImpl strs = Arrays.asList(prodmark.split(",")); + List ids = new ArrayList<>(); + for(String str : strs){ + R entity = iWorkOrderClient.getByName(str); + ids.add(entity.getData().getId().toString()); + } + String str = ids.stream().collect(Collectors.joining(",")); + + notice.setProdMarkId(str); + //指定类型 String category = DictCache.getKey("AssignPoint", noticeExcel.getPointTypeName()); notice.setPointType(category); @@ -263,6 +299,8 @@ public class BsAssignServiceImpl extends BaseServiceImpl=0 && currentUpperArea.compareTo(traversedUpperArea)<=0)){ - return R.fail("单面积上下限已存在,请检查数据"); - } - - if((currentLowArea.compareTo(traversedLowerArea)>=0 && currentLowArea.compareTo(traversedUpperArea)<=0) - && currentUpperArea.compareTo(traversedUpperArea)>=0){ - return R.fail("单面积上下限已存在,请检查数据"); - } - - if(currentLowArea.compareTo(traversedLowerArea)<=0 - && currentUpperArea.compareTo(traversedUpperArea)>=0){ - return R.fail("单面积上下限已存在,请检查数据"); - } - if(currentLowArea.compareTo(traversedLowerArea)==0 - && currentUpperArea.compareTo(traversedUpperArea)==0){ - return R.fail("单面积上下限已存在,请检查数据"); + Long traversedCraftId = traversed.getCraftAbilityId(); + + if(currentCraftId.equals(traversedCraftId)){ + // 核心判断:当前上限 是否在 已遍历数据的[下限, 上限]区间内 + if((currentLowArea.compareTo(traversedLowerArea)==1 && currentLowArea.compareTo(traversedUpperArea)==-1) + || (currentUpperArea.compareTo(traversedLowerArea)==1 && currentUpperArea.compareTo(traversedUpperArea)==-1)){ + return R.fail("单面积上下限已存在,请检查数据"); + } + + if(currentLowArea.compareTo(traversedLowerArea)<=0 + && (currentUpperArea.compareTo(traversedLowerArea)>=0 && currentUpperArea.compareTo(traversedUpperArea)<=0)){ + return R.fail("单面积上下限已存在,请检查数据"); + } + + if((currentLowArea.compareTo(traversedLowerArea)>=0 && currentLowArea.compareTo(traversedUpperArea)<=0) + && currentUpperArea.compareTo(traversedUpperArea)>=0){ + return R.fail("单面积上下限已存在,请检查数据"); + } + + if(currentLowArea.compareTo(traversedLowerArea)<=0 + && currentUpperArea.compareTo(traversedUpperArea)>=0){ + return R.fail("单面积上下限已存在,请检查数据"); + } + + if(currentLowArea.compareTo(traversedLowerArea)==0 + && currentUpperArea.compareTo(traversedUpperArea)==0){ + return R.fail("单面积上下限已存在,请检查数据"); + } + + if((singleLowArea.compareTo(traversedSingleLowArea)==1 && singleLowArea.compareTo(traversedSingleUpArea)==-1) || + (singleUpArea.compareTo(traversedSingleLowArea)==1 && singleUpArea.compareTo(traversedSingleUpArea)==-1)){ + return R.fail("单批面积上下限已存在,请检查数据"); + } + + if(singleLowArea.compareTo(traversedSingleLowArea)<=0 + && (singleUpArea.compareTo(traversedSingleLowArea)>=0 && singleUpArea.compareTo(traversedSingleUpArea)<=0)){ + return R.fail("单批面积上下限已存在,请检查数据"); + } + + if((singleLowArea.compareTo(traversedSingleLowArea)>=0 && currentLowArea.compareTo(traversedSingleUpArea)<=0) + && singleUpArea.compareTo(traversedSingleUpArea)>=0){ + return R.fail("单批面积上下限已存在,请检查数据"); + } + + if(singleLowArea.compareTo(traversedSingleLowArea)<=0 + && singleUpArea.compareTo(traversedSingleUpArea)>=0){ + return R.fail("单批面积上下限已存在,请检查数据"); + } + + if(singleLowArea.compareTo(traversedSingleLowArea)==0 && + singleUpArea.compareTo(traversedSingleUpArea)==0){ + return R.fail("单批面积上下限已存在,请检查数据"); + } } - if((singleLowArea.compareTo(traversedSingleLowArea)==1 && singleLowArea.compareTo(traversedSingleUpArea)==-1) || - (singleUpArea.compareTo(traversedSingleLowArea)==1 && singleUpArea.compareTo(traversedSingleUpArea)==-1)){ - return R.fail("单批面积上下限已存在,请检查数据"); - } - - if(singleLowArea.compareTo(traversedSingleLowArea)<=0 - && (singleUpArea.compareTo(traversedSingleLowArea)>=0 && singleUpArea.compareTo(traversedSingleUpArea)<=0)){ - return R.fail("单批面积上下限已存在,请检查数据"); - } - - if((singleLowArea.compareTo(traversedSingleLowArea)>=0 && currentLowArea.compareTo(traversedSingleUpArea)<=0) - && singleUpArea.compareTo(traversedSingleUpArea)>=0){ - return R.fail("单批面积上下限已存在,请检查数据"); - } - if(singleLowArea.compareTo(traversedSingleLowArea)<=0 - && singleUpArea.compareTo(traversedSingleUpArea)>=0){ - return R.fail("单批面积上下限已存在,请检查数据"); - } - if(singleLowArea.compareTo(traversedSingleLowArea)==0 && - singleUpArea.compareTo(traversedSingleUpArea)==0){ - return R.fail("单批面积上下限已存在,请检查数据"); - } +// if(singleUpArea.compareTo(traversedSingleLowArea)>=0 && singleUpArea.compareTo(traversedSingleUpArea)<=0){ +// return R.fail("单批面积上限已存在,请检查数据"); +// } } // 未匹配,将当前数据加入已遍历集合,继续下一条 traversedList.add(current); diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankController.java index e7cc036f..8d7a33ec 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankController.java @@ -25,10 +25,10 @@ import org.springblade.core.tool.utils.BeanUtil; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.desk.basic.excel.TeamSetExcel; -import org.springblade.desk.basic.pojo.entity.Shifts; -import org.springblade.desk.basic.pojo.entity.TeamSet; -import org.springblade.desk.basic.pojo.entity.WorkCenter; -import org.springblade.desk.basic.pojo.entity.WorkTank; +import org.springblade.desk.basic.pojo.entity.*; +import org.springblade.desk.basic.service.IFormulaService; +import org.springblade.desk.basic.service.ITeamSetService; +import org.springblade.desk.basic.service.IWorkCenterService; import org.springblade.desk.basic.service.IWorkTankService; import org.springblade.desk.basic.util.ExcelExtUtil; import org.springblade.desk.quality.constant.QAModuleConst; @@ -37,6 +37,7 @@ import org.springblade.desk.quality.pojo.entity.LiquidTank; import org.springblade.desk.quality.pojo.vo.LiquidTankVO; import org.springblade.desk.quality.service.ILiquidTankService; import org.springblade.desk.quality.wrapper.LiquidTankWrapper; +import org.springblade.system.feign.IUserClient; import org.springblade.system.pojo.entity.User; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -67,6 +68,15 @@ public class LiquidTankController extends BladeController { @Resource private IWorkTankService tankService; + @Resource + private IWorkCenterService centerService; + @Resource + private IFormulaService formulaService; + @Resource + private IUserClient iUserClient; + @Resource + private ITeamSetService teamService; + /** * [槽液] 详情 */ @@ -262,8 +272,8 @@ public class LiquidTankController extends BladeController { @Operation(summary = "下载Excel模板", description = "") public ResponseEntity downloadExcelTemplate() { return ExcelExtUtil.downloadXlsTemplate( - "Excel/QA/ImportTemplate-CycleTestItem.xls", - "导入模版-周期试验项目.xls"); + "Excel/QA/槽液信息.xls", + "导入模版-槽液信息.xls"); } /** @@ -278,34 +288,61 @@ public class LiquidTankController extends BladeController { list.forEach(noticeExcel -> { LiquidTank notice = BeanUtil.copy(noticeExcel, LiquidTank.class); + //工作中心 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("WC_NAME",noticeExcel.getWorkCenterName()); + List centers = centerService.list(queryWrapper); + if(null != centers && centers.size() > 0){ + notice.setWorkCenterId(centers.get(0).getId()); + } -// List userPlanners = iUserClient.listByNameNolike(noticeExcel.getPlannerName()); -// if(null != userPlanners && userPlanners.size() > 0){ -// notice.setPlanner(userPlanners.get(0).getId()); -// } -// -// List userDispatchers = iUserClient.listByNameNolike(noticeExcel.getDispatcherName()); -// if(null != userDispatchers && userDispatchers.size() > 0){ -// notice.setDispatcher(userDispatchers.get(0).getId()); -// } -// -// List userLeaders = iUserClient.listByNameNolike(noticeExcel.getTeamLeaderName()); -// if(null != userLeaders && userLeaders.size() > 0){ -// notice.setTeamLeader(userLeaders.get(0).getId()); -// } -// -// QueryWrapper queryWrapper = new QueryWrapper<>(); -// queryWrapper.eq("name",noticeExcel.getCsName()); -// List shifts = shiftService.list(queryWrapper); -// if(null != shifts && shifts.size() > 0){ -// notice.setCsId(shifts.get(0).getId()); -// } + //作业槽 + QueryWrapper queryWrappertank = new QueryWrapper<>(); + queryWrappertank.eq("NAME",noticeExcel.getWorkTankName()); + List tanks = tankService.list(queryWrappertank); + if(null != tanks && tanks.size() > 0){ + notice.setWorkTankId(tanks.get(0).getId()); + } + //加药量计算公式 + QueryWrapper queryWrapperformulaadd = new QueryWrapper<>(); + queryWrapperformulaadd.eq("NAME",noticeExcel.getAddDrugFormulaName()); + queryWrapperformulaadd.eq("FORMULA_TYPE","1"); + List adds = formulaService.list(queryWrapperformulaadd); + if(null != adds && adds.size() > 0){ + notice.setAddDrugFormulaId(adds.get(0).getId()); + } + //添加后理论值计算公式 + QueryWrapper queryWrapperformulaafter = new QueryWrapper<>(); + queryWrapperformulaafter.eq("NAME",noticeExcel.getAfterTheoryFormulaName()); + queryWrapperformulaafter.eq("FORMULA_TYPE","2"); + List afters = formulaService.list(queryWrapperformulaafter); + if(null != afters && afters.size() > 0){ + notice.setAfterTheoryFormulaId(afters.get(0).getId()); + } + //化验人 + List tests = iUserClient.listByNameNolike(noticeExcel.getTestUserName()); + if(null != tests && tests.size() > 0){ + notice.setTestUserId(tests.get(0).getId()); + } + //工艺主管 + List process = iUserClient.listByNameNolike(noticeExcel.getProcessUserName()); + if(null != process && process.size() > 0){ + notice.setProcessUserId(process.get(0).getId()); + } + //班组 + QueryWrapper queryWrapperteam = new QueryWrapper<>(); + queryWrapperteam.eq("TS_NAME",noticeExcel.getTeamName()); + List teams = teamService.list(queryWrapperteam); + if(null != teams && teams.size() > 0){ + notice.setTeamId(teams.get(0).getId()); + } noticeList.add(notice); }); return R.status(service.saveBatch(noticeList)); } + @PostMapping("/updateUserBat") @ApiOperationSupport(order = 61) @Operation(summary = "批量设置", description = "传入ids") diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankTaskCopyController.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankTaskCopyController.java index b2df0618..7afde493 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankTaskCopyController.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankTaskCopyController.java @@ -31,14 +31,17 @@ import org.springblade.desk.basic.constant.BaseRequest; import org.springblade.desk.quality.constant.LiquidTankTaskConst; import org.springblade.desk.quality.constant.QAModuleConst; import org.springblade.desk.quality.excel.LiquidTankTaskCopyExcel; -import org.springblade.desk.quality.pojo.entity.LiquidTank; -import org.springblade.desk.quality.pojo.entity.LiquidTankTask; -import org.springblade.desk.quality.pojo.entity.LiquidTankTaskCopy; +import org.springblade.desk.quality.pojo.entity.*; +import org.springblade.desk.quality.pojo.vo.LiquidTankReportDetailVO; import org.springblade.desk.quality.pojo.vo.LiquidTankTaskCopyVO; import org.springblade.desk.quality.pojo.vo.LiquidTankWaveDrawVO; import org.springblade.desk.quality.pojo.vo.LiquidTankWaveDrawSingleVO; +import org.springblade.desk.quality.service.ILiquidTankReportConfigService; +import org.springblade.desk.quality.service.ILiquidTankReportService; import org.springblade.desk.quality.service.ILiquidTankService; import org.springblade.desk.quality.service.ILiquidTankTaskCopyService; +import org.springblade.desk.quality.util.FullMergeExcelUtil; +import org.springblade.desk.quality.wrapper.LiquidTankReportDetailWrapper; import org.springblade.desk.quality.wrapper.LiquidTankTaskCopyWrapper; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -344,6 +347,50 @@ public class LiquidTankTaskCopyController extends BladeController { "[槽液检测任务复制]数据表", list, LiquidTankTaskCopyExcel.class); } + @Resource + private ILiquidTankReportService reportService; + @Resource + private ILiquidTankReportConfigService configService; + + @GetMapping("/exportData") + @ApiOperationSupport(order = 70) + @Operation(summary = "导出Excel", description = "传入LiquidTankTaskCopy") + public void exportData(Long id, + HttpServletResponse response) { + LiquidTankReport report = reportService.getById(id); + + List list = service.getListByLiquidTankReportId(report.getId()); + + Long centerId = list.get(0).getWorkCenterId(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("WC_ID",centerId); + List rule = configService.list(queryWrapper); + String name = ""; + if(null != rule && rule.size() > 0){ + name = rule.get(0).getNamePrefix(); + } + + + try { + FullMergeExcelUtil.exportUserExcel( + response, + "槽液检测报告", + name, + new String[]{"取样时间", "温度(℃)", "槽号", "体积(L)", "分析项目", "规范下限(g/L)", "目标下限(g/L)", + "添加点(g/L)", "目标值(g/L)","目标上限(g/L)","规范上限(g/L)","化验频率","化验值(g/L)", + "药品计算公式","药品添加量","药品批次号","药品监督员签名","药品添加人签名","调整后化验值(g/L)", + "是否合格","有效期","超出规范极限调整后的结果","槽液清理记录","控制规范"}, + list, + new int[]{0} + ); + } catch (Exception e) { + throw new RuntimeException(e); + } + + + } + /** * [槽液检测任务复制] 下载Excel模板 */ diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/ReviewSheetMapper.xml b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/ReviewSheetMapper.xml index 5cc3b195..28b903cc 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/ReviewSheetMapper.xml +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/ReviewSheetMapper.xml @@ -74,7 +74,7 @@ -- 车间订单 wo LEFT JOIN MES_WORK_ORDER wo ON rs.WO_ID = wo.ID -- 外协厂商 oem - LEFT JOIN BA_OEM oem ON wp.OC_ID = oem.ID + LEFT JOIN BS_OEM oem ON wp.OC_ID = oem.ID WHERE ( rs.IS_DELETED = 0 -- AND wp.IS_DELETED = 0 @@ -150,7 +150,7 @@ -- 车间订单 wo LEFT JOIN MES_WORK_ORDER wo ON rs.WO_ID = wo.ID -- 外协厂商 oem - LEFT JOIN BA_OEM oem ON wp.OC_ID = oem.ID + LEFT JOIN BS_OEM oem ON wp.OC_ID = oem.ID WHERE ( rs.IS_DELETED = 0 -- AND wp.IS_DELETED = 0 @@ -208,7 +208,7 @@ -- 车间订单 wo LEFT JOIN MES_WORK_ORDER wo ON rs.WO_ID = wo.ID -- 外协厂商 oem - LEFT JOIN BA_OEM oem ON wp.OC_ID = oem.ID + LEFT JOIN BS_OEM oem ON wp.OC_ID = oem.ID WHERE ( rs.IS_DELETED = 0 -- AND wp.IS_DELETED = 0 diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/LiquidTankTaskCopyServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/LiquidTankTaskCopyServiceImpl.java index a50a9b61..62143456 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/LiquidTankTaskCopyServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/LiquidTankTaskCopyServiceImpl.java @@ -163,7 +163,7 @@ public class LiquidTankTaskCopyServiceImpl extends BaseServiceImpl userList, int[] mergeColumnIndexes) throws Exception { + // 1. 创建工作簿和工作表 + Workbook workbook = new XSSFWorkbook(); + Sheet sheet = workbook.createSheet("数据报表"); + // 设置列宽 + for (int i = 0; i < columnTitles.length; i++) { + sheet.autoSizeColumn(i); + sheet.setColumnWidth(i, Math.max(sheet.getColumnWidth(i), 2000)); + } + + // -------------------------- 第一步:创建合并标头 -------------------------- + Row mergeTitleRow = sheet.createRow(0); + mergeTitleRow.setHeightInPoints(30); + Cell mergeTitleCell = mergeTitleRow.createCell(0); + mergeTitleCell.setCellValue(mergeTitle); + CellStyle mergeTitleStyle = createStyle(workbook, true, (short) 16, HorizontalAlignment.CENTER); + mergeTitleCell.setCellStyle(mergeTitleStyle); + sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, columnTitles.length - 1)); + + // -------------------------- 第二步:创建列标题 -------------------------- + Row columnTitleRow = sheet.createRow(1); + columnTitleRow.setHeightInPoints(20); + CellStyle columnTitleStyle = createStyle(workbook, true, (short) 12, HorizontalAlignment.CENTER); + for (int i = 0; i < columnTitles.length; i++) { + Cell cell = columnTitleRow.createCell(i); + cell.setCellValue(columnTitles[i]); + cell.setCellStyle(columnTitleStyle); + sheet.autoSizeColumn(i); + } + + // -------------------------- 第三步:填充User实体数据 -------------------------- + int dataStartRow = 2; + CellStyle dataStyle = createStyle(workbook, false, (short) 12, HorizontalAlignment.CENTER); + for (int i = 0; i < userList.size(); i++) { + Row dataRow = sheet.createRow(dataStartRow + i); + dataRow.setHeightInPoints(20); + LiquidTankTaskCopyVO user = userList.get(i); + + // 手动映射:列索引 → User字段(与columnTitles一一对应) + // 取样时间 + int a = 0; + Cell cell0 = dataRow.createCell(a); + cell0.setCellStyle(dataStyle); + cell0.setCellValue(user.getSampleDate()); + + //温度 + int b = 1; + Cell cell1 = dataRow.createCell(b); + cell1.setCellStyle(dataStyle); + cell1.setCellValue(user.getTemperatureActual()); + + //槽号 + int c = 2; + Cell cell2 = dataRow.createCell(c); +// cell2.setCellStyle(dataStyle); + cell2.setCellValue(user.getWorkTankName() == null ? "" : user.getWorkTankName()); + + //体积(L) + int d = 3; + Cell cell3 = dataRow.createCell(d); +// cell3.setCellStyle(dataStyle); + cell3.setCellValue(user.getVolume() == null ? 0 : user.getVolume()); + + //分析项目 + Cell cell4 = dataRow.createCell(4); + cell4.setCellStyle(dataStyle); + cell4.setCellValue(user.getTestElement() == null ? "" : user.getTestElement()); + + //规范下限(g/L) + Cell cell5 = dataRow.createCell(5); + cell5.setCellStyle(dataStyle); + cell5.setCellValue(user.getNormValueMin() == null ? 0 : user.getNormValueMin()); + + //目标下限(g/L) + Cell cell6 = dataRow.createCell(6); + cell6.setCellStyle(dataStyle); + cell6.setCellValue(user.getTargetValueMin() == null ? 0 : user.getTargetValueMin()); + + //添加点(g/L) + Cell cell7 = dataRow.createCell(7); + cell7.setCellStyle(dataStyle); + cell7.setCellValue(user.getFillingLocation() == null ? 0 : user.getFillingLocation()); + + //目标值(g/L) + Cell cell8 = dataRow.createCell(8); + cell8.setCellStyle(dataStyle); + cell8.setCellValue(user.getTargetValue() == null ? 0 : user.getTargetValue()); + + //目标上限(g/L) + Cell cell9 = dataRow.createCell(9); + cell9.setCellStyle(dataStyle); + cell9.setCellValue(user.getTargetValueMax() == null ? 0 : user.getTargetValueMax()); + + //规范上限(g/L) + Cell cell10 = dataRow.createCell(10); + cell10.setCellStyle(dataStyle); + cell10.setCellValue(user.getNormValueMax() == null ? 0 : user.getNormValueMax()); + + //化验频率 + Cell cell11 = dataRow.createCell(11); + cell11.setCellStyle(dataStyle); + cell11.setCellValue(user.getTestFrequency() == null ? "" : user.getTestFrequency()); + + //化验值(g/L) + Cell cell12 = dataRow.createCell(12); + cell12.setCellStyle(dataStyle); + cell12.setCellValue(user.getFirstTestValue() == null ? 0 : user.getFirstTestValue()); + + //药品计算公式 + Cell cell13 = dataRow.createCell(13); + cell13.setCellStyle(dataStyle); + cell13.setCellValue(user.getReportFormulaContent() == null ? "" : user.getReportFormulaContent()); + + //药品添加量 + Cell cell14 = dataRow.createCell(14); + cell14.setCellStyle(dataStyle); + cell14.setCellValue(user.getActualAddValue() == null ? 0 : user.getActualAddValue()); + + //药品批次号 + Cell cell15 = dataRow.createCell(15); + cell15.setCellStyle(dataStyle); + cell15.setCellValue(user.getDrugBatCode() == null ? "" : user.getDrugBatCode()); + + //药品监督员签名 + Cell cell16 = dataRow.createCell(16); + cell16.setCellStyle(dataStyle); + cell16.setCellValue(user.getDrugSuUserSign()== null ? "" : user.getDrugSuUserSign()); + + //药品添加人签名 + Cell cell17 = dataRow.createCell(17); + cell17.setCellStyle(dataStyle); + cell17.setCellValue(user.getDrugAddUserSign()== null ? "" : user.getDrugAddUserSign()); + + //调整后化验值(g/L) + Cell cell18 = dataRow.createCell(18); + cell18.setCellStyle(dataStyle); + cell18.setCellValue(user.getRepeatTestValue()== null ? 0 : user.getRepeatTestValue()); + + //1\合格 2、不合格 + Cell cell19 = dataRow.createCell(19); + cell19.setCellStyle(dataStyle); + cell19.setCellValue(user.getQualified()== null ? 0 : user.getQualified()); + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + //有效期 + Cell cell20 = dataRow.createCell(20); + cell20.setCellStyle(dataStyle); + cell20.setCellValue(user.getValidDate().format(formatter)); + + //超出规范极限调整后的结果 + Cell cell21 = dataRow.createCell(21); + cell21.setCellStyle(dataStyle); + cell21.setCellValue(user.getOutRangeResult()==null ? "" : user.getOutRangeResult()); + + //槽液清理记录 + Cell cell22 = dataRow.createCell(22); + cell22.setCellStyle(dataStyle); + cell22.setCellValue(user.getClearRecord()==null ? "" : user.getClearRecord()); + + //控制规范 + Cell cell23 = dataRow.createCell(23); + cell23.setCellStyle(dataStyle); + cell23.setCellValue(user.getNorm()==null ? "" : user.getNorm()); + } + + // -------------------------- 第四步:合并数据列相同值 -------------------------- +// if (mergeColumnIndexes != null && mergeColumnIndexes.length > 0 && userList.size() > 0) { +// for (int colIndex : mergeColumnIndexes) { +// if (colIndex < 0 || colIndex >= columnTitles.length) { +// continue; +// } +// mergeSameValueCells(sheet, dataStartRow, dataStartRow + userList.size() - 1, colIndex); +// } +// } + + // -------------------------- 第五步:响应头和文件输出 -------------------------- + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("UTF-8"); + String encodeFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20"); + response.setHeader("Content-Disposition", "attachment;filename*=UTF-8''" + encodeFileName + ".xlsx"); + + OutputStream outputStream = response.getOutputStream(); + workbook.write(outputStream); + outputStream.flush(); + outputStream.close(); + workbook.close(); + } + + /** + * 合并指定列连续相同值的单元格(逻辑不变) + */ + private static void mergeSameValueCells(Sheet sheet, int startRow, int endRow, int colIndex) { + int mergeStartRow = startRow; + for (int rowIndex = startRow + 1; rowIndex <= endRow; rowIndex++) { + String currentValue = getCellValue(sheet.getRow(rowIndex).getCell(colIndex)); + String prevValue = getCellValue(sheet.getRow(rowIndex - 1).getCell(colIndex)); + + if (!currentValue.equals(prevValue)) { + if (mergeStartRow < rowIndex - 1) { + sheet.addMergedRegion(new CellRangeAddress(mergeStartRow, rowIndex - 1, colIndex, colIndex)); + } + mergeStartRow = rowIndex; + } + + if (rowIndex == endRow && mergeStartRow <= endRow) { + sheet.addMergedRegion(new CellRangeAddress(mergeStartRow, endRow, colIndex, colIndex)); + } + } + } + + /** + * 获取单元格字符串值(逻辑不变) + */ + private static String getCellValue(Cell cell) { + if (cell == null) { + return ""; + } + switch (cell.getCellType()) { + case STRING: + return cell.getStringCellValue().trim(); + case NUMERIC: + return String.valueOf(cell.getNumericCellValue()).trim(); + case BOOLEAN: + return String.valueOf(cell.getBooleanCellValue()).trim(); + case FORMULA: + return cell.getCellFormula().trim(); + default: + return ""; + } + } + + /** + * 创建样式(逻辑不变) + */ + private static CellStyle createStyle(Workbook workbook, boolean isBold, short fontSize, HorizontalAlignment alignment) { + CellStyle style = workbook.createCellStyle(); + Font font = workbook.createFont(); + font.setBold(isBold); + font.setFontName("宋体"); + font.setFontHeightInPoints(fontSize); + style.setFont(font); + style.setAlignment(alignment); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setBorderTop(BorderStyle.THIN); + style.setBorderBottom(BorderStyle.THIN); + style.setBorderLeft(BorderStyle.THIN); + style.setBorderRight(BorderStyle.THIN); + return style; + } +} 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..82bb8f30a2faae508dcacb3ec32de3c5ee7b4a97 GIT binary patch literal 8192 zcmeI1Z*0|98OP7>_O`wK|Cg=q zu42$`1~TJ-%t+0m5)H#FnGyG*RbKc4#Hhq*_M+3w5RF?km_atEpYJ*M$Gz?DttD6pfly&Y~L30z~WSrHuuNt1zeo(e)B4Wxq%kO{JZ^ex;Dx4r~gO+UYVrqpaOdr1e( zAR3;1D8gcVDaap`h7=n!YGd;$m$O=#vxi@o zmHmTgVV9MOIQvW=`Ms`c+_*e4f34lw_P>F;qmllVNMjoRY}UVgg?xa-#};7nKt3n{ zg+OX80(XF7a3`1x=7EoayFdw;4@$wuK^eFk+yfSXd%;3b4k|z;SOgY>C7=r22bO|r zPy?2M^J*C z>4zQG*)eo^vQ63QYA?lj@RG17@mTl71vY-!)_TpxtF1L+i=SP;K>F7SWm}-Z)_cyz zWj4+x_RLRhn?G4jHTF9}{mG{f)1OKG8Y^qKqpkUa;+F&$vDyoaS7zRvEW_XzgS#=} zTH`pK7uE!Zgzv9oU7nfHZZ(h?s_x{<%t1(ko_u;MQ7_Sot9IK@Y zwA6_cp33h;+9kmUu*|vfn?!9SQR7;ybKdmE{-ERc>PlVT8|b-orsgw^Ao`(kyI&de z?@2u1jWAj&z6Wjjm;Hj7`SL~a>L=pstMTf8l=+@LFKC7ePM+G=tsJg6Zj`?`0ly*v zKP>^jG67%v0_PTO;R?Z`(&q!5f5K)`X>K^lrg`C@P4mMkHZ2Gz+q5v8I{Anv?HZPk{)S%;-5{2I$Yssq#%{xWksR1Cy-K^CZ>JJ++E%pT@9=7oSU z&n*w&v()=3FUXGQ1y8X%y1V!tIB<{Ob#7?ynQwZ<@P!}?rg?7DlBQqopn>b zwCBQ+x|WgQ3r8Mm+uWS&D%7=zp!7s*|ImdaBf~EoczjFFj&xU=-JY`V%&;0ccDeB? z_J03!Nkf+(KJdlit*cB2;@plS9`C6oUt{wxbsXHHTH-9ToR^;*+U9eXTaN#gTHKr0 z!f9^iPpSrUqT5#Z7xI4)1QC--|Sg+MYdr zrU~Ag+rRKkZPUmB1oMw4&wiPrwBC(9^Lr<`OBb6WzQ^`#NC{~b$-dSR*;L%-#huw-)`R7QoqCUD=mMKji0fcu)WQ@Z!VCf zo0Z;IC>aa-r}iOR`>Qs-_eSkY^$TP2JP5 z)H4rJ5;9-1bEiV4<`A^BT7@&Bbbyk^>?oatmH#!Sevo#@V(KSzvTBT>QxM~>7&?^` z(Yf^K_tKI5v6$~?@V*h-eqI4d< zCU*P_>T(j2VUz;7}Y1gKLqXJNpyrYt!bf>@288?$ zyl{*8qp^^E!KD50{^$gA4_JGDdhO=iY4XvS^jcXH%)(#-GH8uN`RV?=w?=s*mu zMf<;n>&PbE`rWDD(QwBPe)nHjn|J5_=t#&cTKLKzm%`KAg8Y`sPXI#rheYz+r-6L- zYe3%mS3rLHbsz_I2}ntof%QOqME*FFR5K|i)%@=vmA_p|DxX|ODv!I7RKB)_R8DCd zsXXcD(SFq(Pt_{{{W_A9!t_*Q&>XjNv~M$|ywmOC*JmE(TwZD_o6a90mH;OF%l1j-^ZKSn@jy zw8xzTn#=D2;8u)jz?E+0{->`WpN?J2KJUM!vPT6!{T6xI zvO+nK$~#4{KDvoyua5)qm6y-ig#9(Mb_cM^ZmjZAEOH%bA2qwV1NTs(5YN`N25WfY eTtU2q*Z(Rmj(YE@;)+ scheduling() { @@ -91,4 +95,20 @@ public class WorkOrderClient implements IWorkOrderClient { WorkOrderVO workOrder = new WorkOrderVO(); return R.data(workOrderService.selectGlassCakeOrderPage(Condition.getPage(query), workOrder)); } + + @Override + public R getById(Long id) { + QualityGradeEntity entity = qualityGradeService.getById( id); + return R.data(entity); + } + @Override + public R getByName(String name) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("quality_grade",name); + List list = qualityGradeService.list(queryWrapper); + if(null != list || list.size() > 0){ + return R.data(list.get(0)); + } + return R.data(new QualityGradeEntity()); + } }