Commit 6a3e641c by 李小惠

修改出入库数据结构以及涉及到的接口,修改记账接口

parent 73f369aa
......@@ -19,5 +19,4 @@ public class DetailJsonReq {
//Epc类型(0固定资产1库存物资非固定资产)
private Integer property;
private List<DetailJsonReq> childDetailJson;
}
......@@ -14,7 +14,7 @@ public class UpdateEquipmentSizeReq {
@NotBlank(message = "装备号型主键不能为空", groups = {ValidationApi.edit.class, ValidationApi.delete.class, ValidationApi.detail.class})
private String id;
@NotBlank(message = "装备类型id不能为空", groups = {ValidationApi.edit.class, ValidationApi.add.class})
@NotBlank(message = "装备类型id不能为空", groups = { ValidationApi.add.class})
private String typeId;
private String code;
......
......@@ -18,16 +18,16 @@ public class UpdateEquipmentTypeReq {
private String state;
private String unitType;
@NotBlank(message = "编码不能为空", groups = {ValidationApi.edit.class, ValidationApi.add.class})
// @NotBlank(message = "编码不能为空", groups = { ValidationApi.add.class})
private String code;
@NotBlank(message = "名称不能为空", groups = {ValidationApi.edit.class, ValidationApi.add.class})
private String name;
private String nickName;
private String note;
@NotBlank(message = "上级不能为空", groups = {ValidationApi.edit.class, ValidationApi.add.class})
@NotBlank(message = "上级不能为空", groups = { ValidationApi.add.class})
private String parentId;
@NotBlank(message = "上级集合不能为空", groups = {ValidationApi.edit.class, ValidationApi.add.class})
@NotBlank(message = "上级集合不能为空", groups = { ValidationApi.add.class})
private String parentIds;
private int warrantyPeriod;
......
......@@ -11,6 +11,7 @@ public enum WarehouseExceptionEnum implements IExceptionEnum {
* 仓库信息不存在
*/
WAREHOUSE_NOT_EXIST(CommonConstant.DEFAULT_USER_ERROR_CODE + JYZBConstant.JYZB_EXCEPTION_STEP_CODE + 12, "仓库信息不存在"),
WAREHOUSE_IS_LOCKED(CommonConstant.DEFAULT_USER_ERROR_CODE + JYZBConstant.JYZB_EXCEPTION_STEP_CODE + 12, "仓库锁库中,记账失败"),
;
......
......@@ -179,7 +179,11 @@ public class EquipmentTypeServiceImpl extends ServiceImpl<EquipmentTypeMapper, E
.collect(Collectors.toSet());
// 获取传入的supplierList中的所有供应商ID集合
Set<String> newSupplierIds = new HashSet<>(req.getSupplierList());
Set<String> newSupplierIds=new HashSet<>();
if (CollectionUtil.isNotEmpty(req.getSupplierList())){
newSupplierIds = new HashSet<>(req.getSupplierList());
}
// 需要新增的供应商关联数据
List<SupplierType> supplierTypeToAdd = new ArrayList<>();
......
......@@ -126,8 +126,8 @@ public class LogSummaryServiceImpl extends ServiceImpl<LogSummaryMapper, LogSumm
boolean c1=true;
if (ObjectUtil.isNotNull(order)){
//设置出入库仓库以及出入库数量
List<DetailJsonReq> detailJson = order.getDetailJson();
String jsonString = JSONObject.toJSONString(detailJson);
// List<DetailJsonReq> detailJson = order.getDetailJson();
// String jsonString = JSONObject.toJSONString(detailJson);
List<DetailOrderReq> orderDetailList = order.getOrderDetail();
OrderMain one = orderMainService.getOne(new LambdaQueryWrapper<OrderMain>()
.eq(OrderMain::getId, order.getId()));
......@@ -136,7 +136,7 @@ public class LogSummaryServiceImpl extends ServiceImpl<LogSummaryMapper, LogSumm
one.setActualQuantity(0);
}
// one.setActualQuantity(order.getActualQuantity()+one.getActualQuantity());
one.setDetailJson(jsonString);
// one.setDetailJson(jsonString);
one.setActualQuantity(order.getActualQuantity());
one.setOrderState(one.getOrderState());
one.setOrderState("finished");
......@@ -152,8 +152,10 @@ public class LogSummaryServiceImpl extends ServiceImpl<LogSummaryMapper, LogSumm
orderDetail.setActualNum(0);
}
// orderDetail.setModifyQuantity(orderDetail.getActualNum()+detailReq.getActualNum());
orderDetail.setDetailJson(JSONObject.toJSONString(detailReq.getDetailJson()));
orderDetail.setModifyQuantity(detailReq.getActualNum());
orderDetail.setActualNum(detailReq.getActualNum());
orderDetail.setActualTotalPrice(detailReq.getPrice());
orderDetail.setUpdateTime(DateTimeUtil.getCurrentDateTime());
flag=true;
break;
......@@ -162,6 +164,7 @@ public class LogSummaryServiceImpl extends ServiceImpl<LogSummaryMapper, LogSumm
if (!flag){
orderDetail.setActualNum(0);
orderDetail.setModifyQuantity(0);
orderDetail.setActualTotalPrice(BigDecimal.ZERO);
orderDetail.setUpdateTime(DateTimeUtil.getCurrentDateTime());
}
}
......@@ -307,14 +310,14 @@ public class LogSummaryServiceImpl extends ServiceImpl<LogSummaryMapper, LogSumm
string=string+logSummary.getLocationName()+":出库【"+logSummary.getEquipmentList()+"】,数量:"+logSummary.getNumber()+"\n";
}
LogSummary logSummaryQuick=new LogSummary();
if (logreq.getBussinessType().equals("quick")){
if (logreq.getBussinessType().equals("quick")){//如果是快速出库的同时需要创建快速入库
logSummaryQuick= saveLogSummary(logreq,ordermain.getLocationId(),ordermain.getLocationName(),"in");
sumList.add(logSummaryQuick);
stringQuick=stringQuick+logSummaryQuick.getLocationName()+":入库【"+logSummaryQuick.getEquipmentList()+"】,数量:"+logSummary.getNumber()+"\n";
}
sumList.add(logSummary);
logSummaryService.saveBatch(sumList);
sumList.clear();
Map<String, String> map = setState(logreq.getOutInState(), logreq.getBussinessType());
......@@ -347,9 +350,9 @@ public class LogSummaryServiceImpl extends ServiceImpl<LogSummaryMapper, LogSumm
// }
}
//如果是快速移库,那么直接将物资的locationId进行修改
// //如果是快速移库,那么直接将物资的locationId进行修改
if(logreq.getBussinessType().equals("quick")){
Inventory inventory = saveInventory(logreq.getOrgId(),logreq.getLocationId(),logreq,detailLogReq, map, logSummary.getOutInState());
Inventory inventory = saveInventory(logreq.getOrgId(),ordermain.getLocationId(),logreq,detailLogReq, map, "in");
inventoryList.add(inventory);
}
//存放logdetail信息
......@@ -404,6 +407,7 @@ public class LogSummaryServiceImpl extends ServiceImpl<LogSummaryMapper, LogSumm
LambdaUpdateWrapper<Inventory> allocateInWrapper1 = Wrappers.lambdaUpdate();
LambdaUpdateWrapper<WarehouseInventory> updateStateWrapper2 = Wrappers.lambdaUpdate();
LambdaUpdateWrapper<WarehouseInventory> allocateInWrapper2 = Wrappers.lambdaUpdate();
LambdaQueryWrapper<WarehouseInventory> destroyOutWrapper =Wrappers.lambdaQuery();
for (Inventory inventory:inventoryList) {
if (inventory.getBussinessType().equals("allocate") && inventory.getLocationState().equals("in") && !ObjectUtil.isNull(ordermain)){
//调拨入库
......@@ -426,7 +430,14 @@ public class LogSummaryServiceImpl extends ServiceImpl<LogSummaryMapper, LogSumm
.set(WarehouseInventory::getOrgId,null)
.set(WarehouseInventory::getLocationId,null)
.set(WarehouseInventory::getLocationState,"out");
}else {
}else if (inventory.getBussinessType().equals("destruction")){
updateStateWrapper1.or().eq(Inventory::getEpc,inventory.getEpc())
.set(Inventory::getLocationState,"out")
.set(Inventory::getBussinessState,"destruction")
.set(Inventory::getLocationId,inventory.getLocationId())
.set(Inventory::getState,"destory");
destroyOutWrapper.or().eq(WarehouseInventory::getEpc,inventory.getEpc());
}else{
//其他情况
if (inventory.getBussinessType().equals("quick")){
updateStateWrapper1.or().eq(Inventory::getEpc,inventory.getEpc())
......@@ -446,8 +457,10 @@ public class LogSummaryServiceImpl extends ServiceImpl<LogSummaryMapper, LogSumm
updateStateWrapper2.or().eq(WarehouseInventory::getEpc,inventory.getEpc())
.set(WarehouseInventory::getLocationState,inventory.getLocationState());
}
}
}
......@@ -458,7 +471,7 @@ public class LogSummaryServiceImpl extends ServiceImpl<LogSummaryMapper, LogSumm
warehouseInventoryService.update(updateStateWrapper2);
}
System.out.println(1111);
if (!allocateInWrapper1.isEmptyOfWhere()){
inventoryService.update(allocateInWrapper1);
......
......@@ -22,6 +22,7 @@ import com.junmp.jyzb.api.bean.vo.InOrderInfo;
import com.junmp.jyzb.api.exception.JYZBAppException;
import com.junmp.jyzb.api.exception.enums.InventoryExceptionEnum;
import com.junmp.jyzb.api.exception.enums.OrderExceptionEnum;
import com.junmp.jyzb.api.exception.enums.WarehouseExceptionEnum;
import com.junmp.jyzb.cache.MsgRedisCache;
import com.junmp.jyzb.entity.*;
import com.junmp.jyzb.mapper.InventorySummaryMapper;
......@@ -150,9 +151,9 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
@Override
public List<String> AddOrder(UpdateOrderReq req) {
//判断该单子是否是销毁出库单,如果是,则直接查询然后相应的库存进行修改,如果库存不足的情况下直接抛出异常提示
if (req.getBussinessType().equals("destruction") && ObjectUtil.isNotEmpty(req.getProcessDefinitionId())){
Boolean aBoolean= addOrRevokeAgentDestructionNum(req);
}
// if (req.getBussinessType().equals("destruction") && ObjectUtil.isNotEmpty(req.getProcessDefinitionId())){
// Boolean aBoolean= addOrRevokeAgentDestructionNum(req);
// }
//修改单据使用次数状态,判断数据库是否有该单据,如果有,那么就判断当前单号是否一致,如果不一致,修改单据使用次数
Long orgId=0L;
OrderMain one =null ;
......@@ -227,7 +228,7 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
detail.setType(order.getOrderType());
//将数量和价格进行累加
sumNum += detail.getPlanNum();
priceTotal = priceTotal.add(BigDecimal.valueOf(detail.getPlanNum()).multiply(detail.getPrice())) ;
priceTotal = priceTotal.add(BigDecimal.valueOf(detail.getPlanNum()).multiply(detail.getPlanTotalPrice())) ;
detail.setCreateTime(DateTimeUtil.getCurrentDateTime());
String productionDate = listReq.getProductionDate();
if (ObjectUtil.isNotNull(productionDate) && !productionDate.trim().isEmpty()){
......@@ -265,7 +266,6 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
processInstanceId= FlowInstanceService.startProcessInstanceById(startProcessInstanceDTO);
}else if (req.getBussinessType().equals("quick") && req.getExamineState().equals("working")){//快速移库单
startProcessInstanceDTO.setTypeOrder("quickOrder");
processInstanceId= FlowInstanceService.startProcessInstanceById(startProcessInstanceDTO);
......@@ -276,17 +276,17 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
}
}
//如果是销毁出库,并且有审核流,那么直接将库存汇总信息进行修改
if (req.getExamineState().equals("working") && req.getBussinessType().equals("destruction")){
List<InventorySummary> inventorySummaryList = inventorySummaryMapper.selectSumByItems(searchItem);
for (UpdateOrderDetailReq dq:req.getDetailList()) {
for (InventorySummary is:inventorySummaryList) {
if (is.getLocationId().equals(dq.getWarehouseId()) && is.getTypeId().equals(dq.getTypeId())
&& is.getSizeId().equals(dq.getSizeId()) && is.getUnitPrice().compareTo(dq.getPrice())==0){
}
}
}
}
// if (req.getExamineState().equals("working") && req.getBussinessType().equals("destruction")){
// List<InventorySummary> inventorySummaryList = inventorySummaryMapper.selectSumByItems(searchItem);
// for (UpdateOrderDetailReq dq:req.getDetailList()) {
// for (InventorySummary is:inventorySummaryList) {
// if (is.getLocationId().equals(dq.getWarehouseId()) && is.getTypeId().equals(dq.getTypeId())
// && is.getSizeId().equals(dq.getSizeId()) && is.getUnitPrice().compareTo(dq.getPrice())==0){
//
// }
// }
// }
// }
//list返回数据
List<String> list=new ArrayList<>();
......@@ -359,7 +359,7 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
for (InventorySummary is:inventorySummaryList) {
if (detialReq.getWarehouseId().equals(is.getLocationId()) && detialReq.getTypeId().equals(is.getTypeId())
&& detialReq.getSizeId().equals(is.getSizeId()) && detialReq.getPrice().compareTo(is.getUnitPrice())==0){
&& detialReq.getSizeId().equals(is.getSizeId()) && new BigDecimal(detialReq.getPrice()).compareTo(is.getUnitPrice())==0){
if (ObjectUtil.isNull(is.getDestructionNumber())){
is.setDestructionNumber(0);
......@@ -810,191 +810,132 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
.eq(OrderDetail::getOrderId, req.getId())
.orderByDesc(OrderDetail::getCreateTime));
}
String detailJson = orderMain.getDetailJson();
List<DetailJsonReq> detailJsonReqs = JSONObject.parseArray(detailJson, DetailJsonReq.class);
List<OrderDetailDto> orderDetailDtoList=new ArrayList<>();
//直接将数据库中的子单进行遍历,将orderMain中的具体detailjson进行解析并且重新修改子单的实际出入库数量,在将实际出入库信息存放到子单的child中返回给前端
Map<String, DetailJsonReq> summaryMap = new HashMap<>();
//遍历第一遍(确保号型一致,类型一致,价格一致的情况下该出入库信息存在该子单据中)
for (OrderDetail orderDetail:list) {
OrderDetailDto orderDetailDto = new OrderDetailDto();
BeanPlusUtil.copyProperties(orderDetail,orderDetailDto);
if (CollectionUtil.isNotEmpty(detailJsonReqs)){
for (int i = 0; i < detailJsonReqs.size(); i++) {
DetailJsonReq detailReq = detailJsonReqs.get(i);
if (detailReq.getTypeId().equals(orderDetail.getTypeId())
&& detailReq.getSizeId().equals(orderDetail.getSizeId())
&& detailReq.getPrice().compareTo(orderDetail.getPrice())==0){//如果类型、号型、单价与子单一致,那么直接存在子单中
List<DetailJsonReq> childJson = orderDetailDto.getChildJson();
if (CollectionUtil.isEmpty(childJson)){
List<DetailJsonReq> list1=new ArrayList<>();
list1.add(detailReq);
orderDetailDto.setChildJson(list1);
}else {
childJson.add(detailReq);
orderDetailDto.setChildJson(childJson);
}
detailJsonReqs.remove(detailReq);
i--;
}
}
}else {
orderDetailDto.setChildJson(new ArrayList<>());
}
String detailJson = orderDetail.getDetailJson();
List<DetailJsonReq> detailJsonReqs = JSONObject.parseArray(detailJson, DetailJsonReq.class);
orderDetailDto.setChildJson(detailJsonReqs);
orderDetailDtoList.add(orderDetailDto);
}
//遍历第二遍,将剩余多的单子存放到sizeId和typeId一样的第一个子单中去
if (CollectionUtil.isNotEmpty(detailJsonReqs)){
for (OrderDetailDto dto:orderDetailDtoList) {
for (int i = 0; i < detailJsonReqs.size(); i++) {
DetailJsonReq deReq = detailJsonReqs.get(i);
if (dto.getTypeId().equals(deReq.getTypeId()) && dto.getSizeId().equals(deReq.getSizeId())){
List<DetailJsonReq> childJson = dto.getChildJson();
if (CollectionUtil.isEmpty(childJson)){
List<DetailJsonReq> list1=new ArrayList<>();
list1.add(deReq);
dto.setChildJson(list1);
}else {
childJson.add(deReq);
dto.setChildJson(childJson);
}
detailJsonReqs.remove(deReq);
i--;
}
}
}
}
//遍历第三遍(将每个childJson进行汇总,并且将具体存放到每个childDetailJson中去)
for (OrderDetailDto dto:orderDetailDtoList) {
//具体的值
List<DetailJsonReq> childJson = dto.getChildJson();
//最终存储数据list
List<DetailJsonReq> detailList=new ArrayList<>();
//第二层数据
List<DetailJsonReq> filteredValues=new ArrayList<>();
for (DetailJsonReq dReq:childJson) {
String key = dReq.getLocationId() + "_" + dReq.getSizeId() + "_" + dReq.getTypeId();
DetailJsonReq summary = summaryMap.get(key);
if (summary == null) {
summary = new DetailJsonReq();
summary.setLocationId(dReq.getLocationId());
summary.setLocationName(dReq.getLocationName());
summary.setSizeId(dReq.getSizeId());
summary.setTypeId(dReq.getTypeId());
detailList.add(dReq);
summary.setChildDetailJson(detailList);
summaryMap.put(key, summary);
}
// 汇总数量
if (dReq.getNum() != null) {
Integer newNum = summary.getNum() != null ? summary.getNum() + dReq.getNum() : dReq.getNum();
summary.setNum(newNum);
summary.setModifyQuantity(newNum);
}
// 汇总子数据
if (dReq.getChildDetailJson() != null) {
detailList.add(dReq);
summary.getChildDetailJson().addAll(detailList);
}
if (!summaryMap.isEmpty()){
filteredValues = summaryMap.entrySet().stream()
.filter(entry -> {
String[] keyParts = entry.getKey().split("_");
String typeId = keyParts[2];
String sizeId = keyParts[1];
String locationId = keyParts[0];
return typeId.equals(dReq.getTypeId()) && sizeId.equals(dto.getSizeId()) && locationId.equals(dReq.getLocationId());
})
.map(Map.Entry::getValue)
.collect(Collectors.toList());
}
}
dto.setChildJson(filteredValues);
summaryMap.clear();
}
// //我先遍历一遍,
// String detailJson = orderMain.getDetailJson();
// List<DetailJsonReq> detailJsonReqs = JSONObject.parseArray(detailJson, DetailJsonReq.class);
// List<OrderDetailDto> orderDetailDtoList=new ArrayList<>();
// //直接将数据库中的子单进行遍历,将orderMain中的具体detailjson进行解析并且重新修改子单的实际出入库数量,在将实际出入库信息存放到子单的child中返回给前端
// Map<String, DetailJsonReq> summaryMap = new HashMap<>();
// //遍历第一遍(确保号型一致,类型一致,价格一致的情况下该出入库信息存在该子单据中)
// for (OrderDetail orderDetail:list) {
// OrderDetailDto orderDetailDto = new OrderDetailDto();
// BeanPlusUtil.copyProperties(orderDetail,orderDetailDto);
// //遍历detailJson将不同的locationId,sizeId,typeId,price作为唯一的键进行存储,并且存放至map中
//
// if (CollectionUtil.isNotEmpty(detailJsonReqs)){
// for (int i = 0; i < detailJsonReqs.size(); i++) {
// DetailJsonReq detailReq = detailJsonReqs.get(i);
// if (detailReq.getTypeId().equals(orderDetail.getTypeId())
// && detailReq.getSizeId().equals(orderDetail.getSizeId())
// && detailReq.getPrice().compareTo(orderDetail.getPrice())==0){//如果类型、号型、单价与子单一致,那么直接存在子单中
// List<DetailJsonReq> childJson = orderDetailDto.getChildJson();
// if (CollectionUtil.isEmpty(childJson)){
// List<DetailJsonReq> list1=new ArrayList<>();
// list1.add(detailReq);
// orderDetailDto.setChildJson(list1);
// }else {
// childJson.add(detailReq);
// orderDetailDto.setChildJson(childJson);
// }
// detailJsonReqs.remove(detailReq);
// i--;
//
// }
// }
//
// if (!summaryMap.isEmpty()){
// filteredValues = summaryMap.entrySet().stream()
// .filter(entry -> {
// String[] keyParts = entry.getKey().split("_");
// String typeId = keyParts[2];
// String sizeId = keyParts[1];
// String price = keyParts[3];
// return typeId.equals(orderDetail.getTypeId()) && sizeId.equals(orderDetail.getSizeId())
// && new BigDecimal(price).compareTo(orderDetail.getPrice())==0;
// })
// .map(Map.Entry::getValue)
// .collect(Collectors.toList());
// }else {
// orderDetailDto.setChildJson(new ArrayList<>());
// }
//
// orderDetailDto.setChildJson(filteredValues);
// summaryMap.remove(orderDetail.getWarehouseId() + "_" + orderDetail.getSizeId() + "_" + orderDetail.getTypeId()+"_"+orderDetail.getPrice());
// int sum = filteredValues.stream()
// .mapToInt(DetailJsonReq::getNum) // 获取每个对象的num属性值
// .sum();
// orderDetailDto.setActualNum(sum);
// orderDetailDto.setModifyQuantity(sum);
// orderDetail.setActualNum(sum);
// orderDetail.setModifyQuantity(sum);
// orderDetailDtoList.add(orderDetailDto);
// }
// //如果不相同,则表示存在不属于子单据数据,号型相等类型相等就是单价不相等,那么我要做的就是去掉price维度,重新遍历一遍子单,将typeid和sizeid满足条件的第一个的数量进行添加上去
// if (!summaryMap.isEmpty()){
// //需要进行两次双重循环,一次是返回前端,一次是更新数据库
// for (String key:summaryMap.keySet()) {
// String[] keyParts = key.split("_");
// String typeId = keyParts[2];
// String sizeId = keyParts[1];
// DetailJsonReq detailJsonReq = summaryMap.get(key);
// for (OrderDetailDto orderDetailDto:orderDetailDtoList) {
// if (orderDetailDto.getSizeId().equals(sizeId)&& orderDetailDto.getTypeId().equals(typeId)){
// orderDetailDto.setActualNum(orderDetailDto.getActualNum()+detailJsonReq.getNum());
// orderDetailDto.setModifyQuantity(orderDetailDto.getModifyQuantity()+detailJsonReq.getNum());
// List<DetailJsonReq> childJson=new ArrayList<>();
// if (CollectionUtil.isNotEmpty(orderDetailDto.getChildJson())){
// childJson = orderDetailDto.getChildJson();
// childJson.add(detailJsonReq);
// orderDetailDto.setChildJson(childJson);
// //遍历第二遍,将剩余多的单子存放到sizeId和typeId一样的第一个子单中去
// if (CollectionUtil.isNotEmpty(detailJsonReqs)){
// for (OrderDetailDto dto:orderDetailDtoList) {
// for (int i = 0; i < detailJsonReqs.size(); i++) {
// DetailJsonReq deReq = detailJsonReqs.get(i);
// if (dto.getTypeId().equals(deReq.getTypeId()) && dto.getSizeId().equals(deReq.getSizeId())){
// List<DetailJsonReq> childJson = dto.getChildJson();
// if (CollectionUtil.isEmpty(childJson)){
// List<DetailJsonReq> list1=new ArrayList<>();
// list1.add(deReq);
// dto.setChildJson(list1);
// }else {
// childJson.add(detailJsonReq);
// orderDetailDto.setChildJson(childJson);
// childJson.add(deReq);
// dto.setChildJson(childJson);
// }
// break;
// detailJsonReqs.remove(deReq);
// i--;
// }
//
// }
//
// }
// for (String key:summaryMap.keySet()) {
// String[] keyParts = key.split("_");
// String typeId = keyParts[2];
// String sizeId = keyParts[1];
// DetailJsonReq detailJsonReq = summaryMap.get(key);
//
// for (OrderDetail orderDetail:list) {
// if (orderDetail.getSizeId().equals(sizeId)&& orderDetail.getTypeId().equals(typeId)){
// orderDetail.setActualNum(orderDetail.getActualNum()+detailJsonReq.getNum());
// orderDetail.setModifyQuantity(orderDetail.getModifyQuantity()+detailJsonReq.getNum());
// break;
// }
// }
// //遍历第三遍(将每个childJson进行汇总,并且将具体存放到每个childDetailJson中去)
// for (OrderDetailDto dto:orderDetailDtoList) {
// //具体的值
// List<DetailJsonReq> childJson = dto.getChildJson();
// //最终存储数据list
// List<DetailJsonReq> detailList=new ArrayList<>();
// //第二层数据
// List<DetailJsonReq> filteredValues=new ArrayList<>();
// for (DetailJsonReq dReq:childJson) {
// String key = dReq.getLocationId() + "_" + dReq.getSizeId() + "_" + dReq.getTypeId();
// DetailJsonReq summary = summaryMap.get(key);
// if (summary == null) {
// summary = new DetailJsonReq();
// summary.setLocationId(dReq.getLocationId());
// summary.setLocationName(dReq.getLocationName());
// summary.setSizeId(dReq.getSizeId());
// summary.setTypeId(dReq.getTypeId());
// detailList.add(dReq);
// summary.setChildDetailJson(detailList);
// summaryMap.put(key, summary);
// }
// // 汇总数量
// if (dReq.getNum() != null) {
// Integer newNum = summary.getNum() != null ? summary.getNum() + dReq.getNum() : dReq.getNum();
// summary.setNum(newNum);
// summary.setModifyQuantity(newNum);
// }
//
// // 汇总子数据
// if (dReq.getChildDetailJson() != null) {
// detailList.add(dReq);
// summary.getChildDetailJson().addAll(detailList);
// }
// if (!summaryMap.isEmpty()){
// filteredValues = summaryMap.entrySet().stream()
// .filter(entry -> {
// String[] keyParts = entry.getKey().split("_");
// String typeId = keyParts[2];
// String sizeId = keyParts[1];
// String locationId = keyParts[0];
// return typeId.equals(dReq.getTypeId()) && sizeId.equals(dto.getSizeId()) && locationId.equals(dReq.getLocationId());
// })
// .map(Map.Entry::getValue)
// .collect(Collectors.toList());
// }
// }
// dto.setChildJson(filteredValues);
//
// summaryMap.clear();
//
// }
orderDto.setDetailList(orderDetailDtoList);
return orderDto;
}
......@@ -1032,10 +973,17 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
@Transactional(rollbackFor = Exception.class)
@Override
public boolean Accounting(UpdateOrderReq req) {
//将组织机构下面的所有仓库进行查询
//判断传递的订单主id是否存在
OrderMain orderMain = orderMainExist(req.getId());
List<DetailJsonReq> childJsonList=new ArrayList<>();
List<Warehouse> warehouseList = warehouseService.list(new LambdaQueryWrapper<Warehouse>().eq(Warehouse::getOrgId,
orderMain.getOrderType().equals("in") ? orderMain.getEndOrgId() : orderMain.getStartOrgId()));
Map<String,Warehouse> warehouseMap=new HashMap<>();
warehouseList.forEach(warehouse -> warehouseMap.put(warehouse.getId(), warehouse));
// List<DetailJsonReq> childJsonList=new ArrayList<>();
// String detailJson = orderMain.getDetailJson();
//出入库传递的具体汇总信息
// List<DetailJsonReq> detailJsonList = JSONObject.parseArray(detailJson, DetailJsonReq.class);
......@@ -1077,6 +1025,9 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
for (UpdateOrderDetailReq uploadDetailReq : reqList) {
OrderDetail orderDetail = new OrderDetail();
BeanPlusUtil.copyProperties(uploadDetailReq,orderDetail);
List<DetailJsonReq> JsonList = uploadDetailReq.getChildJson();
String jsonString = JSONObject.toJSONString(JsonList);
orderDetail.setDetailJson(jsonString);
if (ObjectUtil.isNull(uploadDetailReq.getActualNum())){
uploadDetailReq.setActualNum(0);
}
......@@ -1084,18 +1035,109 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
if (ObjectUtil.isNull(uploadDetailReq.getModifyQuantity())){
throw new ServiceException(OrderExceptionEnum.ORDER_NUM_IS_NULL);
}
Inventory inventory = new Inventory();
WarehouseInventory warehouseInventory=new WarehouseInventory();
if (uploadDetailReq.getModifyQuantity() >= 0 ){
//记账内容
List<DetailJsonReq> childJson = uploadDetailReq.getChildJson();
for (DetailJsonReq detailJsonReq:childJson) {
// List<DetailJsonReq> childJson = uploadDetailReq.getChildJson();
for (DetailJsonReq detailJsonReq:JsonList) {
if (!warehouseMap.isEmpty()){
//判断是否有key存在,如果没有直接报错
boolean b = warehouseMap.containsKey(detailJsonReq.getLocationId());
if (b){
//判断改仓库是否处于锁库状态,如果是提示错误仓库正在锁库中
Warehouse warehouse = warehouseMap.get(detailJsonReq.getLocationId());
if (warehouse.getIsLocked()){
throw new ServiceException(WarehouseExceptionEnum.WAREHOUSE_IS_LOCKED);
}
}
}
//记账差值
int subNum=detailJsonReq.getModifyQuantity()-detailJsonReq.getNum();
detailJsonReq.setSizeName(uploadDetailReq.getSizeName());
detailJsonReq.setTypeName(uploadDetailReq.getTypeName());
//为了记账时如果数量不一致取单据的单价进行计算,其他没有任何意义
detailJsonReq.setPrice(uploadDetailReq.getPrice());
//添加list为修改库存Summary
UpdateOrderDetailReq data = new UpdateOrderDetailReq();
data.setActualNum(detailJsonReq.getNum());
data.setWarehouseId(detailJsonReq.getLocationId());
data.setWarehouseName(detailJsonReq.getLocationName());
data.setSizeId(detailJsonReq.getSizeId());
data.setTypeId(detailJsonReq.getTypeId());
data.setPrice(detailJsonReq.getPrice().toString());
data.setProperty(detailJsonReq.getProperty());
data.setSizeName(detailJsonReq.getSizeName());
data.setTypeName(detailJsonReq.getTypeName());
data.setModifyQuantity(detailJsonReq.getModifyQuantity());
orderDetailReqList.add(data);
//添加出入库日志记录
s = s+detailJsonReq.getLocationName()+"--"+detailJsonReq.getTypeName()+"【"+
detailJsonReq.getSizeName()+"】,单价:"+detailJsonReq.getPrice()+",数量实入:"+detailJsonReq.getNum()+",记账:"+ detailJsonReq.getModifyQuantity()+"\n";
if (subNum>0){
//实际出库或者入库数量大于实际数量,则对空数据进行增删改查
if (orderMain.getOrderType().equals("in")){ //入库
for (int j = 0; j < subNum; j++) {
inventory.setEpc("0");
inventory.setLocationId(detailJsonReq.getLocationId());
inventory.setSizeId(detailJsonReq.getSizeId());
inventory.setTypeId(detailJsonReq.getTypeId());
inventory.setOrgId(orderMain.getEndOrgId());
inventory.setLocationType(0);
inventory.setPrice(detailJsonReq.getPrice());
inventory.setProperty(0);
addInvList.add(inventory);
warehouseInventory.setOrgId(orderMain.getEndOrgId());
warehouseInventory.setLocationId(detailJsonReq.getLocationId());
warehouseInventory.setTypeId(detailJsonReq.getTypeId());
warehouseInventory.setSizeId(detailJsonReq.getSizeId());
warehouseInventory.setLocationType("0");
addWareInvList.add(warehouseInventory);
}
}else {//出库
List<Inventory> list1 = inventoryService.list(new LambdaQueryWrapper<Inventory>()
.eq(Inventory::getEpc, "0")
.eq(Inventory::getLocationId, detailJsonReq.getLocationId())
.eq(Inventory::getSizeId, detailJsonReq.getSizeId())
.eq(Inventory::getOrgId, orderMain.getStartOrgId())
.eq(Inventory::getTypeId, detailJsonReq.getTypeId())
.eq(Inventory::getPrice, detailJsonReq.getPrice())
.eq(Inventory::getLocationType, "0"));
List<WarehouseInventory> list2 = warehouseInventoryService.list(new LambdaQueryWrapper<WarehouseInventory>()
.eq(WarehouseInventory::getEpc, "0")
.eq(WarehouseInventory::getLocationId, detailJsonReq.getLocationId())
.eq(WarehouseInventory::getOrgId, orderMain.getStartOrgId())
.eq(WarehouseInventory::getSizeId, detailJsonReq.getSizeId())
.eq(WarehouseInventory::getTypeId, detailJsonReq.getTypeId()));
if (list1.size()>0){
//如果记账数量大于库存中存在空数据,那么全部删除,否则选择前几条进行删除
if (subNum>=list1.size()){
delInvList.addAll(list1);
}else {
for (int j = 0; j < subNum; j++) {
delInvList.add(list1.get(j));
}
}
}
if (list2.size()>0){
if (subNum>=list2.size()){
delWareInvList.addAll(list2);
}else {
for (int j = 0; j < subNum; j++) {
delInvList.add(list1.get(j));
}
}
}
}
}
}
childJsonList.addAll(childJson);
// childJsonList.addAll(childJson);
//修改单子数量数量
orderDetail.setModifyQuantity(uploadDetailReq.getModifyQuantity());
......@@ -1103,142 +1145,12 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
orderDetailList.add(orderDetail);
updateQuantity+=orderDetail.getModifyQuantity();
}else {
throw new ServiceException(OrderExceptionEnum.ORDERDETAIL_ERROR);
}
}
//遍历childJsonList
for (DetailJsonReq jsonReq:childJsonList) {
List<DetailJsonReq> childDetailJsonList = jsonReq.getChildDetailJson();
Integer num=0;
BigDecimal price=BigDecimal.ZERO;
//遍历orderMian中的detailJson
boolean flag=false;
//如果记账数量大于实际出库数量并且实际出库数量与单子的金额都不一致的情况,那么我直接添加单子的数据进行记账
boolean tap=false;
int sum = childDetailJsonList.stream()
.mapToInt(DetailJsonReq::getNum) // 获取每个对象的num属性值
.sum();
if (jsonReq.getModifyQuantity()>sum){//默认记账数量与识别数量一致并且不能小于实际出入库数量
flag=true;
}
int i = jsonReq.getModifyQuantity() - sum;
for (DetailJsonReq detail:childDetailJsonList) {
num=detail.getNum();
price=detail.getPrice();
UpdateOrderDetailReq data = new UpdateOrderDetailReq();
data.setActualNum(detail.getNum());
data.setWarehouseId(jsonReq.getLocationId());
data.setWarehouseName(jsonReq.getLocationName());
data.setSizeId(jsonReq.getSizeId());
data.setTypeId(jsonReq.getTypeId());
data.setPrice(detail.getPrice());
data.setProperty(detail.getProperty());
data.setSizeName(jsonReq.getSizeName());
data.setTypeName(jsonReq.getTypeName());
data.setModifyQuantity(detail.getNum());
orderDetailReqList.add(data);
if (flag && detail.getPrice().compareTo(jsonReq.getPrice())==0){//如果记账多记了并且存在相同的价格,那么数量直接相加
s = s+jsonReq.getLocationName()+"--"+jsonReq.getTypeName()+"【"+
jsonReq.getSizeName()+"】,单价:"+price+",数量实入:"+detail.getNum()+",记账:"+(detail.getNum()+i)+"\n";
}else if (flag && detail.getPrice().compareTo(jsonReq.getPrice())!=0){
s = s+jsonReq.getLocationName()+"--"+jsonReq.getTypeName()+"【"+
jsonReq.getSizeName()+"】,单价:"+price+",数量实入:"+num+",记账:"+detail.getNum()+"\n";
} else if (!flag) {
s = s+jsonReq.getLocationName()+"--"+jsonReq.getTypeName()+"【"+
jsonReq.getSizeName()+"】,单价:"+price+",数量实入:"+num+",记账:"+detail.getNum()+"\n";
tap=true;
}
}
if (!tap){
UpdateOrderDetailReq data = new UpdateOrderDetailReq();
data.setActualNum(0);
data.setWarehouseId(jsonReq.getLocationId());
data.setWarehouseName(jsonReq.getLocationName());
data.setSizeId(jsonReq.getSizeId());
data.setTypeId(jsonReq.getTypeId());
data.setPrice(jsonReq.getPrice());
data.setProperty(0);
data.setSizeName(jsonReq.getSizeName());
data.setTypeName(jsonReq.getTypeName());
data.setModifyQuantity(sum);
orderDetailReqList.add(data);
}
Inventory inventory = new Inventory();
WarehouseInventory warehouseInventory=new WarehouseInventory();
if (ObjectUtil.isNull(jsonReq.getModifyQuantity()) ){
throw new ServiceException(OrderExceptionEnum.ORDER_NUM_IS_NULL);
}
if (i>0){
//实际出库或者入库数量大于实际数量,则对空数据进行增删改查
if (orderMain.getOrderType().equals("in")){ //入库
for (int j = 0; j < i; i++) {
inventory.setEpc("0");
inventory.setLocationId(jsonReq.getLocationId());
inventory.setSizeId(jsonReq.getSizeId());
inventory.setTypeId(jsonReq.getTypeId());
inventory.setOrgId(orderMain.getEndOrgId());
inventory.setLocationType(0);
inventory.setPrice(jsonReq.getPrice());
inventory.setProperty(0);
addInvList.add(inventory);
warehouseInventory.setOrgId(orderMain.getEndOrgId());
warehouseInventory.setLocationId(jsonReq.getLocationId());
warehouseInventory.setTypeId(jsonReq.getTypeId());
warehouseInventory.setSizeId(jsonReq.getSizeId());
warehouseInventory.setLocationType("0");
addWareInvList.add(warehouseInventory);
}
}else {//出库
List<Inventory> list1 = inventoryService.list(new LambdaQueryWrapper<Inventory>()
.eq(Inventory::getEpc, "0")
.eq(Inventory::getLocationId, jsonReq.getLocationId())
.eq(Inventory::getSizeId, jsonReq.getSizeId())
.eq(Inventory::getOrgId, orderMain.getStartOrgId())
.eq(Inventory::getTypeId, jsonReq.getTypeId())
.eq(Inventory::getPrice, jsonReq.getPrice())
.eq(Inventory::getLocationType, "0"));
List<WarehouseInventory> list2 = warehouseInventoryService.list(new LambdaQueryWrapper<WarehouseInventory>()
.eq(WarehouseInventory::getEpc, "0")
.eq(WarehouseInventory::getLocationId, jsonReq.getLocationId())
.eq(WarehouseInventory::getOrgId, orderMain.getStartOrgId())
.eq(WarehouseInventory::getSizeId, jsonReq.getSizeId())
.eq(WarehouseInventory::getTypeId, jsonReq.getTypeId()));
if (list1.size()>0){
//如果记账数量大于库存中存在空数据,那么全部删除,否则选择前几条进行删除
if (i>=list1.size()){
delInvList.addAll(list1);
}else {
for (int j = 0; j < i; j++) {
delInvList.add(list1.get(j));
}
}
}
if (list2.size()>0){
if (i>=list2.size()){
delWareInvList.addAll(list2);
}else {
for (int j = 0; j < i; j++) {
delInvList.add(list1.get(j));
}
}
}
}
}
}
if (addWareInvList.size()>0){
inventoryService.saveBatch(addInvList);
......@@ -1285,7 +1197,7 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
//如果是快速移库,记账完成之后新增入库单并且该单据不走审核流,但是审核状态和入库状态显示已完成
boolean g=true;
if (req.getBussinessType().equals("quick")){
g = handleQuickOrder(orderMain);
g = handleQuickOrder(orderMain,reqList);
}else {
d=updateSummaryInfo(req, orderDetailReqList, pubOrg.getOrgId(), pubOrg.getOrgCode(),pubOrg.getOrgName());
}
......@@ -1329,7 +1241,7 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
for (PoliceEquipment pEqs:list ) {
if (upReq.getSizeId().equals(pEqs.getSizeId()) && upReq.getTypeId().equals(pEqs.getTypeId())
&& upReq.getPrice().compareTo(pEqs.getPrice())==0){
&& new BigDecimal(upReq.getPrice()).compareTo(pEqs.getPrice())==0){
//如果数量大于等于的情况下直接将该条数据进行删除,否则直接修改数量并且更新
if (upReq.getModifyQuantity()>=pEqs.getNum()){
delList.add(pEqs);
......@@ -1370,7 +1282,7 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
policeEquipment.setInNum(0);
policeEquipment.setOutNum(updateOrderDetailReq.getModifyQuantity());
policeEquipment.setOrgId(orgId);
policeEquipment.setPrice(updateOrderDetailReq.getPrice());
policeEquipment.setPrice(new BigDecimal(updateOrderDetailReq.getPrice()));
policeEquipment.setLocationId(updateOrderDetailReq.getWarehouseId());
policeEquipment.setCreateTime(DateTimeUtil.getCurrentDateTime());
return policeEquipment;
......@@ -1435,7 +1347,7 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
boolean flag=false;
for (InventorySummary is:inventorySummaryList) {
if (upReq.getWarehouseId().equals(is.getLocationId()) && upReq.getSizeId().equals(is.getSizeId())
&& upReq.getTypeId().equals(is.getTypeId()) && upReq.getPrice().compareTo(is.getUnitPrice())==0){
&& upReq.getTypeId().equals(is.getTypeId()) && new BigDecimal(upReq.getPrice()).compareTo(is.getUnitPrice())==0){
is.setUpdateTime(DateTimeUtil.getCurrentDateTime());
//修改各种数量和价格
if (req.getOrderType().equals("in")){
......@@ -1446,7 +1358,7 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
case "other":
is.setStockNumber(is.getStockNumber()+upReq.getModifyQuantity());
is.setNumber(is.getStockNumber()+is.getOutboundNumber());
is.setPrice(is.getPrice().add(BigDecimal.valueOf(upReq.getModifyQuantity()).multiply(upReq.getPrice())) );
is.setPrice(is.getPrice().add(BigDecimal.valueOf(upReq.getModifyQuantity()).multiply(new BigDecimal(upReq.getPrice()))) );
break;
case "return":
case "repair":
......@@ -1459,17 +1371,18 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
is.setOutboundNumber(is.getOutboundNumber()-upReq.getModifyQuantity());
is.setStockNumber(is.getStockNumber()+upReq.getModifyQuantity());
}
is.setPrice(is.getPrice().add(BigDecimal.valueOf(upReq.getModifyQuantity()).multiply(upReq.getPrice())) );
is.setPrice(is.getPrice().add(BigDecimal.valueOf(upReq.getModifyQuantity()).multiply(new BigDecimal(upReq.getPrice()))) );
break;
}
}else {
switch (req.getBussinessType()){
case "destruction":
//我先把库存数量加回来,然后根据实际出库数量进行删减
is.setDestructionNumber(is.getDestructionNumber() - upReq.getPlanNum());
is.setNumber(is.getNumber() + upReq.getPlanNum());
is.setStockNumber(is.getStockNumber() + upReq.getPlanNum());
// //我先把库存数量加回来,然后根据实际出库数量进行删减
// is.setDestructionNumber(is.getDestructionNumber() - upReq.getPlanNum());
// is.setNumber(is.getNumber() + upReq.getPlanNum());
// is.setStockNumber(is.getStockNumber() + upReq.getPlanNum());
//直接减去库存数量
is.setNumber(Math.max(is.getNumber() - upReq.getModifyQuantity(), 0));
is.setPrice(is.getUnitPrice().multiply(BigDecimal.valueOf(is.getNumber())));
is.setStockNumber(Math.max(is.getStockNumber()-upReq.getModifyQuantity(),0));
......@@ -1479,12 +1392,12 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
case "allocate":
is.setNumber(Math.max(is.getNumber() - upReq.getModifyQuantity(), 0));
is.setStockNumber(Math.max(is.getStockNumber() - upReq.getModifyQuantity(), 0));
is.setPrice(is.getPrice().subtract(BigDecimal.valueOf(upReq.getModifyQuantity()).multiply(upReq.getPrice())) );
is.setPrice(is.getPrice().subtract(BigDecimal.valueOf(upReq.getModifyQuantity()).multiply(new BigDecimal(upReq.getPrice()))) );
break;
case "use":
is.setOutboundNumber(is.getOutboundNumber()+upReq.getModifyQuantity());
is.setStockNumber(Math.max(is.getStockNumber() - upReq.getModifyQuantity(), 0));
is.setPrice(is.getPrice().subtract(BigDecimal.valueOf(upReq.getModifyQuantity()).multiply(upReq.getPrice())) );
is.setPrice(is.getPrice().subtract(BigDecimal.valueOf(upReq.getModifyQuantity()).multiply(new BigDecimal(upReq.getPrice()))) );
if (ObjectUtil.isNull(is.getUseCount())){
is.setUseCount(0);
}
......@@ -1497,7 +1410,7 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
case "repair":
is.setOutboundNumber(is.getOutboundNumber()+upReq.getModifyQuantity());
is.setStockNumber(Math.max(is.getStockNumber() - upReq.getModifyQuantity(), 0));
is.setPrice(is.getPrice().subtract(BigDecimal.valueOf(upReq.getModifyQuantity()).multiply(upReq.getPrice())) );
is.setPrice(is.getPrice().subtract(BigDecimal.valueOf(upReq.getModifyQuantity()).multiply(new BigDecimal(upReq.getPrice()))) );
if (ObjectUtil.isNull(is.getFixCount())){
is.setFixCount(0);
}
......@@ -1506,7 +1419,7 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
case "other":
is.setOutboundNumber(is.getOutboundNumber()+upReq.getModifyQuantity());
is.setStockNumber(Math.max(is.getStockNumber() - upReq.getModifyQuantity(), 0));
is.setPrice(is.getPrice().subtract(BigDecimal.valueOf(upReq.getModifyQuantity()).multiply(upReq.getPrice())) );
is.setPrice(is.getPrice().subtract(BigDecimal.valueOf(upReq.getModifyQuantity()).multiply(new BigDecimal(upReq.getPrice()))) );
break;
// case "quick":
//
......@@ -1531,8 +1444,8 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
inventorySummary.setTypeId(upReq.getTypeId());
inventorySummary.setLocationName(upReq.getWarehouseName());
inventorySummary.setLocationId(upReq.getWarehouseId());
inventorySummary.setUnitPrice(upReq.getPrice());
inventorySummary.setPrice(BigDecimal.valueOf(upReq.getModifyQuantity()).multiply(upReq.getPrice()));
inventorySummary.setUnitPrice(new BigDecimal(upReq.getPrice()));
inventorySummary.setPrice(BigDecimal.valueOf(upReq.getModifyQuantity()).multiply(new BigDecimal(upReq.getPrice())));
inventorySummary.setLocationType("0");
inventorySummary.setBrokenNumber(0);
inventorySummary.setExpireNumber(0);
......@@ -1781,7 +1694,7 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
public boolean handleQuickOrder(OrderMain existOrder) {
public boolean handleQuickOrder(OrderMain existOrder,List<UpdateOrderDetailReq> reqList) {
//原来出库单的查询条件list(根据条件查询库存汇总表中包含有相同条件的数据)
List<Object[]> searchCriteria=new ArrayList<>();
//新建的入库单查询条件list(根据条件查询库存汇总表中是否包含有相同条件的数据)
......@@ -1808,15 +1721,37 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
//查询出库子单用于赋值到入库单中
List<OrderDetail> list = orderDetailService.list(new LambdaQueryWrapper<OrderDetail>()
.eq(OrderDetail::getOrderId, existOrder.getId()));
//查询条件,将所有查询条件放在searchCriteria中,用于修改库存表中的装备的仓库位置
//仓库id
String locationId = orderMain.getLocationId();
String locationName = orderMain.getLocationName();
//查询条件,将所有查询条件放在searchCriteria中,用于修改库存表中的装备的仓库位置
//循环记账子单
List<DetailJsonReq> jsonCollect =new ArrayList<>();
for (UpdateOrderDetailReq detailReq:reqList) {
List<DetailJsonReq> childJson = detailReq.getChildJson();
jsonCollect.addAll(childJson);
for (DetailJsonReq jsonReq:childJson) {
//移出仓库
Object[] criteria=new Object[]{existOrder.getStartOrgId(),jsonReq.getLocationId(),detailReq.getTypeId(),detailReq.getSizeId(),detailReq.getPrice(),detailReq.getProperty()};
searchCriteria.add(criteria);
//移入仓库
Object[] update=new Object[]{orderMain.getEndOrgId(),locationId,jsonReq.getTypeId(),detailReq.getSizeId(),detailReq.getPrice(),detailReq.getProperty()};
updateCriteria.add(update);
//
}
}
//创建入库单子单
List<OrderDetail> collect = list.stream().map(orderDetail -> {
OrderDetail orderDetail1 = new OrderDetail();
BeanPlusUtil.copyProperties(orderDetail, orderDetail1);
List<DetailJsonReq> detailJsonReqs = JSONObject.parseArray(orderDetail.getDetailJson(), DetailJsonReq.class);
for (DetailJsonReq a:detailJsonReqs) {
a.setLocationId(locationId);
a.setLocationName(locationName);
}
orderDetail1.setDetailJson(JSONObject.toJSONString(detailJsonReqs));
orderDetail1.setId(null);
//修改主单据id
orderDetail1.setOrderId(orderMain.getId());
......@@ -1825,30 +1760,36 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
//修改仓库id
orderDetail1.setWarehouseId(locationId);
orderDetail1.setWarehouseName(locationName);
Object[] criteria=new Object[]{existOrder.getStartOrgId(),orderDetail.getWarehouseId(),orderDetail.getTypeId(),orderDetail.getSizeId(),orderDetail.getPrice()};
searchCriteria.add(criteria);
Object[] update=new Object[]{orderMain.getEndOrgId(),locationId,orderDetail1.getTypeId(),orderDetail1.getSizeId(),orderDetail1.getPrice()};
updateCriteria.add(update);
return orderDetail1;
}).collect(Collectors.toList());
orderDetailService.saveBatch(collect);
//将summary汇总表中数据进行修改(修改该组织机构下的装备汇总信息将库存信息的在库数,库存总数,总价还有其他数据数量进行修改)
//那么首先将原来的仓库下的装备汇总信息进行查询出来,对其进行修改
List<InventorySummary> oldSummaryList = inventorySummaryMapper.selectSumByItems(searchCriteria);
Map<String, InventorySummary> resultMap = new HashMap<>();
for (InventorySummary summary : oldSummaryList) {
String key = summary.getSizeId() + "_" + summary.getTypeId();
if (resultMap.containsKey(key)) {
InventorySummary existingSummary = resultMap.get(key);
existingSummary.setStockNumber(existingSummary.getStockNumber() + summary.getStockNumber());
existingSummary.setBrokenNumber(existingSummary.getBrokenNumber() + summary.getBrokenNumber());
existingSummary.setNumber(existingSummary.getNumber() + summary.getNumber());
} else {
resultMap.put(key, summary);
}
}
List<InventorySummary> summaryList = new ArrayList<>(resultMap.values());
//其次查询出修改后的仓库下面的汇总信息,判断该仓库下是否已经存在该号型、类型、单价相同的装备数据
List<InventorySummary> newSummaryList = inventorySummaryMapper.selectSumByItems(updateCriteria);
//第一步:判断是否将报废区的数据也同样进行移库(flag=true表示将报废区的数量进行一起移动),如果都没有报废数量,默认是true;
boolean flag = oldSummaryList.stream()
.noneMatch(oldsum -> oldsum.getBrokenNumber() > 0)
|| oldSummaryList.stream()
.filter(oldsum -> oldsum.getBrokenNumber() > 0)
.anyMatch(oldsum -> list.stream()
.anyMatch(orderDetail -> orderDetail.getSizeId().equals(oldsum.getSizeId())
&& orderDetail.getTypeId().equals(oldsum.getTypeId())
&& orderDetail.getPrice().compareTo(oldsum.getUnitPrice()) == 0
&& oldsum.getBrokenNumber() + orderDetail.getPlanNum() == oldsum.getStockNumber())
);
|| summaryList.stream()
.filter(sum -> sum.getBrokenNumber() > 0).allMatch(orderDetail -> orderDetail.getBrokenNumber() + orderDetail.getStockNumber() == orderDetail.getNumber());
//创建删除列表用于将没用的数据汇总信息进行删除
List<InventorySummary> deleteList=new ArrayList<>();
//将修改的信息直接保存(需要的只是各种数量方便计算)
......@@ -1856,20 +1797,21 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
//如果整个报废区进行移动,那么将各个数量进行修改
if (flag){
//修改的的是移出仓库的数量
for (OrderDetail orderDetail: list ) {
for (DetailJsonReq json: jsonCollect ) {
for (InventorySummary oldSum : oldSummaryList) {
//如果组织机构、仓库id、sizeId、typeId、unitPrice相同,那么修改其各项数值(不会存在两个列表长度不对等的情况,一定是一对一的,只不过是顺序问题,所以需要进行遍历)
if (orderDetail.getSizeId().equals(oldSum.getSizeId())
&& orderDetail.getTypeId().equals(oldSum.getTypeId())
&& orderDetail.getPrice().compareTo(oldSum.getUnitPrice()) == 0) {
if (json.getSizeId().equals(oldSum.getSizeId())
&& json.getTypeId().equals(oldSum.getTypeId())
&& json.getPrice().compareTo(oldSum.getUnitPrice()) == 0
&& json.getProperty() == oldSum.getProperty()) {
InventorySummary inventorySummary = new InventorySummary();
BeanPlusUtil.copyProperties(oldSum,inventorySummary);
inventorySummary.setLocationId(locationId);
inventorySummary.setLocationName(locationName);
inventorySummary.setNumber(orderDetail.getPlanNum()+oldSum.getOutboundNumber());
inventorySummary.setPrice(orderDetail.getPrice().multiply(BigDecimal.valueOf(orderDetail.getPlanNum())));
inventorySummary.setStockNumber(orderDetail.getPlanNum());
inventorySummary.setNumber(json.getModifyQuantity()+oldSum.getOutboundNumber());
inventorySummary.setPrice(json.getPrice().multiply(BigDecimal.valueOf(json.getModifyQuantity())));
inventorySummary.setStockNumber(json.getModifyQuantity());
inventorySummary.setDestructionNumber(0);
//销毁金额也为0
inventorySummary.setDestructionPrice(BigDecimal.ZERO);
......@@ -1894,31 +1836,32 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
}
}
}else {//不将报废区的进行移动(修改的是移出仓库的库存数量)
for (OrderDetail orderDetail: list ) {
for (DetailJsonReq json: jsonCollect ) {
for (InventorySummary oldSum : oldSummaryList) {
//如果组织机构、仓库id、sizeId、typeId、unitPrice相同,那么修改其各项数值(
// 不会存在两个列表长度不对等的情况,一定是一对一的,只不过是顺序问题,所以需要进行遍历)
if (orderDetail.getSizeId().equals(oldSum.getSizeId())
&& orderDetail.getTypeId().equals(oldSum.getTypeId())
&& orderDetail.getPrice().compareTo(oldSum.getUnitPrice()) == 0) {
if (json.getSizeId().equals(oldSum.getSizeId())
&& json.getTypeId().equals(oldSum.getTypeId())
&& json.getPrice().compareTo(oldSum.getUnitPrice()) == 0
&& json.getProperty()==oldSum.getProperty()) {
InventorySummary inventorySummary = new InventorySummary();
BeanPlusUtil.copyProperties(oldSum,inventorySummary);
inventorySummary.setLocationId(locationId);
inventorySummary.setLocationName(locationName);
//在库数量进行修改并且报废数设为0
inventorySummary.setBrokenNumber(0);
inventorySummary.setNumber(orderDetail.getPlanNum()+oldSum.getOutboundNumber());
inventorySummary.setPrice(orderDetail.getPrice().multiply(BigDecimal.valueOf(orderDetail.getPlanNum()+oldSum.getOutboundNumber())));
inventorySummary.setStockNumber(orderDetail.getPlanNum());
inventorySummary.setNumber(json.getModifyQuantity()+oldSum.getOutboundNumber());
inventorySummary.setPrice(json.getPrice().multiply(BigDecimal.valueOf(json.getModifyQuantity()+oldSum.getOutboundNumber())));
inventorySummary.setStockNumber(json.getModifyQuantity());
inventorySummary.setDestructionNumber(0);
inventorySummary.setDestructionPrice(BigDecimal.ZERO);
inventorySummary.setId(null);
inventorySummary.setValuekey(null);
saveList.add(inventorySummary);
oldSum.setNumber(oldSum.getNumber()-orderDetail.getPlanNum());
oldSum.setPrice(oldSum.getPrice().subtract(orderDetail.getPrice().multiply(BigDecimal.valueOf(orderDetail.getPlanNum()))));
oldSum.setStockNumber(oldSum.getNumber()-orderDetail.getPlanNum());
oldSum.setNumber(Math.max(oldSum.getNumber()-json.getModifyQuantity(),0));
oldSum.setPrice(oldSum.getPrice().multiply(new BigDecimal(oldSum.getNumber())));
oldSum.setStockNumber(Math.max(oldSum.getNumber()-json.getModifyQuantity(),0));
oldSum.setOutboundNumber(0);
oldSum.setNearBrokenNumber(0);
oldSum.setExpireNumber(0);
......@@ -1936,13 +1879,15 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
//判断查询到的newList是否有值,如果有值直接进行修改即可,但是如果不存在,则默认新增一条数据
//修改的是移入仓库的值
if (newSummaryList.size()>0){
for (InventorySummary save: saveList) {
for (InventorySummary newsum:newSummaryList) {
for (int i = 0; i < saveList.size(); i++) {
for (int j = 0; j <newSummaryList.size() ; j++) {
InventorySummary save = saveList.get(i);
InventorySummary newsum = newSummaryList.get(j);
if (save.getSizeId().equals(newsum.getSizeId())
&& save.getTypeId().equals(newsum.getTypeId())
&& save.getPrice().compareTo(newsum.getUnitPrice()) == 0){
&& save.getPrice().compareTo(newsum.getUnitPrice()) == 0
&& save.getProperty()==newsum.getProperty()){
newsum.setBrokenNumber(save.getBrokenNumber()+newsum.getBrokenNumber());
newsum.setNumber(save.getNumber()+newsum.getNumber());
newsum.setStockNumber(save.getStockNumber()+newsum.getStockNumber());
......@@ -1953,11 +1898,32 @@ public class OrderMainServiceImpl extends ServiceImpl<OrderMainMapper, OrderMain
newsum.setUseNumber(save.getUseNumber()+newsum.getUseNumber());
//remove表示该仓库下面存在数量,数量加减完之后直接在新增的list中进行移出x
saveList.remove(save);
i--;
break;
}
}
}
// for (InventorySummary save: saveList) {
// for (InventorySummary newsum:newSummaryList) {
// if (save.getSizeId().equals(newsum.getSizeId())
// && save.getTypeId().equals(newsum.getTypeId())
// && save.getPrice().compareTo(newsum.getUnitPrice()) == 0
// && save.getProperty()==newsum.getProperty()){
// newsum.setBrokenNumber(save.getBrokenNumber()+newsum.getBrokenNumber());
// newsum.setNumber(save.getNumber()+newsum.getNumber());
// newsum.setStockNumber(save.getStockNumber()+newsum.getStockNumber());
// newsum.setPrice(newsum.getPrice().multiply(BigDecimal.valueOf(newsum.getStockNumber())));
// newsum.setOutboundNumber(save.getOutboundNumber()+newsum.getOutboundNumber());
// newsum.setExpireNumber(save.getExpireNumber()+newsum.getExpireNumber());
// newsum.setNearBrokenNumber(save.getNearBrokenNumber()+newsum.getNearBrokenNumber());
// newsum.setUseNumber(save.getUseNumber()+newsum.getUseNumber());
// //remove表示该仓库下面存在数量,数量加减完之后直接在新增的list中进行移出x
// saveList.remove(save);
// break;
// }
// }
//
// }
}
//如果saveList不为空则save
......
......@@ -319,10 +319,10 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask
case "quickOrder":
//更新出入库单
//将销毁数加回来
if (bussinessType.equals("destruction")){
List<UpdateOrderDetailReq> list=quickSuggestionsMapper.getOrderMainDetail(task.getProcessInstanceId());
boolean b = addOrRevokeAgentDestructionNum(list);
}
// if (bussinessType.equals("destruction")){
// List<UpdateOrderDetailReq> list=quickSuggestionsMapper.getOrderMainDetail(task.getProcessInstanceId());
// boolean b = addOrRevokeAgentDestructionNum(list);
// }
quickSuggestionsMapper.updateOrderMain(task.getProcessInstanceId());
break;
case "bussinessOrder":
......@@ -1102,6 +1102,7 @@ return null;
List<Object[]> searchItem=new ArrayList<>();
for (UpdateOrderDetailReq detialReq:list) {
//我先去数据库查询summary表中的数据
Object[] item=new Object[]{detialReq.getOrgId(),detialReq.getWarehouseId(),detialReq.getTypeId(),detialReq.getSizeId(),detialReq.getPrice()};
searchItem.add(item);
}
......@@ -1111,7 +1112,7 @@ return null;
for (InventorySummaryReq is:inventorySummaryList) {
if (detialReq.getWarehouseId().equals(is.getLocationId()) && detialReq.getTypeId().equals(is.getTypeId())
&& detialReq.getSizeId().equals(is.getSizeId()) && detialReq.getPrice().compareTo(is.getUnitPrice())==0){
&& detialReq.getSizeId().equals(is.getSizeId()) && new BigDecimal(detialReq.getPrice()).compareTo(is.getUnitPrice())==0){
if (ObjectUtil.isNull(is.getDestructionNumber())){
is.setDestructionNumber(0);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论