ソースを参照

1.修改益寿缘互联网医院套餐包下单业务 2.修改益寿缘推送商城订单金额

wjj 3 週間 前
コミット
fcef7abac8

+ 5 - 3
fs-service/src/main/java/com/fs/erp/service/impl/JSTErpOrderServiceImpl.java

@@ -285,13 +285,15 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
         if("2".equals(fsStoreOrder.getPayType()) || "3".equals(fsStoreOrder.getPayType())){
             shopOrderDTO.setIsCod(true);
             // 货到付款金额 = 物流代收金额-优惠金额
-            shopOrderDTO.setBuyerPaidAmount(fsStoreOrder.getPayDelivery());
-            shopOrderDTO.setPayAmount(fsStoreOrder.getPayPrice().doubleValue());
+            //注释掉总买家实付
+            //shopOrderDTO.setBuyerPaidAmount(fsStoreOrder.getPayDelivery());
+            //应付金额(货到付款= 订单总金额 - 已付金额)
+            shopOrderDTO.setPayAmount(fsStoreOrder.getTotalPrice().subtract(fsStoreOrder.getPayPrice()).doubleValue());
 
             // 货到付款要推两次
             PaymentDTO paymentDTO2 = new PaymentDTO();
             // 物流代收金额
-            paymentDTO2.setAmount(fsStoreOrder.getPayDelivery().doubleValue());
+            paymentDTO2.setAmount(fsStoreOrder.getTotalPrice().subtract(fsStoreOrder.getPayPrice()).doubleValue());
             paymentDTO2.setOuterPayId(String.format("%s%d",order.getPlatform_code(),1));
             paymentDTO2.setPayDate(order.getDeal_datetime());
             paymentDTO2.setPayment("货到付款");

+ 1 - 0
fs-service/src/main/java/com/fs/his/param/FsPackageOrderComputeParam.java

@@ -14,6 +14,7 @@ public class FsPackageOrderComputeParam implements Serializable {
     Integer type=1;
     Long companyId;
     Long companyUserId;
+    private String createPackageOrderKey;
 
 
 }

+ 2 - 0
fs-service/src/main/java/com/fs/his/param/FsPackageOrderCreateParam.java

@@ -19,6 +19,8 @@ public class FsPackageOrderCreateParam implements Serializable {
     private String formJson;
     private String patientJson;
     private Integer source;//订单来源 1:小程序 2:app  3:H5
+    private String createPackageOrderKey;
+    private Integer payType;
 
 
 

+ 1 - 0
fs-service/src/main/java/com/fs/his/param/FsPackageOrderDoPayParam.java

@@ -12,4 +12,5 @@ public class FsPackageOrderDoPayParam implements Serializable {
     Long userId;
 
     private String appId;//小程序id
+    private String createPackageOrderKey;
 }

+ 1 - 0
fs-service/src/main/java/com/fs/his/param/FsPackageOrderPayParam.java

@@ -16,4 +16,5 @@ public class FsPackageOrderPayParam implements Serializable {
     Integer payType;
 
     Long userId;
+    private String createPackageOrderKey;
 }

+ 18 - 0
fs-service/src/main/java/com/fs/his/service/IFsPackageOrderService.java

@@ -1,8 +1,10 @@
 package com.fs.his.service;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 import com.fs.common.core.domain.R;
+import com.fs.company.domain.CompanyUser;
 import com.fs.his.domain.FsPackage;
 import com.fs.his.domain.FsPackageOrder;
 import com.fs.his.domain.FsStorePayment;
@@ -124,4 +126,20 @@ public interface IFsPackageOrderService
 
     R getWxaCodePackageOrderUnLimit(Long orderId);
 
+    /**
+     * 套餐包制单
+     */
+    R createPackageOrder(CompanyUser companyUser,Long packageId);
+
+    /**
+     * 更新套餐订单金额
+     * @param createOrderKey 键
+     * @param money 订单金额
+     * @param payAmount 支付金额
+     * @param payType 支付类型 1-全款 2-物流代收
+     */
+    R updatePackageOrderMoney(String createOrderKey, BigDecimal money, BigDecimal payAmount, Integer payType);
+
+
+    R getPackageOrder(String createOrderKey);
 }

+ 100 - 8
fs-service/src/main/java/com/fs/his/service/impl/FsPackageOrderServiceImpl.java

@@ -28,6 +28,7 @@ import com.fs.common.utils.ip.IpUtils;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.mapper.CompanyUserMapper;
+import com.fs.config.cloud.CloudHostProper;
 import com.fs.core.config.WxMaConfiguration;
 import com.fs.core.config.WxPayProperties;
 import com.fs.core.utils.OrderCodeUtils;
@@ -163,6 +164,9 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
     @Autowired
     private IFsUserWxService userWxService;
 
+    @Autowired
+    private CloudHostProper cloudHostProper;
+
     /**
      * 查询套餐订单
      *
@@ -428,21 +432,34 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
 //                if (payRemain.compareTo(new BigDecimal(0)) == 0) {
 //                    throw new CustomException("代收金额应大于0");
 //                }
-                if (sysConfig.getRetainer() != null && sysConfig.getRate() != null && sysConfig.getRate().compareTo(new BigDecimal(0)) > 0) {
-                    if (payPrice.compareTo(new BigDecimal(100)) < 0) {
-                        throw new CustomException("订单金额应大于等于100");
+                if (("益善缘".equals(cloudHostProper.getCompanyName()))){
+                    String key = redisCache.getCacheObject("createPackageOrderKey:" + param.getCreatePackageOrderKey());
+                    if (StringUtils.isEmpty(key)) {
+                        throw new CustomException("订单已过期", 501);
                     }
-                    //有最低定金金额和提成比率
-                    if (payPrice.compareTo(new BigDecimal(1000)) < 0) {
+                    payMoney = redisCache.getCacheObject("createPackageOrderAmount:" + param.getCreatePackageOrderKey());
+                    if (payMoney == null) {
                         payMoney = new BigDecimal(100);
-                    } else {
-                        payMoney = payPrice.multiply(sysConfig.getRate()).divide(new BigDecimal(100));
-                        payMoney = new BigDecimal(payMoney.setScale(0, BigDecimal.ROUND_HALF_UP).longValue());
                     }
                 } else {
                     payMoney = payPrice.multiply(new BigDecimal((100 - configDTO.getPayRate()))).divide(new BigDecimal(100));
                     payMoney = new BigDecimal(payMoney.setScale(0, BigDecimal.ROUND_HALF_UP).longValue());
                 }
+//                if (sysConfig.getRetainer() != null && sysConfig.getRate() != null && sysConfig.getRate().compareTo(new BigDecimal(0)) > 0) {
+//                    if (payPrice.compareTo(new BigDecimal(100)) < 0) {
+//                        throw new CustomException("订单金额应大于等于100");
+//                    }
+//                    //有最低定金金额和提成比率
+//                    if (payPrice.compareTo(new BigDecimal(1000)) < 0) {
+//                        payMoney = new BigDecimal(100);
+//                    } else {
+//                        payMoney = payPrice.multiply(sysConfig.getRate()).divide(new BigDecimal(100));
+//                        payMoney = new BigDecimal(payMoney.setScale(0, BigDecimal.ROUND_HALF_UP).longValue());
+//                    }
+//                } else {
+//                    payMoney = payPrice.multiply(new BigDecimal((100 - configDTO.getPayRate()))).divide(new BigDecimal(100));
+//                    payMoney = new BigDecimal(payMoney.setScale(0, BigDecimal.ROUND_HALF_UP).longValue());
+//                }
                 payRemain = payPrice.subtract(payMoney);
                 payDelivery = new BigDecimal(0);
                 if (payRemain.compareTo(new BigDecimal(0)) == 0) {
@@ -542,6 +559,7 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
         if(StringUtils.isEmpty(orderSn)){
             return R.error("订单生成失败,请重试");
         }
+        order.setPayType(param.getPayType());
         order.setOrderSn(orderSn);
         order.setStoreId(fsPackage.getStoreId());
         order.setUserId(param.getUserId());
@@ -678,6 +696,12 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
             userCoupon.setStatus(1);
             userCouponService.updateFsUserCoupon(userCoupon);
         }
+        if (StringUtils.isNotEmpty(param.getCreatePackageOrderKey())) {
+            redisCache.deleteObject("createPackageOrderKey:" + param.getCreatePackageOrderKey());
+            redisCache.deleteObject("createPackageOrderPayType:" + param.getCreatePackageOrderKey());
+            redisCache.deleteObject("createPackageOrderAmount:" + param.getCreatePackageOrderKey());
+            redisCache.deleteObject("createPackageOrderMoney:" + param.getCreatePackageOrderKey());
+        }
 
         return R.ok();
 
@@ -1725,4 +1749,72 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
             return R.error("微信接口调用失败: " + e.getMessage());
         }
     }
+
+    @Override
+    public R createPackageOrder(CompanyUser companyUser, Long packageId) {
+        FsPackage fsPackage=fsPackageMapper.selectFsPackageByPackageId(packageId);
+        if(fsPackage==null){
+            return R.error("套餐不存在");
+        }
+        if(fsPackage.getStatus()!=1){
+            return R.error("套餐不可用");
+        }
+
+        String uuid = IdUtil.randomUUID();
+        redisCache.setCacheObject("createPackageOrderKey:" + uuid, companyUser.getCompanyId() + "-" + companyUser.getUserId(), 24, TimeUnit.HOURS);
+        redisCache.setCacheObject("package:" + uuid, fsPackage, 24, TimeUnit.HOURS);
+        BigDecimal price = fsPackage.getTotalPrice();
+        if (price == null){
+            price = BigDecimal.ZERO;
+        }
+        redisCache.setCacheObject("createPackageOrderMoney:" + uuid,price,24,TimeUnit.HOURS);
+        return R.ok().put("packageOrderKey", uuid).put("price", price);
+    }
+
+    @Override
+    public R updatePackageOrderMoney(String createPackageOrderKey, BigDecimal money, BigDecimal payAmount, Integer payType) {
+        if (money == null) {
+            return R.error("请输入应付价格");
+        }
+        if (payType != null && payType != 1) {
+            if (payAmount == null) {
+                return R.error("请输入代收金额");
+            }
+            if (payAmount.compareTo(new BigDecimal(100)) < 0) {
+                throw new CustomException("物流代收金额应大于等于100");
+            }
+        }
+        String key = redisCache.getCacheObject("createPackageOrderKey:" + createPackageOrderKey);
+        if (StringUtils.isEmpty(key)) {
+            throw new CustomException("订单已过期", 501);
+        }
+        FsPackage fsPackage = redisCache.getCacheObject("package:"+createPackageOrderKey);
+        BigDecimal totalMoney = BigDecimal.ZERO;
+        if (fsPackage != null && fsPackage.getTotalPrice() != null) {
+            totalMoney = fsPackage.getTotalPrice();
+        }
+        logger.info("商品总价===========>{}",totalMoney);
+        if (money.compareTo(totalMoney) == 1) {
+            throw new CustomException("价格不能大于套餐包总价", 501);
+        }
+        redisCache.setCacheObject("createPackageOrderMoney:" + createPackageOrderKey, money, 24, TimeUnit.HOURS);
+        redisCache.setCacheObject("createPackageOrderAmount:" + createPackageOrderKey, payAmount, 24, TimeUnit.HOURS);//物流代收自定义金额
+        redisCache.setCacheObject("createPackageOrderPayType:" + createPackageOrderKey, payType, 24, TimeUnit.HOURS);//支付类型 1-全付款 2-物流代收(货到付款)
+        return R.ok();
+    }
+
+    @Override
+    public R getPackageOrder(String createPackageOrderKey) {
+        String key = redisCache.getCacheObject("createPackageOrderKey:" + createPackageOrderKey);
+        if (StringUtils.isEmpty(key)) {
+            throw new CustomException("套餐包订单已过期", 501);
+        }
+        FsPackage fsPackage = redisCache.getCacheObject("package:" + createPackageOrderKey);
+        BigDecimal money = redisCache.getCacheObject("createPackageOrderMoney:" + createPackageOrderKey);
+        Integer payType = redisCache.getCacheObject("createPackageOrderPayType:" + createPackageOrderKey);
+        if (payType != null && payType == 2) {
+            money = redisCache.getCacheObject("createPackageOrderAmount:" + createPackageOrderKey);
+        }
+        return R.ok().put("package", fsPackage).put("money", money).put("payType", payType);
+    }
 }

+ 53 - 0
fs-user-app/src/main/java/com/fs/app/controller/PackageOrderController.java

@@ -8,6 +8,8 @@ import com.fs.common.annotation.RepeatSubmit;
 import com.fs.common.core.domain.R;
 import com.fs.common.utils.ParseUtils;
 import com.fs.common.utils.StringUtils;
+import com.fs.company.domain.CompanyUser;
+import com.fs.company.service.ICompanyUserService;
 import com.fs.his.domain.*;
 import com.fs.his.dto.FsInquiryOrderPatientDTO;
 import com.fs.his.dto.FsStoreOrderAddressDTO;
@@ -25,6 +27,7 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.ThreadLocalRandom;
 
@@ -37,6 +40,9 @@ public class PackageOrderController extends  AppBaseController {
     @Autowired
     private IFsPackageOrderService packageOrderService;
 
+    @Autowired
+    private ICompanyUserService companyUserService;
+
 
     @Login
     @ApiOperation("创建订单")
@@ -234,4 +240,51 @@ public class PackageOrderController extends  AppBaseController {
         return R.ok().put("data", newOrderByPackageId);
     }
 
+    @Login
+    @ApiOperation("套餐包分享制单")
+    @GetMapping("/createPackageOrder")
+    public R createSalesOrder(@RequestParam("token")String token,
+                              @RequestParam("packageId")Long packageId,
+                              HttpServletRequest request){
+        Long userId=redisCache.getCacheObject("company-user-token:"+token);
+        if(userId==null){
+            return R.error(403,"用户失效");
+        }
+        CompanyUser companyUser=companyUserService.selectCompanyUserById(userId);
+        if(companyUser==null||companyUser.getDelFlag().equals("1")){
+            return R.error("用户不存在");
+        }
+        if(!companyUser.getStatus().equals("0")){
+            return R.error("用户已禁用");
+        }
+        return packageOrderService.createPackageOrder(companyUser,packageId);
+    }
+
+    @ApiOperation("改价")
+    @GetMapping("/updatePackageOrderMoney")
+    public R updatePackageOrderMoney(@RequestParam("token")String token,
+                                   @RequestParam("createPackageOrderKey")String createPackageOrderKey,
+                                   @RequestParam(value = "money",required = false) BigDecimal money,
+                                   @RequestParam(value = "payAmount",required = false) BigDecimal payAmount,
+                                   @RequestParam(value = "payType",required = false) Integer payType,
+                                   HttpServletRequest request){
+        Long userId = redisCache.getCacheObject("company-user-token:"+token);
+        if(userId==null){
+            return R.error(403,"用户失效");
+        }
+        if (money == null){
+            money = BigDecimal.ZERO;
+        }
+        if (payAmount == null){
+            payAmount = BigDecimal.ZERO;
+        }
+        return packageOrderService.updatePackageOrderMoney(createPackageOrderKey,money,payAmount,payType);
+    }
+
+    @ApiOperation("获取订单")
+    @GetMapping("/getPackageOrder")
+    public R getPackageOrder(@RequestParam("createPackageOrderKey")String createPackageOrderKey, HttpServletRequest request){
+        return packageOrderService.getPackageOrder(createPackageOrderKey);
+    }
+
 }