Просмотр исходного кода

修改订单完成才生成骑手、商家账单

qmj 1 месяц назад
Родитель
Сommit
46d3cfb38d
1 измененных файлов с 158 добавлено и 0 удалено
  1. 158 0
      ruoyi-admin/src/main/java/com/ruoyi/app/order/OrderService.java

+ 158 - 0
ruoyi-admin/src/main/java/com/ruoyi/app/order/OrderService.java

@@ -0,0 +1,158 @@
+package com.ruoyi.app.order;
+
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.app.service.WalletService;
+import com.ruoyi.common.core.domain.entity.SysDictData;
+import com.ruoyi.common.utils.DictUtils;
+import com.ruoyi.common.utils.MessageUtils;
+import com.ruoyi.system.domain.*;
+import com.ruoyi.system.service.IInfoUserService;
+import com.ruoyi.system.service.IPosStoreService;
+import com.ruoyi.system.service.IUserBillingService;
+import com.ruoyi.system.service.IVipUserQuanyiService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+import java.util.List;
+
+/**
+ * 订单账单生成服务(商家分成、骑手分成)
+ */
+@Service
+public class OrderService {
+
+    @Autowired
+    private IUserBillingService userBillingService;
+    @Autowired
+    private IPosStoreService posStoreService;
+    @Autowired
+    private IInfoUserService infoUserService;
+    @Autowired
+    private WalletService walletService;
+    @Autowired
+    private IVipUserQuanyiService userQuanyiService;
+
+    /**
+     * 执行商户分成
+     */
+    public void setSanghuBilling(PosOrder posOrder) {
+        long count = userBillingService.count(new LambdaQueryWrapper<UserBilling>()
+                .eq(UserBilling::getUserId, posOrder.getShId())
+                .eq(UserBilling::getType, "0")
+                .eq(UserBilling::getDdId, posOrder.getDdId()));
+        if (count <= 0) {
+            UserBilling billing = new UserBilling();
+            DecimalFormat df = new DecimalFormat("#.00");
+
+            // 判断是否为摊位订单
+            PosStore store = posStoreService.getById(posOrder.getMdId());
+            boolean isStall = store != null && store.getIsStall() != null && store.getIsStall() == 1 && store.getNightMarketId() != null;
+
+            InfoUser user;
+            if (isStall) {
+                user = infoUserService.getById(store.getNightMarketId());
+            } else {
+                user = infoUserService.getById(posOrder.getShId());
+            }
+            Double fcbili = user.getCommission() == null ? 0.00 : user.getCommission();
+            JSONArray list = JSONArray.parseArray(posOrder.getFood());
+            int fenc = 0;
+            for (int i = 0; i < list.size(); i++) {
+                JSONObject foods = list.getJSONObject(i);
+                int price = foods.getInteger("price");
+                int otherPrice = foods.getInteger("otherPrice");
+                int num = foods.getInteger("number");
+                int age = (price + otherPrice) * num;
+                fenc += age;
+            }
+            String remark = "";
+            if (posOrder.getMdYhId() != null && posOrder.getMdDiscountAmount() != null) {
+                VipUserQuanyi userQuanyi = userQuanyiService.getById(posOrder.getMdYhId());
+                if (userQuanyi != null && "1".equals(userQuanyi.getType())) {
+                    fenc = fenc - posOrder.getMdDiscountAmount();
+                    String yhmcMessage = MessageUtils.message("no.posorder.md.yh.mc.messag");
+                    yhmcMessage = StrUtil.format(yhmcMessage, posOrder.getMdYhName());
+                    remark += yhmcMessage;
+                    String yhAmount = MessageUtils.message("no.posorder.md.yh.jiner.messag");
+                    yhAmount = StrUtil.format(yhAmount, posOrder.getMdDiscountAmount());
+                    remark += yhAmount;
+                }
+            }
+            if (posOrder.getMdSalesName() != null && posOrder.getMdSalesReduction() != null) {
+                fenc = fenc - posOrder.getMdSalesReduction();
+                String cxNameMessage = MessageUtils.message("no.posorder.md.cx.mc.messag");
+                cxNameMessage = StrUtil.format(cxNameMessage, posOrder.getMdSalesName());
+                remark += cxNameMessage;
+                String cxAmount = MessageUtils.message("no.posorder.md.cx.jiner.messag");
+                cxAmount = StrUtil.format(cxAmount, posOrder.getMdSalesReduction());
+                remark += cxAmount;
+            }
+            billing.setIllustrate(remark);
+            Double chouc = fenc * fcbili;
+            Double shfc = fenc - chouc;
+            billing.setUserId(posOrder.getShId());
+            billing.setDdId(String.valueOf(posOrder.getDdId()));
+            billing.setType("0");
+            billing.setAmount(Double.valueOf(df.format(shfc)));
+            billing.setDivvy(Double.valueOf(df.format(chouc)));
+            billing.setState("0");
+            billing.setMdId(posOrder.getMdId());
+            billing.setUserType("1");
+            billing.setDivvyRate(fcbili);
+            if (isStall) {
+                billing.setStoreId(Long.valueOf(store.getId()));
+                walletService.addStallBalance(Long.valueOf(store.getId()), BigDecimal.valueOf(billing.getAmount()), billing);
+            } else {
+                walletService.addBalance(billing.getUserId(), BigDecimal.valueOf(billing.getAmount()), billing);
+            }
+        }
+    }
+
+    /**
+     * 执行骑手分成
+     */
+    public void setQishouBilling(PosOrder posOrder) {
+        long count = userBillingService.count(new LambdaQueryWrapper<UserBilling>()
+                .eq(UserBilling::getUserId, posOrder.getQsId())
+                .eq(UserBilling::getType, "0")
+                .eq(UserBilling::getDdId, posOrder.getDdId()));
+        if (count <= 0) {
+            UserBilling billing = new UserBilling();
+            DecimalFormat df = new DecimalFormat("#.00");
+            InfoUser user = infoUserService.getById(posOrder.getQsId());
+            if (user == null) {
+                System.out.println("订单无骑手");
+            } else {
+                Double fcbili = user.getCommission() == null ? 0.00 : user.getCommission();
+                Double fenc = posOrder.getFreight();
+                Double chouc = fenc * fcbili;
+                Double shfc = fenc - chouc;
+                List<SysDictData> taxBl = DictUtils.getDictCache("sys_qs_freight_bl");
+                if (taxBl != null && taxBl.get(0) != null) {
+                    Double tax = shfc * Double.parseDouble(taxBl.get(0).getDictValue());
+                    billing.setTax(BigDecimal.valueOf(tax));
+                    billing.setTaxRate(taxBl.get(0).getDictValue());
+                    shfc = shfc - tax;
+                }
+                billing.setUserId(posOrder.getQsId());
+                billing.setDdId(String.valueOf(posOrder.getDdId()));
+                billing.setType("0");
+                billing.setAmount(Double.valueOf(df.format(shfc)));
+                billing.setDivvy(Double.valueOf(df.format(chouc)));
+                billing.setState("0");
+                billing.setMdId(posOrder.getMdId());
+                billing.setUserType("2");
+                billing.setDivvyRate(user.getCommission());
+                if ("1".equals(posOrder.getCollectPayment())) {
+                    billing.setBehalfAmount(Double.valueOf(posOrder.getAmount()));
+                }
+                walletService.addBalance(billing.getUserId(), BigDecimal.valueOf(billing.getAmount()), billing);
+            }
+        }
+    }
+}