|
|
@@ -0,0 +1,800 @@
|
|
|
+package com.gree.mall.manager.logic.supply.order;
|
|
|
+
|
|
|
+import cn.hutool.core.collection.CollectionUtil;
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.gree.mall.manager.bean.admin.AdminUserCom;
|
|
|
+import com.gree.mall.manager.bean.supply.funds.CustomerWalletBean;
|
|
|
+import com.gree.mall.manager.bean.supply.order.*;
|
|
|
+import com.gree.mall.manager.commonmapper.CommonMapper;
|
|
|
+import com.gree.mall.manager.enums.ExamineStatusEnum;
|
|
|
+import com.gree.mall.manager.enums.material.DirectFlagEnum;
|
|
|
+import com.gree.mall.manager.enums.material.StateEnum;
|
|
|
+import com.gree.mall.manager.enums.supply.BalanceTypeEnum;
|
|
|
+import com.gree.mall.manager.exception.RemoteServiceException;
|
|
|
+import com.gree.mall.manager.logic.common.CommonLogic;
|
|
|
+import com.gree.mall.manager.logic.supply.funds.CompanyWalletLogic;
|
|
|
+import com.gree.mall.manager.logic.supply.policy.PolicyLogic;
|
|
|
+import com.gree.mall.manager.plus.entity.*;
|
|
|
+import com.gree.mall.manager.plus.service.*;
|
|
|
+import com.gree.mall.manager.utils.CommonUtils;
|
|
|
+import com.gree.mall.manager.zfire.bean.ZfireParamBean;
|
|
|
+import com.gree.mall.manager.zfire.util.FieldUtils;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
+import java.util.*;
|
|
|
+import java.util.function.Function;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+@Slf4j
|
|
|
+@Service
|
|
|
+@RequiredArgsConstructor
|
|
|
+public class RetailOrderLogic {
|
|
|
+
|
|
|
+ private final CommonLogic commonLogic;
|
|
|
+ private final CommonMapper commonMapper;
|
|
|
+ private final RetailOrderService retailOrderService;
|
|
|
+ private final RetailOrderItemService retailOrderItemService;
|
|
|
+ private final CompanyWalletLogic companyWalletLogic;
|
|
|
+ private final PolicyLogic policyLogic;
|
|
|
+ private final PolicyWalletRelaService policyWalletRelaService;
|
|
|
+ private final ProductPriceService productPriceService;
|
|
|
+ private final PolicyCustomerService policyCustomerService;
|
|
|
+ private final SalesTypeService salesTypeService;
|
|
|
+ private final GoodsMaterialService goodsMaterialService;
|
|
|
+ private final WalletService walletService;
|
|
|
+ private final RebateTypeService rebateTypeService;
|
|
|
+ private final RefundOrderItemService refundOrderItemService;
|
|
|
+
|
|
|
+ public IPage<RetailOrderVO> list(ZfireParamBean zfireParamBean) {
|
|
|
+ AdminUserCom adminUser = commonLogic.getAdminUser();
|
|
|
+ FieldUtils.supplyParam(zfireParamBean, RetailOrderVO.class, adminUser);
|
|
|
+
|
|
|
+ return commonMapper.retailOrderList(new Page(zfireParamBean.getPageNum(), zfireParamBean.getPageSize()), zfireParamBean);
|
|
|
+ }
|
|
|
+
|
|
|
+ public RetailOrderBean detail(String id) {
|
|
|
+ RetailOrder retailOrder = retailOrderService.getById(id);
|
|
|
+ RetailOrderBean retailOrderBean = new RetailOrderBean();
|
|
|
+ BeanUtils.copyProperties(retailOrder, retailOrderBean);
|
|
|
+
|
|
|
+ //明细
|
|
|
+ List<RetailOrderItem> list = retailOrderItemService.lambdaQuery().eq(RetailOrderItem::getRetailOrderId, id).list();
|
|
|
+
|
|
|
+ List<CustomerWalletBean> customerWalletBeans = companyWalletLogic.queryWalletByAdminCompanyId(retailOrder.getCompanyWechatId());
|
|
|
+ //所有钱包的map key = walletId
|
|
|
+ Map<String, CustomerWalletBean> customerWalletMap = customerWalletBeans.stream()
|
|
|
+ .collect(Collectors.toMap(CustomerWalletBean::getWalletId, v -> v));
|
|
|
+
|
|
|
+ //所有钱包的map key = customerWalletId
|
|
|
+ Map<String, CustomerWalletBean> customerWalletIdMap = customerWalletBeans.stream()
|
|
|
+ .collect(Collectors.toMap(CustomerWalletBean::getId, v -> v));
|
|
|
+
|
|
|
+ List<RetailOrderItemBean> newList = new ArrayList<>();
|
|
|
+ for (RetailOrderItem retailOrderItem : list) {
|
|
|
+ RetailOrderItemBean bean = new RetailOrderItemBean();
|
|
|
+ BeanUtils.copyProperties(retailOrderItem, bean);
|
|
|
+
|
|
|
+ if (retailOrder.getType() == 2) {
|
|
|
+ PolicyMaterial policyMaterial = policyLogic.getPolicyMaterial(bean.getPolicyId(), bean.getGoodsMaterialId(), bean.getSalesTypeId());
|
|
|
+ //现金钱包
|
|
|
+ if (policyMaterial != null) {
|
|
|
+ List<CustomerWalletBean> customerWallets = this.supplyWallet2(policyMaterial.getId(), customerWalletMap, BalanceTypeEnum.W.getKey());
|
|
|
+ bean.setWallets(customerWallets);
|
|
|
+
|
|
|
+ //返利钱包
|
|
|
+ List<CustomerWalletBean> customerWallets2 = this.supplyWallet2(policyMaterial.getId(), customerWalletMap, BalanceTypeEnum.R.getKey());
|
|
|
+ bean.getRebateWallets().addAll(customerWallets2);
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ List<CustomerWalletBean> customerWallets = this.supplyWallet1(bean.getProductPriceId(), customerWalletMap, BalanceTypeEnum.W.getKey());
|
|
|
+ bean.getWallets().addAll(customerWallets);
|
|
|
+
|
|
|
+ //返利钱包
|
|
|
+ List<CustomerWalletBean> customerWallets2 = this.supplyWallet1(bean.getProductPriceId(), customerWalletMap, BalanceTypeEnum.R.getKey());
|
|
|
+ bean.getRebateWallets().addAll(customerWallets2);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (CollectionUtils.isEmpty(bean.getWallets())) {
|
|
|
+ CustomerWalletBean customerWalletBean1 = customerWalletIdMap.get(bean.getCustomerWalletId());
|
|
|
+ if (customerWalletBean1 != null) {
|
|
|
+ bean.getWallets().add(customerWalletBean1);
|
|
|
+ }
|
|
|
+ CustomerWalletBean customerWalletBean2 = customerWalletIdMap.get(bean.getCustomerWalletId2());
|
|
|
+ if (customerWalletBean2 != null) {
|
|
|
+ bean.getRebateWallets().add(customerWalletBean2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //当前可用返利金额
|
|
|
+ if (CollectionUtil.isNotEmpty(bean.getRebateWallets())) {
|
|
|
+ List<CustomerWalletBean> curRebate = bean.getRebateWallets().stream()
|
|
|
+ .filter(v -> Objects.nonNull(v)
|
|
|
+ && StringUtils.isNotEmpty(retailOrderItem.getCustomerWalletId2())
|
|
|
+ && v.getId().equals(retailOrderItem.getCustomerWalletId2()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ if (curRebate.size() > 0) {
|
|
|
+ bean.setCurRebateAmount(curRebate.get(0).getBalance());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ newList.add(bean);
|
|
|
+ }
|
|
|
+
|
|
|
+ retailOrderBean.setRetailOrderItemList(newList);
|
|
|
+ return retailOrderBean;
|
|
|
+ }
|
|
|
+
|
|
|
+ //零售单补充钱包数据
|
|
|
+ public List<CustomerWalletBean> supplyWallet1(String productPriceId, Map<String, CustomerWalletBean> customerWalletMap, String type) {
|
|
|
+
|
|
|
+ ProductPrice productPrice = productPriceService.lambdaQuery()
|
|
|
+ .eq(ProductPrice::getId, productPriceId)
|
|
|
+ .one();
|
|
|
+ List<CustomerWalletBean> list = new ArrayList<>();
|
|
|
+
|
|
|
+ List<String> priceWallets = type.equals(BalanceTypeEnum.W.getKey()) ? StrUtil.split(productPrice.getWalletId(), ",") : StrUtil.split(productPrice.getRebateTypeId(), ",");
|
|
|
+ if (CollectionUtil.isNotEmpty(priceWallets)) {
|
|
|
+ for (String walletId : priceWallets) {
|
|
|
+ CustomerWalletBean customerWalletBean = customerWalletMap.get(walletId);
|
|
|
+ if (Objects.nonNull(customerWalletBean) && customerWalletBean.getType().equals(type)) {
|
|
|
+ list.add(customerWalletBean);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ //销售政策单补充钱包数据,销售政策的返利钱包是直接根据销售类型来匹配的
|
|
|
+ public List<CustomerWalletBean> supplyWallet2(String policyMaterialId, Map<String, CustomerWalletBean> customerWalletMap, String type) {
|
|
|
+ List<PolicyWalletRela> policyWalletRelas = policyWalletRelaService.lambdaQuery()
|
|
|
+ .eq(PolicyWalletRela::getPolicyMaterialId, policyMaterialId)
|
|
|
+ .list();
|
|
|
+ List<CustomerWalletBean> list = new ArrayList<>();
|
|
|
+ for (PolicyWalletRela wallet : policyWalletRelas) {
|
|
|
+ CustomerWalletBean customerWalletBean = customerWalletMap.get(wallet.getWalletId());
|
|
|
+ if (customerWalletBean != null && customerWalletBean.getType().equals(type)) {
|
|
|
+ list.add(customerWalletBean);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 新增零售订单信息
|
|
|
+ *
|
|
|
+ * @param retailOrderAdd
|
|
|
+ */
|
|
|
+ @Transactional
|
|
|
+ public void add(RetailOrderAdd retailOrderAdd) throws Exception {
|
|
|
+
|
|
|
+ AdminUserCom adminUser = commonLogic.getAdminUser();
|
|
|
+ String policyId = retailOrderAdd.getPolicyId();
|
|
|
+ Policy policy = null;
|
|
|
+ if (adminUser.getType() == 2) {
|
|
|
+ throw new RemoteServiceException("非商户不可下单");
|
|
|
+ }
|
|
|
+ if (CollectionUtils.isEmpty(retailOrderAdd.getRetailOrderItemList())) {
|
|
|
+ throw new RemoteServiceException("请选择机型");
|
|
|
+ }
|
|
|
+
|
|
|
+ RetailOrder retailOrder = new RetailOrder();
|
|
|
+ String idPrefix = "1";
|
|
|
+ if (retailOrderAdd.getType() == 2) {
|
|
|
+ idPrefix = "2";
|
|
|
+
|
|
|
+ policy = this.checkPolicy(policyId, adminUser, adminUser.getCompanyWechatId());
|
|
|
+ }
|
|
|
+ retailOrder.setId(commonLogic.generateNo(idPrefix, "retailOrder", 13));
|
|
|
+ retailOrder.setCompanyWechatId(adminUser.getCompanyWechatId());
|
|
|
+ retailOrder.setCompanyName(adminUser.getCompanyName());
|
|
|
+ retailOrder.setRemark(retailOrderAdd.getRemark());
|
|
|
+ retailOrder.setTheTime(new Date());
|
|
|
+ retailOrder.setType(retailOrderAdd.getType());
|
|
|
+
|
|
|
+ if (Objects.nonNull(policy)) {
|
|
|
+ retailOrder.setPolicyId(policyId);
|
|
|
+ retailOrder.setPolicyCode(policy.getCode());
|
|
|
+ retailOrder.setPolicyTitle(policy.getTitle());
|
|
|
+ retailOrder.setPolicyRemark(policy.getRemark());
|
|
|
+ }
|
|
|
+
|
|
|
+ //处理明细
|
|
|
+ retailOrderAdd.getRetailOrderItemList().forEach(v -> v.setId(null));
|
|
|
+ this.addRetailOrderItem(retailOrder, retailOrderAdd.getRetailOrderItemList(), policy, true);
|
|
|
+ //此处新增一定要在item下
|
|
|
+ retailOrder.insert();
|
|
|
+
|
|
|
+ submit(retailOrder.getId());
|
|
|
+ }
|
|
|
+
|
|
|
+ private Policy checkPolicy(String policyId, AdminUserCom adminUser, String customerId) {
|
|
|
+ Policy policy = policyLogic.detail(policyId);
|
|
|
+ if (policy == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(customerId)) {
|
|
|
+ customerId = adminUser.getCompanyWechatId();
|
|
|
+ }
|
|
|
+
|
|
|
+ //检查经销商是否可以下单
|
|
|
+ Integer count = policyCustomerService.lambdaQuery()
|
|
|
+ .eq(PolicyCustomer::getPolicyId, policy.getId())
|
|
|
+ .eq(PolicyCustomer::getCompanyWechatId, customerId).count();
|
|
|
+ if (count == 0) {
|
|
|
+ throw new RemoteServiceException("非本销售政策适用商户对象");
|
|
|
+ }
|
|
|
+
|
|
|
+ return policy;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 新增零售单明细
|
|
|
+ *
|
|
|
+ * @param retailOrder
|
|
|
+ * @param retailOrderItemList 如果是配提政策,前端传表体的policyMaterialId 其实是policy_condition_material的id,需注意
|
|
|
+ */
|
|
|
+ public void addRetailOrderItem(RetailOrder retailOrder, List<RetailOrderItemBean> retailOrderItemList, Policy policy, Boolean add) throws InterruptedException {
|
|
|
+ String retailOrderId = retailOrder.getId();
|
|
|
+ Integer type = retailOrder.getType();
|
|
|
+
|
|
|
+ if (CollectionUtils.isEmpty(retailOrderItemList)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!add && !StringUtils.equals(retailOrder.getExamineStatus(), ExamineStatusEnum.SAVE.toString())) {
|
|
|
+ throw new RemoteServiceException("非保存状态不可编辑");
|
|
|
+ }
|
|
|
+ //判断是否购买了同机型并同销售类型的机型
|
|
|
+ Map<String, RetailOrderItemBean> checkProduct = new HashMap<>();
|
|
|
+ for (RetailOrderItemBean retailOrderItemBean : retailOrderItemList) {
|
|
|
+ if (checkProduct.containsKey(retailOrderItemBean.getGoodsMaterialId() + retailOrderItemBean.getSalesTypeId())) {
|
|
|
+ throw new RemoteServiceException("请勿重复选择同型号同销售类型的产品");
|
|
|
+ }
|
|
|
+ checkProduct.put(retailOrderItemBean.getGoodsMaterialId() + retailOrderItemBean.getSalesTypeId(), retailOrderItemBean);
|
|
|
+ }
|
|
|
+ //先清空机型
|
|
|
+ retailOrderItemService.lambdaUpdate()
|
|
|
+ .eq(RetailOrderItem::getRetailOrderId, retailOrderId)
|
|
|
+ .remove();
|
|
|
+
|
|
|
+ //销售政策 type=1 普通零售单 type =2 销售政策单
|
|
|
+ if (type == 2) {
|
|
|
+ retailOrder.setPolicyId(retailOrder.getPolicyCode());
|
|
|
+ }
|
|
|
+ //查询钱包名称
|
|
|
+ List<CustomerWalletBean> customerWalletBeans = companyWalletLogic.queryWalletByAdminCompanyId(retailOrder.getCompanyWechatId());
|
|
|
+ Map<String, CustomerWalletBean> companyWalletMap = customerWalletBeans.stream()
|
|
|
+ .collect(Collectors.toMap(CustomerWalletBean::getId, v -> v));
|
|
|
+
|
|
|
+ // 获取所有定义钱包
|
|
|
+ final List<Wallet> walletList = walletService.list();
|
|
|
+ final Map<String, Wallet> walletMap = walletList.stream().collect(Collectors.toMap(Wallet::getId, Function.identity()));
|
|
|
+
|
|
|
+ // 获取所有返利类型
|
|
|
+ final List<RebateType> rebateTypeList = rebateTypeService.list();
|
|
|
+ final Map<String, RebateType> rebateTypeMap = rebateTypeList.stream().collect(Collectors.toMap(RebateType::getId, Function.identity()));
|
|
|
+
|
|
|
+ //新增明细
|
|
|
+ for (RetailOrderItemBean retailOrderItem : retailOrderItemList) {
|
|
|
+ SalesType saleType = salesTypeService.getById(retailOrderItem.getSalesTypeId());
|
|
|
+ String policyId = retailOrderItem.getPolicyId();
|
|
|
+ //单价
|
|
|
+ BigDecimal price;
|
|
|
+ //折扣价
|
|
|
+ BigDecimal discAmount = BigDecimal.valueOf(0);
|
|
|
+ String materialId;
|
|
|
+
|
|
|
+ if (type == 2) {
|
|
|
+ //销售政策
|
|
|
+ PolicyMaterial policyMaterial = policyLogic.getPolicyMaterial(policyId, retailOrderItem.getGoodsMaterialId(), retailOrderItem.getSalesTypeId());
|
|
|
+ if (Objects.isNull(policyMaterial) || !policyMaterial.getStatus()) {
|
|
|
+ throw new RemoteServiceException("机型型号【" + retailOrderItem.getSpecsName() + "】在当前政策中无效,请联系相关人员");
|
|
|
+ }
|
|
|
+
|
|
|
+ price = policyMaterial.getPrice();
|
|
|
+ materialId = policyMaterial.getGoodsMaterialId();
|
|
|
+ //这里覆盖下前端传错的参数
|
|
|
+ retailOrderItem.setPolicyMaterialId(policyMaterial.getId());
|
|
|
+ //补充下政策订单需要的参数
|
|
|
+ retailOrderItem.setOrgPrice(policyMaterial.getOrgPrice());
|
|
|
+ } else {
|
|
|
+ if (!add && StringUtils.isNotEmpty(retailOrderItem.getId())) {
|
|
|
+ //零售单可以改单价,所以直接使用前端传的价格
|
|
|
+ price = retailOrderItem.getPrice();
|
|
|
+ //折扣价
|
|
|
+ discAmount = retailOrderItem.getDiscAmount();
|
|
|
+ materialId = retailOrderItem.getGoodsMaterialId();
|
|
|
+ } else {
|
|
|
+ //零售
|
|
|
+ String productPriceId = retailOrderItem.getProductPriceId();
|
|
|
+ ProductPrice productPrice = productPriceService.getById(productPriceId);
|
|
|
+ if (productPrice == null) {
|
|
|
+ throw new RemoteServiceException("机型型号【" + retailOrderItem.getSpecsName() + "】价格表失效,请联系相关人员");
|
|
|
+ }
|
|
|
+ //单价
|
|
|
+ price = productPrice.getPrice();
|
|
|
+ materialId = productPrice.getGoodsMaterialId();
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (retailOrderItem.getQty() <= 0) {
|
|
|
+ throw new RemoteServiceException("数量必须大于等于1");
|
|
|
+ }
|
|
|
+
|
|
|
+ //现金钱包
|
|
|
+ CustomerWalletBean amountCustomerWallet = companyWalletMap.get(retailOrderItem.getCustomerWalletId());
|
|
|
+ //返利钱包
|
|
|
+ CustomerWalletBean rebateCustomerWallet = companyWalletMap.get(retailOrderItem.getCustomerWalletId2());
|
|
|
+
|
|
|
+ // 定义的现金钱包
|
|
|
+ final Wallet wallet = walletMap.get(amountCustomerWallet.getWalletId());
|
|
|
+
|
|
|
+ //数量
|
|
|
+ BigDecimal qty = BigDecimal.valueOf(retailOrderItem.getQty());
|
|
|
+ //总价
|
|
|
+ BigDecimal totalAmount = price.multiply(qty);
|
|
|
+ //总折扣价格
|
|
|
+ BigDecimal totalDiscAmount = discAmount.multiply(qty);
|
|
|
+ //实际支付价格
|
|
|
+ BigDecimal payAmount = totalAmount.subtract(totalDiscAmount);
|
|
|
+ //总返利价格
|
|
|
+ BigDecimal totalRebateAmount = new BigDecimal(0);
|
|
|
+ if (Objects.nonNull(rebateCustomerWallet)) {
|
|
|
+ BigDecimal rebateRate = CommonUtils.getRebateRate(rebateCustomerWallet, retailOrderItem.getSalesTypeId());
|
|
|
+ retailOrderItem.setRebateRate(rebateRate);
|
|
|
+ totalRebateAmount = retailOrderItem.getRebateRate().multiply(payAmount);
|
|
|
+ }
|
|
|
+ //实际返利金额
|
|
|
+ BigDecimal payRebateAmount = totalRebateAmount;
|
|
|
+ if (rebateCustomerWallet != null) {
|
|
|
+ boolean subRebateAmountBol = rebateCustomerWallet.getBalance().doubleValue() < totalRebateAmount.doubleValue();
|
|
|
+ if (subRebateAmountBol) {
|
|
|
+ payRebateAmount = rebateCustomerWallet.getBalance().doubleValue() > 0 ? rebateCustomerWallet.getBalance() : BigDecimal.valueOf(0);
|
|
|
+ //扣减当前返利钱包的钱,防止每次对比都是和原金额对比
|
|
|
+ rebateCustomerWallet.setBalance(BigDecimal.valueOf(0));
|
|
|
+ } else {
|
|
|
+ //扣减当前返利钱包的钱,防止每次对比都是和原金额对比
|
|
|
+ rebateCustomerWallet.setBalance(rebateCustomerWallet.getBalance().subtract(totalRebateAmount));
|
|
|
+ }
|
|
|
+
|
|
|
+ companyWalletMap.put(retailOrderItem.getCustomerWalletId2(), rebateCustomerWallet);
|
|
|
+ }
|
|
|
+ //实际支付价格
|
|
|
+ payAmount = payAmount.subtract(payRebateAmount);
|
|
|
+
|
|
|
+ GoodsMaterial goodsMaterial = goodsMaterialService.getById(materialId);
|
|
|
+
|
|
|
+ //检测钱包的合法性
|
|
|
+ this.checkWallet(retailOrderItem, amountCustomerWallet, rebateCustomerWallet, type);
|
|
|
+
|
|
|
+ retailOrderItem.setId(null);
|
|
|
+ retailOrderItem.setFileNo(retailOrder.getFileNo());
|
|
|
+ retailOrderItem.setCompanyWechatId(retailOrder.getCompanyWechatId());
|
|
|
+ retailOrderItem.setCompanyName(retailOrder.getCompanyName());
|
|
|
+ retailOrderItem.setIsUseRebate(StringUtils.isNotEmpty(retailOrderItem.getCustomerWalletId2()));
|
|
|
+ retailOrderItem.setRetailOrderId(retailOrderId);
|
|
|
+ retailOrderItem.setCustomerWalletName(amountCustomerWallet.getName());
|
|
|
+ retailOrderItem.setCustomerWalletCode(wallet.getCode());
|
|
|
+ retailOrderItem.setWalletId1(amountCustomerWallet.getWalletId());
|
|
|
+ if (Objects.nonNull(rebateCustomerWallet)) {
|
|
|
+ final RebateType rebateType = rebateTypeMap.get(rebateCustomerWallet.getWalletId());
|
|
|
+
|
|
|
+ retailOrderItem.setCustomerWalletName2(rebateCustomerWallet.getName());
|
|
|
+ retailOrderItem.setCustomerWalletCode2(rebateType.getCode());
|
|
|
+ retailOrderItem.setWalletId2(rebateCustomerWallet.getWalletId());
|
|
|
+ }
|
|
|
+ if (goodsMaterial != null) {
|
|
|
+ retailOrderItem.setFactoryNo(goodsMaterial.getFactoryNo());
|
|
|
+ retailOrderItem.setMainId(goodsMaterial.getMainId());
|
|
|
+ retailOrderItem.setMainName(goodsMaterial.getMainName());
|
|
|
+ retailOrderItem.setSmallId(goodsMaterial.getSmallId());
|
|
|
+ retailOrderItem.setSmallName(goodsMaterial.getSmallName());
|
|
|
+ retailOrderItem.setGoodsMaterialName(goodsMaterial.getGoodsName());
|
|
|
+ retailOrderItem.setSeriesName(goodsMaterial.getSeriesName());
|
|
|
+ retailOrderItem.setSpecsName(goodsMaterial.getSpecsName());
|
|
|
+ retailOrderItem.setUnit(goodsMaterial.getUnit());
|
|
|
+ }
|
|
|
+
|
|
|
+ retailOrderItem.setSalesTypeCode(saleType.getCode());
|
|
|
+ retailOrderItem.setPrice(price);
|
|
|
+ retailOrderItem.setTotalAmount(totalAmount);
|
|
|
+ retailOrderItem.setRebateAmount(totalRebateAmount.doubleValue() < 0 ? BigDecimal.valueOf(0) : totalRebateAmount);
|
|
|
+ retailOrderItem.setPayAmount(payAmount.doubleValue() < 0 ? BigDecimal.valueOf(0) : payAmount);
|
|
|
+ retailOrderItem.setPayRebateAmount(payRebateAmount);
|
|
|
+ retailOrderItem.setSingleRebateAmount(payRebateAmount.divide(qty, 6, RoundingMode.HALF_UP));
|
|
|
+ retailOrderItem.setTotalDiscAmount(totalDiscAmount);
|
|
|
+ retailOrderItem.setDiscAmount(discAmount);
|
|
|
+ retailOrderItem.setSinglePayPrice(retailOrderItem.getPayAmount().divide(qty, 6, RoundingMode.HALF_UP));
|
|
|
+ retailOrderItem.setRefundableQty(retailOrderItem.getQty());
|
|
|
+ retailOrderItem.setOldPayAmount(retailOrderItem.getPayAmount());
|
|
|
+ retailOrderItem.setOldQty(retailOrderItem.getQty());
|
|
|
+ }
|
|
|
+
|
|
|
+ Integer totalQty = 0;
|
|
|
+ BigDecimal totalAmount = new BigDecimal(0);
|
|
|
+ for (RetailOrderItem retailOrderItem : retailOrderItemList) {
|
|
|
+ totalQty += retailOrderItem.getQty();
|
|
|
+ totalAmount = totalAmount.add(retailOrderItem.getTotalAmount());
|
|
|
+ //新增
|
|
|
+ retailOrderItem.insert();
|
|
|
+ }
|
|
|
+ retailOrder.setTotalAmount(totalAmount);
|
|
|
+ retailOrder.setTotalQty(totalQty);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 检测政策单下单时钱包的合法性
|
|
|
+ *
|
|
|
+ * @param retailOrderItem
|
|
|
+ * @param amountCustomerWallet 现金钱包
|
|
|
+ * @param rebateCustomerWallet 返利钱包(可能为空)
|
|
|
+ * @param type 1=零售 2=政策
|
|
|
+ */
|
|
|
+ public void checkWallet(RetailOrderItemBean retailOrderItem, CustomerWalletBean amountCustomerWallet, CustomerWalletBean rebateCustomerWallet, Integer type) {
|
|
|
+ if (amountCustomerWallet == null) {
|
|
|
+ log.info("【请选择现金钱包】:{}", JSONObject.toJSONString(retailOrderItem));
|
|
|
+ throw new RemoteServiceException("请选择现金钱包");
|
|
|
+ }
|
|
|
+
|
|
|
+ //其他零售机
|
|
|
+ if (type == 1 && StringUtils.isNotEmpty(retailOrderItem.getProductPriceId())) {
|
|
|
+ ProductPrice productPrice = productPriceService.getById(retailOrderItem.getProductPriceId());
|
|
|
+ // 分隔逗号钱包
|
|
|
+ List<String> priceWalletIds = StrUtil.split(productPrice.getWalletId(), ",");
|
|
|
+ List<String> priceRebateIds = StrUtil.split(productPrice.getRebateTypeId(), ",");
|
|
|
+ List<String> walletIds = new ArrayList<>();
|
|
|
+ walletIds.addAll(priceWalletIds);
|
|
|
+ walletIds.addAll(priceRebateIds);
|
|
|
+ if (!walletIds.contains(amountCustomerWallet.getWalletId())) {
|
|
|
+ throw new RemoteServiceException(retailOrderItem.getSpecsName() + "的现金钱包【" + amountCustomerWallet.getName() + "】不能使用");
|
|
|
+ }
|
|
|
+ if (Objects.nonNull(rebateCustomerWallet) && !walletIds.contains(rebateCustomerWallet.getWalletId())) {
|
|
|
+ throw new RemoteServiceException(retailOrderItem.getSpecsName() + "返利钱包【" + rebateCustomerWallet.getName() + "】不能使用");
|
|
|
+ }
|
|
|
+ } else if (type == 2) {
|
|
|
+ //如果是配提政策,前端传的policyMaterialId其实是政策条件机型的id(policyConditionMaterialId)
|
|
|
+ List<PolicyWalletRela> policyWalletRelas = policyWalletRelaService
|
|
|
+ .lambdaQuery().eq(PolicyWalletRela::getPolicyId, retailOrderItem.getPolicyId())
|
|
|
+ .eq(PolicyWalletRela::getPolicyMaterialId, retailOrderItem.getPolicyMaterialId())
|
|
|
+ .list();
|
|
|
+ List<String> walletIds = policyWalletRelas.stream().map(PolicyWalletRela::getWalletId).collect(Collectors.toList());
|
|
|
+ if (!walletIds.contains(amountCustomerWallet.getWalletId())) {
|
|
|
+ throw new RemoteServiceException(retailOrderItem.getSpecsName() + "现金钱包【" + amountCustomerWallet.getName() + "】不能使用");
|
|
|
+ }
|
|
|
+ if (rebateCustomerWallet != null && !walletIds.contains(rebateCustomerWallet.getWalletId())) {
|
|
|
+ throw new RemoteServiceException(retailOrderItem.getSpecsName() + "返利钱包【" + rebateCustomerWallet.getName() + "】不能使用");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 提审
|
|
|
+ *
|
|
|
+ * @param id
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void submit(String id) throws Exception {
|
|
|
+ AdminUserCom adminUser = commonLogic.getAdminUser();
|
|
|
+ //零售单表头
|
|
|
+ RetailOrder retailOrder = retailOrderService.getById(id);
|
|
|
+ if (!retailOrder.getExamineStatus().equals(ExamineStatusEnum.SAVE.toString())) {
|
|
|
+ throw new RemoteServiceException("请勿重复提审");
|
|
|
+ }
|
|
|
+ if (retailOrder.getType() == 2) {
|
|
|
+ Policy policy = policyLogic.detail(retailOrder.getPolicyId());
|
|
|
+ if (Objects.isNull(policy)
|
|
|
+ || policy.getStatus().equals(StateEnum.OFF.getKey())
|
|
|
+ || policy.getEndTime().getTime() < new Date().getTime()
|
|
|
+ || policy.getStartTime().getTime() > new Date().getTime()) {
|
|
|
+ throw new RemoteServiceException("政策已失效,无法提审");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //零售单表体
|
|
|
+ List<RetailOrderItem> list = retailOrderItemService.lambdaQuery()
|
|
|
+ .eq(RetailOrderItem::getRetailOrderId, id)
|
|
|
+ .list();
|
|
|
+
|
|
|
+ //重新刷新次要计算的金额
|
|
|
+ List<RetailOrderItemBean> beanList = new ArrayList<>();
|
|
|
+ for (RetailOrderItem retailOrderItem : list) {
|
|
|
+ RetailOrderItemBean bean = new RetailOrderItemBean();
|
|
|
+ BeanUtils.copyProperties(retailOrderItem, bean);
|
|
|
+ beanList.add(bean);
|
|
|
+ }
|
|
|
+ RetailOrderAdd retailOrderAdd = new RetailOrderAdd();
|
|
|
+ BeanUtils.copyProperties(retailOrder, retailOrderAdd);
|
|
|
+ retailOrderAdd.setRetailOrderItemList(beanList);
|
|
|
+ this.update(retailOrderAdd);
|
|
|
+
|
|
|
+ //提审扣钱
|
|
|
+ companyWalletLogic.handleRetailOrderCompanyWallet(beanList, DirectFlagEnum.SUB, false);
|
|
|
+
|
|
|
+ retailOrder.setTheTime(new Date());
|
|
|
+ retailOrder.setExamineStatus(ExamineStatusEnum.WAIT.toString());
|
|
|
+ retailOrder.updateById();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 编辑零售订单信息
|
|
|
+ */
|
|
|
+ @Transactional
|
|
|
+ public void update(RetailOrderAdd retailOrderAdd) throws InterruptedException {
|
|
|
+
|
|
|
+ AdminUserCom adminUser = commonLogic.getAdminUser();
|
|
|
+ RetailOrder retailOrder = retailOrderService.getById(retailOrderAdd.getId());
|
|
|
+ Policy policy = null;
|
|
|
+ String policyId = retailOrderAdd.getPolicyId();
|
|
|
+ if(retailOrderAdd.getType() != null && retailOrderAdd.getType() == 2){
|
|
|
+ policy = this.checkPolicy(policyId,adminUser,retailOrder.getCompanyWechatId());
|
|
|
+ }
|
|
|
+
|
|
|
+ retailOrder.setId(retailOrderAdd.getId());
|
|
|
+ retailOrder.setRemark(retailOrderAdd.getRemark());
|
|
|
+
|
|
|
+ retailOrder.setFileNo(retailOrderAdd.getFileNo());
|
|
|
+ if(CollectionUtils.isNotEmpty(retailOrderAdd.getRetailOrderItemList())) {
|
|
|
+ //处理明细
|
|
|
+ this.addRetailOrderItem(retailOrder, retailOrderAdd.getRetailOrderItemList(),policy,false);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(Objects.nonNull(policy)){
|
|
|
+ retailOrder.setPolicyId(policyId);
|
|
|
+ retailOrder.setPolicyCode(policy.getCode());
|
|
|
+ retailOrder.setPolicyTitle(policy.getTitle());
|
|
|
+ retailOrder.setPolicyRemark(policy.getRemark());
|
|
|
+ }
|
|
|
+
|
|
|
+ retailOrder.updateById();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 撤回提审
|
|
|
+ */
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void submitCancel(String id) throws Exception {
|
|
|
+ RetailOrder retailOrder = retailOrderService.getById(id);
|
|
|
+ if(!retailOrder.getExamineStatus().equals(ExamineStatusEnum.WAIT.toString())){
|
|
|
+ throw new RemoteServiceException("无法撤回提审");
|
|
|
+ }
|
|
|
+ retailOrder.setExamineStatus(ExamineStatusEnum.SAVE.toString());
|
|
|
+ retailOrder.updateById();
|
|
|
+
|
|
|
+ //不通过,直接退钱
|
|
|
+ //全退
|
|
|
+ this.refundAll(retailOrder, true);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 退订
|
|
|
+ * @param retailOrderRefundBean 退订的商品明细
|
|
|
+ * @return
|
|
|
+ * @throws Exception
|
|
|
+ */
|
|
|
+ @Transactional
|
|
|
+ public List<Map<String, Object>> refund(RetailOrderRefundBean retailOrderRefundBean) throws Exception {
|
|
|
+ List<RetailOrderItemBean> retailOrderItemList = retailOrderRefundBean.getRetailOrderItemList();
|
|
|
+ RetailOrder retailOrder = retailOrderService.getById(retailOrderRefundBean.getId());
|
|
|
+ if(!retailOrder.getExamineStatus().equals(ExamineStatusEnum.OK.toString())){
|
|
|
+ throw new RemoteServiceException("非审核通过订单不可退订");
|
|
|
+ }
|
|
|
+ AdminUserCom adminUser = commonLogic.getAdminUser();
|
|
|
+ if (adminUser.getType() != 2) {
|
|
|
+ throw new RemoteServiceException("暂无权限操作");
|
|
|
+ }
|
|
|
+ List<Map<String, Object>> resultMap = new ArrayList<>();
|
|
|
+
|
|
|
+ List<RetailOrderItem> execRecords = new ArrayList<>();
|
|
|
+ List<RetailOrderItem> updateItems = new ArrayList<>();
|
|
|
+ for(RetailOrderItemBean retailOrderItem : retailOrderItemList) {
|
|
|
+ RetailOrderItem item = retailOrderItemService.getById(retailOrderItem.getId());
|
|
|
+
|
|
|
+ //退订数量
|
|
|
+ int tdQty = (retailOrderItem.getTdQty() == null ? 0 : retailOrderItem.getTdQty());
|
|
|
+ //订单明细的退订
|
|
|
+ Map<String, Object> paramsMap = this.refundItem(item,tdQty);
|
|
|
+ resultMap.add(paramsMap);
|
|
|
+
|
|
|
+ if (tdQty > 0 && Objects.nonNull(paramsMap.get("execRecord")))
|
|
|
+ execRecords.add((RetailOrderItem) paramsMap.get("execRecord"));
|
|
|
+
|
|
|
+ if (tdQty > 0 && Objects.nonNull(paramsMap.get("updateItem")))
|
|
|
+ updateItems.add((RetailOrderItem) paramsMap.get("updateItem"));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (CollectionUtil.isNotEmpty(execRecords)) {
|
|
|
+ //钱包金额的退订
|
|
|
+ this.refundAmount(execRecords);
|
|
|
+ // 更新订单明细
|
|
|
+ retailOrderItemService.saveOrUpdateBatch(updateItems);
|
|
|
+ // 插入退订记录
|
|
|
+ this.insertRefundOrderRecord(retailOrder, execRecords, adminUser);
|
|
|
+ }
|
|
|
+
|
|
|
+ return resultMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void refundAll(RetailOrder retailOrder, boolean isRemoveRecord) throws Exception {
|
|
|
+ //退钱
|
|
|
+ List<RetailOrderItemBean> retailOrderItemBeans = new ArrayList<>();
|
|
|
+ List<RetailOrderItem> retailOrderItemList = retailOrderItemService.lambdaQuery().eq(RetailOrderItem::getRetailOrderId, retailOrder.getId()).list();
|
|
|
+
|
|
|
+ for(RetailOrderItem item : retailOrderItemList){
|
|
|
+ if(item.getRefundableQty().intValue() != item.getOldQty().intValue()){
|
|
|
+ throw new RemoteServiceException("检测到订单数量与订单原数量有变动,不可弃审");
|
|
|
+ }
|
|
|
+ RetailOrderItemBean retailOrderItemBean = new RetailOrderItemBean();
|
|
|
+ BeanUtils.copyProperties(item, retailOrderItemBean);
|
|
|
+ retailOrderItemBeans.add(retailOrderItemBean);
|
|
|
+ }
|
|
|
+
|
|
|
+ companyWalletLogic.handleRetailOrderCompanyWallet(retailOrderItemBeans, DirectFlagEnum.ADD, isRemoveRecord);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 订单明细退订处理(不处理钱包的钱,只处理明细数量和订单里的钱)
|
|
|
+ * @param retailOrderItem 订单明细
|
|
|
+ * @param itemTdQty 退订明细数量
|
|
|
+ * @return 退订现金金额
|
|
|
+ */
|
|
|
+ public Map<String, Object> refundItem(RetailOrderItem retailOrderItem, Integer itemTdQty){
|
|
|
+ RetailOrderItem item = retailOrderItemService.getById(retailOrderItem.getId());
|
|
|
+ //退订数量
|
|
|
+ int tdQty = (itemTdQty == null ? 0 : itemTdQty);
|
|
|
+
|
|
|
+ //退订金额
|
|
|
+ BigDecimal tdAmount = retailOrderItem.getSinglePayPrice().multiply(BigDecimal.valueOf(tdQty));
|
|
|
+ if(item.getQty() == tdQty){
|
|
|
+ tdAmount = retailOrderItem.getPayAmount();
|
|
|
+ }
|
|
|
+ //退订的实际返利金额
|
|
|
+ BigDecimal tdPayRebateAmount = retailOrderItem.getSingleRebateAmount().multiply(BigDecimal.valueOf(tdQty));
|
|
|
+ if(item.getQty() == tdQty){
|
|
|
+ tdPayRebateAmount = retailOrderItem.getPayRebateAmount();
|
|
|
+ }
|
|
|
+ //退订折扣金额
|
|
|
+ BigDecimal tdDiscAmount = retailOrderItem.getDiscAmount().multiply(BigDecimal.valueOf(tdQty));
|
|
|
+ if(item.getQty() == tdQty){
|
|
|
+ tdDiscAmount = retailOrderItem.getTotalDiscAmount();
|
|
|
+ }
|
|
|
+ //剩余金额
|
|
|
+ BigDecimal balanceNewPrice = retailOrderItem.getPayAmount().subtract(tdAmount);
|
|
|
+ //剩余返利金额
|
|
|
+ BigDecimal balanceRebateAmount = retailOrderItem.getPayRebateAmount().subtract(tdPayRebateAmount);
|
|
|
+ //剩余折扣金额
|
|
|
+ BigDecimal balanceDiscAmount = retailOrderItem.getTotalDiscAmount().subtract(tdDiscAmount);
|
|
|
+
|
|
|
+ if(tdQty < 0){
|
|
|
+ throw new RemoteServiceException("退订数量不可为负数");
|
|
|
+ }
|
|
|
+ if(tdQty > item.getRefundableQty()){
|
|
|
+ throw new RemoteServiceException("机型:" + item.getSpecsName() + "退订数量不可大于可退数量");
|
|
|
+ }
|
|
|
+ //处理数量
|
|
|
+ retailOrderItem.setRefundableQty(item.getRefundableQty() - tdQty);
|
|
|
+ retailOrderItem.setRetiredQty(item.getRetiredQty() + tdQty);
|
|
|
+ retailOrderItem.setQty(retailOrderItem.getQty() - tdQty);
|
|
|
+
|
|
|
+ //处理金额
|
|
|
+ retailOrderItem.setPayAmount(balanceNewPrice.doubleValue() < 0 ? BigDecimal.valueOf(0) : balanceNewPrice);
|
|
|
+ retailOrderItem.setPayRebateAmount(balanceRebateAmount.doubleValue() < 0 ? BigDecimal.valueOf(0) : balanceRebateAmount);
|
|
|
+ retailOrderItem.setTotalDiscAmount(balanceDiscAmount.doubleValue() < 0 ? BigDecimal.valueOf(0) : balanceDiscAmount);
|
|
|
+ retailOrderItem.setTotalAmount(retailOrderItem.getPrice().multiply(BigDecimal.valueOf(retailOrderItem.getQty())));
|
|
|
+
|
|
|
+ Map<String, Object> paramsMap = new HashMap<>();
|
|
|
+ if (tdQty > 0) {
|
|
|
+ RetailOrderItem execRecord = new RetailOrderItem();
|
|
|
+ BeanUtils.copyProperties(item, execRecord);
|
|
|
+ execRecord.setQty(tdQty)
|
|
|
+ .setTotalAmount(item.getPrice().multiply(BigDecimal.valueOf(tdQty)))
|
|
|
+ .setTotalDiscAmount(tdDiscAmount)
|
|
|
+ .setPayRebateAmount(tdPayRebateAmount)
|
|
|
+ .setPayAmount(tdAmount);
|
|
|
+
|
|
|
+ paramsMap.put("execRecord", execRecord);
|
|
|
+ paramsMap.put("updateItem", retailOrderItem);
|
|
|
+ }
|
|
|
+
|
|
|
+ return paramsMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void refundAmount(List<RetailOrderItem> retailOrderItemList) {
|
|
|
+ List<RetailOrderItemBean> retailOrderItemBeans = new ArrayList<>();
|
|
|
+ for (RetailOrderItem item : retailOrderItemList) {
|
|
|
+ RetailOrderItemBean bean = new RetailOrderItemBean();
|
|
|
+ BeanUtils.copyProperties(item, bean);
|
|
|
+ retailOrderItemBeans.add(bean);
|
|
|
+ }
|
|
|
+
|
|
|
+ companyWalletLogic.handleRetailOrderCompanyWallet(retailOrderItemBeans, DirectFlagEnum.ADD, false);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void insertRefundOrderRecord(RetailOrder retailOrder, List<RetailOrderItem> execRecords, AdminUserCom adminUser) {
|
|
|
+ RefundOrder refundOrder = new RefundOrder();
|
|
|
+ refundOrder.setRefundOrderType(retailOrder.getType().toString());
|
|
|
+ refundOrder.setRefOrderDate(retailOrder.getTheTime());
|
|
|
+ refundOrder.setRefOrderId(retailOrder.getId());
|
|
|
+ refundOrder.setPolicyId(retailOrder.getPolicyId());
|
|
|
+ refundOrder.setPolicyCode(retailOrder.getPolicyCode());
|
|
|
+ refundOrder.setPolicyTitle(retailOrder.getPolicyTitle());
|
|
|
+ refundOrder.setPolicyRemark(retailOrder.getPolicyRemark());
|
|
|
+ refundOrder.setFileNo(retailOrder.getFileNo());
|
|
|
+ refundOrder.setRefOrderRemark(retailOrder.getRemark());
|
|
|
+ refundOrder.setRefundBy(adminUser.getNickName());
|
|
|
+ refundOrder.setRefundTime(DateUtil.date());
|
|
|
+ refundOrder.setCompanyWechatId(retailOrder.getCompanyWechatId());
|
|
|
+ refundOrder.setCompanyName(retailOrder.getCompanyName());
|
|
|
+ refundOrder.insert();
|
|
|
+
|
|
|
+ List<RefundOrderItem> refundOrderItems = new ArrayList<>();
|
|
|
+ for (RetailOrderItem execRecord : execRecords) {
|
|
|
+ RefundOrderItem refundOrderItem = new RefundOrderItem();
|
|
|
+ BeanUtils.copyProperties(execRecord, refundOrderItem);
|
|
|
+ refundOrderItem.setRefundOrderItemId(null)
|
|
|
+ .setRefundOrderId(refundOrder.getRefundOrderId())
|
|
|
+ .setRetailOrderId(refundOrder.getRefOrderId());
|
|
|
+
|
|
|
+ refundOrderItems.add(refundOrderItem);
|
|
|
+ }
|
|
|
+
|
|
|
+ refundOrderItemService.saveBatch(refundOrderItems);
|
|
|
+ }
|
|
|
+
|
|
|
+ public void examine(String id, String examineStatus, String examineRemark, String remark, String fileNo) throws Exception {
|
|
|
+ AdminUserCom adminUser = commonLogic.getAdminUser();
|
|
|
+ RetailOrder retailOrder = retailOrderService.getById(id);
|
|
|
+ if(!retailOrder.getExamineStatus().equals(ExamineStatusEnum.WAIT.toString())){
|
|
|
+ throw new RemoteServiceException("非待审核单据不可审核");
|
|
|
+ }
|
|
|
+ if(adminUser.getType() != 2){
|
|
|
+ throw new RemoteServiceException("暂无权限操作");
|
|
|
+ }
|
|
|
+ //驳回直接变回保存状态
|
|
|
+ retailOrder.setRemark(remark);
|
|
|
+ retailOrder.setExamineStatus(examineStatus.equals(ExamineStatusEnum.FAIL.getKey())?ExamineStatusEnum.SAVE.getKey():examineStatus);
|
|
|
+ retailOrder.setExamineRemark(examineRemark);
|
|
|
+ retailOrder.setExamineBy(adminUser.getNickName());
|
|
|
+ retailOrder.setExamineTime(new Date());
|
|
|
+ retailOrder.setFileNo(fileNo);
|
|
|
+
|
|
|
+ List<RetailOrderItem> retailOrderItems = retailOrderItemService.lambdaQuery()
|
|
|
+ .eq(RetailOrderItem::getRetailOrderId, id).list();
|
|
|
+
|
|
|
+ //审核通过
|
|
|
+ if(StringUtils.equals(examineStatus,ExamineStatusEnum.OK.toString())){
|
|
|
+
|
|
|
+ }else if(StringUtils.equals(examineStatus,ExamineStatusEnum.FAIL.toString())){
|
|
|
+ //全退
|
|
|
+ this.refundAll(retailOrder, false);
|
|
|
+ }
|
|
|
+ retailOrder.updateById();
|
|
|
+ retailOrderItemService.saveOrUpdateBatch(retailOrderItems);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional
|
|
|
+ public void delete(String id){
|
|
|
+ RetailOrder retailOrder = retailOrderService.getById(id);
|
|
|
+ if(!retailOrder.getExamineStatus().equals(ExamineStatusEnum.SAVE.toString())){
|
|
|
+ throw new RemoteServiceException("非保存状态不可删除");
|
|
|
+ }
|
|
|
+ retailOrder.deleteById();
|
|
|
+ retailOrderItemService.lambdaUpdate().eq(RetailOrderItem::getRetailOrderId,id).remove();
|
|
|
+ }
|
|
|
+}
|