|
@ -1,31 +1,50 @@ |
|
|
package com.qs.serve.modules.oms.service.impl; |
|
|
package com.qs.serve.modules.oms.service.impl; |
|
|
|
|
|
|
|
|
import com.qs.serve.common.util.Assert; |
|
|
import com.alibaba.fastjson.JSON; |
|
|
import com.qs.serve.common.util.AuthContextUtils; |
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
import com.qs.serve.common.util.StringUtils; |
|
|
import com.qs.serve.common.model.dto.R; |
|
|
|
|
|
import com.qs.serve.common.model.oa.OaFormMainProcess; |
|
|
|
|
|
import com.qs.serve.common.util.*; |
|
|
|
|
|
import com.qs.serve.common.util.model.DateFormatString; |
|
|
import com.qs.serve.modules.bms.entity.BmsRegion; |
|
|
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.BmsSupplier; |
|
|
import com.qs.serve.modules.bms.entity.BmsSupplierAddress; |
|
|
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.BmsRegionMapper; |
|
|
import com.qs.serve.modules.bms.mapper.BmsSupplierMapper; |
|
|
import com.qs.serve.modules.bms.mapper.BmsSupplierMapper; |
|
|
import com.qs.serve.modules.bms.service.BmsSupplierAddressService; |
|
|
import com.qs.serve.modules.bms.service.BmsSupplierAddressService; |
|
|
import com.qs.serve.modules.goods.entity.GoodsCategoryRule; |
|
|
import com.qs.serve.modules.goods.entity.*; |
|
|
import com.qs.serve.modules.goods.entity.GoodsImminentBatch; |
|
|
import com.qs.serve.modules.goods.mapper.GoodsCategoryMapper; |
|
|
import com.qs.serve.modules.goods.mapper.GoodsCategoryRuleMapper; |
|
|
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.goods.service.GoodsImminentBatchService; |
|
|
import com.qs.serve.modules.oms.entity.OmsOrder; |
|
|
import com.qs.serve.modules.oms.entity.OmsOrder; |
|
|
import com.qs.serve.modules.oms.entity.OmsOrderItem; |
|
|
import com.qs.serve.modules.oms.entity.OmsOrderItem; |
|
|
|
|
|
import com.qs.serve.modules.oms.entity.dto.SeeYonOrderItemDTO; |
|
|
import com.qs.serve.modules.oms.service.OmsOrderItemService; |
|
|
import com.qs.serve.modules.oms.service.OmsOrderItemService; |
|
|
import com.qs.serve.modules.oms.service.OmsOrderOptionsService; |
|
|
import com.qs.serve.modules.oms.service.OmsOrderOptionsService; |
|
|
import com.qs.serve.modules.oms.service.OmsOrderService; |
|
|
import com.qs.serve.modules.oms.service.OmsOrderService; |
|
|
import com.qs.serve.modules.oms.utils.OmsOrderUtil; |
|
|
import com.qs.serve.modules.oms.utils.OmsOrderUtil; |
|
|
|
|
|
import com.qs.serve.modules.seeyon.service.SeeYonRequestService; |
|
|
|
|
|
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 com.qs.serve.modules.tbs.entity.bo.TbsAffairCommitBo; |
|
|
|
|
|
import com.qs.serve.modules.vtb.common.VtbVerificationState; |
|
|
import lombok.AllArgsConstructor; |
|
|
import lombok.AllArgsConstructor; |
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
import org.springframework.stereotype.Service; |
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
|
|
|
|
import java.math.BigDecimal; |
|
|
|
|
|
import java.time.LocalDateTime; |
|
|
import java.util.ArrayList; |
|
|
import java.util.ArrayList; |
|
|
|
|
|
import java.util.HashMap; |
|
|
import java.util.List; |
|
|
import java.util.List; |
|
|
|
|
|
import java.util.Map; |
|
|
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 订单审批操作类 |
|
|
* 订单审批操作类 |
|
@ -40,20 +59,32 @@ public class OmsOrderOptionsServiceImpl implements OmsOrderOptionsService { |
|
|
private final GoodsImminentBatchService goodsImminentBatchService; |
|
|
private final GoodsImminentBatchService goodsImminentBatchService; |
|
|
private final OmsOrderService omsOrderService; |
|
|
private final OmsOrderService omsOrderService; |
|
|
private final OmsOrderItemService omsOrderItemService; |
|
|
private final OmsOrderItemService omsOrderItemService; |
|
|
|
|
|
private final SysUserService sysUserService; |
|
|
|
|
|
private final BmsRegionMapper regionMapper; |
|
|
|
|
|
private final BmsRegion2Mapper region2Mapper; |
|
|
|
|
|
|
|
|
private final GoodsCategoryRuleMapper goodsCategoryRuleMapper; |
|
|
private final GoodsCategoryRuleMapper goodsCategoryRuleMapper; |
|
|
private BmsSupplierAddressService bmsSupplierAddressService; |
|
|
private final BmsSupplierAddressService bmsSupplierAddressService; |
|
|
|
|
|
|
|
|
private BmsSupplierMapper bmsSupplierMapper; |
|
|
private final BmsSupplierMapper bmsSupplierMapper; |
|
|
private BmsRegionMapper bmsRegionMapper; |
|
|
private final BmsRegionMapper bmsRegionMapper; |
|
|
|
|
|
private final TagInfoMapper tagInfoMapper; |
|
|
|
|
|
private final GoodsSkuMapper goodsSkuMapper; |
|
|
|
|
|
private final GoodsSpuMapper goodsSpuMapper; |
|
|
|
|
|
private final GoodsCategoryMapper goodsCategoryMapper; |
|
|
|
|
|
private final SeeYonRequestService seeYonService; |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public Object submitExpiredOrder(String orderId) { |
|
|
public Object submitExpiredOrder(String orderId) { |
|
|
OmsOrder omsOrder = omsOrderService.getById(orderId); |
|
|
OmsOrder omsOrder = omsOrderService.getById(orderId); |
|
|
String userId = AuthContextUtils.getSysUserId(); |
|
|
String userId = AuthContextUtils.getSysUserId(); |
|
|
|
|
|
SysUser sysUser = sysUserService.getById(userId); |
|
|
if (omsOrder == null) { |
|
|
if (omsOrder == null) { |
|
|
Assert.throwEx("订单不存在或被移除"); |
|
|
Assert.throwEx("订单不存在或被移除"); |
|
|
} |
|
|
} |
|
|
|
|
|
if(!userId.equals(omsOrder.getCreateBy())){ |
|
|
|
|
|
Assert.throwEx("越权访问被拦截了"); |
|
|
|
|
|
} |
|
|
if (!omsOrder.getUserId().equals(userId)) { |
|
|
if (!omsOrder.getUserId().equals(userId)) { |
|
|
Assert.throwEx("非制单人无法下单"); |
|
|
Assert.throwEx("非制单人无法下单"); |
|
|
} |
|
|
} |
|
@ -95,6 +126,9 @@ public class OmsOrderOptionsServiceImpl implements OmsOrderOptionsService { |
|
|
} |
|
|
} |
|
|
//客户校验
|
|
|
//客户校验
|
|
|
BmsSupplierAddress supplierAddress = bmsSupplierAddressService.getById(omsOrder.getSupplierAddrId()); |
|
|
BmsSupplierAddress supplierAddress = bmsSupplierAddressService.getById(omsOrder.getSupplierAddrId()); |
|
|
|
|
|
if(supplierAddress==null){ |
|
|
|
|
|
Assert.throwEx("客户地址为空"); |
|
|
|
|
|
} |
|
|
BmsSupplier supplier = bmsSupplierMapper.selectById(omsOrder.getSupplierId()); |
|
|
BmsSupplier supplier = bmsSupplierMapper.selectById(omsOrder.getSupplierId()); |
|
|
if (supplier.getCdOrderFlag().equals(1) && !StringUtils.hasText(omsOrder.getCdOrderRemark())) { |
|
|
if (supplier.getCdOrderFlag().equals(1) && !StringUtils.hasText(omsOrder.getCdOrderRemark())) { |
|
|
Assert.throwEx("请补充CD单号"); |
|
|
Assert.throwEx("请补充CD单号"); |
|
@ -108,11 +142,123 @@ public class OmsOrderOptionsServiceImpl implements OmsOrderOptionsService { |
|
|
//更新最新的用户特殊价格
|
|
|
//更新最新的用户特殊价格
|
|
|
omsOrderService.updateCusPrice(omsOrder.getSupplierCode(), orderItemList); |
|
|
omsOrderService.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) { |
|
|
if (imminentBatches.size() > 0) { |
|
|
goodsImminentBatchService.updateBatchById(imminentBatches); |
|
|
goodsImminentBatchService.updateBatchById(imminentBatches); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return null; |
|
|
String templateCode = TbsSeeYonConst.ExpiredOrderConf.Code(); |
|
|
|
|
|
|
|
|
|
|
|
//加载大区信息
|
|
|
|
|
|
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_申请时未录入"; |
|
|
|
|
|
|
|
|
|
|
|
// 构建DATA
|
|
|
|
|
|
Map<String, Object> data = this.buildSeeyonData(omsOrder, sysUser, orderItemList, supplierAddress, supplier, |
|
|
|
|
|
totalOrderAmt, templateCode, saleBizNames, bizBizNames); |
|
|
|
|
|
|
|
|
|
|
|
OaFormMainProcess mainProcess = new OaFormMainProcess(); |
|
|
|
|
|
mainProcess.setTargetId(orderId); |
|
|
|
|
|
mainProcess.setUploadFiles(new ArrayList<>()); |
|
|
|
|
|
mainProcess.setTableName("formmain_2206"); |
|
|
|
|
|
mainProcess.setData(data); |
|
|
|
|
|
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(VtbVerificationState.Commiting.getCode()); |
|
|
|
|
|
omsOrderService.updateById(omsOrder); |
|
|
|
|
|
return R.ok(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 构建DATA |
|
|
|
|
|
* @param omsOrder |
|
|
|
|
|
* @param sysUser |
|
|
|
|
|
* @param orderItemList |
|
|
|
|
|
* @param supplierAddress |
|
|
|
|
|
* @param supplier |
|
|
|
|
|
* @param totalOrderAmt |
|
|
|
|
|
* @param templateCode |
|
|
|
|
|
* @param saleBizNames |
|
|
|
|
|
* @param bizBizNames |
|
|
|
|
|
* @return |
|
|
|
|
|
*/ |
|
|
|
|
|
private Map<String, Object> buildSeeyonData(OmsOrder omsOrder, SysUser sysUser, List<OmsOrderItem> orderItemList, BmsSupplierAddress supplierAddress, BmsSupplier supplier, BigDecimal totalOrderAmt, String templateCode, String saleBizNames, String bizBizNames) { |
|
|
|
|
|
Map<String, Object> data = new HashMap<>(); |
|
|
|
|
|
data.put("title", omsOrder.getOrderSn()); |
|
|
|
|
|
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", saleBizNames); |
|
|
|
|
|
data.put("biz_region", bizBizNames); |
|
|
|
|
|
//添加跳转地址业务
|
|
|
|
|
|
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); |
|
|
|
|
|
data.put("cusAddr", supplierAddress.getDetail()); |
|
|
|
|
|
data.put("cdNumber", omsOrder.getCdOrderRemark()); |
|
|
|
|
|
data.put("remark", omsOrder.getRemark()); |
|
|
|
|
|
data.put("mainRemark", omsOrder.getRemark()); |
|
|
|
|
|
|
|
|
|
|
|
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.setSalesPrice(item.getSalesPrice()); |
|
|
|
|
|
dto.setTotalPrice(item.getSalesPrice().multiply(new BigDecimal(item.getQuantity()))); |
|
|
|
|
|
return dto; |
|
|
|
|
|
}).collect(Collectors.toList()); |
|
|
|
|
|
data.put("formson_2210",itemDTOList); |
|
|
|
|
|
return data; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|