17 changed files with 2949 additions and 0 deletions
@ -0,0 +1,262 @@ |
|||
package com.qs.serve.modules.oms.controller; |
|||
|
|||
import cn.hutool.core.collection.CollUtil; |
|||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|||
import com.qs.serve.common.model.annotation.SysLog; |
|||
import com.qs.serve.common.model.dto.PageVo; |
|||
import com.qs.serve.common.model.dto.R; |
|||
import com.qs.serve.common.model.enums.BizType; |
|||
import com.qs.serve.common.model.enums.SystemModule; |
|||
import com.qs.serve.common.util.AuthContextUtils; |
|||
import com.qs.serve.common.util.PageUtil; |
|||
import com.qs.serve.modules.bms.entity.BmsSupplier; |
|||
import com.qs.serve.modules.bms.entity.BmsSupplierAddress; |
|||
import com.qs.serve.modules.bms.mapper.BmsSupplierMapper; |
|||
import com.qs.serve.modules.bms.service.BmsSupplierAddressService; |
|||
import com.qs.serve.modules.oms.common.OmsOrderCheckState; |
|||
import com.qs.serve.modules.oms.entity.OmsOrder; |
|||
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.OmsCheckParam; |
|||
import com.qs.serve.modules.oms.entity.bo.OmsSpuAssesInfoBo; |
|||
import com.qs.serve.modules.oms.entity.bo.OmsUrgentParam; |
|||
import com.qs.serve.modules.oms.entity.bo.OrderRelateQuery; |
|||
import com.qs.serve.modules.oms.entity.vo.OmsSpuAssesInfo; |
|||
import com.qs.serve.modules.oms.service.*; |
|||
import com.qs.serve.modules.seeyon.service.impl.SeeYonRequestBaseService; |
|||
import com.qs.serve.modules.sys.entity.SysUser; |
|||
import com.qs.serve.modules.sys.service.SysUserService; |
|||
import com.qs.serve.modules.tbs.entity.bo.TbsAffairCommitBo; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.web.bind.annotation.*; |
|||
|
|||
import javax.validation.Valid; |
|||
import java.time.LocalDateTime; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
import java.util.Set; |
|||
import java.util.stream.Collectors; |
|||
|
|||
import static com.qs.serve.modules.tbs.common.TbsSeeYonConst.ERP_ORDER_SOURCE; |
|||
|
|||
/** |
|||
* 订单模块 订单 |
|||
* @author YenHex |
|||
* @since 2022-10-14 |
|||
*/ |
|||
@Slf4j |
|||
@AllArgsConstructor |
|||
@RestController |
|||
@RequestMapping("oms/saleOrder") |
|||
public class OmsSaleOrderController { |
|||
|
|||
private OmsSaleOrderService omsSaleOrderService; |
|||
private BmsSupplierAddressService bmsSupplierAddressService; |
|||
private OmsSaleOrderOptionsService omsSaleOrderOptionsService; |
|||
private SysUserService sysUserService; |
|||
private OmsSaleOrderItemService omsSaleOrderItemService; |
|||
private BmsSupplierMapper bmsSupplierMapper; |
|||
private SeeYonRequestBaseService seeYonRequestBaseService; |
|||
|
|||
/** |
|||
* 获取ERP订单信息 |
|||
* @param query |
|||
* @return |
|||
*/ |
|||
@PostMapping("/getOrderRelateInfo") |
|||
public R<?> getErpOrder(@RequestBody OrderRelateQuery query){ |
|||
return seeYonRequestBaseService.postBase(ERP_ORDER_SOURCE,query,"获取订单关联"); |
|||
} |
|||
|
|||
/** |
|||
* ID查询 |
|||
* @param orderCode |
|||
* @return |
|||
*/ |
|||
@GetMapping("/stopOrder/{orderCode}") |
|||
@SysLog(module = SystemModule.BASE, title = "订单", biz = BizType.QUERY) |
|||
public R<OmsSaleOrder> stopOrder(@PathVariable("orderCode") String orderCode){ |
|||
OmsSaleOrder omsOrder = omsSaleOrderService.getOne(new LambdaQueryWrapper<OmsSaleOrder>() |
|||
.eq(OmsSaleOrder::getOrderSn,orderCode),false); |
|||
if(omsOrder.getOrderType().equals(3)&&omsOrder.getOrderCheckState() |
|||
.equals(OmsOrderCheckState.Commiting.getCode())){ |
|||
omsSaleOrderOptionsService.doRefuse(new TbsAffairCommitBo(omsOrder.getId()+"")); |
|||
return R.ok(); |
|||
} |
|||
return R.error("更新行数为0"); |
|||
} |
|||
|
|||
/** |
|||
* ID查询 |
|||
* @param orderCode |
|||
* @return |
|||
*/ |
|||
@GetMapping("/checkOrder/{orderCode}") |
|||
@SysLog(module = SystemModule.BASE, title = "订单", biz = BizType.QUERY) |
|||
public R<OmsOrder> checkOrder(@PathVariable("orderCode") String orderCode){ |
|||
OmsSaleOrder omsSaleOrder = omsSaleOrderService.getOne(new LambdaQueryWrapper<OmsSaleOrder>() |
|||
.eq(OmsSaleOrder::getOrderSn,orderCode),false); |
|||
if(omsSaleOrder.getOrderType().equals(3)&&omsSaleOrder.getOrderCheckState() |
|||
.equals(OmsOrderCheckState.Commiting.getCode())){ |
|||
//omsOrderOptionsService.runCompensate(omsOrder.getId()+"");
|
|||
omsSaleOrderOptionsService.doFinished(new TbsAffairCommitBo(omsSaleOrder.getId()+"")); |
|||
omsSaleOrderOptionsService.syncToErp(); |
|||
return R.ok(); |
|||
} |
|||
// 测试扣率
|
|||
//omsOrderOptionsService.syncToErp11DB(Arrays.asList(omsOrder));
|
|||
return R.error("更新行数为0"); |
|||
} |
|||
|
|||
/** |
|||
* 翻页 |
|||
* @param param |
|||
* @return |
|||
*/ |
|||
@GetMapping("/page") |
|||
public R<PageVo<OmsSaleOrder>> getPage(OmsSaleOrder param){ |
|||
PageUtil.startPage(); |
|||
LambdaQueryWrapper<OmsSaleOrder> orderWrapper = new LambdaQueryWrapper<>(param); |
|||
orderWrapper.orderByDesc(OmsSaleOrder::getId); |
|||
if(param.getCheckStartTime()!=null){ |
|||
orderWrapper.ge(OmsSaleOrder::getCheckTime,param.getCheckStartTime().atStartOfDay()); |
|||
} |
|||
if(param.getCheckEndTime()!=null){ |
|||
orderWrapper.le(OmsSaleOrder::getCheckTime,param.getCheckEndTime().atTime(23,59,59)); |
|||
} |
|||
|
|||
List<OmsSaleOrder> list = omsSaleOrderService.list(orderWrapper); |
|||
Set<Long> addrIds = list.stream().map(OmsSaleOrder::getSupplierAddrId).collect(Collectors.toSet()); |
|||
addrIds.add(0L); |
|||
List<BmsSupplierAddress> supplierAddressList = bmsSupplierAddressService.listByIds(addrIds); |
|||
|
|||
Set<String> userIds = list.stream().map(OmsSaleOrder::getCheckUserId).collect(Collectors.toSet()); |
|||
userIds.add("0"); |
|||
List<SysUser> userList = sysUserService.listByIds(userIds); |
|||
|
|||
Set<Long> orderIds = list.stream().map(OmsSaleOrder::getId).collect(Collectors.toSet()); |
|||
orderIds.add(0L); |
|||
List<OmsSaleOrderItem> orderItems = omsSaleOrderItemService.list(new LambdaQueryWrapper<OmsSaleOrderItem>().in(OmsSaleOrderItem::getOrderId,orderIds)); |
|||
Map<Long,List<OmsSaleOrderItem>> orderItemsMap = orderItems.stream().collect(Collectors.groupingBy(OmsSaleOrderItem::getOrderId)); |
|||
for (OmsSaleOrder order : list) { |
|||
BmsSupplierAddress supplierAddress = null; |
|||
if(order.getSupplierAddrId()!=null){ |
|||
for (BmsSupplierAddress address : supplierAddressList) { |
|||
if(order.getSupplierAddrId().equals(address.getId())){ |
|||
supplierAddress = address; |
|||
} |
|||
} |
|||
order.setAddressInfo(supplierAddress); |
|||
} |
|||
if(order.getCheckUserId()!=null){ |
|||
SysUser sysUser = null; |
|||
for (SysUser user : userList) { |
|||
if(user.getId().equals(order.getCheckUserId())){ |
|||
sysUser = user; |
|||
} |
|||
} |
|||
if(sysUser!=null){ |
|||
order.setCheckUserInfo(sysUser.toSysUserVo()); |
|||
} |
|||
} |
|||
List<OmsSaleOrderItem> items = orderItemsMap.get(order.getId()); |
|||
order.setOrderItems(items); |
|||
} |
|||
return R.byPageHelperList(list); |
|||
} |
|||
|
|||
/** |
|||
* ID查询 |
|||
* @param id |
|||
* @return |
|||
*/ |
|||
@GetMapping("/getById/{id}") |
|||
@SysLog(module = SystemModule.BASE, title = "订单", biz = BizType.QUERY) |
|||
public R<OmsSaleOrder> getById(@PathVariable("id") String id){ |
|||
OmsSaleOrder omsOrder = omsSaleOrderService.getById(id); |
|||
if(omsOrder.getOrderType().equals(3)&&omsOrder.getOrderCheckState().equals(OmsOrderCheckState.Commiting.getCode())){ |
|||
omsSaleOrderOptionsService.runCompensate(omsOrder.getId()+""); |
|||
} |
|||
BmsSupplier supplier = bmsSupplierMapper.selectById(omsOrder.getSupplierId()); |
|||
omsOrder.setSupplierInfo(supplier); |
|||
return R.ok(omsOrder); |
|||
} |
|||
|
|||
/** |
|||
* 审核 |
|||
* @param param |
|||
* @return |
|||
*/ |
|||
@PostMapping("/check") |
|||
@SysLog(module = SystemModule.BASE, title = "订单", biz = BizType.UPDATE) |
|||
public R<?> check(@RequestBody @Valid OmsCheckParam param){ |
|||
OmsSaleOrder dbOmsOrder = omsSaleOrderService.getById(param.getOrderId()); |
|||
if(dbOmsOrder.getStatus().equals(0)){ |
|||
OmsSaleOrder omsOrder = new OmsSaleOrder(); |
|||
omsOrder.setId(param.getOrderId()); |
|||
omsOrder.setCheckState(param.getCheckSate().equals(1)?1:2); |
|||
omsOrder.setCheckTime(LocalDateTime.now()); |
|||
omsOrder.setCheckUserId(AuthContextUtils.getSysUserId()); |
|||
omsSaleOrderService.updateById(omsOrder); |
|||
return R.ok(); |
|||
} |
|||
return R.error("已完成的订单无法修改"); |
|||
} |
|||
|
|||
/** |
|||
* 设置加急 |
|||
* @param param |
|||
* @return |
|||
*/ |
|||
@PostMapping("/urgent") |
|||
@SysLog(module = SystemModule.BASE, title = "订单", biz = BizType.UPDATE) |
|||
public R<?> urgent(@RequestBody @Valid OmsUrgentParam param){ |
|||
OmsSaleOrder dbOmsOrder = omsSaleOrderService.getById(param.getOrderId()); |
|||
if(dbOmsOrder.getStatus().equals(0)){ |
|||
OmsSaleOrder omsOrder = new OmsSaleOrder(); |
|||
omsOrder.setId(param.getOrderId()); |
|||
omsOrder.setUrgentFlag(param.getUrgentSate().equals(1)?1:0); |
|||
omsSaleOrderService.updateById(omsOrder); |
|||
return R.ok(); |
|||
} |
|||
return R.error("已完成的订单无法修改"); |
|||
} |
|||
|
|||
/** |
|||
* 删除 |
|||
* @param id |
|||
* @return |
|||
*/ |
|||
@DeleteMapping("/deleteById/{id}") |
|||
@SysLog(module = SystemModule.BASE, title = "订单", biz = BizType.DELETE) |
|||
public R<?> deleteById(@PathVariable("id") Long id){ |
|||
OmsSaleOrder dbOmsOrder = omsSaleOrderService.getById(id); |
|||
if(dbOmsOrder.getStatus().equals(0)&&dbOmsOrder.getCheckState().equals(0)&&dbOmsOrder.getOrderCheckState().equals(0)){ |
|||
boolean result = omsSaleOrderService.removeById(id); |
|||
return R.isTrue(result); |
|||
} |
|||
return R.error("当前状态无法删除"); |
|||
} |
|||
|
|||
/** |
|||
* 预估信息 |
|||
* @param param |
|||
* @return |
|||
*/ |
|||
@PostMapping("/assess") |
|||
public R<List<OmsSpuAssesInfo>> getSpuAssess(@Valid @RequestBody OmsSpuAssesInfoBo param){ |
|||
return R.ok(omsSaleOrderService.getSpuAssess(param)); |
|||
} |
|||
|
|||
@GetMapping("/reSync/{code}") |
|||
public R<?> getSpuAssess(@PathVariable("code") String code){ |
|||
List<OmsSaleOrder> omsOrders = omsSaleOrderService.list(new LambdaQueryWrapper<OmsSaleOrder>().eq(OmsSaleOrder::getOrderSn,code)); |
|||
if(CollUtil.isNotEmpty(omsOrders)){ |
|||
omsSaleOrderOptionsService.syncToErp11DB(omsOrders); |
|||
} |
|||
return R.ok(); |
|||
} |
|||
} |
|||
|
@ -0,0 +1,249 @@ |
|||
package com.qs.serve.modules.oms.entity; |
|||
|
|||
import com.baomidou.mybatisplus.annotation.*; |
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import com.fasterxml.jackson.annotation.JsonIgnore; |
|||
import com.fasterxml.jackson.annotation.JsonProperty; |
|||
import lombok.Data; |
|||
import org.hibernate.validator.constraints.Length; |
|||
import org.springframework.format.annotation.DateTimeFormat; |
|||
|
|||
import javax.validation.constraints.NotBlank; |
|||
import javax.validation.constraints.NotNull; |
|||
import java.io.Serializable; |
|||
import java.math.BigDecimal; |
|||
import java.time.LocalDate; |
|||
import java.time.LocalDateTime; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 订单 实体类 |
|||
* @author YenHex |
|||
* @since 2022-10-14 |
|||
*/ |
|||
@Data |
|||
@TableName("oms_sale_order") |
|||
public class OmsSaleOrder implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** id */ |
|||
@TableId(type = IdType.AUTO) |
|||
private Long id; |
|||
|
|||
private String latitudeFrom; |
|||
|
|||
/** 订单号 */ |
|||
@NotBlank(message = "订单号不能为空") |
|||
@Length(max = 20,message = "订单号长度不能超过20字") |
|||
@TableField(condition = SqlCondition.LIKE) |
|||
private String orderSn; |
|||
|
|||
/** 订单类型:0->普通订单;1->赠品;2->试吃品;3->临期品 */ |
|||
private Integer orderType; |
|||
|
|||
private String orderSource; |
|||
|
|||
/** OA审批状态,订单审批状态 */ |
|||
private Integer orderCheckState; |
|||
|
|||
/** OA审批状态,订单审批状态 */ |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") |
|||
private LocalDateTime orderCheckSubmitTime; |
|||
|
|||
/** OA审批状态,订单审批状态 */ |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") |
|||
private LocalDateTime orderCheckFinishedTime; |
|||
|
|||
private String syFormId; |
|||
|
|||
/** 供应商ID */ |
|||
@NotNull(message = "供应商ID不能为空") |
|||
private Long supplierId; |
|||
|
|||
/** 供应商编码 */ |
|||
@NotBlank(message = "供应商编码不能为空") |
|||
@Length(max = 20,message = "供应商编码长度不能超过20字") |
|||
@TableField(condition = SqlCondition.LIKE) |
|||
private String supplierCode; |
|||
|
|||
/** 供应商名称 */ |
|||
@NotBlank(message = "供应商名称不能为空") |
|||
@Length(max = 30,message = "供应商名称长度不能超过30字") |
|||
@TableField(condition = SqlCondition.LIKE) |
|||
private String supplierName; |
|||
|
|||
/** 供应商收货地址id */ |
|||
@NotNull(message = "供应商收货地址id不能为空") |
|||
private Long supplierAddrId; |
|||
|
|||
/** 审核状态(非OA审批) */ |
|||
@NotNull(message = "审核状态不能为空") |
|||
private Integer checkState; |
|||
|
|||
/** 审核人 */ |
|||
@Length(max = 32,message = "审核人长度不能超过32字") |
|||
private String checkUserId; |
|||
|
|||
/** 审核时间 */ |
|||
@Length(max = 0,message = "审核时间长度不能超过0字") |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") |
|||
private LocalDateTime checkTime; |
|||
|
|||
/** 品牌ID */ |
|||
@NotNull(message = "品牌ID不能为空") |
|||
private Long brandRuleId; |
|||
|
|||
@TableField(condition = SqlCondition.LIKE) |
|||
private String brandRuleName; |
|||
|
|||
/** 制单人id */ |
|||
@Length(max = 32,message = "制单人id长度不能超过32字") |
|||
private String userId; |
|||
|
|||
/** 制单人名称 */ |
|||
@Length(max = 20,message = "制单人名称长度不能超过20字") |
|||
@TableField(condition = SqlCondition.LIKE) |
|||
private String userName; |
|||
|
|||
/** 制单人ERP编码 */ |
|||
@Length(max = 32,message = "制单人ERP编码长度不能超过32字") |
|||
@TableField(condition = SqlCondition.LIKE) |
|||
private String userCode; |
|||
|
|||
/** 制单人手机号 */ |
|||
@Length(max = 255,message = "制单人手机号长度不能超过255字") |
|||
private String userPhone; |
|||
|
|||
/** 发票类型:0->普通发票;1->增值税发票; */ |
|||
private Integer billType; |
|||
|
|||
/** 是否加急 */ |
|||
private Integer urgentFlag; |
|||
|
|||
/** CD单据备注 */ |
|||
private String cdOrderRemark; |
|||
|
|||
/** 临期品订单折扣率 */ |
|||
private BigDecimal discountRate; |
|||
|
|||
/** 适配的折扣率在OA的Id */ |
|||
private String oaRateId; |
|||
|
|||
/** 订单状态 |
|||
* 0->草稿; |
|||
* 1->下单(同步到调度系统); |
|||
* 2->已确认(已生成报价单); |
|||
* 6->已取消 |
|||
**/ |
|||
private Integer status; |
|||
|
|||
/** 备注 */ |
|||
@Length(max = 255,message = "备注长度不能超过255字") |
|||
private String remark; |
|||
|
|||
/** 创建时间 */ |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") |
|||
@TableField(fill = FieldFill.INSERT) |
|||
private LocalDateTime createTime; |
|||
|
|||
/** 创建人 */ |
|||
@TableField(fill = FieldFill.INSERT) |
|||
private String createBy; |
|||
|
|||
/** 更新时间 */ |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") |
|||
@TableField(fill = FieldFill.UPDATE) |
|||
private LocalDateTime updateTime; |
|||
|
|||
/** 更新人 */ |
|||
@TableField(fill = FieldFill.UPDATE) |
|||
private String updateBy; |
|||
|
|||
/** 租户id */ |
|||
@JsonIgnore |
|||
@JsonProperty |
|||
private String tenantId; |
|||
|
|||
/** 删除标识 */ |
|||
@JsonIgnore |
|||
@JsonProperty |
|||
private Boolean delFlag; |
|||
|
|||
/** |
|||
* 拓展查询条件 |
|||
*/ |
|||
@TableField(condition = SqlCondition.LIKE) |
|||
private String cusSaleRegion; |
|||
@TableField(condition = SqlCondition.LIKE) |
|||
private String cusSaleRegion2; |
|||
@TableField(condition = SqlCondition.LIKE) |
|||
private String cusSaleRegion3; |
|||
@TableField(condition = SqlCondition.LIKE) |
|||
private String cusSaleRegionAll; |
|||
@TableField(condition = SqlCondition.LIKE) |
|||
private String cusSaleRegionCodes; |
|||
@TableField(condition = SqlCondition.LIKE) |
|||
private String cusBigRegion; |
|||
@TableField(condition = SqlCondition.LIKE) |
|||
private String cusProvince; |
|||
@TableField(condition = SqlCondition.LIKE) |
|||
private String cusCity; |
|||
@TableField(condition = SqlCondition.LIKE) |
|||
private String cusArea; |
|||
@TableField(condition = SqlCondition.LIKE) |
|||
private String cusBizRegionAll; |
|||
@TableField(condition = SqlCondition.LIKE) |
|||
private String cusBizRegionCodes; |
|||
@TableField(condition = SqlCondition.LIKE) |
|||
private String allBands; |
|||
|
|||
|
|||
/** 订单明细项 */ |
|||
@TableField(exist = false) |
|||
private List<?> orderItems; |
|||
|
|||
/** 订单明细项 */ |
|||
@TableField(exist = false) |
|||
private Object addressInfo; |
|||
|
|||
/** 订单明细项 */ |
|||
@TableField(exist = false) |
|||
private Object supplierInfo; |
|||
|
|||
/** 确认订单人员 */ |
|||
@TableField(exist = false) |
|||
private Object checkUserInfo; |
|||
|
|||
/** 订单明细项 */ |
|||
@TableField(exist = false) |
|||
private Object brandRuleInfo; |
|||
|
|||
/** |
|||
* 确认订单开始时间 |
|||
*/ |
|||
@TableField(exist = false) |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd") |
|||
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") |
|||
private LocalDate checkStartTime; |
|||
|
|||
/** |
|||
* 确认订单结束时间 |
|||
*/ |
|||
@TableField(exist = false) |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd") |
|||
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") |
|||
private LocalDate checkEndTime; |
|||
|
|||
/** |
|||
* 折扣信息 |
|||
*/ |
|||
@TableField(exist = false) |
|||
private Object discountRateInfo; |
|||
} |
|||
|
@ -0,0 +1,153 @@ |
|||
package com.qs.serve.modules.oms.entity; |
|||
|
|||
import com.baomidou.mybatisplus.annotation.*; |
|||
import com.fasterxml.jackson.annotation.JsonFormat; |
|||
import com.fasterxml.jackson.annotation.JsonIgnore; |
|||
import com.fasterxml.jackson.annotation.JsonProperty; |
|||
import lombok.Data; |
|||
import org.hibernate.validator.constraints.Length; |
|||
import org.springframework.format.annotation.DateTimeFormat; |
|||
|
|||
import java.io.Serializable; |
|||
import java.math.BigDecimal; |
|||
import java.time.LocalDateTime; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 订单明细 实体类 |
|||
* @author YenHex |
|||
* @since 2022-10-14 |
|||
*/ |
|||
@Data |
|||
@TableName("oms_sale_order_item") |
|||
public class OmsSaleOrderItem implements Serializable { |
|||
|
|||
private static final long serialVersionUID = 1L; |
|||
|
|||
/** id */ |
|||
@TableId(type = IdType.AUTO) |
|||
private Long id; |
|||
|
|||
/** 订单id */ |
|||
private Long orderId; |
|||
|
|||
/** 订单sn */ |
|||
@Length(max = 32,message = "订单sn长度不能超过32字") |
|||
private String orderSn; |
|||
|
|||
/** 商品id */ |
|||
private Long spuId; |
|||
|
|||
/** 商品编码 */ |
|||
@Length(max = 20,message = "商品编码长度不能超过20字") |
|||
private String spuCode; |
|||
|
|||
/** 商品名称 */ |
|||
@Length(max = 30,message = "商品名称长度不能超过30字") |
|||
private String spuTitle; |
|||
|
|||
private String skuTitle; |
|||
|
|||
/** skuBatchId */ |
|||
private Long skuBatchId; |
|||
|
|||
/** skuBatchCode */ |
|||
private String skuBatchCode; |
|||
|
|||
private Long skuId; |
|||
|
|||
/** sku编码 */ |
|||
@Length(max = 20,message = "sku编码长度不能超过20字") |
|||
private String skuCode; |
|||
|
|||
/** sku单位 */ |
|||
@Length(max = 20,message = "sku单位长度不能超过20字") |
|||
private String skuUnit; |
|||
|
|||
/** sku图片 */ |
|||
@Length(max = 255,message = "sku图片长度不能超过255字") |
|||
private String skuImg; |
|||
|
|||
/** 规格值 */ |
|||
@Length(max = 255,message = "规格值长度不能超过255字") |
|||
private String specValues; |
|||
|
|||
/** 数量 */ |
|||
private Integer quantity; |
|||
|
|||
/** 销售价 */ |
|||
private BigDecimal salesPrice; |
|||
|
|||
/** 客户价 */ |
|||
private BigDecimal cusPrice; |
|||
|
|||
/** 市场价 */ |
|||
private BigDecimal marketPrice; |
|||
|
|||
|
|||
private BigDecimal weight; |
|||
|
|||
private BigDecimal volume; |
|||
|
|||
/** 备注 */ |
|||
@Length(max = 255,message = "备注长度不能超过255字") |
|||
private String remark; |
|||
|
|||
/** 最后更新时间 */ |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") |
|||
@TableField(fill = FieldFill.UPDATE) |
|||
private LocalDateTime updateTime; |
|||
|
|||
/** 创建时间 */ |
|||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
|||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") |
|||
@TableField(fill = FieldFill.INSERT) |
|||
private LocalDateTime createTime; |
|||
|
|||
/** 所属租户 */ |
|||
@JsonIgnore |
|||
@JsonProperty |
|||
private String tenantId; |
|||
|
|||
/** 逻辑删除标记(0:显示;1:隐藏) */ |
|||
@JsonIgnore |
|||
@JsonProperty |
|||
private String delFlag; |
|||
|
|||
/** 创建人 */ |
|||
@TableField(fill = FieldFill.INSERT) |
|||
private String createBy; |
|||
|
|||
/** 更新人 */ |
|||
@TableField(fill = FieldFill.UPDATE) |
|||
private String updateBy; |
|||
|
|||
/** 评估数量列表 */ |
|||
@TableField(exist = false) |
|||
private List<?> assessInfoList; |
|||
|
|||
/** Spu */ |
|||
@TableField(exist = false) |
|||
private Object spuInfo; |
|||
|
|||
/** skuBelong */ |
|||
@TableField(exist = false) |
|||
private Object skuBelong; |
|||
|
|||
/** skuBelong */ |
|||
@TableField(exist = false) |
|||
private Object skuAddCode; |
|||
|
|||
/** 分类 */ |
|||
@TableField(exist = false) |
|||
private Object categoryInfo; |
|||
|
|||
/** 分类 */ |
|||
@TableField(exist = false) |
|||
private Object batchInfo; |
|||
|
|||
@TableField(exist = false) |
|||
private Integer skuSpecialFlag; |
|||
} |
|||
|
@ -0,0 +1,24 @@ |
|||
package com.qs.serve.modules.oms.entity.bo; |
|||
|
|||
import lombok.Data; |
|||
|
|||
import java.util.List; |
|||
|
|||
@Data |
|||
public class OrderRelateQuery { |
|||
|
|||
/** |
|||
订单类型 |
|||
CmsOrder |
|||
ErpOrder |
|||
ErpQuotation |
|||
ErpDispatch |
|||
*/ |
|||
String orderType; |
|||
|
|||
/** |
|||
* 订单编码 |
|||
*/ |
|||
List<String> orderCodes; |
|||
|
|||
} |
@ -0,0 +1,14 @@ |
|||
package com.qs.serve.modules.oms.mapper; |
|||
|
|||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
|||
import com.qs.serve.modules.oms.entity.OmsSaleOrderItem; |
|||
|
|||
/** |
|||
* 订单明细 Mapper |
|||
* @author YenHex |
|||
* @date 2022-10-14 |
|||
*/ |
|||
public interface OmsSaleOrderItemMapper extends BaseMapper<OmsSaleOrderItem> { |
|||
|
|||
} |
|||
|
@ -0,0 +1,28 @@ |
|||
package com.qs.serve.modules.oms.mapper; |
|||
|
|||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
|||
import com.qs.serve.common.model.dto.SimpleKeyValue; |
|||
import com.qs.serve.modules.oms.entity.OmsSaleOrder; |
|||
import org.apache.ibatis.annotations.Select; |
|||
|
|||
import java.math.BigDecimal; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 订单 Mapper |
|||
* @author YenHex |
|||
* @date 2022-10-14 |
|||
*/ |
|||
public interface OmsSaleOrderMapper extends BaseMapper<OmsSaleOrder> { |
|||
|
|||
@Select("SELECT rate FROM `ext_expire_order_rate` where oa_id = #{oaId} and del_flag = 0 ") |
|||
BigDecimal getExpiredOrderRates(String oaId); |
|||
|
|||
@Select("SELECT oa_id as `value`,`name` as label,rate as value2 FROM `ext_expire_order_rate` where del_flag = 0 order by rate") |
|||
List<SimpleKeyValue<String>> selectExpiredOrderRates(); |
|||
|
|||
@Select("SELECT oa_id as `value`,`name` as label,rate as value2 FROM `ext_expire_order_rate` where del_flag = 0 and oa_id = #{oaId} ") |
|||
SimpleKeyValue<String> getExpiredRateInfo(String oaId); |
|||
|
|||
} |
|||
|
@ -0,0 +1,18 @@ |
|||
package com.qs.serve.modules.oms.service; |
|||
|
|||
import com.baomidou.mybatisplus.extension.service.IService; |
|||
import com.qs.serve.modules.oms.entity.OmsSaleOrderItem; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 订单明细 服务接口 |
|||
* @author YenHex |
|||
* @date 2022-10-14 |
|||
*/ |
|||
public interface OmsSaleOrderItemService extends IService<OmsSaleOrderItem> { |
|||
|
|||
List<OmsSaleOrderItem> listByOrderId(Long orderId); |
|||
|
|||
} |
|||
|
@ -0,0 +1,28 @@ |
|||
package com.qs.serve.modules.oms.service; |
|||
|
|||
import com.qs.serve.modules.oms.entity.OmsOrder; |
|||
import com.qs.serve.modules.oms.entity.OmsSaleOrder; |
|||
import com.qs.serve.modules.seeyon.service.SeeYonOperationService; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @author YenHex |
|||
* @since 2024/8/12 |
|||
*/ |
|||
public interface OmsSaleOrderOptionsService extends SeeYonOperationService { |
|||
|
|||
/** |
|||
* 提交临期品订单 |
|||
* @param orderId |
|||
* @return |
|||
*/ |
|||
Object submitExpiredOrder(String orderId); |
|||
|
|||
/** |
|||
* 定时同步通过审核的订单到ERP |
|||
*/ |
|||
void syncToErp(); |
|||
|
|||
void syncToErp11DB(List<OmsSaleOrder> omsOrders); |
|||
} |
@ -0,0 +1,37 @@ |
|||
package com.qs.serve.modules.oms.service; |
|||
|
|||
import com.qs.serve.common.model.dto.SimpleKeyValue; |
|||
import com.qs.serve.modules.oms.entity.OmsSaleOrder; |
|||
import com.qs.serve.modules.oms.entity.bo.OmsVerifySkuParam; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* @author YenHex |
|||
* @since 2024/6/21 |
|||
*/ |
|||
public interface OmsSaleOrderPart1Service { |
|||
|
|||
|
|||
/** |
|||
* 复制订单 |
|||
* @param orderId |
|||
* @return |
|||
*/ |
|||
OmsSaleOrder copyOrder(Long orderId); |
|||
|
|||
/** |
|||
* 释放临期品库存 |
|||
* @param orderId |
|||
* @return |
|||
*/ |
|||
boolean releaseInventory(Long orderId); |
|||
|
|||
/** |
|||
* 校验sku合法性 |
|||
* @param param |
|||
* @return |
|||
*/ |
|||
List<SimpleKeyValue> verifySku(OmsVerifySkuParam param); |
|||
|
|||
} |
@ -0,0 +1,132 @@ |
|||
package com.qs.serve.modules.oms.service; |
|||
|
|||
import com.baomidou.mybatisplus.extension.service.IService; |
|||
import com.qs.serve.common.model.dto.SimpleKeyValue; |
|||
import com.qs.serve.modules.bms.entity.BmsRegion; |
|||
import com.qs.serve.modules.bms.entity.BmsSupplierAddress; |
|||
import com.qs.serve.modules.goods.entity.GoodsCategoryRule; |
|||
import com.qs.serve.modules.oms.entity.OmsOrder; |
|||
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.vo.OmsConfirmOrderResult; |
|||
import com.qs.serve.modules.oms.entity.vo.OmsSpuAssesInfo; |
|||
|
|||
import java.math.BigDecimal; |
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 订单 服务接口 |
|||
* @author YenHex |
|||
* @date 2022-10-14 |
|||
*/ |
|||
public interface OmsSaleOrderService extends IService<OmsSaleOrder> { |
|||
|
|||
BigDecimal getExpiredOrderRateById(String oaId); |
|||
|
|||
List<SimpleKeyValue<String>> selectExpiredOrderRates(); |
|||
|
|||
/** |
|||
* 确认订单 H5 |
|||
* @param confirmOrder |
|||
* @return |
|||
*/ |
|||
OmsConfirmOrderResult confirmOrder(OmsOrderBo confirmOrder); |
|||
|
|||
/** |
|||
* 确认订单 PC |
|||
* @param confirmOrder |
|||
* @return |
|||
*/ |
|||
OmsConfirmOrderResult confirmOrderPc(OmsOrderSkuBo confirmOrder); |
|||
|
|||
/** |
|||
* 创建订单 H5 |
|||
* @param omsOrderBo |
|||
* @return |
|||
*/ |
|||
OmsSaleOrder createOrder(OmsOrderBo omsOrderBo); |
|||
|
|||
/** |
|||
* 修改草稿的订单 |
|||
* @param param |
|||
* @return |
|||
*/ |
|||
void modifyOrder(OmsOrderModifyParam param); |
|||
|
|||
/** |
|||
* 检测订单状态 |
|||
* @param order |
|||
* @return 是否进行更新,是则说明状态1->2 |
|||
*/ |
|||
boolean checkMsOrderStatus(OmsSaleOrder order); |
|||
|
|||
boolean cancelOrder(String orderSn); |
|||
|
|||
/** |
|||
* 创建订单 PC |
|||
* @param omsOrderBo |
|||
* @return |
|||
*/ |
|||
OmsSaleOrder createOrderPc(OmsOrderSkuBo omsOrderBo); |
|||
|
|||
/** |
|||
* 获取spu预估信息 |
|||
* @param param |
|||
* @return |
|||
*/ |
|||
List<OmsSpuAssesInfo> getSpuAssess(OmsSpuAssesInfoBo param); |
|||
|
|||
/** |
|||
* 对接调度系统,生成ERP的报价单 |
|||
* @param id |
|||
*/ |
|||
void buildPriceOrder(String id,String amount); |
|||
|
|||
/** |
|||
* 临期品订单 |
|||
* @param param |
|||
* @return |
|||
*/ |
|||
OmsSaleOrder modifyImminentOrder(OmsOrderImminentBo param); |
|||
|
|||
/** |
|||
* 拦截规则 |
|||
* @param skuIds |
|||
* @param categoryRule |
|||
* @return |
|||
*/ |
|||
List<SimpleKeyValue> handleCategoryRule(List<Long> skuIds,GoodsCategoryRule categoryRule); |
|||
|
|||
|
|||
/** |
|||
* 拦截规则 |
|||
* @param categoryRule |
|||
* @param orderItems |
|||
*/ |
|||
public void handleCategoryRule(GoodsCategoryRule categoryRule, List<OmsSaleOrderItem> orderItems); |
|||
|
|||
/** |
|||
* 更新订单项特殊价 |
|||
* @param cusCode |
|||
* @param orderItemList |
|||
*/ |
|||
public void updateCusPrice(String cusCode, List<OmsSaleOrderItem> orderItemList); |
|||
|
|||
/** |
|||
* 保存到ERP |
|||
* @param omsOrder |
|||
* @param orderItemList |
|||
* @param brands |
|||
* @param supplierAddress |
|||
* @param bmsRegion |
|||
*/ |
|||
public void saveToErpOrder(OmsSaleOrder omsOrder, |
|||
List<OmsSaleOrderItem> orderItemList, |
|||
String brands, |
|||
BmsSupplierAddress supplierAddress, |
|||
BmsRegion bmsRegion); |
|||
|
|||
} |
|||
|
@ -0,0 +1,31 @@ |
|||
package com.qs.serve.modules.oms.service.impl; |
|||
|
|||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
|||
import com.qs.serve.modules.oms.entity.OmsSaleOrderItem; |
|||
import com.qs.serve.modules.oms.mapper.OmsSaleOrderItemMapper; |
|||
import com.qs.serve.modules.oms.service.OmsOrderItemService; |
|||
import com.qs.serve.modules.oms.service.OmsSaleOrderItemService; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.util.List; |
|||
|
|||
/** |
|||
* 订单明细 服务实现类 |
|||
* @author YenHex |
|||
* @since 2022-10-14 |
|||
*/ |
|||
@Slf4j |
|||
@Service |
|||
@AllArgsConstructor |
|||
public class OmsSaleOrderItemServiceImpl extends ServiceImpl<OmsSaleOrderItemMapper, OmsSaleOrderItem> implements OmsSaleOrderItemService { |
|||
|
|||
@Override |
|||
public List<OmsSaleOrderItem> listByOrderId(Long orderId) { |
|||
return this.list(new LambdaQueryWrapper<OmsSaleOrderItem>().eq(OmsSaleOrderItem::getOrderId,orderId)); |
|||
} |
|||
|
|||
} |
|||
|
@ -0,0 +1,449 @@ |
|||
package com.qs.serve.modules.oms.service.impl; |
|||
|
|||
import com.alibaba.fastjson.JSON; |
|||
import com.alibaba.fastjson.JSONObject; |
|||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|||
import com.qs.serve.common.model.dto.R; |
|||
import com.qs.serve.common.model.oa.OaFormMainProcess; |
|||
import com.qs.serve.common.util.Assert; |
|||
import com.qs.serve.common.util.AuthContextUtils; |
|||
import com.qs.serve.common.util.DateUtils; |
|||
import com.qs.serve.common.util.StringUtils; |
|||
import com.qs.serve.common.util.model.DateFormatString; |
|||
import com.qs.serve.modules.bms.entity.BmsRegion; |
|||
import com.qs.serve.modules.bms.entity.BmsRegion2; |
|||
import com.qs.serve.modules.bms.entity.BmsSupplier; |
|||
import com.qs.serve.modules.bms.entity.BmsSupplierAddress; |
|||
import com.qs.serve.modules.bms.mapper.BmsRegion2Mapper; |
|||
import com.qs.serve.modules.bms.mapper.BmsRegionMapper; |
|||
import com.qs.serve.modules.bms.mapper.BmsSupplierMapper; |
|||
import com.qs.serve.modules.bms.service.BmsSupplierAddressService; |
|||
import com.qs.serve.modules.goods.entity.*; |
|||
import com.qs.serve.modules.goods.mapper.GoodsCategoryMapper; |
|||
import com.qs.serve.modules.goods.mapper.GoodsCategoryRuleMapper; |
|||
import com.qs.serve.modules.goods.mapper.GoodsSkuMapper; |
|||
import com.qs.serve.modules.goods.mapper.GoodsSpuMapper; |
|||
import com.qs.serve.modules.goods.service.GoodsImminentBatchService; |
|||
import com.qs.serve.modules.oms.common.OmsOrderCheckState; |
|||
import com.qs.serve.modules.oms.entity.OmsOrder; |
|||
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.dto.SeeYonOrderItemDTO; |
|||
import com.qs.serve.modules.oms.mapper.OmsOrderMapper; |
|||
import com.qs.serve.modules.oms.mapper.OmsSaleOrderMapper; |
|||
import com.qs.serve.modules.oms.service.*; |
|||
import com.qs.serve.modules.oms.utils.OmsOrderUtil; |
|||
import com.qs.serve.modules.seeyon.entity.BaseCreateCallbackBo; |
|||
import com.qs.serve.modules.seeyon.service.SeeYonRequestService; |
|||
import com.qs.serve.modules.seeyon.service.impl.SeeYonRequestBaseService; |
|||
import com.qs.serve.modules.sys.entity.SysUser; |
|||
import com.qs.serve.modules.sys.service.SysUserService; |
|||
import com.qs.serve.modules.tag.mapper.TagInfoMapper; |
|||
import com.qs.serve.modules.tbs.common.TbsSeeYonConst; |
|||
import com.qs.serve.modules.tbs.entity.bo.TbsAffairCommitBo; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.transaction.annotation.Transactional; |
|||
|
|||
import java.math.BigDecimal; |
|||
import java.math.RoundingMode; |
|||
import java.time.LocalDateTime; |
|||
import java.util.ArrayList; |
|||
import java.util.HashMap; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
import java.util.stream.Collectors; |
|||
|
|||
/** |
|||
* 订单审批操作类 |
|||
* @author YenHex |
|||
* @since 2024/8/12 |
|||
*/ |
|||
@Slf4j |
|||
@Service |
|||
@AllArgsConstructor |
|||
public class OmsSaleOrderOptionsServiceImpl implements OmsSaleOrderOptionsService { |
|||
|
|||
private final GoodsImminentBatchService goodsImminentBatchService; |
|||
private final OmsSaleOrderService omsSaleOrderService; |
|||
private final OmsOrderPart1Service omsOrderPart1Service; |
|||
private final OmsSaleOrderItemService omsSaleOrderItemService; |
|||
private final SysUserService sysUserService; |
|||
private final BmsRegionMapper regionMapper; |
|||
private final BmsRegion2Mapper region2Mapper; |
|||
|
|||
private final GoodsCategoryRuleMapper goodsCategoryRuleMapper; |
|||
private final BmsSupplierAddressService bmsSupplierAddressService; |
|||
|
|||
private final BmsSupplierMapper bmsSupplierMapper; |
|||
private final BmsRegionMapper bmsRegionMapper; |
|||
private final TagInfoMapper tagInfoMapper; |
|||
private final GoodsSkuMapper goodsSkuMapper; |
|||
private final GoodsSpuMapper goodsSpuMapper; |
|||
private final OmsSaleOrderMapper omsSaleOrderMapper; |
|||
private final GoodsCategoryMapper goodsCategoryMapper; |
|||
private final SeeYonRequestService seeYonService; |
|||
private final SeeYonRequestBaseService seeYonRequestBaseService; |
|||
|
|||
@Override |
|||
@Transactional(rollbackFor = Exception.class) |
|||
public Object submitExpiredOrder(String orderId) { |
|||
OmsSaleOrder omsOrder = omsSaleOrderService.getById(orderId); |
|||
String userId = AuthContextUtils.getSysUserId(); |
|||
SysUser sysUser = sysUserService.getById(userId); |
|||
if (omsOrder == null) { |
|||
Assert.throwEx("订单不存在或被移除"); |
|||
} |
|||
if(!userId.equals(omsOrder.getCreateBy())){ |
|||
Assert.throwEx("越权访问被拦截了"); |
|||
} |
|||
if (!omsOrder.getUserId().equals(userId)) { |
|||
Assert.throwEx("非制单人无法下单"); |
|||
} |
|||
// 非临期品不走当前流程
|
|||
if(!omsOrder.getOrderType().equals(3)){ |
|||
Assert.throwEx("该功能只针对临期品订单"); |
|||
} |
|||
omsSaleOrderService.checkMsOrderStatus(omsOrder); |
|||
if (!omsOrder.getOrderCheckState().equals(OmsOrderCheckState.UnPublish.getCode()) |
|||
&& !omsOrder.getOrderCheckState().equals(OmsOrderCheckState.Rollback.getCode())) { |
|||
Assert.throwEx("订单状态不支持下单"); |
|||
} |
|||
List<OmsSaleOrderItem> orderItemList = omsSaleOrderItemService.listByOrderId(Long.parseLong(orderId)); |
|||
|
|||
// 加成订单项合法性
|
|||
OmsOrderUtil.checkSaleOrderItemValues(orderItemList); |
|||
|
|||
//下单前规则拦截
|
|||
GoodsCategoryRule categoryRule = goodsCategoryRuleMapper.selectById(omsOrder.getBrandRuleId()); |
|||
omsSaleOrderService.handleCategoryRule(categoryRule, orderItemList); |
|||
|
|||
List<GoodsImminentBatch> imminentBatches = new ArrayList<>(); |
|||
if (omsOrder.getOrderType().equals(3)) { |
|||
//临期品相关拦截
|
|||
for (OmsSaleOrderItem orderItem : orderItemList) { |
|||
if (orderItem.getSkuBatchId() == null) { |
|||
Assert.throwEx(orderItem.getSkuCode() + " 单品无效或过期"); |
|||
} |
|||
GoodsImminentBatch imminentBatch = goodsImminentBatchService.getById(orderItem.getSkuBatchId()); |
|||
if (imminentBatch == null) { |
|||
Assert.throwEx(orderItem.getSkuCode() + " 单品无效或过期"); |
|||
} |
|||
int spur = imminentBatch.getQuantity() - imminentBatch.getOrderQuantity(); |
|||
if (orderItem.getQuantity() > spur) { |
|||
Assert.throwEx(orderItem.getSkuCode() + " 单品库存不足"); |
|||
} |
|||
// 扣减库存
|
|||
imminentBatch.setOrderQuantity(imminentBatch.getOrderQuantity() + orderItem.getQuantity()); |
|||
imminentBatches.add(imminentBatch); |
|||
} |
|||
} |
|||
//客户校验
|
|||
BmsSupplierAddress supplierAddress = bmsSupplierAddressService.getById(omsOrder.getSupplierAddrId()); |
|||
if(supplierAddress==null){ |
|||
Assert.throwEx("客户地址为空"); |
|||
} |
|||
BmsSupplier supplier = bmsSupplierMapper.selectById(omsOrder.getSupplierId()); |
|||
if (supplier.getCdOrderFlag().equals(1) && !StringUtils.hasText(omsOrder.getCdOrderRemark())) { |
|||
Assert.throwEx("请补充CD单号"); |
|||
} |
|||
|
|||
//补充:调度系统写报价单给ERP时,要把地址ID写过去
|
|||
if (supplierAddress.getTmsSysId() == null) { |
|||
Assert.throwEx("地址缺失TmsSysId关联"); |
|||
} |
|||
|
|||
String lastRegionId = supplier.getRegionLast(); |
|||
BmsRegion bmsRegion = bmsRegionMapper.selectById(lastRegionId); |
|||
if (bmsRegion == null) { |
|||
Assert.throwEx("客户档案[" + supplier.getCode() + "]缺失销售区域数据,请联系管理员"); |
|||
} |
|||
|
|||
//更新最新的用户特殊价格
|
|||
omsSaleOrderService.updateCusPrice(omsOrder.getSupplierCode(), orderItemList); |
|||
|
|||
BigDecimal totalOrderAmt = orderItemList.stream().map(a->a.getSalesPrice().multiply(new BigDecimal(a.getQuantity()))) |
|||
.reduce(BigDecimal.ZERO,BigDecimal::add); |
|||
|
|||
if (imminentBatches.size() > 0) { |
|||
goodsImminentBatchService.updateBatchById(imminentBatches); |
|||
} |
|||
|
|||
String templateCode = this.getTemplateCode(); |
|||
|
|||
//加载大区信息
|
|||
String saleRegionId = supplier.handleSaleRegionId(); |
|||
BmsRegion saleRegion = regionMapper.selectById(saleRegionId); |
|||
String saleBizNames = saleRegion!=null?saleRegion.getPathNames():"null_申请时未录入"; |
|||
String bizRegionId = supplier.handleBizRegionId(); |
|||
BmsRegion2 bizRegion = region2Mapper.selectById(bizRegionId); |
|||
String bizBizNames = bizRegion!=null?bizRegion.getPathNames():"null_申请时未录入"; |
|||
|
|||
Map<String, Object> newWayData = new HashMap<>(); |
|||
|
|||
// 构建DATA
|
|||
Map<String, Object> mainTableData = this.buildSeeyonData(omsOrder, sysUser, supplierAddress, supplier, |
|||
totalOrderAmt, templateCode, saleBizNames, bizBizNames); |
|||
newWayData.put("formmain_2206",mainTableData); |
|||
|
|||
// 构建子表data
|
|||
List<SeeYonOrderItemDTO> itemDTOList = getSeeYonOrderItemDTOS(orderItemList); |
|||
newWayData.put("formson_2210",itemDTOList); |
|||
|
|||
OaFormMainProcess mainProcess = new OaFormMainProcess(); |
|||
mainProcess.setTargetId(orderId); |
|||
mainProcess.setUploadFiles(new ArrayList<>()); |
|||
mainProcess.setTableName("formmain_2206"); |
|||
mainProcess.setData(newWayData); |
|||
mainProcess.setTemplateCode(templateCode); |
|||
mainProcess.setUserId(sysUser.getId()); |
|||
mainProcess.setSenderLoginName(sysUser.getAccount()); |
|||
R flowIdResult = seeYonService.newCreateProcess(mainProcess); |
|||
|
|||
if(flowIdResult==null||flowIdResult.getStatus()!=200){ |
|||
assert flowIdResult != null; |
|||
Assert.throwEx("远程服务调用失败:"+flowIdResult.getMsg()); |
|||
} |
|||
if(flowIdResult.getMsg()!=null && flowIdResult.getMsg().length()>45){ |
|||
log.error(flowIdResult.getMsg()); |
|||
JSONObject object = JSON.parseObject(flowIdResult.getMsg()); |
|||
if(!object.get("code").toString().equals("0")){ |
|||
Assert.throwEx("流程发起被拦截了"); |
|||
} |
|||
} |
|||
String formId = null; |
|||
R<String> formIdResult = seeYonService.getFormId(templateCode,omsOrder.getId()); |
|||
if(formIdResult.getStatus()==200){ |
|||
formId = formIdResult.getData(); |
|||
} |
|||
omsOrder.setSyFormId(formId); |
|||
omsOrder.setOrderCheckState(OmsOrderCheckState.Commiting.getCode()); |
|||
omsOrder.setOrderCheckSubmitTime(LocalDateTime.now()); |
|||
omsSaleOrderService.updateById(omsOrder); |
|||
|
|||
BaseCreateCallbackBo callbackBo = new BaseCreateCallbackBo(templateCode,orderId); |
|||
seeYonService.createCallbackStatus(callbackBo); |
|||
return R.ok(); |
|||
} |
|||
|
|||
private List<SeeYonOrderItemDTO> getSeeYonOrderItemDTOS(List<OmsSaleOrderItem> orderItemList) { |
|||
List<SeeYonOrderItemDTO> itemDTOList = orderItemList.stream().map(item->{ |
|||
SeeYonOrderItemDTO dto = new SeeYonOrderItemDTO(); |
|||
dto.setSpuCode(item.getSpuCode()); |
|||
dto.setSkuTitle(item.getSkuTitle()); |
|||
GoodsSpu goodsSpu = goodsSpuMapper.selectById(item.getSpuId()); |
|||
GoodsSku goodsSku = goodsSkuMapper.selectById(item.getSkuId()); |
|||
GoodsCategory goodsCategory = goodsCategoryMapper.selectById(goodsSpu.getCategoryLast()); |
|||
dto.setSkuAddCode(goodsSku.getSkuAddCode()); |
|||
dto.setSkuCode(item.getSkuCode()); |
|||
dto.setBatchCode(item.getSkuBatchCode()); |
|||
dto.setSkuCategories(goodsCategory.getLevelPathNames()); |
|||
dto.setSpecVal(item.getSpecValues()); |
|||
dto.setRemark(item.getRemark()); |
|||
dto.setWeight(item.getWeight()); |
|||
dto.setVolume(item.getVolume()); |
|||
dto.setQty(item.getQuantity()); |
|||
dto.setSalesPrice(item.getSalesPrice()); |
|||
dto.setTotalPrice(item.getSalesPrice().multiply(new BigDecimal(item.getQuantity()))); |
|||
return dto; |
|||
}).collect(Collectors.toList()); |
|||
return itemDTOList; |
|||
} |
|||
|
|||
@Override |
|||
public void syncToErp() { |
|||
AuthContextUtils.setTenant("001"); |
|||
List<OmsSaleOrder> omsOrders = omsSaleOrderService.list(new LambdaQueryWrapper<OmsSaleOrder>() |
|||
//临期品
|
|||
.eq(OmsSaleOrder::getOrderType,3) |
|||
//未下单
|
|||
.in(OmsSaleOrder::getStatus,0) |
|||
//审批完成
|
|||
.eq(OmsSaleOrder::getOrderCheckState,OmsOrderCheckState.Finished.getCode()) |
|||
); |
|||
log.warn("临期品同步到ERP,数量:{}",omsOrders.size()); |
|||
syncToErp11DB(omsOrders); |
|||
} |
|||
|
|||
@Override |
|||
public void syncToErp11DB(List<OmsSaleOrder> omsOrders) { |
|||
for (OmsSaleOrder omsOrder : omsOrders) { |
|||
BmsSupplierAddress supplierAddress = bmsSupplierAddressService.getById(omsOrder.getSupplierAddrId()); |
|||
List<OmsSaleOrderItem> orderItemList = omsSaleOrderItemService.listByOrderId(omsOrder.getId()); |
|||
BmsSupplier supplier = bmsSupplierMapper.selectById(omsOrder.getSupplierId()); |
|||
String lastRegionId = supplier.getRegionLast(); |
|||
BmsRegion bmsRegion = bmsRegionMapper.selectById(lastRegionId); |
|||
List<Long> spuIds = orderItemList.stream().map(OmsSaleOrderItem::getSpuId).collect(Collectors.toList()); |
|||
List<GoodsSpu> goodsSpuList = goodsSpuMapper.selectBatchIds(spuIds); |
|||
List<String> cateIds = goodsSpuList.stream().map(GoodsSpu::getCategoryLast).collect(Collectors.toList()); |
|||
List<GoodsCategory> categoryList = goodsCategoryMapper.selectBatchIds(cateIds); |
|||
String bs = categoryList.stream().map(GoodsCategory::getName).collect(Collectors.joining(",")); |
|||
// 读取OA最新订单折扣
|
|||
if(omsOrder.getOrderType().equals(3)){ |
|||
R codeRs = seeYonRequestBaseService.getBase( |
|||
TbsSeeYonConst.OA_DATA_EXPIRE_ORDER_DR + omsOrder.getOrderSn() |
|||
,"获取条款申请流水号"); |
|||
BigDecimal dr = null; |
|||
if(codeRs.getStatus()==200 && codeRs.getMsg()!=null){ |
|||
try { |
|||
String oaRateId = codeRs.getMsg().toString(); |
|||
dr = omsSaleOrderMapper.getExpiredOrderRates(oaRateId); |
|||
omsOrder.setDiscountRate(dr); |
|||
omsOrder.setOaRateId(oaRateId); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
if(dr==null){ |
|||
log.error("临期品订单,获取最新的折扣率失败,单号:{}",omsOrder.getOrderSn()); |
|||
continue; |
|||
} |
|||
} |
|||
// 写入到ERP中间表
|
|||
omsSaleOrderService.saveToErpOrder(omsOrder,orderItemList,bs,supplierAddress,bmsRegion); |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 构建DATA |
|||
* @param omsOrder |
|||
* @param sysUser |
|||
* @param supplierAddress |
|||
* @param supplier |
|||
* @param totalOrderAmt |
|||
* @param templateCode |
|||
* @param saleBizNames |
|||
* @param bizBizNames |
|||
* @return |
|||
*/ |
|||
private Map<String, Object> buildSeeyonData(OmsSaleOrder omsOrder, SysUser sysUser, BmsSupplierAddress supplierAddress, BmsSupplier supplier, BigDecimal totalOrderAmt, String templateCode, String saleBizNames, String bizBizNames) { |
|||
Map<String, Object> data = new HashMap<>(); |
|||
data.put("orgId", omsOrder.getId()); |
|||
data.put("targetId", omsOrder.getId()); |
|||
data.put("targetCode", omsOrder.getOrderSn()); |
|||
data.put("applyUserCode", sysUser.getCode()); |
|||
data.put("applyUserName", sysUser.getName()); |
|||
data.put("supplierName", supplier.getName()); |
|||
data.put("supplierCode", supplier.getCode()); |
|||
data.put("exsp1", templateCode); |
|||
data.put("exsp2", bizBizNames); |
|||
data.put("exsp3", saleBizNames); |
|||
// title
|
|||
data.put("exsp4", "临期订单-"+omsOrder.getOrderSn()); |
|||
//添加跳转地址业务
|
|||
String baseJumpUrl = "https://shop.gdjsl.com/pcOrder/#/"; |
|||
data.put("cmsLink",baseJumpUrl); |
|||
data.put("rowDate", DateUtils.format(LocalDateTime.now(), DateFormatString.DATE_TIME)); |
|||
data.put("rowState","00"); |
|||
//data.put("templateId", "");
|
|||
//data.put("templateName", "");
|
|||
//添加客户标签
|
|||
List<String> tags = tagInfoMapper.lisTagsBySupplierCode(supplier.getCode()); |
|||
data.put("tags",tags); |
|||
|
|||
data.put("totalOrderAmt", totalOrderAmt); |
|||
// 解决特殊bug,整数传“.0” oa会报错
|
|||
if(totalOrderAmt.compareTo(new BigDecimal(totalOrderAmt.intValue()))==0){ |
|||
data.put("totalOrderAmt", totalOrderAmt.intValue()); |
|||
} |
|||
|
|||
data.put("cusAddr", supplierAddress.getDetail()); |
|||
data.put("cdNumber", omsOrder.getCdOrderRemark()); |
|||
data.put("remark", omsOrder.getRemark()); |
|||
data.put("mainRemark", omsOrder.getRemark()); |
|||
// 折扣率(审批时修改)
|
|||
data.put("ext1", omsOrder.getOaRateId()); |
|||
if(omsOrder.getOrderType().equals(3)&&omsOrder.getDiscountRate()==null){ |
|||
Assert.throwEx("临期品订单,请确保折扣率被设置"); |
|||
} |
|||
// 申请时的总金额(审批时该金额不更新,非最终的合计金额)
|
|||
data.put("ext2", |
|||
totalOrderAmt.multiply(omsOrder.getDiscountRate()) |
|||
.divide(new BigDecimal("100"),2, RoundingMode.DOWN) |
|||
); |
|||
// 申请时的折扣率(跟ext1一样传oaid)
|
|||
data.put("ext3",omsOrder.getOaRateId()); |
|||
return data; |
|||
} |
|||
|
|||
@Override |
|||
public String getSyFormIdByTargetInfo(TbsAffairCommitBo affairCommit) { |
|||
OmsSaleOrder omsOrder = omsSaleOrderService.getOne(new LambdaQueryWrapper<OmsSaleOrder>() |
|||
.select(OmsSaleOrder::getSyFormId) |
|||
.eq(OmsSaleOrder::getId,affairCommit.getTargetId())); |
|||
return omsOrder!=null?omsOrder.getSyFormId():null; |
|||
} |
|||
|
|||
@Override |
|||
public Object doBacked(TbsAffairCommitBo param) { |
|||
OmsSaleOrder omsOrder = omsSaleOrderService.getById(param.getTargetId()); |
|||
omsOrder.setOrderCheckState(OmsOrderCheckState.Rollback.getCode()); |
|||
omsSaleOrderService.updateById(omsOrder); |
|||
omsOrderPart1Service.releaseInventory(omsOrder.getId()); |
|||
return null; |
|||
} |
|||
|
|||
@Override |
|||
public Object doFinished(TbsAffairCommitBo param) { |
|||
OmsSaleOrder omsOrder = omsSaleOrderService.getById(param.getTargetId()); |
|||
omsOrder.setOrderCheckState(OmsOrderCheckState.Finished.getCode()); |
|||
omsOrder.setOrderCheckFinishedTime(LocalDateTime.now()); |
|||
omsSaleOrderService.updateById(omsOrder); |
|||
return null; |
|||
} |
|||
|
|||
@Override |
|||
public Object doRefuse(TbsAffairCommitBo param) { |
|||
OmsSaleOrder omsOrder = omsSaleOrderService.getById(param.getTargetId()); |
|||
omsOrder.setOrderCheckState(OmsOrderCheckState.Stop.getCode()); |
|||
omsSaleOrderService.updateById(omsOrder); |
|||
omsOrderPart1Service.releaseInventory(omsOrder.getId()); |
|||
return null; |
|||
} |
|||
|
|||
@Override |
|||
public boolean checkSyFormIdIsNotNull(String targetId) { |
|||
OmsSaleOrder omsOrder = omsSaleOrderService.getOne(new LambdaQueryWrapper<OmsSaleOrder>() |
|||
.select(OmsSaleOrder::getSyFormId) |
|||
.eq(OmsSaleOrder::getId,targetId)); |
|||
return omsOrder!=null&&omsOrder.getSyFormId()!=null; |
|||
} |
|||
|
|||
@Override |
|||
public void doCommitBacked(String targetId) { |
|||
|
|||
} |
|||
|
|||
@Override |
|||
public Object doNext(TbsAffairCommitBo param) { |
|||
OmsSaleOrder omsOrder = omsSaleOrderService.getById(param.getTargetId()); |
|||
R codeRs = seeYonRequestBaseService.getBase( |
|||
TbsSeeYonConst.OA_DATA_EXPIRE_ORDER_DR + omsOrder.getOrderSn() |
|||
,"获取条款申请流水号"); |
|||
BigDecimal dr = null; |
|||
if(codeRs.getStatus()==200 && codeRs.getMsg()!=null){ |
|||
try { |
|||
String oaRateId = codeRs.getMsg().toString(); |
|||
dr = omsSaleOrderMapper.getExpiredOrderRates(oaRateId); |
|||
omsOrder.setDiscountRate(dr); |
|||
omsOrder.setOaRateId(oaRateId); |
|||
omsSaleOrderMapper.updateById(omsOrder); |
|||
} catch (Exception e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
if(dr==null){ |
|||
log.error("临期品订单,获取最新的折扣率失败,单号:{}",omsOrder.getOrderSn()); |
|||
return null; |
|||
} |
|||
return null; |
|||
} |
|||
|
|||
@Override |
|||
public String getTemplateCode() { |
|||
return TbsSeeYonConst.ExpiredOrderConf.Code(); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,225 @@ |
|||
package com.qs.serve.modules.oms.service.impl; |
|||
|
|||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|||
import com.qs.serve.common.framework.redis.RedisService; |
|||
import com.qs.serve.common.model.dto.SimpleKeyValue; |
|||
import com.qs.serve.common.util.Assert; |
|||
import com.qs.serve.common.util.AuthContextUtils; |
|||
import com.qs.serve.common.util.CodeGenUtil; |
|||
import com.qs.serve.common.util.CollectionUtil; |
|||
import com.qs.serve.modules.bms.entity.BmsSupplier; |
|||
import com.qs.serve.modules.bms.mapper.BmsRegionMapper; |
|||
import com.qs.serve.modules.bms.mapper.BmsSupplierMapper; |
|||
import com.qs.serve.modules.bms.service.BmsSupplierAddressService; |
|||
import com.qs.serve.modules.goods.entity.GoodsCategoryRule; |
|||
import com.qs.serve.modules.goods.entity.GoodsImminentBatch; |
|||
import com.qs.serve.modules.goods.entity.dto.GoodsAccrIdsDto; |
|||
import com.qs.serve.modules.goods.mapper.GoodsCategoryRuleMapper; |
|||
import com.qs.serve.modules.goods.mapper.GoodsSkuMapper; |
|||
import com.qs.serve.modules.goods.service.*; |
|||
import com.qs.serve.modules.oms.common.OmsOrderCheckState; |
|||
import com.qs.serve.modules.oms.entity.OmsOrder; |
|||
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.OmsVerifySkuParam; |
|||
import com.qs.serve.modules.oms.service.*; |
|||
import com.qs.serve.modules.sale.mapper.SalePlanGoodsMapper; |
|||
import com.qs.serve.modules.sale.mapper.SalePlanMapper; |
|||
import com.qs.serve.modules.seeyon.service.impl.SeeYonRequestBaseService; |
|||
import com.qs.serve.modules.sys.entity.SysUser; |
|||
import com.qs.serve.modules.sys.service.SysDeptService; |
|||
import com.qs.serve.modules.sys.service.SysUserService; |
|||
import lombok.AllArgsConstructor; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.stereotype.Service; |
|||
|
|||
import java.time.LocalDate; |
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
import java.util.stream.Collectors; |
|||
|
|||
/** |
|||
* @author YenHex |
|||
* @since 2024/6/21 |
|||
*/ |
|||
@Slf4j |
|||
@Service |
|||
@AllArgsConstructor |
|||
public class OmsSaleOrderPart1ServiceImpl implements OmsSaleOrderPart1Service { |
|||
|
|||
private SysUserService sysUserService; |
|||
private SysDeptService sysDeptService; |
|||
private SalePlanMapper salePlanMapper; |
|||
private SalePlanGoodsMapper salePlanGoodsMapper; |
|||
|
|||
private OmsSaleOrderService omsSaleOrderService; |
|||
private OmsSaleOrderItemService omsSaleOrderItemService; |
|||
|
|||
private GoodsRuleService goodsRuleService; |
|||
private GoodsAccreditService goodsAccreditService; |
|||
private GoodsImminentBatchService goodsImminentBatchService; |
|||
private GoodsSkuMapper goodsSkuMapper; |
|||
private GoodsSkuService goodsSkuService; |
|||
private GoodsSpuService goodsSpuService; |
|||
private GoodsCategoryRuleMapper goodsCategoryRuleMapper; |
|||
private GoodsCustomerPriceService goodsCustomerPriceService; |
|||
|
|||
private BmsSupplierMapper bmsSupplierMapper; |
|||
private BmsRegionMapper bmsRegionMapper; |
|||
private BmsSupplierAddressService bmsSupplierAddressService; |
|||
|
|||
private SeeYonRequestBaseService seeYonRequestBaseService; |
|||
private RedisService redisService; |
|||
|
|||
@Override |
|||
public OmsSaleOrder copyOrder(Long orderId) { |
|||
OmsSaleOrder orgOrder = omsSaleOrderService.getById(orderId); |
|||
List<OmsSaleOrderItem> orderItems = omsSaleOrderItemService.list(new LambdaQueryWrapper<OmsSaleOrderItem>() |
|||
.eq(OmsSaleOrderItem::getOrderId, orderId)); |
|||
OmsSaleOrder order = new OmsSaleOrder(); |
|||
order.setId(null); |
|||
order.setOrderType(orgOrder.getOrderType()); |
|||
String orderPrefix = null; |
|||
if (order.getOrderType().equals(0)) { |
|||
orderPrefix = "SN"; |
|||
} else if (order.getOrderType().equals(1)) { |
|||
orderPrefix = "ZP"; |
|||
} else if (order.getOrderType().equals(2)) { |
|||
orderPrefix = "SC"; |
|||
} else if (order.getOrderType().equals(3)) { |
|||
orderPrefix = "SP"; |
|||
} else { |
|||
Assert.throwEx("订单类型错误"); |
|||
} |
|||
order.setOrderSn(orderPrefix + CodeGenUtil.generate(CodeGenUtil.SourceKey.OmsOrder)); |
|||
SysUser user = sysUserService.getById(AuthContextUtils.getSysUserId()); |
|||
order.setUserId(user.getId()); |
|||
order.setUserCode(user.getCode()); |
|||
order.setUserName(user.getName()); |
|||
order.setUserPhone(user.getMobile()); |
|||
order.setCheckState(0); |
|||
order.setStatus(0); |
|||
order.setOrderCheckState(OmsOrderCheckState.UnPublish.getCode()); |
|||
order.setLatitudeFrom(orgOrder.getLatitudeFrom()); |
|||
order.setOrderSource(orgOrder.getOrderSource()); |
|||
order.setSupplierId(orgOrder.getSupplierId()); |
|||
order.setSupplierCode(orgOrder.getSupplierCode()); |
|||
order.setSupplierName(orgOrder.getSupplierName()); |
|||
order.setSupplierAddrId(orgOrder.getSupplierAddrId()); |
|||
order.setBrandRuleId(orgOrder.getBrandRuleId()); |
|||
order.setBrandRuleName(orgOrder.getBrandRuleName()); |
|||
|
|||
order.setBillType(orgOrder.getBillType()); |
|||
order.setCdOrderRemark(orgOrder.getCdOrderRemark()); |
|||
order.setRemark(orgOrder.getRemark()); |
|||
|
|||
|
|||
omsSaleOrderService.save(order); |
|||
for (OmsSaleOrderItem item : orderItems) { |
|||
item.setId(null); |
|||
item.setOrderId(order.getId()); |
|||
} |
|||
omsSaleOrderItemService.saveBatch(orderItems); |
|||
return order; |
|||
} |
|||
|
|||
@Override |
|||
public boolean releaseInventory(Long orderId) { |
|||
// 释放库存
|
|||
OmsSaleOrder omsOrder = omsSaleOrderService.getById(orderId); |
|||
// 目前只有临期品需要释放库存
|
|||
if (omsOrder.getOrderType().equals(3)) { |
|||
List<GoodsImminentBatch> imminentBatches = new ArrayList<>(); |
|||
List<OmsSaleOrderItem> orderItemList = omsSaleOrderItemService.listByOrderId(orderId); |
|||
for (OmsSaleOrderItem orderItem : orderItemList) { |
|||
GoodsImminentBatch imminentBatch = goodsImminentBatchService.getById(orderItem.getSkuBatchId()); |
|||
imminentBatch.setOrderQuantity(imminentBatch.getOrderQuantity() - orderItem.getQuantity()); |
|||
imminentBatches.add(imminentBatch); |
|||
} |
|||
if (imminentBatches.size() > 0) { |
|||
goodsImminentBatchService.updateBatchById(imminentBatches); |
|||
} |
|||
} |
|||
return true; |
|||
} |
|||
|
|||
@Override |
|||
public List<SimpleKeyValue> verifySku(OmsVerifySkuParam param) { |
|||
|
|||
List<SimpleKeyValue> errorImminentIds = new ArrayList<>(); |
|||
|
|||
LocalDate nowDate = LocalDate.now(); |
|||
boolean isImminentCheck = CollectionUtil.isNotEmpty(param.getImminentItemIds()); |
|||
List<GoodsImminentBatch> goodsImminentBatches = null; |
|||
if(isImminentCheck){ |
|||
if(CollectionUtil.isEmpty(param.getImminentItemIds())){ |
|||
return new ArrayList<>(); |
|||
} |
|||
goodsImminentBatches = goodsImminentBatchService.listByIds(param.getImminentItemIds()); |
|||
for (GoodsImminentBatch batch : goodsImminentBatches) { |
|||
if(batch.getEndDate().isBefore(nowDate)){ |
|||
errorImminentIds.add(new SimpleKeyValue("临期品已过期",batch.getId())); |
|||
} |
|||
if(batch.getQuantity()-batch.getOrderQuantity()<=0){ |
|||
errorImminentIds.add(new SimpleKeyValue("临期品库存不足",batch.getId())); |
|||
} |
|||
} |
|||
} |
|||
|
|||
List<Long> skuIds = param.getSkuIds(); |
|||
if(isImminentCheck){ |
|||
skuIds = goodsImminentBatches.stream().map(a->Long.parseLong(a.getSkuId())).collect(Collectors.toList()); |
|||
} |
|||
|
|||
GoodsCategoryRule categoryRule = goodsCategoryRuleMapper.selectById(param.getRuleId()); |
|||
BmsSupplier supplier = bmsSupplierMapper.selectById(param.getSupplierId()); |
|||
|
|||
|
|||
List<SimpleKeyValue> errorSkuIds = new ArrayList<>(); |
|||
//拦截商品授权维度规则
|
|||
GoodsAccrIdsDto accrIdsDto = goodsAccreditService.listIgnoreAcc2(supplier.getId(), supplier.listBizRegionIds(), supplier.listSaleRegionIds()); |
|||
if (accrIdsDto != null) { |
|||
List<Long> selectSkuIds = goodsSkuMapper.listByOtherIds( |
|||
accrIdsDto.getCateIds(), |
|||
accrIdsDto.getSpuIds(), |
|||
accrIdsDto.getSkuIds(), |
|||
accrIdsDto.getNotInCateIds(), |
|||
accrIdsDto.getNotInSpuIds(), |
|||
accrIdsDto.getNotInSkuIds() |
|||
); |
|||
for (Long paramSkuId : skuIds) { |
|||
for (Long skuId : selectSkuIds) { |
|||
if (paramSkuId.equals(skuId)) { |
|||
errorSkuIds.add(new SimpleKeyValue("商品未授权",skuId)); |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
//拦截客户维度规则
|
|||
errorSkuIds.addAll(goodsRuleService.checkSkuCode( supplier.getId(),skuIds)); |
|||
//拦截客户维度的用户规则
|
|||
errorSkuIds.addAll(goodsRuleService.checkSkuCodeByUserId( AuthContextUtils.getSysUserId(),skuIds)); |
|||
|
|||
//拦截品类下单规则
|
|||
errorSkuIds.addAll(omsSaleOrderService.handleCategoryRule(skuIds,categoryRule)); |
|||
|
|||
if(isImminentCheck){ |
|||
if(CollectionUtil.isEmpty(errorSkuIds)){ |
|||
for (SimpleKeyValue errorSkuId : errorSkuIds) { |
|||
for (GoodsImminentBatch batch : goodsImminentBatches) { |
|||
if(batch.getSkuId().equals(errorSkuId.getValue())){ |
|||
errorImminentIds.add(new SimpleKeyValue(errorSkuId.getLabel(),batch.getId())); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
return errorImminentIds; |
|||
} |
|||
|
|||
return errorSkuIds; |
|||
} |
|||
|
|||
} |
File diff suppressed because it is too large
Loading…
Reference in new issue