Merge remote-tracking branch 'origin/master'

liweidong
绫Umbrella 1 month ago
commit 06c3f0f11c
  1. 2
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/entity/BsAssignEntity.java
  2. 1
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/vo/BsAssignVO.java
  3. 4
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/entity/LiquidTankTaskCopy.java
  4. 12
      blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/feign/IWorkOrderClient.java
  5. 11
      blade-service-api/blade-scheduling-api/src/main/java/org/springblade/scheduling/feign/IWorkOrderClientFallback.java
  6. 115
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/BsAssignController.java
  7. 26
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/AssignMapper.xml
  8. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/mapper/BsAssignMapper.java
  9. 231
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/BsAssignServiceImpl.java
  10. 91
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankController.java
  11. 53
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankTaskCopyController.java
  12. 6
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/mapper/ReviewSheetMapper.xml
  13. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/LiquidTankTaskCopyServiceImpl.java
  14. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/service/impl/LiquidTankTaskServiceImpl.java
  15. 279
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/util/FullMergeExcelUtil.java
  16. BIN
      blade-service/blade-desk/src/main/resources/Excel/QA/槽液信息.xls
  17. 22
      blade-service/blade-scheduling/src/main/java/org/springblade/scheduling/scheduling/feign/WorkOrderClient.java

@ -74,7 +74,7 @@ public class BsAssignEntity extends BaseEntity {
* 生产标识id
*/
@Schema(description = "生产标识id")
private BigDecimal prodMarkId;
private String prodMarkId;
/**
* 单面积上限
*/

@ -45,5 +45,6 @@ public class BsAssignVO extends BsAssignEntity {
private String areaName;
private String limitAreaName;
private String createUserName;
}

@ -531,5 +531,9 @@ public class LiquidTankTaskCopy extends BaseEntity {
@Schema(description = "有效期")
private LocalDate validDate;
@Schema(description = "药品添加人签名")
private String drugAddUserSign;
@Schema(description = "药品监督人签名")
private String drugSuUserSign;
}

@ -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<IPage<WorkOrderVO>> selectGlassCakeOrderPage(GlassCakeOrderPageQuery glassCakeOrderPageQuery);
@PostMapping(GLASS_CAKE_QUALITY)
R<QualityGradeEntity> getById(@RequestBody Long id);
@PostMapping(GLASS_CAKE_QUALITY_NAME)
R<QualityGradeEntity> getByName(@RequestBody String name);
}

@ -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<IPage<WorkOrderVO>> selectGlassCakeOrderPage(GlassCakeOrderPageQuery glassCakeOrderPageQuery) {
return R.fail("获取玻璃饼订单失败");
}
@Override
public R<QualityGradeEntity> getById(Long id) {
return null;
}
@Override
public R<QualityGradeEntity> getByName(String name) {
return null;
}
}

@ -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> 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<BsAssignEntity> list = bsAssignService.list();
List<BsAssignEntity> 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));
}

@ -31,8 +31,32 @@
</resultMap>
<select id="selectBsAssignPage" resultMap="bsAssignResultMap">
<select id="selectBsAssignPage" resultType="org.springblade.desk.basic.pojo.vo.BsAssignVO">
select * from BS_ASSIGN where is_deleted = 0
<if test="bsAssign.craftAbilityId != null and bsAssign.craftAbilityId != ''">
AND craft_ability_id = #{bsAssign.craftAbilityId}
</if>
<if test="bsAssign.partCode != null and bsAssign.partCode != ''">
AND part_code LIKE CONCAT('%', CONCAT(#{bsAssign.partCode}, '%'))
</if>
<if test="bsAssign.limitType != null and bsAssign.limitType != ''">
AND limit_type = #{bsAssign.limitType}
</if>
<if test="bsAssign.pointType != null and bsAssign.pointType != ''">
AND point_type = #{bsAssign.pointType}
</if>
<if test="bsAssign.oemId != null ">
AND oem_id = #{bsAssign.oemId}
</if>
<if test="bsAssign.centerId != null ">
AND center_id = #{bsAssign.centerId}
</if>
</select>

@ -51,7 +51,7 @@ public interface BsAssignMapper extends BaseMapper<BsAssignEntity> {
* @param bsAssign 查询参数
* @return List<BsAssignVO>
*/
List<BsAssignVO> selectBsAssignPage(IPage page, BsAssignVO bsAssign);
List<BsAssignVO> selectBsAssignPage(IPage page, @Param("bsAssign") BsAssignVO bsAssign);
/**

@ -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<BsAssignMapper, BsAssig
private IOemService service;
@Resource
private IWorkCenterService centerService;
@Resource
private IWorkOrderClient iWorkOrderClient;
@Override
public IPage<BsAssignVO> selectBsAssignPage(IPage<BsAssignVO> page, BsAssignVO bsAssign) {
return page.setRecords(baseMapper.selectBsAssignPage(page, bsAssign));
@ -86,6 +92,17 @@ public class BsAssignServiceImpl extends BaseServiceImpl<BsAssignMapper, BsAssig
if(singleUpArea.compareTo(singleLowArea) < 0){
return R.fail("单批面积上限不能小于单批面积下限");
}
String prodMarkId = current.getProdMarkId();
List<String> names = new ArrayList<>();
List<String> prodMarkIds = Arrays.asList(prodMarkId.split(","));
for (String prodMarkId1 : prodMarkIds){
R<QualityGradeEntity> 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<BsAssignMapper, BsAssig
BigDecimal singleUpArea = current.getSingleUpArea();
//单批面积下限
BigDecimal singleLowArea = current.getSingleDownArea();
Long currentCraftId = current.getCraftAbilityId();
// 检查当前数据的上限是否在已遍历数据的任意区间内
for (BsAssignEntity traversed : traversedList) {
@ -116,56 +134,63 @@ public class BsAssignServiceImpl extends BaseServiceImpl<BsAssignMapper, BsAssig
BigDecimal traversedSingleUpArea = traversed.getSingleUpArea();
//单批面积下限
BigDecimal traversedSingleLowArea = traversed.getSingleDownArea();
// 核心判断:当前上限 是否在 已遍历数据的[下限, 上限]区间内
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("单批面积上下限已存在,请检查数据");
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<BsAssignMapper, BsAssig
notice.setCenterId(oems.get(0).getId());
}
String prodmark = noticeExcel.getProdMark();
List<String> strs = Arrays.asList(prodmark.split(","));
List<String> ids = new ArrayList<>();
for(String str : strs){
R<QualityGradeEntity> 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<BsAssignMapper, BsAssig
//单批面积下限
BigDecimal singleLowArea = current.getSingleDownArea();
Long currentCraftId = current.getCraftAbilityId();
// 检查当前数据的上限是否在已遍历数据的任意区间内
for (BsAssignEntity traversed : traversedList) {
BigDecimal traversedLowerArea = traversed.getLowArea();
@ -272,56 +310,67 @@ public class BsAssignServiceImpl extends BaseServiceImpl<BsAssignMapper, BsAssig
BigDecimal traversedSingleUpArea = traversed.getSingleUpArea();
//单批面积下限
BigDecimal traversedSingleLowArea = traversed.getSingleDownArea();
// 核心判断:当前上限 是否在 已遍历数据的[下限, 上限]区间内
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("单面积上下限已存在,请检查数据");
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);

@ -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<org.springframework.core.io.Resource> 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<WorkCenter> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("WC_NAME",noticeExcel.getWorkCenterName());
List<WorkCenter> centers = centerService.list(queryWrapper);
if(null != centers && centers.size() > 0){
notice.setWorkCenterId(centers.get(0).getId());
}
// List<User> userPlanners = iUserClient.listByNameNolike(noticeExcel.getPlannerName());
// if(null != userPlanners && userPlanners.size() > 0){
// notice.setPlanner(userPlanners.get(0).getId());
// }
//
// List<User> userDispatchers = iUserClient.listByNameNolike(noticeExcel.getDispatcherName());
// if(null != userDispatchers && userDispatchers.size() > 0){
// notice.setDispatcher(userDispatchers.get(0).getId());
// }
//
// List<User> userLeaders = iUserClient.listByNameNolike(noticeExcel.getTeamLeaderName());
// if(null != userLeaders && userLeaders.size() > 0){
// notice.setTeamLeader(userLeaders.get(0).getId());
// }
//
// QueryWrapper<Shifts> queryWrapper = new QueryWrapper<>();
// queryWrapper.eq("name",noticeExcel.getCsName());
// List<Shifts> shifts = shiftService.list(queryWrapper);
// if(null != shifts && shifts.size() > 0){
// notice.setCsId(shifts.get(0).getId());
// }
//作业槽
QueryWrapper<WorkTank> queryWrappertank = new QueryWrapper<>();
queryWrappertank.eq("NAME",noticeExcel.getWorkTankName());
List<WorkTank> tanks = tankService.list(queryWrappertank);
if(null != tanks && tanks.size() > 0){
notice.setWorkTankId(tanks.get(0).getId());
}
//加药量计算公式
QueryWrapper<Formula> queryWrapperformulaadd = new QueryWrapper<>();
queryWrapperformulaadd.eq("NAME",noticeExcel.getAddDrugFormulaName());
queryWrapperformulaadd.eq("FORMULA_TYPE","1");
List<Formula> adds = formulaService.list(queryWrapperformulaadd);
if(null != adds && adds.size() > 0){
notice.setAddDrugFormulaId(adds.get(0).getId());
}
//添加后理论值计算公式
QueryWrapper<Formula> queryWrapperformulaafter = new QueryWrapper<>();
queryWrapperformulaafter.eq("NAME",noticeExcel.getAfterTheoryFormulaName());
queryWrapperformulaafter.eq("FORMULA_TYPE","2");
List<Formula> afters = formulaService.list(queryWrapperformulaafter);
if(null != afters && afters.size() > 0){
notice.setAfterTheoryFormulaId(afters.get(0).getId());
}
//化验人
List<User> tests = iUserClient.listByNameNolike(noticeExcel.getTestUserName());
if(null != tests && tests.size() > 0){
notice.setTestUserId(tests.get(0).getId());
}
//工艺主管
List<User> process = iUserClient.listByNameNolike(noticeExcel.getProcessUserName());
if(null != process && process.size() > 0){
notice.setProcessUserId(process.get(0).getId());
}
//班组
QueryWrapper<TeamSet> queryWrapperteam = new QueryWrapper<>();
queryWrapperteam.eq("TS_NAME",noticeExcel.getTeamName());
List<TeamSet> 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")

@ -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<LiquidTankTaskCopyVO> list = service.getListByLiquidTankReportId(report.getId());
Long centerId = list.get(0).getWorkCenterId();
QueryWrapper<LiquidTankReportConfig> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("WC_ID",centerId);
List<LiquidTankReportConfig> 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模板
*/

@ -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

@ -163,7 +163,7 @@ public class LiquidTankTaskCopyServiceImpl extends BaseServiceImpl<LiquidTankTas
Long taskId = relOne.getLiquidTankTaskId();
LiquidTankTaskCopy copy = getById(taskId);
LiquidTankTaskCopyVO copyVO = LiquidTankTaskCopyWrapper.build().entityVO(copy);
setVOValue(copyVO);
// setVOValue(copyVO);
copyList.add(copyVO);
}
return copyList;

@ -149,7 +149,7 @@ public class LiquidTankTaskServiceImpl extends BaseServiceImpl<LiquidTankTaskMap
// task = basicChangeStatus(task.getId(), LiquidTankTaskConst.S_PENDING_REVIEW);
// todo:计算加药量,通过公式 公式尚未实现 公式计算的 需加药量。
// task.setAddUnit(1000);
task.setNeedAddValue(1000.0);
// task.setNeedAddValue(1000.0);
// 首次化验时间 要用户填写
// 首次填报时间
task.setFirstFillDate(LocalDateTime.now());

@ -0,0 +1,279 @@
package org.springblade.desk.quality.util;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springblade.desk.dashboard.utils.DateUtils;
import org.springblade.desk.quality.pojo.vo.LiquidTankTaskCopyVO;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Map;
public class FullMergeExcelUtil {
/**
* 导出带合并标头+数据合并的ExcelUser实体类版本
* @param response 响应对象
* @param fileName 导出文件名
* @param mergeTitle 合并标头的大标题
* @param columnTitles 列标题数组["部门","用户ID","用户名","年龄","手机号"]
* @param userList 用户实体类列表
* @param mergeColumnIndexes 需要合并的列索引[0]表示合并部门列
* @throws Exception 异常
*/
public static void exportUserExcel(HttpServletResponse response, String fileName,
String mergeTitle, String[] columnTitles,
List<LiquidTankTaskCopyVO> 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;
}
}

@ -26,6 +26,7 @@
package org.springblade.scheduling.scheduling.feign;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.v3.oas.annotations.Hidden;
import lombok.AllArgsConstructor;
@ -37,14 +38,17 @@ import org.springblade.core.tenant.annotation.NonDS;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.scheduling.feign.IWorkOrderClient;
import org.springblade.scheduling.pojo.entity.QualityGradeEntity;
import org.springblade.scheduling.pojo.vo.GlassCakeOrderPageQuery;
import org.springblade.scheduling.pojo.vo.WorkOrderVO;
import org.springblade.scheduling.scheduling.service.IEquipResourceService;
import org.springblade.scheduling.scheduling.service.IPersonResourceService;
import org.springblade.scheduling.scheduling.service.IQualityGradeService;
import org.springblade.scheduling.scheduling.service.IWorkOrderService;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
import java.util.List;
/**
@ -64,7 +68,7 @@ public class WorkOrderClient implements IWorkOrderClient {
private final IPersonResourceService personResourceService;
private final IEquipResourceService equipResourceService;
private final IQualityGradeService qualityGradeService;
@Override
public R<Void> 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<QualityGradeEntity> getById(Long id) {
QualityGradeEntity entity = qualityGradeService.getById( id);
return R.data(entity);
}
@Override
public R<QualityGradeEntity> getByName(String name) {
QueryWrapper<QualityGradeEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("quality_grade",name);
List<QualityGradeEntity> list = qualityGradeService.list(queryWrapper);
if(null != list || list.size() > 0){
return R.data(list.get(0));
}
return R.data(new QualityGradeEntity());
}
}

Loading…
Cancel
Save