无关风月
1 天以前 1442f149019ee0590389abd7a88a79c4d9b59034
ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/FranchiseeController.java
@@ -9,6 +9,7 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -21,10 +22,7 @@
import com.ruoyi.admin.utils.util.HttpRequester;
import com.ruoyi.admin.utils.util.HttpRespons;
import com.ruoyi.admin.utils.util.Md5_Sign;
import com.ruoyi.admin.vo.InfoDto;
import com.ruoyi.admin.vo.MoneyRecentQuery;
import com.ruoyi.admin.vo.PayDto;
import com.ruoyi.admin.vo.RencentBalance;
import com.ruoyi.admin.vo.*;
import com.ruoyi.common.core.constant.Constants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.GlobalException;
@@ -115,24 +113,58 @@
    @ApiOperation(value = "加盟商列表余额", tags = {"后台2.0-加盟商列表余额"})
    @PostMapping(value = "/recent/money")
    public R<RencentBalance> recentmoney() {
    @GetMapping(value = "/recent/money")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "加盟商名称", name = "name", dataType = "String"),
            @ApiImplicitParam(value = "管理员", name = "head", dataType = "String"),
            @ApiImplicitParam(value = "手机号码", name = "phone", dataType = "String"),
            @ApiImplicitParam(value = "管辖城市", name = "city", dataType = "String"),
            @ApiImplicitParam(value = "充值/扣款起始时间", name = "date1", dataType = "String"),
            @ApiImplicitParam(value = "充值/扣款结束时间", name = "date2", dataType = "String"),
            @ApiImplicitParam(value = "页码", name = "pageNum", dataType = "Integer", required = true),
            @ApiImplicitParam(value = "每页条数", name = "pageSize", dataType = "Integer", required = true)
    })
    public R<RencentBalance> recentmoney(String name, String head, String phone, String city,
                                         String date1,String date2,
                                         @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum,
                                         @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
        BigDecimal balance = new BigDecimal(0);
        List<Franchisee> list = franchiseeService.lambdaQuery().list();
        LambdaQueryWrapper<Franchisee> franchiseeLambdaQueryWrapper = new LambdaQueryWrapper<>();
        franchiseeLambdaQueryWrapper = StringUtils.isNotBlank(name) ? franchiseeLambdaQueryWrapper.like(Franchisee::getName, name) : franchiseeLambdaQueryWrapper;
        franchiseeLambdaQueryWrapper = StringUtils.isNotBlank(head) ? franchiseeLambdaQueryWrapper.like(Franchisee::getHead, head) : franchiseeLambdaQueryWrapper;
        franchiseeLambdaQueryWrapper = StringUtils.isNotBlank(phone) ? franchiseeLambdaQueryWrapper.like(Franchisee::getHeadPhone, phone) : franchiseeLambdaQueryWrapper;
        if (org.springframework.util.StringUtils.hasLength(city)){
            String[] cityCodes = city.split(",");
            franchiseeLambdaQueryWrapper.and(e->{
                List<String> list = Arrays.asList(cityCodes);
                e.like(Franchisee::getCityCode,list.get(0));
                for (int i = 1; i < list.size(); i++) {
                    e.or().like(Franchisee::getCityCode,list.get(i));
                }
            });
        }        List<Franchisee> list = franchiseeService.list(franchiseeLambdaQueryWrapper);
        List<Integer> collect = list.stream().map(Franchisee::getId).collect(Collectors.toList());
        if (collect.isEmpty())collect.add(-1);
        for (Franchisee franchisee : list) {
            balance = balance.add(franchisee.getBalance());
        }
        //充值的金额
        BigDecimal balance1 = new BigDecimal(0);
        List<TFranchiseeBalanceChange> list1 = balanceChangeService.lambdaQuery().eq(TFranchiseeBalanceChange::getType, 1).list();
        List<TFranchiseeBalanceChange> list1 = balanceChangeService.lambdaQuery()
                .in(TFranchiseeBalanceChange::getFranchiseeId,collect)
                .between(date1!=null,TFranchiseeBalanceChange::getCreateTime, date1, date2)
                .eq(TFranchiseeBalanceChange::getType, 1).list();
        for (TFranchiseeBalanceChange franchiseeBalanceChange : list1) {
            balance1 = balance1.add(franchiseeBalanceChange.getAmount());
        }
        //扣除的金额
        BigDecimal balance2 = new BigDecimal(0);
        List<TFranchiseeBalanceChange> list2 = balanceChangeService.lambdaQuery().eq(TFranchiseeBalanceChange::getType, 2).list();
        for (TFranchiseeBalanceChange franchiseeBalanceChange : list1) {
        List<TFranchiseeBalanceChange> list2 = balanceChangeService.lambdaQuery()
                .in(TFranchiseeBalanceChange::getFranchiseeId,collect)
                .eq(TFranchiseeBalanceChange::getType, 2)
                .between(date1!=null,TFranchiseeBalanceChange::getCreateTime, date1, date2)
                .eq(TFranchiseeBalanceChange::getIs_pay,1).list();
        for (TFranchiseeBalanceChange franchiseeBalanceChange : list2) {
            balance2 = balance2.add(franchiseeBalanceChange.getAmount());
        }
@@ -144,24 +176,28 @@
        return R.ok(balance3);
    }
    @ApiOperation(value = "详情",tags = {"师傅段2.0-统一充值扣款列表"})
    @PostMapping(value = "/change/detail")
    public R<TFranchiseeBalanceChange> detail1(@RequestParam Integer id) throws AlipayApiException {
        TFranchiseeBalanceChange byId = balanceChangeService.getById(id);
        return R.ok(byId);
        TFranchiseeBalanceChange balanceChange = balanceChangeService.getById(id);
        if (balanceChange.getType()==2){
            balanceChange.setPayStr("微信支付");
        }
        return R.ok(balanceChange);
    }
    @ApiOperation(value = "扣款记录及充值记录", tags = {"后台2.0-统一充值扣款列表","师傅段2.0-统一充值扣款列表"})
    @PostMapping(value = "/recent/money/list")
    public R<Page<TFranchiseeBalanceChange>> recentmoneylist(@RequestBody MoneyRecentQuery moneyRecentQuery) {
        Long userid = tokenService.getLoginUser().getUserid();
        SysUser sysUser = sysUserService.getById(userid);
        Page<TFranchiseeBalanceChange> page = balanceChangeService.lambdaQuery().eq(moneyRecentQuery.getType() != null, TFranchiseeBalanceChange::getType, moneyRecentQuery.getType())
                .eq(moneyRecentQuery.getFranchId() != null, TFranchiseeBalanceChange::getFranchiseeId, moneyRecentQuery.getFranchId())
                .eq(moneyRecentQuery.getFranchName() != null && !"".equals(moneyRecentQuery.getFranchName()), TFranchiseeBalanceChange::getFranchiseeName, moneyRecentQuery.getFranchName())
                .eq(sysUser.getFranchiseeId() != null, TFranchiseeBalanceChange::getFranchiseeId, sysUser.getFranchiseeId())
                .like(moneyRecentQuery.getName() != null && !"".equals(moneyRecentQuery.getName()), TFranchiseeBalanceChange::getFranchiseeName, moneyRecentQuery.getName())
                .ge(moneyRecentQuery.getDate1() != null, TFranchiseeBalanceChange::getCreateTime, moneyRecentQuery.getDate1())
                .le(moneyRecentQuery.getDate2() != null, TFranchiseeBalanceChange::getCreateTime, moneyRecentQuery.getDate2())
                .eq(moneyRecentQuery.getFranchId()!=null, TFranchiseeBalanceChange::getFranchiseeId, moneyRecentQuery.getFranchId())
                .eq(TFranchiseeBalanceChange::getIs_pay,1)
                .orderByDesc(TFranchiseeBalanceChange::getCreateTime)
                .page(Page.of(moneyRecentQuery.getPageNum(), moneyRecentQuery.getPageSize()));
@@ -173,12 +209,17 @@
                String siteIds = franchisee.getSiteIds();
                List<Site> list1 = siteService.lambdaQuery().in(Site::getId, siteIds.split(",")).list();
                record.setList1(list1);
            }
            String cityCode = franchisee.getCityCode();
            List<Region> list = regionService.lambdaQuery().in(Region::getCode, cityCode.split(",")).list();
            record.setList(list);
            record.setFranchiseeName(franchisee.getName());
            if (record.getType()==1){
                record.setPayStr("扣除旧机款");
            }
            if (record.getType()==2){
                record.setPayStr("充值");
            }
        }
        return R.ok(page);
    }
@@ -186,14 +227,24 @@
    @ApiOperation(value = "导出", tags = {"后台2.0-统一充值扣款列表"})
    @PostMapping(value = "/recent/money/list/export")
    public R<Page<TFranchiseeBalanceChange>> export(@RequestBody MoneyRecentQuery moneyRecentQuery, HttpServletResponse response) {
        Long userid = tokenService.getLoginUser().getUserid();
        SysUser sysUser = sysUserService.getById(userid);
        if (moneyRecentQuery.getType()==2) {
            List<TFranchiseeBalanceChange> page = balanceChangeService.lambdaQuery().eq(moneyRecentQuery.getType() != null, TFranchiseeBalanceChange::getType, moneyRecentQuery.getType())
                    .eq(moneyRecentQuery.getFranchId() != null, TFranchiseeBalanceChange::getFranchiseeId, moneyRecentQuery.getFranchId())
                    .eq(moneyRecentQuery.getFranchName() != null && !"".equals(moneyRecentQuery.getFranchName()), TFranchiseeBalanceChange::getFranchiseeName, moneyRecentQuery.getFranchName())
                    .eq(sysUser.getFranchiseeId() != null, TFranchiseeBalanceChange::getFranchiseeId, sysUser.getFranchiseeId())
                    .eq(moneyRecentQuery.getName() != null && !"".equals(moneyRecentQuery.getName()), TFranchiseeBalanceChange::getFranchiseeName, moneyRecentQuery.getName())
                    .ge(moneyRecentQuery.getDate1() != null, TFranchiseeBalanceChange::getCreateTime, moneyRecentQuery.getDate1())
                    .le(moneyRecentQuery.getDate2() != null, TFranchiseeBalanceChange::getCreateTime, moneyRecentQuery.getDate2())
                    .eq(moneyRecentQuery.getFranchId()!=null, TFranchiseeBalanceChange::getFranchiseeId, moneyRecentQuery.getFranchId())
                    .eq(TFranchiseeBalanceChange::getIs_pay,1)
                    .orderByDesc(TFranchiseeBalanceChange::getCreateTime)
                    .list();
            for (TFranchiseeBalanceChange tFranchiseeBalanceChange : page) {
                tFranchiseeBalanceChange.setPayStr("微信支付");
                LocalDateTime createTime = tFranchiseeBalanceChange.getCreateTime();
                // 转化为String类型的格式字符串yyyy-MM-dd HH:mm:ss
                tFranchiseeBalanceChange.setCreateTimeStr(createTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
            }
            try {
                response.setCharacterEncoding(Constants.UTF8);
                response.setContentType("application/vnd.ms-excel");
@@ -221,13 +272,17 @@
            return R.ok();
        }else {
            List<TFranchiseeBalanceChange> page = balanceChangeService.lambdaQuery().eq(moneyRecentQuery.getType() != null, TFranchiseeBalanceChange::getType, moneyRecentQuery.getType())
                    .eq(moneyRecentQuery.getFranchId() != null, TFranchiseeBalanceChange::getFranchiseeId, moneyRecentQuery.getFranchId())
                    .eq(moneyRecentQuery.getFranchName() != null && !"".equals(moneyRecentQuery.getFranchName()), TFranchiseeBalanceChange::getFranchiseeName, moneyRecentQuery.getFranchName())
                    .eq(sysUser.getFranchiseeId() != null, TFranchiseeBalanceChange::getFranchiseeId, sysUser.getFranchiseeId())
                    .eq(moneyRecentQuery.getName() != null && !"".equals(moneyRecentQuery.getName()), TFranchiseeBalanceChange::getFranchiseeName, moneyRecentQuery.getName())
                    .ge(moneyRecentQuery.getDate1() != null, TFranchiseeBalanceChange::getCreateTime, moneyRecentQuery.getDate1())
                    .le(moneyRecentQuery.getDate2() != null, TFranchiseeBalanceChange::getCreateTime, moneyRecentQuery.getDate2())
                    .orderByDesc(TFranchiseeBalanceChange::getCreateTime)
                    .list();
            for (TFranchiseeBalanceChange tFranchiseeBalanceChange : page) {
                LocalDateTime createTime = tFranchiseeBalanceChange.getCreateTime();
                // 转化为String类型的格式字符串yyyy-MM-dd HH:mm:ss
                tFranchiseeBalanceChange.setCreateTimeStr(createTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
            }
            try {
                response.setCharacterEncoding(Constants.UTF8);
                response.setContentType("application/vnd.ms-excel");
@@ -299,7 +354,7 @@
        map.put("p4_Cur", "1"); /**交易币种 */
        map.put("q5_OpenId", openId);
        map.put("p5_ProductName", "加盟商充值"); /** 商品名称 */
        map.put("p9_NotifyUrl", "http://www.zhipingwang.com.cn:9100/admin/franchisee/callBack"); /** 服务器异步通知地址 */
        map.put("p9_NotifyUrl", "http://101.34.55.62:9100/admin/franchisee/callBack"); /** 服务器异步通知地址 */
        map.put("q1_FrpCode", "WEIXIN_APP3"); /** 交易类型*/
        map.put("q7_AppId", "wx1a4a7760be53a835"); /** 交易类型*/
        map.put("qa_TradeMerchantNo", "777165000859101"); /** 777开头的报备商户号   必填!*/
@@ -352,11 +407,12 @@
        TFranchiseeBalanceChange tFranchiseeBalanceChange = new TFranchiseeBalanceChange();
        tFranchiseeBalanceChange.setAmount(money);
        tFranchiseeBalanceChange.setAmount(money.multiply(new BigDecimal("0.9972")).setScale(2,BigDecimal.ROUND_DOWN));
        tFranchiseeBalanceChange.setIs_pay(0);
        tFranchiseeBalanceChange.setFranchiseeName(byId.getName());
        tFranchiseeBalanceChange.setFranchiseeId(String.valueOf(byId.getId()));
        tFranchiseeBalanceChange.setType(2);
        tFranchiseeBalanceChange.setRemark("微信支付");
        tFranchiseeBalanceChange.setCode(code);
        balanceChangeService.save(tFranchiseeBalanceChange);
@@ -390,54 +446,177 @@
    @Resource
    private NativePayService nativePayService;
    public static void main(String[] args) {
        BigDecimal money = new BigDecimal(2);
        System.err.println(money.multiply(new BigDecimal("0.9972")).setScale(2,BigDecimal.ROUND_DOWN));
    }
    @ApiOperation(value = "扫码支付",tags = {"后台2.0-加盟商列表余额"})
    @PostMapping(value = "/code/buy")
    public R buy(@RequestParam BigDecimal money) throws AlipayApiException {
    public R buy(@RequestParam BigDecimal money) throws AlipayApiException, IOException {
        Long userid = tokenService.getLoginUser().getUserid();
        SysUser byId1 = sysUserService.getById(userid);
        Franchisee byId = franchiseeService.getById(byId1.getFranchiseeId());
        String code = generateTradeNumber();
        int i = money.multiply(BigDecimal.valueOf(100)).intValue();
        com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest prepayRequest = new com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest();
            prepayRequest.setAppid(weChatConfig.appId);
            prepayRequest.setMchid(weChatConfig.merchantId);
            prepayRequest.setOutTradeNo(code);
            prepayRequest.setDescription("购买资料");
            prepayRequest.setNotifyUrl("http://www.zhipingwang.com.cn:9090/admin/franchisee/callBack");
            com.wechat.pay.java.service.payments.nativepay.model.Amount amount = new com.wechat.pay.java.service.payments.nativepay.model.Amount();
            amount.setTotal(i);
            prepayRequest.setAmount(amount);
            // 调用下单方法,得到应答
            com.wechat.pay.java.service.partnerpayments.app.model.PrepayResponse response;
            try {
                com.wechat.pay.java.service.payments.nativepay.model.PrepayResponse prepay = nativePayService.prepay(prepayRequest);
                //预支付成功,创建预支付订单
                TFranchiseeBalanceChange tFranchiseeBalanceChange = new TFranchiseeBalanceChange();
                tFranchiseeBalanceChange.setAmount(money);
                tFranchiseeBalanceChange.setIs_pay(0);
                tFranchiseeBalanceChange.setFranchiseeName(byId.getName());
                tFranchiseeBalanceChange.setFranchiseeId(String.valueOf(byId.getId()));
                tFranchiseeBalanceChange.setType(2);
                tFranchiseeBalanceChange.setCode(code);
                balanceChangeService.save(tFranchiseeBalanceChange);
        String key = "ad273ceb5e1b49e68d5c565d28d1d305";/** md5密钥商户后台-商户中心-商户设置-密钥管理获取 必填!*/
        Map<String, String> map = new HashMap<String, String>();
        map.put("p0_Version", "2.5");/** 版本号 */
        map.put("p1_MerchantNo", "888122400007793");/** 商户编号 */
        map.put("p2_OrderNo", code); /**商户订单号*/
        map.put("p3_Amount", String.valueOf(money));/**订单金额*/
        map.put("p4_Cur", "1"); /**交易币种 */
        map.put("p5_ProductName", "充值"); /** 商品名称 */
        map.put("p6_ProductDesc", "加盟商充值"); /** 商品名称 */
//        map.put("p7_Mp", ""); /** 如果商户请求时传递了该参数,则返回给商户时会原值传 回。 */
        map.put("p9_NotifyUrl", "http://101.34.55.62:9100/admin/franchisee/callBack"); /** 服务器异步通知地址 */
        map.put("q1_FrpCode", "WEIXIN_NATIVE"); /** 微信扫码(主扫)【注:此为用户主扫,商户被扫】*/
        map.put("q4_IsShowPic", "1"); /** 是否展示二 维码图片 1表示输出*/
        map.put("q7_AppId", "wx1a4a7760be53a835"); /** 交易类型*/
        map.put("qa_TradeMerchantNo", "777165000859101"); /** 777开头的报备商户号   必填!*/
        map.put("qi_FqSellerPercen", "0"); /** 卖家承担收 费比例 目前仅支持传入 0 ,即用户承 担手续费!*/
        String Strmap = CreateLinkStringByGet1.createLinkStringByGet(map);
        // 签名
        String sign = "";
        sign = Md5_Sign.SignByMD5(Strmap, key);
        map.put("hmac", sign);/** 签名数据 */
        System.out.println("发送:" + JSON.toJSONString(map).toString());
        // post请求参数内容
        HttpRequester hr = new HttpRequester();
        HttpRespons HP = hr.sendPost("https://trade.joinpay.com/tradeRt/uniPay", map);
        System.out.println("接收返回参数:" + HP.getContent());
        JSONObject jsonObject = JSONObject.parseObject(HP.getContent());
        String rcResult = jsonObject.getString("rd_Pic");
        Map<String, Object> map2 = new HashMap<>();
        map2.put("rcResult", rcResult);
//        com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest prepayRequest = new com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest();
//            prepayRequest.setAppid(weChatConfig.appId);
//            prepayRequest.setMchid(weChatConfig.merchantId);
//            prepayRequest.setOutTradeNo(code);
//            prepayRequest.setDescription("购买资料");
//            prepayRequest.setNotifyUrl("http://www.zhipingwang.com.cn:9090/admin/franchisee/callBack");
//            com.wechat.pay.java.service.payments.nativepay.model.Amount amount = new com.wechat.pay.java.service.payments.nativepay.model.Amount();
//            amount.setTotal(i);
//            prepayRequest.setAmount(amount);
//            // 调用下单方法,得到应答
//            com.wechat.pay.java.service.partnerpayments.app.model.PrepayResponse response;
        try {
//                com.wechat.pay.java.service.payments.nativepay.model.PrepayResponse prepay = nativePayService.prepay(prepayRequest);
            //预支付成功,创建预支付订单
            TFranchiseeBalanceChange tFranchiseeBalanceChange = new TFranchiseeBalanceChange();
            tFranchiseeBalanceChange.setAmount(money.multiply(new BigDecimal("0.9972")).setScale(2,BigDecimal.ROUND_DOWN));
            tFranchiseeBalanceChange.setIs_pay(0);
            tFranchiseeBalanceChange.setFranchiseeName(byId.getName());
            tFranchiseeBalanceChange.setFranchiseeId(String.valueOf(byId.getId()));
            tFranchiseeBalanceChange.setType(2);
            tFranchiseeBalanceChange.setCode(code);
            tFranchiseeBalanceChange.setRemark("加盟商扫码充值");
            balanceChangeService.save(tFranchiseeBalanceChange);
                PayDto payDto = new PayDto();
                payDto.setOrderId(tFranchiseeBalanceChange.getId());
                payDto.setQrCode(prepay.getCodeUrl());
            PayDto payDto = new PayDto();
            payDto.setOrderId(tFranchiseeBalanceChange.getId());
            payDto.setQrCode(rcResult);
                return R.ok(payDto);
            } catch (HttpException e) { // 发送HTTP请求失败
            return R.ok(payDto);
        } catch (HttpException e) { // 发送HTTP请求失败
//                log.error("发送HTTP请求失败: {}", e.getHttpRequest());
            } catch (ServiceException e) { // 服务返回状态小于200或大于等于300,例如500
        } catch (ServiceException e) { // 服务返回状态小于200或大于等于300,例如500
//                log.error("服务返回状态异常: {}", e.getResponseBody());
            } catch (MalformedMessageException e) { // 服务返回成功,返回体类型不合法,或者解析返回体失败
        } catch (MalformedMessageException e) { // 服务返回成功,返回体类型不合法,或者解析返回体失败
//                log.error("返回体类型不合法: {}", e.getMessage());
            } catch (Exception e) {
        } catch (Exception e) {
//                log.error("预下单异常: {}", e.getMessage());
            }
            return null;
        }
        return null;
    }
    @ApiOperation(value = "扫码支付",tags = {"后台2.0-总平台"})
    @PostMapping(value = "/code/buyPlatform")
    public R buyPlatform(@RequestParam BigDecimal money,Integer id) throws AlipayApiException, IOException {
        Franchisee byId = franchiseeService.getById(id);
        String code = generateTradeNumber();
        int i = money.multiply(BigDecimal.valueOf(100)).intValue();
        String key = "ad273ceb5e1b49e68d5c565d28d1d305";/** md5密钥商户后台-商户中心-商户设置-密钥管理获取 必填!*/
        Map<String, String> map = new HashMap<String, String>();
        map.put("p0_Version", "2.5");/** 版本号 */
        map.put("p1_MerchantNo", "888122400007793");/** 商户编号 */
        map.put("p2_OrderNo", code); /**商户订单号*/
        map.put("p3_Amount", String.valueOf(money));/**订单金额*/
        map.put("p4_Cur", "1"); /**交易币种 */
        map.put("p5_ProductName", "充值"); /** 商品名称 */
        map.put("p6_ProductDesc", "加盟商充值"); /** 商品名称 */
//        map.put("p7_Mp", ""); /** 如果商户请求时传递了该参数,则返回给商户时会原值传 回。 */
        map.put("p9_NotifyUrl", "http://101.34.55.62:9100/admin/franchisee/callBack"); /** 服务器异步通知地址 */
        map.put("q1_FrpCode", "WEIXIN_NATIVE"); /** 微信扫码(主扫)【注:此为用户主扫,商户被扫】*/
        map.put("q4_IsShowPic", "1"); /** 是否展示二 维码图片 1表示输出*/
        map.put("q7_AppId", "wx1a4a7760be53a835"); /** 交易类型*/
        map.put("qa_TradeMerchantNo", "777165000859101"); /** 777开头的报备商户号   必填!*/
        map.put("qi_FqSellerPercen", "0"); /** 卖家承担收 费比例 目前仅支持传入 0 ,即用户承 担手续费!*/
        String Strmap = CreateLinkStringByGet1.createLinkStringByGet(map);
        // 签名
        String sign = "";
        sign = Md5_Sign.SignByMD5(Strmap, key);
        map.put("hmac", sign);/** 签名数据 */
        System.out.println("发送:" + JSON.toJSONString(map).toString());
        // post请求参数内容
        HttpRequester hr = new HttpRequester();
        HttpRespons HP = hr.sendPost("https://trade.joinpay.com/tradeRt/uniPay", map);
        System.out.println("接收返回参数:" + HP.getContent());
        JSONObject jsonObject = JSONObject.parseObject(HP.getContent());
        String rcResult = jsonObject.getString("rd_Pic");
        Map<String, Object> map2 = new HashMap<>();
        map2.put("rcResult", rcResult);
//        com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest prepayRequest = new com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest();
//            prepayRequest.setAppid(weChatConfig.appId);
//            prepayRequest.setMchid(weChatConfig.merchantId);
//            prepayRequest.setOutTradeNo(code);
//            prepayRequest.setDescription("购买资料");
//            prepayRequest.setNotifyUrl("http://www.zhipingwang.com.cn:9090/admin/franchisee/callBack");
//            com.wechat.pay.java.service.payments.nativepay.model.Amount amount = new com.wechat.pay.java.service.payments.nativepay.model.Amount();
//            amount.setTotal(i);
//            prepayRequest.setAmount(amount);
//            // 调用下单方法,得到应答
//            com.wechat.pay.java.service.partnerpayments.app.model.PrepayResponse response;
        try {
//                com.wechat.pay.java.service.payments.nativepay.model.PrepayResponse prepay = nativePayService.prepay(prepayRequest);
            //预支付成功,创建预支付订单
            TFranchiseeBalanceChange tFranchiseeBalanceChange = new TFranchiseeBalanceChange();
            tFranchiseeBalanceChange.setAmount(money.multiply(new BigDecimal("0.9972")).setScale(2,BigDecimal.ROUND_DOWN));
            tFranchiseeBalanceChange.setIs_pay(0);
            tFranchiseeBalanceChange.setFranchiseeName(byId.getName());
            tFranchiseeBalanceChange.setFranchiseeId(String.valueOf(byId.getId()));
            tFranchiseeBalanceChange.setType(2);
            tFranchiseeBalanceChange.setCode(code);
            tFranchiseeBalanceChange.setRemark("加盟商扫码充值");
            balanceChangeService.save(tFranchiseeBalanceChange);
            PayDto payDto = new PayDto();
            payDto.setOrderId(tFranchiseeBalanceChange.getId());
            payDto.setQrCode(rcResult);
            return R.ok(payDto);
        } catch (HttpException e) { // 发送HTTP请求失败
//                log.error("发送HTTP请求失败: {}", e.getHttpRequest());
        } catch (ServiceException e) { // 服务返回状态小于200或大于等于300,例如500
//                log.error("服务返回状态异常: {}", e.getResponseBody());
        } catch (MalformedMessageException e) { // 服务返回成功,返回体类型不合法,或者解析返回体失败
//                log.error("返回体类型不合法: {}", e.getMessage());
        } catch (Exception e) {
//                log.error("预下单异常: {}", e.getMessage());
        }
        return null;
    }
@@ -461,6 +640,23 @@
    public R payNotify(HttpServletRequest request,String r2_OrderNo) throws Exception{
        System.err.println("======回调开始");
        System.err.println("======回调开始"+r2_OrderNo);
        System.err.println("请求"+request.getParameterMap());
        Map<String, String[]> parameterMap = request.getParameterMap();
        // 2.0新增充值费率
        String r6Status = request.getParameter("r6_Status");
        if (org.springframework.util.StringUtils.hasLength(r6Status)){
            if (r6Status.equals("101")){
                return R.errorCode("支付失败");
            }
        }
        // 循环打印
        for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
            String key = entry.getKey();
            String[] values = entry.getValue();
            for (String value : values) {
                System.err.println("======回调开始"+key + ":" + value);
            }
        }
//        Transaction transaction;
//        transaction = notificationParser.parse(WeChatUtil.handleNodifyRequestParam(request), Transaction.class);
//        if (transaction.getTradeState() == Transaction.TradeStateEnum.SUCCESS) {
@@ -473,11 +669,11 @@
                franchiseeService.updateById(byId);
                one.setIs_pay(1);
                balanceChangeService.updateById(one);
                return R.ok(null,"success");
//            }
        }
        return R.ok(null,"SUCCESS");
        return R.ok(null,"error");
    }
    public static String generateTradeNumber() {
@@ -539,37 +735,54 @@
    /**
     * 加盟商信息分页列表
     *
     * @param pageNum  页码
     * @param pageSize 每页显示条数
     */
    @RequiresPermissions("franchisee_list")
    @ApiOperation(value = "加盟商信息分页查询列表", tags = {"后台-加盟商管理"})
    @GetMapping(value = "/page")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "加盟商名称", name = "name", dataType = "String"),
            @ApiImplicitParam(value = "管理员", name = "head", dataType = "String"),
            @ApiImplicitParam(value = "手机号码", name = "phone", dataType = "String"),
            @ApiImplicitParam(value = "管辖城市", name = "city", dataType = "String"),
            @ApiImplicitParam(value = "页码", name = "pageNum", dataType = "Integer", required = true),
            @ApiImplicitParam(value = "每页条数", name = "pageSize", dataType = "Integer", required = true)
    })
    public R<IPage<Franchisee>> queryPageList(String name, String head, String phone, String city,
                                              @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum,
                                              @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
    @PostMapping(value = "/page")
    public R<IPage<Franchisee>> queryPageList(@RequestBody FranchiseeListDTO dto) {
        LambdaQueryChainWrapper<Franchisee> wrapper = franchiseeService.lambdaQuery();
        wrapper = StringUtils.isNotBlank(name) ? wrapper.like(Franchisee::getName, name) : wrapper;
        wrapper = StringUtils.isNotBlank(head) ? wrapper.like(Franchisee::getHead, head) : wrapper;
        wrapper = StringUtils.isNotBlank(phone) ? wrapper.like(Franchisee::getHeadPhone, phone) : wrapper;
        wrapper = StringUtils.isNotBlank(city) ? wrapper.like(Franchisee::getCity, city) : wrapper;
        Page<Franchisee> page = wrapper.eq(Franchisee::getIsDelete, 0)
                .orderByDesc(Franchisee::getCreateTime).page(Page.of(pageNum, pageSize));
        for (Franchisee record : page.getRecords()) {
                if (record.getSiteIds()!=null){
                    String[] split = record.getSiteIds().split(",");
                    List<Site> list = siteService.lambdaQuery().in(Site::getId, split).list();
                        //用 , 拼接
                    record.setSiteStr(list.stream().map(Site::getSiteName).collect(Collectors.joining(",")));
        wrapper = StringUtils.isNotBlank(dto.getName()) ? wrapper.like(Franchisee::getName, dto.getName()) : wrapper;
        wrapper = StringUtils.isNotBlank(dto.getHead()) ? wrapper.like(Franchisee::getHead, dto.getHead()) : wrapper;
        wrapper = StringUtils.isNotBlank(dto.getPhone()) ? wrapper.like(Franchisee::getHeadPhone, dto.getPhone()) : wrapper;
        if (org.springframework.util.StringUtils.hasLength(dto.getCity())){
            String[] cityCodes = dto.getCity().split(",");
            wrapper.and(e->{
                List<String> list = Arrays.asList(cityCodes);
                e.like(Franchisee::getCityCode,list.get(0));
                for (int i = 1; i < list.size(); i++) {
                    e.or().like(Franchisee::getCityCode,list.get(i));
                }
            });
        }
//        if (StringUtils.isNotBlank(dto.getCity())) {
//            String[] cityCodes = Arrays.stream(dto.getCity().split(","))
//                    .map(String::trim)
//                    .filter(StringUtils::isNotBlank)
//                    .distinct()
//                    .toArray(String[]::new);
//
//            if (cityCodes.length > 0) {
//                wrapper.and(andWrapper -> {
//                    Arrays.stream(cityCodes).forEach(code ->
//                            andWrapper.or()
//                                    .apply("CONCAT(',', city_code, ',') LIKE CONCAT('%,', {0}, ',%')", code)
//                    );
//                });
//            }
//        }
        wrapper.eq(Franchisee::getIsDelete, 0).orderByDesc(Franchisee::getCreateTime);
        Page<Franchisee> page = wrapper.page(Page.of(dto.getPageNum(), dto.getPageSize()));
        for (Franchisee record : page.getRecords()) {
            if (record.getSiteIds()!=null){
                String[] split = record.getSiteIds().split(",");
                List<Site> list = siteService.lambdaQuery().in(Site::getId, split).list();
                //用 , 拼接
                record.setSiteStr(list.stream().map(Site::getSiteName).collect(Collectors.joining(",")));
            }
        }
@@ -689,6 +902,11 @@
        }
        String city = str.substring(Constants.ZERO, str.length() - 1);
        franchisee.setCity(city);
        List<SysUser> list1 = sysUserService.lambdaQuery().eq(SysUser::getAccount, franchisee.getAdminAccount())
                .eq(SysUser::getIsEnable, 1).eq(SysUser::getIsDelete, 0).list();
        if(!list1.isEmpty()){
            return R.passwordError("该管理员账号已存在!");
        }
        boolean save = franchiseeService.save(franchisee);
        // 生成sysUser账号
        SysUser sysUser = new SysUser();