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