Browse Source

opt: 销售单调整

muti_db
Yen 5 months ago
parent
commit
1b946e2446
  1. 1
      src/main/java/com/qs/serve/common/framework/security/filter/SecurityRequestFilter.java
  2. 6
      src/main/java/com/qs/serve/controller/AdminPortalController.java
  3. 11
      src/main/java/com/qs/serve/modules/oms/controller/OmsSaleOrderController.java
  4. 1
      src/main/java/com/qs/serve/modules/oms/controller/api/OmsSaleOrderApi.java
  5. 9
      src/main/java/com/qs/serve/modules/oms/entity/OmsSaleOrder.java
  6. 27
      src/main/java/com/qs/serve/modules/oms/entity/dto/OmsSaleOrderChange.java
  7. 4
      src/main/java/com/qs/serve/modules/oms/service/OmsSaleOrderService.java
  8. 4
      src/main/java/com/qs/serve/modules/oms/service/impl/OmsSaleOrderPart1ServiceImpl.java
  9. 152
      src/main/java/com/qs/serve/modules/oms/service/impl/OmsSaleOrderServiceImpl.java
  10. 10
      src/main/java/com/qs/serve/modules/oms/utils/OmsOrderUtil.java

1
src/main/java/com/qs/serve/common/framework/security/filter/SecurityRequestFilter.java

@ -86,6 +86,7 @@ public class SecurityRequestFilter extends OncePerRequestFilter {
}
}
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Expose-Headers", "Date");
//登录拦截
if ("OPTIONS".equals(request.getMethod())) {
HttpResponsePrintUtil.print(response,200,"success");

6
src/main/java/com/qs/serve/controller/AdminPortalController.java

@ -14,6 +14,7 @@ import com.qs.serve.common.model.dto.SimpleKeyValue;
import com.qs.serve.common.model.enums.BizType;
import com.qs.serve.common.model.enums.SystemModule;
import com.qs.serve.common.util.*;
import com.qs.serve.common.util.model.DateFormatString;
import com.qs.serve.controller.dto.SyLoginParam;
import com.qs.serve.controller.util.SyKeyLoginUtil;
import com.qs.serve.modules.bms.entity.BmsSupplier;
@ -64,6 +65,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -102,6 +104,10 @@ public class AdminPortalController {
private GoodsSkuService goodsSkuService;
private GoodsCategoryService goodsCategoryService;
@GetMapping("/getSystemTime")
public R<?> getSystemTime(){
return R.ok(DateUtils.format(LocalDateTime.now(), DateFormatString.DATE_TIME));
}
/**
* 获取所有租户

11
src/main/java/com/qs/serve/modules/oms/controller/OmsSaleOrderController.java

@ -84,6 +84,17 @@ public class OmsSaleOrderController {
return R.ok(saleOrders);
}
/**
* 获取订单变更记录
* @param code
* @return
*/
@GetMapping("/getChangeLog")
public R<?> getChangeLog(String code){
return R.ok(omsSaleOrderService.getChangeLog(code));
}
/**
* 获取ERP订单信息
* @param query

1
src/main/java/com/qs/serve/modules/oms/controller/api/OmsSaleOrderApi.java

@ -227,6 +227,7 @@ public class OmsSaleOrderApi {
orderWrapper.in(OmsSaleOrder::getSupplierId,supplierIds);
orderWrapper.eq(OmsSaleOrder::getOrderType,param.getOrderType()==null?0:param.getOrderType());
orderWrapper.orderByDesc(OmsSaleOrder::getId);
orderWrapper.eq(OmsSaleOrder::getCurrentFlag,1);
if(param.getCheckStartTime()!=null){
orderWrapper.ge(OmsSaleOrder::getCheckTime,param.getCheckStartTime().atStartOfDay());
}

9
src/main/java/com/qs/serve/modules/oms/entity/OmsSaleOrder.java

@ -189,6 +189,12 @@ public class OmsSaleOrder implements Serializable {
@JsonProperty
private Boolean delFlag;
/** 业务确认人 */
private String confirmUserName;
/** 业务确认人 */
private String confirmUserCode;
/**
* 拓展查询条件
*/
@ -290,6 +296,7 @@ public class OmsSaleOrder implements Serializable {
private String verifierName;
private String currency;
private Integer exchangeRate;
private Integer currentFlag;
private String version;
/**
@ -299,7 +306,7 @@ public class OmsSaleOrder implements Serializable {
private Object discountRateInfo;
@TableField(exist = false)
private List<?> itemList;
private List<OmsSaleOrderItem> itemList;
}

27
src/main/java/com/qs/serve/modules/oms/entity/dto/OmsSaleOrderChange.java

@ -0,0 +1,27 @@
package com.qs.serve.modules.oms.entity.dto;
import lombok.Data;
import java.time.LocalDateTime;
/**
* @author YenHex
* @since 2025/2/8
*/@Data
public class OmsSaleOrderChange {
/** 值:新增,删除,修改 */
String optionType;
String version;
/** 操作人 */
String userName;
/** 操作时间 */
LocalDateTime time;
/** 备注 */
String remark;
}

4
src/main/java/com/qs/serve/modules/oms/service/OmsSaleOrderService.java

@ -10,6 +10,7 @@ import com.qs.serve.modules.oms.entity.OmsOrderItem;
import com.qs.serve.modules.oms.entity.OmsSaleOrder;
import com.qs.serve.modules.oms.entity.OmsSaleOrderItem;
import com.qs.serve.modules.oms.entity.bo.*;
import com.qs.serve.modules.oms.entity.dto.OmsSaleOrderChange;
import com.qs.serve.modules.oms.entity.vo.OmsConfirmOrderResult;
import com.qs.serve.modules.oms.entity.vo.OmsPlanResult;
import com.qs.serve.modules.oms.entity.vo.OmsSpuAssesInfo;
@ -108,6 +109,9 @@ public interface OmsSaleOrderService extends IService<OmsSaleOrder> {
*/
List<OmsSaleOrder> listHistoryOrderByCode(String code);
List<OmsSaleOrderChange> getChangeLog(String orderCode);
/**
* 拦截规则
* @param skuIds

4
src/main/java/com/qs/serve/modules/oms/service/impl/OmsSaleOrderPart1ServiceImpl.java

@ -120,7 +120,11 @@ public class OmsSaleOrderPart1ServiceImpl implements OmsSaleOrderPart1Service {
omsSaleOrderService.save(order);
for (OmsSaleOrderItem item : orderItems) {
item.setId(null);
item.setVersion("cms");
item.setOrderId(order.getId());
item.setOrderSn(order.getOrderSn());
item.setProductionRemark(null);
item.setPreProductionDate(null);
}
omsSaleOrderItemService.saveBatch(orderItems);
return order;

152
src/main/java/com/qs/serve/modules/oms/service/impl/OmsSaleOrderServiceImpl.java

@ -1,6 +1,7 @@
package com.qs.serve.modules.oms.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -30,6 +31,7 @@ import com.qs.serve.modules.oms.common.OmsOrderCheckState;
import com.qs.serve.modules.oms.entity.*;
import com.qs.serve.modules.oms.entity.bo.*;
import com.qs.serve.modules.oms.entity.dto.OmsCalcAmount;
import com.qs.serve.modules.oms.entity.dto.OmsSaleOrderChange;
import com.qs.serve.modules.oms.entity.dto.ShoppingCartsCheckResult;
import com.qs.serve.modules.oms.entity.dto.XltOrderDTO;
import com.qs.serve.modules.oms.entity.vo.OmsConfirmOrderResult;
@ -107,7 +109,11 @@ public class OmsSaleOrderServiceImpl extends ServiceImpl<OmsSaleOrderMapper, Oms
if(invCodes.size()>0){
List<GoodsSku> skuList = goodsSkuMapper.selectList(new LambdaQueryWrapper<GoodsSku>().in(GoodsSku::getSkuCode,invCodes));
for (OmsPlanParam.InvItem item : invItemList) {
item.setFactory(skuList.stream().filter(sku -> sku.getSkuCode().equals(item.getInvCode())).findFirst().get().getBelong());
for (GoodsSku sku : skuList) {
if(sku.getSkuCode().equals(item.getInvCode())){
item.setFactory(sku.getBelong());
}
}
}
}
String result = HttpUtil.doPost(url, JsonUtil.objectToJson(invItemList),null);
@ -942,6 +948,150 @@ public class OmsSaleOrderServiceImpl extends ServiceImpl<OmsSaleOrderMapper, Oms
return spuAssesInfoList;
}
@Override
public List<OmsSaleOrderChange> getChangeLog(String orderCode) {
// 获取订单历史版本列表并按创建时间正序排序
List<OmsSaleOrder> orderList = this.listHistoryOrderByCode(orderCode);
if(CollUtil.isEmpty(orderList)) {
return new ArrayList<>();
}
// 按创建时间正序排序
orderList = orderList.stream()
.sorted(Comparator.comparing(OmsSaleOrder::getCreateTime))
.collect(Collectors.toList());
Map<String, OmsSaleOrderChange> versionChanges = new HashMap<>();
// 第一个订单作为基准参照物
OmsSaleOrder baseOrder = orderList.get(0);
List<OmsSaleOrderItem> baseItems = baseOrder.getItemList();
try {
OmsSaleOrderChange change = new OmsSaleOrderChange();
if(baseOrder.getOrderStatusCombo().equals(0)){
change.setUserName(baseOrder.getUserName());
}else {
change.setUserName(baseOrder.getConfirmUserName());
}
change.setOptionType("新增");
change.setVersion(baseOrder.getVersion());
change.setTime(baseOrder.getUpdateTime());
StringBuilder sb = new StringBuilder();
if(CollUtil.isNotEmpty(baseItems)){
for (OmsSaleOrderItem baseItem : baseItems) {
sb.append(String.format("商品[%s] 数量:%d,价格:%.2f\n",
baseItem.getSkuCode(),
baseItem.getQuantity(),
baseItem.getSalesPrice()));
}
change.setRemark(sb.toString());
}
versionChanges.put(baseOrder.getVersion(), change);
} catch (Exception e) {
e.printStackTrace();
}
// 从第二个订单开始比较变化
for(int i = 1; i < orderList.size(); i++) {
OmsSaleOrder currentOrder = orderList.get(i);
List<OmsSaleOrderItem> currentItems = currentOrder.getItemList();
String currentVersion = currentOrder.getVersion();
// 获取或创建当前版本的变更记录
OmsSaleOrderChange versionChange = versionChanges.computeIfAbsent(currentVersion, k -> {
OmsSaleOrderChange change = new OmsSaleOrderChange();
change.setVersion(currentVersion);
change.setUserName(currentOrder.getConfirmUserName());
change.setTime(currentOrder.getUpdateTime());
return change;
});
List<String> remarks = new ArrayList<>();
boolean hasAdd = false;
boolean hasModify = false;
boolean hasDelete = false;
// 比较商品变化
if(CollUtil.isNotEmpty(baseItems) && CollUtil.isNotEmpty(currentItems)) {
Set<String> matchedSkus = new HashSet<>();
// 检查新增和修改的商品
for(OmsSaleOrderItem currentItem : currentItems) {
boolean found = false;
for(OmsSaleOrderItem baseItem : baseItems) {
if(currentItem.getSkuCode().equals(baseItem.getSkuCode())) {
found = true;
matchedSkus.add(currentItem.getSkuCode());
// 检查数量变化
if(!currentItem.getQuantity().equals(baseItem.getQuantity())) {
hasModify = true;
remarks.add(String.format("[改数量] 商品[%s]数量从%d变更为%d",
currentItem.getSkuCode(),
baseItem.getQuantity(),
currentItem.getQuantity()));
}
// 检查销售价变化
if(currentItem.getSalesPrice() != null && baseItem.getSalesPrice() != null
&& currentItem.getSalesPrice().compareTo(baseItem.getSalesPrice()) != 0) {
hasModify = true;
remarks.add(String.format("[改价格] 商品[%s]销售价从%.2f变更为%.2f",
currentItem.getSkuCode(),
baseItem.getSalesPrice(),
currentItem.getSalesPrice()));
}
break;
}
}
// 新增的商品
if(!found) {
hasAdd = true;
remarks.add(String.format("[新增] 商品[%s]数量%d",
currentItem.getSkuCode(),
currentItem.getQuantity()));
}
}
// 检查删除的商品
for(OmsSaleOrderItem baseItem : baseItems) {
if(!matchedSkus.contains(baseItem.getSkuCode())) {
hasDelete = true;
remarks.add(String.format("[删除] 商品[%s]", baseItem.getSkuCode()));
}
}
}
// 设置操作类型
if(hasDelete && !hasAdd && !hasModify) {
versionChange.setOptionType("删除");
} else if(hasAdd || hasModify) {
versionChange.setOptionType("修改");
}else {
versionChange.setOptionType("无变动");
}
// 合并备注信息
if(!remarks.isEmpty()) {
String existingRemark = versionChange.getRemark();
String newRemarks = String.join("\n", remarks);
versionChange.setRemark(existingRemark == null ? newRemarks :
existingRemark + "\n" + newRemarks);
}
// 更新基准订单为当前订单,用于下一轮比较
baseOrder = currentOrder;
baseItems = currentItems;
}
// 将Map的values转为List并按time排序
return versionChanges.values().stream()
.sorted(Comparator.comparing(OmsSaleOrderChange::getTime))
.collect(Collectors.toList());
}
@Override
public List<OmsSaleOrder> listHistoryOrderByCode(String code) {
List<OmsSaleOrder> omsSaleOrderList = this.list(new LambdaQueryWrapper<OmsSaleOrder>()

10
src/main/java/com/qs/serve/modules/oms/utils/OmsOrderUtil.java

@ -19,6 +19,11 @@ public class OmsOrderUtil {
if (orderItemList.size() < 1) {
Assert.throwEx("空项目不支持下单");
}
boolean existSkuIdNull = orderItemList.stream()
.anyMatch(item -> item.getSkuId()== null || item.getSkuId().equals(0L));
if(existSkuIdNull){
Assert.throwEx("有错误明细,请清空列表再提交");
}
//拦截相同的skuItem
long countDistinct = orderItemList.stream().map(OmsOrderItem::getSkuId).distinct().count();
if (orderItemList.size() != countDistinct) {
@ -36,6 +41,11 @@ public class OmsOrderUtil {
if (orderItemList.size() < 1) {
Assert.throwEx("空项目不支持下单");
}
boolean existSkuIdNull = orderItemList.stream()
.anyMatch(item -> item.getSkuId()== null || item.getSkuId().equals(0L));
if(existSkuIdNull){
Assert.throwEx("有错误明细,请清空列表再提交");
}
//拦截相同的skuItem
long countDistinct = orderItemList.stream().map(OmsSaleOrderItem::getSkuId).distinct().count();
if (orderItemList.size() != countDistinct) {

Loading…
Cancel
Save