|
|
|
|
@ -26,15 +26,28 @@ |
|
|
|
|
package org.springblade.desk.basic.service.impl; |
|
|
|
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.Wrapper; |
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
|
|
|
|
import jakarta.annotation.Resource; |
|
|
|
|
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.mapper.BsAssignMapper; |
|
|
|
|
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.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 java.math.BigDecimal; |
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.List; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
@ -45,12 +58,243 @@ import java.util.List; |
|
|
|
|
*/ |
|
|
|
|
@Service |
|
|
|
|
public class BsAssignServiceImpl extends BaseServiceImpl<BsAssignMapper, BsAssignEntity> implements IBsAssignService { |
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
|
private ICraftAbilityService craftAbilityService; |
|
|
|
|
@Resource |
|
|
|
|
private IOemService service; |
|
|
|
|
@Resource |
|
|
|
|
private IWorkCenterService centerService; |
|
|
|
|
@Override |
|
|
|
|
public IPage<BsAssignVO> selectBsAssignPage(IPage<BsAssignVO> page, BsAssignVO 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 |
|
|
|
|
public List<BsAssignExcel> exportBsAssign(Wrapper<BsAssignEntity> queryWrapper) { |
|
|
|
|
|