puzhibing
2024-01-03 168d852672f8f671a01d6f0f053349d0d321ec7c
Merge remote-tracking branch 'origin/master'

# Conflicts:
# cloud-server-other/src/main/java/com/dsh/other/controller/GameController.java
51个文件已修改
9个文件已添加
3035 ■■■■ 已修改文件
cloud-server-account/src/main/java/com/dsh/account/feignclient/other/StoreClient.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/other/model/Store.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/impl/RechargeRecordsServiceImpl.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/service/impl/VipPaymentServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/util/PayMoneyUtil.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/resources/sharding-jdbc.properties 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-activity/src/main/resources/sharding-jdbc.properties 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/pom.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/feignclient/other/StoreClient.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/service/impl/CompetitionServiceImpl.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/java/com/dsh/competition/util/PayMoneyUtil.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-competition/src/main/resources/sharding-jdbc.properties 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageSchedulingController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/controller/CourseRecordController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/feignclient/other/StoreClient.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/feignclient/other/model/Store.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/java/com/dsh/course/util/PayMoneyUtil.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-course/src/main/resources/sharding-jdbc.properties 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/mapper/BankMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/mapper/TOperatorAuthMapper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/api/AliPayMsgConfig.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/api/AliPayProperties.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/api/SaticScheduleTask.java 297 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/OperatorController.java 483 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/OperatorUserController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCompetitionController.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TStoredValueConfigController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/OperatorAuthAlipay.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IOperatorAuthService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/TBankService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/BankServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TOperatorAuthServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TOperatorUserServiceImpl.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/util/PayMoneyUtil.java 385 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/resources/mapper/BankMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/resources/mapper/TOperatorMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/operator/OperatorUser_proportion.html 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/operator/OperatorUser_proportionAuth.html 312 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/operator/OperatorUser_proportionAuth_info.html 283 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/operatorUser/OperatorUser.html 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/operator/operator.js 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/operatorUser/operatorUser.js 321 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/pom.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/mapper/SiteMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/service/ISiteService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/util/PayMoneyUtil.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/resources/mapper/SiteMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/main/java/com/dsh/account/feignclient/other/StoreClient.java
@@ -13,10 +13,15 @@
@FeignClient(value = "mb-cloud-other")
public interface StoreClient {
    /**
     * 根据运营商id获取对应运营商商户号
     * @return
     */
    @PostMapping("/base/getSMIDByOperatorId")
    String getSMIDByOperatorId(Integer id);
    @PostMapping("/store/queryByStoreId")
    OperatorUser queryByStoreId(Integer storeId);
    /**
     * 获取门店列表
cloud-server-account/src/main/java/com/dsh/account/feignclient/other/model/Store.java
@@ -87,4 +87,9 @@
     * 状态(1=正常,2=冻结,3=删除)
     */
    private Integer state;
    /**
     * 运营商id
     */
    private Integer operatorId;
}
cloud-server-account/src/main/java/com/dsh/account/service/impl/RechargeRecordsServiceImpl.java
@@ -288,9 +288,9 @@
        return ResultUtil.success();
    }
    private String smid = "2088330203191220";//平台支付宝商户号
    private ResultUtil AlipayPayment(String code, BigDecimal amount) {
        ResultUtil alipay = payMoneyUtil.alipay("玩湃币充值", "玩湃币充值", "", code, amount.toString(),
        ResultUtil alipay = payMoneyUtil.alipay(smid,"玩湃币充值", "玩湃币充值", "", code, amount.toString(),
                "/base/recharge/alipayRechargeCallback");
        if (alipay.getCode() == 200) {
            new Thread(new Runnable() {
@@ -328,8 +328,14 @@
                                if ("TRADE_CLOSED".equals(tradeStatus) || "TRADE_FINISHED".equals(tradeStatus) || num == 10) {
                                    records.setState(3);
                                    rereMapper.deleteById(records.getId());
                                    if ("TRADE_FINISHED".equals(tradeStatus)) {
                                        // todo 资金结算
                                        payMoneyUtil.confirm(smid,code,tradeNo,amount.toString());
                                    break;
                                }
                                    break;
                                }
                                if ("TRADE_SUCCESS".equals(tradeStatus)) {
                                    records.setAppUserId(null);
                                    records.setPayStatus(2);
cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
@@ -1369,7 +1369,7 @@
                return ResultUtil.success(returnId);
            }
            //积分+现金
            if(coupon.getRedemptionMethod() == 1){
            if(coupon.getRedemptionMethod() == 2){
                userCouponPaymentClient.addUserCouponPayment(userCouponPayment);
                try {
                    if(exchangeType.getPayType() == 1){
@@ -1707,11 +1707,12 @@
     * @return
     * @throws Exception
     */
    private String smid = "2088330203191220";//平台支付宝商户号
    public ResultUtil aliPaymentCoupon(String body, UserCouponPayment userCouponPayment) throws Exception {
        String code = userCouponPayment.getCode();
        Double cash = userCouponPayment.getCash();
        ResultUtil alipay = payMoneyUtil.alipay(body, body, "", code, cash.toString(), "/base/coupon/aliPaymentCouponCallback");
        ResultUtil alipay = payMoneyUtil.alipay(smid, body, "",String.valueOf(userCouponPayment.getId()), code, cash.toString(), "/base/coupon/aliPaymentCouponCallback");
        if (alipay.getCode() == 200) {
            new Thread(new Runnable() {
                @Override
@@ -1744,6 +1745,10 @@
                                    //有待支付的订单,这里不处理
                                    userCouponPayment1.setStatus(-1);
                                    userCouponPaymentClient.updateUserCouponPayment(userCouponPayment1);
                                    if ("TRADE_FINISHED".equals(s)) {
                                        // todo 资金结算
                                    }
                                    break;
                                }
                                if ("TRADE_SUCCESS".equals(s)) {
@@ -1751,22 +1756,23 @@
                                    userCouponPayment1.setPaymentTime(new Date());
                                    userCouponPayment1.setOrderNumber(tradeNo);
                                    userCouponPaymentClient.updateUserCouponPayment(userCouponPayment1);
                                    UserCoupon userCoupon = new UserCoupon();
                                    userCoupon.setCouponId(userCouponPayment1.getCouponId());
                                    userCoupon.setUserId(userCouponPayment1.getUserId());
                                    userCoupon.setStatus(1);
                                    userCoupon.setInsertTime(new Date());
                                    userConponClient.insertToAppuserCoupon(userCoupon);
                                    if(null != userCouponPayment1.getIntegral() && 0 != userCouponPayment1.getIntegral()){
                                        //扣积分
                                        TAppUser user = appUserService.getById(userCouponPayment1.getUserId());
                                        user.setIntegral(user.getIntegral() - userCouponPayment1.getIntegral().intValue());
                                        appUserService.updateById(user);
                                    }
                                    payMoneyUtil.confirm(smid,code,tradeNo,cash.toString());
                                    break;
                                }
                                if ("WAIT_BUYER_PAY".equals(s)) {
                                    num++;
                                }
@@ -1838,7 +1844,7 @@
    }
    private ResultUtil AlipayPayment(BigDecimal cash, String code, Long returnId) {
        ResultUtil alipay = payMoneyUtil.alipay("优惠卷", "优惠卷", String.valueOf(returnId), code, cash.toString(),
        ResultUtil alipay = payMoneyUtil.alipay(smid,"优惠卷", "优惠卷", String.valueOf(returnId), code, cash.toString(),
                "/base/pointMer/exchangeGoodPaymentAliCallback");
        if (alipay.getCode() == 200) {
            new Thread(new Runnable() {
@@ -1886,6 +1892,11 @@
                                    moneyOut(tradeNo, tradeNo);
                                    break;
                                }
                                if ("TRADE_FINISHED".equals(tradeStatus)) {
                                    // todo 资金结算
                                    payMoneyUtil.confirm(smid,code,tradeNo,cash.toString());
                                    break;
                                }
//                                if("REFUND".equals(tradeStatus) || "NOTPAY".equals(tradeStatus) || "CLOSED".equals(tradeStatus) || "REVOKED".equals(tradeStatus) || "PAYERROR".equals(tradeStatus) || num == 10){
//                                    mcClient.deletePaymentRecord(code);
//                                    break;
cloud-server-account/src/main/java/com/dsh/account/service/impl/TStudentServiceImpl.java
@@ -104,6 +104,8 @@
    @Resource
    private ParticipantClient participantClient;
    @Autowired
    private CoursePackageClient coursePackageClient;
    @Autowired
    private PayMoneyUtil payMoneyUtil;
@@ -474,9 +476,24 @@
        }
        return weixinpay;
    }
    private String smid = "2088330203191220";//平台支付宝商户号
    public ResultUtil AlipayPayment(String code, BigDecimal amount, Integer hour) {
        ResultUtil alipay = payMoneyUtil.alipay("课包续费", "课包续费", "", code, amount.toString(),
        TCoursePackagePayment coursePackagePayment = couPayClient.getCoursePackagePaymentByCode(code);
        Integer coursePackageId = coursePackagePayment.getCoursePackageId();
        // 判断这个课包是属于哪个运营商的
        CoursePackage coursePackage = coursePackageClient.queryCoursePackageById(coursePackageId);
        Integer storeId = coursePackage.getStoreId();
        Store store = storeClient.queryStoreById(storeId);
        String smid1= "";
        if (store.getOperatorId()==null){
            // 平台
            smid1 = smid;
        }else{
            String smidByOperatorId = storeClient.getSMIDByOperatorId(store.getOperatorId());
            smid1 = smidByOperatorId;
        }
        ResultUtil alipay = payMoneyUtil.alipay(smid1,"课包续费", "课包续费", "", code, amount.toString(),
                "/base/coursePackage/alipayPaymentCallback");
        if (alipay.getCode() == 200) {
            new Thread(new Runnable() {
@@ -494,7 +511,6 @@
                                break;
                            }
                            AlipayTradeQueryResponse resultUtil = payMoneyUtil.queryALIOrder(code);
                            if (resultUtil.getCode().equals("10000") && coursePackagePayment.getPayStatus() == 1) {
                                /**
                                 * WAIT_BUYER_PAY(交易创建,等待买家付款)、
@@ -519,8 +535,20 @@
                                    coursePackagePayment.setLaveClassHours(hour);
                                    coursePackagePayment.setOrderNumber(tradeNo);
                                    couPayClient.updatePaymentCoursePackage(coursePackagePayment);
                                    Integer coursePackageId = coursePackagePayment.getCoursePackageId();
                                    // 判断这个课包是属于哪个运营商的
                                    CoursePackage coursePackage = coursePackageClient.queryCoursePackageById(coursePackageId);
                                    Integer storeId = coursePackage.getStoreId();
                                    Store store = storeClient.queryStoreById(storeId);
                                    String smid1= "";
                                    if (store.getOperatorId()==null){
                                        // 平台
                                        smid1 = smid;
                                    }else{
                                        String smidByOperatorId = storeClient.getSMIDByOperatorId(store.getOperatorId());
                                        smid1 = smidByOperatorId;
                                    }
                                    payMoneyUtil.confirm(smid1,code,tradeNo,amount.toString());
                                    break;
                                }
                                if ("WAIT_BUYER_PAY".equals(tradeStatus)) {
cloud-server-account/src/main/java/com/dsh/account/service/impl/VipPaymentServiceImpl.java
@@ -169,9 +169,14 @@
     * @return
     * @throws Exception
     */
    private String smid = "2088330203191220";//平台支付宝商户号
    public ResultUtil alipay(VipPayment vipPayment) throws Exception {
        String code = vipPayment.getCode();
        ResultUtil alipay = payMoneyUtil.alipay("购买年度会员", "购买年度会员", vipPayment.getAppUserId() + "", code, vipPayment.getAmount().toString(),
        String amount = vipPayment.getAmount().toString();
        ResultUtil alipay = payMoneyUtil.alipay
                (smid,"购买年度会员", "购买年度会员",
                        vipPayment.getAppUserId() + "",
                        code, vipPayment.getAmount().toString(),
                "/base/appUser/addVipPaymentAliCallback");
        if (alipay.getCode() == 200) {
            new Thread(new Runnable() {
@@ -204,6 +209,7 @@
                                if ("TRADE_CLOSED".equals(tradeStatus) || "TRADE_FINISHED".equals(tradeStatus)) {
                                    vipPayment1.setState(3);
                                    VipPaymentServiceImpl.this.updateById(vipPayment1);
                                    return;
                                }
                                if ("TRADE_SUCCESS".equals(tradeStatus)) {
@@ -226,6 +232,8 @@
                                    // 注册会员送券 先判断是否有注册送券类型的优惠券 判断优惠券状态 审核是否通过 是否删除 是否在有效期内 是否领取数量达上限
                                    List<Long> longs = userConponClient.queryCouponByUser(appUser.getId());
                                    redisUtil.setStrValue("VIP_P_" + vipPayment1.getAppUserId(), JSON.toJSONString(longs), 3600);
                                    // 如果交易结束 将当前订单金额分配到商户
                                    payMoneyUtil.confirm(smid,vipPayment.getCode(),tradeNo,amount);
                                    return;
                                }
                                if ("WAIT_BUYER_PAY".equals(tradeStatus)) {
cloud-server-account/src/main/java/com/dsh/account/util/PayMoneyUtil.java
@@ -71,6 +71,7 @@
    private String appid = "";//微信appid
    private String appletsAppid = "";//微信小程序appid
    private String smid = "2088330203191220";//平台支付宝商户号
    private String mchId = "";//微信商户号
@@ -90,7 +91,7 @@
    /**
     * 支付宝支付
     */
    public ResultUtil alipay(String body, String subject, String passbackParams, String outTradeNo, String amount, String notifyUrl) {
    public ResultUtil  alipay(String smid,String body, String subject, String passbackParams, String outTradeNo, String amount, String notifyUrl) {
//        //构造client
//        CertAlipayRequest certAlipayRequest = new CertAlipayRequest ();
//        //设置网关地址
@@ -142,7 +143,6 @@
//            e.printStackTrace();
//        }
        //实例化客户端
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey, "json", "UTF-8", alipay_public_key, "RSA2");
        //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
@@ -156,8 +156,21 @@
        model.setTotalAmount(amount);//付款金额
        model.setProductCode("QUICK_MSECURITY_PAY");
        model.setPassbackParams(passbackParams);//自定义参数
        SettleInfo settleInfo = new SettleInfo();
        settleInfo.setSettlePeriodTime("3d");
        SettleDetailInfo settleDetailInfo = new SettleDetailInfo();
        settleDetailInfo.setTransInType("defaultSettle");
        settleDetailInfo.setAmount(amount);
        List<SettleDetailInfo> settleDetailInfos = new ArrayList<>();
        settleDetailInfos.add(settleDetailInfo);
        settleInfo.setSettleDetailInfos(settleDetailInfos);
        model.setSettleInfo(settleInfo);
        SubMerchant subMerchant = new SubMerchant();
        subMerchant.setMerchantId(smid);
        model.setSubMerchant(subMerchant);
        ExtendParams extendParams = new ExtendParams();
        extendParams.setRoyaltyFreeze("true");// 冻结资金 用于后续分账处理
        model.setExtendParams(extendParams);
        //分账
//        Integer    coursePackagePayments = coursePackageClient.queryByCode(outTradeNo);
//        Integer paymentCompetitions = competitionsClient.queryByCode(outTradeNo);
@@ -245,7 +258,47 @@
        System.err.print(alipay_trade_precreate_response.getString("qr_code"));
        return ResultUtil.success(alipay_trade_precreate_response.getString("qr_code"));
    }
    // 直付通模式 alipay.trade.settle.confirm(统一收单确认结算接口)
    public ResultUtil confirm(String smid1,String code, String outTradeNo, String amount) {
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",
                aliAppid,
                appPrivateKey,
                "json",
                "GBK",
                alipay_public_key,
                "RSA2");
        AlipayTradeSettleConfirmRequest request = new AlipayTradeSettleConfirmRequest();
        request.setBizContent("{" +
                "  \"out_request_no\":\""+code+"\"," +
                "  \"trade_no\":\""+outTradeNo+"\"," +
                "  \"settle_info\":{" +
                "    \"settle_detail_infos\":[" +
                "      {" +
                "        \"trans_in_type\":\"defaultSettle\"," +
                "        \"settle_entity_id\":\""+smid1+"\"," +
                "        \"settle_entity_type\":\"SecondMerchant\"," +
                "        \"amount\":"+amount+"," +
                "      }" +
                "    ]" +
                "  }," +
                "  \"extend_params\":{" +
                "    \"royalty_freeze\":\"false\"" +
                "  }" +
                "}");
        AlipayTradeSettleConfirmResponse response = null;
        try {
            response = alipayClient.execute(request);
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        if(response.isSuccess()){
            System.out.println("调用成功");
            return ResultUtil.success();
        } else {
            System.out.println("调用失败");
            return ResultUtil.error("出现问题啦");
        }
    }
    /**
     * 支付成功后的回调处理逻辑
cloud-server-account/src/main/resources/sharding-jdbc.properties
@@ -14,9 +14,9 @@
datasource.names=master0
datasource.master0.type=com.alibaba.druid.pool.DruidDataSource
datasource.master0.driverClassName=com.mysql.cj.jdbc.Driver
datasource.master0.url=jdbc:mysql://127.0.0.1:3306/playpai_account?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
datasource.master0.url=jdbc:mysql://192.168.110.110/playpai_account?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
datasource.master0.username=root
datasource.master0.password=playpai2023!
datasource.master0.password=123456
datasource.master0.maxActive=20
datasource.master0.maxWait=60000
datasource.master0.minIdle=5
cloud-server-activity/src/main/java/com/dsh/activity/controller/PointMercharsController.java
@@ -926,14 +926,11 @@
                        String endDate = dateFormat.format(end);
                        detailsResponse.setStartTime(startDate);
                        detailsResponse.setEndTime(startDate);
                        Date now = new Date();
                        Calendar cal1 = Calendar.getInstance();
                        cal1.setTime(pointsMerchandise.getInsertTime());
                        Calendar cal2 = Calendar.getInstance();
                        cal2.setTime(now);
                        // Compare the year, month, and day of the two Calendar instances
                        boolean isSameDate = cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) &&
                                cal1.get(Calendar.MONTH) == cal2.get(Calendar.MONTH) &&
cloud-server-activity/src/main/resources/sharding-jdbc.properties
@@ -14,9 +14,9 @@
datasource.names=master0
datasource.master0.type=com.alibaba.druid.pool.DruidDataSource
datasource.master0.driverClassName=com.mysql.cj.jdbc.Driver
datasource.master0.url=jdbc:mysql://127.0.0.1:3306/playpai_activity?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
datasource.master0.url=jdbc:mysql://192.168.110.110/playpai_activity?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
datasource.master0.username=root
datasource.master0.password=playpai2023!
datasource.master0.password=123456
datasource.master0.maxActive=20
datasource.master0.maxWait=60000
datasource.master0.minIdle=5
cloud-server-competition/pom.xml
@@ -89,10 +89,11 @@
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>4.8.10.ALL</version>
            <version>4.38.10.ALL</version>
        </dependency>
    </dependencies>
cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java
@@ -755,9 +755,7 @@
                    String refund_id = map.get("refund_id");
                    paymentCompetition.setRefundOrderNo(refund_id);
                    paymentCompetitionService.updateById(paymentCompetition);
                    storeClient.addBackRecord(paymentCompetition.getAmount() + "_" + paymentCompetition.getAppUserId());
                }
                if (paymentCompetition.getPayType() == 2) {//支付宝支付
cloud-server-competition/src/main/java/com/dsh/competition/feignclient/other/StoreClient.java
@@ -13,7 +13,12 @@
 */
@FeignClient("mb-cloud-other")
public interface StoreClient {
    /**
     * 根据运营商id获取对应运营商商户号
     * @return
     */
    @PostMapping("/base/getSMIDByOperatorId")
    String getSMIDByOperatorId(Integer id);
    /**
     * 根据名称模糊搜索门店
cloud-server-competition/src/main/java/com/dsh/competition/service/impl/CompetitionServiceImpl.java
@@ -85,7 +85,7 @@
    private String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAouYvZ1v4RiydwNOnGcU0Hb4hQu0x6XUooaE2Bi6/atNOobtFdunnATGP6OMOW7yF9DpP8qH5mbFXAiaQD721y/7qlayI50UcV4mngRU4ZcaAVE3bp721Eg2H85RISa+Tb1CiOh+pc9p4l5UBseKsvB2ruHHForfZDPI8FL7AVUKBYCQPsa4zL6KAO2C6KULaTg/lCa+bYQKU0n9ca569VtdsqJUyxB9eSZjVd+9nKl62FLqp2NELGj7cXqiVBgDnBnVS5ZUO3mrBM5z/AxQbw3RwE3JqdkhzUA1BFjejAlT2zIGNOjUFagF8ao0wGElYfuk0bum6Hz5qWAt02QdNNwIDAQAB";//支付宝应用公钥
    private String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmu8n/4yTHWbn7VOrNc9OsLtDL1bEQ8gC1dHkj8Wy5z0mkaOsjJRIG/28ze12M0V8jdCKuuDr5Z1OPKiqf+XO3ypguEh+mYUVMBM/cZodDFQfTY1TKLWjvQCuaqlA+QUTCK6f7T7stsgyQ1o9Jj0rXZDz6PM4QHSTzjrLIBaeqM5WIBvH+fy/X+QG5Utd+/UT0kc0JyvuKhZ65yVUd/C9VcwJJAPliRsAQNrqYterwAJ9zvw9tF11wj9W0XgJ8Ccu4x3gR1vrlLRJJo/OA97RmxPQ+5hSacWQZCUd1dwiBq+YCrKVHGTj14izRHXrLc0yBlRXo7tBOIqcy3IsvKVthQIDAQAB";//支付宝支付公钥
    private String smid = "2088330203191220";//平台支付宝商户号
    /**
     * 获取赛事列表
@@ -300,7 +300,16 @@
        }
        if (paymentCompetitionVo.getPayType() == 2) {//支付宝
            return aliPaymentCompetition(code, money);
            // 判断当前赛事属于哪个运营商
            Competition byId = competitionService.getById(paymentCompetitionVo.getId());
            Integer operatorId = byId.getOperatorId();
            if (operatorId == null ){
                // 说明是平台
                return aliPaymentCompetition(smid,code, money);
            }
            // 获取该运营商的商户号
            String smid = storeClient.getSMIDByOperatorId(operatorId);
            return aliPaymentCompetition(smid,code, money);
        }
        if (paymentCompetitionVo.getPayType() == 3) {//玩湃币
            appUser.setPlayPaiCoins(appUser.getPlayPaiCoins() - money.intValue());
@@ -418,8 +427,9 @@
     * @return
     * @throws Exception
     */
    public ResultUtil aliPaymentCompetition(String code, BigDecimal money) throws Exception {
        ResultUtil alipay = payMoneyUtil.alipay("报名赛事", "", "", code, money.toString(), "/base/competition/aliPaymentCompetitionCallback");
    public ResultUtil aliPaymentCompetition(String smid,String code, BigDecimal money) throws Exception {
        ResultUtil alipay = payMoneyUtil.alipay
                (smid,"报名赛事", "", "", code, money.toString(), "/base/competition/aliPaymentCompetitionCallback");
        if (alipay.getCode() == 200) {
            new Thread(new Runnable() {
                @Override
@@ -453,6 +463,7 @@
                                    paymentCompetition.setAppUserId(null);
                                    paymentCompetition.setState(3);
                                    userCompetitionService.remove(new QueryWrapper<UserCompetition>().eq("paymentCompetitionId", paymentCompetition.getId()));
                                    break;
                                }
                                if ("TRADE_SUCCESS".equals(s)) {
@@ -461,12 +472,10 @@
                                    paymentCompetition.setPayTime(new Date());
                                    paymentCompetition.setPayOrderNo(tradeNo);
                                    paymentCompetitionService.updateById(paymentCompetition);
                                    // 结算资金到商户账号
                                    payMoneyUtil.confirm(smid,code,tradeNo,money.toString());
                                    //分账
//                                    moneyOut(tradeNo, tradeNo,code);
                                    break;
                                }
                                if ("WAIT_BUYER_PAY".equals(s)) {
cloud-server-competition/src/main/java/com/dsh/competition/util/PayMoneyUtil.java
@@ -6,7 +6,7 @@
import com.alipay.api.AlipayClient;
import com.alipay.api.CertAlipayRequest;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeAppPayModel;
import com.alipay.api.domain.*;
import com.alipay.api.request.*;
import com.alipay.api.response.*;
import com.dsh.competition.util.httpClinet.HttpClientUtil;
@@ -71,7 +71,7 @@
    /**
     * 支付宝支付
     */
    public ResultUtil alipay(String body, String subject, String passbackParams, String outTradeNo, String amount, String notifyUrl) {
    public ResultUtil alipay(String smid,String body, String subject, String passbackParams, String outTradeNo, String amount, String notifyUrl) {
//        //构造client
//        CertAlipayRequest certAlipayRequest = new CertAlipayRequest ();
//        //设置网关地址
@@ -137,8 +137,24 @@
        model.setTotalAmount(amount);//付款金额
        model.setProductCode("QUICK_MSECURITY_PAY");
        model.setPassbackParams(passbackParams);//自定义参数
        SettleInfo settleInfo = new SettleInfo();
        settleInfo.setSettlePeriodTime("3d");
        SettleDetailInfo settleDetailInfo = new SettleDetailInfo();
        settleDetailInfo.setTransInType("defaultSettle");
        settleDetailInfo.setAmount(amount);
        List<SettleDetailInfo> settleDetailInfos = new ArrayList<>();
        settleDetailInfos.add(settleDetailInfo);
        settleInfo.setSettleDetailInfos(settleDetailInfos);
        model.setSettleInfo(settleInfo);
        SubMerchant subMerchant = new SubMerchant();
        subMerchant.setMerchantId(smid);
        model.setSubMerchant(subMerchant);
        ExtendParams extendParams = new ExtendParams();
        extendParams.setRoyaltyFreeze("true");// 冻结资金 用于后续分账处理
        model.setExtendParams(extendParams);
        request.setBizModel(model);
        request.setNotifyUrl(callbackPath + notifyUrl);
        try {
            //这里和普通的接口调用不同,使用的是sdkExecute
            AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
@@ -273,6 +289,54 @@
        }
    }
    /**
     * 统一确认结算接口
     * @param smid
     * @param code
     * @param outTradeNo
     * @param amount
     * @return
     */
    public ResultUtil confirm(String smid,String code, String outTradeNo, String amount) {
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",
                aliAppid,
                appPrivateKey,
                "json",
                "GBK",
                alipay_public_key,
                "RSA2");
        AlipayTradeSettleConfirmRequest request = new AlipayTradeSettleConfirmRequest();
        request.setBizContent("{" +
                "  \"out_request_no\":\""+code+"\"," +
                "  \"trade_no\":\""+outTradeNo+"\"," +
                "  \"settle_info\":{" +
                "    \"settle_detail_infos\":[" +
                "      {" +
                "        \"trans_in_type\":\"defaultSettle\"," +
                "        \"settle_entity_id\":\""+smid+"\"," +
                "        \"settle_entity_type\":\"SecondMerchant\"," +
                "        \"amount\":"+amount+"," +
                "      }" +
                "    ]" +
                "  }," +
                "  \"extend_params\":{" +
                "    \"royalty_freeze\":\"false\"" +
                "  }" +
                "}");
        AlipayTradeSettleConfirmResponse response = null;
        try {
            response = alipayClient.execute(request);
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        if(response.isSuccess()){
            System.out.println("调用成功");
            return ResultUtil.success();
        } else {
            System.out.println("调用失败");
            return ResultUtil.error("出现问题啦");
        }
    }
    /**
     * 微信统一下单
cloud-server-competition/src/main/resources/sharding-jdbc.properties
@@ -14,9 +14,9 @@
datasource.names=master0
datasource.master0.type=com.alibaba.druid.pool.DruidDataSource
datasource.master0.driverClassName=com.mysql.cj.jdbc.Driver
datasource.master0.url=jdbc:mysql://127.0.0.1:3306/playpai_competition?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
datasource.master0.url=jdbc:mysql://192.168.110.110/playpai_competition?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
datasource.master0.username=root
datasource.master0.password=playpai2023!
datasource.master0.password=123456
datasource.master0.maxActive=20
datasource.master0.maxWait=60000
datasource.master0.minIdle=5
cloud-server-course/pom.xml
@@ -122,7 +122,7 @@
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>4.8.10.ALL</version>
            <version>4.38.10.ALL</version>
        </dependency>
        <dependency>
            <groupId>com.huaweicloud</groupId>
cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java
@@ -293,7 +293,6 @@
        }
    }
    /**
     * 根据id获取课程数据
     *
@@ -500,14 +499,12 @@
    @PostMapping("/course/auditDiscount")
    public Boolean auditDiscount(@RequestBody AuditDiscount auditDiscount) {
        List<TCoursePackageDiscount> list = discountService.list(new LambdaQueryWrapper<TCoursePackageDiscount>()
                .eq(TCoursePackageDiscount::getCoursePackageId, auditDiscount.getId()));
        for (TCoursePackageDiscount tCoursePackageDiscount : list) {
            tCoursePackageDiscount.setAuditStatus(auditDiscount.getType());
            tCoursePackageDiscount.setAuditRemark(auditDiscount.getText());
        }
        return discountService.updateBatchById(list);
    }
@@ -525,8 +522,6 @@
            selectDto.setValue(String.valueOf(coursePackagePaymentConfig.getClassHours()));
            integerList.add(selectDto);
        }
        return integerList;
    }
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageController.java
@@ -242,8 +242,6 @@
                StoreOfCourseVo courseVo = new StoreOfCourseVo();
                courseVo.setCourseId(coursePackage.getId());
                courseVo.setName(coursePackage.getName() + "(" + store.getName() + ")");
                String classStartTime = coursePackage.getClassStartTime();
                String classEndTime = coursePackage.getClassEndTime();
                ArrayList<String> classTime = new ArrayList<>();
@@ -255,11 +253,8 @@
                        classTime.add(s);
                    }
                }
//                coursePackageInfo.setTimes(classTime);
                String classTimeAsString = String.join("|", classTime);
                courseVo.setClassStartTime(classTimeAsString);
                courseVo.setCoverDrawing(coursePackage.getCoverDrawing());
                courseVo.setApplicantsNumber(count);
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java
@@ -768,7 +768,6 @@
        return lisco;
    }
    @PostMapping("/base/coursePack/continuingCourse")
    public StudentOfCourseVo getStudentCourse(@RequestBody GetStudentCourse getStudentCourse) {
        StudentOfCourseVo courseVo = new StudentOfCourseVo();
@@ -777,7 +776,6 @@
                .eq("coursePackageId", getStudentCourse.getCourseId())
                .eq("studentId", getStudentCourse.getStuId()));
        if (tCoursePackagePayments.size() > 0) {
            List<CourseHoursType> typeList = new ArrayList<>();
            tCoursePackagePayments.forEach(cou -> {
                CourseHoursType hoursType = new CourseHoursType();
@@ -788,7 +786,6 @@
            TCoursePackagePayment tCoursePackagePayment = tCoursePackagePayments.get(0);
            courseVo.setCoursePackageId(tCoursePackagePayment.getCoursePackageId());
            courseVo.setTypeList(typeList);
            TCoursePackage coursePackage = tcpService.getById(tCoursePackagePayment.getCoursePackageId());
            courseVo.setPackageImg(coursePackage.getCoverDrawing());
            courseVo.setCourseName(coursePackage.getName());
@@ -1826,7 +1823,6 @@
                // 其他星期减一即可得到1-6的数字表示
                dayOfWeek -= 1;
            }
            // todo
            if (weeks.contains(String.valueOf(dayOfWeek))){
                // 限时折扣判断是否在有效期
                try {
@@ -2434,7 +2430,6 @@
        coursePackagePayment.setAppUserId(null);
        packagePaymentService.updateById(coursePackagePayment);
    }
    /**
     * 修改数据
@@ -3052,10 +3047,7 @@
        weekData.add(count2);
        weekData.add(count1);
        weekData.add(count);
        map.put("weekData", weekData);
        LocalDateTime currentDateTime = LocalDateTime.now();
        List<Integer> amountByDay = new ArrayList<>(Collections.nCopies(7, 0));
        for (CoursePackageStudent coursePackageStudent : list) {
cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageSchedulingController.java
@@ -55,7 +55,6 @@
        return coursePackageSchedulingService.getById(id);
    }
    @ResponseBody
    @PostMapping("/coursePackageScheduling/queryCoursePackageSchedulingsById")
    public List<CoursePackageScheduling> queryCoursePackageSchedulingsById(@RequestBody Long id) {
cloud-server-course/src/main/java/com/dsh/course/controller/CourseRecordController.java
@@ -51,7 +51,6 @@
                    .eq("studentId", course.getStuId())
                    .eq("appUserId", course.getAppUserId())
                    .eq("signInOrNot", 1));
            if (coursePackageStudents.size() > 0) {
                List<CancelledClasses> list = caccService.list(new QueryWrapper<CancelledClasses>()
                        .eq("coursePackageId", course.getCourseId()));
@@ -64,7 +63,6 @@
        }
        return sult;
    }
    @Autowired
    private CourseCounsumService courseCounsumService;
@@ -73,7 +71,6 @@
        courseCounsumService.save(courseCounsum);
    }
    @PostMapping("/base/courseRecord/cancelCourseData")
    public Integer cancelCourseRecordClass(@RequestBody Integer courseRecordId) {
        int sult = 0;
@@ -81,7 +78,6 @@
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy.MM.dd");
        SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm");
        String tis = simpleDateFormat.format(new Date());
        if (ToolUtil.isNotEmpty(packageStudent)) {
            TCoursePackage coursePackage = tcpService.getById(packageStudent.getCoursePackageId());
            String startTime = tis + " " + coursePackage.getClassStartTime();
cloud-server-course/src/main/java/com/dsh/course/controller/CourseStudentController.java
@@ -52,7 +52,6 @@
    private TCoursePackageService coursePackageService;
    @Resource
    private CoursePackageStudentMapper cpsMapper;
    //获取退费记录
    @RequestMapping("/getRefund")
    @ResponseBody
@@ -60,20 +59,14 @@
        // 查询已通过申请的退费记录
        return counsumService.getRefund();
    }
    @Resource
    private CoursePackageSchedulingMapper coursePackageSchedulingService;
    @RequestMapping("/getStudentTotal")
    @ResponseBody
    public List<Map<String, Object>> get(@RequestBody StudentQeryDto studentQeryDto) {
        List<Map<String, Object>> pays = paymentService.getStudentTotal(studentQeryDto);
        return pays;
    }
    @RequestMapping("/bypac")
    @ResponseBody
cloud-server-course/src/main/java/com/dsh/course/feignclient/other/StoreClient.java
@@ -16,10 +16,12 @@
@FeignClient("mb-cloud-other")
public interface StoreClient {
    /**
     * 根据管理员id获取
     * 根据运营商id获取对应运营商商户号
     * @return
     */
    @PostMapping("/base/getSMIDByOperatorId")
    String getSMIDByOperatorId(Integer id);
    /**
     * 根据名称模糊搜索门店
     *
cloud-server-course/src/main/java/com/dsh/course/feignclient/other/model/Store.java
@@ -24,6 +24,10 @@
     */
    private Integer cityManagerId;
    /**
     * 运营商id
     */
    private Integer operatorId;
    /**
     * 省
     */
    private String province;
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackagePaymentServiceImpl.java
@@ -948,11 +948,22 @@
        }
        return weixinpay;
    }
    private String smid = "2088330203191220";//平台支付宝商户号
    public ResultUtil AlipayPayment(String code, BigDecimal request) {
        TCoursePackagePaymentMapper baseMapper1 = this.baseMapper;
        ResultUtil alipay = payMoneyUtil.alipay("课包购买", "课包购买", "", code, request.toString(),
        TCoursePackagePayment coursePackagePayment = baseMapper1.getCoursePackagePaymentByCode(code);
        // 判断这个课包属于哪个门店 属于哪个运营商 根据运营商 id 获取对应的商户号
        Integer coursePackageId = coursePackagePayment.getCoursePackageId();
        TCoursePackage byId = coursePackageService.getById(coursePackageId);
        Store store = storeClient.queryStoreById(byId.getStoreId());
        String smid1="";
        if (store.getOperatorId() == null ){
            smid1 = smid;
        }else{
            smid1 = storeClient.getSMIDByOperatorId(store.getOperatorId());
        }
        ResultUtil alipay = payMoneyUtil.alipay(smid1,"课包购买", "课包购买", "", code, request.toString(),
                "/base/coursePackage/alipayRegisteredCoursesCallback");
        if (alipay.getCode() == 200) {
            new Thread(new Runnable() {
@@ -984,12 +995,24 @@
                                if ("TRADE_CLOSED".equals(s) || "TRADE_FINISHED".equals(s) || num == 10) {
                                    coursePackagePayment.setState(3);
                                    baseMapper1.deleteById(coursePackagePayment.getId());
                                    break;
                                }
                                if ("TRADE_SUCCESS".equals(s)) {
                                    coursePackagePayment.setPayStatus(2);
                                    coursePackagePayment.setOrderNumber(tradeNo);
                                    baseMapper1.updateById(coursePackagePayment);
                                        // 判断这个课包属于哪个门店 属于哪个运营商 根据运营商 id 获取对应的商户号
                                        Integer coursePackageId = coursePackagePayment.getCoursePackageId();
                                        TCoursePackage byId = coursePackageService.getById(coursePackageId);
                                        Store store = storeClient.queryStoreById(byId.getStoreId());
                                        if (store.getOperatorId()== null ){
                                            // 说明是平台的门店
                                            payMoneyUtil.confirm(smid,code,tradeNo,request.toString());
                                        }else{
                                            String smid = storeClient.getSMIDByOperatorId(store.getOperatorId());
                                            payMoneyUtil.confirm(smid,code,tradeNo,request.toString());
                                        }
                                    break;
                                }
                                if ("WAIT_BUYER_PAY".equals(s)) {
@@ -1010,7 +1033,7 @@
        TCoursePackagePayment packagePayment = this.baseMapper.selectOne(new QueryWrapper<TCoursePackagePayment>()
                .eq("code", code));
        if (appUser.getPlayPaiCoins() < wpGold) {
            return ResultUtil.error("玩牌币不足!");
            return ResultUtil.error("玩湃币不足!");
        }
        packagePayment.setPayStatus(2);
        packagePayment.setPayUserId(appUser.getId());
cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageServiceImpl.java
@@ -1041,7 +1041,7 @@
        return weixinpay;
    }
    private String smid = "2088330203191220";//平台支付宝商户号
    /**
     * 课程支付宝支付
     *
@@ -1055,6 +1055,7 @@
        CoursePackagePaymentConfig coursePackagePaymentConfig = coursePackagePaymentConfigService.getById(paymentCourseVo.getCoursePackagePaymentConfigId());
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        String code = sdf.format(new Date()) + UUIDUtil.getNumberRandom(5);
        String smid1="";
        //生成支付订单
        if (paymentCourseVo.getOrderId()==null){
            CoursePackageOrder coursePackageOrder = new CoursePackageOrder();
@@ -1083,8 +1084,18 @@
            coursePackageOrder.setPayUserId(uid);
            coursePackageOrderService.updateById(coursePackageOrder);
        }
        ResultUtil alipay = payMoneyUtil.alipay("购买课程", "购买课程", coursePackagePaymentConfig.getId().toString(), code, paymentPrice.toString(), "/base/course/aliPaymentCourseCallback");
        // 判断这个课包属于哪个门店 属于哪个运营商 根据运营商 id 获取对应的商户号
        Integer coursePackageId = paymentCourseVo.getId();
        TCoursePackage byId = coursePackageService.getById(coursePackageId);
        Store store = storeClient.queryStoreById(byId.getStoreId());
        if (store.getOperatorId() == null ){
            smid1 = smid;
        }else{
            smid1 = storeClient.getSMIDByOperatorId(store.getOperatorId());
        }
        ResultUtil alipay = payMoneyUtil.alipay(smid1,"购买课程", "购买课程",
                coursePackagePaymentConfig.getId().toString(),
                code, paymentPrice.toString(), "/base/course/aliPaymentCourseCallback");
        if (alipay.getCode() == 200) {
            String finalCode = code;
            new Thread(new Runnable() {
@@ -1092,7 +1103,6 @@
                public void run() {
                    try {
                        Thread.sleep(1000);
                        int num = 1;
                        int wait = 0;
                        while (num <= 10) {
@@ -1128,7 +1138,23 @@
                                    coursePackageOrderService.updateById(coursePackageOrder1);
                                    addCoursePackageOrderStudent(coursePackageOrder1.getId(), coursePackagePaymentConfig);
                                    moneyOut(tradeNo,tradeNo,finalCode);
                                    // 根据课程id 查询这个课程属于哪个门店 属于哪个运营商
                                    Integer id = paymentCourseVo.getId();
                                    TCoursePackage byId = coursePackageService.getById(id);
                                    Integer storeId = byId.getStoreId();
                                    Store store = storeClient.queryStoreById(storeId);
                                    Integer operatorId = store.getOperatorId();
                                    if (operatorId==null){
                                        String smid ="2088330203191220";
                                            // 说明是平台的
                                            payMoneyUtil.confirm(smid,finalCode,tradeNo,paymentPrice.toString());
                                    break;
                                    }else{
                                        // 当前课程不属于门店 查询这个课程属于哪个门店 属于哪个运营商
                                        String smidByOperatorId = storeClient.getSMIDByOperatorId(operatorId);
                                        payMoneyUtil.confirm(smidByOperatorId,finalCode,tradeNo,paymentPrice.toString());
                                        break;
                                    }
                                }
                                if ("WAIT_BUYER_PAY".equals(s)) {
                                    num++;
cloud-server-course/src/main/java/com/dsh/course/util/PayMoneyUtil.java
@@ -6,7 +6,7 @@
import com.alipay.api.AlipayClient;
import com.alipay.api.CertAlipayRequest;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeAppPayModel;
import com.alipay.api.domain.*;
import com.alipay.api.request.*;
import com.alipay.api.response.*;
import com.dsh.course.util.httpClinet.HttpClientUtil;
@@ -54,6 +54,7 @@
    private String appid = "wx82f853a410b0c7c0";//微信appid
    private String appletsAppid = "";//微信小程序appid
    private String smid = "2088330203191220";//平台支付宝商户号
    private String mchId = "1501481761";//微信商户号
@@ -69,11 +70,50 @@
    private String certPath = "C:\\cert\\1523106371_20211206_cert\\apiclient_cert.p12";//微信证书
    public ResultUtil confirm(String smid,String code, String outTradeNo, String amount) {
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",
                aliAppid,
                appPrivateKey,
                "json",
                "GBK",
                alipay_public_key,
                "RSA2");
        AlipayTradeSettleConfirmRequest request = new AlipayTradeSettleConfirmRequest();
        request.setBizContent("{" +
                "  \"out_request_no\":\""+code+"\"," +
                "  \"trade_no\":\""+outTradeNo+"\"," +
                "  \"settle_info\":{" +
                "    \"settle_detail_infos\":[" +
                "      {" +
                "        \"trans_in_type\":\"defaultSettle\"," +
                "        \"settle_entity_id\":\""+smid+"\"," +
                "        \"settle_entity_type\":\"SecondMerchant\"," +
                "        \"amount\":"+amount+"," +
                "      }" +
                "    ]" +
                "  }," +
                "  \"extend_params\":{" +
                "    \"royalty_freeze\":\"true\"" +
                "  }" +
                "}");
        AlipayTradeSettleConfirmResponse response = null;
        try {
            response = alipayClient.execute(request);
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        if(response.isSuccess()){
            System.out.println("调用成功");
            return ResultUtil.success();
        } else {
            System.out.println("调用失败");
            return ResultUtil.error("出现问题啦");
        }
    }
    /**
     * 支付宝支付
     */
    public ResultUtil alipay(String body, String subject, String passbackParams, String outTradeNo, String amount, String notifyUrl) {
    public ResultUtil alipay(String smid,String body, String subject, String passbackParams, String outTradeNo, String amount, String notifyUrl) {
//        //构造client
//        CertAlipayRequest certAlipayRequest = new CertAlipayRequest ();
//        //设置网关地址
@@ -124,8 +164,6 @@
//        }  catch (AlipayApiException e ) {
//            e.printStackTrace();
//        }
        //实例化客户端
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey, "json", "UTF-8", alipay_public_key, "RSA2");
        //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
@@ -139,9 +177,23 @@
        model.setTotalAmount(amount);//付款金额
        model.setProductCode("QUICK_MSECURITY_PAY");
        model.setPassbackParams(passbackParams);//自定义参数
        SettleInfo settleInfo = new SettleInfo();
        settleInfo.setSettlePeriodTime("3d");
        SettleDetailInfo settleDetailInfo = new SettleDetailInfo();
        settleDetailInfo.setTransInType("defaultSettle");
        settleDetailInfo.setAmount(amount);
        List<SettleDetailInfo> settleDetailInfos = new ArrayList<>();
        settleDetailInfos.add(settleDetailInfo);
        settleInfo.setSettleDetailInfos(settleDetailInfos);
        model.setSettleInfo(settleInfo);
        SubMerchant subMerchant = new SubMerchant();
        subMerchant.setMerchantId(smid);
        model.setSubMerchant(subMerchant);
        ExtendParams extendParams = new ExtendParams();
        extendParams.setRoyaltyFreeze("true");// 冻结资金 用于后续分账处理
        model.setExtendParams(extendParams);
        request.setBizModel(model);
        request.setNotifyUrl(callbackPath + notifyUrl);
        try {
            //这里和普通的接口调用不同,使用的是sdkExecute
            AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
cloud-server-course/src/main/resources/sharding-jdbc.properties
@@ -14,9 +14,9 @@
datasource.names=master0
datasource.master0.type=com.alibaba.druid.pool.DruidDataSource
datasource.master0.driverClassName=com.mysql.cj.jdbc.Driver
datasource.master0.url=jdbc:mysql://127.0.0.1:3306/playpai_course?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
datasource.master0.url=jdbc:mysql://192.168.110.110:3306/playpai_course?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
datasource.master0.username=root
datasource.master0.password=playpai2023!
datasource.master0.password=123456
datasource.master0.maxActive=20
datasource.master0.maxWait=60000
datasource.master0.minIdle=5
cloud-server-management/src/main/java/com/dsh/course/mapper/BankMapper.java
New file
@@ -0,0 +1,9 @@
package com.dsh.course.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsh.guns.modular.system.model.Bank;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface BankMapper extends BaseMapper<Bank> {
}
cloud-server-management/src/main/java/com/dsh/course/mapper/TOperatorAuthMapper.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsh.guns.modular.system.model.OperatorAuth;
import com.dsh.guns.modular.system.model.OperatorAuthAlipay;
import com.dsh.guns.modular.system.model.TTurn;
import org.apache.ibatis.annotations.Mapper;
@@ -15,6 +16,6 @@
 * @since 2023-09-19
 */
@Mapper
public interface TOperatorAuthMapper extends BaseMapper<OperatorAuth> {
public interface TOperatorAuthMapper extends BaseMapper<OperatorAuthAlipay> {
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/api/AliPayMsgConfig.java
New file
@@ -0,0 +1,90 @@
package com.dsh.guns.modular.system.api;
import cn.hutool.core.io.FileUtil;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.msg.AlipayMsgClient;
import com.alipay.api.msg.MsgHandler;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dsh.guns.modular.system.model.OperatorAuthAlipay;
import com.dsh.guns.modular.system.model.OperatorUser;
import com.dsh.guns.modular.system.service.IOperatorAuthService;
import com.dsh.guns.modular.system.service.IOperatorUserService;
import com.dsh.guns.modular.system.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
@Component
@Configuration
@EnableConfigurationProperties({AliPayProperties.class})
public class AliPayMsgConfig {
    @Autowired
    private IOperatorAuthService operatorAuthService;
    @Autowired
    private IOperatorUserService operatorUserService;
    @Autowired
    private IUserService userService;
    private AliPayProperties aliPay;
    public AliPayMsgConfig(AliPayProperties aliPay) {
        this.aliPay = aliPay;
    }
    @Bean
    public AlipayMsgClient alipayMsgClient() throws Exception {
        AlipayMsgClient alipayMsgClient = AlipayMsgClient.getInstance(aliPay.getAppId());
        alipayMsgClient.setConnector("openchannel.alipay.com");
        alipayMsgClient.setSecurityConfig(aliPay.getSignType(), aliPay.getAppPrivateKey(), aliPay.getAlipay_public_key());
        alipayMsgClient.setCharset(aliPay.getChartSet());
        alipayMsgClient.setMessageHandler(new MsgHandler() {
            /**
             * 客户端接收到消息后回调此方法
             *  @param  msgApi 接收到的消息的消息api名
             *  @param  msgId 接收到的消息的消息id
             *  @param  bizContent 接收到的消息的内容,json格式
             */
            @Override
            public void onMessage (String msgApi, String msgId, String bizContent) {
                System.err.println("消息对象"+msgApi);
                System.err.println("id"+msgId);
                System.err.println("内容"+bizContent);
                if (msgApi.equals("ant.merchant.expand.indirect.zft.passed")){
                    // 审核通过
                    JSONObject json = JSONObject.parseObject(bizContent);
                    String smid = json.getString("smid");
                    String order_id = json.getString("order_id");
                    OperatorAuthAlipay orderNo = operatorAuthService.getOne(new QueryWrapper<OperatorAuthAlipay>()
                            .eq("orderNo", order_id));
                    if (orderNo!=null){
                        Integer operatorId = orderNo.getOperatorId();
                        OperatorUser operatorId1 = operatorUserService.getOne(new QueryWrapper<OperatorUser>()
                                .eq("operatorId", operatorId));
                        if (operatorId1!=null){
                            operatorId1.setAlipayNum(smid);
                            operatorId1.setAlipayAudit(2);
                        }
                    }
                }else if (msgApi.equals("ant.merchant.expand.indirect.zft.rejected")){
                    // 审核拒绝
                    JSONObject json = JSONObject.parseObject(bizContent);
                    String reason = json.getString("reason");
                    String order_id = json.getString("order_id");
                    OperatorAuthAlipay orderNo = operatorAuthService.getOne(new QueryWrapper<OperatorAuthAlipay>()
                            .eq("orderNo", order_id));
                    if (orderNo!=null){
                        orderNo.setRefuseReason(reason);
                        Integer operatorId = orderNo.getOperatorId();
                        OperatorUser operatorId1 = operatorUserService.getOne(new QueryWrapper<OperatorUser>()
                                .eq("operatorId", operatorId));
                        if (operatorId1!=null){
                            operatorId1.setAlipayAudit(3);
                        }
                    }
                }
            }
        });
        alipayMsgClient.connect();
        return alipayMsgClient;
    }
 }
cloud-server-management/src/main/java/com/dsh/guns/modular/system/api/AliPayProperties.java
New file
@@ -0,0 +1,38 @@
package com.dsh.guns.modular.system.api;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
@Data
@ConfigurationProperties(prefix = "alipay")
public class AliPayProperties {
    /**
     * 加签类型
     */
    private String signType = "RSA2";
    /**
     * 应用id
     */
    private String appId = "2021004105665036";
    /**
     * 请求使用的编码格式,如utf-8,gbk,gb2312等
     */
    private String chartSet = "utf-8";
    private String appPrivateKey="MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCi5i9nW/hGLJ3A06cZxTQdviFC7THpdSihoTYGLr9q006hu0V26ecBMY/o4w5bvIX0Ok/yofmZsVcCJpAPvbXL/uqVrIjnRRxXiaeBFThlxoBUTdunvbUSDYfzlEhJr5NvUKI6H6lz2niXlQGx4qy8Hau4ccWit9kM8jwUvsBVQoFgJA+xrjMvooA7YLopQtpOD+UJr5thApTSf1xrnr1W12yolTLEH15JmNV372cqXrYUuqnY0QsaPtxeqJUGAOcGdVLllQ7easEznP8DFBvDdHATcmp2SHNQDUEWN6MCVPbMgY06NQVqAXxqjTAYSVh+6TRu6bofPmpYC3TZB003AgMBAAECggEBAJAcR2+PA3NBYUYHeFrqBRMS8uX8ZR19kjZ7IgoSLTFaQsP9opRylPSPXhrPVBKAE5leRQAHn4MCSlESwHvMfxo7KFjFTFAc6dffZZpipYQUOc9bGampwJh58/3e/pyBgVMG6J23CPf/HJQtNFSkjd/V9+ayb/9l2dUEL3bC0fAZ/dbx8HsxdLw8wn3fLlWLj68hOMqa2deCZe3JdSVsPbeWqkh56FFsMLug0Nd+Ar4TgRl9/jnhXF0JWiD0LmPUYLhboY7EfUBzN4w1iYbDi1P+3zvoOYsiVKAXox9GMhQ2VzOO2UcSTuizSza2e98mGpabl/GpKmCz+RDFjtkX6eECgYEA2MyCij65eO3aGIm3FUe93DULRBYTfX8qJQSJq2WOWA3mmQlEW6L3O2B5/lG2h+8WmN6iLEs9eHpgycGYp7vAqgrANEn16ACVcuyx0scFtrZfZ+kmHMzFfiUWxJjVYk/6YngsGVBLdw6ueM42C8TTP67X9tU5TdVGoGWuqEj4W98CgYEAwFqwprXOch5Pqk/RPbb49r0Ou03K/UbciWnWWKzUhFFNS8MdlQPoDvQZbMwHLeWsa2VhaKITK3x5biLQb3U+0GLOn6lTvEyrEUH+ucREyLgVYTRAvwBPtnvlrzpyxPk2HnslQjju8WrvvLLBMKWUjlTrTOzhaHT21gz3pHMiOakCgYEAhLmfaXdBITGshb054sNLDtdCkGpbgEcrzAHdLps769iGxkYQHXHFngpQZUwtTUcoNGqIKknd1jZFrv7gsD+XkgKG7PwimehRlkwmCX5ilxtLiVgJRzRt6+5U5AMVD90a0tHzXYP0z2yjj73fBJF5KtGl0a10KZxaYrQdm1UhB00CgYBZZgzx/k9rtHC8LAqIj1CYhHejT92G53c6Gkl3vyOqN4sgKhfGmSEySfrDGPRBPZxr8ZtbIPCd5mUdberH0osWGMYFaJI1UsCy7aQwvGpniz7MhZeN7dweaOjwDs8mgtjHQ96mL4XGCDhR0BZ/wIURvZ/6iaGdhbbu9unlsWj3uQKBgQCmZYdsbbZkd3ev6f8rwyvMz+DrCQyYpY44cegBYuJgrZiQnL2fJioeN7ixX0UM48SfwsZEIrzshP/LGAwnc2MdjxKUl4jLN8SEe0NAjXOnz9Zaw740+aOmLpXcLWdP4uM2gIhWsvW1tEkQZCXmm7c9s/RsU8Pmzv+YL3+fSijOzA==";
    private String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmu8n/4yTHWbn7VOrNc9OsLtDL1bEQ8gC1dHkj8Wy5z0mkaOsjJRIG/28ze12M0V8jdCKuuDr5Z1OPKiqf+XO3ypguEh+mYUVMBM/cZodDFQfTY1TKLWjvQCuaqlA+QUTCK6f7T7stsgyQ1o9Jj0rXZDz6PM4QHSTzjrLIBaeqM5WIBvH+fy/X+QG5Utd+/UT0kc0JyvuKhZ65yVUd/C9VcwJJAPliRsAQNrqYterwAJ9zvw9tF11wj9W0XgJ8Ccu4x3gR1vrlLRJJo/OA97RmxPQ+5hSacWQZCUd1dwiBq+YCrKVHGTj14izRHXrLc0yBlRXo7tBOIqcy3IsvKVthQIDAQAB";//支付宝支付公钥
    /**
     * 应用公钥证书路径
     */
    private String appCertPublicKeyPath;
    /**
     * 支付宝公钥证书路径
     */
    private String aliPayCertPublicKeyPath;
    /**
     * 支付宝根证书路径
     */
    private String aliPayRootCertPath;
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/api/SaticScheduleTask.java
@@ -8,19 +8,24 @@
import com.alipay.api.domain.PrivilegeBenefit;
import com.alipay.api.request.AlipayMerchantIndirectAuthorderCloseRequest;
import com.alipay.api.request.AlipayMerchantIndirectAuthorderQuerystatusRequest;
import com.alipay.api.request.AntMerchantExpandIndirectZftorderQueryRequest;
import com.alipay.api.response.AlipayMerchantIndirectAuthorderCloseResponse;
import com.alipay.api.response.AlipayMerchantIndirectAuthorderQuerystatusResponse;
import com.alipay.api.response.AntMerchantExpandIndirectZftorderQueryResponse;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dsh.guns.modular.system.model.OperatorAuth;
import com.dsh.guns.modular.system.model.OperatorAuthAlipay;
import com.dsh.guns.modular.system.model.OperatorUser;
import com.dsh.guns.modular.system.model.User;
import com.dsh.guns.modular.system.service.IOperatorAuthService;
import com.dsh.guns.modular.system.service.IOperatorUserService;
import com.dsh.guns.modular.system.service.IUserService;
import com.dsh.guns.modular.system.util.PayMoneyUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import sun.applet.Main;
import java.time.LocalDateTime;
import java.util.List;
@@ -34,131 +39,199 @@
    private IOperatorUserService operatorUserService;
    @Autowired
    private IUserService userService;
    @Autowired
    private PayMoneyUtil payMoneyUtil;
    private String appPrivateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCi5i9nW/hGLJ3A06cZxTQdviFC7THpdSihoTYGLr9q006hu0V26ecBMY/o4w5bvIX0Ok/yofmZsVcCJpAPvbXL/uqVrIjnRRxXiaeBFThlxoBUTdunvbUSDYfzlEhJr5NvUKI6H6lz2niXlQGx4qy8Hau4ccWit9kM8jwUvsBVQoFgJA+xrjMvooA7YLopQtpOD+UJr5thApTSf1xrnr1W12yolTLEH15JmNV372cqXrYUuqnY0QsaPtxeqJUGAOcGdVLllQ7easEznP8DFBvDdHATcmp2SHNQDUEWN6MCVPbMgY06NQVqAXxqjTAYSVh+6TRu6bofPmpYC3TZB003AgMBAAECggEBAJAcR2+PA3NBYUYHeFrqBRMS8uX8ZR19kjZ7IgoSLTFaQsP9opRylPSPXhrPVBKAE5leRQAHn4MCSlESwHvMfxo7KFjFTFAc6dffZZpipYQUOc9bGampwJh58/3e/pyBgVMG6J23CPf/HJQtNFSkjd/V9+ayb/9l2dUEL3bC0fAZ/dbx8HsxdLw8wn3fLlWLj68hOMqa2deCZe3JdSVsPbeWqkh56FFsMLug0Nd+Ar4TgRl9/jnhXF0JWiD0LmPUYLhboY7EfUBzN4w1iYbDi1P+3zvoOYsiVKAXox9GMhQ2VzOO2UcSTuizSza2e98mGpabl/GpKmCz+RDFjtkX6eECgYEA2MyCij65eO3aGIm3FUe93DULRBYTfX8qJQSJq2WOWA3mmQlEW6L3O2B5/lG2h+8WmN6iLEs9eHpgycGYp7vAqgrANEn16ACVcuyx0scFtrZfZ+kmHMzFfiUWxJjVYk/6YngsGVBLdw6ueM42C8TTP67X9tU5TdVGoGWuqEj4W98CgYEAwFqwprXOch5Pqk/RPbb49r0Ou03K/UbciWnWWKzUhFFNS8MdlQPoDvQZbMwHLeWsa2VhaKITK3x5biLQb3U+0GLOn6lTvEyrEUH+ucREyLgVYTRAvwBPtnvlrzpyxPk2HnslQjju8WrvvLLBMKWUjlTrTOzhaHT21gz3pHMiOakCgYEAhLmfaXdBITGshb054sNLDtdCkGpbgEcrzAHdLps769iGxkYQHXHFngpQZUwtTUcoNGqIKknd1jZFrv7gsD+XkgKG7PwimehRlkwmCX5ilxtLiVgJRzRt6+5U5AMVD90a0tHzXYP0z2yjj73fBJF5KtGl0a10KZxaYrQdm1UhB00CgYBZZgzx/k9rtHC8LAqIj1CYhHejT92G53c6Gkl3vyOqN4sgKhfGmSEySfrDGPRBPZxr8ZtbIPCd5mUdberH0osWGMYFaJI1UsCy7aQwvGpniz7MhZeN7dweaOjwDs8mgtjHQ96mL4XGCDhR0BZ/wIURvZ/6iaGdhbbu9unlsWj3uQKBgQCmZYdsbbZkd3ev6f8rwyvMz+DrCQyYpY44cegBYuJgrZiQnL2fJioeN7ixX0UM48SfwsZEIrzshP/LGAwnc2MdjxKUl4jLN8SEe0NAjXOnz9Zaw740+aOmLpXcLWdP4uM2gIhWsvW1tEkQZCXmm7c9s/RsU8Pmzv+YL3+fSijOzA==";//支付宝开发者应用私钥
    private String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmu8n/4yTHWbn7VOrNc9OsLtDL1bEQ8gC1dHkj8Wy5z0mkaOsjJRIG/28ze12M0V8jdCKuuDr5Z1OPKiqf+XO3ypguEh+mYUVMBM/cZodDFQfTY1TKLWjvQCuaqlA+QUTCK6f7T7stsgyQ1o9Jj0rXZDz6PM4QHSTzjrLIBaeqM5WIBvH+fy/X+QG5Utd+/UT0kc0JyvuKhZ65yVUd/C9VcwJJAPliRsAQNrqYterwAJ9zvw9tF11wj9W0XgJ8Ccu4x3gR1vrlLRJJo/OA97RmxPQ+5hSacWQZCUd1dwiBq+YCrKVHGTj14izRHXrLc0yBlRXo7tBOIqcy3IsvKVthQIDAQAB";//支付宝支付公钥
    private String aliAppid = "2021004105665036";//支付宝appid
    // 一个小时执行一次
    @Scheduled(fixedRate=6000)
    @Scheduled(fixedRate=60000)
    private void configureTasks() {
        System.err.println("执行定时任务时间: " + LocalDateTime.now());
        // 回查商户认证单审核状态 查询除了审核通过以外的认证单
        List<OperatorAuth> list = operatorAuthService.list(new QueryWrapper<OperatorAuth>().ne("orderStatus", "AUDIT_PASS"));
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","2021003199648333",
                "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCXnbOiY2VkKb5ubpcwKqzmqbKotpKGA79yn2aQeZiTWhqmLdCKjVp64naGpnOQEC7hDZluOO1crWHVhIEp7XGIEVawA7mb/dBbzo4wQQYVtLX6iEZViYk/mA7G59S/lvsLVi+jkVGlx2Co8JhvkTRtCEFgUnVA9o2jKy5BIEwrusNuDjrn5X+3ZvfZJN/iV0yzhzXynzioZt/DIcdODOVPUrem8T/5ifJ6ydSKIumgquBKyQnFOj+LRt5qMioBVzLnod0S/6kKMoNVN3/qx/PHRaeHbrF7I67IpGNROg0D9C4d9xXbGhSqQciXitLVnNzWuCov4Ie5nT5VCg9RjXyVAgMBAAECggEAf5rU81lgnnqbseoWCQ4B02kD2wc+Lti8qsYJ1pLgnTP6td5dZB8wBbjQNOem35sfOX7uoVv8OkIa00/gPd9/7BtbsGySLP3j/UDNX0N60Y30k1VajOdiwklCNpor7swtog75rVrDMxmo+sb0JQI684E9NMpxsSlRcAEJvvpl4W7LkhfJZyCUNXPAAh9SOkFOeaXATueEQ57V5vpeKM2JRJy//1P1LS2c/quLRIPqaTYgVAvxfdAYQvvP0vPijxHtxJlDxPa8xBCv7D46d+HeIA6X5ZkoTKLYbe2D36utP8rqGsXw1EyrYyuq6HdEAi/I4YXvWyLsXuQTSACSp+piAQKBgQD6am94xyQ4CRiMA/T1kvPPkXD+y/1Sbr3+T1S6X4naAGdkZS+TbPaWEddd2Huml6q+C2UcGhQpupBkbk88Nbs94jOulsfF6b24nOo1xH5z/BtS0kYuYaNLhebJtzrR9gupT1Uv0q+QybWZ3hQswOK0vwpkDk9DOysFynfMyXXlwQKBgQCa/z3oZ4iYZpTLNdRhMS0u593Jq8MDemimBJGEXPvDBByyE5Ohf22UqP5MjS1euosAQSva+/HmKeEigLgjoQTo29mA1nzPe0AKN3huWbqPIOdeIOA694Nj6ooOPS8iDMjKu61wPz/rZ57bv41LsPXr0y4UsU30JWg2rzgRnGgT1QKBgH30c0VIxUr6KEKk6t1qoP/SpAdFC5Ie6am0tWVZELl6Yob47kk1EYLCTpWBghB1UQhuKtlLtMCYenBJm8kpLZke4ef7J1jBDRCCvLt2rjQgpo2t/mbt7XjbTQ5A/3EEVTFAGhUH4A7vpkxSi8tG6cEIJm3VVMD4TdeH02JKIucBAoGAA0v+kxzwqN01uQTSGackIOVJsGp44XAPHcjnF3uq10EVIyyLbVn6iLj3f8VY+7TYFA9O0X+ea5jkcwlt4UQhiJp0i+sECJ3EhPMdGqvJ7hVzFmt4mYh+QPfSK+9dO0ouUzGexM5zm5w+osn2RW/kKzn4tvP2hoTtLIyZkrZS+GkCgYAQGKe84pXggSIPwztg0aBJUC9b4fXe3PR4DFTM85lBUKYJnQGRzf6NDCD83hwJoNdnyZkztyK72LDOn2NOzPfYcfUl6MQFPovXeMWaVidRfo4ZgyFA/C1egduebaIkXE+DpGhiy7alQ4k+LxUfy6oJBT9Sq8oq7EVBEkeff3p66g==","json","GBK",
                "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmu8n/4yTHWbn7VOrNc9OsLtDL1bEQ8gC1dHkj8Wy5z0mkaOsjJRIG/28ze12M0V8jdCKuuDr5Z1OPKiqf+XO3ypguEh+mYUVMBM/cZodDFQfTY1TKLWjvQCuaqlA+QUTCK6f7T7stsgyQ1o9Jj0rXZDz6PM4QHSTzjrLIBaeqM5WIBvH+fy/X+QG5Utd+/UT0kc0JyvuKhZ65yVUd/C9VcwJJAPliRsAQNrqYterwAJ9zvw9tF11wj9W0XgJ8Ccu4x3gR1vrlLRJJo/OA97RmxPQ+5hSacWQZCUd1dwiBq+YCrKVHGTj14izRHXrLc0yBlRXo7tBOIqcy3IsvKVthQIDAQAB","RSA2");
        for (OperatorAuth operatorAuth : list) {
        // 第三步:查询申请单审核结果
        AlipayMerchantIndirectAuthorderQuerystatusRequest request1 = new AlipayMerchantIndirectAuthorderQuerystatusRequest();
        request1.setBizContent("{" +
                "  \"order_no\":\""+operatorAuth.getOrderNo()+"\"," +
                "  \"out_biz_no\":\""+operatorAuth.getOutBizNo()+"\"," +
                "}");
        AlipayMerchantIndirectAuthorderQuerystatusResponse response1 = null;
        try {
            response1 = alipayClient.execute(request1);
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        if(response1.isSuccess()){
            System.out.println("调用成功");
        } else {
            System.out.println("调用失败");
        }
            JSONObject json = JSONObject.parseObject(response1.getBody());
            JSONObject sign = json.getJSONObject("alipay_merchant_indirect_authorder_querystatus_response");
            String orderNo = sign.getString("order_no");
            String order_status = sign.getString("order_status");
            operatorAuth.setOrderStatus(order_status);
            operatorAuth.setOrderNo(orderNo);
            // 失败原因
            JSONArray verify_list = sign.getJSONArray("verify_list");
            StringBuilder reason = new StringBuilder("");
            // 失败原因
            if (verify_list!=null){
                for (int i = 0; i < verify_list.size(); i++) {
                    JSONObject jsonObject = verify_list.getJSONObject(i);
                    String fail_reason = jsonObject.getString("fail_reason");
                    reason.append(fail_reason+",");
                }
                String res = reason.toString();
                String substring = res.substring(0, res.length() - 1);
                operatorAuth.setRefuseReason(substring);
                operatorAuthService.updateById(operatorAuth);
                // 获取运营商的管理员id
/**
 * 状态 1=审核中(AUDITING)、2=待联系人确认(CONTACT_CONFIRM),
 * 3=待法人确认(LEGAL_CONFIRM)、4=审核通过(AUDIT_PASS)、
 * 5=审核失败(AUDIT_REJECT)、6=已冻结(AUDIT_FREEZE)、
 * 7=已撤回(CANCELED)、8=联系人处理中(CONTACT_PROCESSING)
 */
            }
            Integer operatorId = operatorAuth.getOperatorId();
            User one = userService.getOne(new QueryWrapper<User>().eq("objectId", operatorId)
                    .eq("objectType", 2));
            OperatorUser userId = operatorUserService.getOne(new QueryWrapper<OperatorUser>()
                    .eq("userId", one.getId()));
            if (userId!=null){
                switch (order_status){
                    case "AUDITING":
                        userId.setAlipayAudit(1);
                        break;
                    case "CONTACT_CONFIRM":
                        userId.setAlipayAudit(2);
                        break;
                    case "LEGAL_CONFIRM":
                        userId.setAlipayAudit(3);
                        break;
                    case "AUDIT_PASS":
                        userId.setAlipayAudit(4);
                        break;
                    case "AUDIT_REJECT":
                        userId.setAlipayAudit(5);
                        break;
                    case "AUDIT_FREEZE":
                        userId.setAlipayAudit(6);
                        break;
                    case "CANCELED":
                        userId.setAlipayAudit(7);
                        break;
                    case "CONTACT_PROCESSING":
                        userId.setAlipayAudit(8);
                        break;
                }
                operatorUserService.updateById(userId);
            }
            // 审核通过
            String qr_code = sign.getString("qr_code");
            if (qr_code!=null&& (!qr_code.equals(""))){
                // 将二维码链接保存起来
                operatorAuth.setQrCode(qr_code);
                operatorAuthService.updateById(operatorAuth);
            }
//            if (operatorAuth.getOrderStatus().equals("AUDIT_REJECT")
//            || operatorAuth.getOrderStatus().equals("AUDIT_FREEZE")
//                    || operatorAuth.getOrderStatus().equals("CANCELED")){
//                // 未通过审核 撤销申请单
//                AlipayClient alipayClient1 = new DefaultAlipayClient
//                        ("https://openapi.alipay.com/gateway.do",
//                                "2021004123692417","MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCq1V7akWZ/V9mr8NGW2CihIbY93M7M33LpVM5y63qEuN7yqyJV197WT6c7uHBcttY6cJLawXLihgC8KF6ZzdXWbm4n4RiigxIaz9LbSVBjYplkNgG2rg7W7dB8wrrqcwBQU0n+pFX3KWJkHRXDugqE21VCGgzySKQBkhiztmTI/z039PdWp2RTGLiL/OuwVrPjQv3He2orYIZgADWid0mtZXCEFosDkaQDTEqCfuDEuMouEiaIk/lw0ZWxiR1Fvfr82nO0r94lM/CC1wNRif2+2ESR+YystsWQPm16eRgS3wAQz2cOTP4L5VNKNzcUAgxTQK3Bj8GvqrYUUlcC7VCTAgMBAAECggEAPKmYDTUkmIOxoATb6BzKEK3P8Re/t7CBNaoPxW8pCog7YyCyCJmnX6LZV7Oe8s1aNVZUT6nyCc5b5HTRYvxcutBr/W1JOiwg+bRiw8u86A3TOmqTITOdwWShbCwaA7binaN12x6wCByB+9r4J5Cgu5zHIbnubvqsgoJGk0ppb5XbyYkikOAXPHli4PUe4GOorSuhRdq3XlGWiMwh4yt48kF4vP+2ByuDOYQU6LjGs0wn/5LpN+ReLdXTab65Cz7WYTDrTndyIrhFg7cyT5m2gtiJuEgIJ45uaaeGNIecV6JSnRsEv4YD4m+I58yhyyvw9zd0Z5qP04QNjy7OK2UeQQKBgQD/EJpaVv0RR83Z6Hp2YVrPoiMz279U5bgkBbcxgr9GR2YYE3rrHqBdqch1Uitu+g6LIC+SDtib7yG9C7EqPHB3fsfEw8NtL54gy3OFbCcH3lqFxgtrCpQ2SIXQjd8932TpzcMdD6jzyUoSraT+lgkf2MgjqFiMbNVg50lGDyWujQKBgQCrdbXTttuazdwU0pdRFCuTz42iIJSZtHFUPvmbrBy7LFQ8NTN76dqLM1RUH7gJukPc4+Ax+DfpDgHZ4nQ2KSk9FweLqKSf10kojibKpc3nkgDRtUtSTar8fZn9VKTuXK1Ho0LUkjDlHjlEwUuf/Ef+IdjzXDJ2UPWHp2YzxvNDnwKBgBWGtjAnpUX/FF1upF83Si251lS7GAO3O3o2zUYtba0lu3UOt9H+DLS67oMQQ0AjdHTDa6BdBmTqoqNMyE/zN96t4Xg2uViOqz7DTOWWwhiE6IjftPj8tJN8PWbjglK7ds3QosXiG3UvqMO4yfL+gJiieAmiXI7FZKDABEwYXSrFAoGASXVe91vKbmJwPgOTjMsleGhd9+4ZfFjQjRWF/2oXzSFK3Zi1fAtO9ICDSp9kS9afqI2AyifcXF8B8AWTYHj2EBRDyVPxZAHqeBOfDwdGVkY5T59qq9JWxWJSjTSsjOrr2ltaEJSpmh/+zTQ7YEnH1ltOBcWkYQiCiSHxKZG9O2UCgYBfBTkjktzv81SnW47d0qRwmiXrcyObmXTe5fIW9e6KaB0SnzcVvoCmm7TTk+Bm4WqNmfb5k8U6J22vdxB1TPlRksnY+VZDM0Grv/xUII9G8oVQ4+NiE5XvQ7+nc5EBJ12of6GxE7/yXZiDld62q2sFZgrFzhvvHV+IADsu/VdIEw==",
//                                "json","GBK",
//                                "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApCzq4BIE4gMdEXxIAAUbiMpSytkzp+LVLVsBtji87rFGfWUcnrr3NKftaw0WtRu+36d1nDVOWW4CmgsOPyj1GOFoTcJOR/BqyIriwyLxpuMS8qgOqGJZXi+W4Nw2AJL6iMVwY2eI8F1G10gACK2I9TNJRzHh3tMTA6ItysbGoekRDtn6Xrkh5V6cyHQjLw0Q6MJK/68XT6/LWzarDEEYrSnIevOydMY32ptAgm5fp/h08M2khCmI6CuMWKmc87dPpd2krGVTALqprAQvB74AIqO+5DE0fN4LoitOYXAtWDCEF4kHN0hQUygIEGCwtMgEVzkf92VLlCX35YtDhWd1yQIDAQAB","RSA2");
//                AlipayMerchantIndirectAuthorderCloseRequest request = new AlipayMerchantIndirectAuthorderCloseRequest();
//        payMoneyUtil.getMessage();
//        List<OperatorAuthAlipay> list = operatorAuthService.list(new QueryWrapper<OperatorAuthAlipay>());
//        for (OperatorAuthAlipay operatorAuthAlipay : list) {
//            System.err.println("执行定时任务时间: " + LocalDateTime.now());
//            AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",
//                    aliAppid,
//                    appPrivateKey, "json", "GBK",
//                    alipay_public_key,
//                    "RSA2");
//            AntMerchantExpandIndirectZftorderQueryRequest request = new AntMerchantExpandIndirectZftorderQueryRequest();
//                request.setBizContent("{" +
//                        "  \"order_no\":\""+operatorAuth.getOrderNo()+"\"," +
//                        "  \"out_biz_no\":\""+operatorAuth.getOutBizNo()+"\"" +
//                    "  \"order_id\":\"" + operatorAuthAlipay.getOrderNo() + "\"," +
//                    "  \"external_id\":\"" + operatorAuthAlipay.getOutBizNo() + "\"" +
//                        "}");
//                AlipayMerchantIndirectAuthorderCloseResponse response = null;
//            AntMerchantExpandIndirectZftorderQueryResponse response = null;
//                try {
//                    response = alipayClient1.execute(request);
//                response = alipayClient.execute(request);
//                } catch (AlipayApiException e) {
//                    e.printStackTrace();
//                }
//                if(response.isSuccess()){
//                    System.out.println("撤销申请单调用成功");
//                System.out.println("调用成功");
//                JSONObject json = JSONObject.parseObject(response.getBody());
//                System.err.println(json);
//                JSONObject sign = json.getJSONObject("ant_merchant_expand_indirect_zftorder_query_response");
//                JSONArray orders = sign.getJSONArray("orders");
//                    JSONObject order = orders.getJSONObject(0);
//                    // 提取订单信息
//                    String reason = order.getString("reason");
//                    String smid = order.getString("smid");
//                    String merchantName = order.getString("merchant_name");
//                    String applyTime = order.getString("apply_time");
//                    String externalId = order.getString("external_id");
//                    String orderId = order.getString("order_id");
//                    String applyType = order.getString("apply_type");
//                    String status = order.getString("status");
//                    // 打印订单信息
//                    System.out.println("Reason: " + reason);
//                    System.out.println("Merchant Name: " + merchantName);
//                    System.out.println("Apply Time: " + applyTime);
//                    System.out.println("External ID: " + externalId);
//                    System.out.println("Order ID: " + orderId);
//                    System.out.println("Apply Type: " + applyType);
//                    System.out.println("Status: " + status);
//                } else {
//                    System.out.println("撤销申请单调用失败");
//                System.out.println("调用失败");
//                }
//            }
        }
//        // 回查商户认证单审核状态 查询除了审核通过以外的认证单
//        List<OperatorAuthAlipay> list = operatorAuthService.list(new QueryWrapper<OperatorAuthAlipay>().ne("orderStatus", "AUDIT_PASS"));
//        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","2021003199648333",
//                "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCXnbOiY2VkKb5ubpcwKqzmqbKotpKGA79yn2aQeZiTWhqmLdCKjVp64naGpnOQEC7hDZluOO1crWHVhIEp7XGIEVawA7mb/dBbzo4wQQYVtLX6iEZViYk/mA7G59S/lvsLVi+jkVGlx2Co8JhvkTRtCEFgUnVA9o2jKy5BIEwrusNuDjrn5X+3ZvfZJN/iV0yzhzXynzioZt/DIcdODOVPUrem8T/5ifJ6ydSKIumgquBKyQnFOj+LRt5qMioBVzLnod0S/6kKMoNVN3/qx/PHRaeHbrF7I67IpGNROg0D9C4d9xXbGhSqQciXitLVnNzWuCov4Ie5nT5VCg9RjXyVAgMBAAECggEAf5rU81lgnnqbseoWCQ4B02kD2wc+Lti8qsYJ1pLgnTP6td5dZB8wBbjQNOem35sfOX7uoVv8OkIa00/gPd9/7BtbsGySLP3j/UDNX0N60Y30k1VajOdiwklCNpor7swtog75rVrDMxmo+sb0JQI684E9NMpxsSlRcAEJvvpl4W7LkhfJZyCUNXPAAh9SOkFOeaXATueEQ57V5vpeKM2JRJy//1P1LS2c/quLRIPqaTYgVAvxfdAYQvvP0vPijxHtxJlDxPa8xBCv7D46d+HeIA6X5ZkoTKLYbe2D36utP8rqGsXw1EyrYyuq6HdEAi/I4YXvWyLsXuQTSACSp+piAQKBgQD6am94xyQ4CRiMA/T1kvPPkXD+y/1Sbr3+T1S6X4naAGdkZS+TbPaWEddd2Huml6q+C2UcGhQpupBkbk88Nbs94jOulsfF6b24nOo1xH5z/BtS0kYuYaNLhebJtzrR9gupT1Uv0q+QybWZ3hQswOK0vwpkDk9DOysFynfMyXXlwQKBgQCa/z3oZ4iYZpTLNdRhMS0u593Jq8MDemimBJGEXPvDBByyE5Ohf22UqP5MjS1euosAQSva+/HmKeEigLgjoQTo29mA1nzPe0AKN3huWbqPIOdeIOA694Nj6ooOPS8iDMjKu61wPz/rZ57bv41LsPXr0y4UsU30JWg2rzgRnGgT1QKBgH30c0VIxUr6KEKk6t1qoP/SpAdFC5Ie6am0tWVZELl6Yob47kk1EYLCTpWBghB1UQhuKtlLtMCYenBJm8kpLZke4ef7J1jBDRCCvLt2rjQgpo2t/mbt7XjbTQ5A/3EEVTFAGhUH4A7vpkxSi8tG6cEIJm3VVMD4TdeH02JKIucBAoGAA0v+kxzwqN01uQTSGackIOVJsGp44XAPHcjnF3uq10EVIyyLbVn6iLj3f8VY+7TYFA9O0X+ea5jkcwlt4UQhiJp0i+sECJ3EhPMdGqvJ7hVzFmt4mYh+QPfSK+9dO0ouUzGexM5zm5w+osn2RW/kKzn4tvP2hoTtLIyZkrZS+GkCgYAQGKe84pXggSIPwztg0aBJUC9b4fXe3PR4DFTM85lBUKYJnQGRzf6NDCD83hwJoNdnyZkztyK72LDOn2NOzPfYcfUl6MQFPovXeMWaVidRfo4ZgyFA/C1egduebaIkXE+DpGhiy7alQ4k+LxUfy6oJBT9Sq8oq7EVBEkeff3p66g==","json","GBK",
//                "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmu8n/4yTHWbn7VOrNc9OsLtDL1bEQ8gC1dHkj8Wy5z0mkaOsjJRIG/28ze12M0V8jdCKuuDr5Z1OPKiqf+XO3ypguEh+mYUVMBM/cZodDFQfTY1TKLWjvQCuaqlA+QUTCK6f7T7stsgyQ1o9Jj0rXZDz6PM4QHSTzjrLIBaeqM5WIBvH+fy/X+QG5Utd+/UT0kc0JyvuKhZ65yVUd/C9VcwJJAPliRsAQNrqYterwAJ9zvw9tF11wj9W0XgJ8Ccu4x3gR1vrlLRJJo/OA97RmxPQ+5hSacWQZCUd1dwiBq+YCrKVHGTj14izRHXrLc0yBlRXo7tBOIqcy3IsvKVthQIDAQAB","RSA2");
//        for (OperatorAuthAlipay operatorAuth : list) {
//        // 第三步:查询申请单审核结果
//        AlipayMerchantIndirectAuthorderQuerystatusRequest request1 = new AlipayMerchantIndirectAuthorderQuerystatusRequest();
//        request1.setBizContent("{" +
//                "  \"order_no\":\""+"202312011045284847"+"\"," +
//                "  \"out_biz_no\":\""+"83972149e3f84216ad2654a1571963f4"+"\"," +
//                "}");
//        AlipayMerchantIndirectAuthorderQuerystatusResponse response1 = null;
//        try {
//            response1 = alipayClient.execute(request1);
//        } catch (AlipayApiException e) {
//            e.printStackTrace();
//        }
//        if(response1.isSuccess()){
//            System.out.println("调用成功");
//        } else {
//            System.out.println("调用失败");
//        }
//            JSONObject json = JSONObject.parseObject(response1.getBody());
//            JSONObject sign = json.getJSONObject("alipay_merchant_indirect_authorder_querystatus_response");
//            String orderNo = sign.getString("order_no");
//            String order_status = sign.getString("order_status");
////            operatorAuth.setOrderStatus(order_status);
//            operatorAuth.setOrderNo(orderNo);
//            System.err.println("审核状态:"+order_status);
//
//            // 失败原因
//            JSONArray verify_list = sign.getJSONArray("verify_list");
//            StringBuilder reason = new StringBuilder("");
//            // 失败原因
//            if (verify_list!=null){
//                for (int i = 0; i < verify_list.size(); i++) {
//                    JSONObject jsonObject = verify_list.getJSONObject(i);
//                    String fail_reason = jsonObject.getString("fail_reason");
//                    reason.append(fail_reason+",");
//                }
//                String res = reason.toString();
//                String substring = res.substring(0, res.length() - 1);
//                operatorAuth.setRefuseReason(substring);
//                operatorAuthService.updateById(operatorAuth);
///**
// * 状态 1=审核中(AUDITING)、2=待联系人确认(CONTACT_CONFIRM),
// * 3=待法人确认(LEGAL_CONFIRM)、4=审核通过(AUDIT_PASS)、
// * 5=审核失败(AUDIT_REJECT)、6=已冻结(AUDIT_FREEZE)、
// * 7=已撤回(CANCELED)、8=联系人处理中(CONTACT_PROCESSING)
// */
//            }else{
//                operatorAuth.setRefuseReason(null);
//            }
//            Integer operatorId = operatorAuth.getOperatorId();
//            User one = userService.getOne(new QueryWrapper<User>().eq("objectId", operatorId)
//                    .eq("objectType", 2));
//            OperatorUser userId = operatorUserService.getOne(new QueryWrapper<OperatorUser>()
//                    .eq("userId", one.getId()));
////            if (userId!=null){
////                switch (order_status){
////                    case "AUDITING":
//////                        operatorAuth.setOrderStatus("AUDITING");
////                        userId.setAlipayAudit(1);
////                        break;
////                    case "CONTACT_CONFIRM":
////                        operatorAuth.setOrderStatus("CONTACT_CONFIRM");
////                        userId.setAlipayAudit(2);
////                        break;
////                    case "LEGAL_CONFIRM":
////                        operatorAuth.setOrderStatus("LEGAL_CONFIRM");
////                        userId.setAlipayAudit(3);
////                        break;
////                    case "AUDIT_PASS":
////                        operatorAuth.setOrderStatus("AUDIT_PASS");
////                        userId.setAlipayAudit(4);
////                        break;
////                    case "AUDIT_REJECT":
////                        operatorAuth.setOrderStatus("AUDIT_REJECT");
////                        userId.setAlipayAudit(5);
////                        break;
////                    case "AUDIT_FREEZE":
////                        operatorAuth.setOrderStatus("AUDIT_FREEZE");
////                        userId.setAlipayAudit(6);
////                        break;
////                    case "CANCELED":
////                        operatorAuth.setOrderStatus("CANCELED");
////                        userId.setAlipayAudit(7);
////                        break;
////                    case "CONTACT_PROCESSING":
////                        operatorAuth.setOrderStatus("CONTACT_PROCESSING");
////                        userId.setAlipayAudit(8);
////                        break;
////                }
////                operatorUserService.updateById(userId);
////            }
//            // 审核通过
//            String qr_code = sign.getString("qr_code");
////            operatorAuth.setQrCode(qr_code);
//            operatorAuthService.updateById(operatorAuth);
//            System.err.println("二维码"+qr_code);
////            if (operatorAuth.getOrderStatus().equals("AUDIT_REJECT")
////            || operatorAuth.getOrderStatus().equals("AUDIT_FREEZE")
////                    || operatorAuth.getOrderStatus().equals("CANCELED")){
////                // 未通过审核 撤销申请单
////                AlipayClient alipayClient1 = new DefaultAlipayClient
////                        ("https://openapi.alipay.com/gateway.do",
////                                "2021004123692417","MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCq1V7akWZ/V9mr8NGW2CihIbY93M7M33LpVM5y63qEuN7yqyJV197WT6c7uHBcttY6cJLawXLihgC8KF6ZzdXWbm4n4RiigxIaz9LbSVBjYplkNgG2rg7W7dB8wrrqcwBQU0n+pFX3KWJkHRXDugqE21VCGgzySKQBkhiztmTI/z039PdWp2RTGLiL/OuwVrPjQv3He2orYIZgADWid0mtZXCEFosDkaQDTEqCfuDEuMouEiaIk/lw0ZWxiR1Fvfr82nO0r94lM/CC1wNRif2+2ESR+YystsWQPm16eRgS3wAQz2cOTP4L5VNKNzcUAgxTQK3Bj8GvqrYUUlcC7VCTAgMBAAECggEAPKmYDTUkmIOxoATb6BzKEK3P8Re/t7CBNaoPxW8pCog7YyCyCJmnX6LZV7Oe8s1aNVZUT6nyCc5b5HTRYvxcutBr/W1JOiwg+bRiw8u86A3TOmqTITOdwWShbCwaA7binaN12x6wCByB+9r4J5Cgu5zHIbnubvqsgoJGk0ppb5XbyYkikOAXPHli4PUe4GOorSuhRdq3XlGWiMwh4yt48kF4vP+2ByuDOYQU6LjGs0wn/5LpN+ReLdXTab65Cz7WYTDrTndyIrhFg7cyT5m2gtiJuEgIJ45uaaeGNIecV6JSnRsEv4YD4m+I58yhyyvw9zd0Z5qP04QNjy7OK2UeQQKBgQD/EJpaVv0RR83Z6Hp2YVrPoiMz279U5bgkBbcxgr9GR2YYE3rrHqBdqch1Uitu+g6LIC+SDtib7yG9C7EqPHB3fsfEw8NtL54gy3OFbCcH3lqFxgtrCpQ2SIXQjd8932TpzcMdD6jzyUoSraT+lgkf2MgjqFiMbNVg50lGDyWujQKBgQCrdbXTttuazdwU0pdRFCuTz42iIJSZtHFUPvmbrBy7LFQ8NTN76dqLM1RUH7gJukPc4+Ax+DfpDgHZ4nQ2KSk9FweLqKSf10kojibKpc3nkgDRtUtSTar8fZn9VKTuXK1Ho0LUkjDlHjlEwUuf/Ef+IdjzXDJ2UPWHp2YzxvNDnwKBgBWGtjAnpUX/FF1upF83Si251lS7GAO3O3o2zUYtba0lu3UOt9H+DLS67oMQQ0AjdHTDa6BdBmTqoqNMyE/zN96t4Xg2uViOqz7DTOWWwhiE6IjftPj8tJN8PWbjglK7ds3QosXiG3UvqMO4yfL+gJiieAmiXI7FZKDABEwYXSrFAoGASXVe91vKbmJwPgOTjMsleGhd9+4ZfFjQjRWF/2oXzSFK3Zi1fAtO9ICDSp9kS9afqI2AyifcXF8B8AWTYHj2EBRDyVPxZAHqeBOfDwdGVkY5T59qq9JWxWJSjTSsjOrr2ltaEJSpmh/+zTQ7YEnH1ltOBcWkYQiCiSHxKZG9O2UCgYBfBTkjktzv81SnW47d0qRwmiXrcyObmXTe5fIW9e6KaB0SnzcVvoCmm7TTk+Bm4WqNmfb5k8U6J22vdxB1TPlRksnY+VZDM0Grv/xUII9G8oVQ4+NiE5XvQ7+nc5EBJ12of6GxE7/yXZiDld62q2sFZgrFzhvvHV+IADsu/VdIEw==",
////                                "json","GBK",
////                                "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApCzq4BIE4gMdEXxIAAUbiMpSytkzp+LVLVsBtji87rFGfWUcnrr3NKftaw0WtRu+36d1nDVOWW4CmgsOPyj1GOFoTcJOR/BqyIriwyLxpuMS8qgOqGJZXi+W4Nw2AJL6iMVwY2eI8F1G10gACK2I9TNJRzHh3tMTA6ItysbGoekRDtn6Xrkh5V6cyHQjLw0Q6MJK/68XT6/LWzarDEEYrSnIevOydMY32ptAgm5fp/h08M2khCmI6CuMWKmc87dPpd2krGVTALqprAQvB74AIqO+5DE0fN4LoitOYXAtWDCEF4kHN0hQUygIEGCwtMgEVzkf92VLlCX35YtDhWd1yQIDAQAB","RSA2");
////                AlipayMerchantIndirectAuthorderCloseRequest request = new AlipayMerchantIndirectAuthorderCloseRequest();
////                request.setBizContent("{" +
////                        "  \"order_no\":\""+operatorAuth.getOrderNo()+"\"," +
////                        "  \"out_biz_no\":\""+operatorAuth.getOutBizNo()+"\"" +
////                        "}");
////                AlipayMerchantIndirectAuthorderCloseResponse response = null;
////                try {
////                    response = alipayClient1.execute(request);
////                } catch (AlipayApiException e) {
////                    e.printStackTrace();
////                }
////                if(response.isSuccess()){
////                    System.out.println("撤销申请单调用成功");
////                } else {
////                    System.out.println("撤销申请单调用失败");
////                }
////            }
//        }
    }
    public static void main(String[] args) {
        String s = "{\"sign\":\"Q8wa/EiKqeRiatW3mDhPA3Ia1jYXK6c8CxlhTQb0o9XHui16UURb7oiqnoS+P22q3a3POjmuhl/Rwm6MBGzp8RNcXwoWTExNq29OR/jZ6SU9HWiOUewv0/kGgNj4WHpbGbVqaoaW3/Q6w0IhCSRT3GAsULHPBeWQ2HyrScl549y/mwsI6bX132S9dHJ5O7we4Oho0pDWrQfE+daP4p+y1HVGeD6WGBq5HjXIuqNmE/ZrRFc/R+8baMwRQgECeohKhpPs9Ov1xuzeq/wuk/NuDG9YbE/+cKs/Kkg3fYIPM1CsIwvam3wP2iYhTaUlEYidt++EwJ2QVIB3OD5So5aKdg==\",\"ant_merchant_expand_indirect_zftorder_query_response\":{\"msg\":\"Success\",\"code\":\"10000\",\"orders\":[{\"reason\":\"公安网校验失败\",\"merchant_name\":\"成都玩湃生活体育发展有限公司\",\"apply_time\":\"2023-12-20 18:36:26\",\"external_id\":\"273c5a8ad59f4e5397253045af1de8fe\",\"order_id\":\"2023122000502000000005299341\",\"apply_type\":\"ZHIFUTONG_CREATE\",\"status\":\"-1\"}]}}";
    }
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/OperatorController.java
@@ -9,9 +9,11 @@
import com.alipay.api.request.AlipayMerchantIndirectAuthorderCreateRequest;
import com.alipay.api.request.AlipayMerchantIndirectAuthorderQuerystatusRequest;
import com.alipay.api.request.AntMerchantExpandIndirectImageUploadRequest;
import com.alipay.api.request.AntMerchantExpandIndirectZftCreateRequest;
import com.alipay.api.response.AlipayMerchantIndirectAuthorderCreateResponse;
import com.alipay.api.response.AlipayMerchantIndirectAuthorderQuerystatusResponse;
import com.alipay.api.response.AntMerchantExpandIndirectImageUploadResponse;
import com.alipay.api.response.AntMerchantExpandIndirectZftCreateResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -24,17 +26,22 @@
import com.dsh.guns.modular.system.model.*;
import com.dsh.guns.modular.system.service.*;
import com.dsh.guns.modular.system.util.PayMoneyUtil;
import com.dsh.guns.modular.system.util.ResultUtil;
import com.github.binarywang.wxpay.service.BankService;
import com.mysql.cj.x.protobuf.MysqlxExpr;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@@ -51,17 +58,21 @@
    @Autowired
    private TOperatorCityService operatorCityService;
    @Autowired
    private IOperatorAuthService operatorAuthService;
    @Autowired
    private IOperatorUserService operatorUserService;
    @Autowired
    private IUserService userService;
    @Autowired
    private ICityService cityService;
    @Autowired
    private IOperatorAuthService operatorAuthService;
    private PayMoneyUtil payMoneyUtil;
    @Autowired
    private IStoreService storeService;
    private String appPrivateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCi5i9nW/hGLJ3A06cZxTQdviFC7THpdSihoTYGLr9q006hu0V26ecBMY/o4w5bvIX0Ok/yofmZsVcCJpAPvbXL/uqVrIjnRRxXiaeBFThlxoBUTdunvbUSDYfzlEhJr5NvUKI6H6lz2niXlQGx4qy8Hau4ccWit9kM8jwUvsBVQoFgJA+xrjMvooA7YLopQtpOD+UJr5thApTSf1xrnr1W12yolTLEH15JmNV372cqXrYUuqnY0QsaPtxeqJUGAOcGdVLllQ7easEznP8DFBvDdHATcmp2SHNQDUEWN6MCVPbMgY06NQVqAXxqjTAYSVh+6TRu6bofPmpYC3TZB003AgMBAAECggEBAJAcR2+PA3NBYUYHeFrqBRMS8uX8ZR19kjZ7IgoSLTFaQsP9opRylPSPXhrPVBKAE5leRQAHn4MCSlESwHvMfxo7KFjFTFAc6dffZZpipYQUOc9bGampwJh58/3e/pyBgVMG6J23CPf/HJQtNFSkjd/V9+ayb/9l2dUEL3bC0fAZ/dbx8HsxdLw8wn3fLlWLj68hOMqa2deCZe3JdSVsPbeWqkh56FFsMLug0Nd+Ar4TgRl9/jnhXF0JWiD0LmPUYLhboY7EfUBzN4w1iYbDi1P+3zvoOYsiVKAXox9GMhQ2VzOO2UcSTuizSza2e98mGpabl/GpKmCz+RDFjtkX6eECgYEA2MyCij65eO3aGIm3FUe93DULRBYTfX8qJQSJq2WOWA3mmQlEW6L3O2B5/lG2h+8WmN6iLEs9eHpgycGYp7vAqgrANEn16ACVcuyx0scFtrZfZ+kmHMzFfiUWxJjVYk/6YngsGVBLdw6ueM42C8TTP67X9tU5TdVGoGWuqEj4W98CgYEAwFqwprXOch5Pqk/RPbb49r0Ou03K/UbciWnWWKzUhFFNS8MdlQPoDvQZbMwHLeWsa2VhaKITK3x5biLQb3U+0GLOn6lTvEyrEUH+ucREyLgVYTRAvwBPtnvlrzpyxPk2HnslQjju8WrvvLLBMKWUjlTrTOzhaHT21gz3pHMiOakCgYEAhLmfaXdBITGshb054sNLDtdCkGpbgEcrzAHdLps769iGxkYQHXHFngpQZUwtTUcoNGqIKknd1jZFrv7gsD+XkgKG7PwimehRlkwmCX5ilxtLiVgJRzRt6+5U5AMVD90a0tHzXYP0z2yjj73fBJF5KtGl0a10KZxaYrQdm1UhB00CgYBZZgzx/k9rtHC8LAqIj1CYhHejT92G53c6Gkl3vyOqN4sgKhfGmSEySfrDGPRBPZxr8ZtbIPCd5mUdberH0osWGMYFaJI1UsCy7aQwvGpniz7MhZeN7dweaOjwDs8mgtjHQ96mL4XGCDhR0BZ/wIURvZ/6iaGdhbbu9unlsWj3uQKBgQCmZYdsbbZkd3ev6f8rwyvMz+DrCQyYpY44cegBYuJgrZiQnL2fJioeN7ixX0UM48SfwsZEIrzshP/LGAwnc2MdjxKUl4jLN8SEe0NAjXOnz9Zaw740+aOmLpXcLWdP4uM2gIhWsvW1tEkQZCXmm7c9s/RsU8Pmzv+YL3+fSijOzA==";//支付宝开发者应用私钥
    private String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmu8n/4yTHWbn7VOrNc9OsLtDL1bEQ8gC1dHkj8Wy5z0mkaOsjJRIG/28ze12M0V8jdCKuuDr5Z1OPKiqf+XO3ypguEh+mYUVMBM/cZodDFQfTY1TKLWjvQCuaqlA+QUTCK6f7T7stsgyQ1o9Jj0rXZDz6PM4QHSTzjrLIBaeqM5WIBvH+fy/X+QG5Utd+/UT0kc0JyvuKhZ65yVUd/C9VcwJJAPliRsAQNrqYterwAJ9zvw9tF11wj9W0XgJ8Ccu4x3gR1vrlLRJJo/OA97RmxPQ+5hSacWQZCUd1dwiBq+YCrKVHGTj14izRHXrLc0yBlRXo7tBOIqcy3IsvKVthQIDAQAB";//支付宝支付公钥
    private String aliAppid = "2021004105665036";//支付宝appid
    /**
     * 根据运营商id查询所有门店
     */
@@ -69,6 +80,7 @@
    @ResponseBody
    public List<TStore> getStores(Integer id)
    {
        payMoneyUtil.getMessage();
        return storeService.list(new QueryWrapper<TStore>()
                .eq("operatorId",id)
                .ne("state",3));
@@ -149,6 +161,7 @@
        page.setRecords(list);
        return super.packForBT(page);
    }
    /**
     * 跳转运营商商户去认证页面
     */
@@ -159,63 +172,170 @@
        User byId = userService.getById(data.getUserId());
        model.addAttribute("user",byId);
        List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
        model.addAttribute("provinceList",list);
        model.addAttribute("list",list);
        model.addAttribute("data",data);
        OperatorAuth info = operatorAuthService.getOne(new QueryWrapper<OperatorAuth>().eq("operatorId", id));
        OperatorAuthAlipay info = operatorAuthService.getOne(new QueryWrapper<OperatorAuthAlipay>().eq("operatorId", id));
        model.addAttribute("item",info);
        if (info==null){
            OperatorAuth operatorAuth = new OperatorAuth();
            OperatorAuthAlipay operatorAuth = new OperatorAuthAlipay();
            model.addAttribute("item",operatorAuth);
            model.addAttribute("bodyType",0);
            model.addAttribute("code",null);
            model.addAttribute("reasons",null);
            // 0不显示二维码
            model.addAttribute("type",0);
        }else{
            if (info.getOrderStatus().equals("AUDIT_PASS")){
                // 通过才展示二维码
                model.addAttribute("type",1);
            }else{
                model.addAttribute("type",0);
            }
            model.addAttribute("code",info.getQrCode());
            model.addAttribute("item",info);
            model.addAttribute("bodyType",info.getBodyType());
            if (info.getRefuseReason()!=null && (!info.getRefuseReason().equals(""))){
            model.addAttribute("accountType",info.getAccountType());
            model.addAttribute("useType",info.getUseType());
            model.addAttribute("cardType",info.getCardType());
                model.addAttribute("reasons",info.getRefuseReason());
            }else{
                model.addAttribute("reasons",null);
            }
//            TCity one = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, info.getCityCode()));
//            List<TCity> district = cityService.list(new QueryWrapper<TCity>().eq("parent_id", one.getId()));
//            model.addAttribute("district",district);
//            if (info.getOrderStatus().equals("AUDIT_PASS")||info.getOrderStatus().equals("LEGAL_CONFIRM")||info.getOrderStatus().equals("CONTACT_CONFIRM")){
//                // 通过才展示二维码
//                model.addAttribute("type",1);
//            }else{
//                model.addAttribute("type",0);
//            }
//            model.addAttribute("code",info.getQrCode());
//            model.addAttribute("item",info);
//            model.addAttribute("bodyType",info.getBodyType());
//            if (info.getRefuseReason()!=null && (!info.getRefuseReason().equals(""))){
//                model.addAttribute("reasons",info.getRefuseReason());
//            }else{
//                model.addAttribute("reasons",null);
//            }
        }
        return PREFIX + "OperatorUser_proportionAuth.html";
    }
    /**
     * 跳转运营商商户去认证页面 详情页面
     */
    @RequestMapping("/proportionAuth1/{id}")
    public String proportionAuth1(Model model,@PathVariable("id") Integer id) {
        model.addAttribute("id",id);
        TOperator data = operatorService.getById(id);
        User byId = userService.getById(data.getUserId());
        model.addAttribute("user",byId);
        model.addAttribute("data",data);
        OperatorAuthAlipay info = operatorAuthService.getOne(new QueryWrapper<OperatorAuthAlipay>()
                .eq("operatorId", id));
        model.addAttribute("item",info);
        List<TCity> list1 = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
        model.addAttribute("list1",list1);
        if (StringUtils.hasLength(info.getProvince())){
            // 获取银行开户省
            List<TCity> list4 = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
            // 获取银行开户市
            TCity city = cityService.getOne(new QueryWrapper<TCity>().eq("code", info.getProvinceCode()));
            List<TCity> list5 = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, city.getId()));
            model.addAttribute("list4",list4);
            model.addAttribute("list5",list5);
        }else{
            List<TCity> list6 = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
            model.addAttribute("list4",list6);
        }
        model.addAttribute("bodyType",info.getBodyType());
        model.addAttribute("accountType",info.getAccountType());
        model.addAttribute("useType",info.getUseType());
        model.addAttribute("cardType",info.getCardType());
        model.addAttribute("reasons",info.getRefuseReason());
//            TCity one = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, info.getCityCode()));
//            List<TCity> district = cityService.list(new QueryWrapper<TCity>().eq("parent_id", one.getId()));
//            model.addAttribute("district",district);
//            if (info.getOrderStatus().equals("AUDIT_PASS")||info.getOrderStatus().equals("LEGAL_CONFIRM")||info.getOrderStatus().equals("CONTACT_CONFIRM")){
//                // 通过才展示二维码
//                model.addAttribute("type",1);
//            }else{
//                model.addAttribute("type",0);
//            }
//            model.addAttribute("code",info.getQrCode());
//            model.addAttribute("item",info);
//            model.addAttribute("bodyType",info.getBodyType());
//            if (info.getRefuseReason()!=null && (!info.getRefuseReason().equals(""))){
//                model.addAttribute("reasons",info.getRefuseReason());
//            }else{
//                model.addAttribute("reasons",null);
//            }
        return PREFIX + "OperatorUser_proportionAuth_info.html";
    }
    /**
     * 根据所选市 获取区
     */
    @RequestMapping(value = "/getDistrict")
    @ResponseBody
    public Object onChange(String cityCode) {
        try {
            TCity one = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, cityCode));
            List<TCity> parent_id = cityService.list(new QueryWrapper<TCity>().eq("parent_id", one.getId()));
            return parent_id;
        }catch (Exception e){
            e.printStackTrace();
            return ERROR;
        }
    }
    public static void main(String[] args) {
        String bankName = "中国工商银行"; // 要转换为简写的银行名称
        Pattern pattern = Pattern.compile("([\\u4e00-\\u9fa5]+)(?=\\s+[A-Za-z]+$)");
        Matcher matcher = pattern.matcher(bankName);
        if (matcher.find()) {
            System.out.println(matcher.group()); // 输出结果:"工商银行" -> "ICBC"
        } else {
            System.out.println("无法识别该银行名称!");
        }
    }
    /**
     * 支付宝商户认证提交
     */
    @RequestMapping(value = "/auth")
    @ResponseBody
    public Object auth(String beneficiaryEnd,String businessEnd,String legalEnd, String name,String phone,String number
            ,Integer operatorId,String bodyType,Integer type,String businessName,String businessNumber,
                       String legalRepresentative,String registerAddress,String businessTerm,String businessPicture,
                       String legalPerson,String legalNumber,String legalPhone,String legalEmail,String legalTerm,
                       String legalAddress,String legalFront,String legalBack,Integer accountType,String bank,
                       String accountName,String province,String provinceCode,String city,String cityCode,
                       String bankName,String bankNumber,String isBeneficiary,String beneficiary,String beneficiaryPhone,
                       String beneficiaryNumber,String beneficiaryAddress,String beneficiaryTerm,String beneficiaryFront,String beneficiaryBack,
                       String remark) {
    public Object auth(Integer operatorId,String bodyType,String businessName,String aliasName,String businessNumber,
                       String license,String name,String phone,String shopProvinceCode,String shopProvince,String shopCityCode,
                       String shopCity, String shopDistrictCode,String shopDistrict,String registerAddress,String legalPerson,
                       String leagleNumber,String legalFront,String legalBack,String accountType,String alipayAccount,
                       String bankCard,String useType,String cardType,String bankName,String bankNameTwo,
                       String accountName,String provinceCode,String province,String cityCode,String city,String zfbAccount,
                       String iqImage) {
        UUID uuid = UUID.randomUUID();
        OperatorAuth data = operatorAuthService.getOne(new QueryWrapper<OperatorAuth>().eq("operatorId", operatorId));
        OperatorAuth operatorAuth = new OperatorAuth();
        // 通过运营商id查询
        TOperator byId = operatorService.getById(operatorId);
        Integer userId1 = byId.getUserId();
        OperatorUser userId2 = operatorUserService.getOne(new QueryWrapper<OperatorUser>()
                .eq("userId", userId1));
        // 0未认证 1待审核 2通过 3驳回
        userId2.setAlipayAudit(1);
        operatorUserService.updateById(userId2);
        OperatorAuthAlipay data = operatorAuthService.getOne(new QueryWrapper<OperatorAuthAlipay>().eq("operatorId", operatorId));
        String group="ABC";
//        if(StringUtils.hasLength(bankName)){
//            Pattern pattern = Pattern.compile(".*[\\u4e00-\\u9fa5]+"); // 只保留汉字部分
//            Matcher matcher = pattern.matcher(bankName);
//            group = matcher.group();
//            if (matcher.find()) {
//                System.out.println("银行名称简写为:" + matcher.group());
//            } else {
//                System.out.println("无法获取到银行名称简写!");
//                return 5007;
//            }
//        }
        OperatorAuthAlipay operatorAuth = new OperatorAuthAlipay();
        if (data!=null){
            operatorAuth.setId(data.getId());
            if(businessPicture==null || businessPicture.equals("")){
                operatorAuth.setBusinessPicture(data.getBusinessPicture());
                businessPicture = data.getBusinessPicture();
            }
            if(legalFront==null || legalFront.equals("")){
                legalFront = data.getLegalFront();
                operatorAuth.setLegalFront(data.getLegalFront());
@@ -224,16 +344,21 @@
                legalBack = data.getLegalBack();
                operatorAuth.setLegalBack(data.getLegalBack());
            }
            if(beneficiaryFront==null || beneficiaryFront.equals("")){
                beneficiaryFront = data.getBeneficiaryFront();
                operatorAuth.setBeneficiaryFront(data.getBeneficiaryFront());
            if(iqImage==null || iqImage.equals("")){
                iqImage = data.getIqImage();
                operatorAuth.setIqImage(data.getIqImage());
            }
            if(beneficiaryBack==null || beneficiaryBack.equals("")){
                beneficiaryBack = data.getBeneficiaryBack();
                operatorAuth.setBeneficiaryBack(data.getBeneficiaryBack());
            if(license==null || license.equals("")){
                license = data.getCertImage();
                operatorAuth.setCertImage(data.getCertImage());
            }
        }else{
            if(businessPicture==null || businessPicture.equals("")){
            operatorAuth.setLegalFront(legalFront);
            operatorAuth.setLegalBack(legalBack);
            operatorAuth.setIqImage(iqImage);
            operatorAuth.setCertImage(license);
            if(license==null || license.equals("")){
                // 未上传营业执照
                return 5001;
            }
@@ -245,196 +370,173 @@
                // 未上传法人身份证背面照
                return 5003;
            }
            if (businessPicture!=null && businessPicture.equals("ENTERPRISE")){
                if(beneficiaryFront==null || beneficiaryFront.equals("")){
                    // 未上传受益人身份证正面照
                    return 5004;
                }
                if(beneficiaryBack==null || beneficiaryBack.equals("")){
                    // 未上传受益人身份证背面照
                    return 5005;
                }
            }
        }
        String numericUUID = uuid.toString().replaceAll("-", "");
        operatorAuth.setOutBizNo(numericUUID);
        operatorAuth.setOperatorId(operatorId);
        operatorAuth.setRegisterAddress(registerAddress);
        operatorAuth.setAliasName(aliasName);
        operatorAuth.setBodyType(bodyType);
        operatorAuth.setName(name);
        operatorAuth.setPhone(phone);
        operatorAuth.setNumber(number);
        operatorAuth.setBusinessEnd(businessEnd);
        operatorAuth.setLegalEnd(legalEnd);
        operatorAuth.setBeneficiaryEnd(beneficiaryEnd);
        operatorAuth.setOperatorId(operatorId);
        operatorAuth.setBodyType(bodyType);
        operatorAuth.setType(type);
        operatorAuth.setBusinessName(businessName);
        operatorAuth.setBusinessNumber(businessNumber);
        operatorAuth.setLegalRepresentative(legalRepresentative);
        operatorAuth.setRegisterAddress(registerAddress);
        operatorAuth.setBusinessTerm(businessTerm);
        operatorAuth.setOutBizNo(numericUUID);
        operatorAuth.setBusinessPicture(businessPicture);
        operatorAuth.setCertImage(license);
        operatorAuth.setLegalPerson(legalPerson);
        operatorAuth.setLeagleNumber(legalNumber);
        operatorAuth.setLegalPhone(legalPhone);
        operatorAuth.setLegalEmail(legalEmail);
        operatorAuth.setLegalTerm(legalTerm);
        operatorAuth.setLegalAddress(legalAddress);
        operatorAuth.setLegalFront(legalFront);
        operatorAuth.setLegalBack(legalBack);
        operatorAuth.setLeagleNumber(leagleNumber);
        operatorAuth.setAccountType(accountType);
        operatorAuth.setBank(bank);
        operatorAuth.setBankName(bankName);
        operatorAuth.setAccountName(accountName);
        operatorAuth.setBankCard(bankCard);
        operatorAuth.setProvince(province);
        operatorAuth.setProvinceCode(provinceCode);
        operatorAuth.setCity(city);
        operatorAuth.setCityCode(cityCode);
        operatorAuth.setBankName(bankName);
        operatorAuth.setBankNumber(bankNumber);
        operatorAuth.setShopCity(shopCity);
        operatorAuth.setShopProvince(shopProvince);
        operatorAuth.setShopProvinceCode(shopProvinceCode);
        operatorAuth.setShopCityCode(shopCityCode);
        operatorAuth.setProvince(province);
        operatorAuth.setProvinceCode(provinceCode);
        operatorAuth.setShopDistrict(shopDistrict);
        operatorAuth.setShopDistrictCode(shopDistrictCode);
        operatorAuth.setAlipayAccount(alipayAccount);
        operatorAuth.setUseType(useType);
        operatorAuth.setCardType(cardType);
        operatorAuth.setBankNameTwo(bankNameTwo);
        operatorAuth.setAuditState(0);
        operatorAuth.setIsBeneficiary(isBeneficiary);
        operatorAuth.setBeneficiary(beneficiary);
        operatorAuth.setBeneficiaryNumber(beneficiaryNumber);
        operatorAuth.setBeneficiaryAddress(beneficiaryAddress);
        operatorAuth.setBeneficiaryTerm(beneficiaryTerm);
        operatorAuth.setBeneficiaryFront(beneficiaryFront);
        operatorAuth.setBeneficiaryBack(beneficiaryBack);
        operatorAuth.setRefuseReason("");
        operatorAuth.setRemark(remark);
        operatorAuth.setZfbAccount(zfbAccount);
        // 将图片上传至阿里存储
        // 营业执照
        String string = uploadImg(businessPicture).toString();
        String string = uploadImg(license).toString();
        // 法人身份证正面照
        legalFront = uploadImg(legalFront).toString();
        // 法人身份证背面照
        legalBack = uploadImg(legalBack).toString();
        if (bodyType.equals("ENTERPRISE")){
            // 受益人身份证正面照
            beneficiaryFront=uploadImg(beneficiaryFront).toString();
            // 受益人身份证背面照
            beneficiaryBack=uploadImg(beneficiaryBack).toString();
        }
        //第二步:提交申请单
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","2021003199648333",
                "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCXnbOiY2VkKb5ubpcwKqzmqbKotpKGA79yn2aQeZiTWhqmLdCKjVp64naGpnOQEC7hDZluOO1crWHVhIEp7XGIEVawA7mb/dBbzo4wQQYVtLX6iEZViYk/mA7G59S/lvsLVi+jkVGlx2Co8JhvkTRtCEFgUnVA9o2jKy5BIEwrusNuDjrn5X+3ZvfZJN/iV0yzhzXynzioZt/DIcdODOVPUrem8T/5ifJ6ydSKIumgquBKyQnFOj+LRt5qMioBVzLnod0S/6kKMoNVN3/qx/PHRaeHbrF7I67IpGNROg0D9C4d9xXbGhSqQciXitLVnNzWuCov4Ie5nT5VCg9RjXyVAgMBAAECggEAf5rU81lgnnqbseoWCQ4B02kD2wc+Lti8qsYJ1pLgnTP6td5dZB8wBbjQNOem35sfOX7uoVv8OkIa00/gPd9/7BtbsGySLP3j/UDNX0N60Y30k1VajOdiwklCNpor7swtog75rVrDMxmo+sb0JQI684E9NMpxsSlRcAEJvvpl4W7LkhfJZyCUNXPAAh9SOkFOeaXATueEQ57V5vpeKM2JRJy//1P1LS2c/quLRIPqaTYgVAvxfdAYQvvP0vPijxHtxJlDxPa8xBCv7D46d+HeIA6X5ZkoTKLYbe2D36utP8rqGsXw1EyrYyuq6HdEAi/I4YXvWyLsXuQTSACSp+piAQKBgQD6am94xyQ4CRiMA/T1kvPPkXD+y/1Sbr3+T1S6X4naAGdkZS+TbPaWEddd2Huml6q+C2UcGhQpupBkbk88Nbs94jOulsfF6b24nOo1xH5z/BtS0kYuYaNLhebJtzrR9gupT1Uv0q+QybWZ3hQswOK0vwpkDk9DOysFynfMyXXlwQKBgQCa/z3oZ4iYZpTLNdRhMS0u593Jq8MDemimBJGEXPvDBByyE5Ohf22UqP5MjS1euosAQSva+/HmKeEigLgjoQTo29mA1nzPe0AKN3huWbqPIOdeIOA694Nj6ooOPS8iDMjKu61wPz/rZ57bv41LsPXr0y4UsU30JWg2rzgRnGgT1QKBgH30c0VIxUr6KEKk6t1qoP/SpAdFC5Ie6am0tWVZELl6Yob47kk1EYLCTpWBghB1UQhuKtlLtMCYenBJm8kpLZke4ef7J1jBDRCCvLt2rjQgpo2t/mbt7XjbTQ5A/3EEVTFAGhUH4A7vpkxSi8tG6cEIJm3VVMD4TdeH02JKIucBAoGAA0v+kxzwqN01uQTSGackIOVJsGp44XAPHcjnF3uq10EVIyyLbVn6iLj3f8VY+7TYFA9O0X+ea5jkcwlt4UQhiJp0i+sECJ3EhPMdGqvJ7hVzFmt4mYh+QPfSK+9dO0ouUzGexM5zm5w+osn2RW/kKzn4tvP2hoTtLIyZkrZS+GkCgYAQGKe84pXggSIPwztg0aBJUC9b4fXe3PR4DFTM85lBUKYJnQGRzf6NDCD83hwJoNdnyZkztyK72LDOn2NOzPfYcfUl6MQFPovXeMWaVidRfo4ZgyFA/C1egduebaIkXE+DpGhiy7alQ4k+LxUfy6oJBT9Sq8oq7EVBEkeff3p66g==","json","GBK",
                "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmu8n/4yTHWbn7VOrNc9OsLtDL1bEQ8gC1dHkj8Wy5z0mkaOsjJRIG/28ze12M0V8jdCKuuDr5Z1OPKiqf+XO3ypguEh+mYUVMBM/cZodDFQfTY1TKLWjvQCuaqlA+QUTCK6f7T7stsgyQ1o9Jj0rXZDz6PM4QHSTzjrLIBaeqM5WIBvH+fy/X+QG5Utd+/UT0kc0JyvuKhZ65yVUd/C9VcwJJAPliRsAQNrqYterwAJ9zvw9tF11wj9W0XgJ8Ccu4x3gR1vrlLRJJo/OA97RmxPQ+5hSacWQZCUd1dwiBq+YCrKVHGTj14izRHXrLc0yBlRXo7tBOIqcy3IsvKVthQIDAQAB","RSA2");
        AlipayMerchantIndirectAuthorderCreateRequest request = new AlipayMerchantIndirectAuthorderCreateRequest();
        operatorAuthService.saveOrUpdate(operatorAuth);
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",
                aliAppid,
                appPrivateKey,
                "json","GBK",
                alipay_public_key,
                "RSA2");
        AntMerchantExpandIndirectZftCreateRequest request = new AntMerchantExpandIndirectZftCreateRequest();
        String param = "{" +
                "  \"out_biz_no\":\""+uuid+"\"," +
                "  \"contact_person_info\":{" +
                "    \"contact_name\":\""+name+"\"," +
                "    \"contact_phone_no\":\""+phone+"\"," +
                "    \"contact_card_no\":\""+number+"\"," +
                "    \"contact_cert_type\":\"RESIDENT\"" +
                "  }," +
                "  \"auth_identity_info\":{" +
                "    \"identity_type\":\""+bodyType+"\"," +
                "    \"is_financial_org\":false," +
                "    \"certificate_type\":\"BUSINESS_CERT\"," +
                "    \"certificate_info\":{" +
                "  \"external_id\":\""+numericUUID+"\"," +
                "  \"merchant_type\":\""+bodyType+"\"," +
                "  \"name\":\""+businessName+"\"," +
                "  \"alias_name\":\""+aliasName+"\"," +
                "  \"mcc\":\"B0068\"," +
                "      \"cert_no\":\""+businessNumber+"\"," +
                "  \"cert_type\":\"201\"," +
                "      \"cert_image\":\""+string+"\"," +
                "      \"merchant_name\":\""+businessName+"\"," +
                "      \"legal_person_name\":\""+legalRepresentative+"\"," +
                "      \"register_address\":\""+registerAddress+"\"," +
                "      \"effect_time\":\""+businessTerm+"\"," +
                "      \"expire_time\":\""+businessEnd+"\"" +
                "    }," +
                "    }," +
                "  \"legal_person_info\":{" +
                "    \"card_type\":\"RESIDENT\"," +
                "    \"person_name\":\""+legalRepresentative+"\"," +
                "    \"card_no\":\""+legalNumber+"\"," +
                "    \"effect_time\":\""+legalTerm+"\"," +
                "    \"expire_time\":\""+legalEnd+"\"," +
                "    \"card_front_img\":\""+legalFront+"\"," +
                "    \"card_back_img\":\""+legalBack+"\"," +
                "    \"is_benefit_person\":"+isBeneficiary+"" +
                "  },";
        String bene = "  \"benefit_person_info\":{" +
                "    \"person_name\":\""+beneficiary+"\"," +
                "    \"card_no\":\""+beneficiaryNumber+"\"," +
                "    \"card_type\":\"RESIDENT\"," +
                "    \"effect_time\":\""+beneficiaryTerm+"\"," +
                "    \"expire_time\":\""+beneficiaryEnd+"\"," +
                "    \"card_front_img\":\""+beneficiaryFront+"\"," +
                "    \"card_back_img\":\""+beneficiaryBack+"\"" +
                "  },";
        if (bodyType.equals("ENTERPRISE")){
            request.setBizContent(param
                    + bene+
                    "}");
        }else{
            request.setBizContent(param
                    +
                    "}");
        }
                "  \"legal_name\":\""+legalPerson+"\"," +
                "  \"legal_cert_no\":\""+leagleNumber+"\"," +
                "  \"legal_cert_front_image\":\""+legalFront+"\"," +
                "  \"legal_cert_back_image\":\""+legalBack+"\"," +
                "  \"contact_infos\":[" +
                "    {" +
                "      \"name\":\""+name+"\"," +
                "      \"mobile\":\""+phone+"\"," +
                "    }" +
                "  ],";
        AlipayMerchantIndirectAuthorderCreateResponse response = null;
        // todo 拼接
        String biz_cards="  \"biz_cards\":[" +
                "    {" +
                "      \"account_holder_name\":\""+accountName+"\"," +
                "      \"account_no\":\""+bankCard+"\"," +
                "      \"account_inst_province\":\""+province+"\"," +
                "      \"account_inst_city\":\""+city+"\"," +
                "      \"account_branch_name\":\""+bankNameTwo+"\"," +
                "      \"usage_type\":\""+useType+"\"," +
                "      \"account_type\":\""+cardType+"\"," +
                "      \"account_inst_name\":\""+bankName+"\"," +
                "      \"account_inst_id\":\""+group+"\"," +
                "    }" +
                "  ]," ;
        // 结算类型 支付宝账户 / 银行卡
        String type ;
        // 结算类型为支付宝 填写支付宝账号 结算类型为银行卡填写银行卡号
        String account;
        if (StringUtils.hasLength(alipayAccount)){
            type =  accountType;
            account = alipayAccount;
        }else{
            type = accountType;
            account = bankCard;
        }
        String res=
                "  \"service\":[" +
                "    \"app支付\"" +
                "  ]," +
                "  \"alipay_logon_id\":" +
                "    \""+zfbAccount+"\"" +
                "  ," +
                "  \"sites\":[" +
                "    {" +
                "      \"site_type\":\"02\"," +
                "      \"site_name\":\"玩湃生活\"," +
                "      \"tiny_app_id\":\"wx82f853a410b0c7c0\"" +
                "    }" +
                "  ]," +
                "  \"cert_name\":\""+businessName+"\","+
        "  \"binding_alipay_logon_id\":\""+zfbAccount+"\","+
         "  \"default_settle_rule\":{" +
                "    \"default_settle_type\":\""+type+"\"," +
                "    \"default_settle_target\":\""+account+"\"" +
                "  }" +
                "}";
        if (accountType.equals("bankCard")){
            request.setBizContent(param
                    + biz_cards+res);
        }
        AntMerchantExpandIndirectZftCreateResponse response = null;
        try {
            response = alipayClient.execute(request);
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        if(response.isSuccess()){
            System.out.println("上传认证单");
            System.out.println("调用成功");
            JSONObject json = JSONObject.parseObject(response.getBody());
            JSONObject json1 = json.getJSONObject("alipay_merchant_indirect_authorder_create_response");
            String order_no = json1.getString("order_no");
            String order_status = json1.getString("order_status");
//            // 申请单号
//            String orderNo = r.getString("order_no");
            /**
             * 状态 审核中(AUDITING)、待联系人确认(CONTACT_CONFIRM),
             * 待法人确认(LEGAL_CONFIRM)、审核通过(AUDIT_PASS)、
             * 审核失败(AUDIT_REJECT)、已冻结(AUDIT_FREEZE)、
             * 已撤回(CANCELED)、联系人处理中(CONTACT_PROCESSING)
             */
//            String orderStatus = r.getString("order_status");
            JSONObject json1 = json.getJSONObject("ant_merchant_expand_indirect_zft_create_response");
            String order_no = json1.getString("order_id");
            System.err.println("订单号"+order_no);
            operatorAuth.setOrderNo(order_no);
            operatorAuth.setOrderStatus(order_status);
            operatorAuth.setRefuseReason("");
            operatorAuthService.saveOrUpdate(operatorAuth);
            // 通过运营商id找到用户id
            TOperator byId = operatorService.getById(operatorId);
            if (byId!=null){
                Integer userId = byId.getUserId();
                OperatorUser userId1 = operatorUserService.getOne(new QueryWrapper<OperatorUser>().eq("userId", userId));
                if (userId1!=null){
                    // 设置为审核中状态
                    userId1.setAlipayAudit(1);
                    if (bodyType.equals("ENTERPRISE")){
                        userId1.setAlipayType(2);
            Integer userId = operatorService.getById(operatorId).getUserId();
            OperatorUser user = operatorUserService.getOne(new QueryWrapper<OperatorUser>().eq("userId", userId));
            user.setAlipayAudit(1);
            // 01是企业
            if (bodyType.equals("01")){
                user.setAlipayType(2);
                    }else{
                        userId1.setAlipayType(1);
                user.setAlipayType(1);
                    }
//                    userId1.setWechatAudit(1);
                    operatorUserService.updateById(userId1);
                    operatorAuth.setQrCode(null);
                    operatorAuthService.saveOrUpdate(operatorAuth);
                    // 根据选择类型修改认证类型
                }
            }
            operatorUserService.saveOrUpdate(user);
        } else {
            System.out.println("调用失败");
            if (response.getCode().equals("40004")){
                String subMsg = response.getSubMsg();
                return ResultUtil.error(subMsg);
        }
        return SUCCESS_TIP;
        }
        return ResultUtil.success();
    }
    public static Object uploadImg(String img){
        String privateKey = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCXnbOiY2VkKb5ubpcwKqzmqbKotpKGA79yn2aQeZiTWhqmLdCKjVp64naGpnOQEC7hDZluOO1crWHVhIEp7XGIEVawA7mb/dBbzo4wQQYVtLX6iEZViYk/mA7G59S/lvsLVi+jkVGlx2Co8JhvkTRtCEFgUnVA9o2jKy5BIEwrusNuDjrn5X+3ZvfZJN/iV0yzhzXynzioZt/DIcdODOVPUrem8T/5ifJ6ydSKIumgquBKyQnFOj+LRt5qMioBVzLnod0S/6kKMoNVN3/qx/PHRaeHbrF7I67IpGNROg0D9C4d9xXbGhSqQciXitLVnNzWuCov4Ie5nT5VCg9RjXyVAgMBAAECggEAf5rU81lgnnqbseoWCQ4B02kD2wc+Lti8qsYJ1pLgnTP6td5dZB8wBbjQNOem35sfOX7uoVv8OkIa00/gPd9/7BtbsGySLP3j/UDNX0N60Y30k1VajOdiwklCNpor7swtog75rVrDMxmo+sb0JQI684E9NMpxsSlRcAEJvvpl4W7LkhfJZyCUNXPAAh9SOkFOeaXATueEQ57V5vpeKM2JRJy//1P1LS2c/quLRIPqaTYgVAvxfdAYQvvP0vPijxHtxJlDxPa8xBCv7D46d+HeIA6X5ZkoTKLYbe2D36utP8rqGsXw1EyrYyuq6HdEAi/I4YXvWyLsXuQTSACSp+piAQKBgQD6am94xyQ4CRiMA/T1kvPPkXD+y/1Sbr3+T1S6X4naAGdkZS+TbPaWEddd2Huml6q+C2UcGhQpupBkbk88Nbs94jOulsfF6b24nOo1xH5z/BtS0kYuYaNLhebJtzrR9gupT1Uv0q+QybWZ3hQswOK0vwpkDk9DOysFynfMyXXlwQKBgQCa/z3oZ4iYZpTLNdRhMS0u593Jq8MDemimBJGEXPvDBByyE5Ohf22UqP5MjS1euosAQSva+/HmKeEigLgjoQTo29mA1nzPe0AKN3huWbqPIOdeIOA694Nj6ooOPS8iDMjKu61wPz/rZ57bv41LsPXr0y4UsU30JWg2rzgRnGgT1QKBgH30c0VIxUr6KEKk6t1qoP/SpAdFC5Ie6am0tWVZELl6Yob47kk1EYLCTpWBghB1UQhuKtlLtMCYenBJm8kpLZke4ef7J1jBDRCCvLt2rjQgpo2t/mbt7XjbTQ5A/3EEVTFAGhUH4A7vpkxSi8tG6cEIJm3VVMD4TdeH02JKIucBAoGAA0v+kxzwqN01uQTSGackIOVJsGp44XAPHcjnF3uq10EVIyyLbVn6iLj3f8VY+7TYFA9O0X+ea5jkcwlt4UQhiJp0i+sECJ3EhPMdGqvJ7hVzFmt4mYh+QPfSK+9dO0ouUzGexM5zm5w+osn2RW/kKzn4tvP2hoTtLIyZkrZS+GkCgYAQGKe84pXggSIPwztg0aBJUC9b4fXe3PR4DFTM85lBUKYJnQGRzf6NDCD83hwJoNdnyZkztyK72LDOn2NOzPfYcfUl6MQFPovXeMWaVidRfo4ZgyFA/C1egduebaIkXE+DpGhiy7alQ4k+LxUfy6oJBT9Sq8oq7EVBEkeff3p66g==";
        String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmu8n/4yTHWbn7VOrNc9OsLtDL1bEQ8gC1dHkj8Wy5z0mkaOsjJRIG/28ze12M0V8jdCKuuDr5Z1OPKiqf+XO3ypguEh+mYUVMBM/cZodDFQfTY1TKLWjvQCuaqlA+QUTCK6f7T7stsgyQ1o9Jj0rXZDz6PM4QHSTzjrLIBaeqM5WIBvH+fy/X+QG5Utd+/UT0kc0JyvuKhZ65yVUd/C9VcwJJAPliRsAQNrqYterwAJ9zvw9tF11wj9W0XgJ8Ccu4x3gR1vrlLRJJo/OA97RmxPQ+5hSacWQZCUd1dwiBq+YCrKVHGTj14izRHXrLc0yBlRXo7tBOIqcy3IsvKVthQIDAQAB";
        String appPrivateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCi5i9nW/hGLJ3A06cZxTQdviFC7THpdSihoTYGLr9q006hu0V26ecBMY/o4w5bvIX0Ok/yofmZsVcCJpAPvbXL/uqVrIjnRRxXiaeBFThlxoBUTdunvbUSDYfzlEhJr5NvUKI6H6lz2niXlQGx4qy8Hau4ccWit9kM8jwUvsBVQoFgJA+xrjMvooA7YLopQtpOD+UJr5thApTSf1xrnr1W12yolTLEH15JmNV372cqXrYUuqnY0QsaPtxeqJUGAOcGdVLllQ7easEznP8DFBvDdHATcmp2SHNQDUEWN6MCVPbMgY06NQVqAXxqjTAYSVh+6TRu6bofPmpYC3TZB003AgMBAAECggEBAJAcR2+PA3NBYUYHeFrqBRMS8uX8ZR19kjZ7IgoSLTFaQsP9opRylPSPXhrPVBKAE5leRQAHn4MCSlESwHvMfxo7KFjFTFAc6dffZZpipYQUOc9bGampwJh58/3e/pyBgVMG6J23CPf/HJQtNFSkjd/V9+ayb/9l2dUEL3bC0fAZ/dbx8HsxdLw8wn3fLlWLj68hOMqa2deCZe3JdSVsPbeWqkh56FFsMLug0Nd+Ar4TgRl9/jnhXF0JWiD0LmPUYLhboY7EfUBzN4w1iYbDi1P+3zvoOYsiVKAXox9GMhQ2VzOO2UcSTuizSza2e98mGpabl/GpKmCz+RDFjtkX6eECgYEA2MyCij65eO3aGIm3FUe93DULRBYTfX8qJQSJq2WOWA3mmQlEW6L3O2B5/lG2h+8WmN6iLEs9eHpgycGYp7vAqgrANEn16ACVcuyx0scFtrZfZ+kmHMzFfiUWxJjVYk/6YngsGVBLdw6ueM42C8TTP67X9tU5TdVGoGWuqEj4W98CgYEAwFqwprXOch5Pqk/RPbb49r0Ou03K/UbciWnWWKzUhFFNS8MdlQPoDvQZbMwHLeWsa2VhaKITK3x5biLQb3U+0GLOn6lTvEyrEUH+ucREyLgVYTRAvwBPtnvlrzpyxPk2HnslQjju8WrvvLLBMKWUjlTrTOzhaHT21gz3pHMiOakCgYEAhLmfaXdBITGshb054sNLDtdCkGpbgEcrzAHdLps769iGxkYQHXHFngpQZUwtTUcoNGqIKknd1jZFrv7gsD+XkgKG7PwimehRlkwmCX5ilxtLiVgJRzRt6+5U5AMVD90a0tHzXYP0z2yjj73fBJF5KtGl0a10KZxaYrQdm1UhB00CgYBZZgzx/k9rtHC8LAqIj1CYhHejT92G53c6Gkl3vyOqN4sgKhfGmSEySfrDGPRBPZxr8ZtbIPCd5mUdberH0osWGMYFaJI1UsCy7aQwvGpniz7MhZeN7dweaOjwDs8mgtjHQ96mL4XGCDhR0BZ/wIURvZ/6iaGdhbbu9unlsWj3uQKBgQCmZYdsbbZkd3ev6f8rwyvMz+DrCQyYpY44cegBYuJgrZiQnL2fJioeN7ixX0UM48SfwsZEIrzshP/LGAwnc2MdjxKUl4jLN8SEe0NAjXOnz9Zaw740+aOmLpXcLWdP4uM2gIhWsvW1tEkQZCXmm7c9s/RsU8Pmzv+YL3+fSijOzA==";//支付宝开发者应用私钥
        String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmu8n/4yTHWbn7VOrNc9OsLtDL1bEQ8gC1dHkj8Wy5z0mkaOsjJRIG/28ze12M0V8jdCKuuDr5Z1OPKiqf+XO3ypguEh+mYUVMBM/cZodDFQfTY1TKLWjvQCuaqlA+QUTCK6f7T7stsgyQ1o9Jj0rXZDz6PM4QHSTzjrLIBaeqM5WIBvH+fy/X+QG5Utd+/UT0kc0JyvuKhZ65yVUd/C9VcwJJAPliRsAQNrqYterwAJ9zvw9tF11wj9W0XgJ8Ccu4x3gR1vrlLRJJo/OA97RmxPQ+5hSacWQZCUd1dwiBq+YCrKVHGTj14izRHXrLc0yBlRXo7tBOIqcy3IsvKVthQIDAQAB";//支付宝支付公钥
        String aliAppid = "2021004105665036";//支付宝appid
        AlipayConfig alipayConfig = new AlipayConfig();
        alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do");
        alipayConfig.setAppId("2021003199648333");
        alipayConfig.setPrivateKey(privateKey);
        alipayConfig.setAppId(aliAppid);
        alipayConfig.setPrivateKey(appPrivateKey);
        alipayConfig.setFormat("json");
        alipayConfig.setAlipayPublicKey(alipayPublicKey);
        alipayConfig.setAlipayPublicKey(alipay_public_key);
        alipayConfig.setCharset("UTF8");
        alipayConfig.setSignType("RSA2");
        AlipayClient alipayClient = null;
@@ -475,15 +577,10 @@
     */
    @RequestMapping(value = "/proportion")
    @ResponseBody
    public Object auth(Integer operatorIdOne ,String alipayProportion,String alipayNum,String wechatProportion,
                       String wechatNum) {
        Integer id1 = operatorService.getOne(new QueryWrapper<TOperator>().eq("id", operatorIdOne))
                .getUserId();
        OperatorUser id = operatorUserService.getOne(new QueryWrapper<OperatorUser>().eq("userId", id1));
    public Object auth(Integer operatorIdOne ,String alipayProportion,String wechatProportion) {
        OperatorUser id = operatorUserService.getOne(new QueryWrapper<OperatorUser>().eq("operatorId", operatorIdOne));
        id.setAlipayProportion(alipayProportion);
        id.setWechatProportion(wechatProportion);
        id.setAlipayNum(alipayNum);
        id.setWechatNum(wechatNum);
        operatorUserService.updateById(id);
        return SUCCESS_TIP;
    }
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/OperatorUserController.java
@@ -68,7 +68,6 @@
    }
    /**
     * 获取运营商列表
     */
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCompetitionController.java
@@ -431,11 +431,11 @@
    @ResponseBody
    public Object onChange(Integer oneId) {
        System.out.println("======"+oneId);
        List<TOperatorCity> list = operatorCityService.list(new LambdaQueryWrapper<TOperatorCity>().eq(TOperatorCity::getOperatorId, oneId).eq(TOperatorCity::getType, 2));
        List<TOperatorCity> list = operatorCityService.list(new LambdaQueryWrapper<TOperatorCity>()
                .eq(TOperatorCity::getOperatorId, oneId).eq(TOperatorCity::getType, 2));
            if (list.size()!=0){
                return list;
            }
        try {
            TCity one = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, oneId));
            return cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId,one.getId()));
@@ -444,6 +444,13 @@
            return ERROR;
        }
    }
    @RequestMapping(value = "/onChange3")
    @ResponseBody
    public Object onChange3(String oneId) {
        TCity one = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, oneId));
        return cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId,one.getId()));
    }
    @RequestMapping(value = "/oneChangeNext")
    @ResponseBody
    public Object oneChangeNext(Integer oneId) {
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TStoredValueConfigController.java
@@ -26,7 +26,6 @@
@Controller
@RequestMapping("/storeValueConfig")
public class TStoredValueConfigController {
    private String PREFIX = "/system/storeValueConfig/";
    @Autowired
    private StoreValueConfigClient storeValueConfigClient;
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/OperatorAuthAlipay.java
New file
@@ -0,0 +1,103 @@
package com.dsh.guns.modular.system.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
 * 支付宝认证
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("t_operator_auth_alipay")
public class OperatorAuthAlipay {
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @TableField(value = "operatorId")
    private Integer operatorId;
    @TableField(value = "bodyType")
    private String bodyType;
    @TableField(value = "registerAddress")
    private String registerAddress;
    @TableField(value = "inDoorImages")
    private String inDoorImages;
    @TableField(value = "outDoorImages")
    private String outDoorImages;
    @TableField(value = "aliasName")
    private String aliasName;
    @TableField(value = "businessName")
    private String businessName;
    @TableField(value = "businessNumber")
    private String businessNumber;
    @TableField(value = "certImage")
    private String certImage;
    @TableField(value = "legalPerson")
    private String legalPerson;
    @TableField(value = "leagleNumber")
    private String leagleNumber;
    @TableField(value = "legalFront")
    private String legalFront;
    @TableField(value = "legalBack")
    private String legalBack;
    @TableField(value = "accountType")
    private String accountType;
    @TableField(value = "province")
    private String province;
    @TableField(value = "provinceCode")
    private String provinceCode;
    @TableField(value = "city")
    private String city;
    @TableField(value = "cityCode")
    private String cityCode;
    @TableField(value = "bankName")
    private String bankName;
    @TableField(value = "accountName")
    private String accountName;
    @TableField(value = "bankCard")
    private String bankCard;
    @TableField(value = "refuseReason")
    private String refuseReason;
    @TableField(value = "smid")
    private String smid;
    @TableField(value = "auditState")
    private Integer auditState;
    @TableField(value = "outBizNo")
    private String outBizNo;
    @TableField(value = "name")
    private String name;
    @TableField(value = "phone")
    private String phone;
    @TableField(value = "orderNo")
    private String orderNo;
    @TableField(value = "shopProvince")
    private String shopProvince;
    @TableField(value = "shopProvinceCode")
    private String shopProvinceCode;
    @TableField(value = "shopCity")
    private String shopCity;
    @TableField(value = "shopCityCode")
    private String shopCityCode;
    @TableField(value = "shopDistrictCode")
    private String shopDistrictCode;
    @TableField(value = "shopDistrict")
    private String shopDistrict;
    @TableField(value = "certName")
    private String certName;
    @TableField(value = "alipayAccount")
    private String alipayAccount;
    @TableField(value = "iqImage")
    private String iqImage;
    @TableField(value = "useType")
    private String useType;
    @TableField(value = "cardType")
    private String cardType;
    @TableField(value = "bankNameTwo")
    private String bankNameTwo;
    @TableField(value = "zfbAccount")
    private String zfbAccount;
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IOperatorAuthService.java
@@ -2,11 +2,12 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.guns.modular.system.model.OperatorAuth;
import com.dsh.guns.modular.system.model.OperatorAuthAlipay;
import com.dsh.guns.modular.system.model.TSite;
/**
 * @author zhibing.pu
 * @Date 2023/8/1 17:49
 */
public interface IOperatorAuthService extends IService<OperatorAuth> {
public interface IOperatorAuthService extends IService<OperatorAuthAlipay> {
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/TBankService.java
New file
@@ -0,0 +1,17 @@
package com.dsh.guns.modular.system.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.guns.modular.system.model.Bank;
/**
 * <p>
 * 银行 服务类
 * </p>
 *
 * @author administrator
 * @since 2023-10-09
 */
public interface TBankService extends IService<Bank> {
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/BankServiceImpl.java
New file
@@ -0,0 +1,12 @@
package com.dsh.guns.modular.system.service.impl;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dsh.course.mapper.BankMapper;
import com.dsh.guns.modular.system.model.Bank;
import org.springframework.stereotype.Service;
@Service
public class BankServiceImpl extends ServiceImpl<BankMapper, Bank> implements IService<Bank> {
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TOperatorAuthServiceImpl.java
@@ -5,6 +5,7 @@
import com.dsh.course.mapper.TOperatorAuthMapper;
import com.dsh.course.mapper.TTurnMapper;
import com.dsh.guns.modular.system.model.OperatorAuth;
import com.dsh.guns.modular.system.model.OperatorAuthAlipay;
import com.dsh.guns.modular.system.model.TTurn;
import com.dsh.guns.modular.system.service.IOperatorAuthService;
import com.dsh.guns.modular.system.service.TTurnService;
@@ -19,6 +20,6 @@
 * @since 2023-09-19
 */
@Service
public class TOperatorAuthServiceImpl extends ServiceImpl<TOperatorAuthMapper, OperatorAuth> implements IOperatorAuthService {
public class TOperatorAuthServiceImpl extends ServiceImpl<TOperatorAuthMapper, OperatorAuthAlipay> implements IOperatorAuthService {
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TOperatorUserServiceImpl.java
@@ -49,30 +49,35 @@
    @Autowired
    private WeChatUtil weChatUtil;
//    @Override
//    public void mgtShopAuth(MgtShopAuthDto mgtShopAuthDto) {
//
//        OperatorAuthAlipay shopAuthentication = new OperatorAuth();
//
//        if(mgtShopAuthDto.getBlBusinessFoeverFlag()!=null&&mgtShopAuthDto.getBlBusinessFoeverFlag()==1){
//            mgtShopAuthDto.setBlBusinessDeanline("长期");
//        }
//        if(mgtShopAuthDto.getLpIcForeverFlag()!=null&&mgtShopAuthDto.getLpIcForeverFlag()==1){
//            mgtShopAuthDto.setLpIcEndDate("长期");
//        }
//        BeanUtils.copyProperties(mgtShopAuthDto , shopAuthentication);
//        TOperator operator = operatorMapper.selectById(shopAuthentication.getOperatorId());
//        String applyNumber = UUIDUtil.getNativeUUID().replace("-","");
//        shopAuthentication.setOutBizNo(applyNumber);
//        ApplymentsResult applymentsResult;
//        try {
//            applymentsResult = weChatUtil.ecommerceApply(shopAuthentication,applyNumber,operator);
//        } catch (Exception e) {
//            throw new ServiceException(e.getMessage());
//        }
//        shopAuthentication.setOrderStatus("AUDITING");
//        shopAuthentication.setOrderNo(applymentsResult.getApplymentId());
//        operatorAuthService.saveOrUpdate(shopAuthentication);
//    }
    @Override
    public void mgtShopAuth(MgtShopAuthDto mgtShopAuthDto) {
        OperatorAuth shopAuthentication = new OperatorAuth();
        if(mgtShopAuthDto.getBlBusinessFoeverFlag()!=null&&mgtShopAuthDto.getBlBusinessFoeverFlag()==1){
            mgtShopAuthDto.setBlBusinessDeanline("长期");
        }
        if(mgtShopAuthDto.getLpIcForeverFlag()!=null&&mgtShopAuthDto.getLpIcForeverFlag()==1){
            mgtShopAuthDto.setLpIcEndDate("长期");
        }
        BeanUtils.copyProperties(mgtShopAuthDto , shopAuthentication);
        TOperator operator = operatorMapper.selectById(shopAuthentication.getOperatorId());
        String applyNumber = UUIDUtil.getNativeUUID().replace("-","");
        shopAuthentication.setOutBizNo(applyNumber);
        ApplymentsResult applymentsResult;
        try {
            applymentsResult = weChatUtil.ecommerceApply(shopAuthentication,applyNumber,operator);
        } catch (Exception e) {
            throw new ServiceException(e.getMessage());
        }
        shopAuthentication.setOrderStatus("AUDITING");
        shopAuthentication.setOrderNo(applymentsResult.getApplymentId());
        operatorAuthService.saveOrUpdate(shopAuthentication);
    }
    @Override
cloud-server-management/src/main/java/com/dsh/guns/modular/system/util/PayMoneyUtil.java
New file
@@ -0,0 +1,385 @@
package com.dsh.guns.modular.system.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.CertAlipayRequest;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeAppPayModel;
import com.alipay.api.msg.AlipayMsgClient;
import com.alipay.api.msg.MsgHandler;
import com.alipay.api.request.*;
import com.alipay.api.response.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dsh.guns.modular.system.model.OperatorAuthAlipay;
import com.dsh.guns.modular.system.model.OperatorUser;
import com.dsh.guns.modular.system.service.IOperatorAuthService;
import com.dsh.guns.modular.system.service.IOperatorUserService;
import org.apache.commons.lang3.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.util.*;
/**
 * 第三方支付工具类
 */
@Component
public class PayMoneyUtil {
    private String aliAppid = "2021004105665036";//支付宝appid
    private String appPrivateKey = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCi5i9nW/hGLJ3A06cZxTQdviFC7THpdSihoTYGLr9q006hu0V26ecBMY/o4w5bvIX0Ok/yofmZsVcCJpAPvbXL/uqVrIjnRRxXiaeBFThlxoBUTdunvbUSDYfzlEhJr5NvUKI6H6lz2niXlQGx4qy8Hau4ccWit9kM8jwUvsBVQoFgJA+xrjMvooA7YLopQtpOD+UJr5thApTSf1xrnr1W12yolTLEH15JmNV372cqXrYUuqnY0QsaPtxeqJUGAOcGdVLllQ7easEznP8DFBvDdHATcmp2SHNQDUEWN6MCVPbMgY06NQVqAXxqjTAYSVh+6TRu6bofPmpYC3TZB003AgMBAAECggEBAJAcR2+PA3NBYUYHeFrqBRMS8uX8ZR19kjZ7IgoSLTFaQsP9opRylPSPXhrPVBKAE5leRQAHn4MCSlESwHvMfxo7KFjFTFAc6dffZZpipYQUOc9bGampwJh58/3e/pyBgVMG6J23CPf/HJQtNFSkjd/V9+ayb/9l2dUEL3bC0fAZ/dbx8HsxdLw8wn3fLlWLj68hOMqa2deCZe3JdSVsPbeWqkh56FFsMLug0Nd+Ar4TgRl9/jnhXF0JWiD0LmPUYLhboY7EfUBzN4w1iYbDi1P+3zvoOYsiVKAXox9GMhQ2VzOO2UcSTuizSza2e98mGpabl/GpKmCz+RDFjtkX6eECgYEA2MyCij65eO3aGIm3FUe93DULRBYTfX8qJQSJq2WOWA3mmQlEW6L3O2B5/lG2h+8WmN6iLEs9eHpgycGYp7vAqgrANEn16ACVcuyx0scFtrZfZ+kmHMzFfiUWxJjVYk/6YngsGVBLdw6ueM42C8TTP67X9tU5TdVGoGWuqEj4W98CgYEAwFqwprXOch5Pqk/RPbb49r0Ou03K/UbciWnWWKzUhFFNS8MdlQPoDvQZbMwHLeWsa2VhaKITK3x5biLQb3U+0GLOn6lTvEyrEUH+ucREyLgVYTRAvwBPtnvlrzpyxPk2HnslQjju8WrvvLLBMKWUjlTrTOzhaHT21gz3pHMiOakCgYEAhLmfaXdBITGshb054sNLDtdCkGpbgEcrzAHdLps769iGxkYQHXHFngpQZUwtTUcoNGqIKknd1jZFrv7gsD+XkgKG7PwimehRlkwmCX5ilxtLiVgJRzRt6+5U5AMVD90a0tHzXYP0z2yjj73fBJF5KtGl0a10KZxaYrQdm1UhB00CgYBZZgzx/k9rtHC8LAqIj1CYhHejT92G53c6Gkl3vyOqN4sgKhfGmSEySfrDGPRBPZxr8ZtbIPCd5mUdberH0osWGMYFaJI1UsCy7aQwvGpniz7MhZeN7dweaOjwDs8mgtjHQ96mL4XGCDhR0BZ/wIURvZ/6iaGdhbbu9unlsWj3uQKBgQCmZYdsbbZkd3ev6f8rwyvMz+DrCQyYpY44cegBYuJgrZiQnL2fJioeN7ixX0UM48SfwsZEIrzshP/LGAwnc2MdjxKUl4jLN8SEe0NAjXOnz9Zaw740+aOmLpXcLWdP4uM2gIhWsvW1tEkQZCXmm7c9s/RsU8Pmzv+YL3+fSijOzA==";//支付宝开发者应用私钥
    private String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAouYvZ1v4RiydwNOnGcU0Hb4hQu0x6XUooaE2Bi6/atNOobtFdunnATGP6OMOW7yF9DpP8qH5mbFXAiaQD721y/7qlayI50UcV4mngRU4ZcaAVE3bp721Eg2H85RISa+Tb1CiOh+pc9p4l5UBseKsvB2ruHHForfZDPI8FL7AVUKBYCQPsa4zL6KAO2C6KULaTg/lCa+bYQKU0n9ca569VtdsqJUyxB9eSZjVd+9nKl62FLqp2NELGj7cXqiVBgDnBnVS5ZUO3mrBM5z/AxQbw3RwE3JqdkhzUA1BFjejAlT2zIGNOjUFagF8ao0wGElYfuk0bum6Hz5qWAt02QdNNwIDAQAB";//支付宝应用公钥
    private String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmu8n/4yTHWbn7VOrNc9OsLtDL1bEQ8gC1dHkj8Wy5z0mkaOsjJRIG/28ze12M0V8jdCKuuDr5Z1OPKiqf+XO3ypguEh+mYUVMBM/cZodDFQfTY1TKLWjvQCuaqlA+QUTCK6f7T7stsgyQ1o9Jj0rXZDz6PM4QHSTzjrLIBaeqM5WIBvH+fy/X+QG5Utd+/UT0kc0JyvuKhZ65yVUd/C9VcwJJAPliRsAQNrqYterwAJ9zvw9tF11wj9W0XgJ8Ccu4x3gR1vrlLRJJo/OA97RmxPQ+5hSacWQZCUd1dwiBq+YCrKVHGTj14izRHXrLc0yBlRXo7tBOIqcy3IsvKVthQIDAQAB";//支付宝支付公钥
    private String appid = "";//微信appid
    private String appletsAppid = "";//微信小程序appid
    private String mchId = "";//微信商户号
    private String key = "";//微信商户号
    private String callbackPath = "http://221.182.45.100:56666/account";//支付回调网关地址
    private String app_cert_path = "C:/cert/alipay/user/app_cert_path.crt";//应用公钥证书路径
    private String alipay_cert_path = "C:/cert/alipay/user/alipay_cert_path.crt";//支付宝公钥证书文件路径
    private String alipay_root_cert_path = "C:/cert/alipay/user/alipay_root_cert_path.crt";//支付宝CA根证书文件路径
    private String certPath = "C:\\cert\\1523106371_20211206_cert\\apiclient_cert.p12";//微信证书
    String signType =  "RSA2" ;
    String serverHost =  "openchannel.alipay.com" ;
    @Autowired
    private IOperatorAuthService operatorAuthService;
    @Autowired
    private IOperatorUserService operatorUserService;
    /**
     * 处理直付通审核通过和拒绝消息
     */
    public void getMessage() {
        System.err.println("进入");
        final AlipayMsgClient alipayMsgClient = AlipayMsgClient.getInstance(aliAppid);
        try {
            alipayMsgClient.setConnector(serverHost);
        } catch (Exception e) {
            e.printStackTrace();
        }
        alipayMsgClient.setSecurityConfig(signType, appPrivateKey, alipay_public_key);
        try {
            alipayMsgClient.connect();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        alipayMsgClient.setMessageHandler( new  MsgHandler() {
            /**
             * 客户端接收到消息后回调此方法
             *  @param  msgApi 接收到的消息的消息api名
             *  @param  msgId 接收到的消息的消息id
             *  @param  bizContent 接收到的消息的内容,json格式
             */
            public   void   onMessage (String msgApi, String msgId, String bizContent)   {
                // 直付通进件审核通过
                if (StringUtils.equals(msgApi,"ant.merchant.expand.indirect.zft.passed")){
                    // 修改运营商状态 将返回的商户号填入运营商
                    System.out.println( "receive message. msgApi:"  + msgApi +  " msgId:"  + msgId +  " bizContent:"  + bizContent);
                    JSONObject json = JSONObject.parseObject(bizContent);
                    // 商户号
                    String smid = json.getString("smid");
                    // 审核备注信息
                    String memo = json.getString("memo");
                    // 订单id
                    String orderId = json.getString("order_id");
                    // 通过订单id查询
                    OperatorAuthAlipay auth = operatorAuthService.getOne(new QueryWrapper<OperatorAuthAlipay>()
                            .eq("orderNo",orderId));
                    auth.setSmid(smid);
                    auth.setAuditState(2);
                    auth.setRefuseReason(memo);
                    operatorAuthService.updateById(auth);
                    Integer operatorId = auth.getOperatorId();
                    OperatorUser operatorId1 = operatorUserService.getOne(new QueryWrapper<OperatorUser>()
                            .eq("operatorId", operatorId));
                    operatorId1.setAlipayNum(smid);
                    operatorId1.setAlipayAudit(2);
                    operatorUserService.updateById(operatorId1);
                }
                // 直付通进件审核失败
                if (StringUtils.equals(msgApi,"ant.merchant.expand.indirect.zft.rejected")){
                    JSONObject json = JSONObject.parseObject(bizContent);
                    // 商户号
                    String orderId = json.getString("order_id");
                    // 官方拒绝理由
                    String reason = json.getString("reason");
                    // 通过订单id查询
                    OperatorAuthAlipay auth = operatorAuthService.getOne(new QueryWrapper<OperatorAuthAlipay>()
                            .eq("orderNo",orderId));
                    auth.setAuditState(3);
                    auth.setRefuseReason(reason);
                    operatorAuthService.updateById(auth);
                    Integer operatorId = auth.getOperatorId();
                    OperatorUser operatorId1 = operatorUserService.getOne(new QueryWrapper<OperatorUser>()
                            .eq("operatorId", operatorId));
                    operatorId1.setAlipayAudit(3);
                    operatorUserService.updateById(operatorId1);
                }
            }
        });
    }
    /**
     * 支付宝支付
     */
    public ResultUtil alipay(String body, String subject, String passbackParams, String outTradeNo, String amount, String notifyUrl) {
//        //构造client
//        CertAlipayRequest certAlipayRequest = new CertAlipayRequest ();
//        //设置网关地址
//        certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do");
//        //设置应用Id
//        certAlipayRequest.setAppId(aliAppid);
//        //设置应用私钥
//        certAlipayRequest.setPrivateKey(appPrivateKey);
//        //设置请求格式,固定值json
//        certAlipayRequest.setFormat("json");
//        //设置字符集
//        certAlipayRequest.setCharset("UTF-8");
//        //设置签名类型
//        certAlipayRequest.setSignType("RSA2");
//        //设置应用公钥证书路径
//        certAlipayRequest.setCertPath(app_cert_path);
//        //设置支付宝公钥证书路径
//        certAlipayRequest.setAlipayPublicCertPath(alipay_cert_path);
//        //设置支付宝根证书路径
//        certAlipayRequest.setRootCertPath(alipay_root_cert_path);
//        //构造client
//        AlipayClient alipayClient = null;
//        try {
//            alipayClient = new DefaultAlipayClient(certAlipayRequest);
//        } catch (AlipayApiException e) {
//            e.printStackTrace();
//        }
//        //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
//        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest ();
//        //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
//        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel ();
//        model.setBody(body);
//        model.setSubject (subject);
//        model.setOutTradeNo (outTradeNo);
//        model.setTimeoutExpress ("30m" );
//        model.setTotalAmount (amount);
//        model.setProductCode ( "QUICK_MSECURITY_PAY" );
//        model.setPassbackParams(passbackParams);//自定义参数
//        request.setBizModel ( model );
//        request.setNotifyUrl (callbackPath + notifyUrl);
//        try  {
//            //这里和普通的接口调用不同,使用的是sdkExecute
//            AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
//            Map<String, String> map = new HashMap<>();
//            map.put("orderString", response.getBody());
//            System.out.println(map);//就是orderString 可以直接给客户端请求,无需再做处理。
//            return ResultUtil.success(map);
//        }  catch (AlipayApiException e ) {
//            e.printStackTrace();
//        }
        //实例化客户端
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey, "json", "UTF-8", alipay_public_key, "RSA2");
        //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
        //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
        model.setBody(body);//对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
        model.setSubject(subject);//商品的标题/交易标题/订单标题/订单关键字等。
        model.setOutTradeNo(outTradeNo);//商户网站唯一订单号
        model.setTimeoutExpress("30m");
        model.setTotalAmount(amount);//付款金额
        model.setProductCode("QUICK_MSECURITY_PAY");
        model.setPassbackParams(passbackParams);//自定义参数
        //分账
//        Integer    coursePackagePayments = coursePackageClient.queryByCode(outTradeNo);
//        Integer paymentCompetitions = competitionsClient.queryByCode(outTradeNo);
//        Integer siteBookings = siteClient.queryByCode(outTradeNo);
//        List<Integer> stores = new ArrayList<>();
//        stores.add(coursePackagePayments);
//        stores.add(paymentCompetitions);
//        stores.add(siteBookings);
//
//        OperatorUser operatorUser = siteClient.queryOperator(stores);
//
//        String alipayProportion = operatorUser.getAlipayProportion();
//        String alipayNum = operatorUser.getAlipayNum();
//
//        ExtendParams extendParams = new ExtendParams();
////        extendParams.setSysServiceProviderId("YOUR_SERVICE_PROVIDER_ID");
//        model.setExtendParams(extendParams);
//
//        RoyaltyInfo royaltyInfo = new RoyaltyInfo();
////        royaltyInfo.setRoyaltyType("transfer");
//
//
//        RoyaltyDetailInfos royaltyDetailInfo1 = new RoyaltyDetailInfos();
//        royaltyDetailInfo1.setTransOutType("userId");
//        royaltyDetailInfo1.setTransOut(aliAppid);
//        royaltyDetailInfo1.setTransInType("loginName");
//        royaltyDetailInfo1.setTransIn("18398968484");
//
//        royaltyDetailInfo1.setDesc("分账描述1");
//        royaltyDetailInfo1.setAmountPercentage(alipayProportion);
//        List<RoyaltyDetailInfos> royaltyDetailInfos = new ArrayList<>();
//
//
//
//        royaltyInfo.setRoyaltyDetailInfos(royaltyDetailInfos);
//        model.setRoyaltyInfo(royaltyInfo);
//        System.err.println("=================="+royaltyInfo);
        //
        request.setBizModel(model);
        request.setNotifyUrl(callbackPath + notifyUrl);
        try {
            //这里和普通的接口调用不同,使用的是sdkExecute
            AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
            Map<String, String> map = new HashMap<>();
            map.put("orderString", response.getBody());
            map.put("returnId", passbackParams);
            System.out.println(map);//就是orderString 可以直接给客户端请求,无需再做处理。
            return ResultUtil.success(map);
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 支付宝查询订单支付状态
     *
     * @param out_trade_no
     * @return
     * @throws Exception
     */
    public AlipayTradeQueryResponse queryALIOrder(String out_trade_no) throws Exception {
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", aliAppid, appPrivateKey, "json", "UTF-8", alipay_public_key, "RSA2");
        AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
        request.setBizContent("{" +
                "  \"out_trade_no\":\"" + out_trade_no + "\"" +
                "}");
        AlipayTradeQueryResponse response = alipayClient.execute(request);
        return response;
    }
    /**
     * 获取请求内容
     *
     * @param request
     * @return
     * @throws IOException
     */
    private String getParam(HttpServletRequest request) throws IOException {
        // 读取参数
        InputStream inputStream;
        StringBuilder sb = new StringBuilder();
        inputStream = request.getInputStream();
        String s;
        BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
        while ((s = in.readLine()) != null) {
            sb.append(s);
        }
        in.close();
        inputStream.close();
        return sb.toString();
    }
//    public static void main(String[] ages){
//        PayMoneyUtil payMoneyUtil = new PayMoneyUtil();
//        ResultUtil ce = payMoneyUtil.alipay("测试", "测试", "", "121456457", "10", "http://123.com");
//        System.err.println(ce);
//        ResultUtil resultUtil = null;
//        try {
//            resultUtil = payMoneyUtil.queryALIOrder("121456457");
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        System.err.println(resultUtil);
//    }
    /**
     * xml转map
     *
     * @param xml
     * @param charset
     * @return
     * @throws UnsupportedEncodingException
     * @throws DocumentException
     */
    public static Map<String, String> xmlToMap(String xml, String charset) throws UnsupportedEncodingException, DocumentException {
        Map<String, String> respMap = new HashMap<String, String>();
        SAXReader reader = new SAXReader();
        Document doc = reader.read(new ByteArrayInputStream(xml.getBytes(charset)));
        Element root = doc.getRootElement();
        xmlToMap(root, respMap);
        return respMap;
    }
    public static Map<String, String> xmlToMap(Element tmpElement, Map<String, String> respMap) {
        if (tmpElement.isTextOnly()) {
            respMap.put(tmpElement.getName(), tmpElement.getText());
            return respMap;
        }
        @SuppressWarnings("unchecked")
        Iterator<Element> eItor = tmpElement.elementIterator();
        while (eItor.hasNext()) {
            Element element = eItor.next();
            xmlToMap(element, respMap);
        }
        return respMap;
    }
}
cloud-server-management/src/main/resources/mapper/BankMapper.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dsh.course.mapper.BankMapper">
</mapper>
cloud-server-management/src/main/resources/mapper/TOperatorMapper.xml
@@ -15,7 +15,8 @@
    </update>
    <select id="listAll" resultType="java.util.Map">
        select t1.id as id, t1.name as name,t1.type as `type`,t1.state as state,t1.status as status,t2.name as userName,t2.phone as phone from t_operator t1
        select t1.id as id, t1.name as name,t1.type as `type`,t1.state as state,t1.status as status,t2.name as userName,t2.phone as phone
        from t_operator t1
        left join sys_user t2 on t1.userId = t2.id
        where 1=1
        <if test="userName != null and userName != ''">
cloud-server-management/src/main/webapp/WEB-INF/view/system/operator/OperatorUser_proportion.html
@@ -49,20 +49,14 @@
                <input hidden id="id" value="${id}">
                <div class="col-lg-6" style="">
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*支付宝商户号:</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" id="alipayNum" value="${alipayNum}"  placeholder="请输入" type="text">
                        </div>
                        <label class="col-sm-3 control-label">*支付宝分账比例(%):</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" id="alipayProportion" value="${alipayProportion}"  placeholder="请输入" type="number">
                        </div>
                    </div>
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*微信商户号:</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" id="wechatNum" value="${wechatNum}"  placeholder="请输入" type="text">
                        </div>
                        <label class="col-sm-3 control-label">*微信分账比例(%):</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" id="wechatProportion" value="${wechatProportion}"  placeholder="请输入" type="number">
cloud-server-management/src/main/webapp/WEB-INF/view/system/operator/OperatorUser_proportionAuth.html
@@ -51,7 +51,6 @@
                <span>管理员姓名:</span><span>${user.name}</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <span>管理员电话:</span><span>${user.phone}</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            </div>
            <h2>商户号信息</h2>
            </br>
            </br>
@@ -60,196 +59,142 @@
                <div class="col-lg-6" style="">
                    <div class="form-group">
                        <label class="col-sm-4 control-label" >
                            主体类型:<input checked type="radio" name="bodyType" value="ENTERPRISE" onclick="updateHalf(2)">企业
                            <input  type="radio" name="bodyType" value="IND_BIZ" onclick="updateHalf(1)">个人
                            商户类型:<input checked type="radio" name="bodyType" value="01" onclick="updateHalf(2)">企业
                            <input  type="radio" name="bodyType" value="07" onclick="updateHalf(1)">个人
                        </label>
                    </div>
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*商户名称(一般与证件名称相同):</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" value="" id="businessName"  placeholder="请输入商户名称" type="text">
                        </div>
                    </div>
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*商户别名(支付宝账单显示的商户名称):</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" value="" id="aliasName"  placeholder="请输入商户别名" type="text">
                        </div>
                    </div>
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*联系人姓名:</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" value="${item.name}" id="name"  placeholder="请输入" type="text">
                            <input style="width: 300px" class="form-control" value="" id="name"  placeholder="请输入" type="text">
                        </div>
                    </div>
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*联系人电话:</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" value="${item.phone}" id="phone"  placeholder="请输入" type="text">
                            <input style="width: 300px" class="form-control" value="" id="phone"  placeholder="请输入" type="text">
                        </div>
                    </div>
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*联系人身份证号:</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" value="${item.number}" id="number"  placeholder="请输入" type="text">
                        </div>
                    </div>
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*法定代表人姓名:</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" id="lrName" value="${item.legalPerson}"  placeholder="请输入" type="text">
                        </div>
                    </div>
                </div>
                <div class="col-lg-6" style="">
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*营业执照商户名称:</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" value="${item.businessName}"  id="merchantName"  placeholder="请输入" type="text">
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*营业证照生效时间:</label>
                        <div class="col-sm-9" style="display: flex">
                            <input style="width: 300px" class="form-control" id="tradeTime" value="${item.businessTerm}" name="tradeTime" type="date">
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*营业证照过期时间:</label>
                        <div class="col-sm-9" style="display: flex">
                            <input style="width: 300px" class="form-control" id="endTime" value="${item.businessEnd}" name="endTime" type="date">
                            <input type="checkbox" style="margin-left: 10px" id="tradeE" value="0" onchange="TSite.tradeYse(this)">长期</input>
                        </div>
                    </div>
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*营业执照注册号:</label>
                        <div class="col-sm-9" >
                            <input style="width: 300px" class="form-control" id="licenseRegistration" value="${item.businessNumber}"  placeholder="请输入" type="text">
                        </div>
                    </div>
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*注册地址:</label>
                        <div class="col-sm-9" >
                            <input style="width: 300px" class="form-control" id="registerAddress" value="${item.registerAddress}"  placeholder="请输入" type="text">
                        </div>
                    </div>
                    <div class="form-group">
                        <#avatar id="license" name="*营业执照" avatarImg="${item.businessPicture}" />
                    </div>
                </div>
            </div>
            <div class="row">
                <div class="col-lg-6" style="">
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*法人姓名:</label>
                        <div class="col-sm-9" >
                            <input style="width: 300px" class="form-control" id="legalPerson" value="${item.legalPerson}"  placeholder="请输入" type="text">
                                <input style="width: 300px" class="form-control" id="legalPerson" value=""  placeholder="请输入" type="text">
                        </div>
                    </div>
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*法人手机号:</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" id="legalPhone" value="${item.legalPhone}"  placeholder="请输入" type="text">
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*法人身份证开始时间:</label>
                        <div class="col-sm-9" style="display: flex">
                            <input style="width: 300px" class="form-control" id="IDCardTime" value="${item.legalTerm}" name="IDCardTime" type="date">
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*法人身份证结束时间:</label>
                        <div class="col-sm-9" style="display: flex">
                            <input style="width: 300px" class="form-control" value="${item.legalEnd}" id="IDCardEnd" name="IDCardTime" type="date">
                            <input type="checkbox" style="margin-left: 10px" id="IDCardE" value="0" onchange="TSite.tradeYse(this)">长期</input>
                        </div>
                    </div>
                    <div class="form-group">
                        <#avatar id="IDCardImg" name="*法人身份证正面照" avatarImg="${item.legalFront}" />
                    </div>
                </div>
                <div class="col-lg-6" style="">
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*法人身份证号:</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" value="${item.leagleNumber}" id="lIDNumber"  placeholder="请输入" type="text">
                                <input style="width: 300px" class="form-control" value="" id="leagleNumber"  placeholder="请输入" type="text">
                        </div>
                    </div>
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*法人邮箱:</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" value="${item.legalEmail}" id="lEmail"  placeholder="请输入" type="text">
                        </div>
                            <#avatar id="IDCardImg" name="*法人身份证正面照" avatarImg="" />
                    </div>
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*法人身份证地址:</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" value="${item.legalAddress}" id="lIDAddress"  placeholder="请输入" type="text">
                        </div>
                    </div>
                    <div class="form-group">
                        <#avatar id="IDCardImg1" name="*法人身份证背面照" avatarImg="${item.legalBack}" />
                    </div>
                </div>
                            <#avatar id="IDCardImg1" name="*法人身份证背面照" avatarImg="" />
            </div>
            <div class="row" id="benefit">
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*签约支付宝账号:</label>
                        <div class="col-sm-9" >
                            <input style="width: 300px" class="form-control" id="zfbAccount" value="${item.zfbAccount}"  placeholder="请输入" type="text">
                        </div>
                    </div>
                </div>
                <div class="col-lg-6" style="">
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*营业执照编号:</label>
                        <div class="col-sm-9" >
                            <input style="width: 300px" class="form-control" id="businessNumber" value=""  placeholder="请输入" type="text">
                        </div>
                    </div>
                    <div class="form-group">
                        <#avatar id="license" name="*营业执照" avatarImg="${item.certImage}" />
                    </div>
                    <div class="form-group">
                        <label class="col-sm-4 control-label" >
                            法人是否为受益人:<input type="radio" checked name="type" value="true">是
                            <input checked type="radio" name="type" value="false">否
                            结算账户类型:<input checked type="radio" name="accountType" value="bankCard" onclick="updateHalf(3)">银行卡
                            <input  type="radio" name="accountType" value="alipayAccount" onclick="updateHalf(4)">支付宝账号
                        </label>
                    </div>
                    <div class="form-group" hidden id="aliNumber">
                        <label class="col-sm-3 control-label">*支付宝账号:</label>
                        <div class="col-sm-9" >
                            <input style="width: 300px" class="form-control" id="alipayAccount" value=""  placeholder="请输入" type="text">
                        </div>
                    </div>
                    <div id="banks">
                        <div class="form-group" >
                            <label class="col-sm-3 control-label">*银行卡号:</label>
                            <div class="col-sm-9" >
                                <input style="width: 300px" class="form-control" id="bankCard" value=""  placeholder="请输入" type="text">
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-sm-4 control-label" >
                                账号使用类型:<input checked type="radio" name="useType" value="01" >对公
                                <input  type="radio" name="useType" value="02" >对私
                        </label>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*受益人姓名:</label>
                            <label class="col-sm-4 control-label" >
                                银行卡类型:<input checked type="radio" name="cardType" value="DC" onclick="updateHalf(2)">借记卡
                                <input  type="radio" name="cardType" value="CC" onclick="updateHalf(1)">信用卡
                            </label>
                        </div>
                        <div class="form-group">
                            <label class="col-sm-3 control-label">*开户银行:</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" value="${item.beneficiary}" id="bName" name="bName" type="text">
                                <input style="width: 300px" class="form-control" id="bankName" value=""  placeholder="请输入(例:中国农业银行)" type="text">
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*受益人身份证地址:</label>
                            <label class="col-sm-3 control-label">*开户支行名称:</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" id="bAddress" value="${item.beneficiaryAddress}"  placeholder="请输入" type="text">
                                <input style="width: 300px" class="form-control" id="bankName1" value=""  placeholder="请输入" type="text">
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*受益人身份证有效期:</label>
                            <label class="col-sm-3 control-label">*开户名称:</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" value="${item.beneficiaryTerm}" id="bTime" name="bTime" type="date">
                                <input style="width: 300px" class="form-control" id="bankUserName" value=""  placeholder="请输入" type="text">
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*受益人身份证结束时间:</label>
                        <div class="col-sm-9" style="display: flex">
                            <input style="width: 300px" class="form-control" id="bEnd" value="${item.beneficiaryEnd}" name="IDCardTime" type="date">
                            <input type="checkbox" style="margin-left: 10px" id="bIDCardT" value="0" onchange="TSite.tradeYse(this)">长期</input>
                        </div>
                    </div>
                    <div class="form-group">
                        <#avatar id="bImg1" avatarImg="${item.beneficiaryFront}" name="*受益人身份证正面照" />
                    </div>
                </div>
                <div class="col-lg-6" >
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*受益人身份证号:</label>
                        <div class="form-group" id="provinceCode">
                            <label class="col-sm-3 control-label">*开户行所在省:</label>
                        <div class="col-sm-9" >
                            <input style="width: 300px" class="form-control" id="bIDNumber" value="${item.beneficiaryNumber}"  placeholder="请输入" type="text">
                        </div>
                    </div>
                    <div class="form-group">
                        <#avatar id="bImg2" avatarImg="${item.beneficiaryBack}" name="*受益人身份证背面照" />
                    </div>
                </div>
            </div>
            @if(reasons != null){
            <div class="row" id="reasons">
                <div class="col-lg-6" >
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*拒绝理由:</label>
                        <div class="col-sm-9">
                            <h3 style="color: red">${item.refuseReason}</h3>
                        </div>
                    </div>
                </div>
            </div>
                                <select style="width: 300px" class="form-control" id="pCode" name="pCode" onchange="TSite.oneChange2(this)">
                                    <option value="">请选择省</option>
                                    @for(obj in list){
                                    <option style="width: 300px" value="${obj.code}">${obj.name}</option>
            @}
            @if(code != null){
            @if(type==1){
            <label class="col-sm-3 control-label">请使用手机支付宝扫描下方二维码完成进一步认证</label>
            <img src="${code}">
            @}
            @}
                                </select>
                            </div>
                        </div>
                        <div class="form-group" id="cityCode">
                            <label class="col-sm-3 control-label">*开户行所在市:</label>
                            <div class="col-sm-9">
                                <select style="width: 300px" class="form-control" id="cCode" name="cCode" >
                                    <option value="">请选择市</option>
                                </select>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div class="form-group">
                <div class="row btn-group-m-t">
                    <div class="col-sm-10 col-sm-offset-5" >
@@ -268,77 +213,16 @@
<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
<script>
    function updateHalf(e) {
        if(e==1){
            console.log("隐藏")
            $("#benefit").hide()
        }else {
        if(e==3){
            console.log("展示")
            $("#benefit").show()
            $("#banks").show()
            $("#aliNumber").hide()
        }else if (e==4){
            // 结算到支付宝账号
            console.log("隐藏")
            $("#banks").hide()
            $("#aliNumber").show()
        }
    }
    window.onload = function(){
        if ("${item.orderStatus}"=="AUDIT_PASS"){
            $("#reasons").hide()
        }else{
            $("#reasons").show()
        }
        if ("${item.orderStatus}"==null){
            $("#reasons").hide()
        }
        console.log("${bodyType}")
        var OBJradio=document.getElementsByName("bodyType")
        var type=document.getElementsByName("type")
        console.log("回显")
        if ("${bodyType}" != 0){
            console.log("进入")
            if("${bodyType}"=="ENTERPRISE"){
                OBJradio[0].checked=true
                $("#benefit").show()
                // 受益人身份证有效期
                var IDCardE = document.getElementById("IDCardE");
                var IDCardEnd = document.getElementById('IDCardEnd');
                if ("${item.legalEnd}" == "forever"){
                    IDCardE.checked=true;
                    IDCardEnd.disabled = true;
                    IDCardEnd.value="";
                }
                if ("${item.isBeneficiary}" == "true"){
                    type[0].checked=true
                }else{
                    type[1].checked=true
                }
            }else {
                OBJradio[1].checked=true
                $("#benefit").hide()
            }
        }
        // 营业执照有效结束期
        var bunessTime = document.getElementById("tradeE");
        var endTime = document.getElementById('endTime');
        if ("${item.businessEnd}" == "forever"){
            bunessTime.checked=true;
            endTime.disabled = true;
            endTime.value="";
        }
        // 法人身份证有效期
        var IDCardE = document.getElementById("IDCardE");
        var IDCardEnd = document.getElementById('IDCardEnd');
        if ("${item.legalEnd}" == "forever"){
            IDCardE.checked=true;
            IDCardEnd.disabled = true;
            IDCardEnd.value="";
        }
        // 受益人身份证有效期
        var bEnd = document.getElementById("bEnd");
        var bIDCardT = document.getElementById('bIDCardT');
        if ("${item.beneficiaryEnd}" == "forever"){
            bIDCardT.checked=true;
            bEnd.disabled = true;
            bEnd.value="";
        }
    }
</script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/operator/OperatorUser_proportionAuth_info.html
New file
@@ -0,0 +1,283 @@
@layout("/common/_container.html"){
<style>
    .avatar-uploader .el-upload {
        border: 1px dashed #d9d9d9;
        border-radius: 6px;
        cursor: pointer;
        position: relative;
        height: 100px;
        width: 100px;
        overflow: hidden;
    }
    .avatar-uploader .el-upload:hover {
        border-color: #409EFF;
    }
    .avatar-uploader-icon {
        font-size: 28px;
        color: #8c939d;
        width: 100px;
        height: 100px;
        line-height: 100px;
        margin-top: 32px;
        text-align: center;
    }
    .avatar {
        width: 100px;
        height: 100px;
        display: block;
    }
    .col-sm-12 {
        margin-top: 20px;
    }
    .col-sm-12 select {
        height: 33px;
    }
    #app1{
        margin-left: 255px;
    }
</style>
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script>
<div class="ibox float-e-margins">
    <div class="ibox-content">
        <div class="form-horizontal" id="carInfoForm">
            <h2>商户信息</h2>
            <div style="display: flex">
                <span>运营商名称:</span><span>${data.name}</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <span>管理员姓名:</span><span>${user.name}</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                <span>管理员电话:</span><span>${user.phone}</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            </div>
            <h2>商户号信息</h2>
            </br>
            </br>
            <input hidden id="id" value="${id}">
            <div class="row">
                <div class="col-lg-6" style="">
                    <div class="form-group">
                        <label class="col-sm-4 control-label" >
                            商户类型:<input checked type="radio" name="bodyType" value="01" onclick="updateHalf(2)">企业
                            <input  type="radio" name="bodyType" value="07" onclick="updateHalf(1)">个人
                        </label>
                    </div>
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*商户名称(一般与证件名称相同):</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" value="${item.businessName}" id="businessName"  placeholder="请输入商户名称" type="text">
                        </div>
                    </div>
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*商户别名(支付宝账单显示的商户名称):</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" value="${item.aliasName}" id="aliasName"  placeholder="请输入商户别名" type="text">
                        </div>
                    </div>
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*联系人姓名:</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" value="${item.name}" id="name"  placeholder="请输入" type="text">
                        </div>
                    </div>
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*联系人电话:</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" value="${item.phone}" id="phone"  placeholder="请输入" type="text">
                        </div>
                    </div>
                        <div class="form-group" >
                            <label class="col-sm-3 control-label">*法人姓名:</label>
                            <div class="col-sm-9" >
                                <input style="width: 300px" class="form-control" id="legalPerson" value="${item.legalPerson}"  placeholder="请输入" type="text">
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-sm-3 control-label">*法人身份证号:</label>
                            <div class="col-sm-9">
                                <input style="width: 300px" class="form-control" value="${item.leagleNumber}" id="leagleNumber"  placeholder="请输入" type="text">
                            </div>
                        </div>
                        <div class="form-group">
                            <#avatar id="IDCardImg" name="*法人身份证正面照" avatarImg="${item.legalFront}" />
                        </div>
                        <div class="form-group">
                            <#avatar id="IDCardImg1" name="*法人身份证背面照" avatarImg="${item.legalBack}" />
                        </div>
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*签约支付宝账号:</label>
                        <div class="col-sm-9" >
                            <input style="width: 300px" class="form-control" id="zfbAccount" value="${item.zfbAccount}"  placeholder="请输入" type="text">
                        </div>
                    </div>
                </div>
                <div class="col-lg-6" style="">
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*营业执照编号:</label>
                        <div class="col-sm-9" >
                            <input style="width: 300px" class="form-control" id="businessNumber" value="${item.businessNumber}"  placeholder="请输入" type="text">
                        </div>
                    </div>
                    <div class="form-group">
                        <#avatar id="license" name="*营业执照" avatarImg="${item.certImage}" />
                    </div>
                    <div class="form-group">
                        <label class="col-sm-4 control-label" >
                            结算账户类型:<input checked type="radio" name="accountType" value="bankCard" onclick="updateHalf(3)">银行卡
                            <input  type="radio" name="accountType" value="alipayAccount" onclick="updateHalf(4)">支付宝账号
                        </label>
                    </div>
                    <div class="form-group" hidden id="aliNumber">
                        <label class="col-sm-3 control-label">*支付宝账号:</label>
                        <div class="col-sm-9" >
                            <input style="width: 300px" class="form-control" id="alipayAccount" value="${item.alipayAccount}"  placeholder="请输入" type="text">
                        </div>
                    </div>
                    <div id="banks">
                        <div class="form-group" >
                            <label class="col-sm-3 control-label">*银行卡号:</label>
                            <div class="col-sm-9" >
                                <input style="width: 300px" class="form-control" id="bankCard" value="${item.bankCard}"  placeholder="请输入" type="text">
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-sm-4 control-label" >
                                账号使用类型:<input checked type="radio" name="useType" value="01" >对公
                                <input  type="radio" name="useType" value="02" >对私
                            </label>
                        </div>
                        <div class="form-group">
                            <label class="col-sm-4 control-label" >
                                银行卡类型:<input checked type="radio" name="cardType" value="DC" onclick="updateHalf(2)">借记卡
                                <input  type="radio" name="cardType" value="CC" onclick="updateHalf(1)">信用卡
                            </label>
                        </div>
                        <div class="form-group">
                            <label class="col-sm-3 control-label">*开户银行:</label>
                            <div class="col-sm-9">
                                <input style="width: 300px" class="form-control" id="bankName" value="${item.bankName}"  placeholder="请输入(例:中国农业银行)" type="text">
                            </div>
                        </div>
                        <div class="form-group" >
                            <label class="col-sm-3 control-label">*开户支行名称:</label>
                            <div class="col-sm-9" >
                                <input style="width: 300px" class="form-control" id="bankName1" value="${item.bankNameTwo}"  placeholder="请输入" type="text">
                            </div>
                        </div>
                        <div class="form-group" >
                            <label class="col-sm-3 control-label">*开户名称:</label>
                            <div class="col-sm-9" >
                                <input style="width: 300px" class="form-control" id="bankUserName" value="${item.accountName}"  placeholder="请输入" type="text">
                            </div>
                        </div>
                        <div class="form-group" id="provinceCode">
                            <label class="col-sm-3 control-label">*开户行所在省:</label>
                            <div class="col-sm-9">
                                <select style="width: 300px" class="form-control" id="pCode" name="pCode" onchange="TSite.oneChange2(this)">
                                    @for(obj in list4){
                                    <option style="width: 300px" value="${obj.code}" ${obj.code == item.provinceCode ? 'selected=selected' : ''}>${obj.name}</option>
                                    @}
                                </select>
                            </div>
                        </div>
                        <div class="form-group" id="cityCode">
                            <label class="col-sm-3 control-label">*开户行所在市:</label>
                            <div class="col-sm-9">
                                <select style="width: 300px" class="form-control" id="cCode" name="cCode" >
                                    @for(obj in list5){
                                    <option style="width: 300px" value="${obj.code}" ${obj.code == item.cityCode ? 'selected=selected' : ''}>${obj.name}</option>
                                    @}
                                </select>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            @if(reasons != null && reasons!=""){
            <div class="row" id="reasons">
                <div class="col-lg-6" >
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*拒绝理由:</label>
                        <div class="col-sm-9">
                            <h3 style="color: red">${item.refuseReason}</h3>
                        </div>
                    </div>
                </div>
            </div>
            @}
            <div class="form-group">
                <div class="row btn-group-m-t">
                    <div class="col-sm-10 col-sm-offset-5" >
                        <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TSite.addSubmit()"/>
                        <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TSite.close()"/>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/modular/system/operatorUser/operatorUser.js"></script>
<script src="${ctxPath}/js/vue/vue.js"></script>
<script src="${ctxPath}/js/elementui/index.js"></script>
<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
<script>
    function updateHalf(e) {
        if(e==3){
            console.log("展示")
            $("#banks").show()
            $("#aliNumber").hide()
        }else if (e==4){
            // 结算到支付宝账号
            console.log("隐藏")
            $("#banks").hide()
            $("#aliNumber").show()
        }
    }
    window.onload = function(){
        console.log("${accountType}")
        console.log("${useType}")
        console.log("${cardType}")
        var accountType = "${accountType}";
        var useType = "${useType}";
        var cardType = "${cardType}";
        var OBJradio=document.getElementsByName("bodyType")
        var type=document.getElementsByName("type")
        if("${bodyType}"=="01"){
            OBJradio[0].checked=true
        }else {
            OBJradio[1].checked=true
        }
        // 如果结算账户选择银行卡
        var OBJradio1=document.getElementsByName("accountType")
        if (accountType!="alipayAccount"){
            $("#aliNumber").hide();
            OBJradio1[0].checked=true
            $("#banks").show();
        }else{
            OBJradio1[1].checked=true
            $("#aliNumber").show();
            $("#banks").hide();
        }
        // 账户使用类型
        var OBJradio2=document.getElementsByName("useType")
        if (useType=="01"){
            OBJradio2[0].checked=true
        }else{
            OBJradio2[1].checked=true
        }
        // 银行卡类型
        var OBJradio3=document.getElementsByName("cardType")
        if (cardType=="DC"){
            OBJradio3[0].checked=true
        }else{
            OBJradio3[1].checked=true
        }
    }
</script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/operatorUser/OperatorUser.html
@@ -9,7 +9,6 @@
                <div class="row row-lg">
                    <div class="col-sm-12">
                        <div class="row">
                            <div class="col-sm-3">
                                <#NameCon id="name" name="管理员姓名:" />
                            </div>
@@ -44,7 +43,6 @@
                                    </select>
                                </div>
                            </div>
                            <div class="col-sm-3">
                                <div class="input-group">
                                    <div class="input-group-btn open">
@@ -56,13 +54,8 @@
                                        <option value="">全部</option>
                                        <option value="0">未认证</option>
                                        <option value="1">审核中</option>
                                        <option value="2">待联系人确认</option>
                                        <option value="3">待法人确认</option>
                                        <option value="4">审核通过</option>
                                        <option value="5">审核失败</option>
                                        <option value="6">已冻结</option>
                                        <option value="7">已撤回</option>
                                        <option value="8">联系人处理中</option>
                                        <option value="2">审核通过</option>
                                        <option value="3">审核失败</option>
                                    </select>
                                </div>
                            </div>
cloud-server-management/src/main/webapp/static/modular/system/operator/operator.js
@@ -96,6 +96,22 @@
    }
};
/**
 * 商户号认证页面回显
 */
TSite.auth1 = function () {
    if (this.check()) {
        var index = layer.open({
            type: 2,
            title: "商户认证详情",
            area: ['100%', '100%'], //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/operator/proportionAuth1/' + TSite.seItem.id
        });
        this.layerIndex = index;
    }
};
/**
 * 分账比例
 */
TSite.proportion = function () {
cloud-server-management/src/main/webapp/static/modular/system/operatorUser/operatorUser.js
@@ -40,7 +40,7 @@
        {title: '分账比例', field: 'proportion', visible: true, align: 'center', valign: 'middle'},
        {title: '审核状态', field: 'audit', visible: true, align: 'center', valign: 'middle',
            formatter:function (data) {
                return {0:"未认证",1:"审核中",2:"待联系人确认",3:"待法人确认",4:"审核通过",5:"审核失败",6:"已冻结",7:"已撤回",8:"联系人处理中"}[data]
                return {0:"未认证",1:"待审核",2:"审核通过",3:"审核失败"}[data]
            }
        },
        {title: '操作', field: 'audit', visible: true, align: 'center', valign: 'middle',
@@ -50,7 +50,7 @@
                    var str = '<button class="btn btn-outline btn-primary" onclick="TSite.auth('+row.operatorId+')" >去认证</button>'
                    btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="" onfocus="TUser.tooltip()">' + str + '</p>']
                }else {
                    var str = '<button class="btn btn-outline btn-primary" onclick="TSite.auth(' + row.operatorId + ')" >详情</button>'
                    var str = '<button class="btn btn-outline btn-primary" onclick="TSite.auth1(' + row.operatorId + ')" >详情</button>'
                    btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="" onfocus="TUser.tooltip()">' + str + '</p>']
                }
                return btn;
@@ -71,13 +71,28 @@
        this.layerIndex = index;
    }
};
/**
 * 商户号认证页面回显
 */
TSite.auth1 = function () {
    if (this.check()) {
        var index = layer.open({
            type: 2,
            title: "商户认证详情",
            area: ['100%', '100%'], //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/operator/proportionAuth1/' + TSite.seItem.operatorId
        });
        this.layerIndex = index;
    }
};
TSite.proportion = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一个运营商商户设置分账比例!");
    }else {
        if (this.check()) {
            var index = layer.open({
                type: 2,
                title: "认证",
@@ -93,23 +108,12 @@
TSite.commit = function(){
    var alipayProportion  = $("#alipayProportion").val();
    var wechatProportion  = $("#wechatProportion").val();
    if($("#alipayNum").val()=='' ){
    if($("#alipayProportion").val()=='' ){
        Feng.info("请输入支付宝分账比例")
        return;
    }
    if($("#wechatNum").val()=='' ){
    if($("#wechatProportion").val()=='' ){
        Feng.info("请输入微信分账比例")
        return;
    }
    if (Number(alipayProportion)+Number(wechatProportion)!=100){
        Feng.info("总比例应该是100%,当前比例:"+Number(Number(alipayProportion)+Number(wechatProportion)));
        return;
    }
    var ali = $("#alipayProportion").val()
    var wechat = $("#wechatProportion").val()
    if(Number(ali)+Number(wechat)!=100){
        Feng.success("总比例需为100%!");
        return;
    }
    //提交信息
@@ -127,14 +131,78 @@
    ajax.set("wechatNum",        $("#wechatNum").val()    );
    ajax.start();
};
// 银行卡使用
TSite.oneChange2 = function (e) {
    var oneId=$(e).val();
    console.log(oneId)
    console.log("!!!!!!!!!!!!!")
    var ajax = new $ax(Feng.ctxPath + "/tCompetition/onChange3", function(data){
        if(data!=null){
            var content='<option value="">选择市</option>';
            $.each(data, function(k,v) {
                content += "<option value='"+v.code+"'>"+v.name+"</option>";
            });
            $("#cCode").empty().append(content);
        }
    });
    ajax.set("oneId",oneId);
    ajax.start();
};
// 经营地址使用
TSite.oneChange6 = function (e) {
    var oneId=$(e).val();
    console.log(oneId)
    console.log("!!!!!!!!!!!!!")
    var ajax = new $ax(Feng.ctxPath + "/tCompetition/onChange3", function(data){
        if(data!=null){
            var content='<option value="">选择市</option>';
            $.each(data, function(k,v) {
                content += "<option value='"+v.code+"'>"+v.name+"</option>";
            });
            $("#bcCode").empty().append(content);
        }
    });
    ajax.set("oneId",oneId);
    ajax.start();
};
// 经营地址使用
TSite.twoChange = function (e) {
    var oneId=$(e).val();
    console.log(oneId)
    console.log("!!!!!!!!!!!!!")
    var ajax = new $ax(Feng.ctxPath + "/operator/getDistrict", function(data){
        if(data!=null){
            var content='<option value="">选择区(县)</option>';
            $.each(data, function(k,v) {
                content += "<option value='"+v.code+"'>"+v.name+"</option>";
            });
            $("#bdCode").empty().append(content);
        }
    });
    ajax.set("cityCode",oneId);
    ajax.start();
};
TSite.addSubmit = function(){
    var bodyType = $("input[name='bodyType']:checked").val();
    var accountType = $("input[name='accountType']:checked").val();
    var type = $("input[name='type']:checked").val();
    if (bodyType=="" || null == bodyType){
        Feng.error("请选择主体类型");
        return;
    }
    if ("" == $("#businessName").val() ){
        Feng.error("请输入商户名称");
        return;
    }
    if ("" == $("#aliasName").val() ){
        Feng.error("请输入商户别名");
        return;
    }
    if ("" == $("#businessNumber").val() ){
        Feng.error("请输入营业执照编号");
        return;
    }
    if ("" == $("#businessNumber").val() ){
        Feng.error("请上传营业执照");
        return;
    }
    if ("" == $("#name").val() ){
@@ -145,109 +213,76 @@
        Feng.error("请输入联系人电话");
        return;
    }
    if ("" == $("#number").val() ){
        Feng.error("请输入联系人身份证号");
        return;
    }
    var platform = $("input[name='platform']:checked").val();
    if ("" == $("#merchantName").val() ){
        Feng.error("请输入营业执照商户名称");
        return;
    }
    if ("" == $("#lrName").val() ){
        Feng.error("请输入法定代表人姓名");
        return;
    }
    var tradeT = document.getElementById("tradeE");
    if (!tradeT.checked){
        if ("" == $("#endTime").val() || null == $("#endTime").val()){
            Feng.error("请输入营业证照过期时间");
            return;
        }
    }
    if ("" == $("#tradeTime").val() || null == $("#tradeTime").val()){
        Feng.error("请输入营业执照生效期间");
        return;
    }
    if ("" == $("#licenseRegistration").val() ){
        Feng.error("请输入营业执照注册号");
        return;
    }
    if ("" == $("#registerAddress").val() ){
        Feng.error("请输入注册地址");
        return;
    }
    if ("" == $("#legalPerson").val()){
        Feng.error("请输入法人姓名");
        return;
    }if ("" == $("#legalPhone").val()){
        Feng.error("请输入法人手机号");
        return;
    }
    var IDCardT = document.getElementById("IDCardE");
    if (!IDCardT.checked){
        if ("" == $("#IDCardTime").val() || null == $("#IDCardTime").val()){
            Feng.error("请输入法人身份证结束时间");
            return;
        }
    }
    if ("" == $("#IDCardTime").val()){
        Feng.error("请输入法人身份证开始时间");
        return;
    }
    if ("" == $("#lIDNumber").val()){
        Feng.error("请输入法人身份证号");
        return;
    }if ("" == $("#lEmail").val()){
        Feng.error("请输入法人邮箱");
        return;
    }if ("" == $("#lIDAddress").val()){
        Feng.error("请输入法人身份证地址");
    }
    if ("" == $("#zfbAccount").val()){
        Feng.error("请输入签约支付宝账号");
        return;
    }
    if(bodyType=="ENTERPRISE"){
        if ("" == $("#bName").val()){
            Feng.error("请输入受益人姓名");
    // 结算账户类型
    var accountType = $("input[name='accountType']:checked").val();
    // 结算到银行卡
    if (accountType == "bankCard"){
        if ("" == $("#bankCard").val()){
            Feng.error("请输入银行卡号");
            return;
        }
        if ("" == $("#bAddress").val()){
            Feng.error("请输入受益人身份证地址");
        if ("" == $("#bankName").val()){
            Feng.error("请选择开户银行");
            return;
        }
        var bIDCardT = document.getElementById("bIDCardT");
        if (!bIDCardT.checked){
            if ("" == $("#bEnd").val()){
                Feng.error("请输入受益人身份证结束时间");
        if ("" == $("#bankName1").val()){
            Feng.error("请输入开户支行名称");
                return;
            }
        }
        if ("" == $("#bTime").val()){
            Feng.error("请输入受益人身份证开始时间");
        if ("" == $("#bankUserName").val()){
            Feng.error("请输入开户名称");
            return;
        }
        if ("" == $("#pCode").val()){
            Feng.error("请选择开户银行所在省");
            return;
        }
        if ("" == $("#cCode").val()){
            Feng.error("请选择开户银行所在市");
            return;
        }
    }else{
        // 结算到支付宝
        if ("" == $("#alipayAccount").val()){
            Feng.error("请输入支付宝账号");
            return;
        }
        }
        if ("" == $("#bIDNumber").val()){
            Feng.error("请输入受益人身份证号");
            return;
        }
    }
    //提交信息
    var ajax = new $ax(Feng.ctxPath + "/operator/auth", function(data){
        if (data==5001){
            Feng.error("未上传营业执照!");
            return;
        }else if(data==5002){
            Feng.error("未上传法人身份证正面照!");
            return;
        }else if(data==5003){
            Feng.error("未上传法人身份证背面照!");
        }else if(data==5004){
            Feng.error("未上传受益人身份证正面照!");
        }else if(data==5005){
            Feng.error("未上传受益人身份证背面照!");
            return;
        }else if(data==5007){
            Feng.error("输入的开户银行名称有误!");
            return;
        } else if (data.code==500){
            console.log(data)
            Feng.error("认证失败:"+data.msg);
            return;
        }else{
            Feng.success("操作成功!");
            Feng.success("认证成功!请等待支付宝审核");
            window.parent.TSite.table.refresh();
            TSite.close();
        }
@@ -256,75 +291,41 @@
    });
    ajax.set("operatorId",        $("#id").val()    );
    ajax.set("bodyType",        bodyType    );
    ajax.set("type",        platform    );
    ajax.set("businessName",        $("#merchantName").val()    );
    ajax.set("businessNumber",        $("#licenseRegistration").val()    );
    ajax.set("legalRepresentative",        $("#lrName").val()    );
    ajax.set("registerAddress",        $("#registerAddress").val()    );
    if ($("#endTime").val()==""){
        ajax.set("businessEnd","forever");
    }else{
        ajax.set("businessEnd",$("#endTime").val());
    }
    if ($("#IDCardEnd").val()==""){
        ajax.set("legalEnd","forever");
        ajax.set("lpIcForeverFlag", 0);
    }else{
        ajax.set("legalEnd",$("#IDCardEnd").val());
        ajax.set("lpIcForeverFlag", 1);
    }
    if(bodyType=="ENTERPRISE"){
        if ($("#bEnd").val()==""){
            console.log("永远")
            ajax.set("beneficiaryEnd","forever");
        }else{
            console.log("嗯嗯嗯")
            ajax.set("beneficiaryEnd",$("#bEnd").val());
        }
    }
    var tradeT = document.getElementById('tradeE');
    if (tradeT.checked) {
        endTime.disabled = true;
        endTime.value="";
        ajax.set("blBusinessFoeverFlag", 1);
    } else {
        ajax.set("blBusinessFoeverFlag", 0);
        endTime.disabled = false;
    }
    ajax.set("businessTerm",        $("#tradeTime").val()    );
    ajax.set("businessName",        $("#businessName").val());
    ajax.set("aliasName",        $("#aliasName").val());
    ajax.set("businessNumber",        $("#businessNumber").val()    );
    ajax.set("license",        $("#license").val()    );
    ajax.set("name",        $("#name").val()    );
    ajax.set("phone",        $("#phone").val()    );
    ajax.set("number",        $("#number").val()    );
    ajax.set("businessPicture",        $("#license").val()    );
    ajax.set("shopProvinceCode",        $("#bpCode").val()    );
    ajax.set("shopProvince",        $('#bpCode option:selected').text());
    ajax.set("shopCityCode",        $("#bcCode").val()    );
    ajax.set("shopCity",        $('#bcCode option:selected').text());
    ajax.set("shopDistrictCode",        $("#bdCode").val()    );
    ajax.set("shopDistrict",        $('#bdCode option:selected').text());
    ajax.set("registerAddress",        $("#registerAddress").val()    );
    ajax.set("legalPerson",        $("#legalPerson").val()    );
    ajax.set("legalNumber",        $("#lIDNumber").val()    );
    ajax.set("legalPhone",        $("#legalPhone").val()    );
    ajax.set("legalEmail",        $("#lEmail").val()    );
    ajax.set("legalTerm",        $("#IDCardTime").val()    );
    ajax.set("legalAddress",        $("#lIDAddress").val()    );
    ajax.set("leagleNumber",        $("#leagleNumber").val()    );
    ajax.set("legalFront",        $("#IDCardImg").val()    );
    ajax.set("legalBack",        $("#IDCardImg1").val()    );
    ajax.set("accountType",        accountType    );
    ajax.set("bank",        $("#bank").val()    );
    ajax.set("accountName",        $("#backUserName").val()    );
    ajax.set("province",        $('#pCode option:selected').text()   );
    ajax.set("alipayAccount",        $("#alipayAccount").val()    );
    ajax.set("bankCard",        $("#bankCard").val()    );
    // 结算账户类型
    var useType = $("input[name='useType']:checked").val();
    ajax.set("useType",        useType    );
    // 银行卡类型
    var cardType = $("input[name='cardType']:checked").val();
    ajax.set("cardType",        cardType    );
    ajax.set("bankName",        $("#bankName").val()    );
    ajax.set("bankNameTwo",        $("#bankName1").val()    );
    ajax.set("accountName",        $("#bankUserName").val()    );
    ajax.set("provinceCode",        $("#pCode").val()    );
    ajax.set("city",        $('#cCode option:selected').text()    );
    ajax.set("province",        $('#pCode option:selected').text());
    ajax.set("cityCode",        $("#cCode").val()    );
    ajax.set("bankName",        $("#backName").val()    );
    ajax.set("bankNumber",        $("#backNumber").val()    );
    ajax.set("isBeneficiary",        type    );
    ajax.set("beneficiary",        $("#bName").val()    );
    ajax.set("beneficiaryPhone",        $("#bPhone").val()    );
    ajax.set("beneficiaryNumber",        $("#bIDNumber").val()    );
    ajax.set("beneficiaryAddress",        $("#bAddress").val()    );
    ajax.set("beneficiaryTerm",        $("#bTime").val()    );
    ajax.set("beneficiaryFront",        $("#bImg1").val()    );
    ajax.set("beneficiaryBack",        $("#bImg2").val()    );
    ajax.set("remark",        $("#remark").val()    );
    ajax.set("city",        $('#cCode option:selected').text());
    ajax.set("iqImage",        $("#iqImage").val()    );
    ajax.set("zfbAccount",        $("#zfbAccount").val()    );
    ajax.start();
};
/**
@@ -435,7 +436,6 @@
$(function () {
    var defaultColunms = TSite.initColumn();
    var table = new BSTable(TSite.id, "/operatorUser/listAll", defaultColunms);
    table.setPaginationType("client");
@@ -446,6 +446,9 @@
    var c4 = new $WebUpload("bImg1");
    var c5 = new $WebUpload("bImg2");
    var c6 = new $WebUpload("Img");
    var inDoorImages = new $WebUpload("inDoorImages");
    var outDoorImages = new $WebUpload("outDoorImages");
    var iqImage = new $WebUpload("iqImage");
    c1.setUploadBarId("progressBar");
    c1.init();
    c2.setUploadBarId("progressBar");
@@ -458,4 +461,10 @@
    c5.init();
    c6.setUploadBarId("progressBar");
    c6.init();
    inDoorImages.setUploadBarId("progressBar");
    inDoorImages.init();
    outDoorImages.setUploadBarId("progressBar");
    outDoorImages.init();
    iqImage.setUploadBarId("progressBar");
    iqImage.init();
});
cloud-server-other/pom.xml
@@ -104,7 +104,7 @@
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>4.8.10.ALL</version>
            <version>4.38.10.ALL</version>
        </dependency>
    </dependencies>
cloud-server-other/src/main/java/com/dsh/other/controller/SiteController.java
@@ -66,6 +66,15 @@
    private CityManagerClient cityManagerClient;
    /**
     * 通过运营商id查询运营商对应的支付宝商户号
     */
    @RequestMapping("/base/getSMIDByOperatorId")
    @ResponseBody
    public String getSMIDByOperatorId(Integer id) {
        // 获取运营商的管理员
        return siteService.getSMIDByOperatorId(id);
    }
    /**
     * 获取所有场地
     */
    @RequestMapping("/base/site/getList")
@@ -340,7 +349,6 @@
        }
    }
    /**
     * 预约场地支付宝回调
     *
@@ -356,7 +364,8 @@
            if (null != map) {
                String code = map.get("out_trade_no");
                String trade_no = map.get("trade_no");
                SiteBooking siteBooking = siteBookingService.getOne(new QueryWrapper<SiteBooking>().eq("orderNo", code).eq("state", 1));
                SiteBooking siteBooking = siteBookingService.getOne(new QueryWrapper<SiteBooking>()
                        .eq("orderNo", code).eq("state", 1));
                if (siteBooking.getStatus() == 0) {
                    siteBooking.setPayTime(new Date());
                    siteBooking.setStatus(1);
cloud-server-other/src/main/java/com/dsh/other/mapper/SiteMapper.java
@@ -48,4 +48,6 @@
    List<TSiteDTO> listExipre(@Param("query") ExpireSiteSearchVO vo);
    String getSMIDByOperatorId(@Param("id")Integer id);
}
cloud-server-other/src/main/java/com/dsh/other/service/ISiteService.java
@@ -101,4 +101,6 @@
    Object changeState(SiteChangeStateVO vo);
    String getSMIDByOperatorId(Integer id);
}
cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java
@@ -522,7 +522,7 @@
        return weixinpay;
    }
    private String smid = "2088330203191220";//平台支付宝商户号
    /**
     * 课程支付宝支付
     *
@@ -533,7 +533,18 @@
    public ResultUtil aliPaymentSite(Double paymentPrice, SiteBooking siteBooking) throws Exception {
        String code = siteBooking.getOrderNo();
        Integer id = siteBooking.getId();
        ResultUtil alipay = payMoneyUtil.alipay("预约场地", "预约场地", id.toString(), code, paymentPrice.toString(), "/base/site/aliPaymentSiteCallback");
        // 判断预约的门店 属于哪个运营商
        Integer storeId = siteBooking.getStoreId();
        Store byId = storeService.getById(storeId);
        Integer operatorId = byId.getOperatorId();
        String smid1 = "";
        if (operatorId == null ){
            // 平台的门店
            smid1 = smid;
        }else{
            smid1 = siteService.getSMIDByOperatorId(operatorId);
        }
        ResultUtil alipay = payMoneyUtil.alipay(smid1,"预约场地", "预约场地", id.toString(), code, paymentPrice.toString(), "/base/site/aliPaymentSiteCallback");
        System.out.println("预约场地----" + alipay.getCode());
        if (alipay.getCode() == 200) {
            new Thread(new Runnable() {
@@ -572,6 +583,18 @@
                                    siteBooking.setPayOrderNo(tradeNo);
                                    siteBookingService.updateById(siteBooking);
                                    System.err.println("======完成支付");
                                    // 判断预约的门店 属于哪个运营商
                                    Integer storeId = siteBooking.getStoreId();
                                    Store byId = storeService.getById(storeId);
                                    Integer operatorId = byId.getOperatorId();
                                    String smid1 = "";
                                    if (operatorId == null ){
                                        // 平台的门店
                                        smid1 = smid;
                                    }else{
                                        smid1 = siteService.getSMIDByOperatorId(operatorId);
                                    }
                                    payMoneyUtil.confirm(smid1,code,tradeNo,paymentPrice.toString());
                                    break;
                                }
                                if ("WAIT_BUYER_PAY".equals(s)) {
@@ -892,4 +915,9 @@
        return siteMapper.changeState(siteIds, type);
    }
    @Override
    public String getSMIDByOperatorId(Integer id) {
        return siteMapper.getSMIDByOperatorId(id);
    }
}
cloud-server-other/src/main/java/com/dsh/other/util/PayMoneyUtil.java
@@ -6,10 +6,9 @@
import com.alipay.api.AlipayClient;
import com.alipay.api.CertAlipayRequest;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeAppPayModel;
import com.alipay.api.domain.ExtendParams;
import com.alipay.api.domain.RoyaltyDetailInfos;
import com.alipay.api.domain.RoyaltyInfo;
import com.alipay.api.domain.*;
import com.alipay.api.msg.AlipayMsgClient;
import com.alipay.api.msg.MsgHandler;
import com.alipay.api.request.*;
import com.alipay.api.response.*;
import lombok.Synchronized;
@@ -72,12 +71,54 @@
    private String certPath = "C:\\cert\\1523106371_20211206_cert\\apiclient_cert.p12";//微信证书
    public ResultUtil confirm(String smid,String code, String outTradeNo, String amount) {
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",
                aliAppid,
                appPrivateKey,
                "json",
                "GBK",
                alipay_public_key,
                "RSA2");
        AlipayTradeSettleConfirmRequest request = new AlipayTradeSettleConfirmRequest();
        request.setBizContent("{" +
                "  \"out_request_no\":\""+code+"\"," +
                "  \"trade_no\":\""+outTradeNo+"\"," +
                "  \"settle_info\":{" +
                "    \"settle_detail_infos\":[" +
                "      {" +
                "        \"trans_in_type\":\"defaultSettle\"," +
                "        \"settle_entity_id\":\""+smid+"\"," +
                "        \"settle_entity_type\":\"SecondMerchant\"," +
                "        \"amount\":"+amount+"," +
                "      }" +
                "    ]" +
                "  }," +
                "  \"extend_params\":{" +
                "    \"royalty_freeze\":\"true\"" +
                "  }" +
                "}");
        AlipayTradeSettleConfirmResponse response = null;
        try {
            response = alipayClient.execute(request);
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
        if(response.isSuccess()){
            System.out.println("调用成功");
            return ResultUtil.success();
        } else {
            System.out.println("调用失败");
            return ResultUtil.error("出现问题啦");
        }
    }
    /**
     * 支付宝支付
     */
    public ResultUtil alipay(String body, String subject, String passbackParams, String outTradeNo, String amount, String notifyUrl) {
//        //构造client
    public ResultUtil alipay(String smid,String body, String subject, String passbackParams, String outTradeNo, String amount, String notifyUrl) {
////        //构造client
//        CertAlipayRequest certAlipayRequest = new CertAlipayRequest ();
//        //设置网关地址
//        certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do");
@@ -142,6 +183,21 @@
        model.setTotalAmount(amount);//付款金额
        model.setProductCode("QUICK_MSECURITY_PAY");
        model.setPassbackParams(passbackParams);//自定义参数
        SettleInfo settleInfo = new SettleInfo();
        settleInfo.setSettlePeriodTime("3d");
        SettleDetailInfo settleDetailInfo = new SettleDetailInfo();
        settleDetailInfo.setTransInType("defaultSettle");
        settleDetailInfo.setAmount(amount);
        List<SettleDetailInfo> settleDetailInfos = new ArrayList<>();
        settleDetailInfos.add(settleDetailInfo);
        settleInfo.setSettleDetailInfos(settleDetailInfos);
        model.setSettleInfo(settleInfo);
        SubMerchant subMerchant = new SubMerchant();
        subMerchant.setMerchantId(smid);
        model.setSubMerchant(subMerchant);
        ExtendParams extendParams = new ExtendParams();
        extendParams.setRoyaltyFreeze("true");// 冻结资金 用于后续分账处理
        model.setExtendParams(extendParams);
        request.setBizModel(model);
        request.setNotifyUrl(callbackPath + notifyUrl);
cloud-server-other/src/main/resources/mapper/SiteMapper.xml
@@ -141,4 +141,7 @@
        ORDER BY insertTime desc
    </select>
    <select id="getSMIDByOperatorId" resultType="java.lang.String">
        select alipayNum from t_operator_user where operatorId = #{id}
    </select>
</mapper>