分派规则实现导入保存功能

liweidong
pangyang 2 months ago
parent aa595b0cfa
commit 41a8175d7d
  1. 3
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/basic/pojo/entity/BsAssignEntity.java
  2. 3
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/quality/pojo/vo/LiquidTankTaskVO.java
  3. 47
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/controller/BsAssignController.java
  4. 5
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/IBsAssignService.java
  5. 246
      blade-service/blade-desk/src/main/java/org/springblade/desk/basic/service/impl/BsAssignServiceImpl.java
  6. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/quality/controller/LiquidTankTaskController.java

@ -29,6 +29,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity;
import org.springblade.core.tenant.mp.TenantEntity; import org.springblade.core.tenant.mp.TenantEntity;
import java.io.Serial; import java.io.Serial;
@ -44,7 +45,7 @@ import java.math.BigDecimal;
@TableName("BS_ASSIGN") @TableName("BS_ASSIGN")
@Schema(description = "BsAssign对象") @Schema(description = "BsAssign对象")
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
public class BsAssignEntity extends TenantEntity { public class BsAssignEntity extends BaseEntity {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

@ -77,6 +77,9 @@ public class LiquidTankTaskVO extends LiquidTankTask {
@Schema(description = "药品计算公式(报告) 加药量[计算公式] 公式内容") @Schema(description = "药品计算公式(报告) 加药量[计算公式] 公式内容")
private String reportFormulaContent; private String reportFormulaContent;
//加药量计算公式
private String addFormulaContent;
@Schema(description = "药品计算公式(报告) 理论值加药量[计算公式] 公式内容") @Schema(description = "药品计算公式(报告) 理论值加药量[计算公式] 公式内容")
private String afterFormulaContent; private String afterFormulaContent;

@ -61,6 +61,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -131,10 +132,8 @@ public class BsAssignController extends BladeController {
@ApiOperationSupport(order = 31) @ApiOperationSupport(order = 31)
@Operation(summary = "新增批量", description = "BsAssignEntity List") @Operation(summary = "新增批量", description = "BsAssignEntity List")
public R saveBat(@Valid @RequestBody List<BsAssignEntity> addList) { public R saveBat(@Valid @RequestBody List<BsAssignEntity> addList) {
// addList.forEach(one -> { R result = bsAssignService.saveBat(addList);
// one.setId(null); return result;
// });
return R.status(bsAssignService.saveOrUpdateBatch(addList));
} }
@ -199,46 +198,14 @@ public class BsAssignController extends BladeController {
@ApiOperationSupport(order = 72) @ApiOperationSupport(order = 72)
@Operation(summary = "导入Excel", description = "MultipartFile") @Operation(summary = "导入Excel", description = "MultipartFile")
public R importExcel(@RequestParam("file") MultipartFile file) { public R importExcel(@RequestParam("file") MultipartFile file) {
List<BsAssignEntity> noticeList = new ArrayList<>();
List<BsAssignExcel> list = ExcelUtil.read(file, BsAssignExcel.class);
list.forEach(noticeExcel -> {
BsAssignEntity notice = BeanUtil.copy(noticeExcel, BsAssignEntity.class);
//工艺能力
QueryWrapper<CraftAbilityEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("CA_NAME",noticeExcel.getCraftAbility());
List<CraftAbilityEntity> crafs = craftAbilityService.list(queryWrapper);
if(null != crafs && crafs.size() > 0){
notice.setCraftAbilityId(crafs.get(0).getId());
}
List<BsAssignExcel> listexcel = ExcelUtil.read(file, BsAssignExcel.class);
R result = bsAssignService.importExcel(listexcel);
return result;
//外协厂商
QueryWrapper<Oem> queryWrapperoem = new QueryWrapper<>();
queryWrapperoem.eq("OC_NAME",noticeExcel.getOemName());
List<Oem> oems = service.list(queryWrapperoem);
if(null != oems && oems.size() > 0){
notice.setOemId(oems.get(0).getId());
}
//作业中心
QueryWrapper<WorkCenter> queryWrappercenter = new QueryWrapper<>();
queryWrappercenter.eq("WC_NAME",noticeExcel.getOemName());
List<WorkCenter> centers = centerService.list(queryWrappercenter);
if(null != centers && centers.size() > 0){
notice.setCenterId(oems.get(0).getId());
}
//指定类型
String category = DictCache.getKey("AssignPoint", noticeExcel.getPointTypeName());
notice.setPointType(category);
//限制类型
String categorylimit = DictCache.getKey("AssignLimit", noticeExcel.getLimitTypeName());
notice.setLimitType(categorylimit);
noticeList.add(notice);
});
return R.data(bsAssignService.saveBatch(noticeList));
} }
} }

@ -27,10 +27,13 @@ package org.springblade.desk.basic.service;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import jakarta.validation.Valid;
import org.springblade.core.mp.base.BaseService; import org.springblade.core.mp.base.BaseService;
import org.springblade.core.tool.api.R;
import org.springblade.desk.basic.excel.BsAssignExcel; import org.springblade.desk.basic.excel.BsAssignExcel;
import org.springblade.desk.basic.pojo.entity.BsAssignEntity; import org.springblade.desk.basic.pojo.entity.BsAssignEntity;
import org.springblade.desk.basic.pojo.vo.BsAssignVO; import org.springblade.desk.basic.pojo.vo.BsAssignVO;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List; import java.util.List;
@ -51,6 +54,8 @@ public interface IBsAssignService extends BaseService<BsAssignEntity> {
*/ */
IPage<BsAssignVO> selectBsAssignPage(IPage<BsAssignVO> page, BsAssignVO bsAssign); IPage<BsAssignVO> selectBsAssignPage(IPage<BsAssignVO> page, BsAssignVO bsAssign);
public R saveBat(List<BsAssignEntity> addList);
public R importExcel(List<BsAssignExcel> addList);
/** /**
* 导出数据 * 导出数据

@ -26,15 +26,28 @@
package org.springblade.desk.basic.service.impl; package org.springblade.desk.basic.service.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import jakarta.annotation.Resource;
import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.desk.basic.excel.BsAssignExcel; import org.springblade.desk.basic.excel.BsAssignExcel;
import org.springblade.desk.basic.mapper.BsAssignMapper; import org.springblade.desk.basic.mapper.BsAssignMapper;
import org.springblade.desk.basic.pojo.entity.BsAssignEntity; import org.springblade.desk.basic.pojo.entity.BsAssignEntity;
import org.springblade.desk.basic.pojo.entity.Oem;
import org.springblade.desk.basic.pojo.entity.WorkCenter;
import org.springblade.desk.basic.pojo.vo.BsAssignVO; import org.springblade.desk.basic.pojo.vo.BsAssignVO;
import org.springblade.desk.basic.service.IBsAssignService; 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.pojo.entity.CraftAbilityEntity;
import org.springblade.system.cache.DictCache;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
@ -45,12 +58,243 @@ import java.util.List;
*/ */
@Service @Service
public class BsAssignServiceImpl extends BaseServiceImpl<BsAssignMapper, BsAssignEntity> implements IBsAssignService { public class BsAssignServiceImpl extends BaseServiceImpl<BsAssignMapper, BsAssignEntity> implements IBsAssignService {
@Resource
private ICraftAbilityService craftAbilityService;
@Resource
private IOemService service;
@Resource
private IWorkCenterService centerService;
@Override @Override
public IPage<BsAssignVO> selectBsAssignPage(IPage<BsAssignVO> page, BsAssignVO bsAssign) { public IPage<BsAssignVO> selectBsAssignPage(IPage<BsAssignVO> page, BsAssignVO bsAssign) {
return page.setRecords(baseMapper.selectBsAssignPage(page, bsAssign)); return page.setRecords(baseMapper.selectBsAssignPage(page, bsAssign));
} }
@Override
public R saveBat(List<BsAssignEntity> addList) {
for (BsAssignEntity current : addList) {
// 获取当前数据的单面积上限
BigDecimal currentUpperArea = current.getUpArea();
// 获取当前数据的单面积下限
BigDecimal currentLowArea = current.getLowArea();
//单批面积上限
BigDecimal singleUpArea = current.getSingleUpArea();
//单批面积下限
BigDecimal singleLowArea = current.getSingleDownArea();
if(currentUpperArea.compareTo(currentLowArea) < 0){
return R.fail("单面积上限不能小于单面积下限");
}
if(singleUpArea.compareTo(singleLowArea) < 0){
return R.fail("单批面积上限不能小于单批面积下限");
}
}
List<BsAssignEntity> all = new ArrayList<>();
List<BsAssignEntity> list = this.list();
all.addAll(list);
all.addAll(addList);
boolean foundMatch = false;
// 2. 存储已遍历过的数据(用于区间匹配)
List<BsAssignEntity> traversedList = new ArrayList<>();
for (BsAssignEntity current : all) {
// 获取当前数据的单面积上限
BigDecimal currentUpperArea = current.getUpArea();
// 获取当前数据的单面积下限
BigDecimal currentLowArea = current.getLowArea();
//单批面积上限
BigDecimal singleUpArea = current.getSingleUpArea();
//单批面积下限
BigDecimal singleLowArea = current.getSingleDownArea();
// 检查当前数据的上限是否在已遍历数据的任意区间内
for (BsAssignEntity traversed : traversedList) {
BigDecimal traversedLowerArea = traversed.getLowArea();
BigDecimal traversedUpperArea = traversed.getUpArea();
//单批面积上限
BigDecimal traversedSingleUpArea = traversed.getSingleUpArea();
//单批面积下限
BigDecimal traversedSingleLowArea = traversed.getSingleDownArea();
// 核心判断:当前上限 是否在 已遍历数据的[下限, 上限]区间内
if((currentLowArea.compareTo(traversedLowerArea)>=0 && currentLowArea.compareTo(traversedUpperArea)<=0)
&& (currentUpperArea.compareTo(traversedLowerArea)>=0 && currentUpperArea.compareTo(traversedUpperArea)<=0)){
// if (currentUpperArea >= traversedLowerArea && currentUpperArea <= traversedUpperArea) {
// System.out.printf(
// "触发退出条件!当前数据%s的上限%.1f,落在已遍历数据%s的区间[%.1f, %.1f]内%n",
// current.getId(), currentUpperArea, traversed.getId(), traversedLowerArea, traversedUpperArea
// );
// foundLowMatch = true;
// 跳出内层循环
// break;
return R.fail("单面积上下限已存在,请检查数据");
}
// if(currentUpperArea.compareTo(traversedLowerArea)>=0 && currentUpperArea.compareTo(traversedUpperArea)<=0){
// return R.fail("单面积上限已存在,请检查数据");
// }
if((singleLowArea.compareTo(traversedSingleLowArea)>=0 && singleLowArea.compareTo(traversedSingleUpArea)<=0) &&
(singleUpArea.compareTo(traversedSingleLowArea)>=0 && singleUpArea.compareTo(traversedSingleUpArea)<=0)){
// foundLowMatch = true;
// 跳出内层循环
// break;
return R.fail("单批面积上下限已存在,请检查数据");
}
// if(singleUpArea.compareTo(traversedSingleLowArea)>=0 && singleUpArea.compareTo(traversedSingleUpArea)<=0){
// return R.fail("单批面积上限已存在,请检查数据");
// }
}
// 未匹配,将当前数据加入已遍历集合,继续下一条
traversedList.add(current);
System.out.println("未匹配到已遍历区间,将当前数据加入已遍历集合");
}
// 4. 遍历完成后的结果提示
if (!foundMatch) {
System.out.println("\n遍历完成,未发现任何数据的上限落在之前遍历数据的上下限区间内");
return R.status(saveBatch(addList));
}
// addList.forEach(one -> {
// one.setId(null);
// });
return R.status(true);
}
@Override
public R importExcel(List<BsAssignExcel> listexcel) {
List<BsAssignEntity> noticeList = new ArrayList<>();
for (BsAssignExcel current : listexcel) {
// 获取当前数据的单面积上限
BigDecimal currentUpperArea = current.getUpArea();
// 获取当前数据的单面积下限
BigDecimal currentLowArea = current.getLowArea();
//单批面积上限
BigDecimal singleUpArea = current.getSingleUpArea();
//单批面积下限
BigDecimal singleLowArea = current.getSingleDownArea();
if(currentUpperArea.compareTo(currentLowArea) < 0){
return R.fail("单面积上限不能小于单面积下限");
}
if(singleUpArea.compareTo(singleLowArea) < 0){
return R.fail("单批面积上限不能小于单批面积下限");
}
}
listexcel.forEach(noticeExcel -> {
BsAssignEntity notice = BeanUtil.copy(noticeExcel, BsAssignEntity.class);
//工艺能力
QueryWrapper<CraftAbilityEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("CA_NAME",noticeExcel.getCraftAbility());
List<CraftAbilityEntity> crafs = craftAbilityService.list(queryWrapper);
if(null != crafs && crafs.size() > 0){
notice.setCraftAbilityId(crafs.get(0).getId());
}
//外协厂商
QueryWrapper<Oem> queryWrapperoem = new QueryWrapper<>();
queryWrapperoem.eq("OC_NAME",noticeExcel.getOemName());
List<Oem> oems = service.list(queryWrapperoem);
if(null != oems && oems.size() > 0){
notice.setOemId(oems.get(0).getId());
}
//作业中心
QueryWrapper<WorkCenter> queryWrappercenter = new QueryWrapper<>();
queryWrappercenter.eq("WC_NAME",noticeExcel.getOemName());
List<WorkCenter> centers = centerService.list(queryWrappercenter);
if(null != centers && centers.size() > 0){
notice.setCenterId(oems.get(0).getId());
}
//指定类型
String category = DictCache.getKey("AssignPoint", noticeExcel.getPointTypeName());
notice.setPointType(category);
//限制类型
String categorylimit = DictCache.getKey("AssignLimit", noticeExcel.getLimitTypeName());
notice.setLimitType(categorylimit);
noticeList.add(notice);
});
List<BsAssignEntity> all = new ArrayList<>();
List<BsAssignEntity> list = this.list();
all.addAll(list);
all.addAll(noticeList);
boolean foundMatch = false;
// 2. 存储已遍历过的数据(用于区间匹配)
List<BsAssignEntity> traversedList = new ArrayList<>();
for (BsAssignEntity current : all) {
// 获取当前数据的单面积上限
BigDecimal currentUpperArea = current.getUpArea();
// 获取当前数据的单面积下限
BigDecimal currentLowArea = current.getLowArea();
//单批面积上限
BigDecimal singleUpArea = current.getSingleUpArea();
//单批面积下限
BigDecimal singleLowArea = current.getSingleDownArea();
// 检查当前数据的上限是否在已遍历数据的任意区间内
for (BsAssignEntity traversed : traversedList) {
BigDecimal traversedLowerArea = traversed.getLowArea();
BigDecimal traversedUpperArea = traversed.getUpArea();
//单批面积上限
BigDecimal traversedSingleUpArea = traversed.getSingleUpArea();
//单批面积下限
BigDecimal traversedSingleLowArea = traversed.getSingleDownArea();
// 核心判断:当前上限 是否在 已遍历数据的[下限, 上限]区间内
if((currentLowArea.compareTo(traversedLowerArea)>=0 && currentLowArea.compareTo(traversedUpperArea)<=0)
&& (currentUpperArea.compareTo(traversedLowerArea)>=0 && currentUpperArea.compareTo(traversedUpperArea)<=0)){
// if (currentUpperArea >= traversedLowerArea && currentUpperArea <= traversedUpperArea) {
// System.out.printf(
// "触发退出条件!当前数据%s的上限%.1f,落在已遍历数据%s的区间[%.1f, %.1f]内%n",
// current.getId(), currentUpperArea, traversed.getId(), traversedLowerArea, traversedUpperArea
// );
// foundLowMatch = true;
// 跳出内层循环
// break;
return R.fail("单面积上下限已存在,请检查数据");
}
// if(currentUpperArea.compareTo(traversedLowerArea)>=0 && currentUpperArea.compareTo(traversedUpperArea)<=0){
// return R.fail("单面积上限已存在,请检查数据");
// }
if((singleLowArea.compareTo(traversedSingleLowArea)>=0 && singleLowArea.compareTo(traversedSingleUpArea)<=0) &&
(singleUpArea.compareTo(traversedSingleLowArea)>=0 && singleUpArea.compareTo(traversedSingleUpArea)<=0)){
// foundLowMatch = true;
// 跳出内层循环
// break;
return R.fail("单批面积上下限已存在,请检查数据");
}
// if(singleUpArea.compareTo(traversedSingleLowArea)>=0 && singleUpArea.compareTo(traversedSingleUpArea)<=0){
// return R.fail("单批面积上限已存在,请检查数据");
// }
}
// 未匹配,将当前数据加入已遍历集合,继续下一条
traversedList.add(current);
System.out.println("未匹配到已遍历区间,将当前数据加入已遍历集合");
}
// 4. 遍历完成后的结果提示
if (!foundMatch) {
System.out.println("\n遍历完成,未发现任何数据的上限落在之前遍历数据的上下限区间内");
return R.data(saveBatch(noticeList));
}
return R.data(null);
}
@Override @Override
public List<BsAssignExcel> exportBsAssign(Wrapper<BsAssignEntity> queryWrapper) { public List<BsAssignExcel> exportBsAssign(Wrapper<BsAssignEntity> queryWrapper) {

@ -171,7 +171,7 @@ public class LiquidTankTaskController extends BladeController {
LiquidTank tank = taskService.getById(one.getLiquidTankId()); LiquidTank tank = taskService.getById(one.getLiquidTankId());
Formula detail = formualaService.getById(tank.getAddDrugFormulaId()); Formula detail = formualaService.getById(tank.getAddDrugFormulaId());
if(null != detail){ if(null != detail){
one.setReportFormulaContent(detail.getContent()); one.setAddFormulaContent(detail.getContent());
} }
Formula detailAfter = formualaService.getById(tank.getAfterTheoryFormulaId()); Formula detailAfter = formualaService.getById(tank.getAfterTheoryFormulaId());

Loading…
Cancel
Save