Merge remote-tracking branch 'origin/main'

This commit is contained in:
liuzhaotian
2024-06-29 10:16:01 +08:00
22 changed files with 329 additions and 146 deletions
@@ -3,7 +3,7 @@
spring:
cloud:
nacos:
server-addr: 127.0.0.1:8848
server-addr: 192.168.1.205:8848
username: nacos
password: nacos
discovery:
@@ -18,7 +18,7 @@ spring:
nacos:
# Nacos Config 配置项,对应 NacosConfigProperties 配置属性类
config:
server-addr: 127.0.0.1:8848 # Nacos 服务器地址
server-addr: 192.168.1.205:8848 # Nacos 服务器地址
namespace: dev # 命名空间 dev 的ID,不能直接使用 dev 名称。创建命名空间的时候需要指定ID为 dev,这里使用 dev 开发环境
group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
name: ${spring.application.name} # 使用的 Nacos 配置集的 dataId,默认为 spring.application.name
@@ -31,11 +31,13 @@ import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.pojo.CommonResult;
import com.cf.imes.framework.common.util.object.BeanUtils;
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.cf.imes.framework.common.pojo.CommonResult.success;
import com.cf.imes.framework.operatelog.core.annotations.OperateLog;
import static com.cf.imes.framework.operatelog.core.enums.OperateTypeEnum.*;
import static com.cf.imes.module.executor.enums.ErrorCodeConstants.PLATE_PLAN_DATA_ERROR;
import com.cf.imes.module.executor.dal.dataobject.order.OrderDO;
import com.cf.imes.module.executor.service.order.OrderService;
@@ -153,8 +155,8 @@ public class OrderController {
@Operation(summary = "生产单详情-数量信息")
@Parameter(name = "orderId", description = "生产单编号", example = "1024")
@PreAuthorize("@ss.hasPermission('production:manager-list:detail')")
public CommonResult<Map<String,List<?>>> getModule(@RequestParam("orderId") Long orderId) {
Map<String,List<?>> moduleDOList = orderService.getModule(orderId);
public CommonResult<Map<String, List<?>>> getModule(@RequestParam("orderId") Long orderId) {
Map<String, List<?>> moduleDOList = orderService.getModule(orderId);
return success(moduleDOList);
}
@@ -173,7 +175,7 @@ public class OrderController {
@RequestParam(value = "bodyId", required = false) Long bodyId,
@RequestParam(value = "groupId", required = false) Long groupId,
@RequestParam(value = "groupName", required = false) String groupName) {
List<OrderPlatesDetailReqVO> moduleDOList = orderService.getPlatesDetail(orderId, roomId, bodyId,groupId,groupName);
List<OrderPlatesDetailReqVO> moduleDOList = orderService.getPlatesDetail(orderId, roomId, bodyId, groupId, groupName);
return success(moduleDOList);
}
@@ -208,10 +210,13 @@ public class OrderController {
@PreAuthorize("@ss.hasPermission('production:manager-list:create')")
public CommonResult<Long> test(@RequestParam(value = "orderNo", required = false, defaultValue = "20230809027818") String orderNo)
throws InterruptedException, ExecutionException {
// return success(orderService.importApiData(orderNo));
Long organId = SecurityFrameworkUtils.getLoginUser().getOrganId();
String token = apiDataAchieve.getApiToken(organId);
JSONObject dataPlates = apiDataAchieve.getApiPlateProData(token, orderNo).get();
if (!dataPlates.getString("err_code").equals("0")) {
throw exception(PLATE_PLAN_DATA_ERROR);
}
JSONObject dataParts = apiDataAchieve.getApiPartsMessage(token, orderNo).get();
JSONObject dataBody = apiDataAchieve.getApiBodyMessage(token, orderNo).get();
JSONObject dataGoods = apiDataAchieve.getApiGoodsMessage(token, orderNo).get();
@@ -240,41 +245,44 @@ public class OrderController {
@OperateLog(type = IMPORT)
public void exportTest(@RequestPart("file") MultipartFile file,
@RequestParam(value = "type", required = false, defaultValue = "true") Integer type,
HttpServletResponse response) throws IOException {
System.out.println("kkkkkkkk");
HttpServletResponse response) throws IOException {
try {
List<?> list = null;
OrderDO orderDO = new OrderDO();
if (type == 0) { //excel
// 读取文件
excelReadUtil.setErr(0);
Map<String, Object> map = excelReadUtil.read(file);
List<?> list = null;
OrderDO orderDO = new OrderDO();
if (type == 0) { //excel
// 读取文件
excelReadUtil.setErr(0);
Map<String, Object> map = excelReadUtil.read(file);
// System.out.println(" map " + map);
System.err.println(excelReadUtil.isErr());
// 判断是否读取有误
if (excelReadUtil.isErr() == -1) { // 文件为空
ExcelWriterUtil.writeErr(response, "生产单内容为空", orderService.getSavePath() + File.separator + "错误文件.xlsx");
return;
}else if (excelReadUtil.isErr() > 0) {
// 返回文件
System.err.println(excelReadUtil.isErr());
// 判断是否读取有误
if (excelReadUtil.isErr() == -1) { // 文件为空
ExcelWriterUtil.writeErr(response, "生产单内容为空", orderService.getSavePath() + File.separator + "错误文件.xlsx");
return;
} else if (excelReadUtil.isErr() > 0) {
// 返回文件
// System.out.println("(Map<Object, Object>) " + (Map<Object, Object>) map.get("order")+ " , (List<OrderPlateImportExcelVO>)" +(List<OrderPlateImportExcelVO>) map.get("plate"));
ExcelWriterUtil.write(response, (Map<Object, Object>) map.get("order"), (List<OrderPlateImportExcelVO>) map.get("plate"), orderService.getSavePath() + File.separator + "生产单Excel导入错误导出模板.xlsx");
return;
} else {
// 获取数据
list = (List<?>) map.get("plate");
orderDO = excelReadUtil.changeOrderDO((Map<Object, Object>) map.get("order")).setOrderType(0).setStatus(1);
if (!orderService.customOrderNoIsExists(orderDO.getCustomOrderNo())){
ExcelWriterUtil.writeErr(response, "自定义生产单号存在", orderService.getSavePath() + File.separator + "错误文件.xlsx");
ExcelWriterUtil.write(response, (Map<Object, Object>) map.get("order"), (List<OrderPlateImportExcelVO>) map.get("plate"), orderService.getSavePath() + File.separator + "生产单Excel导入错误导出模板.xlsx");
return;
} else {
// 获取数据
list = (List<?>) map.get("plate");
orderDO = excelReadUtil.changeOrderDO((Map<Object, Object>) map.get("order")).setOrderType(0).setStatus(1);
if (!orderService.customOrderNoIsExists(orderDO.getCustomOrderNo())) {
ExcelWriterUtil.writeErr(response, "自定义生产单号存在", orderService.getSavePath() + File.separator + "错误文件.xlsx");
}
}
} else if (type == 1) { // json
} else if (type == 2) { // xml
}
} else if (type == 1) { // json
}else if (type == 2) { // xml
orderService.importExcelData(orderDO, list);
} catch (Exception e) {
ExcelWriterUtil.writeErr(response, "系统出现未知错误,请下载模板,按照模板重新上传文件", orderService.getSavePath() + File.separator + "错误文件.xlsx");
}
orderService.importExcelData(orderDO,list);
}
@GetMapping("/get-goodsList")
@@ -294,8 +302,8 @@ public class OrderController {
})
@PreAuthorize("@ss.hasPermission('production:manager-list:create')")
public CommonResult<String> uploadOrderType(@RequestPart("file") MultipartFile file,
@RequestParam(value = "type", required = false, defaultValue = "false") Boolean type) {
return success(orderService.importTemplate(file,type));
@RequestParam(value = "type", required = false, defaultValue = "false") Boolean type) {
return success(orderService.importTemplate(file, type));
}
@GetMapping("/printing")
@@ -308,6 +316,6 @@ public class OrderController {
@RequestParam("type") String type,
HttpServletResponse response) {
return success(orderService.getPrintDataMap(orderId,type,response));
return success(orderService.getPrintDataMap(orderId, type, response));
}
}
@@ -174,6 +174,10 @@ public class PlateDO extends BaseDO {
* 是否造型
*/
private Boolean isSculpt;
/**
* 是否造型
*/
private Boolean isRowHole;
/**
* 排单过滤类型,1 有挖穿造型 2 有挖穿孔 4 有二维刀路 8 可叠
*/
@@ -339,8 +339,9 @@ public class OrderServiceImpl implements OrderService {
}
goodsIdDeleted.add(k);
});
goodsMapper.updateDeletedById(goodsIdDeleted, OrderDeletedEnum.DELETED.getStatus(), SecurityFrameworkUtils.getLoginUser().getOrganId());
if (goodsIdDeleted.size()>0){
goodsMapper.updateDeletedById(goodsIdDeleted, OrderDeletedEnum.DELETED.getStatus(), SecurityFrameworkUtils.getLoginUser().getOrganId());
}
List<Long> partsList = orderPartsMapper.selectPartsIdListByBodyId(bodyId, SecurityFrameworkUtils.getLoginUser().getOrganId());
orderPartsMapper.updateDeletedById(partsList, OrderDeletedEnum.DELETED.getStatus(), SecurityFrameworkUtils.getLoginUser().getOrganId());
});
@@ -379,6 +380,7 @@ public class OrderServiceImpl implements OrderService {
List<OrderModelDO> orderModelDOs = BeanUtils.toBean(plateDetail, OrderModelDO.class);
orderModelDOs.forEach(orderModelDO -> orderModelDO.setOrderId(order.get(0).getId()));
orderInputProcessor.batchSaveModel(orderModelDOs);
orderInputProcessor.batchSaveOrderPartsModel(partsRemark);
return order.get(0).getId();
}
@@ -561,6 +563,7 @@ public class OrderServiceImpl implements OrderService {
validateCustomOrderNoExists(orderDO.getCustomOrderNo());
orderInputProcessor.batchInsert(rawGoodsDO, bodyDO, groupDO, partsDO, plateDO, null, itemDO, orderDO, goodsDO, plateGoodDOS);
orderInputProcessor.batchSaveModel(orderModelDOS);
orderInputProcessor.batchSaveOrderPartsModel(orderPartsRemarks);
}
@@ -47,20 +47,18 @@ public class ApiDataAchieve {
}
// 获取板件生产数据信息
// @Async
@Async
public Future<JSONObject> getApiPlateProData(String token, String orderNo) {
JSONObject jsonPlatesData = new JSONObject();
jsonPlatesData.put("order_no", orderNo);//生产单号需要传入赋值
jsonPlatesData.put("format", "json");
JSONObject dataPlates = apiDataProduction.getApiOrderMessage(token, jsonPlatesData);
if (!dataPlates.getString("err_code").equals("0")) {
throw exception(PLATE_PLAN_DATA_ERROR);
}
return new AsyncResult<>(dataPlates);
}
// 获取配件信息 分页获取
// @Async
@Async
public Future<JSONObject> getApiPartsMessage(String token, String orderNo) {
JSONObject jsonParts = new JSONObject();
jsonParts.put("curr_page", 1);
@@ -80,7 +78,7 @@ public class ApiDataAchieve {
}
// 柜体信息转换
// @Async
@Async
public Future<JSONObject> getApiBodyMessage(String token, String orderNo) {
JSONObject jsonBody = new JSONObject();
jsonBody.put("curr_page", 1);
@@ -100,7 +98,7 @@ public class ApiDataAchieve {
}
// 商品信息转换
// @Async
@Async
public Future<JSONObject> getApiGoodsMessage(String token, String orderNo) {
JSONObject jsonGoods = new JSONObject();
jsonGoods.put("curr_page", 1);
@@ -120,7 +118,7 @@ public class ApiDataAchieve {
}
// 板材明细信息转换
// @Async
@Async
public Future<JSONObject> getApiPlateDetailMessage(String token, String orderNo) {
JSONObject jsonPlates = new JSONObject();
jsonPlates.put("curr_page", 1);
@@ -140,7 +138,7 @@ public class ApiDataAchieve {
}
// 加工组信息转换
// @Async
@Async
public Future<JSONObject> getApiGroupMessage(String token, String orderNo) {
JSONObject jsonModule = new JSONObject();
jsonModule.put("order_no", orderNo);
@@ -25,6 +25,7 @@ import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
@@ -44,11 +45,11 @@ public class ApiTypeRealize {
@Resource
SnowflakeIdWorker3rd idWorker;
private Integer num = 0;
// private Integer num = 0;
private Integer specialShapedNum = 0;
// private Integer specialShapedNum = 0;
private Integer groupNum = 0;
// private Integer groupNum = 0;
private final static Integer X = 0;
private final static Integer Y = 1;
@@ -147,6 +148,7 @@ public class ApiTypeRealize {
public Map<Long, OrderItemDO> orderPartsChange(Map<Long, OrderGroupDO> orderGroupDO,
Map<Long, List<Long>> groupLists, Map<Long, OrderItemDO> items) {
AtomicInteger groupNum = new AtomicInteger(0);
groupLists.forEach((k, v) -> {
v.forEach(v1 -> {
if (items.get(v1) != null) {
@@ -171,11 +173,11 @@ public class ApiTypeRealize {
}
if (items.get(v1).getPlateId() != null)
groupNum++;
groupNum.getAndIncrement();
}
});
orderGroupDO.get(k).setPlateNum(groupNum);
groupNum = 0;
orderGroupDO.get(k).setPlateNum(groupNum.get());
groupNum.set(0);
});
return items;
@@ -192,21 +194,22 @@ public class ApiTypeRealize {
List<OrderGroupDO> orderGroupDOList = orderGroupDO.values().stream().collect(Collectors.toList());
Map<Long, OrderGroupDO> orderGroupDOMap = orderGroupDOList.stream().collect(Collectors.toMap(OrderGroupDO::getId, v -> v));
AtomicInteger specialShapedNum = new AtomicInteger(0);
groupPlate.forEach((k, v) -> { // k 加工组id
v.forEach(item -> {
if (plateDOMap.get(item.getPlateId()) != null) {
if (plateDOMap.get(item.getPlateId()).getIsSpecialShaped()) { // 异形相加
specialShapedNum++;
specialShapedNum.getAndIncrement();
// System.out.println(k + " 对应 " + specialShapedNum);
}
}
});
if (orderGroupDOMap.get(k) != null) {// m 加工组
orderGroupDOMap.get(k).setUnregularNum(specialShapedNum);
orderGroupDOMap.get(k).setUnregularNum(specialShapedNum.get());
}
;
specialShapedNum = 0;
specialShapedNum.set(0);
});
return orderGroupDO;
}
@@ -341,7 +344,7 @@ public class ApiTypeRealize {
.goodsName(goods.getString("GoodsName"))
.material(goods.getString("Material"))
.color(goods.getString("Color"))
.texture(false)
.texture(getTexture( goods.getJSONObject("ExtraProp")))
.thickness(goods.getDouble("Thickness"))
.price(goods.getDouble("Price"))
.brand(goods.getString("Brand"))
@@ -357,7 +360,7 @@ public class ApiTypeRealize {
.goodsName(goods.getString("GoodsName"))
.material(goods.getString("Material"))
.color(goods.getString("Color"))
.texture(false)
.texture(getTexture( goods.getJSONObject("ExtraProp")))
.width(BigDecimal.valueOf(goods.getDouble("Width")))
.height(BigDecimal.valueOf(goods.getDouble("Height")))
.thickness(BigDecimal.valueOf(goods.getDouble("Thickness")))
@@ -612,7 +615,8 @@ public class ApiTypeRealize {
plateInfo.setHeight(BigDecimal.valueOf(jsonObject.getDouble("Height")))
.setWidth(BigDecimal.valueOf(jsonObject.getDouble("Width")))
.setThickness(BigDecimal.valueOf(jsonObject.getDouble("Thickness")))
.setArea(BigDecimal.valueOf(jsonObject.getDouble("Area")));
.setArea(BigDecimal.valueOf(jsonObject.getDouble("Area")))
.setIsRowHole(jsonObject.getBoolean("IsHole"));
plateDetail.get(plate.getLong("BlockNo"))
.setRemarkJson(jsonObject.getString("RemarkJson"))
.setSpecialRemark(jsonObject.getString("SpecialRemark"));
@@ -633,24 +637,25 @@ public class ApiTypeRealize {
.collect(Collectors.toMap(PlateDO::getId, plate -> plate)); // 板件id为key
// 遍历platesDetail
AtomicInteger NUM = new AtomicInteger(0);
AtomicInteger specialShapedNum = new AtomicInteger(0);
platesDetail.forEach((k, v) -> {
v.forEach(item -> {
num++;
NUM.getAndIncrement();
if (plateDOMap.get(item.getPlateId()).getIsSpecialShaped()) { // 异形相加
specialShapedNum++;
specialShapedNum.getAndIncrement();
}
});
bodyInfos.forEach((n, m) -> {
if (k == m.getId()) {
m.setPlateNum(num);
m.setUnregularNum(specialShapedNum);
m.setPlateNum(NUM.get());
m.setUnregularNum(specialShapedNum.get());
}
});
num = 0;
specialShapedNum = 0;
NUM.set(0);
specialShapedNum.set(0);
});
map.put("platesInfos", platesInfos);
map.put("platesItems", platesItem);
@@ -934,4 +939,16 @@ public class ApiTypeRealize {
}
return map;
}
// 纹理解析
public Boolean getTexture(JSONObject extraProp) {
JSONObject jsonObject = new JSONObject(extraProp);
if (jsonObject.getString("HasWave") != null){
String hasWave = jsonObject.getString("HasWave").trim();
if (hasWave.equals("0")){
return false;
}
}
return true;
}
}
@@ -53,7 +53,7 @@ public class ExcelReadUtil { // 文件读取
}
if (index.get()) {
orderMap.put(item.get(0), item.get(1));
orderMap.put(item.get(13), item.get(14));
orderMap.put(item.get(16), item.get(17));
} else {
if (!(item.get(0).equals("序号") || item.get(0).equals("###"))) {
list.add(changeValue(item));
@@ -145,97 +145,106 @@ public class ExcelReadUtil { // 文件读取
case 9:// 型号
vo.setModel(value);
break;
case 10:// 规格
case 10:// 板材长
vo.setGoodsHeight(value);
break;
case 11:// 板材宽
vo.setGoodsWidth(value);
break;
case 12:// 板材厚
vo.setGoodsThickness(value);
break;
case 13:// 规格
vo.setSpec(value);
break;
case 11:// 单位
case 14:// 单位
vo.setUnit(value);
break;
case 12:// 数量
case 15:// 数量
vo.setGoodsNumber(value);
break;
case 13:// 房间
case 16:// 房间
vo.setRoomsName(value);
break;
case 14:// 柜体
case 17:// 柜体
vo.setCabinetsName(value);
break;
case 15:// 加工组类型
case 18:// 加工组类型
vo.setSynthesisTypeName(value);
break;
case 16:// 加工组名称
case 19:// 加工组名称
vo.setCombinationName(value);
break;
case 17://板名称
case 20://板名称
vo.setName(value);
break;
case 18:// 自定义板编号
case 21:// 自定义板编号
vo.setPlateNo(value);
break;
case 19:// 成品长
case 22:// 成品长
vo.setHeight(value);
break;
case 20:// 成品宽
case 23:// 成品宽
vo.setWidth(value);
break;
case 21:// 拆单长
case 24:// 拆单长
vo.setSplitHeight(value);
break;
case 22:// 拆单宽
case 25:// 拆单宽
vo.setSplitWidth(value);
break;
case 23:// 厚
case 26:// 厚
vo.setThickness(value);
break;
case 24:// 左封边
case 27:// 左封边
vo.setSealLeft(value);
break;
case 25:// 右封边
case 28:// 右封边
vo.setSealRight(value);
break;
case 26:// 上封边
case 29:// 上封边
vo.setSealUp(value);
break;
case 27:// 下封边
case 30:// 下封边
vo.setSealDown(value);
break;
case 28:// 排版面
case 31:// 排版面
vo.setTypographicFace(value);
break;
case 29:// 纹路
case 32:// 纹路
vo.setTexture(value);
break;
case 30:// 开门方向
case 33:// 开门方向
vo.setOpenDoorType(value);
break;
case 31://备注1
case 34://备注1
vo.setRemark1(value);
break;
case 32://备注2
case 35://备注2
vo.setRemark2(value);
break;
case 33://备注3
case 36://备注3
vo.setRemark3(value);
break;
case 34://备注4
case 37://备注4
vo.setRemark4(value);
break;
case 35://备注5
case 38://备注5
vo.setRemark5(value);
break;
case 36://备注6
case 39://备注6
vo.setRemark6(value);
break;
case 37://备注7
case 40://备注7
vo.setRemark7(value);
break;
case 38://备注8
case 41://备注8
vo.setRemark8(value);
break;
case 39://备注9
case 42://备注9
vo.setRemark9(value);
break;
case 40://备注10
case 43://备注10
vo.setRemark10(value);
break;
default:
@@ -274,6 +283,40 @@ public class ExcelReadUtil { // 文件读取
errList.add("纹理无效");
}
}
// 大板长宽厚数据不可为空
if (StringUtils.isEmpty(vo.getGoodsHeight()) && StringUtils.isEmpty(vo.getGoodsWidth()) && StringUtils.isEmpty(vo.getGoodsThickness())) {
flag = false;
errList.add("板材长宽厚数据不能为空");
}else {
// 大板长宽厚数据不为空,检查数据格式
if (!convertToDouble(vo.getGoodsHeight())) {
flag = false;
errList.add("板材长数据类型错误");
} else {
if (!checkPrecision(vo.getGoodsHeight())) {
flag = false;
errList.add("板材长数据长度错误");
}
}
if (!convertToDouble(vo.getGoodsWidth())) {
flag = false;
errList.add("板材宽数据类型错误");
} else {
if (!checkPrecision(vo.getGoodsWidth())) {
flag = false;
errList.add("板材宽数据长度错误");
}
}
if (!convertToDouble(vo.getGoodsThickness())) {
flag = false;
errList.add("板材厚数据类型错误");
} else {
if (!checkPrecision(vo.getGoodsThickness())) {
flag = false;
errList.add("板材厚数据长度错误");
}
}
}
if (StringUtils.isEmpty(vo.getRoomsName()) && StringUtils.isEmpty(vo.getCabinetsName()) && StringUtils.isEmpty(vo.getName())) {
flag = false;
errList.add("房间、柜体、板名称不能为空");
@@ -90,6 +90,9 @@ public class ExcelTypeRealize {
p.getColor(),
p.getSpec(),
p.getWave(), // 纹理
p.getGoodsHeight(),
p.getGoodsWidth(),
p.getGoodsThickness(),
// p.getModel(),
p.getBrand()),
Collectors.toList()
@@ -97,14 +100,14 @@ public class ExcelTypeRealize {
goodsMap.forEach((goodKey, goodValue) -> {
// 板材信息合集,添加生产单id,添加生产单板材设计端商品编码,板材信息写入order_raw_goods
// 规格分解
List<Double> specList = spec(goodValue.get(0).getSpec());
RawGoodsDO rawGoodsDO = setRawGoodsDO(goodValue.get(0)).setId((Long) snowFlakeGenerator.nextId(null)).setOrderId(orderId);
rawGoodsDOS.add(rawGoodsDO);
Long goodId = (Long) snowFlakeGenerator.nextId(null);
GoodsDO plateDO = setGoodsDO(goodValue.get(0)).setId(goodId).setOrderId(orderId)
.setRawGoodsId(String.valueOf(rawGoodsDO.getId()))
.setHeight(BigDecimal.valueOf(specList.get(0))).setWidth(BigDecimal.valueOf(specList.get(1))); // 在good_id为空的时候,首先赋值为空值
.setHeight(BigDecimal.valueOf(Double.parseDouble(goodValue.get(0).getGoodsHeight())))
.setWidth(BigDecimal.valueOf(Double.parseDouble(goodValue.get(0).getGoodsWidth())))
.setThickness(BigDecimal.valueOf(Double.parseDouble(goodValue.get(0).getGoodsThickness()))); // 在good_id为空的时候,首先赋值为空值
goodsDOS.add(plateDO);
// 赋值给板件未对应前order_raw_goods的id
for (OrderPlateImportExcelVO reqVO : goodValue) {
@@ -112,14 +115,15 @@ public class ExcelTypeRealize {
}
});
} else { // 商品编码有的
List<Double> specList = spec(value.get(0).getSpec());
// 板材信息合集,添加生产单id,添加生产单板材设计端商品编码,板材信息写入order_raw_goods
RawGoodsDO rawGoodsDO = setRawGoodsDO(value.get(0)).setId((Long) snowFlakeGenerator.nextId(null)).setOrderId(orderId);
rawGoodsDOS.add(rawGoodsDO);
Long goodId = (Long) snowFlakeGenerator.nextId(null);
GoodsDO plateDO = setGoodsDO(value.get(0)).setId(goodId).setOrderId(orderId)
.setRawGoodsId(String.valueOf(rawGoodsDO.getId())).setGoodsId(String.valueOf(rawGoodsDO.getRawGoodsId()))
.setHeight(BigDecimal.valueOf(specList.get(0))).setWidth(BigDecimal.valueOf(specList.get(1)));
.setHeight(BigDecimal.valueOf(Double.parseDouble(value.get(0).getGoodsHeight())))
.setWidth(BigDecimal.valueOf(Double.parseDouble(value.get(0).getGoodsWidth())))
.setThickness(BigDecimal.valueOf(Double.parseDouble(value.get(0).getGoodsThickness())));
goodsDOS.add(plateDO);
// 赋值给板件未对应前order_raw_goods的id
for (OrderPlateImportExcelVO reqVO : value) {
@@ -69,6 +69,18 @@ public class OrderPlateImportExcelVO {
@JsonIgnore
private String model;
@ExcelProperty(value = "板材长")
@JsonIgnore
private String goodsHeight;
@ExcelProperty(value = "板材宽")
@JsonIgnore
private String goodsWidth;
@ExcelProperty(value = "板材厚")
@JsonIgnore
private String goodsThickness;
@ExcelProperty(value = "规格")
@JsonIgnore
private String spec;
@@ -47,8 +47,9 @@
UPDATE order_goods
SET deleted = #{deleted}
WHERE id IN
<foreach collection="ids" item="id" open="(" separator="," close=")">
<foreach item="id" collection="ids" open="(" separator="," close=")">
#{id}
</foreach>AND organ_id = #{organId}
</foreach>
AND organ_id = #{organId}
</update>
</mapper>
@@ -0,0 +1,23 @@
package com.cf.imes.module.manage.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum DeletedCodeEnum {
DELETED(1, "删除"),
NOT_DELETED(0, "未删除");
private final Integer status;
private String description;
public boolean equals(Integer status) {
return this.status .equals(status) ;
}
public boolean equals(DeletedCodeEnum DeletedCodeEnum) {
return DeletedCodeEnum != null && DeletedCodeEnum.status .equals(this.getStatus()) ;
}
}
@@ -7,9 +7,10 @@ import lombok.Getter;
@AllArgsConstructor
public enum RemainPlateUseTypeEnum {
TYPE_ONE(0, "核销"),
TYPE_TWO(1, "排单"),
TYPE_THREE(2, "补板");
TYPE_ZERO(0, ""),
TYPE_ONE(1, "核销"),
TYPE_TWO(2, "排单"),
TYPE_THREE(3, "补板");
private final Integer status;
private String description;
@@ -43,7 +43,7 @@ public class RemainPlateController {
@PostMapping("/create")
@Operation(summary = "创建生产单余料板表(单个)")
@PreAuthorize("@ss.hasPermission('placeorder:remain')")
public CommonResult<Long> createRemainPlate(@Valid @RequestBody RemainPlateSaveReqVO createReqVO) {
public CommonResult<Boolean> createRemainPlate(@Valid @RequestBody RemainPlateSaveReqVO createReqVO) {
return success(remainPlateService.createRemainPlate(createReqVO));
}
@@ -66,7 +66,7 @@ public class RemainPlateController {
@Operation(summary = "余料板批量核销")
@PreAuthorize("@ss.hasPermission('placeorder:remain')")
public CommonResult<Boolean> updateRemainPlate(@RequestBody RemainPlateUptReqVO updateReqVO) {
remainPlateService.updateRemainPlateStatus(updateReqVO.getIds(),
remainPlateService.updateRemainPlateStatus(updateReqVO.getId(),
updateReqVO.getStatus(),
updateReqVO.getUseType(),
updateReqVO.getPlanId());
@@ -77,7 +77,7 @@ public class RemainPlateController {
@Operation(summary = "余料板批量释放")
@PreAuthorize("@ss.hasPermission('manage:remain-plate:update')")
public CommonResult<Boolean> revertRemainPlate(@RequestBody RemainPlateUptReqVO updateReqVO) {
remainPlateService.revertRemainPlateStatus(updateReqVO.getIds(),updateReqVO.getStatus());
remainPlateService.revertRemainPlateStatus(updateReqVO.getId(),updateReqVO.getStatus());
return success(true);
}
@@ -9,13 +9,13 @@ import java.util.Set;
@Data
public class RemainPlateUptReqVO {
@Schema(description = "余料板集", requiredMode = Schema.RequiredMode.REQUIRED, example = "16470")
private Set<Long> ids;
@Schema(description = "余料板集", example = "16470")
private Set<Long> id;
@Schema(description = "余料板状态,0未使用,1使用中", example = "1")
private Integer status;
@Schema(description = "使用类型,0核销,1排单,2补板", example = "0")
@Schema(description = "使用类型,1核销,2排单,3补板", example = "0")
private Integer useType;
@Schema(description = "排单 ID", example = "6628")
@@ -116,6 +116,9 @@ public class OrderPlateDO extends BaseDO {
// 是否孤形对角
private Boolean isArcAcross;
// 是否排孔
private Boolean isRowHole;
// 模块类型 ID
private Long moduleTypeId;
@@ -1,5 +1,6 @@
package com.cf.imes.module.manage.dal.mysql.remainplaten;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
@@ -8,6 +9,7 @@ import com.cf.imes.module.manage.controller.admin.plate.vo.remain.RemainPlatePag
import com.cf.imes.module.manage.dal.dataobject.remainplaten.RemainPlateDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Set;
/**
@@ -53,4 +55,39 @@ public interface RemainPlateMapper extends BaseMapperX<RemainPlateDO> {
.eq("organ_id",organId)
.in("id", ids));
}
// 查询该排单是否已经添加余料
default List<RemainPlateDO> selectRemainPlatesByInitPlanId(Long initPlanId, Integer deleted, Long organId) {
return selectList(new LambdaUpdateWrapper<RemainPlateDO>()
.eq(RemainPlateDO::getInitPlanId, initPlanId)
.eq(RemainPlateDO::getDeleted, deleted)
.eq(RemainPlateDO::getOrganId, organId));
}
// 判断该排单是否存在以使用的余料
default List<RemainPlateDO> selectRemainPlatesByPlanId(Long planId, Integer status, Integer deleted, Long organId) {
return selectList(new LambdaUpdateWrapper<RemainPlateDO>()
.eq(RemainPlateDO::getPlanId, planId)
.eq(RemainPlateDO::getStatus, status)
.eq(RemainPlateDO::getDeleted, deleted)
.eq(RemainPlateDO::getOrganId, organId));
}
// 通过排单id批量余料板
default void deleteRemainPlate(Long initPlanId, Long organId) {
update(new UpdateWrapper<RemainPlateDO>()
.set("deleted", 1)
.eq("init_plan_id", initPlanId)
.eq("organ_id", organId));
}
// 根据使用排单id批量还原状态
default void updateRemainPlateStatusByPlanId(Integer status, Integer useType,Long organId,Long planId) {
update(new UpdateWrapper<RemainPlateDO>()
.set("status", status)
.set("use_type", useType)
.set("plan_id","")
.eq("organ_id",organId)
.eq("plan_id", planId));
}
}
@@ -21,12 +21,12 @@ public interface RemainPlateService {
* @param createReqVO 创建信息
* @return 编号
*/
Long createRemainPlate(@Valid RemainPlateSaveReqVO createReqVO);
Boolean createRemainPlate(@Valid RemainPlateSaveReqVO createReqVO);
/**
* 创建生产单余料板表
*
* @param createReqVOS 创建信息
* @param createReqVOS 创建信息 多个
* @return 编号
*/
Boolean createRemainPlateMultiple(@Valid Set<RemainPlateSaveReqVO> createReqVOS);
@@ -5,6 +5,7 @@ import com.cf.imes.module.manage.controller.admin.plate.vo.remain.RemainPlatePag
import com.cf.imes.module.manage.controller.admin.plate.vo.remain.RemainPlateSaveReqVO;
import com.cf.imes.module.manage.dal.dataobject.remainplaten.RemainPlateDO;
import com.cf.imes.module.manage.dal.mysql.remainplaten.RemainPlateMapper;
import com.cf.imes.module.manage.enums.DeletedCodeEnum;
import com.cf.imes.module.manage.enums.RemainPlateStatusEnum;
import com.cf.imes.module.manage.enums.RemainPlateUseTypeEnum;
import org.springframework.stereotype.Service;
@@ -35,18 +36,29 @@ public class RemainPlateServiceImpl implements RemainPlateService {
private RemainPlateMapper remainPlateMapper;
@Override
public Long createRemainPlate(RemainPlateSaveReqVO createReqVO) {
public Boolean createRemainPlate(RemainPlateSaveReqVO createReqVO) {
List<RemainPlateDO> remainPlates = new ArrayList<>();
// 插入
RemainPlateDO remainPlate = BeanUtils.toBean(createReqVO, RemainPlateDO.class);
remainPlateMapper.insert(remainPlate);
// 返回
return remainPlate.getId();
if (createReqVO.getCount() > 1) {
for (int i = 0; i < createReqVO.getCount(); i++) {
RemainPlateDO remainPlate = BeanUtils.toBean(createReqVO, RemainPlateDO.class).setCount(1);
remainPlates.add(remainPlate);
}
}
// 批量增加
return remainPlateMapper.insertBatch(remainPlates);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean createRemainPlateMultiple(Set<RemainPlateSaveReqVO> createReqVOS) {
Collection<RemainPlateDO> remainPlates = new ArrayList<>();
createReqVOS.forEach(createReqVO -> {
// 判断该排单是否已经添加过余料
if (remainPlateMapper.selectRemainPlatesByInitPlanId(createReqVO.getInitPlanId(), DeletedCodeEnum.NOT_DELETED.getStatus(), OrganContextHolder.getOrganId()).size() > 0) {
// 删除余料
remainPlateMapper.deleteRemainPlate(createReqVO.getInitPlanId(), OrganContextHolder.getOrganId());
}
RemainPlateDO remainPlate = BeanUtils.toBean(createReqVO, RemainPlateDO.class);
remainPlates.add(remainPlate);
});
@@ -55,25 +67,39 @@ public class RemainPlateServiceImpl implements RemainPlateService {
@Override
@Transactional(rollbackFor = Exception.class)
public void updateRemainPlateStatus(Set<Long> ids, Integer status, Integer useType,Long planId) {
//判断是否符合核销标准
validateRemainPlateStatus(ids,RemainPlateStatusEnum.IN_USE.getStatus());
//以id为条件批量修改余料库中的状态
remainPlateMapper.updateRemainPlateStatus(ids, status, useType, OrganContextHolder.getOrganId(),planId);
public void updateRemainPlateStatus(Set<Long> ids, Integer status, Integer useType, Long planId) {
if (useType != RemainPlateUseTypeEnum.TYPE_ONE.getStatus() && useType != RemainPlateUseTypeEnum.TYPE_ZERO.getStatus()) { //余料使用状态为2或3
// 判断该排单是否存在以使用的余料
if (remainPlateMapper.selectRemainPlatesByPlanId(planId, RemainPlateStatusEnum.IN_USE.getStatus(),
DeletedCodeEnum.NOT_DELETED.getStatus(), OrganContextHolder.getOrganId()).size() > 0) {
// 余料状态还原
remainPlateMapper.updateRemainPlateStatusByPlanId(RemainPlateStatusEnum.UNUSED.getStatus(), RemainPlateUseTypeEnum.TYPE_ZERO.getStatus(),
OrganContextHolder.getOrganId(), planId);
}
}
if (ids != null){
//判断是否符合核销标准
validateRemainPlateStatus(ids, RemainPlateStatusEnum.IN_USE.getStatus());
//以id为条件批量修改余料库中的状态
remainPlateMapper.updateRemainPlateStatus(ids, status, useType, OrganContextHolder.getOrganId(), planId);
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void revertRemainPlateStatus(Set<Long> ids, Integer status) {
if (ids == null) {
throw exception(REMAIN_PLATE_ID_NOT_EXISTS);
}
// 判断余料的状态是否存在使用中
validateRemainPlateStatus(ids,RemainPlateStatusEnum.UNUSED.getStatus());
validateRemainPlateStatus(ids, RemainPlateStatusEnum.UNUSED.getStatus());
// 判断使用类型是否为核销
for (Long id : ids) {
if (validateRemainPlateUseType(id).equals( RemainPlateUseTypeEnum.TYPE_ONE.getStatus())) {
if (!validateRemainPlateUseType(id).equals(RemainPlateUseTypeEnum.TYPE_ONE.getStatus())) {
throw exception(REMAIN_PLATE_USR_TYPE);
}
}
remainPlateMapper.updateRemainPlateStatus(ids, status, null, OrganContextHolder.getOrganId(),0L);
remainPlateMapper.updateRemainPlateStatus(ids, status, null, OrganContextHolder.getOrganId(), 0L);
}
@Override
@@ -81,14 +107,14 @@ public class RemainPlateServiceImpl implements RemainPlateService {
// 校验存在
validateRemainPlateExists(updateReqVO.getId());
// 是否使用
if (validateRemainPlateStatus(updateReqVO.getId()) == RemainPlateStatusEnum.IN_USE.getStatus()){
if (validateRemainPlateStatus(updateReqVO.getId()) == RemainPlateStatusEnum.IN_USE.getStatus()) {
throw exception(REMAIN_PLATE_STATUS_USED);
}
// 判断是否为开料添加
RemainPlateDO updateObj = new RemainPlateDO();
if (validateRemainPlateIsCutting(updateReqVO.getId())){
if (validateRemainPlateIsCutting(updateReqVO.getId())) {
updateObj.setRemark(updateReqVO.getRemark());
}else {
} else {
// 更新
updateObj = BeanUtils.toBean(updateReqVO, RemainPlateDO.class);
}
@@ -98,8 +124,11 @@ public class RemainPlateServiceImpl implements RemainPlateService {
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteRemainPlate(Set<Long> ids) {
if (ids == null) {
throw exception(REMAIN_PLATE_ID_NOT_EXISTS);
}
// 判断余料的状态是否存在使用中
validateRemainPlateStatus(ids,RemainPlateStatusEnum.IN_USE.getStatus());
validateRemainPlateStatus(ids, RemainPlateStatusEnum.IN_USE.getStatus());
// 删除
remainPlateMapper.deleteBatchIds(ids);
}
@@ -123,7 +152,7 @@ public class RemainPlateServiceImpl implements RemainPlateService {
}
private boolean validateRemainPlateIsCutting(Long id) {
return remainPlateMapper.selectById(id).getIsCutting();
return remainPlateMapper.selectById(id).getIsCutting();
}
private Integer validateRemainPlateStatus(Long id) {
@@ -269,6 +269,7 @@ public interface ErrorCodeConstants {
ErrorCode ERR = new ErrorCode(1_002_038_001, "未知错误");
ErrorCode REMAIN_PLATE_STATUS_USED = new ErrorCode(1_002_038_001, "余料板正在使用中,禁止修改");
ErrorCode REMAIN_PLATE_STATUS_NO_USED = new ErrorCode(1_002_038_001, "余料板未使用");
ErrorCode REMAIN_PLATE_USR_TYPE = new ErrorCode(1_002_038_001, "余料板使用类型为不可核销类型");
ErrorCode REMAIN_PLATE_STATUS_NO_USED = new ErrorCode(1_002_038_002, "余料板未使用");
ErrorCode REMAIN_PLATE_USR_TYPE = new ErrorCode(1_002_038_003, "余料板使用类型为不可核销类型");
ErrorCode REMAIN_PLATE_ID_NOT_EXISTS = new ErrorCode(1_002_038_004, "未选中余料板,请选择余料板");
}
@@ -346,19 +346,13 @@ public class PermissionServiceImpl implements PermissionService {
}
// 前端没传或者查一次后切换了组织导致跟角色组织不一致的统一为角色的组织
Long roleOrganId = role.getOrganId();
if (Objects.isNull(organId) || ObjectUtil.notEqual(roleOrganId, organId)) {
boolean isOrganRole = Objects.equals(roleId, InternalRoleConstants.ORGAN_ADMIN_ROLE_ID) || Objects.equals(roleId, InternalRoleConstants.ORGAN_STAFF_ROLE_ID);
// 内置角色还是按照机构来存
if (!isOrganRole && (Objects.isNull(organId) || ObjectUtil.notEqual(roleOrganId, organId))) {
organId = roleOrganId;
}
final Long finalOrganId = organId;
// 当前用户不能操作含有自己的角色
if (CollectionUtil.isNotEmpty(userIds)) {
Long incloudSelf = userIds.stream().filter(userId -> userId.equals(loginUser.getId())).findAny().orElse(null);
if (incloudSelf != null) {
throw new ServiceException(ROLE_ME_ERROR);
}
}
// 获得角色下的角色用户列表
Set<Long> roleUserIds = convertSet(userRoleMapper.selectList(new LambdaQueryWrapperX<UserRoleDO>()
.eqIfPresent(UserRoleDO::getOrganId, organId)
@@ -378,6 +372,11 @@ public class PermissionServiceImpl implements PermissionService {
// 筛选要删除的userRole:前端没有,数据库有
Collection<Long> deleteRoleUserIds = CollUtil.subtract(roleUserIds, userIds);
if (!CollectionUtil.isEmpty(deleteRoleUserIds)) {
// 当前用户不能移除自身的角色
Long incloudSelf = deleteRoleUserIds.stream().filter(userId -> userId.equals(loginUser.getId())).findAny().orElse(null);
if (incloudSelf != null) {
throw new ServiceException(ROLE_ME_ERROR);
}
userRoleMapper.deleteListByRoleIdAndUserIds(roleId, deleteRoleUserIds);
}