소스 검색

Merge branch 'master' of http://git.dayaedu.com/yonge/cooleshow

liujunchi 3 년 전
부모
커밋
e2ad8cce8f

+ 3 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/open/UserOrderClient.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.admin.open;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.yonge.cooleshow.biz.dal.entity.UserOrderPayment;
 import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
@@ -83,6 +84,8 @@ public class UserOrderClient extends BaseController {
         BaseResult<PaymentCallBack> res = paymentClient.analysisNotice(
                 OpenEnum.valueOf(openType), PaymentClientEnum.valueOf(client),
                 PayChannelEnum.valueOf(payChannel), MethodNameEnum.valueOf(payMethod), request);
+        log.info("统一解析结果:{}", JSONObject.toJSONString(res));
+
         if (res.getStatus()) {
             PaymentCallBack data = res.getData();
             //查询到订单

+ 6 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SubjectDao.java

@@ -39,10 +39,12 @@ public interface SubjectDao extends BaseDAO<Long, Subject> {
      * @updateTime 2022/4/6 11:41
      * @return: int
      */
-    int deleteById(Long id);
+    int deleteById(@Param("id") Long id);
 
     //根据声部id查详情
-    Subject selectSubjectById(String lessonSubject);
-    
-    Subject queryByName(String name);
+    Subject selectSubjectById(@Param("lessonSubject") String lessonSubject);
+
+    Subject queryByCode(@Param("code") String code);
+
+    Subject queryByName(@Param("name") String name);
 }

+ 23 - 21
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SubjectServiceImpl.java

@@ -32,6 +32,7 @@ public class SubjectServiceImpl extends BaseServiceImpl<Long, Subject> implement
     public List<Subject> findBySubjectByIdList(List<Long> subjectIdList) {
         return subjectDao.findBySubjectIds(subjectIdList);
     }
+
     @Override
     public List<Subject> findBySubjectByIdList(String subjectIdList) {
         return subjectDao.findBySubjectByIdList(subjectIdList);
@@ -47,26 +48,27 @@ public class SubjectServiceImpl extends BaseServiceImpl<Long, Subject> implement
     }
 
     @Override
-	public int deleteById(Long id) {
-    	List<Subject> subjectList = subjectDao.findByParentId(id);
-    	if(subjectList != null && subjectList.size() > 0){
-			throw new BizException("该分类下已创建下级,无法删除");
-    	}
-		return subjectDao.deleteById(id);
-	}
-
-	@Override
+    public int deleteById(Long id) {
+        List<Subject> subjectList = subjectDao.findByParentId(id);
+        if (subjectList != null && subjectList.size() > 0) {
+            throw new BizException("该分类下已创建下级,无法删除");
+        }
+        return subjectDao.deleteById(id);
+    }
+
+    @Override
     public void upSetSubject(Subject subject) {
-		
-		Subject orginSubject = subjectDao.queryByName(subject.getName());
-		
-		if(orginSubject != null){
-			if(orginSubject.getId() != subject.getId()){
-				throw new BizException("名称已存在,请修改名称");
-			}
-		}
-		
-		if (subject.getId() != null) {
+        Subject subjectByCode = subjectDao.queryByCode(subject.getCode());
+        if (subjectByCode != null && subjectByCode.getId() != subject.getId()) {
+            throw new BizException("声部编码已存在,请修改编码");
+        }
+
+        Subject subjectByName = subjectDao.queryByName(subject.getName());
+        if (subjectByName != null && subjectByName.getId() != subject.getId()) {
+            throw new BizException("名称已存在,请修改名称");
+        }
+
+        if (subject.getId() != null) {
             subject.setUpdateTime(new Date());
             subjectDao.update(subject);
         } else {
@@ -79,7 +81,7 @@ public class SubjectServiceImpl extends BaseServiceImpl<Long, Subject> implement
         List<Subject> allList = subjectDao.findAll(new HashMap<>());
 
         List<Subject> parents = allList.stream()
-                .filter(o -> (null == o.getParentSubjectId() || o.getParentSubjectId().equals(0L) ))
+                .filter(o -> (null == o.getParentSubjectId() || o.getParentSubjectId().equals(0L)))
                 .collect(Collectors.toList());
 
         List<Subject> subjects = allList.stream()
@@ -96,7 +98,7 @@ public class SubjectServiceImpl extends BaseServiceImpl<Long, Subject> implement
                 }
                 if (subject.getParentSubjectId().equals(parent.getId())) {
                     List<Subject> children = parent.getSubjects();
-                    if(CollectionUtils.isEmpty(children)){
+                    if (CollectionUtils.isEmpty(children)) {
                         children = new ArrayList<>();
                     }
                     children.add(subject);

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderRefundServiceImpl.java

@@ -112,7 +112,7 @@ public class UserOrderRefundServiceImpl extends ServiceImpl<UserOrderRefundDao,
         if (!OrderStatusEnum.PAID.equals(detail.getStatus())) {
             return HttpResponseResult.failed("订单状态异常");
         }
-        if (StringUtil.isEmpty(detail.getTransNo())) {
+        if (StringUtil.isEmpty(detail.getTransNo()) && StringUtil.isEmpty(detail.getPaymentNo())) {
             return HttpResponseResult.failed("未找到订单付款信息");
         }
         UserOrderPayment orderPayment = orderPaymentService.detailByTransNoOrPaymentNo(detail.getTransNo(), detail.getPaymentNo());

+ 7 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java

@@ -618,8 +618,13 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
                     if (null != data.getExecutePaymentCallBack()) {
                         orderPayment.setBackPayAmt(
                                 new BigDecimal(data.getExecutePaymentCallBack().getPayAmt()));
-                        orderPayment.setFeeAmt(
-                                new BigDecimal(data.getExecutePaymentCallBack().getFeeAmt()));
+
+                        BigDecimal feeAmt = new BigDecimal(data.getExecutePaymentCallBack().getFeeAmt());
+                        if (BigDecimal.ZERO.equals(feeAmt)) {
+                            orderPayment.setFeeAmt(orderPayment.getPayAmt().subtract(orderPayment.getBackPayAmt()));
+                        } else {
+                            orderPayment.setFeeAmt(feeAmt);
+                        }
                     }
                     orderPaymentService.updateById(orderPayment);
                 }

+ 6 - 1
cooleshow-user/user-biz/src/main/resources/config/mybatis/SubjectMapper.xml

@@ -129,7 +129,12 @@
             parameterType="java.lang.String">
         SELECT * FROM subject WHERE del_flag_ = 0 and id_=#{lessonSubject}
     </select>
-    
+
+    <select id="queryByCode" resultType="com.yonge.cooleshow.biz.dal.entity.Subject"
+            parameterType="java.lang.String">
+        SELECT * FROM subject WHERE del_flag_ = 0 and code_ = #{code}
+    </select>
+
     <select id="queryByName" resultType="com.yonge.cooleshow.biz.dal.entity.Subject"
             parameterType="java.lang.String">
         SELECT * FROM subject WHERE del_flag_ = 0 and name_ = #{name}

+ 12 - 4
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/UserOrderRefundController.java

@@ -5,6 +5,7 @@ import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderRefundReq;
 import com.yonge.cooleshow.biz.dal.dto.search.UserOrderRefundSearch;
+import com.yonge.cooleshow.biz.dal.entity.UserOrder;
 import com.yonge.cooleshow.biz.dal.entity.UserOrderRefund;
 import com.yonge.cooleshow.biz.dal.enums.CacheNameEnum;
 import com.yonge.cooleshow.biz.dal.service.UserOrderRefundService;
@@ -13,6 +14,7 @@ import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderRefundVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.page.PageInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -71,12 +73,18 @@ public class UserOrderRefundController extends BaseController {
 			return failed(HttpStatus.FORBIDDEN, "请登录");
 		}
 		refundReq.setUserId(user.getId());
-		Future<HttpResponseResult<Boolean>> httpResponseResultFuture = DistributedLock.of(redissonClient)
-				.callIfLockCanGet(CacheNameEnum.LOCK_EXECUTE_ORDER.getRedisKey(user.getId())
-						, () -> userOrderRefundService.orderRefund(refundReq), 60L, TimeUnit.SECONDS);
 
 		try {
-			return httpResponseResultFuture.get();
+			HttpResponseResult<Boolean> res = DistributedLock.of(redissonClient)
+					.runIfLockCanGet(CacheNameEnum.LOCK_EXECUTE_ORDER.getRedisKey(user.getId())
+							, () -> userOrderRefundService.orderRefund(refundReq), 60L, TimeUnit.SECONDS);
+			if(null != res){
+				return res;
+			}else{
+				return HttpResponseResult.failed("订单退款失败");
+			}
+		} catch (BizException e) {
+			return HttpResponseResult.failed(e.getMessage());
 		} catch (Exception e) {
 			e.printStackTrace();
 			return HttpResponseResult.failed("订单退款失败");

+ 3 - 3
toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/base/model/callback/ExecutePaymentCallBack.java

@@ -15,13 +15,13 @@ public class ExecutePaymentCallBack implements Serializable {
      * @author liweifan
      * @updateTime 2022/3/31 11:01
      */
-    private String payAmt;
+    private String payAmt = "0";
     /***
-     * 服务费
+     * todo 服务费(若返回0,则取原支付金额-回调支付金额) 或者 直接按费率计算
      * @author liweifan
      * @updateTime 2022/3/31 11:01
      */
-    private String feeAmt;
+    private String feeAmt = "0";
 
     /***
      * 交易时间

+ 2 - 2
toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/base/model/callback/RefundPaymentCallBack.java

@@ -18,11 +18,11 @@ public class RefundPaymentCallBack implements Serializable {
     /**
      * 退款金额(单位:元)
      */
-    private String refundAmt;
+    private String refundAmt = "0";
     /**
      * 退款手续费(单位:元)
      */
-    private String feeAmt;
+    private String feeAmt = "0";
     /***
      * 交易时间
      * @author liweifan

+ 9 - 1
toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/original/wx/OriginalWxAppTemplate.java

@@ -264,7 +264,15 @@ public class OriginalWxAppTemplate implements PaymentTemplate {
 
                 ExecutePaymentCallBack executePayment = new ExecutePaymentCallBack();
                 if (!StringUtil.isEmpty(result.getAmount().getTotal())) {
-                    executePayment.setPayAmt(new BigDecimal(result.getAmount().getTotal()).divide(new BigDecimal("100")).toString());
+
+                    BigDecimal payAmt = new BigDecimal(result.getAmount().getTotal()).divide(new BigDecimal("100"));
+                    executePayment.setPayAmt(payAmt.toString());
+
+                    String WX_FEE_RATE = configPaymentService.getPaymentConfig(OpenEnum.ORIGINAL, WxpayConstant.WX_FEE_RATE).getParamValue();
+
+                    BigDecimal feeRate = new BigDecimal(StringUtil.isEmpty(WX_FEE_RATE) ? "0.006" : WX_FEE_RATE);
+
+                    executePayment.setFeeAmt(payAmt.multiply(feeRate).setScale(2, BigDecimal.ROUND_HALF_UP).toString());
                 }
                 if (!StringUtil.isEmpty(result.getSuccessTime())) {
                     Date date = new DateTime(result.getSuccessTime()).toDate();

+ 7 - 0
toolset/toolset-payment/src/main/java/com/yonge/toolset/payment/original/wx/constant/WxpayConstant.java

@@ -48,4 +48,11 @@ public interface WxpayConstant {
      * @updateTime 2022/5/13 14:09
      */
     String WX_PRIVATE_KEY_PATH = "WX_PRIVATE_KEY_PATH";
+    /***
+     * 微信-手续费率
+     * @author liweifan
+     * @updateTime 2022/5/13 14:09
+     */
+    String WX_FEE_RATE = "WX_FEE_RATE";
+
 }