Browse Source

存在文化微信刷单物流发货等

yjwang 1 week ago
parent
commit
417d398069
18 changed files with 746 additions and 63 deletions
  1. 9 0
      fs-admin/src/main/java/com/fs/his/task/Task.java
  2. 5 3
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreHealthOrderScrmController.java
  3. 5 5
      fs-service/pom.xml
  4. 18 0
      fs-service/src/main/java/com/fs/course/dto/OrderOpenIdTransDTO.java
  5. 6 4
      fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java
  6. 6 0
      fs-service/src/main/java/com/fs/his/service/IFsStoreOrderService.java
  7. 113 0
      fs-service/src/main/java/com/fs/his/service/impl/FsStoreOrderServiceImpl.java
  8. 1 0
      fs-service/src/main/java/com/fs/hisStore/config/StoreConfig.java
  9. 192 1
      fs-service/src/main/java/com/fs/hisStore/domain/FsStoreProductAttrValueScrm.java
  10. 18 1
      fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreOrderScrmMapper.java
  11. 12 1
      fs-service/src/main/java/com/fs/hisStore/service/IFsStoreOrderScrmService.java
  12. 250 45
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java
  13. 41 0
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreProductScrmServiceImpl.java
  14. 32 0
      fs-service/src/main/java/com/fs/hisStore/vo/FsStoreOrderCodeOpenIdVo.java
  15. 21 0
      fs-service/src/main/resources/mapper/hisStore/FsStoreOrderScrmMapper.xml
  16. 10 1
      fs-service/src/main/resources/mapper/hisStore/FsStoreProductAttrValueScrmMapper.xml
  17. 1 1
      fs-user-app/src/main/java/com/fs/app/controller/HuifuPayController.java
  18. 6 1
      fs-user-app/src/main/java/com/fs/app/controller/store/StoreOrderScrmController.java

+ 9 - 0
fs-admin/src/main/java/com/fs/his/task/Task.java

@@ -43,6 +43,7 @@ import com.fs.his.service.*;
 import com.fs.his.service.impl.FsPackageOrderServiceImpl;
 import com.fs.his.utils.ConfigUtil;
 import com.fs.his.vo.FsSubOrderResultVO;
+import com.fs.hisStore.service.IFsStoreOrderScrmService;
 import com.fs.im.dto.*;
 import com.fs.im.service.IImService;
 import com.fs.qw.domain.QwCompany;
@@ -161,6 +162,9 @@ public class Task {
     @Autowired
     private ICompanyUserService userService;
 
+    @Autowired
+    private IFsStoreOrderScrmService fsStoreOrderScrmService;
+
     //定时查询ipad主机使用情况,建议每天凌晨1点执行一次
     public void totalIpadTask(){
         String dateTime = DateUtils.addDateDays(-1); // 昨天
@@ -1094,4 +1098,9 @@ public class Task {
         }
         return null;
     }
+
+    //定时任务刷新订单结算状态
+    public void refreshOrderSettlementStatus(){
+        fsStoreOrderScrmService.refreshOrderSettlementStatus();
+    }
 }

+ 5 - 3
fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreHealthOrderScrmController.java

@@ -257,7 +257,7 @@ public class FsStoreHealthOrderScrmController extends BaseController {
     //订单发货批量导入
     @Log(title = "发货同步导入", businessType = BusinessType.IMPORT)
     @PostMapping("/importDeliveryNoteExpress")
-    public R importDeliveryNoteExpress(@RequestParam("file") MultipartFile file) {
+    public R importDeliveryNoteExpress(@RequestParam("file") MultipartFile file,@RequestParam("miniAppId") String miniAppId) {
         // 1. 检查文件是否为空
         if (file.isEmpty()) {
             return R.error("上传的文件不能为空");
@@ -276,7 +276,10 @@ public class FsStoreHealthOrderScrmController extends BaseController {
         try {
             List<FsOrderDeliveryNoteDTO> dtoList = util.importExcel(file.getInputStream());
             if(!dtoList.isEmpty()){
-               return fsStoreOrderService.importDeliveryNoteExpress(dtoList);
+                if(dtoList.size() > 200){
+                    R.error("操作失败,导入数据不能大于200条!");
+                }
+               return fsStoreOrderService.importDeliveryNoteExpress(dtoList,miniAppId);
             }else {
                 R.error("操作失败,导入数据不能小于1条!");
             }
@@ -292,7 +295,6 @@ public class FsStoreHealthOrderScrmController extends BaseController {
         return util.importTemplateExcel("订单发货导入模板");
     }
 
-    // 检查文件是否为有效的Excel文件
     private boolean isValidExcelFile(String fileName) {
         for (String ext : ALLOWED_EXCEL_EXTENSIONS) {
             if (fileName.toLowerCase().endsWith(ext)) {

+ 5 - 5
fs-service/pom.xml

@@ -15,9 +15,9 @@
         service模块
     </description>
     <properties>
-        <weixin-java-cp.version>4.7.0</weixin-java-cp.version>
-        <weixin-java-miniapp.version>4.7.0</weixin-java-miniapp.version>
-        <weixin-java-mp.version>4.7.0</weixin-java-mp.version>
+        <weixin-java-cp.version>4.7.7-20250808.182223</weixin-java-cp.version>
+        <weixin-java-miniapp.version>4.7.7-20250808.182223</weixin-java-miniapp.version>
+        <weixin-java-mp.version>4.7.7-20250808.182223</weixin-java-mp.version>
     </properties>
 
     <dependencies>
@@ -118,12 +118,12 @@
         <dependency>
             <groupId>com.github.binarywang</groupId>
             <artifactId>weixin-java-miniapp</artifactId>
-            <version>4.7.0</version>
+            <version>4.7.7-20250808.182223</version>
         </dependency>
         <dependency>
             <groupId>com.github.binarywang</groupId>
             <artifactId>weixin-java-pay</artifactId>
-            <version>4.7.2.B</version>
+            <version>4.7.7-20250808.182223</version>
         </dependency>
         <dependency>
             <groupId>com.github.binarywang</groupId>

+ 18 - 0
fs-service/src/main/java/com/fs/course/dto/OrderOpenIdTransDTO.java

@@ -0,0 +1,18 @@
+package com.fs.course.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class OrderOpenIdTransDTO implements Serializable {
+    /**
+     * 用户微信openId
+     * **/
+    private String openId;
+
+    /**
+     * 交易单号
+     * **/
+    private String transactionId;
+}

+ 6 - 4
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -2475,13 +2475,15 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
     }
 
     @Override
-    public FsUserCourseVideoQVO selectFsUserCourseVideoByVideoIdVO(Long videoId,Long userId) {
+    public FsUserCourseVideoQVO selectFsUserCourseVideoByVideoIdVO(Long videoId, Long userId) {
         FsUserCourseVideoQVO fsUserCourseVideoQVO = new FsUserCourseVideoQVO();
-        FsUserCourseVideo courseVideo = fsUserCourseVideoMapper.selectFsUserCourseVideoByVideoIdAndUserId(videoId,userId);
+        FsUserCourseVideo courseVideo = fsUserCourseVideoMapper.selectFsUserCourseVideoByVideoIdAndUserId(videoId, userId);
 
-        BeanCopyUtils.copy(courseVideo,fsUserCourseVideoQVO);
+        if (courseVideo != null) {
+            org.springframework.beans.BeanUtils.copyProperties(courseVideo, fsUserCourseVideoQVO);
+        }
 
-        if (StringUtils.isNotEmpty(courseVideo.getQuestionBankId())){
+        if (courseVideo != null && StringUtils.isNotEmpty(courseVideo.getQuestionBankId())) {
             List<FsCourseQuestionBank> fsCourseQuestionBanks = courseQuestionBankMapper.selectFsCourseQuestionBankByIdVO(courseVideo.getQuestionBankId().split(","));
             fsUserCourseVideoQVO.setQuestionBankList(fsCourseQuestionBanks);
         }

+ 6 - 0
fs-service/src/main/java/com/fs/his/service/IFsStoreOrderService.java

@@ -20,6 +20,7 @@ import com.fs.his.dto.ExpressResultDTO;
 import com.fs.his.dto.StoreOrderExpressExportDTO;
 import com.fs.his.param.*;
 import com.fs.his.vo.*;
+import com.fs.huifuPay.domain.HuiFuResult;
 import org.springframework.transaction.annotation.Transactional;
 
 /**
@@ -260,4 +261,9 @@ public interface IFsStoreOrderService
     String importOrderStatusData(List<FsStoreOrderStatusExcelVO> list);
 
     Long selectFsStoreOrderListVOByErpAccountByExportCount(FsStoreOrderParam param);
+
+    /**
+     * 小程序汇付
+     * **/
+    R payMiniProgramConfirm(String orderCode, String payCode, HuiFuResult huiFuResult, String payType, Integer type);
 }

+ 113 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsStoreOrderServiceImpl.java

@@ -56,6 +56,7 @@ import com.fs.hisapi.param.CreateOrderParam;
 import com.fs.hisapi.param.RecipeDetailParam;
 import com.fs.hisapi.service.HisApiService;
 import com.fs.huifuPay.domain.HuiFuCreateOrder;
+import com.fs.huifuPay.domain.HuiFuResult;
 import com.fs.huifuPay.domain.HuifuCreateOrderResult;
 import com.fs.huifuPay.service.HuiFuService;
 import com.fs.im.dto.*;
@@ -3608,4 +3609,116 @@ public class FsStoreOrderServiceImpl implements IFsStoreOrderService {
         return fsStoreOrderMapper.selectFsStoreOrderListVOByErpAccountByExportCount(param);
     }
 
+
+    @Override
+    @Transactional(rollbackFor = Throwable.class, propagation = Propagation.REQUIRED)
+    public R payMiniProgramConfirm(String orderCode, String payCode, HuiFuResult huiFuResult, String payType, Integer type) {
+        String tradeNo=huiFuResult.getHf_seq_id();
+        try {
+            FsStoreOrderScrm order = null;
+            if (type.equals(1)) {
+                FsStorePaymentScrm storePayment = fsStorePaymentScrmMapper.selectFsStorePaymentByPaymentCode(payCode);
+                if (storePayment != null) {
+                    if (storePayment.getStatus().equals(0)) {
+                        log.info(payCode + "待支付");
+                        FsStorePaymentScrm paymentMap = new FsStorePaymentScrm();
+                        paymentMap.setPaymentId(storePayment.getPaymentId());
+                        paymentMap.setStatus(1);
+                        paymentMap.setPayTime(new Date());
+                        paymentMap.setTradeNo(tradeNo);
+                        paymentMap.setBankTransactionId(huiFuResult.getOut_trans_id());
+                        if (payType.equals(PayType.WECHAT_MINI_PROGRAM_PAYMENT.getCode())) {
+                            paymentMap.setPayTypeCode(PayType.WECHAT_MINI_PROGRAM_PAYMENT.name());
+                        } else if (payType.equals(PayType.ALIPAY_BARCODE_PAYMENT.getCode())) {
+                            paymentMap.setPayTypeCode(PayType.ALIPAY_BARCODE_PAYMENT.name());
+                        }
+                        if (storePayment.getPayMode().equals("yb")) {
+                            OrderQueryDTO orderQueryDTO = new OrderQueryDTO();
+                            orderQueryDTO.setUpOrderId(tradeNo);
+                            OrderResult orderResult = ybPayService.getOrder(orderQueryDTO);
+                            paymentMap.setBankSerialNo(orderResult.getBankOrderId());
+                            paymentMap.setBankTransactionId(orderResult.getBankTrxId());
+                        }
+                        fsStorePaymentScrmMapper.updateFsStorePayment(paymentMap);
+                        log.info(payCode + "已支付");
+                        order = fsStoreOrderScrmMapper.selectFsStoreOrderById(Long.parseLong(storePayment.getBusinessOrderId()));
+                    }
+                } else {
+                    log.info(payCode + "支付单号不存在");
+                    return R.error("支付单号不存在");
+                }
+            } else if (type.equals(2)) {
+                order = fsStoreOrderScrmMapper.selectFsStoreOrderByOrderCode(orderCode);
+            }
+//            if (order != null && !order.getStatus().equals(FsStoreOrderStatusEnum.STATUS_1.getValue())) {
+//                log.info(payCode + "订单号不为待支付回退");
+//                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+//                return R.error();
+//            }
+
+            //orderScrm迁移的表待支付状态码为:0
+            if (order != null && !order.getStatus().equals(0)) {//判断订单状态是否待支付
+                log.info(payCode + "订单号不为待支付回退");
+                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                return R.error();
+            }
+
+            if (order != null && !order.getPaid().equals(0)) {
+                log.info(payCode + "订单号支付不为待支付回退");
+                TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+                return R.error();
+            }
+            fsStoreOrderLogsService.create(order.getId(), FsStoreOrderLogEnum.PAY_ORDER_SUCCESS.getValue(),
+                    FsStoreOrderLogEnum.PAY_ORDER_SUCCESS.getDesc());
+            FsStoreOrderScrm storeOrder = new FsStoreOrderScrm();
+            storeOrder.setId(order.getId());
+            storeOrder.setPaid(1);
+//            storeOrder.setStatus(2);
+            storeOrder.setStatus(1);//代发货
+            storeOrder.setPrescribePrice(order.getTotalPrice());
+            SysConfig sysConfig = sysConfigMapper.selectConfigByConfigKey("his.store");
+            Map<String, Object> config = (Map<String, Object>) JSON.parse(sysConfig.getConfigValue());
+            Integer followRate = (Integer) config.get("followRate");
+
+
+            Long followDoctorId = fsPackageOrderMapper.selectFsPackageOrderByUserId(order.getUserId());
+            if (followDoctorId != null && followDoctorId > 0) {
+                storeOrder.setFollowDoctorId(followDoctorId);
+            } else {
+                storeOrder.setFollowDoctorId(iFsDoctorService.selectFollowDoctorDoctorByPackage());
+            }
+            if (order.getCycle() != null && order.getCycle() >= followRate) {
+                Calendar calendar = Calendar.getInstance();
+                calendar.setTime(new Date());
+                calendar.add(Calendar.DAY_OF_MONTH, followRate);
+                storeOrder.setFollowTime(calendar.getTime());
+            }
+            storeOrder.setPayTime(new Date());
+            fsStoreOrderScrmMapper.updateFsStoreOrder(storeOrder);
+            //更新优惠券状态
+            if (order.getCouponId() != null && order.getCouponId() > 0) {
+                FsUserCoupon userCoupon = userCouponService.selectFsUserCouponById(order.getCouponId());
+                if (userCoupon != null && userCoupon.getStatus().equals(0)) {
+                    userCoupon.setUseTime(new Date());
+                    userCoupon.setBusinessId(order.getId());
+                    userCoupon.setBusinessType(2);
+                    userCoupon.setStatus(1);
+                    userCouponService.updateFsUserCoupon(userCoupon);
+                }
+            }
+            return R.ok();
+        } catch (Exception e) {
+            log.info(payCode + "异常了" + e.getMessage());
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+            FsStorePaymentError err = new FsStorePaymentError();
+            err.setOrderNo(orderCode);
+            err.setOrderFlowNo(tradeNo);
+            err.setStatus(0);
+            err.setMsg(e.getMessage());
+            err.setCreateTime(DateUtils.getNowDate());
+            fsStorePaymentErrorMapper.insertFsStorePaymentError(err);
+            return R.error();
+        }
+    }
+
 }

+ 1 - 0
fs-service/src/main/java/com/fs/hisStore/config/StoreConfig.java

@@ -24,5 +24,6 @@ public class StoreConfig implements Serializable {
     private Integer auditSwitch; // 订单审核开关
     private Integer createSalesOrderType; // 订单改价方式 1 商品改价 2总价改价
     private Boolean isBrushOrders;//是否开启刷单按钮
+    private Boolean isWeChatShipping;//是否开启微信发货
 
 }

+ 192 - 1
fs-service/src/main/java/com/fs/hisStore/domain/FsStoreProductAttrValueScrm.java

@@ -83,8 +83,24 @@ public class FsStoreProductAttrValueScrm extends BaseEntity
     @Excel(name = "三级返佣")
     private BigDecimal brokerageThree;
 
+    /**
+     * 是否开启定金类型(0否,1是)
+     **/
+    private Long hasDepositFeatureType;
 
-    /** 需要多少积分兑换 */
+    /**
+     * 定金
+     **/
+    private BigDecimal depositAmount;
+
+    /**
+     * 代付金额
+     **/
+    private BigDecimal onBehalfPaymentAmount;
+
+    /**
+     * 需要多少积分兑换
+     */
     @Excel(name = "需要多少积分兑换")
     private Integer integral;
 
@@ -96,8 +112,183 @@ public class FsStoreProductAttrValueScrm extends BaseEntity
     @Excel(name = "医生佣金")
     private BigDecimal doctorBrokerage;
 
+    public Map<String, String> getDetail() {
+        return detail;
+    }
 
     /** 需要多少积分兑换 */
     @Excel(name = "需要多少积分兑换")
     private Integer giveIntegral;
+    public void setDetail(Map<String, String> detail) {
+        this.detail = detail;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setProductId(Long productId) {
+        this.productId = productId;
+    }
+
+    public Long getProductId() {
+        return productId;
+    }
+
+    public void setSku(String sku) {
+        this.sku = sku;
+    }
+
+    public String getSku() {
+        return sku;
+    }
+
+    public void setStock(Integer stock) {
+        this.stock = stock;
+    }
+
+    public Integer getStock() {
+        return stock;
+    }
+
+    public void setSales(Integer sales) {
+        this.sales = sales;
+    }
+
+    public Integer getSales() {
+        return sales;
+    }
+
+    public void setPrice(BigDecimal price) {
+        this.price = price;
+    }
+
+    public BigDecimal getPrice() {
+        return price;
+    }
+
+    public void setImage(String image) {
+        this.image = image;
+    }
+
+    public String getImage() {
+        return image;
+    }
+
+    public void setCost(BigDecimal cost) {
+        this.cost = cost;
+    }
+
+    public BigDecimal getCost() {
+        return cost;
+    }
+
+    public void setBarCode(String barCode) {
+        this.barCode = barCode;
+    }
+
+    public String getBarCode() {
+        return barCode;
+    }
+
+    public void setOtPrice(BigDecimal otPrice) {
+        this.otPrice = otPrice;
+    }
+
+    public BigDecimal getOtPrice() {
+        return otPrice;
+    }
+
+    public void setWeight(BigDecimal weight) {
+        this.weight = weight;
+    }
+
+    public BigDecimal getWeight() {
+        return weight;
+    }
+
+    public void setVolume(BigDecimal volume) {
+        this.volume = volume;
+    }
+
+    public BigDecimal getVolume() {
+        return volume;
+    }
+
+    public void setBrokerage(BigDecimal brokerage) {
+        this.brokerage = brokerage;
+    }
+
+    public BigDecimal getBrokerage() {
+        return brokerage;
+    }
+
+    public void setBrokerageTwo(BigDecimal brokerageTwo) {
+        this.brokerageTwo = brokerageTwo;
+    }
+
+    public BigDecimal getBrokerageTwo() {
+        return brokerageTwo;
+    }
+
+    public void setIntegral(Integer integral) {
+        this.integral = integral;
+    }
+
+    public Integer getIntegral() {
+        return integral;
+    }
+
+
+    public Long getHasDepositFeatureType() {
+        return hasDepositFeatureType;
+    }
+
+    public void setHasDepositFeatureType(Long hasDepositFeatureType) {
+        this.hasDepositFeatureType = hasDepositFeatureType;
+    }
+
+    public BigDecimal getDepositAmount() {
+        return depositAmount;
+    }
+
+    public void setDepositAmount(BigDecimal depositAmount) {
+        this.depositAmount = depositAmount;
+    }
+
+    public BigDecimal getOnBehalfPaymentAmount() {
+        return onBehalfPaymentAmount;
+    }
+
+    public void setOnBehalfPaymentAmount(BigDecimal onBehalfPaymentAmount) {
+        this.onBehalfPaymentAmount = onBehalfPaymentAmount;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+                .append("id", getId())
+                .append("productId", getProductId())
+                .append("sku", getSku())
+                .append("stock", getStock())
+                .append("sales", getSales())
+                .append("hasDepositFeatureType", getHasDepositFeatureType())
+                .append("depositAmount", getDepositAmount())
+                .append("onBehalfPaymentAmount", getOnBehalfPaymentAmount())
+                .append("price", getPrice())
+                .append("image", getImage())
+                .append("cost", getCost())
+                .append("barCode", getBarCode())
+                .append("otPrice", getOtPrice())
+                .append("weight", getWeight())
+                .append("volume", getVolume())
+                .append("brokerage", getBrokerage())
+                .append("brokerageTwo", getBrokerageTwo())
+                .append("integral", getIntegral())
+                .toString();
+    }
 }

+ 18 - 1
fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreOrderScrmMapper.java

@@ -1061,12 +1061,17 @@ public interface FsStoreOrderScrmMapper
 
     List<Map<String, Object>> selectFsStoreProductCountsByDept(Map<String, Object> map);
 
+    /**
+     * 批量更新订单状态
+     * @param list 订单更新数据表
+     * **/
+    void batchUpdateInOrderCode(@Param("list") List<FsOrderDeliveryNoteDTO> list);
+
     /**
      * 批量查询订单信息
      * @param ids 订单id
      * **/
     List<FsStoreOrderScrm> selectStoreOrderScrmInId(@Param("ids") Long[] ids);
-    void batchUpdateInOrderCode(@Param("dtoList") List<FsOrderDeliveryNoteDTO> dtoList);
 
     @Select({"<script> " +
             "select so.*,st.store_name,us.nick_name,us.phone,d.doctor_name,p.patient_name,p.prescribe_code,c.company_name,cu.nick_name company_user_name,cts.name as schedule_name,po.product_cost_price total_cost_money,po.inquiry_cost_price inquiry_money,po.total_cost_price,po.cost_discount_money inquiryDiscountMoney, total_money,p.diagnose " +
@@ -1217,4 +1222,16 @@ public interface FsStoreOrderScrmMapper
             "        where order_code = #{orderCode}"+
             "</script>"})
     int updateFsStoreOrderByOrderCode(FsStoreOrderScrm fsStoreOrder);
+
+    /**
+     * 获取订单用户信息
+     * @param list 订单号
+     * @return lsit
+     * **/
+    List<FsStoreOrderCodeOpenIdVo> selectOrderCodeOpenIdInOrderCode(@Param("list") List<String> list);
+
+    /**
+     * 获取未结算订单
+     * **/
+    List<FsStoreOrderScrm> getUnsettledOrder();
 }

+ 12 - 1
fs-service/src/main/java/com/fs/hisStore/service/IFsStoreOrderScrmService.java

@@ -280,6 +280,17 @@ public interface IFsStoreOrderScrmService
     /**
      * 批量导入更新微信订单发货状态
      * @param dtoList 订单数据
+     * @param appId 小程序ID
      * **/
-    R importDeliveryNoteExpress(List<FsOrderDeliveryNoteDTO> dtoList);
+    R importDeliveryNoteExpress(List<FsOrderDeliveryNoteDTO> dtoList,String appId);
+
+    /**
+     * 获取确认收货类型
+     * **/
+    R queryReceiptType();
+
+    /**
+     * 刷新订单结算状态
+     * **/
+    void refreshOrderSettlementStatus();
 }

+ 250 - 45
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java

@@ -1,5 +1,7 @@
 package com.fs.hisStore.service.impl;
 
+import cn.binarywang.wx.miniapp.bean.shop.request.shipping.*;
+import cn.binarywang.wx.miniapp.bean.shop.response.WxMaOrderShippingInfoGetListResponse;
 import cn.hutool.core.date.DateTime;
 import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.hutool.core.net.URLDecoder;
@@ -38,6 +40,7 @@ import com.fs.core.config.WxMaConfiguration;
 import com.fs.core.config.WxPayProperties;
 import com.fs.core.utils.OrderCodeUtils;
 import com.fs.course.dto.FsOrderDeliveryNoteDTO;
+import com.fs.course.dto.OrderOpenIdTransDTO;
 import com.fs.erp.domain.*;
 import com.fs.erp.dto.*;
 import com.fs.erp.mapper.FsErpFinishPushMapper;
@@ -105,7 +108,6 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import java.lang.reflect.Field;
 import java.math.BigDecimal;
 import java.nio.charset.Charset;
-import java.sql.SQLException;
 import java.sql.Timestamp;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -3569,54 +3571,252 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public R importDeliveryNoteExpress(List<FsOrderDeliveryNoteDTO> dtoList) {
+    public R importDeliveryNoteExpress(List<FsOrderDeliveryNoteDTO> dtoList, String appId) {
         try {
-            // 检查必填字段
-            List<FsOrderDeliveryNoteDTO> list=new LinkedList<>();
-            Map<String,String> expressDeliveryMap=buildExpressDeliveryMap();
-            for (FsOrderDeliveryNoteDTO dto : dtoList) {
+            StringBuilder builder = new StringBuilder();
+            //获取商城配置
+            String json = configService.selectConfigByKey("store.config");
+            StoreConfig config = JSONUtil.toBean(json, StoreConfig.class);
+
+            List<FsOrderDeliveryNoteDTO> successList = new ArrayList<>(dtoList.size());
+            //提前获取所有必要数据
+            Map<String, String> expressDeliveryMap = buildExpressDeliveryMap();
+            //提取所有有效订单号
+            List<String> orderCodeList = new ArrayList<>(dtoList.size());
+            for (int i = 0; i < dtoList.size(); i++) {
+                FsOrderDeliveryNoteDTO dto = dtoList.get(i);
                 if (StringUtils.isEmpty(dto.getOrderNumber())) {
-                    return R.error("导入失败,系统订单不能为空!");
-                } else if (StringUtils.isEmpty(dto.getDeliveryId())) {
-                    return R.error("导入失败,快递单号不能为空!");
-                } else if (StringUtils.isEmpty(dto.getDeliverySn())) {
-                    return R.error("导入失败,快递公司编号不能为空!");
+                    builder.append("数据第").append(i + 2).append("行系统订单为空!").append(System.lineSeparator());
+                } else {
+                    orderCodeList.add(dto.getOrderNumber());
+                }
+            }
+            //批量查询订单信息
+            if (orderCodeList.isEmpty()) {
+                return R.ok(builder.toString());
+            }
+            List<FsStoreOrderCodeOpenIdVo> orderCodeOpenIdVoList = fsStoreOrderMapper.selectOrderCodeOpenIdInOrderCode(orderCodeList);
+            Map<String, OrderOpenIdTransDTO> orderMap = new HashMap<>(orderCodeOpenIdVoList.size());
+            Map<String, List<FsStoreOrderCodeOpenIdVo>> orderDetailsMap = new HashMap<>(orderCodeOpenIdVoList.size());
+
+            for (FsStoreOrderCodeOpenIdVo vo : orderCodeOpenIdVoList) {
+                orderMap.computeIfAbsent(vo.getOrderCode(), k -> {
+                    OrderOpenIdTransDTO dto = new OrderOpenIdTransDTO();
+                    dto.setOpenId(vo.getOpenId());
+                    dto.setTransactionId(vo.getOutTransId());
+                    return dto;
+                });
+
+                orderDetailsMap
+                        .computeIfAbsent(vo.getOrderCode(), k -> new ArrayList<>())
+                        .add(vo);
+            }
+            final WxMaService wxService = WxMaConfiguration.getMaService(appId);
+            String uploadTime = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"))
+                    .format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
+
+            for (int i = 0; i < dtoList.size(); i++) {
+                FsOrderDeliveryNoteDTO dto = dtoList.get(i);
+                int rowNum = i + 2;
+                if (StringUtils.isEmpty(dto.getOrderNumber())) {
+                    continue;
+                }
+                if (StringUtils.isEmpty(dto.getDeliveryId())) {
+                    builder.append("数据第").append(rowNum).append("行快递单号为空!")
+                            .append(System.lineSeparator());
+                    continue;
+                }
+
+                if (StringUtils.isEmpty(dto.getDeliverySn())) {
+                    builder.append("数据第").append(rowNum).append("行快递公司编号为空!")
+                            .append(System.lineSeparator());
+                    continue;
                 }
                 if (dto.getDeliveryStatus() == null) {
                     dto.setDeliveryStatus(0);
                 }
-                if(ObjectUtil.isNotNull(dto.getDeliveryTime())){
+                if (ObjectUtil.isNotNull(dto.getDeliveryTime())) {
                     dto.setDeliveryTime(parseCstToDateOnlyString(dto.getDeliveryTime()));
                 }
-                if(ObjectUtil.isNotNull(dto.getDeliveryPayTime()) && !dto.getDeliveryPayTime().equals("")){
+
+                if (ObjectUtil.isNotNull(dto.getDeliveryPayTime()) &&
+                        !dto.getDeliveryPayTime().isEmpty()) {
                     dto.setDeliveryPayTime(parseCstToDateOnlyString(dto.getDeliveryPayTime()));
                 }
-                if(expressDeliveryMap.containsKey(dto.getDeliverySn())){
-                    dto.setDeliveryName(expressDeliveryMap.get(dto.getDeliverySn()));
+                // 验证快递公司
+                String deliveryName = expressDeliveryMap.get(dto.getDeliverySn());
+                if (deliveryName == null) {
+                    builder.append("数据第").append(rowNum).append("行订单号为")
+                            .append(dto.getOrderNumber()).append("物流编码异常")
+                            .append(System.lineSeparator());
+                    continue;
+                }
+                dto.setDeliveryName(deliveryName);
+
+                // 检查订单是否存在
+                String orderNumber = dto.getOrderNumber();
+                OrderOpenIdTransDTO orderInfo = orderMap.get(orderNumber);
+                if (orderInfo == null) {
+                    builder.append("数据第").append(rowNum).append("行订单号")
+                            .append(orderNumber).append("不存在").append(System.lineSeparator());
+                    continue;
+                }
+                //验证是否开启微信发货
+                if(config.getIsWeChatShipping() != null && config.getIsWeChatShipping()){
+                    // 上传物流信息到微信
+                    List<FsStoreOrderCodeOpenIdVo> orderDetails = orderDetailsMap.get(orderNumber);
+                    if (uploadShippingInfoToWechat(wxService, orderInfo, orderDetails, dto, uploadTime)) {
+                        successList.add(dto);
+                    } else {
+                        builder.append("数据第").append(rowNum).append("行订单号为")
+                                .append(orderNumber).append("上传微信失败").append(System.lineSeparator());
+                    }
                 }else {
-                    return R.error("导入失败,订单号为"+dto.getOrderNumber()+"物流编码异常,请核对后再导入!");
+                    successList.add(dto);
                 }
-                list.add(dto);
             }
-
-            //分批次处理
-            int batchSize = 500;
-            int total = list.size();
-            int batches = (total + batchSize - 1) / batchSize;
-            for (int i = 0; i < batches; i++) {
-                int start = i * batchSize;
-                int end = Math.min(start + batchSize, total);
-                List<FsOrderDeliveryNoteDTO> subList = list.subList(start, end);
-                fsStoreOrderMapper.batchUpdateInOrderCode(subList);
+            //批量更新数据
+            if (!successList.isEmpty()) {
+                batchUpdateDeliveryNotes(successList);
             }
-            return R.ok("导入成功,共更新 " + total + " 条记录");
+
+            return R.ok(builder.toString());
         } catch (Exception e) {
-            // 处理其他异常
-            log.error("导入物流信息异常", e);
+            log.error("导入发货单快递信息失败", e);
             return R.error("导入失败:" + e.getMessage());
         }
     }
 
+    @Override
+    public R queryReceiptType() {
+        //获取商城配置
+        String json = configService.selectConfigByKey("store.config");
+        StoreConfig config = JSONUtil.toBean(json, StoreConfig.class);
+        boolean receiptType=false;
+        if(config != null && config.getIsWeChatShipping() != null && config.getIsWeChatShipping()){
+            receiptType=config.getIsWeChatShipping();
+        }
+        return R.ok().put("data",receiptType);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Throwable.class, propagation = Propagation.REQUIRED)
+    public void  refreshOrderSettlementStatus(){
+        try {
+        //判断是否对接微信发货
+        String json = configService.selectConfigByKey("store.config");
+        StoreConfig config = JSONUtil.toBean(json, StoreConfig.class);
+        if(config != null && config.getIsWeChatShipping() != null && config.getIsWeChatShipping()){
+           //获取未结算订单
+            List<FsStoreOrderScrm> orderScrmList=fsStoreOrderMapper.getUnsettledOrder();
+            String payConfig=configService.selectConfigByKey("store.pay");
+            JSONObject js=JSON.parseObject(payConfig);
+            String appId=js.getString("hf");
+            if(ObjectUtil.isNotNull(appId) && !appId.equals("")){
+                //请求微信批量查询订单
+                final WxMaService wxService = WxMaConfiguration.getMaService(appId);
+                WxMaOrderShippingInfoGetListRequest request=new WxMaOrderShippingInfoGetListRequest();
+
+
+                WxMaOrderShippingInfoGetListResponse response=wxService.getWxMaOrderShippingService().getList(request);
+
+                logger.info("请求信息------------------------》{}",response);
+//                if(!orderScrmList.isEmpty()){
+//                    orderScrmList.forEach(order->{
+//                        if (order.getStatus() == OrderInfoEnum.STATUS_2.getValue()) {
+//                            order.setFinishTime(new Date());
+//                            order.setStatus(3);
+//                            fsStoreOrderMapper.updateFsStoreOrder(order);
+//                            orderStatusService.create(order.getId(), OrderLogEnum.FINISH_ORDER.getValue(),
+//                                    OrderLogEnum.FINISH_ORDER.getDesc());
+//                            //写入公司余额 条件是只有全款订单才分,非全款后台导入
+//                            if (order.getCompanyId() != null && order.getCompanyId() > 0 && order.getPayDelivery().compareTo(new BigDecimal(0)) == 0) {
+//                                if (order.getTuiMoneyStatus() == null || order.getTuiMoneyStatus() != 1) {
+//                                    companyService.addCompanyMoney(order);
+//                                }
+//                            }
+//
+//                            FsErpConfig erpConfig = configUtil.getErpConfig();
+//                            Integer erpType = erpConfig.getErpType();
+//                            Integer erpOpen = erpConfig.getErpOpen();
+//                            if (erpOpen != null && erpOpen == 1) {
+//                                if (erpType != null && erpType == 2) {
+//                                    // 如果是物流代收 或者 货到付款
+//                                    if ("2".equals(order.getPayType()) || "3".equals(order.getPayType())) {
+//                                        // 已结算
+//                                        if ("1".equals(order.getDeliveryPayStatus())) {
+//                                            FsErpFinishPush fsErpFinishPush = new FsErpFinishPush();
+//                                            fsErpFinishPush.setOrderId(order.getId());
+//                                            fsErpFinishPush.setTaskStatus(0);
+//                                            fsErpFinishPush.setRetryCount(0);
+//                                            fsErpFinishPush.setCreateTime(new Date());
+//                                            fsErpFinishPushMapper.insert(fsErpFinishPush);
+//                                        }
+//                                    }
+//                                }
+//                            }
+//                        }
+//                    });
+//                }
+            }
+        }
+        }catch (Exception e){
+            e.getStackTrace();
+        }
+    }
+
+    private boolean uploadShippingInfoToWechat(WxMaService wxService,
+                                               OrderOpenIdTransDTO orderInfo,
+                                               List<FsStoreOrderCodeOpenIdVo> orderDetails,
+                                               FsOrderDeliveryNoteDTO dto,
+                                               String uploadTime) {
+        try {
+            WxMaOrderShippingInfoUploadRequest request = new WxMaOrderShippingInfoUploadRequest();
+            OrderKeyBean orderKeyBean = new OrderKeyBean();
+            orderKeyBean.setOrderNumberType(2);
+            orderKeyBean.setTransactionId(orderInfo.getTransactionId());
+            request.setOrderKey(orderKeyBean);
+            request.setDeliveryMode(1);
+            request.setLogisticsType(1);
+            List<ShippingListBean> shippingList = new ArrayList<>(orderDetails.size());
+            for (FsStoreOrderCodeOpenIdVo detail : orderDetails) {
+                ShippingListBean shippingListBean = new ShippingListBean();
+                shippingListBean.setTrackingNo(dto.getDeliveryId());
+                shippingListBean.setExpressCompany(dto.getDeliverySn());
+                JSONObject js = JSON.parseObject(detail.getJsonInfo());
+                shippingListBean.setItemDesc(js.getString("productName"));
+                ContactBean contactBean = new ContactBean();
+                contactBean.setReceiverContact(detail.getPhone());
+                shippingListBean.setContact(contactBean);
+                shippingList.add(shippingListBean);
+            }
+            request.setShippingList(shippingList);
+            request.setUploadTime(uploadTime);
+            // 设置支付者信息
+            PayerBean payerBean = new PayerBean();
+            payerBean.setOpenid(orderInfo.getOpenId());
+            request.setPayer(payerBean);
+
+            // 上传物流信息
+            return wxService.getWxMaOrderShippingService().upload(request).getErrCode() == 0;
+        } catch (Exception e) {
+            log.error("上传物流信息到微信失败,订单号: {}", dto.getOrderNumber(), e);
+            return false;
+        }
+    }
+
+    private void batchUpdateDeliveryNotes(List<FsOrderDeliveryNoteDTO> list) {
+        int batchSize = 500;
+        int total = list.size();
+        int batches = (total + batchSize - 1) / batchSize;
+        for (int i = 0; i < batches; i++) {
+            int start = i * batchSize;
+            int end = Math.min(start + batchSize, total);
+            List<FsOrderDeliveryNoteDTO> subList = list.subList(start, end);
+            fsStoreOrderMapper.batchUpdateInOrderCode(subList);
+        }
+    }
+
     private static final DateTimeFormatter CST_FORMATTER = DateTimeFormatter
             .ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US)
             .withZone(ZoneId.of("Asia/Shanghai"));
@@ -3624,34 +3824,39 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
     private static final DateTimeFormatter STANDARD_FORMATTER = DateTimeFormatter
             .ofPattern("yyyy-MM-dd HH:mm:ss");
 
+    private static final DateTimeFormatter DATE_ONLY_FORMATTER = DateTimeFormatter
+            .ofPattern("yyyy-MM-dd");
+
     public static LocalDateTime parseCstToLocalDateTime(String cstDateStr) {
-        if (cstDateStr == null || cstDateStr.trim().isEmpty()) {
+        if (StringUtils.isEmpty(cstDateStr)) {
             return null;
         }
 
         try {
-            // 解析为带时区的日期时间
-            ZonedDateTime zonedDateTime = ZonedDateTime.parse(cstDateStr, CST_FORMATTER);
-            // 转换为本地日期时间(忽略时区,仅保留年月日时分秒)
-            return zonedDateTime.toLocalDateTime();
+            return ZonedDateTime.parse(cstDateStr, CST_FORMATTER).toLocalDateTime();
         } catch (DateTimeParseException e) {
-            System.err.println("日期解析失败: " + e.getMessage());
+            log.warn("日期解析失败: {}", cstDateStr, e);
             return null;
         }
     }
+
     public static String parseCstToDateOnlyString(String cstDateStr) {
         LocalDateTime dateTime = parseCstToLocalDateTime(cstDateStr);
-        return dateTime != null ? dateTime.format(DateTimeFormatter
-                .ofPattern("yyyy-MM-dd")) : null;
+        return dateTime != null ? dateTime.format(DATE_ONLY_FORMATTER) : null;
     }
+    private static final Map<String, String> EXPRESS_DELIVERY_MAP = createExpressDeliveryMap();
 
-    public Map<String,String> buildExpressDeliveryMap(){
-        Map<String,String> map=new HashMap<>();
-        map.put("SF","顺丰");
-        map.put("EMS","邮政");
-        map.put("ZTO","中通");
-        map.put("JD","京东");
-        map.put("DBL","德邦");
+    private static Map<String, String> createExpressDeliveryMap() {
+        Map<String, String> map = new HashMap<>();
+        map.put("SF", "顺丰");
+        map.put("EMS", "邮政");
+        map.put("ZTO", "中通");
+        map.put("JD", "京东");
+        map.put("DBL", "德邦");
         return map;
     }
+
+    public Map<String, String> buildExpressDeliveryMap() {
+        return EXPRESS_DELIVERY_MAP;
+    }
 }

+ 41 - 0
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreProductScrmServiceImpl.java

@@ -248,6 +248,10 @@ public class FsStoreProductScrmServiceImpl implements IFsStoreProductScrmService
             valueMap.put("detail", detail);
             valueMap.put("sku", "");
             valueMap.put("image", "");
+            valueMap.put("hasDepositFeature", false);//是否开启定金
+            valueMap.put("hasDepositFeatureType", 0);//开启类型
+            valueMap.put("depositAmount", 0);//定金金额
+            valueMap.put("onBehalfPaymentAmount", 0);//代付金额
             valueMap.put("price", 0);
             valueMap.put("cost", 0);
             valueMap.put("otPrice", 0);
@@ -270,6 +274,10 @@ public class FsStoreProductScrmServiceImpl implements IFsStoreProductScrmService
                     valueMap.put("id",values.get(0).getId());
                     valueMap.put("sku",values.get(0).getSku());
                     valueMap.put("image", values.get(0).getImage());
+                    valueMap.put("hasDepositFeature", values.get(0).getHasDepositFeatureType() == 1?true:false);//是否开启定金
+                    valueMap.put("hasDepositFeatureType", values.get(0).getHasDepositFeatureType());//开启类型
+                    valueMap.put("depositAmount", values.get(0).getDepositAmount());//定金金额
+                    valueMap.put("onBehalfPaymentAmount", values.get(0).getOnBehalfPaymentAmount());//代付金额
                     valueMap.put("price", values.get(0).getPrice());
                     valueMap.put("cost", values.get(0).getCost());
                     valueMap.put("otPrice", values.get(0).getOtPrice());
@@ -352,6 +360,20 @@ public class FsStoreProductScrmServiceImpl implements IFsStoreProductScrmService
 
 
     private void addProductAttr(Long productId, List<ProductArrtDTO> items, List<FsStoreProductAttrValueScrm> values){
+        //新增验证开是否开启了定金
+        FsStoreProductAttrValueScrm checkAttrValue=values.stream().filter(p->
+                ((p.getHasDepositFeatureType() != null && p.getHasDepositFeatureType().equals(1L) && p.getDepositAmount() == null || p.getHasDepositFeatureType() != null && p.getHasDepositFeatureType().equals(1L) && p.getOnBehalfPaymentAmount() == null))||
+                (p.getHasDepositFeatureType() != null && p.getHasDepositFeatureType().equals(1L) && p.getDepositAmount().add(p.getOnBehalfPaymentAmount()).compareTo(p.getPrice()) != 0)).findFirst().orElse(null);
+        if(checkAttrValue != null){
+            if(checkAttrValue.getDepositAmount() == null){
+                throw new ServiceException("新增商品失败,商品编码为:"+checkAttrValue.getBarCode()+"已开启定金,定金金额不能为空!");
+            }else if(checkAttrValue.getOnBehalfPaymentAmount() == null){
+                throw new ServiceException("新增商品失败,商品编码为:"+checkAttrValue.getBarCode()+"已开启定金,代付金额不能为空!");
+            }else{
+                throw new ServiceException("新增商品失败,商品编码为:"+checkAttrValue.getBarCode()+"已开启定金,商品定金和代付总和要与售价相等!");
+            }
+        }
+
         //清空attr
         fsStoreProductAttrMapper.clear(productId);
         //清空values
@@ -478,6 +500,25 @@ public class FsStoreProductScrmServiceImpl implements IFsStoreProductScrmService
         headerMap.put("minWidth", 80);
         headerMapList.add(ObjectUtil.clone(headerMap));
 
+        headerMap.put("title", "是否开启定金");
+        headerMap.put("slot", "hasDepositFeature");
+        headerMap.put("align", align);
+        headerMap.put("minWidth", 120);
+        headerMapList.add(ObjectUtil.clone(headerMap));
+
+        headerMap.put("title", "定金金额");
+        headerMap.put("slot", "depositAmount");
+        headerMap.put("align", align);
+        headerMap.put("minWidth", 120);
+        headerMapList.add(ObjectUtil.clone(headerMap));
+
+        headerMap.put("title", "代付金额");
+        headerMap.put("slot", "onBehalfPaymentAmount");
+        headerMap.put("align", align);
+        headerMap.put("minWidth", 120);
+        headerMapList.add(ObjectUtil.clone(headerMap));
+
+
         headerMap.put("title", "售价");
         headerMap.put("slot", "price");
         headerMap.put("align", align);

+ 32 - 0
fs-service/src/main/java/com/fs/hisStore/vo/FsStoreOrderCodeOpenIdVo.java

@@ -0,0 +1,32 @@
+package com.fs.hisStore.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+@Data
+public class FsStoreOrderCodeOpenIdVo implements Serializable {
+    /**
+     * 订单编码
+     * **/
+    private String orderCode;
+
+    /**
+     * 用户openId
+     * **/
+    private String openId;
+
+    /**
+     * 用户手机号
+     * **/
+    private String phone;
+
+    /**
+     * 商品详情信息
+     * **/
+    private String jsonInfo;
+
+    /**
+     * 交易单号
+     * **/
+    private String outTransId;
+}

+ 21 - 0
fs-service/src/main/resources/mapper/hisStore/FsStoreOrderScrmMapper.xml

@@ -971,4 +971,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{item}
     </foreach>
     </select>
+
+    <select id="selectOrderCodeOpenIdInOrderCode" resultType="com.fs.hisStore.vo.FsStoreOrderCodeOpenIdVo">
+        SELECT
+        os.order_code,
+        fu.phone,
+        fu.ma_open_id openId,
+        ois.json_info,
+        sps.bank_transaction_id outTransId
+        FROM
+        fs_store_order_scrm os
+        INNER JOIN fs_user fu ON os.user_id = fu.user_id
+        INNER JOIN fs_store_order_item_scrm ois ON ois.order_id = os.id
+        INNER JOIN fs_store_payment_scrm sps ON os.id=sps.order_id
+                                                  WHERE os.order_code IN <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+        #{item}
+    </foreach>
+    </select>
+
+    <select id="getUnsettledOrder" resultType="com.fs.hisStore.domain.FsStoreOrderScrm">
+
+    </select>
 </mapper>

+ 10 - 1
fs-service/src/main/resources/mapper/hisStore/FsStoreProductAttrValueScrmMapper.xml

@@ -26,7 +26,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </resultMap>
 
     <sql id="selectFsStoreProductAttrValueVo">
-        select id, product_id, sku, stock, sales, price, image, cost,agent_price, bar_code,group_bar_code, ot_price, weight, volume, brokerage, brokerage_two,brokerage_three, integral from fs_store_product_attr_value_scrm
+        select id, product_id, sku, stock, sales, price, image, cost,agent_price, bar_code,group_bar_code, ot_price, weight, volume, brokerage, brokerage_two,brokerage_three, integral,has_deposit_feature_type,deposit_amount,on_behalf_payment_amount from fs_store_product_attr_value_scrm
     </sql>
 
     <select id="selectFsStoreProductAttrValueList" parameterType="FsStoreProductAttrValueScrm" resultMap="FsStoreProductAttrValueResult">
@@ -76,6 +76,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="brokerageTwo != null">brokerage_two,</if>
             <if test="brokerageThree != null">brokerage_three,</if>
             <if test="integral != null">integral,</if>
+            <if test="hasDepositFeatureType != null">has_deposit_feature_type,</if>
+            <if test="depositAmount != null">deposit_amount,</if>
+            <if test="onBehalfPaymentAmount != null">on_behalf_payment_amount,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="productId != null">#{productId},</if>
@@ -95,6 +98,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="brokerageTwo != null">#{brokerageTwo},</if>
             <if test="brokerageThree != null">#{brokerageThree},</if>
             <if test="integral != null">#{integral},</if>
+            <if test="hasDepositFeatureType != null">#{hasDepositFeatureType},</if>
+            <if test="depositAmount != null">#{depositAmount},</if>
+            <if test="onBehalfPaymentAmount != null">#{onBehalfPaymentAmount},</if>
          </trim>
     </insert>
 
@@ -118,6 +124,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="brokerageTwo != null">brokerage_two = #{brokerageTwo},</if>
             <if test="brokerageThree != null">brokerage_three = #{brokerageThree},</if>
             <if test="integral != null">integral = #{integral},</if>
+            <if test="hasDepositFeatureType != null">has_deposit_feature_type = #{hasDepositFeatureType},</if>
+            <if test="depositAmount != null">deposit_amount = #{depositAmount},</if>
+            <if test="onBehalfPaymentAmount != null">on_behalf_payment_amount = #{onBehalfPaymentAmount},</if>
         </trim>
         where id = #{id}
     </update>

+ 1 - 1
fs-user-app/src/main/java/com/fs/app/controller/HuifuPayController.java

@@ -47,7 +47,7 @@ public class HuifuPayController {
                     inquiryOrderService.payConfirm("",orderId[1],huiFuResult.getHf_seq_id(),"",1);
                     break;
                 case "store":
-                    storeOrderService.payConfirm("",orderId[1],huiFuResult.getHf_seq_id(),"",1);
+                    storeOrderService.payMiniProgramConfirm("",orderId[1],huiFuResult,"",1);
                     break;
                 case "package":
                     packageOrderService.payConfirm("",orderId[1],huiFuResult.getHf_seq_id(),"",1);

+ 6 - 1
fs-user-app/src/main/java/com/fs/app/controller/store/StoreOrderScrmController.java

@@ -912,5 +912,10 @@ public class StoreOrderScrmController extends AppBaseController {
         return R.ok().put("count0",count0).put("count1",count1).put("count2",count2).put("afterSalesCount",afterSalesCount);
     }
 
-
+    @Login
+    @ApiOperation("获取确认收货类型")
+    @GetMapping("/queryReceiptType")
+    public R queryReceiptType(){
+        return orderService.queryReceiptType();
+    }
 }