Browse Source

优化代码

wuxw 2 years ago
parent
commit
a3f3bdb9d5
25 changed files with 1049 additions and 1551 deletions
  1. 10 0
      java110-bean/src/main/java/com/java110/dto/paymentAdapt/PaymentAdaptDto.java
  2. 10 0
      java110-bean/src/main/java/com/java110/dto/paymentPool/PaymentPoolDto.java
  3. 10 0
      java110-bean/src/main/java/com/java110/dto/wechat/OnlinePayDto.java
  4. 3 0
      java110-bean/src/main/java/com/java110/vo/ResultVo.java
  5. 86 86
      java110-db/src/main/resources/mapper/acct/PaymentAdaptV1ServiceDaoImplMapper.xml
  6. 2 1
      java110-db/src/main/resources/mapper/acct/PaymentPoolV1ServiceDaoImplMapper.xml
  7. 50 0
      java110-interface/src/main/java/com/java110/intf/acct/IReturnMoneyV1InnerServiceSMO.java
  8. 16 0
      service-acct/src/main/java/com/java110/acct/payment/IRefundMoneyAdapt.java
  9. 118 0
      service-acct/src/main/java/com/java110/acct/payment/adapt/bbgpay/BbgRefundMoneyAdapt.java
  10. 137 0
      service-acct/src/main/java/com/java110/acct/payment/adapt/chinaUms/ChinaUmsRefundMoneyAdapt.java
  11. 126 0
      service-acct/src/main/java/com/java110/acct/payment/adapt/easypay/EasyRefundMoneyAdapt.java
  12. 156 0
      service-acct/src/main/java/com/java110/acct/payment/adapt/plutus/PlutusRefundMoneyAdapt.java
  13. 202 0
      service-acct/src/main/java/com/java110/acct/payment/adapt/wechat/WechatRefundMoneyAdapt.java
  14. 97 0
      service-acct/src/main/java/com/java110/acct/smo/impl/ReturnMoneyV1InnerServiceSMOImpl.java
  15. 0 63
      service-job/src/main/java/com/java110/job/adapt/returnMoney/bbg/EncryptDecryptFactory.java
  16. 0 207
      service-job/src/main/java/com/java110/job/adapt/returnMoney/bbg/ReturnPayFeeBbgMoneyAdapt.java
  17. 0 173
      service-job/src/main/java/com/java110/job/adapt/returnMoney/bbg/lib/AesEncrypt.java
  18. 0 37
      service-job/src/main/java/com/java110/job/adapt/returnMoney/bbg/lib/Base64Util.java
  19. 0 171
      service-job/src/main/java/com/java110/job/adapt/returnMoney/bbg/lib/CAUtil.java
  20. 0 304
      service-job/src/main/java/com/java110/job/adapt/returnMoney/bbg/lib/GmUtil.java
  21. 0 119
      service-job/src/main/java/com/java110/job/adapt/returnMoney/bbg/lib/HttpRequestUtil.java
  22. 0 73
      service-job/src/main/java/com/java110/job/adapt/returnMoney/bbg/lib/JsonUtil.java
  23. 0 121
      service-job/src/main/java/com/java110/job/adapt/returnMoney/bbg/lib/StreamUtil.java
  24. 0 186
      service-job/src/main/java/com/java110/job/adapt/returnMoney/plutus/ReturnPayFeeToPlutusAdapt.java
  25. 26 10
      service-job/src/main/java/com/java110/job/adapt/returnMoney/wechat/ReturnPayFeeMoneyAdapt.java

+ 10 - 0
java110-bean/src/main/java/com/java110/dto/paymentAdapt/PaymentAdaptDto.java

@@ -22,6 +22,8 @@ public class PaymentAdaptDto extends PageDto implements Serializable {
     private String name;
     private String paymentType;
 
+    private String beanRefund;
+
 
     private Date createTime;
 
@@ -92,4 +94,12 @@ public class PaymentAdaptDto extends PageDto implements Serializable {
     public void setStatusCd(String statusCd) {
         this.statusCd = statusCd;
     }
+
+    public String getBeanRefund() {
+        return beanRefund;
+    }
+
+    public void setBeanRefund(String beanRefund) {
+        this.beanRefund = beanRefund;
+    }
 }

+ 10 - 0
java110-bean/src/main/java/com/java110/dto/paymentPool/PaymentPoolDto.java

@@ -37,6 +37,8 @@ public class PaymentPoolDto extends PageDto implements Serializable {
     private String beanJsapi;
     private String beanQrcode;
     private String beanNative;
+
+    private String beanRefund;
     private List<PaymentPoolValueDto> values;
 
     private List<PaymentPoolConfigDto> configs;
@@ -175,4 +177,12 @@ public class PaymentPoolDto extends PageDto implements Serializable {
     public void setBeanNative(String beanNative) {
         this.beanNative = beanNative;
     }
+
+    public String getBeanRefund() {
+        return beanRefund;
+    }
+
+    public void setBeanRefund(String beanRefund) {
+        this.beanRefund = beanRefund;
+    }
 }

+ 10 - 0
java110-bean/src/main/java/com/java110/dto/wechat/OnlinePayDto.java

@@ -36,6 +36,8 @@ public class OnlinePayDto extends PageDto implements Serializable {
     private String payName;
     private String transactionId;
 
+    private String paymentPoolId;
+
 
     private Date createTime;
 
@@ -146,4 +148,12 @@ public class OnlinePayDto extends PageDto implements Serializable {
     public void setStatusCd(String statusCd) {
         this.statusCd = statusCd;
     }
+
+    public String getPaymentPoolId() {
+        return paymentPoolId;
+    }
+
+    public void setPaymentPoolId(String paymentPoolId) {
+        this.paymentPoolId = paymentPoolId;
+    }
 }

+ 3 - 0
java110-bean/src/main/java/com/java110/vo/ResultVo.java

@@ -216,6 +216,9 @@ public class ResultVo implements Serializable {
         return JSONObject.toJSONString(this, SerializerFeature.DisableCircularReferenceDetect, SerializerFeature.WriteDateUseDateFormat);
     }
 
+    public static ResultVo ok(){
+        return new ResultVo(ResultVo.CODE_OK,ResultVo.MSG_OK);
+    }
 
     /**
      * 创建ResponseEntity对象

+ 86 - 86
java110-db/src/main/resources/mapper/acct/PaymentAdaptV1ServiceDaoImplMapper.xml

@@ -5,111 +5,111 @@
 <mapper namespace="paymentAdaptV1ServiceDaoImpl">
 
 
-
-
-
     <!-- 保存支付厂家信息 add by wuxw 2018-07-03 -->
     <insert id="savePaymentAdaptInfo" parameterType="Map">
         insert into payment_adapt(
-adapt_id,bean_jsapi,bean_qrcode,bean_native,name,payment_type
-) values (
-#{adaptId},#{beanJsapi},#{beanQrcode},#{beanNative},#{name},#{paymentType}
-)
+        adapt_id,bean_jsapi,bean_qrcode,bean_native,name,payment_type,bean_refund
+        ) values (
+        #{adaptId},#{beanJsapi},#{beanQrcode},#{beanNative},#{name},#{paymentType},#{beanRefund}
+        )
     </insert>
 
 
-
     <!-- 查询支付厂家信息 add by wuxw 2018-07-03 -->
     <select id="getPaymentAdaptInfo" parameterType="Map" resultType="Map">
-        select  t.adapt_id,t.adapt_id adaptId,t.bean_jsapi,t.bean_jsapi beanJsapi,t.bean_qrcode,t.bean_qrcode beanQrcode,t.bean_native,t.bean_native beanNative,t.name,t.status_cd,t.status_cd statusCd,t.payment_type,t.payment_type paymentType 
-from payment_adapt t 
-where 1 =1 
-<if test="adaptId !=null and adaptId != ''">
-   and t.adapt_id= #{adaptId}
-</if> 
-<if test="beanJsapi !=null and beanJsapi != ''">
-   and t.bean_jsapi= #{beanJsapi}
-</if> 
-<if test="beanQrcode !=null and beanQrcode != ''">
-   and t.bean_qrcode= #{beanQrcode}
-</if> 
-<if test="beanNative !=null and beanNative != ''">
-   and t.bean_native= #{beanNative}
-</if> 
-<if test="name !=null and name != ''">
-   and t.name= #{name}
-</if> 
-<if test="statusCd !=null and statusCd != ''">
-   and t.status_cd= #{statusCd}
-</if> 
-<if test="paymentType !=null and paymentType != ''">
-   and t.payment_type= #{paymentType}
-</if> 
-order by t.create_time desc
-<if test="page != -1 and page != null ">
-   limit #{page}, #{row}
-</if> 
+        select t.adapt_id,t.adapt_id adaptId,t.bean_jsapi,t.bean_jsapi beanJsapi,t.bean_qrcode,t.bean_qrcode
+        beanQrcode,t.bean_native,t.bean_native beanNative,t.name,t.status_cd,t.status_cd
+        statusCd,t.payment_type,t.payment_type paymentType,t.bean_refund beanRefund
+        from payment_adapt t
+        where 1 =1
+        <if test="adaptId !=null and adaptId != ''">
+            and t.adapt_id= #{adaptId}
+        </if>
+        <if test="beanJsapi !=null and beanJsapi != ''">
+            and t.bean_jsapi= #{beanJsapi}
+        </if>
+        <if test="beanQrcode !=null and beanQrcode != ''">
+            and t.bean_qrcode= #{beanQrcode}
+        </if>
+        <if test="beanNative !=null and beanNative != ''">
+            and t.bean_native= #{beanNative}
+        </if>
+        <if test="name !=null and name != ''">
+            and t.name= #{name}
+        </if>
+        <if test="statusCd !=null and statusCd != ''">
+            and t.status_cd= #{statusCd}
+        </if>
+        <if test="paymentType !=null and paymentType != ''">
+            and t.payment_type= #{paymentType}
+        </if>
+        order by t.create_time desc
+        <if test="page != -1 and page != null ">
+            limit #{page}, #{row}
+        </if>
 
     </select>
 
 
-
-
     <!-- 修改支付厂家信息 add by wuxw 2018-07-03 -->
     <update id="updatePaymentAdaptInfo" parameterType="Map">
-        update  payment_adapt t set t.status_cd = #{statusCd}
-<if test="newBId != null and newBId != ''">
-,t.b_id = #{newBId}
-</if> 
-<if test="beanJsapi !=null and beanJsapi != ''">
-, t.bean_jsapi= #{beanJsapi}
-</if> 
-<if test="beanQrcode !=null and beanQrcode != ''">
-, t.bean_qrcode= #{beanQrcode}
-</if> 
-<if test="beanNative !=null and beanNative != ''">
-, t.bean_native= #{beanNative}
-</if> 
-<if test="name !=null and name != ''">
-, t.name= #{name}
-</if> 
-<if test="paymentType !=null and paymentType != ''">
-, t.payment_type= #{paymentType}
-</if> 
- where 1=1 <if test="adaptId !=null and adaptId != ''">
-and t.adapt_id= #{adaptId}
-</if> 
+        update payment_adapt t set t.status_cd = #{statusCd}
+        <if test="newBId != null and newBId != ''">
+            ,t.b_id = #{newBId}
+        </if>
+        <if test="beanJsapi !=null and beanJsapi != ''">
+            , t.bean_jsapi= #{beanJsapi}
+        </if>
+        <if test="beanQrcode !=null and beanQrcode != ''">
+            , t.bean_qrcode= #{beanQrcode}
+        </if>
+        <if test="beanNative !=null and beanNative != ''">
+            , t.bean_native= #{beanNative}
+        </if>
+        <if test="beanNative !=null and beanNative != ''">
+            , t.bean_refund= #{beanRefund}
+        </if>
+        <if test="name !=null and name != ''">
+            , t.name= #{name}
+        </if>
+        <if test="paymentType !=null and paymentType != ''">
+            , t.payment_type= #{paymentType}
+        </if>
+        where 1=1
+        <if test="adaptId !=null and adaptId != ''">
+            and t.adapt_id= #{adaptId}
+        </if>
 
     </update>
 
     <!-- 查询支付厂家数量 add by wuxw 2018-07-03 -->
-     <select id="queryPaymentAdaptsCount" parameterType="Map" resultType="Map">
-        select  count(1) count 
-from payment_adapt t 
-where 1 =1 
-<if test="adaptId !=null and adaptId != ''">
-   and t.adapt_id= #{adaptId}
-</if> 
-<if test="beanJsapi !=null and beanJsapi != ''">
-   and t.bean_jsapi= #{beanJsapi}
-</if> 
-<if test="beanQrcode !=null and beanQrcode != ''">
-   and t.bean_qrcode= #{beanQrcode}
-</if> 
-<if test="beanNative !=null and beanNative != ''">
-   and t.bean_native= #{beanNative}
-</if> 
-<if test="name !=null and name != ''">
-   and t.name= #{name}
-</if> 
-<if test="statusCd !=null and statusCd != ''">
-   and t.status_cd= #{statusCd}
-</if> 
-<if test="paymentType !=null and paymentType != ''">
-   and t.payment_type= #{paymentType}
-</if> 
+    <select id="queryPaymentAdaptsCount" parameterType="Map" resultType="Map">
+        select count(1) count
+        from payment_adapt t
+        where 1 =1
+        <if test="adaptId !=null and adaptId != ''">
+            and t.adapt_id= #{adaptId}
+        </if>
+        <if test="beanJsapi !=null and beanJsapi != ''">
+            and t.bean_jsapi= #{beanJsapi}
+        </if>
+        <if test="beanQrcode !=null and beanQrcode != ''">
+            and t.bean_qrcode= #{beanQrcode}
+        </if>
+        <if test="beanNative !=null and beanNative != ''">
+            and t.bean_native= #{beanNative}
+        </if>
+        <if test="name !=null and name != ''">
+            and t.name= #{name}
+        </if>
+        <if test="statusCd !=null and statusCd != ''">
+            and t.status_cd= #{statusCd}
+        </if>
+        <if test="paymentType !=null and paymentType != ''">
+            and t.payment_type= #{paymentType}
+        </if>
 
 
-     </select>
+    </select>
 
 </mapper>

+ 2 - 1
java110-db/src/main/resources/mapper/acct/PaymentPoolV1ServiceDaoImplMapper.xml

@@ -20,7 +20,8 @@
         select t.cert_path,t.cert_path certPath,t.status_cd,t.status_cd
         statusCd,t.remark,t.state,t.community_id,t.community_id communityId,t.payment_name,t.payment_name
         paymentName,t.pp_id,t.pp_id ppId,t.payment_type,t.payment_type paymentType,t.create_time createTime,
-        t.pay_type payType, pa.name paymentTypeName,pa.bean_jsapi beanJsapi,pa.bean_qrcode beanQrcode,pa.bean_native beanNative
+        t.pay_type payType, pa.name paymentTypeName,pa.bean_jsapi beanJsapi,pa.bean_qrcode beanQrcode,pa.bean_native beanNative,
+        pa.bean_refund beanRefund
         from payment_pool t
         left join payment_adapt pa on t.payment_type = pa.payment_type and pa.status_cd = '0'
         where 1 =1

+ 50 - 0
java110-interface/src/main/java/com/java110/intf/acct/IReturnMoneyV1InnerServiceSMO.java

@@ -0,0 +1,50 @@
+/*
+ * Copyright 2017-2020 吴学文 and java110 team.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.java110.intf.acct;
+
+import com.java110.config.feign.FeignConfiguration;
+import com.java110.dto.payment.NotifyPaymentOrderDto;
+import com.java110.dto.wechat.OnlinePayDto;
+import com.java110.vo.ResultVo;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+
+/**
+ * 类表述: 服务之前调用的接口类,不对外提供接口能力 只用于接口建调用
+ * add by 吴学文 at 2021-12-21 13:05:25 mail: 928255095@qq.com
+ * open source address: https://gitee.com/wuxw7/MicroCommunity
+ * 官网:http://www.homecommunity.cn
+ * 温馨提示:如果您对此文件进行修改 请不要删除原有作者及注释信息,请补充您的 修改的原因以及联系邮箱如下
+ * // modify by 张三 at 2021-09-12 第10行在某种场景下存在某种bug 需要修复,注释10至20行 加入 20行至30行
+ */
+@FeignClient(name = "acct-service", configuration = {FeignConfiguration.class})
+@RequestMapping("/returnMoneyV1Api")
+public interface IReturnMoneyV1InnerServiceSMO {
+
+    /**
+     * 退费
+     *
+     * @param onlinePayDto 数据对象分享
+     * @return 小区下的小区楼记录数
+     */
+    @RequestMapping(value = "/returnMoney", method = RequestMethod.POST)
+    ResultVo returnMoney(@RequestBody OnlinePayDto onlinePayDto);
+
+}

+ 16 - 0
service-acct/src/main/java/com/java110/acct/payment/IRefundMoneyAdapt.java

@@ -0,0 +1,16 @@
+package com.java110.acct.payment;
+
+import com.java110.dto.paymentPool.PaymentPoolDto;
+import com.java110.dto.wechat.OnlinePayDto;
+import com.java110.vo.ResultVo;
+
+public interface IRefundMoneyAdapt {
+
+    /**
+     * 退款处理
+     * @param onlinePayDto
+     * @param paymentPoolDto
+     * @return
+     */
+    ResultVo refund(OnlinePayDto onlinePayDto, PaymentPoolDto paymentPoolDto) throws Exception;
+}

+ 118 - 0
service-acct/src/main/java/com/java110/acct/payment/adapt/bbgpay/BbgRefundMoneyAdapt.java

@@ -0,0 +1,118 @@
+package com.java110.acct.payment.adapt.bbgpay;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.acct.payment.IRefundMoneyAdapt;
+import com.java110.core.client.FtpUploadTemplate;
+import com.java110.core.client.OssUploadTemplate;
+import com.java110.core.factory.CommunitySettingFactory;
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.core.factory.PlutusFactory;
+import com.java110.core.log.LoggerFactory;
+import com.java110.dto.paymentPool.PaymentPoolDto;
+import com.java110.dto.paymentPoolValue.PaymentPoolValueDto;
+import com.java110.dto.wechat.OnlinePayDto;
+import com.java110.intf.acct.IOnlinePayRefundV1InnerServiceSMO;
+import com.java110.intf.acct.IOnlinePayV1InnerServiceSMO;
+import com.java110.intf.acct.IPaymentPoolValueV1InnerServiceSMO;
+import com.java110.intf.fee.IReturnPayFeeInnerServiceSMO;
+import com.java110.intf.order.IOrderInnerServiceSMO;
+import com.java110.intf.store.ISmallWechatV1InnerServiceSMO;
+import com.java110.utils.util.PayUtil;
+import com.java110.vo.ResultVo;
+import org.bouncycastle.util.encoders.Base64;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service("bbgRefundMoney")
+public class BbgRefundMoneyAdapt implements IRefundMoneyAdapt {
+
+
+    private static String VERSION = "1.0";
+
+    private static String SIGN_TYPE = "RSA2";// 加密算法:SM4、RSA2
+
+    private static String refundUrl = "https://mbank.bankofbbg.com/www/corepaycer/Refund";// 退款地址
+
+    @Autowired
+    private IPaymentPoolValueV1InnerServiceSMO paymentPoolValueV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IReturnPayFeeInnerServiceSMO returnPayFeeInnerServiceSMOImpl;
+
+    @Autowired
+    private IOrderInnerServiceSMO orderInnerServiceSMOImpl;
+
+    @Autowired
+    private IOnlinePayV1InnerServiceSMO onlinePayV1InnerServiceSMOImpl;
+
+    @Autowired
+    private ISmallWechatV1InnerServiceSMO smallWechatV1InnerServiceSMOImpl;
+
+    @Autowired
+    private RestTemplate outRestTemplate;
+
+
+    private static Logger logger = LoggerFactory.getLogger(BbgRefundMoneyAdapt.class);
+
+    @Autowired
+    private FtpUploadTemplate ftpUploadTemplate;
+
+    @Autowired
+    private OssUploadTemplate ossUploadTemplate;
+
+    @Autowired
+    private IOnlinePayRefundV1InnerServiceSMO onlinePayRefundV1InnerServiceSMOImpl;
+
+    @Override
+    public ResultVo refund(OnlinePayDto onlinePayDto, PaymentPoolDto paymentPoolDto) throws Exception {
+
+        PaymentPoolValueDto paymentPoolValueDto = new PaymentPoolValueDto();
+        paymentPoolValueDto.setPpId(paymentPoolDto.getPpId());
+        List<PaymentPoolValueDto> paymentPoolValueDtos = paymentPoolValueV1InnerServiceSMOImpl.queryPaymentPoolValues(paymentPoolValueDto);
+
+        if (paymentPoolValueDtos == null || paymentPoolValueDtos.isEmpty()) {
+            throw new IllegalArgumentException("配置错误,未配置参数");
+        }
+
+
+        String mchtNo_SM4 = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "mchtNo_SM4");
+        String tranNo = GenerateCodeFactory.getGeneratorId("11");
+
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("version", VERSION);// 版本号 1.0
+        params.put("mcht_no", mchtNo_SM4);// 收款商户编号
+        params.put("tran_no", tranNo);// 商户流水
+        params.put("org_tran_no", onlinePayDto.getOrderId());// 原平台流水
+        params.put("device_ip", "172.0.0.1");// 设备发起交易IP
+        params.put("amt", onlinePayDto.getRefundFee());// 交易金额
+        params.put("ware_name", onlinePayDto.getPayName());// 摘要备注
+
+        // 对准备加签参数排序
+        String decryParams = EncryptDecryptFactory.execute(paymentPoolValueDtos, refundUrl, params);
+
+        JSONObject paramOut = JSONObject.parseObject(decryParams);
+        if ( !"SUCCESS".equals(paramOut.getString("status")) || !"SUCCESS".equals(paramOut.getString("deal_status"))) {
+            return new ResultVo(ResultVo.CODE_ERROR, "退款失败" + paramOut.getString("return_message"));
+        }
+        if ( !"0000".equals(paramOut.getString("return_code")) && !"0001".equals(paramOut.getString("return_code"))) {
+            return new ResultVo(ResultVo.CODE_ERROR, "退款失败" + paramOut.getString("return_message"));
+        }
+        if("0001".equals(paramOut.getString("return_code"))){
+            return new ResultVo(ResultVo.CODE_OK, paramOut.getString("return_message"));
+
+        }
+        return new ResultVo(ResultVo.CODE_OK,  "退款完成");
+
+
+    }
+
+
+}

+ 137 - 0
service-acct/src/main/java/com/java110/acct/payment/adapt/chinaUms/ChinaUmsRefundMoneyAdapt.java

@@ -0,0 +1,137 @@
+package com.java110.acct.payment.adapt.chinaUms;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.acct.payment.IRefundMoneyAdapt;
+import com.java110.core.client.FtpUploadTemplate;
+import com.java110.core.client.OssUploadTemplate;
+import com.java110.core.factory.PlutusFactory;
+import com.java110.core.log.LoggerFactory;
+import com.java110.dto.paymentPool.PaymentPoolDto;
+import com.java110.dto.paymentPoolValue.PaymentPoolValueDto;
+import com.java110.dto.wechat.OnlinePayDto;
+import com.java110.intf.acct.IOnlinePayRefundV1InnerServiceSMO;
+import com.java110.intf.acct.IOnlinePayV1InnerServiceSMO;
+import com.java110.intf.acct.IPaymentPoolValueV1InnerServiceSMO;
+import com.java110.intf.fee.IReturnPayFeeInnerServiceSMO;
+import com.java110.intf.order.IOrderInnerServiceSMO;
+import com.java110.intf.store.ISmallWechatV1InnerServiceSMO;
+import com.java110.utils.util.PayUtil;
+import com.java110.vo.ResultVo;
+import org.bouncycastle.util.encoders.Base64;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.List;
+
+@Service("chinaUmsRefundMoney")
+public class ChinaUmsRefundMoneyAdapt implements IRefundMoneyAdapt {
+
+
+    //微信支付
+    public static final String DOMAIN_WECHAT_PAY = "WECHAT_PAY";
+
+    // 微信服务商支付开关
+    public static final String WECHAT_SERVICE_PAY_SWITCH = "WECHAT_SERVICE_PAY_SWITCH";
+
+    //开关ON打开
+    public static final String WECHAT_SERVICE_PAY_SWITCH_ON = "ON";
+
+    private static final String WECHAT_SERVICE_APP_ID = "SERVICE_APP_ID";
+
+    private static final String WECHAT_SERVICE_MCH_ID = "SERVICE_MCH_ID";
+
+    @Autowired
+    private IPaymentPoolValueV1InnerServiceSMO paymentPoolValueV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IReturnPayFeeInnerServiceSMO returnPayFeeInnerServiceSMOImpl;
+
+    @Autowired
+    private IOrderInnerServiceSMO orderInnerServiceSMOImpl;
+
+    @Autowired
+    private IOnlinePayV1InnerServiceSMO onlinePayV1InnerServiceSMOImpl;
+
+    @Autowired
+    private ISmallWechatV1InnerServiceSMO smallWechatV1InnerServiceSMOImpl;
+
+    @Autowired
+    private RestTemplate outRestTemplate;
+
+    public static final String wechatReturnUrl = "https://api.plutuspay.com/open/v2/refund";
+
+    private static Logger logger = LoggerFactory.getLogger(ChinaUmsRefundMoneyAdapt.class);
+
+    @Autowired
+    private FtpUploadTemplate ftpUploadTemplate;
+
+    @Autowired
+    private OssUploadTemplate ossUploadTemplate;
+
+    @Autowired
+    private IOnlinePayRefundV1InnerServiceSMO onlinePayRefundV1InnerServiceSMOImpl;
+
+    @Override
+    public ResultVo refund(OnlinePayDto onlinePayDto, PaymentPoolDto paymentPoolDto) throws Exception {
+
+        PaymentPoolValueDto paymentPoolValueDto = new PaymentPoolValueDto();
+        paymentPoolValueDto.setPpId(paymentPoolDto.getPpId());
+        List<PaymentPoolValueDto> paymentPoolValueDtos = paymentPoolValueV1InnerServiceSMOImpl.queryPaymentPoolValues(paymentPoolValueDto);
+
+        if (paymentPoolValueDtos == null || paymentPoolValueDtos.isEmpty()) {
+            throw new IllegalArgumentException("配置错误,未配置参数");
+        }
+
+
+        String mchId = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "PLUTUS_MCHID");
+        String key = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "PLUTUS_KEY");
+        String privateKey = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "PLUTUS_PRIVATE_KEY");
+        String devId = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "PLUTUS_DEV_ID");
+        String publicKey = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "PLUTUS_PUBLIC_KEY");
+
+        JSONObject parameters = new JSONObject();
+        parameters.put("sn", mchId);//商户号
+        parameters.put("outTradeId", onlinePayDto.getOrderId());//商户号
+        parameters.put("outRefundId", onlinePayDto.getPayId());//我们自己设定的退款申请号,约束为UK
+        parameters.put("refundAmount", PayUtil.moneyToIntegerStr(Double.parseDouble(onlinePayDto.getTotalFee())));//订单金额 单位为分!!!这里稍微注意一下
+
+
+        String param = PlutusFactory.Encryption(parameters.toJSONString(), privateKey, key, devId);
+        System.out.println(param);
+
+        String str = PlutusFactory.post(wechatReturnUrl, param);
+        System.out.println(str);
+
+        JSONObject json = JSON.parseObject(str);
+
+        String signature = json.getString("signature");
+        String content = json.getString("content");
+
+
+        //验签
+        Boolean verify = PlutusFactory.verify256(content, Base64.decode(signature), publicKey);
+        //验签成功
+        if (!verify) {
+            throw new IllegalArgumentException("支付失败签名失败");
+        }
+        //解密
+        byte[] bb = PlutusFactory.decrypt(Base64.decode(content), key);
+        //服务器返回内容
+        String paramOut = new String(bb);
+        System.out.println(paramOut);
+
+        JSONObject paramObj = JSONObject.parseObject(paramOut);
+
+        if (paramObj.getIntValue("status") != 2) {
+            return new ResultVo(ResultVo.CODE_ERROR, paramObj.getString("remark"));
+        } else {
+            return new ResultVo(ResultVo.CODE_OK, "退款完成");
+        }
+
+    }
+
+
+}

+ 126 - 0
service-acct/src/main/java/com/java110/acct/payment/adapt/easypay/EasyRefundMoneyAdapt.java

@@ -0,0 +1,126 @@
+package com.java110.acct.payment.adapt.easypay;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.acct.payment.IRefundMoneyAdapt;
+import com.java110.acct.payment.adapt.bbgpay.EncryptDecryptFactory;
+import com.java110.acct.payment.adapt.easypay.utils.HttpConnectUtils;
+import com.java110.core.client.FtpUploadTemplate;
+import com.java110.core.client.OssUploadTemplate;
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.core.log.LoggerFactory;
+import com.java110.dto.paymentPool.PaymentPoolDto;
+import com.java110.dto.paymentPoolValue.PaymentPoolValueDto;
+import com.java110.dto.wechat.OnlinePayDto;
+import com.java110.intf.acct.IOnlinePayRefundV1InnerServiceSMO;
+import com.java110.intf.acct.IOnlinePayV1InnerServiceSMO;
+import com.java110.intf.acct.IPaymentPoolValueV1InnerServiceSMO;
+import com.java110.intf.fee.IReturnPayFeeInnerServiceSMO;
+import com.java110.intf.order.IOrderInnerServiceSMO;
+import com.java110.intf.store.ISmallWechatV1InnerServiceSMO;
+import com.java110.utils.util.PayUtil;
+import com.java110.vo.ResultVo;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service("easyRefundMoney")
+public class EasyRefundMoneyAdapt implements IRefundMoneyAdapt {
+
+
+    @Autowired
+    private IPaymentPoolValueV1InnerServiceSMO paymentPoolValueV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IReturnPayFeeInnerServiceSMO returnPayFeeInnerServiceSMOImpl;
+
+    @Autowired
+    private IOrderInnerServiceSMO orderInnerServiceSMOImpl;
+
+    @Autowired
+    private IOnlinePayV1InnerServiceSMO onlinePayV1InnerServiceSMOImpl;
+
+    @Autowired
+    private ISmallWechatV1InnerServiceSMO smallWechatV1InnerServiceSMOImpl;
+
+    @Autowired
+    private RestTemplate outRestTemplate;
+
+
+    private static Logger logger = LoggerFactory.getLogger(EasyRefundMoneyAdapt.class);
+
+    @Autowired
+    private FtpUploadTemplate ftpUploadTemplate;
+
+    @Autowired
+    private OssUploadTemplate ossUploadTemplate;
+
+    @Autowired
+    private IOnlinePayRefundV1InnerServiceSMO onlinePayRefundV1InnerServiceSMOImpl;
+
+    @Override
+    public ResultVo refund(OnlinePayDto onlinePayDto, PaymentPoolDto paymentPoolDto) throws Exception {
+
+        PaymentPoolValueDto paymentPoolValueDto = new PaymentPoolValueDto();
+        paymentPoolValueDto.setPpId(paymentPoolDto.getPpId());
+        List<PaymentPoolValueDto> paymentPoolValueDtos = paymentPoolValueV1InnerServiceSMOImpl.queryPaymentPoolValues(paymentPoolValueDto);
+
+        if (paymentPoolValueDtos == null || paymentPoolValueDtos.isEmpty()) {
+            throw new IllegalArgumentException("配置错误,未配置参数");
+        }
+
+        String ORGID = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "ORGID"); // 客户编号
+        String ORGMERCODE = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "ORGMERCODE");
+        String ORGTERMNO = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "ORGTERMNO");
+        String EASYPAY_PUBLIC_KEY = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "EASYPAY_PUBLIC_KEY");
+        String MER_RSA_PRIVATE_KEY = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "MER_RSA_PRIVATE_KEY");
+
+        JSONObject paramIn = new JSONObject();
+        paramIn.put("orgId", ORGID);
+        paramIn.put("orgMercode", ORGMERCODE);
+        paramIn.put("orgTermno", ORGTERMNO);
+        paramIn.put("signType", BasePay.SIGN_TYPE_RSA256);
+        paramIn.put("orgTrace", GenerateCodeFactory.getGeneratorId("10"));
+
+        JSONObject bizData = new JSONObject();
+        bizData.put("oriOrgTrace", onlinePayDto.getOrderId());
+        bizData.put("transAmt", PayUtil.moneyToIntegerStr(Double.parseDouble(onlinePayDto.getRefundFee())));
+
+        paramIn.put("bizData", bizData);
+        String sign = BasePay.sign(paramIn, MER_RSA_PRIVATE_KEY);
+        paramIn.put("sign", sign);
+
+        String requestStr = paramIn.toJSONString();
+
+        String response = null;
+        try {
+            response = HttpConnectUtils.sendHttpSRequest(BasePay.BASE_URL + "/ledger/mposrefund", requestStr, "JSON", null);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        System.out.println("\n响应报文:" + response);
+        BasePay.checkSign(response, EASYPAY_PUBLIC_KEY);
+
+        JSONObject paramOut = JSONObject.parseObject(response);
+        if (!"000000".equals(paramOut.getString("sysRetCode"))) {
+            return new ResultVo(ResultVo.CODE_ERROR, "退款失败" + paramOut.getString("sysRetMsg"));
+        }
+
+        JSONObject resData = paramOut.getJSONObject("bizData");
+
+        if (!"00".equals(resData.getString("tradeRetCode"))) {
+            return new ResultVo(ResultVo.CODE_ERROR, "退款失败" + paramOut.getString("tradeRetMsg"));
+
+        }
+        return new ResultVo(ResultVo.CODE_OK, "退款完成");
+
+
+    }
+
+
+}

+ 156 - 0
service-acct/src/main/java/com/java110/acct/payment/adapt/plutus/PlutusRefundMoneyAdapt.java

@@ -0,0 +1,156 @@
+package com.java110.acct.payment.adapt.plutus;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.acct.payment.IRefundMoneyAdapt;
+import com.java110.core.client.FtpUploadTemplate;
+import com.java110.core.client.OssUploadTemplate;
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.core.factory.PlutusFactory;
+import com.java110.core.log.LoggerFactory;
+import com.java110.dto.file.FileDto;
+import com.java110.dto.onlinePayRefund.OnlinePayRefundDto;
+import com.java110.dto.paymentPool.PaymentPoolDto;
+import com.java110.dto.paymentPoolValue.PaymentPoolValueDto;
+import com.java110.dto.wechat.OnlinePayDto;
+import com.java110.intf.acct.IOnlinePayRefundV1InnerServiceSMO;
+import com.java110.intf.acct.IOnlinePayV1InnerServiceSMO;
+import com.java110.intf.acct.IPaymentPoolValueV1InnerServiceSMO;
+import com.java110.intf.fee.IReturnPayFeeInnerServiceSMO;
+import com.java110.intf.order.IOrderInnerServiceSMO;
+import com.java110.intf.store.ISmallWechatV1InnerServiceSMO;
+import com.java110.utils.cache.MappingCache;
+import com.java110.utils.constant.MappingConstant;
+import com.java110.utils.util.OSSUtil;
+import com.java110.utils.util.PayUtil;
+import com.java110.utils.util.StringUtil;
+import com.java110.vo.ResultVo;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.ssl.SSLContexts;
+import org.apache.http.util.EntityUtils;
+import org.bouncycastle.util.encoders.Base64;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+import javax.net.ssl.SSLContext;
+import java.io.ByteArrayInputStream;
+import java.security.KeyStore;
+import java.util.*;
+
+@Service("plutusRefundMoney")
+public class PlutusRefundMoneyAdapt implements IRefundMoneyAdapt {
+
+
+    //微信支付
+    public static final String DOMAIN_WECHAT_PAY = "WECHAT_PAY";
+
+    // 微信服务商支付开关
+    public static final String WECHAT_SERVICE_PAY_SWITCH = "WECHAT_SERVICE_PAY_SWITCH";
+
+    //开关ON打开
+    public static final String WECHAT_SERVICE_PAY_SWITCH_ON = "ON";
+
+    private static final String WECHAT_SERVICE_APP_ID = "SERVICE_APP_ID";
+
+    private static final String WECHAT_SERVICE_MCH_ID = "SERVICE_MCH_ID";
+
+    @Autowired
+    private IPaymentPoolValueV1InnerServiceSMO paymentPoolValueV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IReturnPayFeeInnerServiceSMO returnPayFeeInnerServiceSMOImpl;
+
+    @Autowired
+    private IOrderInnerServiceSMO orderInnerServiceSMOImpl;
+
+    @Autowired
+    private IOnlinePayV1InnerServiceSMO onlinePayV1InnerServiceSMOImpl;
+
+    @Autowired
+    private ISmallWechatV1InnerServiceSMO smallWechatV1InnerServiceSMOImpl;
+
+    @Autowired
+    private RestTemplate outRestTemplate;
+
+    public static final String wechatReturnUrl = "https://api.plutuspay.com/open/v2/refund";
+
+    private static Logger logger = LoggerFactory.getLogger(PlutusRefundMoneyAdapt.class);
+
+    @Autowired
+    private FtpUploadTemplate ftpUploadTemplate;
+
+    @Autowired
+    private OssUploadTemplate ossUploadTemplate;
+
+    @Autowired
+    private IOnlinePayRefundV1InnerServiceSMO onlinePayRefundV1InnerServiceSMOImpl;
+
+    @Override
+    public ResultVo refund(OnlinePayDto onlinePayDto, PaymentPoolDto paymentPoolDto) throws Exception {
+
+        PaymentPoolValueDto paymentPoolValueDto = new PaymentPoolValueDto();
+        paymentPoolValueDto.setPpId(paymentPoolDto.getPpId());
+        List<PaymentPoolValueDto> paymentPoolValueDtos = paymentPoolValueV1InnerServiceSMOImpl.queryPaymentPoolValues(paymentPoolValueDto);
+
+        if (paymentPoolValueDtos == null || paymentPoolValueDtos.isEmpty()) {
+            throw new IllegalArgumentException("配置错误,未配置参数");
+        }
+
+
+        String mchId = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "PLUTUS_MCHID");
+        String key = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "PLUTUS_KEY");
+        String privateKey = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "PLUTUS_PRIVATE_KEY");
+        String devId = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "PLUTUS_DEV_ID");
+        String publicKey = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "PLUTUS_PUBLIC_KEY");
+
+        JSONObject parameters = new JSONObject();
+        parameters.put("sn", mchId);//商户号
+        parameters.put("outTradeId", onlinePayDto.getOrderId());//商户号
+        parameters.put("outRefundId", onlinePayDto.getPayId());//我们自己设定的退款申请号,约束为UK
+        parameters.put("refundAmount", PayUtil.moneyToIntegerStr(Double.parseDouble(onlinePayDto.getTotalFee())));//订单金额 单位为分!!!这里稍微注意一下
+
+
+        String param = PlutusFactory.Encryption(parameters.toJSONString(), privateKey, key, devId);
+        System.out.println(param);
+
+        String str = PlutusFactory.post(wechatReturnUrl, param);
+        System.out.println(str);
+
+        JSONObject json = JSON.parseObject(str);
+
+        String signature = json.getString("signature");
+        String content = json.getString("content");
+
+
+        //验签
+        Boolean verify = PlutusFactory.verify256(content, org.bouncycastle.util.encoders.Base64.decode(signature), publicKey);
+        //验签成功
+        if (!verify) {
+            throw new IllegalArgumentException("支付失败签名失败");
+        }
+        //解密
+        byte[] bb = PlutusFactory.decrypt(Base64.decode(content), key);
+        //服务器返回内容
+        String paramOut = new String(bb);
+        System.out.println(paramOut);
+
+        JSONObject paramObj = JSONObject.parseObject(paramOut);
+
+        if (paramObj.getIntValue("status") != 2) {
+            return new ResultVo(ResultVo.CODE_ERROR, paramObj.getString("remark"));
+        } else {
+            return new ResultVo(ResultVo.CODE_OK, "退款完成");
+        }
+
+    }
+
+
+}

+ 202 - 0
service-acct/src/main/java/com/java110/acct/payment/adapt/wechat/WechatRefundMoneyAdapt.java

@@ -0,0 +1,202 @@
+package com.java110.acct.payment.adapt.wechat;
+
+import com.java110.acct.payment.IRefundMoneyAdapt;
+import com.java110.core.client.FtpUploadTemplate;
+import com.java110.core.client.OssUploadTemplate;
+import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.core.log.LoggerFactory;
+import com.java110.dto.file.FileDto;
+import com.java110.dto.onlinePayRefund.OnlinePayRefundDto;
+import com.java110.dto.paymentPool.PaymentPoolDto;
+import com.java110.dto.paymentPoolValue.PaymentPoolValueDto;
+import com.java110.dto.wechat.OnlinePayDto;
+import com.java110.dto.wechat.SmallWeChatDto;
+import com.java110.intf.acct.IOnlinePayRefundV1InnerServiceSMO;
+import com.java110.intf.acct.IOnlinePayV1InnerServiceSMO;
+import com.java110.intf.acct.IPaymentPoolValueV1InnerServiceSMO;
+import com.java110.intf.fee.IReturnPayFeeInnerServiceSMO;
+import com.java110.intf.order.IOrderInnerServiceSMO;
+import com.java110.intf.store.ISmallWechatV1InnerServiceSMO;
+import com.java110.utils.cache.MappingCache;
+import com.java110.utils.constant.MappingConstant;
+import com.java110.utils.util.OSSUtil;
+import com.java110.utils.util.PayUtil;
+import com.java110.utils.util.StringUtil;
+import com.java110.vo.ResultVo;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.ssl.SSLContexts;
+import org.apache.http.util.EntityUtils;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+import javax.net.ssl.SSLContext;
+import java.io.ByteArrayInputStream;
+import java.security.KeyStore;
+import java.util.*;
+
+@Service("wechatRefundMoney")
+public class WechatRefundMoneyAdapt implements IRefundMoneyAdapt {
+
+
+    //微信支付
+    public static final String DOMAIN_WECHAT_PAY = "WECHAT_PAY";
+
+    // 微信服务商支付开关
+    public static final String WECHAT_SERVICE_PAY_SWITCH = "WECHAT_SERVICE_PAY_SWITCH";
+
+    //开关ON打开
+    public static final String WECHAT_SERVICE_PAY_SWITCH_ON = "ON";
+
+    private static final String WECHAT_SERVICE_APP_ID = "SERVICE_APP_ID";
+
+    private static final String WECHAT_SERVICE_MCH_ID = "SERVICE_MCH_ID";
+
+    @Autowired
+    private IPaymentPoolValueV1InnerServiceSMO paymentPoolValueV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IReturnPayFeeInnerServiceSMO returnPayFeeInnerServiceSMOImpl;
+
+    @Autowired
+    private IOrderInnerServiceSMO orderInnerServiceSMOImpl;
+
+    @Autowired
+    private IOnlinePayV1InnerServiceSMO onlinePayV1InnerServiceSMOImpl;
+
+    @Autowired
+    private ISmallWechatV1InnerServiceSMO smallWechatV1InnerServiceSMOImpl;
+
+    @Autowired
+    private RestTemplate outRestTemplate;
+
+    public static final String wechatReturnUrl = "https://api.mch.weixin.qq.com/secapi/pay/refund";
+
+    private static Logger logger = LoggerFactory.getLogger(WechatRefundMoneyAdapt.class);
+
+    @Autowired
+    private FtpUploadTemplate ftpUploadTemplate;
+
+    @Autowired
+    private OssUploadTemplate ossUploadTemplate;
+
+    @Autowired
+    private IOnlinePayRefundV1InnerServiceSMO onlinePayRefundV1InnerServiceSMOImpl;
+
+    @Override
+    public ResultVo refund(OnlinePayDto onlinePayDto, PaymentPoolDto paymentPoolDto) throws Exception {
+
+        PaymentPoolValueDto paymentPoolValueDto = new PaymentPoolValueDto();
+        paymentPoolValueDto.setPpId(paymentPoolDto.getPpId());
+        List<PaymentPoolValueDto> paymentPoolValueDtos = paymentPoolValueV1InnerServiceSMOImpl.queryPaymentPoolValues(paymentPoolValueDto);
+
+        if (paymentPoolValueDtos == null || paymentPoolValueDtos.isEmpty()) {
+            throw new IllegalArgumentException("配置错误,未配置参数");
+        }
+
+        String mchId = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "WECHAT_MCHID");
+        String key = PaymentPoolValueDto.getValue(paymentPoolValueDtos, "WECHAT_KEY");
+        String certData = paymentPoolDto.getCertPath();
+
+        System.out.println("------------------------------证书地址:" + certData);
+
+        SortedMap<String, String> parameters = new TreeMap<String, String>();
+        String paySwitch = MappingCache.getValue(DOMAIN_WECHAT_PAY, WECHAT_SERVICE_PAY_SWITCH);
+        parameters.put("appid", onlinePayDto.getAppId());//appid
+        parameters.put("mch_id", mchId);//商户号
+        if (WECHAT_SERVICE_PAY_SWITCH_ON.equals(paySwitch)) {
+            key = MappingCache.getValue(DOMAIN_WECHAT_PAY, WECHAT_SERVICE_MCH_ID);
+            parameters.put("mch_id", MappingCache.getValue(MappingConstant.WECHAT_STORE_DOMAIN, "mchId"));//商户号
+            parameters.put("sub_mch_id", mchId);//商户号
+        }
+
+        // todo 查询退费明细
+        OnlinePayRefundDto onlinePayRefundDto = new OnlinePayRefundDto();
+        onlinePayRefundDto.setPayId(onlinePayDto.getPayId());
+        onlinePayRefundDto.setState(OnlinePayDto.STATE_WT);
+        List<OnlinePayRefundDto> onlinePayRefundDtos = onlinePayRefundV1InnerServiceSMOImpl.queryOnlinePayRefunds(onlinePayRefundDto);
+        String tranNo = GenerateCodeFactory.getGeneratorId("11");
+        if (onlinePayRefundDtos != null && onlinePayRefundDtos.size() > 0) {
+            tranNo = onlinePayRefundDtos.get(0).getRefundId();
+        }
+
+
+        parameters.put("nonce_str", PayUtil.makeUUID(32));//随机数
+        parameters.put("out_trade_no", onlinePayDto.getOrderId());//商户订单号
+        parameters.put("out_refund_no", tranNo);//我们自己设定的退款申请号,约束为UK
+        parameters.put("total_fee", PayUtil.moneyToIntegerStr(Double.parseDouble(onlinePayDto.getTotalFee())));//订单金额 单位为分!!!这里稍微注意一下
+        parameters.put("refund_fee", PayUtil.moneyToIntegerStr(Double.parseDouble(onlinePayDto.getRefundFee())));//退款金额 单位为分!!!
+        parameters.put("sign", PayUtil.createSign(parameters, key));
+        String xmlData = PayUtil.mapToXml(parameters);
+        KeyStore keyStore = KeyStore.getInstance("PKCS12");
+        ByteArrayInputStream inputStream = new ByteArrayInputStream(getPkcs12(certData));
+        try {
+            //这里写密码..默认是你的MCHID
+            keyStore.load(inputStream, mchId.toCharArray());
+        } finally {
+            inputStream.close();
+        }
+        SSLContext sslcontext = SSLContexts.custom()
+                //这里也是写密码的
+                .loadKeyMaterial(keyStore, parameters.get("mch_id").toCharArray())
+                .build();
+        SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
+                sslcontext,
+                SSLConnectionSocketFactory.getDefaultHostnameVerifier());
+        CloseableHttpClient httpclient = HttpClients.custom()
+                .setSSLSocketFactory(sslsf)
+                .build();
+        String jsonStr = "";
+        try {
+            HttpPost httpost = new HttpPost(wechatReturnUrl);
+            httpost.setEntity(new StringEntity(xmlData, "UTF-8"));
+            CloseableHttpResponse response = httpclient.execute(httpost);
+            try {
+                HttpEntity entity = response.getEntity();
+                //接受到返回信息
+                jsonStr = EntityUtils.toString(response.getEntity(), "UTF-8");
+                EntityUtils.consume(entity);
+            } finally {
+                response.close();
+            }
+        } finally {
+            httpclient.close();
+        }
+        Map<String, String> resMap = PayUtil.xmlStrToMap(jsonStr);
+        if ("SUCCESS".equals(resMap.get("return_code")) && "SUCCESS".equals(resMap.get("result_code"))) {
+            return new ResultVo(ResultVo.CODE_OK, "退款完成");
+        } else {
+            return new ResultVo(ResultVo.CODE_ERROR, resMap.get("return_msg"));
+        }
+
+    }
+
+    private byte[] getPkcs12(String fileName) {
+        List<FileDto> fileDtos = new ArrayList<>();
+        byte[] context = null;
+        String ftpPath = "hc/";
+        String ossSwitch = MappingCache.getValue(MappingConstant.FILE_DOMAIN, OSSUtil.OSS_SWITCH);
+        if (StringUtil.isEmpty(ossSwitch) || !OSSUtil.OSS_SWITCH_OSS.equals(ossSwitch)) {
+            String ftpServer = MappingCache.getValue(FtpUploadTemplate.FTP_DOMAIN, FtpUploadTemplate.FTP_SERVER);
+            int ftpPort = Integer.parseInt(MappingCache.getValue(FtpUploadTemplate.FTP_DOMAIN, FtpUploadTemplate.FTP_PORT));
+            String ftpUserName = MappingCache.getValue(FtpUploadTemplate.FTP_DOMAIN, FtpUploadTemplate.FTP_USERNAME);
+            String ftpUserPassword = MappingCache.getValue(FtpUploadTemplate.FTP_DOMAIN, FtpUploadTemplate.FTP_USERPASSWORD);
+            context = ftpUploadTemplate.downFileByte(ftpPath, fileName, ftpServer,
+                    ftpPort, ftpUserName,
+                    ftpUserPassword);
+        } else {
+            context = ossUploadTemplate.downFileByte(ftpPath, fileName, "",
+                    0, "",
+                    "");
+        }
+        return context;
+    }
+
+}

+ 97 - 0
service-acct/src/main/java/com/java110/acct/smo/impl/ReturnMoneyV1InnerServiceSMOImpl.java

@@ -0,0 +1,97 @@
+/*
+ * Copyright 2017-2020 吴学文 and java110 team.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.java110.acct.smo.impl;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.acct.payment.IPaymentBusiness;
+import com.java110.acct.payment.IPaymentFactoryAdapt;
+import com.java110.acct.payment.IRefundMoneyAdapt;
+import com.java110.core.base.smo.BaseServiceSMO;
+import com.java110.core.log.LoggerFactory;
+import com.java110.dto.payment.NotifyPaymentOrderDto;
+import com.java110.dto.payment.PaymentOrderDto;
+import com.java110.dto.paymentPool.PaymentPoolDto;
+import com.java110.dto.wechat.OnlinePayDto;
+import com.java110.intf.acct.INotifyPaymentV1InnerServiceSMO;
+import com.java110.intf.acct.IPaymentPoolV1InnerServiceSMO;
+import com.java110.intf.acct.IReturnMoneyV1InnerServiceSMO;
+import com.java110.utils.cache.CommonCache;
+import com.java110.utils.cache.MappingCache;
+import com.java110.utils.constant.WechatConstant;
+import com.java110.utils.exception.CmdException;
+import com.java110.utils.factory.ApplicationContextFactory;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.StringUtil;
+import com.java110.vo.ResultVo;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 类表述: 服务之前调用的接口实现类,不对外提供接口能力 只用于接口建调用
+ * add by 吴学文 at 2021-12-21 13:05:25 mail: 928255095@qq.com
+ * open source address: https://gitee.com/wuxw7/MicroCommunity
+ * 官网:http://www.homecommunity.cn
+ * 温馨提示:如果您对此文件进行修改 请不要删除原有作者及注释信息,请补充您的 修改的原因以及联系邮箱如下
+ * // modify by 张三 at 2021-09-12 第10行在某种场景下存在某种bug 需要修复,注释10至20行 加入 20行至30行
+ */
+@RestController
+public class ReturnMoneyV1InnerServiceSMOImpl extends BaseServiceSMO implements IReturnMoneyV1InnerServiceSMO {
+
+    private static final Logger logger = LoggerFactory.getLogger(ReturnMoneyV1InnerServiceSMOImpl.class);
+
+    private static final String DEFAULT_PAYMENT_NOTIFY_ADAPT = "wechatPaymentFactory";// 默认微信通用支付
+
+    protected static final String DEFAULT_NATIVE_QRCODE_PAYMENT_ADAPT = "wechatNativeQrcodePaymentFactory";// 默认微信通用支付
+    @Autowired
+    private IPaymentPoolV1InnerServiceSMO paymentPoolV1InnerServiceSMOImpl;
+
+
+    @Override
+    public ResultVo returnMoney(@RequestBody OnlinePayDto onlinePayDto) {
+
+
+        PaymentPoolDto paymentPoolDto = new PaymentPoolDto();
+        paymentPoolDto.setPpId(onlinePayDto.getPaymentPoolId());
+        List<PaymentPoolDto> paymentPoolDtos = paymentPoolV1InnerServiceSMOImpl.queryPaymentPools(paymentPoolDto);
+
+        Assert.listOnlyOne(paymentPoolDtos, "支付厂家不存在");
+
+        if (StringUtil.isEmpty(paymentPoolDtos.get(0).getBeanRefund())) {
+            throw new IllegalArgumentException("厂家不支持退款");
+        }
+
+        IRefundMoneyAdapt refundMoneyAdapt = ApplicationContextFactory.getBean(paymentPoolDtos.get(0).getBeanRefund(), IRefundMoneyAdapt.class);
+        if (refundMoneyAdapt == null) {
+            throw new IllegalArgumentException("厂家退款适配器配置错误" + paymentPoolDtos.get(0).getBeanRefund());
+        }
+
+        ResultVo resultVo = null;
+        try {
+            resultVo = refundMoneyAdapt.refund(onlinePayDto, paymentPoolDto);
+        } catch (Exception e) {
+            e.printStackTrace();
+            resultVo = new ResultVo(ResultVo.CODE_ERROR, e.getLocalizedMessage());
+        }
+        return resultVo;
+    }
+
+}

+ 0 - 63
service-job/src/main/java/com/java110/job/adapt/returnMoney/bbg/EncryptDecryptFactory.java

@@ -1,63 +0,0 @@
-package com.java110.job.adapt.returnMoney.bbg;
-
-import com.java110.core.factory.CommunitySettingFactory;
-import com.java110.job.adapt.returnMoney.bbg.lib.GmUtil;
-import com.java110.job.adapt.returnMoney.bbg.lib.HttpRequestUtil;
-import com.java110.job.adapt.returnMoney.bbg.lib.JsonUtil;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class EncryptDecryptFactory {
-
-
-    public static String execute(String communityId, String url, Map<String, Object> params) {
-        String decrypt = "";
-        try {
-            String mchtNo_SM4 = CommunitySettingFactory.getValue(communityId, "mchtNo_SM4");
-            String publicKey_SM4 = CommunitySettingFactory.getValue(communityId, "publicKey_SM4");
-            // 格式为json
-            String json = JsonUtil.mapToJson(params);
-            System.out.println("加密前:" + json);
-            // 报文加密
-            String secretKey = GmUtil.generateSm4Key();
-            String encrypt = GmUtil.encryptSm4(json, secretKey);
-            System.out.println("加密后:" + encrypt);
-
-            Map<String, Object> signParams = new HashMap<>();
-            signParams.put("mcht_no", mchtNo_SM4);// 收款商户编号
-            signParams.put("sign_type", "SM4");
-            signParams.put("message_key", GmUtil.encryptSm2(secretKey, publicKey_SM4));// 密钥加密
-            signParams.put("enc_data", encrypt);// 加密后请求参数
-
-            String requestParams = JsonUtil.mapToJson(signParams);
-            System.out.println("最终请求参数:" + requestParams);
-            System.err.println("");
-            String returnResult = HttpRequestUtil.httpPost(url, requestParams);
-            System.out.println("支付结果返回值(原文):" + returnResult);
-            if (returnResult == null) {
-                System.err.println("通道响应异常");
-                throw new IllegalArgumentException("通道响应异常");
-
-            }
-            // 开始解密
-            Map<String, Object> responseParams = JsonUtil.jsonToMap(returnResult);
-            if (!responseParams.containsKey("enc_data")) {
-                System.err.println("交易失败-->" + responseParams.get("return_code") + ":" + responseParams.get("return_message"));
-                throw new IllegalArgumentException("交易失败-->" + responseParams.get("return_code") + ":" + responseParams.get("return_message"));
-            }
-            String decryptStr = (String) responseParams.get("enc_data");
-
-            decrypt = GmUtil.decryptSm4(decryptStr, secretKey);
-            if (decrypt == null) {
-                System.err.println("解密失败");
-                throw new IllegalArgumentException("解密失败");
-            }
-            System.out.println("支付结果返回值(解密后):" + decrypt);
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new IllegalArgumentException(e.getMessage());
-        }
-        return decrypt;
-    }
-}

+ 0 - 207
service-job/src/main/java/com/java110/job/adapt/returnMoney/bbg/ReturnPayFeeBbgMoneyAdapt.java

@@ -1,207 +0,0 @@
-package com.java110.job.adapt.returnMoney.bbg;
-
-import com.alibaba.fastjson.JSONObject;
-import com.java110.core.client.FtpUploadTemplate;
-import com.java110.core.client.OssUploadTemplate;
-import com.java110.core.factory.CommunitySettingFactory;
-import com.java110.core.factory.GenerateCodeFactory;
-import com.java110.core.log.LoggerFactory;
-import com.java110.dto.file.FileDto;
-import com.java110.dto.onlinePayRefund.OnlinePayRefundDto;
-import com.java110.dto.wechat.OnlinePayDto;
-import com.java110.dto.system.Business;
-import com.java110.intf.acct.IOnlinePayRefundV1InnerServiceSMO;
-import com.java110.intf.acct.IOnlinePayV1InnerServiceSMO;
-import com.java110.intf.fee.IReturnPayFeeInnerServiceSMO;
-import com.java110.intf.order.IOrderInnerServiceSMO;
-import com.java110.intf.store.ISmallWechatV1InnerServiceSMO;
-import com.java110.job.adapt.DatabusAdaptImpl;
-import com.java110.po.onlinePayRefund.OnlinePayRefundPo;
-import com.java110.po.wechat.OnlinePayPo;
-import com.java110.utils.cache.MappingCache;
-import com.java110.utils.constant.MappingConstant;
-import com.java110.utils.util.BeanConvertUtil;
-import com.java110.utils.util.OSSUtil;
-import com.java110.utils.util.StringUtil;
-import org.slf4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.web.client.RestTemplate;
-
-import java.util.*;
-
-/**
- * 退费审核通过后 通知 微信支付平台退款处理
- *
- * @author fqz
- * @Date 2021-08-19 10:12
- */
-@Component(value = "returnPayFeeBbgMoneyAdapt")
-public class ReturnPayFeeBbgMoneyAdapt extends DatabusAdaptImpl {
-
-    //微信支付
-    public static final String DOMAIN_WECHAT_PAY = "WECHAT_PAY";
-
-    // 微信服务商支付开关
-    public static final String WECHAT_SERVICE_PAY_SWITCH = "WECHAT_SERVICE_PAY_SWITCH";
-
-    //开关ON打开
-    public static final String WECHAT_SERVICE_PAY_SWITCH_ON = "ON";
-
-    private static final String WECHAT_SERVICE_APP_ID = "SERVICE_APP_ID";
-
-    private static final String WECHAT_SERVICE_MCH_ID = "SERVICE_MCH_ID";
-
-    private static String VERSION = "1.0";
-
-    private static String SIGN_TYPE = "RSA2";// 加密算法:SM4、RSA2
-
-    private static String refundUrl = "https://mbank.bankofbbg.com/www/corepaycer/Refund";// 退款地址
-
-    @Autowired
-    private IReturnPayFeeInnerServiceSMO returnPayFeeInnerServiceSMOImpl;
-
-    @Autowired
-    private IOrderInnerServiceSMO orderInnerServiceSMOImpl;
-
-    @Autowired
-    private IOnlinePayV1InnerServiceSMO onlinePayV1InnerServiceSMOImpl;
-
-    @Autowired
-    private ISmallWechatV1InnerServiceSMO smallWechatV1InnerServiceSMOImpl;
-
-    @Autowired
-    private RestTemplate outRestTemplate;
-
-    public static final String wechatReturnUrl = "https://api.mch.weixin.qq.com/secapi/pay/refund";
-
-    private static Logger logger = LoggerFactory.getLogger(ReturnPayFeeBbgMoneyAdapt.class);
-
-    @Autowired
-    private FtpUploadTemplate ftpUploadTemplate;
-
-    @Autowired
-    private OssUploadTemplate ossUploadTemplate;
-
-    @Autowired
-    private IOnlinePayRefundV1InnerServiceSMO onlinePayRefundV1InnerServiceSMOImpl;
-
-    @Override
-    public void execute(Business business, List<Business> businesses) {
-        JSONObject data = business.getData();
-        OnlinePayPo oaWorkflowDataPo = BeanConvertUtil.covertBean(data, OnlinePayPo.class);
-        try {
-            doPayFeeMoney(oaWorkflowDataPo);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    /**
-     * 通知退款
-     *
-     * @param onlinePayPo
-     */
-    public void doPayFeeMoney(OnlinePayPo onlinePayPo) throws Exception {
-        //查询小区信息
-        OnlinePayDto onlinePayDto = new OnlinePayDto();
-        onlinePayDto.setPayId(onlinePayPo.getPayId());
-        onlinePayDto.setState(OnlinePayDto.STATE_WT);
-        List<OnlinePayDto> onlinePayDtos = onlinePayV1InnerServiceSMOImpl.queryOnlinePays(onlinePayDto);
-        if (onlinePayDtos == null || onlinePayDtos.size() < 1) {
-            return;
-        }
-        String communityId = "";
-        // todo 查询退费明细
-        OnlinePayRefundDto onlinePayRefundDto = new OnlinePayRefundDto();
-        onlinePayRefundDto.setPayId(onlinePayDtos.get(0).getPayId());
-        onlinePayRefundDto.setState(OnlinePayDto.STATE_WT);
-        List<OnlinePayRefundDto> onlinePayRefundDtos = onlinePayRefundV1InnerServiceSMOImpl.queryOnlinePayRefunds(onlinePayRefundDto);
-        String tranNo = GenerateCodeFactory.getGeneratorId("11");
-        if(onlinePayRefundDtos != null && onlinePayRefundDtos.size() >0){
-            tranNo = onlinePayRefundDtos.get(0).getRefundId();
-            communityId = onlinePayRefundDtos.get(0).getCommunityId();
-        }
-
-
-
-        String mchtNo_SM4 = CommunitySettingFactory.getValue(communityId, "mchtNo_SM4");
-
-
-
-
-        Map<String, Object> params = new HashMap<>();
-        params.put("version", VERSION);// 版本号 1.0
-        params.put("mcht_no", mchtNo_SM4);// 收款商户编号
-        params.put("tran_no", tranNo);// 商户流水
-        params.put("org_tran_no", onlinePayDtos.get(0).getOrderId());// 原平台流水
-        params.put("device_ip", "172.0.0.1");// 设备发起交易IP
-        params.put("amt", onlinePayDtos.get(0).getRefundFee());// 交易金额
-        params.put("ware_name", onlinePayDtos.get(0).getPayName());// 摘要备注
-
-        // 对准备加签参数排序
-        String decryParams = EncryptDecryptFactory.execute(communityId, refundUrl, params);
-
-        JSONObject paramOut = JSONObject.parseObject(decryParams);
-        if ( !"SUCCESS".equals(paramOut.getString("status")) || !"SUCCESS".equals(paramOut.getString("deal_status"))) {
-            doUpdateOnlinePay(onlinePayDtos.get(0).getPayId(), OnlinePayDto.STATE_FT, "退款失败" + paramOut.getString("return_message"));
-            return;
-        }
-        if ( !"0000".equals(paramOut.getString("return_code")) && !"0001".equals(paramOut.getString("return_code"))) {
-            doUpdateOnlinePay(onlinePayDtos.get(0).getPayId(), OnlinePayDto.STATE_FT, "退款失败" + paramOut.getString("return_message"));
-            return;
-        }
-        if("0001".equals(paramOut.getString("return_code"))){
-            doUpdateOnlinePay(onlinePayDtos.get(0).getPayId(), OnlinePayDto.STATE_CT, paramOut.getString("return_message"));
-            return;
-        }
-
-        doUpdateOnlinePay(onlinePayDtos.get(0).getPayId(), OnlinePayDto.STATE_CT, "退款完成");
-
-    }
-
-    private void doUpdateOnlinePay(String payId, String state, String message) {
-        OnlinePayPo onlinePayPo = new OnlinePayPo();
-        onlinePayPo.setMessage(message.length() > 1000 ? message.substring(0, 1000) : message);
-        onlinePayPo.setPayId(payId);
-        onlinePayPo.setState(state);
-        onlinePayV1InnerServiceSMOImpl.updateOnlinePay(onlinePayPo);
-
-        // todo 查询退费明细
-        OnlinePayRefundDto onlinePayRefundDto = new OnlinePayRefundDto();
-        onlinePayRefundDto.setPayId(payId);
-        onlinePayRefundDto.setState(OnlinePayDto.STATE_WT);
-        List<OnlinePayRefundDto> onlinePayRefundDtos = onlinePayRefundV1InnerServiceSMOImpl.queryOnlinePayRefunds(onlinePayRefundDto);
-
-        if(onlinePayRefundDtos == null || onlinePayRefundDtos.size() < 1){
-            return;
-        }
-
-        OnlinePayRefundPo onlinePayRefundPo = new OnlinePayRefundPo();
-        onlinePayRefundPo.setRefundId(onlinePayRefundDtos.get(0).getRefundId());
-        onlinePayRefundPo.setMessage(message.length() > 1000 ? message.substring(0, 1000) : message);
-        onlinePayRefundPo.setState(state);
-        onlinePayRefundV1InnerServiceSMOImpl.updateOnlinePayRefund(onlinePayRefundPo);
-    }
-
-    private byte[] getPkcs12(String fileName) {
-        List<FileDto> fileDtos = new ArrayList<>();
-        byte[] context = null;
-        String ftpPath = "hc/";
-        String ossSwitch = MappingCache.getValue(MappingConstant.FILE_DOMAIN, OSSUtil.OSS_SWITCH);
-        if (StringUtil.isEmpty(ossSwitch) || !OSSUtil.OSS_SWITCH_OSS.equals(ossSwitch)) {
-            String ftpServer = MappingCache.getValue(FtpUploadTemplate.FTP_DOMAIN, FtpUploadTemplate.FTP_SERVER);
-            int ftpPort = Integer.parseInt(MappingCache.getValue(FtpUploadTemplate.FTP_DOMAIN, FtpUploadTemplate.FTP_PORT));
-            String ftpUserName = MappingCache.getValue(FtpUploadTemplate.FTP_DOMAIN, FtpUploadTemplate.FTP_USERNAME);
-            String ftpUserPassword = MappingCache.getValue(FtpUploadTemplate.FTP_DOMAIN, FtpUploadTemplate.FTP_USERPASSWORD);
-            context = ftpUploadTemplate.downFileByte(ftpPath, fileName, ftpServer,
-                    ftpPort, ftpUserName,
-                    ftpUserPassword);
-        } else {
-            context = ossUploadTemplate.downFileByte(ftpPath, fileName, "",
-                    0, "",
-                    "");
-        }
-        return context;
-    }
-}

+ 0 - 173
service-job/src/main/java/com/java110/job/adapt/returnMoney/bbg/lib/AesEncrypt.java

@@ -1,173 +0,0 @@
-package com.java110.job.adapt.returnMoney.bbg.lib;
-
-import com.alibaba.fastjson.JSONObject;
-import org.bouncycastle.jce.provider.BouncyCastleProvider;
-
-import javax.crypto.Cipher;
-import javax.crypto.spec.IvParameterSpec;
-import javax.crypto.spec.SecretKeySpec;
-import java.net.URLDecoder;
-import java.net.URLEncoder;
-import java.security.Security;
-import java.security.spec.AlgorithmParameterSpec;
-
-/**
- * aes 加解密相关工具类
- * 
- * @author bbw
- *
- */
-public class AesEncrypt {
-	public final static String ivParameter = "0000000000000000";
-	private static final String CHARSET_NAME_UTF8 = "UTF-8";
-	
-    static {
-        Security.addProvider(new BouncyCastleProvider());
-        Security.setProperty("crypto.policy", "unlimited");
-    }
-
-	public static String encrypt(String sSrc, String encodingFormat, String sKey) throws Exception {
-		Security.addProvider(new BouncyCastleProvider());
-		Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
-		byte[] raw = sKey.getBytes();
-		SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
-		IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
-		cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
-		byte[] encrypted = cipher.doFinal(sSrc.getBytes(encodingFormat));
-		return Base64Util.encode(encrypted);
-	}
-
-	public static byte[] encryptByte(String sSrc, String encodingFormat, String sKey) throws Exception {
-		Security.addProvider(new BouncyCastleProvider());
-		Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
-		byte[] raw = sKey.getBytes();
-		SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
-		IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
-		cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
-		byte[] encrypted = cipher.doFinal(sSrc.getBytes(encodingFormat));
-		return encrypted;
-	}
-
-	public static byte[] encryptByte(String sSrc, String encodingFormat, byte[] raw) throws Exception {
-		Security.addProvider(new BouncyCastleProvider());
-		Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
-		SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
-		IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
-		cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
-		byte[] encrypted = cipher.doFinal(sSrc.getBytes(encodingFormat));
-		return encrypted;
-	}
-
-	public static String decrypt(String sSrc, String encodingFormat, String sKey) throws Exception {
-		Security.addProvider(new BouncyCastleProvider());
-		try {
-			byte[] raw = sKey.getBytes("ASCII");
-			SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
-			Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
-			IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
-			cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
-			byte[] encrypted1 = Base64Util.decode(sSrc);
-			byte[] original = cipher.doFinal(encrypted1);
-			String originalString = new String(original, encodingFormat);
-			return originalString;
-		} catch (Exception ex) {
-			return null;
-		}
-	}
-
-	public static byte[] decryptByte(byte[] bt, String sKey) throws Exception {
-		Security.addProvider(new BouncyCastleProvider());
-		try {
-			byte[] raw = sKey.getBytes();
-			SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
-			Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
-			IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
-			cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
-			byte[] original = cipher.doFinal(bt);
-			return original;
-		} catch (Exception ex) {
-			return null;
-		}
-	}
-
-	public static String parseByte2HexStr(byte buf[]) {
-		StringBuffer sb = new StringBuffer();
-		for (int i = 0; i < buf.length; i++) {
-			String hex = Integer.toHexString(buf[i] & 0xFF);
-			if (hex.length() == 1) {
-				hex = '0' + hex;
-			}
-			sb.append(hex.toUpperCase());
-		}
-		return sb.toString();
-	}
-
-	public static byte[] parseHexStr2Byte(String hexStr) {
-		if (hexStr.length() < 1)
-			return null;
-		byte[] result = new byte[hexStr.length() / 2];
-		for (int i = 0; i < hexStr.length() / 2; i++) {
-			int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
-			int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16);
-			result[i] = (byte) (high * 16 + low);
-		}
-		return result;
-	}
-
-	// 法院一案一户加密
-	public static String ocoaEncrypt(String content, String aesKey, String aesIV) throws Exception {
-		Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
-		SecretKeySpec keySpec = new SecretKeySpec(aesKey.getBytes(CHARSET_NAME_UTF8), "AES");
-		AlgorithmParameterSpec paramSpec = new IvParameterSpec(aesIV.getBytes());
-		cipher.init(Cipher.ENCRYPT_MODE, keySpec, paramSpec);
-		byte[] result = cipher.doFinal(content.getBytes(CHARSET_NAME_UTF8));
-		return URLEncoder.encode(Base64Util.encode(result), "UTF-8");
-	}
-
-	// 法院一案一户解密
-	public static String ocoaDecrypt(String content, String aesKey, String aesIV) throws Exception {
-		try {
-			Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
-			SecretKeySpec keySpec = new SecretKeySpec(aesKey.getBytes(CHARSET_NAME_UTF8), "AES");
-			AlgorithmParameterSpec paramSpec = new IvParameterSpec(aesIV.getBytes());
-			cipher.init(Cipher.DECRYPT_MODE, keySpec, paramSpec);
-			return new String(cipher.doFinal(Base64Util.decode(URLDecoder.decode(content, "UTF-8"))), CHARSET_NAME_UTF8);
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		return "";
-	}
-	
-	/**
-	  * 异或运算
-	  * 
-	  */
-	public static String strEncAndDec(String src) {
-		// 字符串转成字符数组
-		char[] c = src.toCharArray();
-		// 循环给字符数组加密
-		for (int i = 0; i < c.length; i++) {
-			c[i] = (char) (c[i] ^ 1);
-		}
-		return new String(c);
-	}
-
-    public static void main(String[] args) throws Exception {
-        JSONObject jsonObject = new JSONObject();
-        jsonObject.put("ZH", "0003999");
-        jsonObject.put("AH", "");
-        String content = JSONObject.toJSONString(jsonObject);
-        String s1 = ocoaEncrypt(content, "2021YHSYSHYAKXTK", "2021YHSYSHYAKXTV");
-        System.out.println("密文:" + s1);
-        String result = ocoaDecrypt(s1, "2021YHSYSHYAKXTK", "2021YHSYSHYAKXTV");
-        System.out.println("解密:" + result);
-        System.out.println(14584308/16415104f);
-        
-        String authCode = "990000003458LBU3133170411108125";
-        System.out.println("付款码:" + authCode);
-        String mchtNo = authCode.substring(12);
-        System.out.println("第13位开始截取:" + mchtNo);
-        System.out.println("企业商户号:" + strEncAndDec(mchtNo));
-    }
-    
-}

+ 0 - 37
service-job/src/main/java/com/java110/job/adapt/returnMoney/bbg/lib/Base64Util.java

@@ -1,37 +0,0 @@
-package com.java110.job.adapt.returnMoney.bbg.lib;
-
-import org.apache.commons.codec.binary.Base64;
-
-/**
- * <p>
- * BASE64编码解码工具包
- */
-public class Base64Util {
-
-	/**
-	 * <p>
-	 * BASE64字符串解码为二进制数据
-	 * </p>
-	 *
-	 * @param base64
-	 * @return
-	 * @throws Exception
-	 */
-	public static byte[] decode(String base64) throws Exception {
-		return Base64.decodeBase64(base64.getBytes());
-	}
-
-	/**
-	 * <p>
-	 * 二进制数据编码为BASE64字符串
-	 * </p>
-	 *
-	 * @param bytes
-	 * @return
-	 * @throws Exception
-	 */
-	public static String encode(byte[] bytes) throws Exception {
-		return new String(Base64.encodeBase64(bytes));
-	}
-
-}

+ 0 - 171
service-job/src/main/java/com/java110/job/adapt/returnMoney/bbg/lib/CAUtil.java

@@ -1,171 +0,0 @@
-package com.java110.job.adapt.returnMoney.bbg.lib;
-
-import org.apache.commons.codec.binary.Base64;
-
-import java.io.*;
-import java.security.*;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateFactory;
-import java.security.cert.X509Certificate;
-import java.security.spec.PKCS8EncodedKeySpec;
-import java.security.spec.X509EncodedKeySpec;
-import java.util.Enumeration;
-
-/**
- * 验证证书公共类
- * 
- */
-public class CAUtil {
-	private static final String DEFAULT_CHARSET = "UTF-8";
-	private static final String KEY_ALGORITHM = "RSA";
-	private static final String SIGNATURE_ALGORITHM = "SHA256withRSA";
-
-	/**
-	 * 判断字符串是否为null或空 true为空
-	 */
-	public static boolean isNullOrEmpty(String str) {
-		return (str == null || str.length() == 0);
-	}
-
-	// 获取私钥
-	public static PrivateKey getPrivateKey(InputStream is, String privateKeyPwd) throws Exception {
-		KeyStore ks;
-		try {
-			ks = KeyStore.getInstance("PKCS12");
-			char[] nPassword = null;
-			if (isNullOrEmpty(privateKeyPwd)) {
-				privateKeyPwd = null;
-			} else {
-				nPassword = privateKeyPwd.toCharArray();
-			}
-			ks.load(is, nPassword);
-			is.close();
-			Enumeration<?> enumas = ks.aliases();
-			String keyAlias = null;
-			if (enumas.hasMoreElements()) {
-				keyAlias = (String) enumas.nextElement();
-			}
-			PrivateKey prikey = (PrivateKey) ks.getKey(keyAlias, nPassword);
-			return prikey;
-		} catch (KeyStoreException e) {
-			throw new Exception("获取KeyStore失败");
-		} catch (FileNotFoundException e) {
-			throw new Exception("无效的私钥地址");
-		} catch (NoSuchAlgorithmException e) {
-			throw new Exception("读取私钥失败");
-		} catch (CertificateException e) {
-			throw new Exception("加载证书失败");
-		} catch (IOException e) {
-			throw new Exception("读取证书失败");
-		} catch (UnrecoverableKeyException e) {
-			throw new Exception("获取私钥失败");
-		}
-	}
-
-	// 获取公钥
-	public static PublicKey getPublicKey(String publicKeyAddr) throws Exception {
-		try {
-			CertificateFactory certificatefactory = CertificateFactory.getInstance("X.509");
-			FileInputStream bais = new FileInputStream(publicKeyAddr);
-			X509Certificate Cert = (X509Certificate) certificatefactory.generateCertificate(bais);
-			bais.close();
-			PublicKey pk = Cert.getPublicKey();
-			return pk;
-		} catch (CertificateException e) {
-			throw new Exception("获取公钥失败");
-		}
-	}
-
-	/**
-	 * RSA签名
-	 * 
-	 * @param localPrivKey
-	 *            私钥
-	 * @param plaintext
-	 *            需要签名的信息
-	 * @return byte[]
-	 * @throws Exception
-	 */
-	public static byte[] signRSA(byte[] plainBytes, boolean useBase64Code, PrivateKey privKey) throws Exception {
-		Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
-		signature.initSign(privKey);
-		signature.update(plainBytes);
-		// 如果是Base64编码的话,需要对签名后的数组以Base64编码
-		if (useBase64Code) {
-			return Base64.encodeBase64(signature.sign());
-		} else {
-			return signature.sign();
-		}
-	}
-
-	/**
-	 * 验签操作
-	 * 
-	 * @param peerPubKey
-	 *            公钥
-	 * @param plainBytes
-	 *            需要验签的信息
-	 * @param signBytes
-	 *            签名信息
-	 * @return boolean
-	 */
-	public static boolean verifyRSA(byte[] plainBytes, byte[] signBytes, boolean useBase64Code, PublicKey pubKey) throws Exception {
-		boolean isValid = false;
-		Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
-		signature.initVerify(pubKey);
-		signature.update(plainBytes);
-		// 如果是Base64编码的话,需要对验签的数组以Base64解码
-		if (useBase64Code) {
-			isValid = signature.verify(Base64.decodeBase64(signBytes));
-		} else {
-			isValid = signature.verify(signBytes);
-		}
-		return isValid;
-	}
-	
-	/**
-	 * SHA256withRSA签名(RSA2)
-	 * 
-	 */
-	public static String rsa256Sign(String content, String charset, String privateKey) throws Exception {
-		if (isNullOrEmpty(charset)) {
-			charset = DEFAULT_CHARSET;
-		}
-		if (isNullOrEmpty(privateKey)) {
-			return null;
-		}
-		KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
-		byte[] encodedKey = StreamUtil.readText(new ByteArrayInputStream(privateKey.getBytes())).getBytes();
-		encodedKey = Base64.decodeBase64(encodedKey);
-		PrivateKey priKey = keyFactory.generatePrivate(new PKCS8EncodedKeySpec(encodedKey));
-		Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
-		signature.initSign(priKey);
-		if (isNullOrEmpty(charset)) {
-			signature.update(content.getBytes());
-		} else {
-			signature.update(content.getBytes(charset));
-		}
-		byte[] signed = signature.sign();
-		return new String(Base64.encodeBase64(signed));
-	}
-
-	/**
-	 * SHA256withRSA验签(RSA2)
-	 * 
-	 */
-	public static boolean rsa256Verify(byte[] content, String sign, String publicKey) throws Exception {
-		if (isNullOrEmpty(publicKey)) {
-			return false;
-		}
-		KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
-		StringWriter writer = new StringWriter();
-		StreamUtil.io(new InputStreamReader(new ByteArrayInputStream(publicKey.getBytes())), writer);
-		byte[] encodedKey = writer.toString().getBytes();
-		encodedKey = Base64.decodeBase64(encodedKey);
-		PublicKey pubKey = keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));
-		Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
-		signature.initVerify(pubKey);
-		signature.update(content);
-		return signature.verify(Base64.decodeBase64(sign.getBytes()));
-	}
-}

+ 0 - 304
service-job/src/main/java/com/java110/job/adapt/returnMoney/bbg/lib/GmUtil.java

@@ -1,304 +0,0 @@
-package com.java110.job.adapt.returnMoney.bbg.lib;
-
-import org.bouncycastle.asn1.gm.GMNamedCurves;
-import org.bouncycastle.asn1.gm.GMObjectIdentifiers;
-import org.bouncycastle.asn1.x9.X9ECParameters;
-import org.bouncycastle.crypto.engines.SM2Engine;
-import org.bouncycastle.crypto.params.ECDomainParameters;
-import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
-import org.bouncycastle.crypto.params.ECPublicKeyParameters;
-import org.bouncycastle.crypto.params.ParametersWithRandom;
-import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey;
-import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey;
-import org.bouncycastle.jce.provider.BouncyCastleProvider;
-import org.bouncycastle.jce.spec.ECParameterSpec;
-import org.bouncycastle.jce.spec.ECPrivateKeySpec;
-import org.bouncycastle.jce.spec.ECPublicKeySpec;
-import org.bouncycastle.util.encoders.Hex;
-
-import javax.crypto.Cipher;
-import javax.crypto.KeyGenerator;
-import javax.crypto.spec.SecretKeySpec;
-import java.math.BigInteger;
-import java.security.*;
-import java.security.spec.PKCS8EncodedKeySpec;
-import java.security.spec.X509EncodedKeySpec;
-
-/**
- * 国密加密算法
- */
-public class GmUtil {
-	private static final String DEFAULT_CHARSET = "UTF-8";
-	public static final String ALGORITHM_NAME = "SM4";
-	// 加密算法/分组加密模式/分组填充方式
-	// PKCS5Padding-以8个字节为一组进行分组加密
-	// 定义分组加密模式使用:PKCS5Padding
-	public static final String ALGORITHM_NAME_ECB_PADDING = "SM4/ECB/PKCS7Padding";
-	// 128-32位16进制;256-64位16进制
-	public static final int DEFAULT_KEY_SIZE = 128;
-	// 椭圆曲线ECParameters ASN.1 结构
-	private static X9ECParameters x9ECParameters = GMNamedCurves.getByName("sm2p256v1");
-	// 椭圆曲线公钥或私钥的基本域参数。
-	private static ECParameterSpec ecDomainParameters = new ECParameterSpec(x9ECParameters.getCurve(), x9ECParameters.getG(), x9ECParameters.getN());
-
-	static {
-		Security.addProvider(new BouncyCastleProvider());
-	}
-
-	/**
-	 * 将Base64转码的公钥串,转化为公钥对象
-	 *
-	 */
-	public static PublicKey createPublicKey(String publicKey) {
-		PublicKey publickey = null;
-		try {
-			X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(Base64Util.decode(publicKey));
-			KeyFactory keyFactory = KeyFactory.getInstance("EC", new BouncyCastleProvider());
-			publickey = keyFactory.generatePublic(publicKeySpec);
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		return publickey;
-	}
-
-	/**
-	 * 将Base64转码的私钥串,转化为私钥对象
-	 *
-	 */
-	public static PrivateKey createPrivateKey(String privateKey) {
-		PrivateKey publickey = null;
-		try {
-			PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64Util.decode(privateKey));
-			KeyFactory keyFactory = KeyFactory.getInstance("EC", new BouncyCastleProvider());
-			publickey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		return publickey;
-	}
-
-	/**
-	 * 根据publicKey对原始数据data,使用SM2加密
-	 */
-	public static byte[] encrypt(byte[] data, PublicKey publicKey) {
-		ECPublicKeyParameters localECPublicKeyParameters = null;
-
-		if (publicKey instanceof BCECPublicKey) {
-			BCECPublicKey localECPublicKey = (BCECPublicKey) publicKey;
-			ECParameterSpec localECParameterSpec = localECPublicKey.getParameters();
-			ECDomainParameters localECDomainParameters = new ECDomainParameters(localECParameterSpec.getCurve(), localECParameterSpec.getG(), localECParameterSpec.getN());
-			localECPublicKeyParameters = new ECPublicKeyParameters(localECPublicKey.getQ(), localECDomainParameters);
-		}
-		SM2Engine localSM2Engine = new SM2Engine();
-		localSM2Engine.init(true, new ParametersWithRandom(localECPublicKeyParameters, new SecureRandom()));
-		byte[] arrayOfByte2;
-		try {
-			arrayOfByte2 = localSM2Engine.processBlock(data, 0, data.length);
-			return arrayOfByte2;
-		} catch (Exception e) {
-			e.printStackTrace();
-			return null;
-		}
-	}
-
-	/**
-	 * 根据privateKey对加密数据encodedata,使用SM2解密
-	 */
-	public static byte[] decrypt(byte[] encodedata, PrivateKey privateKey) {
-		SM2Engine localSM2Engine = new SM2Engine();
-		BCECPrivateKey sm2PriK = (BCECPrivateKey) privateKey;
-		ECParameterSpec localECParameterSpec = sm2PriK.getParameters();
-		ECDomainParameters localECDomainParameters = new ECDomainParameters(localECParameterSpec.getCurve(), localECParameterSpec.getG(), localECParameterSpec.getN());
-		ECPrivateKeyParameters localECPrivateKeyParameters = new ECPrivateKeyParameters(sm2PriK.getD(), localECDomainParameters);
-		localSM2Engine.init(false, localECPrivateKeyParameters);
-		try {
-			byte[] arrayOfByte3 = localSM2Engine.processBlock(encodedata, 0, encodedata.length);
-			return arrayOfByte3;
-		} catch (Exception e) {
-			e.printStackTrace();
-			return null;
-		}
-	}
-
-	/**
-	 * 私钥签名
-	 */
-	public static byte[] signByPrivateKey(byte[] data, PrivateKey privateKey) throws Exception {
-		Signature sig = Signature.getInstance(GMObjectIdentifiers.sm2sign_with_sm3.toString(), BouncyCastleProvider.PROVIDER_NAME);
-		sig.initSign(privateKey);
-		sig.update(data);
-		return sig.sign();
-	}
-
-	/**
-	 * 公钥验签
-	 */
-	public static boolean verifyByPublicKey(byte[] data, PublicKey publicKey, byte[] signature) throws Exception {
-		Signature sig = Signature.getInstance(GMObjectIdentifiers.sm2sign_with_sm3.toString(), BouncyCastleProvider.PROVIDER_NAME);
-		sig.initVerify(publicKey);
-		sig.update(data);
-		return sig.verify(signature);
-	}
-
-	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	/**
-	 * @Description 公钥字符串转换为 BCECPublicKey 公钥对象
-	 * @param pubKeyHex
-	 *            64字节十六进制公钥字符串(如果公钥字符串为65字节首个字节为0x04:表示该公钥为非压缩格式,操作时需要删除)
-	 * @return BCECPublicKey SM2公钥对象
-	 */
-	private static BCECPublicKey getECPublicKeyByPublicKeyHex(String pubKeyHex) {
-		// 截取64字节有效的SM2公钥(如果公钥首个字节为0x04)
-		if (pubKeyHex.length() > 128) {
-			pubKeyHex = pubKeyHex.substring(pubKeyHex.length() - 128);
-		}
-		// 将公钥拆分为x,y分量(各32字节)
-		String stringX = pubKeyHex.substring(0, 64);
-		String stringY = pubKeyHex.substring(stringX.length());
-		// 将公钥x、y分量转换为BigInteger类型
-		BigInteger x = new BigInteger(stringX, 16);
-		BigInteger y = new BigInteger(stringY, 16);
-		// 通过公钥x、y分量创建椭圆曲线公钥规范
-		ECPublicKeySpec ecPublicKeySpec = new ECPublicKeySpec(x9ECParameters.getCurve().createPoint(x, y), ecDomainParameters);
-		// 通过椭圆曲线公钥规范,创建出椭圆曲线公钥对象(可用于SM2加密及验签)
-		return new BCECPublicKey("EC", ecPublicKeySpec, BouncyCastleProvider.CONFIGURATION);
-	}
-
-	/**
-	 * @Description 私钥字符串转换为 BCECPrivateKey 私钥对象
-	 * @param privateKeyHex
-	 *            32字节十六进制私钥字符串
-	 * @return BCECPrivateKey SM2私钥对象
-	 */
-	private static BCECPrivateKey getBCECPrivateKeyByPrivateKeyHex(String privateKeyHex) {
-		// 将十六进制私钥字符串转换为BigInteger对象
-		BigInteger d = new BigInteger(privateKeyHex, 16);
-		// 通过私钥和私钥域参数集创建椭圆曲线私钥规范
-		ECPrivateKeySpec ecPrivateKeySpec = new ECPrivateKeySpec(d, ecDomainParameters);
-		// 通过椭圆曲线私钥规范,创建出椭圆曲线私钥对象(可用于SM2解密和签名)
-		return new BCECPrivateKey("EC", ecPrivateKeySpec, BouncyCastleProvider.CONFIGURATION);
-	}
-
-	/**
-	 * @Description 公钥加密
-	 */
-	public static String encryptSm2(String data, String publicKeyHex) {
-		BCECPublicKey publicKey = getECPublicKeyByPublicKeyHex(publicKeyHex);
-		// 加密模式
-		SM2Engine.Mode mode = SM2Engine.Mode.C1C3C2;
-		// 通过公钥对象获取公钥的基本域参数。
-		ECParameterSpec ecParameterSpec = publicKey.getParameters();
-		ECDomainParameters ecDomainParameters = new ECDomainParameters(ecParameterSpec.getCurve(), ecParameterSpec.getG(), ecParameterSpec.getN());
-		// 通过公钥值和公钥基本参数创建公钥参数对象
-		ECPublicKeyParameters ecPublicKeyParameters = new ECPublicKeyParameters(publicKey.getQ(), ecDomainParameters);
-		// 根据加密模式实例化SM2公钥加密引擎
-		SM2Engine sm2Engine = new SM2Engine(mode);
-		// 初始化加密引擎
-		sm2Engine.init(true, new ParametersWithRandom(ecPublicKeyParameters, new SecureRandom()));
-		byte[] arrayOfBytes = null;
-		try {
-			// 将明文字符串转换为指定编码的字节串
-			byte[] in = Hex.decode(data);
-			// 通过加密引擎对字节数串行加密
-			arrayOfBytes = sm2Engine.processBlock(in, 0, in.length);
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		// 将加密后的字节串转换为十六进制字符串
-		return Hex.toHexString(arrayOfBytes).toUpperCase();
-	}
-
-	/**
-	 * @Description 私钥解密
-	 */
-	public static String decryptSm2(String cipherData, String privateKeyHex) {
-		BCECPrivateKey privateKey = getBCECPrivateKeyByPrivateKeyHex(privateKeyHex);
-		// 解密模式
-		SM2Engine.Mode mode = SM2Engine.Mode.C1C3C2;
-		// 将十六进制字符串密文转换为字节数组(需要与加密一致,加密是:加密后的字节数组转换为了十六进制字符串)
-		byte[] cipherDataByte = Hex.decode(cipherData);
-		// 通过私钥对象获取私钥的基本域参数。
-		ECParameterSpec ecParameterSpec = privateKey.getParameters();
-		ECDomainParameters ecDomainParameters = new ECDomainParameters(ecParameterSpec.getCurve(), ecParameterSpec.getG(), ecParameterSpec.getN());
-		// 通过私钥值和私钥钥基本参数创建私钥参数对象
-		ECPrivateKeyParameters ecPrivateKeyParameters = new ECPrivateKeyParameters(privateKey.getD(), ecDomainParameters);
-		// 通过解密模式创建解密引擎并初始化
-		SM2Engine sm2Engine = new SM2Engine(mode);
-		sm2Engine.init(false, ecPrivateKeyParameters);
-		String result = null;
-		try {
-			// 通过解密引擎对密文字节串进行解密
-			byte[] arrayOfBytes = sm2Engine.processBlock(cipherDataByte, 0, cipherDataByte.length);
-			result = new String(arrayOfBytes, "utf-8");
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		return result;
-	}
-
-	///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	/**
-	 * 自动生成sm4密钥
-	 *
-	 */
-	public static String generateSm4Key() throws Exception {
-		KeyGenerator kg = KeyGenerator.getInstance(ALGORITHM_NAME, BouncyCastleProvider.PROVIDER_NAME);
-		kg.init(DEFAULT_KEY_SIZE, new SecureRandom());
-		byte[] sm4Key = kg.generateKey().getEncoded();
-		return new String(Hex.encode(sm4Key)).toUpperCase();
-	}
-
-	/**
-	 * 生成ECB暗号
-	 *
-	 */
-	private static Cipher generateSm4Cipher(String algorithmName, int mode, byte[] key) throws Exception {
-		Cipher cipher = Cipher.getInstance(algorithmName, BouncyCastleProvider.PROVIDER_NAME);
-		Key sm4Key = new SecretKeySpec(key, ALGORITHM_NAME);
-		cipher.init(mode, sm4Key);
-		return cipher;
-	}
-
-	/**
-	 * sm4加密
-	 *
-	 */
-	public static String encryptSm4(String data, String hexKey) {
-		try {
-			// 16进制字符串-->byte[]
-			byte[] keyData = Hex.decode(hexKey);
-			// String-->byte[]
-			byte[] srcData = data.getBytes(DEFAULT_CHARSET);
-			// 加密后的数组
-			Cipher cipher = generateSm4Cipher(ALGORITHM_NAME_ECB_PADDING, Cipher.ENCRYPT_MODE, keyData);
-			byte[] cipherArray = cipher.doFinal(srcData);
-			// byte[]-->hexString
-			return Hex.toHexString(cipherArray).toUpperCase();
-		} catch (Exception e) {
-			return null;
-		}
-	}
-
-	/**
-	 * sm4解密
-	 *
-	 */
-	public static String decryptSm4(String cipherText, String hexKey) {
-		// 用于接收解密后的字符串
-		String decryptStr = null;
-		// hexString-->byte[]
-		byte[] keyData = Hex.decode(hexKey);
-		// hexString-->byte[]
-		byte[] cipherData = Hex.decode(cipherText);
-		try {
-			// 解密
-			Cipher cipher = generateSm4Cipher(ALGORITHM_NAME_ECB_PADDING, Cipher.DECRYPT_MODE, keyData);
-			byte[] srcData = cipher.doFinal(cipherData);
-			decryptStr = new String(srcData, DEFAULT_CHARSET);
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-		return decryptStr;
-	}
-
-}

+ 0 - 119
service-job/src/main/java/com/java110/job/adapt/returnMoney/bbg/lib/HttpRequestUtil.java

@@ -1,119 +0,0 @@
-package com.java110.job.adapt.returnMoney.bbg.lib;
-
-import org.apache.http.HttpHost;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
-import org.apache.http.util.EntityUtils;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URLDecoder;
-
-/**
- * http请求工具类
- * 
- * @author lizhongfu
- *
- */
-public class HttpRequestUtil {
-	private final static int connectTimeOut = 30000;// 连接超时时间
-	private final static int readTimeOut = 30000;// 读超时时间
-
-	/**
-	 * httpPost
-	 * 
-	 * @param url       路径
-	 * @param jsonParam 参数
-	 * @return
-	 */
-	public static String httpPost(String url, String jsonParam) throws Exception {
-		return httpPost(url, jsonParam, false);
-	}
-
-	/**
-	 * post请求
-	 *
-	 * @return
-	 */
-	public static String httpPost(String url, String jsonParam, boolean bUseProxy) throws Exception {
-		// post请求返回结果
-		CloseableHttpClient client = HttpClients.createDefault();
-		HttpPost method = new HttpPost(url);
-		String str = "";
-		try {
-			RequestConfig config1 = null;
-			// 是否采用代理
-			if (bUseProxy) {
-				// HttpHost proxy = new HttpHost("代理服务器IP", 代理服务器端口);
-				HttpHost proxy = new HttpHost("127.0.0.1", 8828);
-				config1 = RequestConfig.custom().setProxy(proxy).setConnectTimeout(connectTimeOut).setSocketTimeout(readTimeOut).build();
-			} else {
-				config1 = RequestConfig.custom().setConnectTimeout(connectTimeOut).setSocketTimeout(readTimeOut).build();
-			}
-			method.setConfig(config1);
-			if (null != jsonParam) {
-				// 解决中文乱码问题
-				StringEntity entity = new StringEntity(jsonParam, "utf-8");
-				entity.setContentEncoding("UTF-8");
-				entity.setContentType("application/json");
-				// entity.setContentType("application/x-www-form-urlencoded");
-				method.setEntity(entity);
-			}
-			HttpResponse result = client.execute(method);
-			url = URLDecoder.decode(url, "UTF-8");
-			/** 请求发送成功,并得到响应 **/
-			if (result.getStatusLine().getStatusCode() == 200) {
-				/** 读取服务器返回过来的json字符串数据 **/
-				// str = EntityUtils.toString(result.getEntity());
-				str = EntityUtils.toString(result.getEntity(), "UTF-8");
-			}
-		} catch (IOException e) {
-			System.err.println("网络异常:" + e.getMessage());
-			// 网络异常
-			throw e;
-		} catch (Exception e) {
-			System.err.println("系统错误:" + e.getMessage());
-			throw e;
-		}
-		return str;
-	}
-
-	/**
-	 * 获取到下载的outputstream
-	 * 
-	 * @param url
-	 * @return
-	 * @throws Exception
-	 */
-	public static ByteArrayOutputStream httpGetToStream(String url) throws Exception {
-		InputStream input = null;
-		CloseableHttpClient client = null;
-		try {
-			client = HttpClients.createDefault();
-			// 发送get请求
-			HttpGet request = new HttpGet(url);
-			HttpResponse response = client.execute(request);
-			input = response.getEntity().getContent();
-			ByteArrayOutputStream baos = new ByteArrayOutputStream();
-			byte[] buff = new byte[1024];
-			int len;
-			while ((len = input.read(buff)) > -1) {
-				baos.write(buff, 0, len);
-			}
-			baos.flush();
-			return baos;
-		} catch (Exception e) {
-			System.err.println("系统错误:" + e.getMessage());
-			return null;
-		} finally {
-			input.close();
-			client.close();
-		}
-	}
-}

+ 0 - 73
service-job/src/main/java/com/java110/job/adapt/returnMoney/bbg/lib/JsonUtil.java

@@ -1,73 +0,0 @@
-package com.java110.job.adapt.returnMoney.bbg.lib;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.TypeReference;
-import com.alibaba.fastjson.parser.Feature;
-import com.alibaba.fastjson.serializer.SerializerFeature;
-
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.TreeMap;
-
-public class JsonUtil {
-	/**
-	 * 将json转化成map
-	 *
-	 * @param json
-	 * @return
-	 */
-	public static Map<String, Object> jsonToMap(String json) {
-		try {
-			return JSON.parseObject(json, new TypeReference<Map<String, Object>>() {
-			}, Feature.OrderedField);
-		} catch (Exception e) {
-			return new HashMap<>();
-		}
-
-	}
-
-	/**
-	 * 将map转化成json
-	 *
-	 * @param map
-	 * @return
-	 */
-	public static String mapToJson(Map<String, Object> map) {
-		return JSON.toJSONString(map, SerializerFeature.WriteMapNullValue);
-	}
-
-	public static String mapToJson2(Map<String, String> map) throws Exception {
-		return JSON.toJSONString(map, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty);
-	}
-
-	/**
-	 * Json转Object
-	 *
-	 * @return
-	 */
-	public static <T> T jsonToObject(Class<T> clazz, String json) {
-		return JSON.parseObject(json, clazz);
-	}
-
-	/**
-	 * 对map 进行排序
-	 * 
-	 * @param map
-	 * @return
-	 */
-	public static Map<String, Object> sortMapByKey(Map<String, Object> map) {
-		if (map == null || map.isEmpty()) {
-			return null;
-		}
-		Map<String, Object> sortMap = new TreeMap<String, Object>(new Comparator<String>() {
-
-			@Override
-			public int compare(String str0, String str1) {
-				return str0.compareTo(str1);
-			}
-		});
-		sortMap.putAll(map);
-		return sortMap;
-	}
-}

+ 0 - 121
service-job/src/main/java/com/java110/job/adapt/returnMoney/bbg/lib/StreamUtil.java

@@ -1,121 +0,0 @@
-package com.java110.job.adapt.returnMoney.bbg.lib;
-
-import java.io.*;
-
-public class StreamUtil {
-
-	public StreamUtil() {
-
-	}
-
-	public static void io(InputStream in, OutputStream out) throws IOException {
-		io((InputStream) in, (OutputStream) out, -1);
-	}
-
-	public static void io(InputStream in, OutputStream out, int bufferSize) throws IOException {
-		if (bufferSize == -1) {
-			bufferSize = 8192;
-		}
-
-		byte[] buffer = new byte[bufferSize];
-
-		int amount;
-		while ((amount = in.read(buffer)) >= 0) {
-			out.write(buffer, 0, amount);
-		}
-
-	}
-
-	public static void io(Reader in, Writer out) throws IOException {
-		io((Reader) in, (Writer) out, -1);
-	}
-
-	public static void io(Reader in, Writer out, int bufferSize) throws IOException {
-		if (bufferSize == -1) {
-			bufferSize = 4096;
-		}
-
-		char[] buffer = new char[bufferSize];
-
-		int amount;
-		while ((amount = in.read(buffer)) >= 0) {
-			out.write(buffer, 0, amount);
-		}
-
-	}
-
-	public static OutputStream synchronizedOutputStream(OutputStream out) {
-		return new SynchronizedOutputStream(out);
-	}
-
-	public static OutputStream synchronizedOutputStream(OutputStream out, Object lock) {
-		return new SynchronizedOutputStream(out, lock);
-	}
-
-	public static String readText(InputStream in) throws IOException {
-		return readText(in, (String) null, -1);
-	}
-
-	public static String readText(InputStream in, String encoding) throws IOException {
-		return readText(in, encoding, -1);
-	}
-
-	public static String readText(InputStream in, String encoding, int bufferSize) throws IOException {
-		Reader reader = encoding == null ? new InputStreamReader(in) : new InputStreamReader(in, encoding);
-		return readText(reader, bufferSize);
-	}
-
-	public static String readText(Reader reader) throws IOException {
-		return readText(reader, -1);
-	}
-
-	public static String readText(Reader reader, int bufferSize) throws IOException {
-		StringWriter writer = new StringWriter();
-		io((Reader) reader, (Writer) writer, bufferSize);
-		return writer.toString();
-	}
-
-	private static class SynchronizedOutputStream extends OutputStream {
-		private OutputStream out;
-		private Object lock;
-
-		SynchronizedOutputStream(OutputStream out) {
-			this(out, out);
-		}
-
-		SynchronizedOutputStream(OutputStream out, Object lock) {
-			this.out = out;
-			this.lock = lock;
-		}
-
-		public void write(int datum) throws IOException {
-			synchronized (this.lock) {
-				this.out.write(datum);
-			}
-		}
-
-		public void write(byte[] data) throws IOException {
-			synchronized (this.lock) {
-				this.out.write(data);
-			}
-		}
-
-		public void write(byte[] data, int offset, int length) throws IOException {
-			synchronized (this.lock) {
-				this.out.write(data, offset, length);
-			}
-		}
-
-		public void flush() throws IOException {
-			synchronized (this.lock) {
-				this.out.flush();
-			}
-		}
-
-		public void close() throws IOException {
-			synchronized (this.lock) {
-				this.out.close();
-			}
-		}
-	}
-}

+ 0 - 186
service-job/src/main/java/com/java110/job/adapt/returnMoney/plutus/ReturnPayFeeToPlutusAdapt.java

@@ -1,186 +0,0 @@
-package com.java110.job.adapt.returnMoney.plutus;
-
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.java110.core.client.FtpUploadTemplate;
-import com.java110.core.client.OssUploadTemplate;
-import com.java110.core.factory.CommunitySettingFactory;
-import com.java110.core.factory.PlutusFactory;
-import com.java110.core.log.LoggerFactory;
-import com.java110.dto.wechat.OnlinePayDto;
-import com.java110.dto.wechat.SmallWeChatDto;
-import com.java110.dto.system.Business;
-import com.java110.intf.acct.IOnlinePayV1InnerServiceSMO;
-import com.java110.intf.fee.IReturnPayFeeInnerServiceSMO;
-import com.java110.intf.order.IOrderInnerServiceSMO;
-import com.java110.intf.store.ISmallWeChatInnerServiceSMO;
-import com.java110.job.adapt.DatabusAdaptImpl;
-import com.java110.job.adapt.returnMoney.wechat.ReturnPayFeeMoneyAdapt;
-import com.java110.po.wechat.OnlinePayPo;
-import com.java110.utils.cache.MappingCache;
-import com.java110.utils.constant.MappingConstant;
-import com.java110.utils.constant.WechatConstant;
-import com.java110.utils.util.BeanConvertUtil;
-import com.java110.utils.util.PayUtil;
-import com.java110.utils.util.StringUtil;
-import org.bouncycastle.util.encoders.Base64;
-import org.slf4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.web.client.RestTemplate;
-
-import java.util.List;
-
-/**
- * 退费审核通过后 通知 微信支付平台退款处理
- * 业务功能
- * <p>
- * 商户针对某一笔已经成功支付的订单发起退款。
- * <p>
- * 交互模式
- * <p>
- * 请求:后台请求交互模式
- * <p>
- * 返回结果:后台请求交互模式
- * <p>
- * 说明:支持部份退款;退到银行卡是非实时的,每个银行的处理速度不同,一般发起退款后1-3个工作日内到账。 当调用退款接口返回未知状态,需要调用退款查询接口查询实际退款状态 。 建议 5 秒调一次查询,调用 10 次后状态仍然未知,请在 3 个工作日后重新查询退款状态,或者使用对账单进行确认。
- * <p>
- * http://open.plutuspay.com/Index.html
- *
- * @author wuxw
- * @Date 2021-08-19 10:12
- */
-@Component(value = "returnPayFeeToPlutusAdapt")
-public class ReturnPayFeeToPlutusAdapt extends DatabusAdaptImpl {
-    @Autowired
-    private IReturnPayFeeInnerServiceSMO returnPayFeeInnerServiceSMOImpl;
-
-    @Autowired
-    private IOrderInnerServiceSMO orderInnerServiceSMOImpl;
-
-    @Autowired
-    private IOnlinePayV1InnerServiceSMO onlinePayV1InnerServiceSMOImpl;
-
-
-    @Autowired
-    private ISmallWeChatInnerServiceSMO smallWeChatInnerServiceSMOImpl;
-
-
-    @Autowired
-    private RestTemplate outRestTemplate;
-
-    public static final String wechatReturnUrl = "https://api.plutuspay.com/open/v2/refund";
-
-    private static Logger logger = LoggerFactory.getLogger(ReturnPayFeeMoneyAdapt.class);
-
-    @Autowired
-    private FtpUploadTemplate ftpUploadTemplate;
-
-    @Autowired
-    private OssUploadTemplate ossUploadTemplate;
-
-
-    @Override
-    public void execute(Business business, List<Business> businesses) {
-        JSONObject data = business.getData();
-        OnlinePayPo oaWorkflowDataPo = BeanConvertUtil.covertBean(data, OnlinePayPo.class);
-
-        try {
-            doPayFeeMoney(oaWorkflowDataPo);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-    }
-
-    /**
-     * 通知退款
-     *
-     * @param oaWorkflowDataPo
-     */
-    public void doPayFeeMoney(OnlinePayPo oaWorkflowDataPo) throws Exception {
-
-        //查询小区信息
-        OnlinePayDto onlinePayDto = new OnlinePayDto();
-        onlinePayDto.setPayId(oaWorkflowDataPo.getPayId());
-        onlinePayDto.setState(OnlinePayDto.STATE_WT);
-        List<OnlinePayDto> onlinePayDtos = onlinePayV1InnerServiceSMOImpl.queryOnlinePays(onlinePayDto);
-
-        if (onlinePayDtos == null || onlinePayDtos.size() < 1) {
-            return;
-        }
-
-//        String payPassword = "";
-//        String certData = "";
-
-        SmallWeChatDto smallWeChatDto = new SmallWeChatDto();
-        smallWeChatDto.setMchId(onlinePayDtos.get(0).getMchId());
-        smallWeChatDto.setAppId(onlinePayDtos.get(0).getAppId());
-        List<SmallWeChatDto> smallWeChatDtos = smallWeChatInnerServiceSMOImpl.querySmallWeChats(smallWeChatDto);
-        String privateKey = "";
-        String devId = "";
-        String payPassword = "";
-        String publicKey = "";
-        if (smallWeChatDtos == null || smallWeChatDtos.size() < 1) {
-            privateKey = MappingCache.getRemark(WechatConstant.WECHAT_DOMAIN, "PLUTUS_PRIVATE_KEY");
-            devId = MappingCache.getValue(WechatConstant.WECHAT_DOMAIN, "PLUTUS_DEV_ID");
-            payPassword = MappingCache.getValue(MappingConstant.WECHAT_STORE_DOMAIN, "key");
-            publicKey = MappingCache.getRemark(WechatConstant.WECHAT_DOMAIN, "PLUTUS_PUBLIC_KEY");
-        } else {
-            privateKey = CommunitySettingFactory.getRemark(smallWeChatDtos.get(0).getObjId(), "PLUTUS_PRIVATE_KEY");
-            devId = CommunitySettingFactory.getValue(smallWeChatDto.getObjId(), "PLUTUS_DEV_ID");
-            payPassword = smallWeChatDtos.get(0).getPayPassword();
-            publicKey = CommunitySettingFactory.getRemark(smallWeChatDtos.get(0).getObjId(), "PLUTUS_PUBLIC_KEY");
-        }
-
-
-        JSONObject parameters = new JSONObject();
-        parameters.put("sn", onlinePayDtos.get(0).getMchId());//商户号
-        parameters.put("outTradeId", onlinePayDtos.get(0).getOrderId());//商户号
-        parameters.put("outRefundId", onlinePayDtos.get(0).getPayId());//我们自己设定的退款申请号,约束为UK
-        parameters.put("refundAmount", PayUtil.moneyToIntegerStr(Double.parseDouble(onlinePayDtos.get(0).getTotalFee())));//订单金额 单位为分!!!这里稍微注意一下
-
-
-        String param = PlutusFactory.Encryption(parameters.toJSONString(), privateKey, payPassword, devId);
-        System.out.println(param);
-
-        String str = PlutusFactory.post(wechatReturnUrl, param);
-        System.out.println(str);
-
-        JSONObject json = JSON.parseObject(str);
-
-        String signature = json.getString("signature");
-        String content = json.getString("content");
-
-
-        //验签
-        Boolean verify = PlutusFactory.verify256(content, Base64.decode(signature), publicKey);
-        //验签成功
-        if (!verify) {
-            throw new IllegalArgumentException("支付失败签名失败");
-        }
-        //解密
-        byte[] bb = PlutusFactory.decrypt(Base64.decode(content), payPassword);
-        //服务器返回内容
-        String paramOut = new String(bb);
-        System.out.println(paramOut);
-
-        JSONObject paramObj = JSONObject.parseObject(paramOut);
-
-        if (paramObj.getIntValue("status") != 2) {
-            doUpdateOnlinePay(onlinePayDtos.get(0).getOrderId(), OnlinePayDto.STATE_FT, paramObj.getString("remark"));
-        } else {
-            doUpdateOnlinePay(onlinePayDtos.get(0).getOrderId(), OnlinePayDto.STATE_CT, "退款完成");
-        }
-
-    }
-
-    private void doUpdateOnlinePay(String orderId, String state, String message) {
-        OnlinePayPo onlinePayPo = new OnlinePayPo();
-        onlinePayPo.setMessage(!StringUtil.isEmpty(message) && message.length() > 1000 ? message.substring(0, 1000) : message);
-        onlinePayPo.setOrderId(orderId);
-        onlinePayPo.setState(state);
-        onlinePayV1InnerServiceSMOImpl.updateOnlinePay(onlinePayPo);
-    }
-
-}

+ 26 - 10
service-job/src/main/java/com/java110/job/adapt/returnMoney/wechat/ReturnPayFeeMoneyAdapt.java

@@ -12,6 +12,7 @@ import com.java110.dto.wechat.SmallWeChatDto;
 import com.java110.dto.system.Business;
 import com.java110.intf.acct.IOnlinePayRefundV1InnerServiceSMO;
 import com.java110.intf.acct.IOnlinePayV1InnerServiceSMO;
+import com.java110.intf.acct.IReturnMoneyV1InnerServiceSMO;
 import com.java110.intf.fee.IReturnPayFeeInnerServiceSMO;
 import com.java110.intf.order.IOrderInnerServiceSMO;
 import com.java110.intf.store.ISmallWechatV1InnerServiceSMO;
@@ -24,6 +25,7 @@ import com.java110.utils.util.BeanConvertUtil;
 import com.java110.utils.util.OSSUtil;
 import com.java110.utils.util.PayUtil;
 import com.java110.utils.util.StringUtil;
+import com.java110.vo.ResultVo;
 import org.apache.http.HttpEntity;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpPost;
@@ -93,12 +95,15 @@ public class ReturnPayFeeMoneyAdapt extends DatabusAdaptImpl {
     @Autowired
     private IOnlinePayRefundV1InnerServiceSMO onlinePayRefundV1InnerServiceSMOImpl;
 
+    @Autowired
+    private IReturnMoneyV1InnerServiceSMO returnMoneyV1InnerServiceSMOImpl;
+
     @Override
     public void execute(Business business, List<Business> businesses) {
         JSONObject data = business.getData();
-        OnlinePayPo oaWorkflowDataPo = BeanConvertUtil.covertBean(data, OnlinePayPo.class);
+        OnlinePayPo onlinePayPo = BeanConvertUtil.covertBean(data, OnlinePayPo.class);
         try {
-            doPayFeeMoney(oaWorkflowDataPo);
+            doPayFeeMoney(onlinePayPo);
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -107,17 +112,29 @@ public class ReturnPayFeeMoneyAdapt extends DatabusAdaptImpl {
     /**
      * 通知退款
      *
-     * @param oaWorkflowDataPo
+     * @param onlinePayPo
      */
-    public void doPayFeeMoney(OnlinePayPo oaWorkflowDataPo) throws Exception {
+    public void doPayFeeMoney(OnlinePayPo onlinePayPo) throws Exception {
         //查询小区信息
         OnlinePayDto onlinePayDto = new OnlinePayDto();
-        onlinePayDto.setPayId(oaWorkflowDataPo.getPayId());
+        onlinePayDto.setPayId(onlinePayPo.getPayId());
         onlinePayDto.setState(OnlinePayDto.STATE_WT);
         List<OnlinePayDto> onlinePayDtos = onlinePayV1InnerServiceSMOImpl.queryOnlinePays(onlinePayDto);
         if (onlinePayDtos == null || onlinePayDtos.size() < 1) {
             return;
         }
+        // todo 如果物业系统退款
+        if (!StringUtil.isEmpty(onlinePayDtos.get(0).getPaymentPoolId())) {
+            ResultVo resultVo = returnMoneyV1InnerServiceSMOImpl.returnMoney(onlinePayDtos.get(0));
+            if (resultVo.getCode() == ResultVo.CODE_OK) {
+                doUpdateOnlinePay(onlinePayDtos.get(0).getPayId(), OnlinePayDto.STATE_CT, "退款完成");
+            } else {
+                doUpdateOnlinePay(onlinePayDtos.get(0).getPayId(), OnlinePayDto.STATE_FT, resultVo.getMsg());
+            }
+            return;
+        }
+
+        //todo 商城还是走这里
         String payPassword = "";
         String certData = "";
         String mchPassword = "";
@@ -133,12 +150,12 @@ public class ReturnPayFeeMoneyAdapt extends DatabusAdaptImpl {
             payPassword = smallWeChatDtos.get(0).getPayPassword();
             certData = smallWeChatDtos.get(0).getCertPath();
             mchPassword = smallWeChatDtos.get(0).getMchId();
-            if(StringUtil.isEmpty(certData)){
+            if (StringUtil.isEmpty(certData)) {
                 certData = MappingCache.getRemark(MappingConstant.WECHAT_STORE_DOMAIN, "cert");
             }
         }
 
-        System.out.println("------------------------------证书地址:"+certData);
+        System.out.println("------------------------------证书地址:" + certData);
 
         SortedMap<String, String> parameters = new TreeMap<String, String>();
         String paySwitch = MappingCache.getValue(DOMAIN_WECHAT_PAY, WECHAT_SERVICE_PAY_SWITCH);
@@ -156,7 +173,7 @@ public class ReturnPayFeeMoneyAdapt extends DatabusAdaptImpl {
         onlinePayRefundDto.setState(OnlinePayDto.STATE_WT);
         List<OnlinePayRefundDto> onlinePayRefundDtos = onlinePayRefundV1InnerServiceSMOImpl.queryOnlinePayRefunds(onlinePayRefundDto);
         String tranNo = GenerateCodeFactory.getGeneratorId("11");
-        if(onlinePayRefundDtos != null && onlinePayRefundDtos.size() >0){
+        if (onlinePayRefundDtos != null && onlinePayRefundDtos.size() > 0) {
             tranNo = onlinePayRefundDtos.get(0).getRefundId();
         }
 
@@ -211,7 +228,6 @@ public class ReturnPayFeeMoneyAdapt extends DatabusAdaptImpl {
     }
 
 
-
     private void doUpdateOnlinePay(String payId, String state, String message) {
         OnlinePayPo onlinePayPo = new OnlinePayPo();
         onlinePayPo.setMessage(message.length() > 1000 ? message.substring(0, 1000) : message);
@@ -225,7 +241,7 @@ public class ReturnPayFeeMoneyAdapt extends DatabusAdaptImpl {
         onlinePayRefundDto.setState(OnlinePayDto.STATE_WT);
         List<OnlinePayRefundDto> onlinePayRefundDtos = onlinePayRefundV1InnerServiceSMOImpl.queryOnlinePayRefunds(onlinePayRefundDto);
 
-        if(onlinePayRefundDtos == null || onlinePayRefundDtos.size() < 1){
+        if (onlinePayRefundDtos == null || onlinePayRefundDtos.size() < 1) {
             return;
         }