|
|
@@ -1,19 +1,224 @@
|
|
|
package com.trade.purchase.order.service.impl;
|
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.trade.purchase.office.service.IStockService;
|
|
|
import com.trade.purchase.order.entity.Order;
|
|
|
+import com.trade.purchase.order.entity.OrderItems;
|
|
|
+import com.trade.purchase.order.mapper.OrderItemsMapper;
|
|
|
import com.trade.purchase.order.mapper.OrderMapper;
|
|
|
import com.trade.purchase.order.service.IPurchaseService;
|
|
|
+import com.trade.purchase.order.vo.OrderItemsVO;
|
|
|
+import io.seata.spring.annotation.GlobalTransactional;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
+import org.springblade.client.entity.CorpsDesc;
|
|
|
+import org.springblade.client.entity.GoodsDesc;
|
|
|
+import org.springblade.client.entity.GoodsType;
|
|
|
+import org.springblade.client.feign.ICorpsDescClient;
|
|
|
+import org.springblade.client.feign.IGoodsDescClient;
|
|
|
+import org.springblade.client.feign.ISerialClient;
|
|
|
+import org.springblade.client.vo.GoodsDescVO;
|
|
|
+import org.springblade.core.secure.utils.SecureUtil;
|
|
|
import org.springblade.core.tool.api.R;
|
|
|
+import org.springblade.mocha.entity.SalesPolicyItem;
|
|
|
+import org.springblade.mocha.feign.ISalesPolicyClient;
|
|
|
+import org.springblade.stock.feign.IStockGoodsClient;
|
|
|
+import org.springblade.system.entity.Tenant;
|
|
|
+import org.springblade.system.feign.ITenantClient;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
|
|
|
@Service
|
|
|
@AllArgsConstructor
|
|
|
public class PurchaseServiceImpl extends ServiceImpl<OrderMapper, Order> implements IPurchaseService {
|
|
|
-
|
|
|
+ private OrderMapper orderMapper;
|
|
|
+ private OrderItemsMapper orderItemsMapper;
|
|
|
+ private ITenantClient tenantClient;
|
|
|
+ private IGoodsDescClient goodsDescClient;
|
|
|
+ private ICorpsDescClient corpsDescClient;
|
|
|
+ private IStockGoodsClient stockGoodsClient;//查询库存账对外访问接口
|
|
|
+ private ISalesPolicyClient salesPolicyClient;//获取政策信息
|
|
|
+ /**
|
|
|
+ * 生成系统编号
|
|
|
+ */
|
|
|
+ private ISerialClient serialClient;
|
|
|
@Override
|
|
|
+ @GlobalTransactional(timeoutMills = 12000000)
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public R createOrder(Order order) {
|
|
|
+ //查询采购合同主表信息
|
|
|
+ Order orderMessage = orderMapper.selectById(order.getId());
|
|
|
+ if (orderMessage == null){
|
|
|
+ throw new SecurityException("未找到采购合同");
|
|
|
+ }
|
|
|
+ //获取平台租户id
|
|
|
+ Tenant tenant = tenantClient.tenantMessage(SecureUtil.getTenantId());
|
|
|
+ if (tenant == null){
|
|
|
+ throw new SecurityException("未找到租户信息");
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(tenant.getTerrace())){
|
|
|
+ throw new SecurityException("未找到租户对应的平台信息,请维护平台信息");
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(tenant.getCorpCode())){
|
|
|
+ throw new SecurityException("未找到租户对应的平台客户编码,请维护平台客户编码");
|
|
|
+ }
|
|
|
+ //获取客户信息
|
|
|
+ CorpsDesc agentCode = corpsDescClient.getAgentCode(tenant.getCorpCode(), tenant.getTerrace());
|
|
|
+ if (agentCode == null){
|
|
|
+ throw new SecurityException("在平台上未找到对应的客户信息,请通知平台维护");
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(agentCode.getBelongtocompany())){
|
|
|
+ throw new SecurityException("在平台上未找到对应的客户的所属公司未维护,请通知平台维护");
|
|
|
+ }
|
|
|
+ String packageRemarks = null;
|
|
|
+ if (StringUtils.isNotBlank(agentCode.getPackageRemarks())){
|
|
|
+ packageRemarks = agentCode.getPackageRemarks();
|
|
|
+ }else {
|
|
|
+ packageRemarks = "无包装";
|
|
|
+ }
|
|
|
+ //获取客户对应的所属公司
|
|
|
+ R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(Long.valueOf(agentCode.getBelongtocompany()));
|
|
|
+ if (!corpMessage.isSuccess()){
|
|
|
+ throw new SecurityException("获取客户对应的所属公司失败");
|
|
|
+ }
|
|
|
+ if (corpMessage.getData() == null){
|
|
|
+ throw new SecurityException("未找到客户对应的所属公司信息");
|
|
|
+ }
|
|
|
+ CorpsDesc corpsDesc = corpMessage.getData();//所属公司信息
|
|
|
+ //获取所属公司对应的供应商
|
|
|
+ CorpsDesc desc = new CorpsDesc();
|
|
|
+ desc.setCorpType("GYS");
|
|
|
+ desc.setBelongtocompany(agentCode.getBelongtocompany());
|
|
|
+ desc.setTenantId(tenant.getTerrace());
|
|
|
+ List<CorpsDesc> corpsDescList = corpsDescClient.getCorp(desc);
|
|
|
+ if (CollectionUtils.isEmpty(corpsDescList)){
|
|
|
+ throw new SecurityException("未找到所属公司对应的供应商,请通知平台维护");
|
|
|
+ }
|
|
|
+ CorpsDesc supplier = corpsDescList.get(0);//供应商/生成工厂
|
|
|
+ //生成平台代理商订单
|
|
|
+ Order purchase = new Order();
|
|
|
+ purchase.setBillType(order.getBillType());//代理订单
|
|
|
+ purchase.setTradeType(order.getTradeType());//国内订单
|
|
|
+ purchase.setTenantId(tenant.getTerrace());//代理商对应的平台的租户id
|
|
|
+ purchase.setBusinesDate(new Date());//订单日期
|
|
|
+ //purchase.setCreateUser(SecureUtil.getUserId());
|
|
|
+ purchase.setCreateTime(new Date());
|
|
|
+ purchase.setPaymentType("预付");//付款方式
|
|
|
+ purchase.setRequiredDeliveryDate(new Date());//要求发货日期
|
|
|
+ purchase.setRequiredArrivalDate(new Date());//要求到货日期
|
|
|
+ purchase.setCorpId(agentCode.getId());//客户
|
|
|
+ purchase.setProductionPlant(supplier.getId());//生成工厂
|
|
|
+ purchase.setPackageRemarks(packageRemarks);//包装要求
|
|
|
+ purchase.setBanks(corpsDesc.getAccountNo());//银行账号
|
|
|
+ purchase.setBanksAccountName(corpsDesc.getAccountName());//公司户头
|
|
|
+ purchase.setAccountBank(corpsDesc.getAccountBank());//开户银行
|
|
|
+ purchase.setShippingAddress(supplier.getStorageAddr());//发货地址
|
|
|
+ purchase.setArrivalAddress(agentCode.getStorageAddr());//到货地址
|
|
|
+ //生成系统编号
|
|
|
+ R billNo = serialClient.getNo(purchase.getBillType(), purchase.getTradeType(), purchase.getBillType(),tenant.getTerrace());
|
|
|
+ if (billNo.getCode() != 200) {
|
|
|
+ throw new SecurityException("生成系统编号失败");
|
|
|
+ }
|
|
|
+ purchase.setSysNo((String) billNo.getData());//系统编号
|
|
|
+ //生成销售单号
|
|
|
+ R clientBillNo = serialClient.getNo(agentCode.getCode(), order.getTradeType(), order.getBillType(),tenant.getTerrace());
|
|
|
+ if (!clientBillNo.isSuccess()) {
|
|
|
+ throw new SecurityException("生成系统编号失败");
|
|
|
+ }
|
|
|
+ purchase.setOrderNo((String) clientBillNo.getData());//销售单号
|
|
|
+ purchase.setMorderNo(order.getOrderNo());//主订单号
|
|
|
+ purchase.setOrderStatus("录入");
|
|
|
+ orderMapper.insert(purchase);
|
|
|
+ //查询采购合同明细信息
|
|
|
+ LambdaQueryWrapper<OrderItems> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ lambdaQueryWrapper.eq(OrderItems::getIsDeleted,0);
|
|
|
+ lambdaQueryWrapper.eq(OrderItems::getGoodType,0);
|
|
|
+ lambdaQueryWrapper.eq(OrderItems::getTenantId,SecureUtil.getTenantId());
|
|
|
+ lambdaQueryWrapper.eq(OrderItems::getPid,order.getId());
|
|
|
+ List<OrderItems> orderItemsList = orderItemsMapper.selectList(lambdaQueryWrapper);
|
|
|
+ //生成平台代理商订单明细
|
|
|
+ if (CollectionUtils.isNotEmpty(orderItemsList)){
|
|
|
+ orderItemsList.stream().forEach(item ->{
|
|
|
+ OrderItems orderItems = new OrderItems();
|
|
|
+ orderItems.setPid(purchase.getId());
|
|
|
+ orderItems.setTenantId(tenant.getTerrace());
|
|
|
+ orderItems.setCreateTime(new Date());
|
|
|
+ //获取代理商商品信息
|
|
|
+ R<GoodsDescVO> goods = goodsDescClient.selectGoodsMessage(item.getItemId());
|
|
|
+ if (goods.isSuccess() && goods.getData() != null){
|
|
|
+ GoodsDesc goodsDesc = new GoodsDesc();
|
|
|
+ goodsDesc.setCode(goods.getData().getTerraceCode());
|
|
|
+ goodsDesc.setTenantId(tenant.getTerrace());
|
|
|
+ GoodsDesc terraceCode = goodsDescClient.terraceCode(goodsDesc);
|
|
|
+ if (terraceCode == null){
|
|
|
+ throw new SecurityException("平台未找到对应的商品,请通知平台维护");
|
|
|
+ }
|
|
|
+ orderItems.setItemId(terraceCode.getId());
|
|
|
+ //获取商品分类
|
|
|
+ GoodsType goodsType = goodsDescClient.goodTypeId(terraceCode.getId());
|
|
|
+ orderItems.setPriceCategory(goodsType.getCname());//产品分类
|
|
|
+ orderItems.setPriceType(item.getPriceType());//价格类别
|
|
|
+ orderItems.setCname(terraceCode.getCname());//商品名
|
|
|
+ orderItems.setCode(terraceCode.getCode());//商品编码
|
|
|
+ orderItems.setTypeno(terraceCode.getTypeno());//规格型号
|
|
|
+ orderItems.setBrandItem(terraceCode.getBrandItem());//花纹
|
|
|
+ orderItems.setSize(terraceCode.getSize());//尺寸
|
|
|
+ orderItems.setCorpId(terraceCode.getCorpId());//供应商id
|
|
|
+ orderItems.setCorpName(terraceCode.getCorpName());//供应商名称
|
|
|
+ orderItems.setShopQuality(0);//质量胎
|
|
|
+ orderItems.setOrderQuantity(item.getOrderQuantity());//数量
|
|
|
+ orderItems.setActualQuantity(BigDecimal.ZERO);//发货数量
|
|
|
+ orderItems.setStorageQuantity(item.getStorageQuantity());//库存数量
|
|
|
+ orderItems.setPurchaseAmount(item.getPurchaseAmount());//采购价格
|
|
|
+ orderItems.setPrice(item.getPrice());//最新价格
|
|
|
+ orderItems.setAmount(orderItems.getOrderQuantity().multiply(orderItems.getPrice()));//金额
|
|
|
+ orderItems.setIntegral(BigDecimal.ZERO);//赠送积分
|
|
|
+ orderItems.setIntegralMultiples(BigDecimal.ZERO);//积分倍数
|
|
|
+ orderItems.setCartonWeight(terraceCode.getCartonWeight());//重量
|
|
|
+ orderItems.setCntrVolumn(terraceCode.getCntrVolumn());//体积
|
|
|
+ orderItems.setRemarks(item.getRemarks());//备注
|
|
|
+ }else {
|
|
|
+ throw new SecurityException("未找到商品信息");
|
|
|
+ }
|
|
|
+ orderItemsMapper.insert(orderItems);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ return R.success("操作成功");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R getGoodStock(Order order) {
|
|
|
+ //获取平台租户id
|
|
|
+ List<OrderItemsVO> list = new ArrayList<>();
|
|
|
+ Tenant tenant = tenantClient.tenantMessage(SecureUtil.getTenantId());
|
|
|
+ if (tenant == null){
|
|
|
+ throw new SecurityException("未找到租户信息");
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(tenant.getTerrace())){
|
|
|
+ throw new SecurityException("未找到租户对应的平台信息,请维护平台信息");
|
|
|
+ }
|
|
|
+ if (StringUtils.isBlank(tenant.getCorpCode())){
|
|
|
+ throw new SecurityException("未找到租户对应的平台客户编码,请维护平台客户编码");
|
|
|
+ }
|
|
|
+ //获取平台销售政策 需将平台编码转成代理商编码
|
|
|
+ List<SalesPolicyItem> salesPolicy = salesPolicyClient.getSalesPolicy(tenant.getCorpCode(), tenant.getTerrace());
|
|
|
+ if (CollectionUtils.isEmpty(salesPolicy)){
|
|
|
+ salesPolicy.stream().forEach(item ->{
|
|
|
+
|
|
|
+ });
|
|
|
+ }
|
|
|
+ //获取平台库存
|
|
|
+ //获取代理商库存
|
|
|
+ //获取最近六十天销售
|
|
|
+ //
|
|
|
return null;
|
|
|
}
|
|
|
}
|