浏览代码

1、支付宝退款调整兼容

yfh 1 月之前
父节点
当前提交
f3e504578d
共有 21 个文件被更改,包括 194 次插入72 次删除
  1. 14 2
      fs-company-app/src/main/java/com/fs/app/controller/FsUserController.java
  2. 1 5
      fs-company-app/src/main/java/com/fs/app/controller/FsUserCourseVideoController.java
  3. 1 1
      fs-company-app/src/main/java/com/fs/app/param/FsUserTagUpdateParam.java
  4. 2 2
      fs-service/src/main/java/com/fs/app/service/impl/AppPayServiceImpl.java
  5. 7 0
      fs-service/src/main/java/com/fs/course/mapper/FsUserCompanyUserMapper.java
  6. 8 0
      fs-service/src/main/java/com/fs/course/service/IFsUserCompanyUserService.java
  7. 7 0
      fs-service/src/main/java/com/fs/course/service/impl/FsUserCompanyUserServiceImpl.java
  8. 11 0
      fs-service/src/main/java/com/fs/his/mapper/MerchantAppConfigMapper.java
  9. 1 0
      fs-service/src/main/java/com/fs/his/param/FsIntegralOrderDoPayParam.java
  10. 13 3
      fs-service/src/main/java/com/fs/his/service/impl/FsUserProjectTagServiceImpl.java
  11. 1 1
      fs-service/src/main/java/com/fs/hisStore/mapper/FsStorePaymentScrmMapper.java
  12. 32 23
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java
  13. 3 2
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStorePaymentScrmServiceImpl.java
  14. 7 1
      fs-service/src/main/java/com/fs/huifuPay/service/impl/HuiFuServiceImpl.java
  15. 1 1
      fs-service/src/main/java/com/fs/live/mapper/LiveOrderPaymentMapper.java
  16. 34 23
      fs-service/src/main/java/com/fs/live/service/impl/LiveOrderServiceImpl.java
  17. 8 0
      fs-service/src/main/java/com/fs/store/param/h5/FsUserPageListParam.java
  18. 6 7
      fs-service/src/main/resources/application-druid-zkzh-test.yml
  19. 11 0
      fs-service/src/main/resources/mapper/MerchantAppConfigMapper.xml
  20. 25 0
      fs-service/src/main/resources/mapper/course/FsUserCompanyUserMapper.xml
  21. 1 1
      fs-user-app/src/main/java/com/fs/app/controller/live/LiveOrderController.java

+ 14 - 2
fs-company-app/src/main/java/com/fs/app/controller/FsUserController.java

@@ -1,6 +1,7 @@
 package com.fs.app.controller;
 
 
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.fs.app.annotation.Login;
@@ -40,6 +41,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -296,9 +298,19 @@ public class FsUserController extends AppBaseController {
     @Login
     @ApiOperation("修改用户标签")
     @PostMapping("/changeUserTags")
-    public ResponseResult<Object> changeUserTags(@Valid @RequestBody FsUserTagUpdateParam param) {
+    public ResponseResult<Object> changeUserTags(@Valid @RequestBody FsUserPageListParam param) {
         log.debug("修改用户标签 param:{}", JSON.toJSONString(param));
-        userProjectTagService.addUserProjectTag(param.getUserCompanyUserIds(), param.getTagIds());
+        if (param.getCompanyUserId() == null) {
+            param.setCompanyUserId(getUserId());
+        }
+        if (CollectionUtils.isEmpty(param.getUserCompanyUserIds())) {
+            List<Long> list = userCompanyUserService.selectIdListByCompanyUserId(param);
+            param.setUserCompanyUserIds(list);
+        }
+        List<Long> longList = Arrays.stream(param.getTagIds())
+                .map(Long::parseLong)
+                .collect(Collectors.toList());
+        userProjectTagService.addUserProjectTag(param.getUserCompanyUserIds(), longList);
         return ResponseResult.ok();
     }
 

+ 1 - 5
fs-company-app/src/main/java/com/fs/app/controller/FsUserCourseVideoController.java

@@ -114,11 +114,7 @@ public class FsUserCourseVideoController extends AppBaseController {
         CompanyMiniapp params =  new CompanyMiniapp();
         params.setCompanyId(getCompanyId());
         List<CompanyMiniapp> miniApps = companyMiniappService.selectCompanyMiniappList(params);
-        if (miniApps != null) {
-            appId = miniApps.stream().min(Comparator.comparing(CompanyMiniapp::getSortNum)).map(CompanyMiniapp::getAppId).orElse(appId);
-        }
-
-        return R.ok().put("data", appId);
+        return R.ok().put("data", miniApps);
     }
     @Login
     @ApiOperation("课程视频详情")

+ 1 - 1
fs-company-app/src/main/java/com/fs/app/param/FsUserTagUpdateParam.java

@@ -12,7 +12,7 @@ public class FsUserTagUpdateParam {
      * 用户ID
      */
     @ApiModelProperty("用户项目ID集合")
-    @NotEmpty(message = "用户项目ID不能为空")
+//    @NotEmpty(message = "用户项目ID不能为空")
     private List<Long> userCompanyUserIds;
     /**
      * 标签ID

+ 2 - 2
fs-service/src/main/java/com/fs/app/service/impl/AppPayServiceImpl.java

@@ -49,10 +49,10 @@ public class AppPayServiceImpl implements AppPayService {
                 inquiryOrderService.payConfirm("", tradeNoArr[1],"","",1,result.getTransactionId(),"");
                 break;
             case "store":
-                storeOrderService.payConfirm(1, Long.valueOf(tradeNoArr[1]),"","",result.getTransactionId(),"");
+                storeOrderService.payConfirm(1, null,tradeNoArr[1],"",result.getTransactionId(),"");
 
             case "live":
-                liveOrderService.payConfirm(1, Long.valueOf(tradeNoArr[1]),"","",result.getTransactionId(),"");
+                liveOrderService.payConfirm(1, null,tradeNoArr[1],"",result.getTransactionId(),"");
                 break;
             case "package":
                 packageOrderService.payConfirm("", tradeNoArr[1],"","",1,result.getTransactionId(),"");

+ 7 - 0
fs-service/src/main/java/com/fs/course/mapper/FsUserCompanyUserMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fs.course.domain.FsUserCompanyUser;
 import com.fs.qw.dto.FsUserTransferParamDTO;
 import com.fs.qw.dto.UserProjectDTO;
+import com.fs.store.param.h5.FsUserPageListParam;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
@@ -104,4 +105,10 @@ public interface FsUserCompanyUserMapper extends BaseMapper<FsUserCompanyUser>{
      */
     int batchDeleteByIds(@Param("userIds") List<Long> userIds);
 
+    /**
+     * 根据用户id查询用户id
+     * @param companyUserId
+     * @return
+     */
+    List<Long> selectIdListByCompanyUserId(FsUserPageListParam param);
 }

+ 8 - 0
fs-service/src/main/java/com/fs/course/service/IFsUserCompanyUserService.java

@@ -3,6 +3,7 @@ package com.fs.course.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.course.domain.FsUserCompanyUser;
 import com.fs.qw.dto.UserProjectDTO;
+import com.fs.store.param.h5.FsUserPageListParam;
 
 import java.util.List;
 import java.util.Map;
@@ -136,4 +137,11 @@ public interface IFsUserCompanyUserService extends IService<FsUserCompanyUser>{
      * @return
      */
     Integer batchUnbind(List<Long> userIds);
+
+    /**
+     * 根据销售id查询用户id
+     * @param companyUserId
+     * @return
+     */
+    List<Long> selectIdListByCompanyUserId(FsUserPageListParam param);
 }

+ 7 - 0
fs-service/src/main/java/com/fs/course/service/impl/FsUserCompanyUserServiceImpl.java

@@ -8,9 +8,11 @@ import com.fs.course.domain.FsUserCompanyUser;
 import com.fs.course.mapper.FsUserCompanyUserMapper;
 import com.fs.course.service.IFsUserCompanyUserService;
 import com.fs.qw.dto.UserProjectDTO;
+import com.fs.store.param.h5.FsUserPageListParam;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -228,4 +230,9 @@ public class FsUserCompanyUserServiceImpl extends ServiceImpl<FsUserCompanyUserM
     public Integer batchUnbind(List<Long> userIds) {
         return baseMapper.batchDeleteByIds(userIds);
     }
+
+    @Override
+    public List<Long> selectIdListByCompanyUserId(FsUserPageListParam param) {
+        return baseMapper.selectIdListByCompanyUserId(param);
+    }
 }

+ 11 - 0
fs-service/src/main/java/com/fs/his/mapper/MerchantAppConfigMapper.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fs.common.annotation.DataSource;
 import com.fs.common.enums.DataSourceType;
 import com.fs.his.domain.MerchantAppConfig;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 商户应用配置Mapper接口
@@ -74,4 +75,14 @@ public interface MerchantAppConfigMapper extends BaseMapper<MerchantAppConfig>{
      * @return 结果
      */
     int deleteMerchantAppConfigByIds(Long[] ids);
+
+
+    /**
+     * 根据appId和支付类型查询商户信息
+     *
+     * @param appId
+     * @param payType
+     * @return
+     */
+    MerchantAppConfig selectMerchantAppConfigByAppId(@Param("appId") String appId, @Param("payType") String payType);
 }

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

@@ -10,6 +10,7 @@ public class FsIntegralOrderDoPayParam {
     private Long orderId;
 
     private Long userId;
+    private String appId;
 
     /**
      * 商品类型

+ 13 - 3
fs-service/src/main/java/com/fs/his/service/impl/FsUserProjectTagServiceImpl.java

@@ -10,6 +10,7 @@ import com.fs.his.mapper.FsUserProjectTagMapper;
 import com.fs.his.service.IFsUserProjectTagService;
 import com.fs.store.param.h5.TagListParam;
 import com.fs.store.vo.h5.CompanyUserTagListVO;
+import org.apache.commons.collections4.ListUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -60,9 +61,7 @@ public class FsUserProjectTagServiceImpl extends ServiceImpl<FsUserProjectTagMap
     @Override
     public void addUserProjectTag(List<Long> ids, List<Long> tagIds) {
         // 删除原有标签
-        LambdaUpdateWrapper<FsUserProjectTag> deleteWrapper = Wrappers.<FsUserProjectTag>lambdaUpdate()
-                .in(FsUserProjectTag::getUserCompanyUserId, ids);
-        baseMapper.delete(deleteWrapper);
+        batchDeleteByUserIds(ids);
 
         if (tagIds.isEmpty()) {
             return;
@@ -82,7 +81,18 @@ public class FsUserProjectTagServiceImpl extends ServiceImpl<FsUserProjectTagMap
             saveBatch(tagList);
         }
     }
+    public void batchDeleteByUserIds(List<Long> ids) {
+        // 使用 ListUtils 自动分批
+        List<List<Long>> batches = ListUtils.partition(ids, 500);
+
+        for (List<Long> batch : batches) {
+            LambdaUpdateWrapper<FsUserProjectTag> deleteWrapper = Wrappers.<FsUserProjectTag>lambdaUpdate()
+                    .in(FsUserProjectTag::getUserCompanyUserId, batch);
 
+            baseMapper.delete(deleteWrapper);
+
+        }
+    }
     /**
      * 查询用户项目标签列表
      * @param param     参数

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

@@ -293,7 +293,7 @@ public interface FsStorePaymentScrmMapper
             "</script>"})
     List<FsStorePaymentVO> selectFsMyStorePaymentListQueryVO(@Param("maps") FsStorePaymentParam fsStorePayment);
 
-    @Select("select * from fs_store_payment_scrm where business_type=2 and order_id=#{orderId} and status=1   ")
+    @Select("select * from fs_store_payment_scrm where (business_type=2 or business_type=8)  and order_id=#{orderId} and status=1   ")
     List<FsStorePaymentScrm> selectFsStorePaymentByOrderId(Long orderId);
 
 

+ 32 - 23
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java

@@ -158,6 +158,7 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import javax.annotation.PostConstruct;
 import java.lang.reflect.Field;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.nio.charset.Charset;
 import java.sql.Timestamp;
 import java.text.ParseException;
@@ -2519,19 +2520,21 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
             //将钱退还给用户
             List<FsStorePaymentScrm> payments = paymentService.selectFsStorePaymentByOrderId(order.getId());
             if (payments != null) {
+                SysConfig sysConfig = configService.selectConfigByConfigKey("app.config");
+                AppConfig config = new Gson().fromJson(sysConfig.getConfigValue(), AppConfig.class);
+
                 for (FsStorePaymentScrm payment : payments) {
+                    if (order.getPayType().equals("99")){
+                        payment.setAppId(config.getAppId());
+                    }
                     if (StringUtils.isBlank(payment.getAppId())) {
                         throw new IllegalArgumentException("appId不能为空");
                     }
-                    FsCoursePlaySourceConfig fsCoursePlaySourceConfig = fsCoursePlaySourceConfigMapper.selectCoursePlaySourceConfigByAppId(payment.getAppId());
-                    if (fsCoursePlaySourceConfig == null) {
-                        throw new CustomException("未找到appId对应的小程序配置: " + payment.getAppId());
-                    }
-                    Long merchantConfigId = fsCoursePlaySourceConfig.getMerchantConfigId();
-                    if (merchantConfigId == null || merchantConfigId <= 0) {
-                        throw new CustomException("小程序没有配置商户信息");
+                    String payType = payment.getPayMode();
+                    if ("wxApp".equals(payment.getPayMode())){
+                        payType = "wx";
                     }
-                    MerchantAppConfig merchantAppConfig = merchantAppConfigMapper.selectMerchantAppConfigById(fsCoursePlaySourceConfig.getMerchantConfigId());
+                    MerchantAppConfig merchantAppConfig = merchantAppConfigMapper.selectMerchantAppConfigByAppId(payment.getAppId(),payType);
                     FsPayConfig fsPayConfig = JSON.parseObject(merchantAppConfig.getDataJson(), FsPayConfig.class);
 
                     if (payment.getPayMode() == null || payment.getPayMode().equals("wx")) {
@@ -2566,19 +2569,16 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
                         }
                     } else if (payment.getPayMode() != null && payment.getPayMode().equals("hf")) {
                         String huifuId="";
-                        FsHfpayConfigMapper fsHfpayConfigMapper = SpringUtils.getBean(FsHfpayConfigMapper.class);
                         if (payment.getAppId() != null) {
-                            FsHfpayConfig fsHfpayConfig = fsHfpayConfigMapper.selectByAppId(payment.getAppId());
-                            if (fsHfpayConfig == null){
+                            if (merchantAppConfig == null){
                                 huifuId = fsPayConfig.getHuifuId();
                             }else {
-                                huifuId = fsHfpayConfig.getHuifuId();
+                                huifuId = merchantAppConfig.getMerchantId();
                             }
                         } else {
                             if (("益善缘".equals(cloudHostProper.getCompanyName()))) {
 
-                                FsHfpayConfig fsPayConfig2 = fsHfpayConfigMapper.selectByAppId("wx0d1a3dd485268521");
-                                huifuId = fsPayConfig2.getHuifuId();
+                                huifuId = merchantAppConfig.getMerchantId();
                             }else {
                                 huifuId=fsPayConfig.getHuifuId();
                             }
@@ -2588,13 +2588,22 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
                         V2TradePaymentScanpayRefundRequest request = new V2TradePaymentScanpayRefundRequest();
                         request.setOrgHfSeqId(payment.getTradeNo());
                         request.setHuifuId(huifuId);
-                        request.setOrdAmt(payment.getPayMoney().toString());
+                        Map<String, Object> extendInfoMap = new HashMap<>();
+                        if (order.getPayType().equals("99")){
+                            request.setOrdAmt(payment.getPayMoney().setScale(2, RoundingMode.DOWN).toString());
+                            extendInfoMap.put("org_req_seq_id", "store-"+payment.getPayCode());
+                        }else {
+                            request.setOrdAmt(payment.getPayMoney().toString());
+                            extendInfoMap.put("org_party_order_id", payment.getBankSerialNo());
+                            request.setAppId(payment.getAppId());
+                        }
+
                         request.setOrgReqDate(new SimpleDateFormat("yyyyMMdd").format(payment.getCreateTime()));
                         request.setReqSeqId("refund-" + payment.getPayCode());
-                        Map<String, Object> extendInfoMap = new HashMap<>();
-                        extendInfoMap.put("org_party_order_id", payment.getBankSerialNo());
+
+
+
                         request.setExtendInfo(extendInfoMap);
-                        request.setAppId(payment.getAppId());
                         HuiFuRefundResult refund = huiFuService.refund(request);
                         logger.info("退款:" + refund);
                         if ((refund.getResp_code().equals("00000000") || refund.getResp_code().equals("00000100")) && (refund.getTrans_stat().equals("S") || refund.getTrans_stat().equals("P"))) {
@@ -2731,15 +2740,15 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
             throw new CustomException("未找到appId对应的小程序配置: " + config.getAppId());
         }
         MerchantAppConfig merchantAppConfig = merchantAppConfigMapper.selectMerchantAppConfigById(fsCoursePlaySourceConfig.getMerchantConfigId());
-        FsPayConfig payConfig1 = com.hc.openapi.tool.fastjson.JSON.parseObject(merchantAppConfig.getDataJson(), FsPayConfig.class);
+        FsPayConfig payConfig1 = JSON.parseObject(merchantAppConfig.getDataJson(), FsPayConfig.class);
 
         WxPayConfig payConfig = new WxPayConfig();
-        payConfig.setAppId(payConfig1.getAppId());
+        payConfig.setAppId(merchantAppConfig.getAppId());
         payConfig.setMchId(payConfig1.getWxMchId());
         payConfig.setMchKey(payConfig1.getWxMchKey());
         payConfig.setSubAppId(StringUtils.trimToNull(null));
         payConfig.setSubMchId(StringUtils.trimToNull(null));
-        payConfig.setKeyPath(null);
+        payConfig.setKeyPath(payConfig1.getKeyPath());
         payConfig.setNotifyUrl(payConfig1.getNotifyUrlScrm());
         WxPayServiceImpl payService = new WxPayServiceImpl();
         payService.setConfig(payConfig);
@@ -5026,8 +5035,8 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
             else{
                 String config=configService.selectConfigByKey("his.store");
                 com.fs.store.config.StoreConfig storeConfig= JSONUtil.toBean(config, com.fs.store.config.StoreConfig.class);
-                if(param.getPayType().equals(1)){
-                    order.setPayType("1");
+                if(param.getPayType().equals(1)||param.getPayType().equals(99)){
+                    order.setPayType(String.valueOf(param.getPayType()));
                     order.setPayMoney(order.getPayPrice());
                     if(!"广州郑多燕".equals(cloudHostProper.getCompanyName())){
                         order.setPayDelivery(BigDecimal.ZERO);

+ 3 - 2
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStorePaymentScrmServiceImpl.java

@@ -1184,10 +1184,10 @@ public class FsStorePaymentScrmServiceImpl implements IFsStorePaymentScrmService
         }
 
         // 创建记录 TODO 根据type创建支付
-        FsStorePaymentScrm storePayment = null;
+        FsStorePaymentScrm storePayment = new FsStorePaymentScrm();
         if (payOrderParam.getBusinessType().getPrefix().equals("live")) {
             LiveOrderPayment liveOrderPayment = createLiveStorePayment(payConfig, user, payOrderParam);
-            BeanUtils.copyProperties(liveOrderPayment, payOrderParam);
+            BeanUtils.copyProperties(liveOrderPayment, storePayment);
         } else {
             storePayment = createStorePaymentScrm(payConfig, user, payOrderParam);
         }
@@ -1438,6 +1438,7 @@ public class FsStorePaymentScrmServiceImpl implements IFsStorePaymentScrmService
         FsStorePaymentScrm storePayment = new FsStorePaymentScrm();
         storePayment.setStatus(0);
         storePayment.setAppId(payConfig.getAppId());
+        storePayment.setOrderId(payOrderParam.getOrderId());
         storePayment.setPayMode(payConfig.getType());
         storePayment.setBusinessCode(payOrderParam.getOrderCode());
         storePayment.setPayCode(payCode);

+ 7 - 1
fs-service/src/main/java/com/fs/huifuPay/service/impl/HuiFuServiceImpl.java

@@ -2,6 +2,7 @@ package com.fs.huifuPay.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.fs.common.exception.CustomException;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.spring.SpringUtils;
@@ -158,12 +159,17 @@ public class HuiFuServiceImpl implements HuiFuService {
     public HuiFuRefundResult refund(V2TradePaymentScanpayRefundRequest request) {
         HuiFuRefundResult huiFuRefundResult=null;
         try {
-            doInit(getMerConfig(request.getAppId()));
+            if(ObjectUtils.isNotNull(request.getAppId())){
+                doInit(getMerConfig(request.getAppId()));
+            } else {
+                doInit(getMerConfig());
+            }
             request.setReqDate(DateTools.getCurrentDateYYYYMMDD());
             Map<String, Object> response = doExecute(request);
             String jsonString = JSONObject.toJSONString(response);
             huiFuRefundResult = JSON.parseObject(jsonString, HuiFuRefundResult.class);
         } catch (Exception e){
+            e.printStackTrace();
             throw  new CustomException("退款创建失败");
         }
         return huiFuRefundResult;

+ 1 - 1
fs-service/src/main/java/com/fs/live/mapper/LiveOrderPaymentMapper.java

@@ -70,7 +70,7 @@ public interface LiveOrderPaymentMapper {
     @Select("select * from live_order_payment where pay_code=#{payCode}")
     LiveOrderPayment selectLiveOrderPaymentByPaymentCode(String payCode);
 
-    @Select("select * from live_order_payment where business_type=#{type} and  business_id=#{businessId} and status=1")
+    @Select("select * from live_order_payment where (business_type=#{type} or business_type=9)  and  business_id=#{businessId} and status=1")
     List<LiveOrderPayment> selectLiveOrderPaymentByPay(@Param("type")int type, @Param("businessId") Long businessId);
 
     @Select("select * from live_order_payment where   business_id=#{businessId} and status=1")

+ 34 - 23
fs-service/src/main/java/com/fs/live/service/impl/LiveOrderServiceImpl.java

@@ -2,6 +2,7 @@ package com.fs.live.service.impl;
 
 import java.lang.reflect.Field;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.sql.Timestamp;
 import java.text.DecimalFormat;
 import java.text.ParseException;
@@ -1369,6 +1370,7 @@ public class LiveOrderServiceImpl implements ILiveOrderService {
         IErpOrderService erpOrderService = getErpService();
         FsErpConfig erpConfig = configUtil.generateStructConfigByKey("his.config", FsErpConfig.class);
         LiveOrder order = baseMapper.selectLiveOrderByOrderId(String.valueOf(orderId));
+//        TODO 售后单问题处理
         LiveAfterSales updateSales = liveAfterSalesMapper.getLiveAfterSalesByOrderId(orderId);
         if (updateSales == null) {
             return R.error("售后单不存在");
@@ -1463,17 +1465,20 @@ public class LiveOrderServiceImpl implements ILiveOrderService {
             if (payments != null && !payments.isEmpty()) {
 //                String json = configService.selectConfigByKey("his.pay");
 //                FsPayConfigScrm fsPayConfig = JSON.parseObject(json, FsPayConfigScrm.class);
-
+                SysConfig sysConfig = configService.selectConfigByConfigKey("app.config");
+                AppConfig config = new Gson().fromJson(sysConfig.getConfigValue(), AppConfig.class);
                 for (LiveOrderPayment payment : payments) {
-                    FsCoursePlaySourceConfig fsCoursePlaySourceConfig = fsCoursePlaySourceConfigMapper.selectCoursePlaySourceConfigByAppId(payment.getAppId());
-                    if (fsCoursePlaySourceConfig == null) {
-                        throw new CustomException("未找到appId对应的小程序配置: " + payment.getAppId());
+                    if (order.getPayType().equals("99")){
+                        payment.setAppId(config.getAppId());
                     }
-                    Long merchantConfigId = fsCoursePlaySourceConfig.getMerchantConfigId();
-                    if (merchantConfigId == null || merchantConfigId <= 0) {
-                        throw new CustomException("小程序没有配置商户信息");
+//                   payment.setAppId(config.getAppId());
+
+                    String payType = payment.getPayMode();
+                    if ("wxApp".equals(payment.getPayMode())){
+                        payType = "wx";
                     }
-                    MerchantAppConfig merchantAppConfig = merchantAppConfigMapper.selectMerchantAppConfigById(fsCoursePlaySourceConfig.getMerchantConfigId());
+                    MerchantAppConfig merchantAppConfig = merchantAppConfigMapper.selectMerchantAppConfigByAppId(payment.getAppId(),payType);
+
                     FsPayConfig fsPayConfig = JSON.parseObject(merchantAppConfig.getDataJson(), FsPayConfig.class);
 
                     if (payment.getPayMode() == null || "wx".equals(payment.getPayMode())) {
@@ -1510,18 +1515,15 @@ public class LiveOrderServiceImpl implements ILiveOrderService {
                         }
                     } else if (payment.getPayMode() != null && "hf".equals(payment.getPayMode())) {
                         String huifuId = "";
-                        FsHfpayConfigMapper fsHfpayConfigMapper = SpringUtils.getBean(FsHfpayConfigMapper.class);
                         if (payment.getAppId() != null) {
-                            FsHfpayConfig fsHfpayConfig = fsHfpayConfigMapper.selectByAppId(payment.getAppId());
-                            if (fsHfpayConfig != null) {
-                                huifuId = fsHfpayConfig.getHuifuId();
+                            if (merchantAppConfig != null) {
+                                huifuId = merchantAppConfig.getMerchantId();
                             }
                         } else {
                             CloudHostProper cloudHostProper = SpringUtils.getBean(CloudHostProper.class);
                             if ("益善缘".equals(cloudHostProper.getCompanyName())) {
-                                FsHfpayConfig fsPayConfig2 = fsHfpayConfigMapper.selectByAppId("wx0d1a3dd485268521");
-                                if (fsPayConfig2 != null) {
-                                    huifuId = fsPayConfig2.getHuifuId();
+                                if (merchantAppConfig != null) {
+                                    huifuId = merchantAppConfig.getMerchantId();
                                 }
                             } else {
                                 huifuId = fsPayConfig.getHuifuId();
@@ -1531,13 +1533,19 @@ public class LiveOrderServiceImpl implements ILiveOrderService {
                         V2TradePaymentScanpayRefundRequest request = new V2TradePaymentScanpayRefundRequest();
                         request.setOrgHfSeqId(payment.getTradeNo());
                         request.setHuifuId(huifuId);
-                        request.setOrdAmt(payment.getPayMoney().toString());
                         request.setOrgReqDate(new SimpleDateFormat("yyyyMMdd").format(payment.getCreateTime()));
                         request.setReqSeqId("refund-" + payment.getPayCode());
                         Map<String, Object> extendInfoMap = new HashMap<>();
-                        extendInfoMap.put("org_party_order_id", payment.getBankSerialNo());
+
+                        if (order.getPayType().equals("99")){
+                            request.setOrdAmt(payment.getPayMoney().setScale(2, RoundingMode.DOWN).toString());
+                            extendInfoMap.put("org_req_seq_id", "live-"+payment.getPayCode());
+                        }else {
+                            request.setOrdAmt(payment.getPayMoney().toString());
+                            extendInfoMap.put("org_party_order_id", payment.getBankSerialNo());
+                            request.setAppId(payment.getAppId());
+                        }
                         request.setExtendInfo(extendInfoMap);
-                        request.setAppId(payment.getAppId());
                         HuiFuRefundResult refund = huiFuService.refund(request);
                         log.info("退款:" + refund);
                         if (refund != null && ("00000000".equals(refund.getResp_code()) || "00000100".equals(refund.getResp_code()))
@@ -1607,8 +1615,11 @@ public class LiveOrderServiceImpl implements ILiveOrderService {
     }
 
 
-
-
+    /**
+     * 封装微信参数
+     *
+     * @return
+     */
     private WxPayService getWxPayService(){
         SysConfig sysConfig = configService.selectConfigByConfigKey("app.config");
         AppConfig config = new Gson().fromJson(sysConfig.getConfigValue(), AppConfig.class);
@@ -1617,15 +1628,15 @@ public class LiveOrderServiceImpl implements ILiveOrderService {
             throw new CustomException("未找到appId对应的小程序配置: " + config.getAppId());
         }
         MerchantAppConfig merchantAppConfig = merchantAppConfigMapper.selectMerchantAppConfigById(fsCoursePlaySourceConfig.getMerchantConfigId());
-        FsPayConfig payConfig1 = com.hc.openapi.tool.fastjson.JSON.parseObject(merchantAppConfig.getDataJson(), FsPayConfig.class);
+        FsPayConfig payConfig1 = JSON.parseObject(merchantAppConfig.getDataJson(), FsPayConfig.class);
 
         WxPayConfig payConfig = new WxPayConfig();
-        payConfig.setAppId(payConfig1.getAppId());
+        payConfig.setAppId(merchantAppConfig.getAppId());
         payConfig.setMchId(payConfig1.getWxMchId());
         payConfig.setMchKey(payConfig1.getWxMchKey());
         payConfig.setSubAppId(StringUtils.trimToNull(null));
         payConfig.setSubMchId(StringUtils.trimToNull(null));
-        payConfig.setKeyPath(null);
+        payConfig.setKeyPath(payConfig1.getKeyPath());
         payConfig.setNotifyUrl(payConfig1.getNotifyUrlScrm());
         WxPayServiceImpl payService = new WxPayServiceImpl();
         payService.setConfig(payConfig);

+ 8 - 0
fs-service/src/main/java/com/fs/store/param/h5/FsUserPageListParam.java

@@ -7,6 +7,7 @@ import lombok.Data;
 
 import java.io.Serializable;
 import java.util.Date;
+import java.util.List;
 import java.util.Set;
 
 
@@ -98,6 +99,13 @@ public class FsUserPageListParam implements Serializable {
 
     //  1-是 2-不是
     private Integer isAppUser;
+    /**
+     * 用户ID
+     */
+    @ApiModelProperty("用户项目ID集合")
+
+//    @NotEmpty(message = "用户项目ID不能为空")
+    private List<Long> userCompanyUserIds;
 
 
 }

+ 6 - 7
fs-service/src/main/resources/application-druid-zkzh-test.yml

@@ -128,15 +128,14 @@ spring:
                         config:
                             multi-statement-allow: true
 rocketmq:
-    name-server: rmq-1243b25nj.rocketmq.gz.public.tencenttdmq.com:8080 # RocketMQ NameServer 地址
+    name-server: rmq-16e437k44e.rocketmq.cd.qcloud.tencenttdmq.com:8080 # 替换为实际的
     producer:
-        group: my-producer-group
-        access-key: ak1243b25nj17d4b2dc1a03 # 替换为实际的 accessKey
-        secret-key: sk08a7ea1f9f4b0237 # 替换为实际的 secretKey
+        group: conversion-tracking-group
+        access-key: ak16e437k44e83e6c22f3b48 # 替换为实际的 accessKey
+        secret-key: ske995168f7b31620b # 替换为实际的 secretKey
     consumer:
-        group: test-group
-        access-key: ak1243b25nj17d4b2dc1a03 # 替换为实际的 accessKey
-        secret-key: sk08a7ea1f9f4b0237 # 替换为实际的 secretKey
+        access-key: ak16e437k44e83e6c22f3b48 # 替换为实际的 accessKey
+        secret-key: ske995168f7b31620b # 替换为实际的 secretKey
 cloud_host:
     company_name: 中康智慧
 openIM:

+ 11 - 0
fs-service/src/main/resources/mapper/MerchantAppConfigMapper.xml

@@ -68,6 +68,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where id = #{id}
     </select>
 
+
     <insert id="insertMerchantAppConfig" parameterType="MerchantAppConfig" useGeneratedKeys="true" keyProperty="id">
         insert into merchant_app_config
         <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -123,4 +124,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{id}
         </foreach>
     </delete>
+
+    <select id="selectMerchantAppConfigByAppId" resultMap="MerchantAppConfigResult">
+        select a.id, a.merchant_type, a.app_id, a.merchant_id, a.callback_url,
+               a.data_json, a.created_time, a.updated_time, a.is_deleted,
+               a.created_by, a.updated_by
+        from merchant_app_config a
+                 left join fs_course_play_source_config fcpsc on a.id = fcpsc.merchant_config_id
+        where a.merchant_type = #{payType}
+          and fcpsc.appid like CONCAT('%', #{appId}, '%')
+    </select>
 </mapper>

+ 25 - 0
fs-service/src/main/resources/mapper/course/FsUserCompanyUserMapper.xml

@@ -213,5 +213,30 @@
             </otherwise>
         </choose>
     </delete>
+    <select id="selectIdListByCompanyUserId"  resultType="Long">
+        select id from fs_user_company_user a left join fs_user ON a.user_id = fs_user.user_id
+        <where>
+            <if test="userId != null and userId!= 0 ">
+                and a.company_user_id = #{userId}
+            </if>
+            <if test="status != null">
+                AND a.`status` = #{status}
+            </if>
+            <if test="projectId != null">
+                AND a.project_id = #{projectId}
+            </if>
+            <if test="keyword != null and keyword !='' ">
+                AND (fs_user.nick_name   LIKE concat('%',#{keyword} COLLATE utf8mb4_unicode_ci,'%')
+                or  fs_user.phone  LIKE concat('%',#{keyword} COLLATE utf8mb4_unicode_ci,'%')
+                )
+            </if>
+            <if test="registerStartTime != null and registerStartTime !='' ">
+                AND a.create_time &gt;= #{registerStartTime}
+            </if>
+            <if test="registerEndTime != null and registerEndTime !='' ">
+                AND a.create_time &lt;= #{registerEndTime}
+            </if>
+        </where>
+    </select>
 
 </mapper>

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

@@ -498,7 +498,7 @@ public class LiveOrderController extends AppBaseController
             }
         }
         FsUserScrm user=userService.selectFsUserById(Long.valueOf(order.getUserId()));
-        if(user!=null&& StringUtils.isNotEmpty(user.getMaOpenId())){
+        if(user!=null){
             //已改价处理
             if(order.getIsEditMoney()!=null&&order.getIsEditMoney()==1){
                 //改过价不做处理