From 1442f149019ee0590389abd7a88a79c4d9b59034 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期二, 27 五月 2025 18:23:34 +0800
Subject: [PATCH] bug修改

---
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/FranchiseeController.java |  831 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 808 insertions(+), 23 deletions(-)

diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/FranchiseeController.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/FranchiseeController.java
index c872de5..0470a9d 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/FranchiseeController.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/FranchiseeController.java
@@ -1,28 +1,74 @@
 package com.ruoyi.admin.controller;
 
 
+import cn.hutool.http.HttpException;
+import com.alibaba.excel.EasyExcelFactory;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.builder.ExcelWriterBuilder;
+import com.alibaba.excel.write.metadata.WriteSheet;
+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;
+import com.ruoyi.admin.config.WeChatConfig;
 import com.ruoyi.admin.entity.*;
 import com.ruoyi.admin.service.*;
+import com.ruoyi.admin.utils.MD5AndKL;
+import com.ruoyi.admin.utils.WeChatUtil;
+import com.ruoyi.admin.utils.util.CreateLinkStringByGet1;
+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.*;
 import com.ruoyi.common.core.constant.Constants;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.exception.GlobalException;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.common.security.service.TokenService;
+import com.wechat.pay.contrib.apache.httpclient.auth.PrivateKeySigner;
+import com.wechat.pay.contrib.apache.httpclient.util.PemUtil;
+import com.wechat.pay.java.core.exception.MalformedMessageException;
+import com.wechat.pay.java.core.exception.ServiceException;
+import com.wechat.pay.java.core.notification.NotificationParser;
+import com.wechat.pay.java.service.partnerpayments.app.model.Transaction;
+import com.wechat.pay.java.service.payments.jsapi.model.Amount;
+import com.wechat.pay.java.service.payments.jsapi.JsapiService;
+import com.wechat.pay.java.service.payments.jsapi.model.Payer;
+import com. wechat. pay. java. service. payments. jsapi. model. PrepayRequest;
+import com.wechat.pay.java.service.payments.jsapi.model.PrepayResponse;
+import com.wechat.pay.java.service.payments.nativepay.NativePayService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import lombok.Getter;
+import org.apache.commons.codec.CharEncoding;
+import org.apache.poi.util.IOUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
-import java.util.Arrays;
-import java.util.List;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.security.PrivateKey;
+import java.security.SecureRandom;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
 
 /**
  * <p>
@@ -47,34 +93,700 @@
     private RegionService regionService;
     @Resource
     private MasterWorkerService masterWorkerService;
+    @Resource
+    private SiteService siteService;
 
-    /**
-     * 加盟商信息分页列表
-     *
-     * @param pageNum  页码
-     * @param pageSize 每页显示条数
-     */
-    @RequiresPermissions("franchisee_list")
-    @ApiOperation(value = "加盟商信息分页查询列表", tags = {"后台-加盟商管理"})
-    @GetMapping(value = "/page")
+    @Resource
+    private JsapiService jsapiService;
+
+    @Resource
+    private WeChatConfig weChatConfig;
+
+    @Resource
+    private PrivateKeySigner privateKeySigner;
+
+    @Resource
+    private TFranchiseeBalanceChangeService balanceChangeService;
+
+    private static final String SYMBOLS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+    private static final Random RANDOM = new SecureRandom();
+
+
+    @ApiOperation(value = "加盟商列表余额", tags = {"后台2.0-加盟商列表余额"})
+    @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<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) {
+    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);
+        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()
+                .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()
+                .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());
+        }
+
+        RencentBalance balance3 = new RencentBalance();
+        balance3.setBalance1(balance);
+        balance3.setBalance2(balance1);
+        balance3.setBalance3(balance2);
+
+        return R.ok(balance3);
+    }
+
+    @ApiOperation(value = "详情",tags = {"师傅段2.0-统一充值扣款列表"})
+    @PostMapping(value = "/change/detail")
+    public R<TFranchiseeBalanceChange> detail1(@RequestParam Integer id) throws AlipayApiException {
+        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(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()));
+
+
+        for (TFranchiseeBalanceChange record : page.getRecords()) {
+            Franchisee franchisee = franchiseeService.getById(record.getFranchiseeId());
+            if (franchisee.getSiteIds()!=null) {
+                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);
+    }
+
+    @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(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");
+                response.setHeader("Access-Control-Expose-Headers", "Content-disposition");
+                response.setHeader("Content-Disposition", "attachment;filename=" +
+                        URLEncoder.encode(Constants.EXCEL_ORDER_FILE_NAME, CharEncoding.UTF_8) + ".xlsx");
+            } catch (UnsupportedEncodingException e) {
+                return R.fail("excel导出失败!");
+            }
+            try {
+                // excel模板封装
+                ExcelWriterBuilder excelWriterBuilder = EasyExcelFactory.write(response.getOutputStream());
+                InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("template/" + Constants.EXCEL_ORDER_FILE_NAME1 + ".xlsx");
+                // 自动释放资源
+                try (ExcelWriter excelWriter = excelWriterBuilder.withTemplate(stream).build()) {
+                    WriteSheet writeSheet = EasyExcelFactory.writerSheet().build();
+                    excelWriter.fill(page, writeSheet);
+                    excelWriter.finish();
+                } catch (Exception e) {
+                    return R.fail("excel导出失败!");
+                }
+            } catch (IOException e) {
+                return R.fail("excel导出失败!");
+            }
+            return R.ok();
+        }else {
+            List<TFranchiseeBalanceChange> page = balanceChangeService.lambdaQuery().eq(moneyRecentQuery.getType() != null, TFranchiseeBalanceChange::getType, moneyRecentQuery.getType())
+                    .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");
+                response.setHeader("Access-Control-Expose-Headers", "Content-disposition");
+                response.setHeader("Content-Disposition", "attachment;filename=" +
+                        URLEncoder.encode(Constants.EXCEL_ORDER_FILE_NAME, CharEncoding.UTF_8) + ".xlsx");
+            } catch (UnsupportedEncodingException e) {
+                return R.fail("excel导出失败!");
+            }
+            try {
+                // excel模板封装
+                ExcelWriterBuilder excelWriterBuilder = EasyExcelFactory.write(response.getOutputStream());
+                InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("template/" + Constants.EXCEL_ORDER_FILE_NAME2 + ".xlsx");
+                // 自动释放资源
+                try (ExcelWriter excelWriter = excelWriterBuilder.withTemplate(stream).build()) {
+                    WriteSheet writeSheet = EasyExcelFactory.writerSheet().build();
+                    excelWriter.fill(page, writeSheet);
+                    excelWriter.finish();
+                } catch (Exception e) {
+                    return R.fail("excel导出失败!");
+                }
+            } catch (IOException e) {
+                return R.fail("excel导出失败!");
+            }
+            return R.ok();
+        }
+    }
+
+
+    @ApiOperation(value = "扣余额", tags = {"后台2.0-加盟商列表余额"})
+    @PostMapping(value = "/recent/money/consume")
+    public R<Page<TFranchiseeBalanceChange>> consume(@RequestBody TFranchiseeBalanceChange franchiseeBalanceChange) {
+        Franchisee byId = franchiseeService.getById(franchiseeBalanceChange.getFranchiseeId());
+        franchiseeBalanceChange.setFranchiseeName(byId.getName());
+        Region byId1 = regionService.getById(franchiseeBalanceChange.getRegionId());
+        franchiseeBalanceChange.setRegionName(byId1.getName());
+
+        Site byId2 = siteService.getById(franchiseeBalanceChange.getSiteId());
+        franchiseeBalanceChange.setSiteName(byId2.getSiteName());
+        franchiseeBalanceChange.setIs_pay(1);
+        balanceChangeService.save(franchiseeBalanceChange);
+        byId.setBalance(byId.getBalance().subtract(franchiseeBalanceChange.getAmount()));
+        franchiseeService.updateById(byId);
+        return R.ok();
+    }
+
+    @Getter
+    private PrivateKey privateKey;
+
+    @ApiOperation(value = "js支付", tags = {"2.0-支付"})
+    @GetMapping(value = "/js/wxPay")
+    public R jsPay(@RequestParam String openId,@RequestParam BigDecimal money,@RequestParam Integer userId) throws IOException {
+        SysUser byId1 = sysUserService.getById(userId);
+        this.privateKey = PemUtil.loadPrivateKey(getPrivateKeyStream());
+        this.privateKeySigner = new PrivateKeySigner(weChatConfig.merchantSerialNumber, privateKey);
+
+        String code = generateTradeNumber();
+        int i = money.multiply(BigDecimal.valueOf(100)).intValue();
+        Franchisee byId = franchiseeService.getById(byId1.getFranchiseeId());
+
+
+        //
+        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("q5_OpenId", openId);
+        map.put("p5_ProductName", "加盟商充值"); /** 商品名称 */
+        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开头的报备商户号   必填!*/
+
+        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://www.joinpay.com/trade/uniPayApi.action", map);
+        System.out.println("接收返回参数:" + HP.getContent());
+        JSONObject jsonObject = JSONObject.parseObject(HP.getContent());
+        JSONObject rcResult = JSONObject.parseObject(jsonObject.getString("rc_Result"));
+        Map<String, Object> map2 = new HashMap<>();
+        map2.put("rcResult", rcResult);
+//        map2.put("timestamp", rcResult.get("timeStamp"));
+//        map2.put("prepayid", rcResult.get("package"));
+//        map2.put("sign", rcResult.get("paySign"));
+
+        //
+//        PrepayRequest prepayRequest = new PrepayRequest();
+//        prepayRequest.setAppid(weChatConfig.appId);
+//        prepayRequest.setMchid(weChatConfig.merchantId);
+//        prepayRequest.setDescription("加盟商充值");
+//        prepayRequest.setOutTradeNo(code);
+//        prepayRequest.setNotifyUrl("http://www.zhipingwang.com.cn:9090/admin/franchisee/callBack");
+//        Amount amount = new Amount();
+//        amount.setTotal(i);
+//        prepayRequest.setAmount(amount);
+//        Payer payer = new Payer();
+//        payer.setOpenid(openId);
+//        prepayRequest.setPayer(payer);
+//        PrepayResponse prepay = jsapiService.prepay(prepayRequest);
+//        String timeStamp = String.valueOf(System.currentTimeMillis() / 1000);
+//        String packageStr = "prepay_id=" + prepay.getPrepayId();
+//
+//        String prepay_id = prepay.getPrepayId();
+//        //重新进行签名后返回给前端
+
+////        String s1 = this.weixinSignature(map2);
+//        String signStr = Stream.of(weChatConfig.getAppId(), timeStamp, code, packageStr).collect(Collectors.joining("\n", "", "\n"));
+//        String packageSign = privateKeySigner.sign(signStr.getBytes(StandardCharsets.UTF_8)).getSign();
+//
+//        System.err.println(map2);
+
+
+        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.setRemark("微信支付");
+        tFranchiseeBalanceChange.setCode(code);
+        balanceChangeService.save(tFranchiseeBalanceChange);
+
+        return R.ok(map2);
+
+    }
+
+    public InputStream getPrivateKeyStream() {
+        // 需要证书释放
+        byte[] certData;
+//        InputStream certStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(this.privateKeyPath);
+        InputStream certStream = null;
+        try {
+            certStream = new FileInputStream(weChatConfig.privateKeyPath);
+            certData = IOUtils.toByteArray(certStream);
+        } catch (IOException e) {
+            e.printStackTrace();
+            throw new RuntimeException("私钥文件未找到");
+        }finally {
+            if(null != certStream){
+                try {
+                    certStream.close();
+                } catch (IOException e) {
+                }
+            }
+        }
+        return new ByteArrayInputStream(certData);
+    }
+    @Resource
+    private TokenService tokenService;
+    @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, 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();
+        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;
+
+    }
+    @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;
+
+    }
+
+    @ApiOperation(value = "轮询获取支付状态",tags = {"后台2.0-加盟商列表余额"})
+    @PostMapping(value = "/code/check")
+    public R buy(@RequestParam Integer orderId) throws AlipayApiException {
+        TFranchiseeBalanceChange byId = balanceChangeService.getById(orderId);
+        if (byId.getIs_pay()==1){
+            return R.ok(true);
+        }else {
+            return R.ok(false);
+        }
+
+    }
+    @Resource
+    private NotificationParser notificationParser;
+
+    @ApiOperation(value = "支付回调",tags = {"微信支付回调"})
+    @RequestMapping (value = "/callBack")
+    @Transactional
+    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) {
+            //将记录变为已支付
+            TFranchiseeBalanceChange one = balanceChangeService.lambdaQuery().eq(TFranchiseeBalanceChange::getCode,r2_OrderNo).one();
+            if (one.getIs_pay()==0) {
+                //将加盟商的余额增加
+                Franchisee byId = franchiseeService.getById(one.getFranchiseeId());
+                byId.setBalance(byId.getBalance().add(one.getAmount()));
+                franchiseeService.updateById(byId);
+                one.setIs_pay(1);
+                balanceChangeService.updateById(one);
+                return R.ok(null,"success");
+//            }
+
+        }
+        return R.ok(null,"error");
+    }
+
+    public static String generateTradeNumber() {
+        // 定义订单号前缀
+        // 当前年月日
+        LocalDateTime now = LocalDateTime.now();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
+        String currentTimeStr =now.format(formatter);
+        // 获取当前时间戳
+        long timestamp = System.currentTimeMillis();
+        // 构造订单号
+        return currentTimeStr + timestamp;
+    }
+
+
+
+    private String weixinSignature(Map<String, Object> map){
+        try {
+            Set<Map.Entry<String, Object>> entries = map.entrySet();
+            List<Map.Entry<String, Object>> infoIds = new ArrayList<Map.Entry<String, Object>>(entries);
+            // 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)
+            Collections.sort(infoIds, new Comparator<Map.Entry<String, Object>>() {
+                public int compare(Map.Entry<String, Object> o1, Map.Entry<String, Object> o2) {
+                    return (o1.getKey()).toString().compareTo(o2.getKey());
+                }
+            });
+            // 构造签名键值对的格式
+            StringBuilder sb = new StringBuilder();
+            for (Map.Entry<String, Object> item : infoIds) {
+                if (item.getKey() != null || item.getKey() != "") {
+                    String key = item.getKey();
+                    Object val = item.getValue();
+                    if (!(val == "" || val == null)) {
+                        sb.append(key + "=" + val + "&");
+                    }
+                }
+            }
+            sb.append("key=" + "TA2npSNWmS0GcB0tFFRWA94rm1M0iSFs");
+            String sign = MD5AndKL.MD5Encode(sb.toString(), "UTF-8").toUpperCase(); //注:MD5签名方式
+            return sign;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+
+
+
+
+    public static String generateNonceStr() {
+        char[] nonceChars = new char[32];
+        for (int index = 0; index < nonceChars.length; ++index) {
+            nonceChars[index] = SYMBOLS.charAt(RANDOM.nextInt(SYMBOLS.length()));
+        }
+        return new String(nonceChars);
+    }
+
+    /**
+     * 加盟商信息分页列表
+     *
+     */
+    @RequiresPermissions("franchisee_list")
+    @ApiOperation(value = "加盟商信息分页查询列表", tags = {"后台-加盟商管理"})
+    @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;
-        return R.ok(wrapper.eq(Franchisee::getIsDelete, 0)
-                .orderByDesc(Franchisee::getCreateTime).page(Page.of(pageNum, pageSize)));
+        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(",")));
+            }
+
+
+        }
+        return R.ok(page);
     }
 
     /**
@@ -89,8 +801,13 @@
             @ApiImplicitParam(value = "加盟商信息id", name = "id", dataType = "Integer", required = true)
     })
     public R<Franchisee> detail(@RequestParam("id") Integer id) {
-        return R.ok(franchiseeService.lambdaQuery()
-                .eq(Franchisee::getId, id).eq(Franchisee::getIsDelete, 0).one());
+        Franchisee one = franchiseeService.lambdaQuery()
+                .eq(Franchisee::getId, id).eq(Franchisee::getIsDelete, 0).one();
+        List<Site> list = siteService.lambdaQuery().in(Site::getId, one.getSiteIds().split(",")).list();
+        //用 , 拼接
+        one.setSiteStr(list.stream().map(Site::getSiteName).collect(Collectors.joining(",")));
+
+        return R.ok(one);
     }
 
     /**
@@ -105,6 +822,53 @@
         Franchisee franchisee = franchiseeService.lambdaQuery()
                 .eq(Franchisee::getId, id).eq(Franchisee::getIsDelete, 0).one();
         return R.ok(Arrays.stream(franchisee.getCityCode().split(",")).collect(Collectors.toList()));
+    }
+
+
+    @ApiOperation(value = "主页信息", tags = {"2.0师傅端"})
+    @GetMapping(value = "/info")
+    public R<InfoDto> info() {
+        Long userid = tokenService.getLoginUser().getUserid();
+        SysUser byId = sysUserService.getById(userid);
+        Franchisee franchisee = franchiseeService.lambdaQuery()
+                .eq(Franchisee::getId, byId.getFranchiseeId()).eq(Franchisee::getIsDelete, 0).one();
+        String siteIds = franchisee.getSiteIds();
+        String cityCode = franchisee.getCityCode();
+        List<Region> list = regionService.lambdaQuery().in(Region::getCode, cityCode.split(",")).list();
+        List<Site> list1 = siteService.lambdaQuery().in(Site::getId, siteIds.split(",")).list();
+        InfoDto infoDto = new InfoDto();
+        infoDto.setList(list);
+        infoDto.setList1(list1);
+        infoDto.setFranchisee(franchisee);
+        return R.ok(infoDto);
+    }
+
+    @ApiOperation(value = "主页信息", tags = {"2.0师傅端"})
+    @GetMapping(value = "/info1")
+    public R<InfoDto> info1(Integer id) {
+
+        Franchisee franchisee = franchiseeService.lambdaQuery()
+                .eq(Franchisee::getId, id).eq(Franchisee::getIsDelete, 0).one();
+        String siteIds = franchisee.getSiteIds();
+        String cityCode = franchisee.getCityCode();
+        List<Region> list = regionService.lambdaQuery().in(Region::getCode, cityCode.split(",")).list();
+        List<Site> list1 = siteService.lambdaQuery().in(Site::getId, siteIds.split(",")).list();
+        InfoDto infoDto = new InfoDto();
+        infoDto.setList(list);
+        infoDto.setList1(list1);
+        infoDto.setFranchisee(franchisee);
+        return R.ok(infoDto);
+    }
+
+    @ApiOperation(value = "当前余额", tags = {"后台2.0-加盟商列表余额"})
+    @GetMapping(value = "/rencentBalance")
+    public R<Franchisee> rencentBalance() {
+        Long userid = tokenService.getLoginUser().getUserid();
+        SysUser byId = sysUserService.getById(userid);
+        Franchisee franchisee = franchiseeService.lambdaQuery()
+                .eq(Franchisee::getId, byId.getFranchiseeId()).eq(Franchisee::getIsDelete, 0).one();
+
+        return R.ok(franchisee);
     }
 
     @GetMapping(value = "/getWorkPic")
@@ -138,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();
@@ -166,6 +935,10 @@
     @ApiOperation(value = "修改加盟商信息", tags = {"后台-加盟商管理"})
     @PostMapping(value = "/update")
     public R<String> update(@RequestBody @Validated Franchisee franchisee) {
+        boolean b = false;
+        if (franchisee.getAdminPassword().equals("")){
+            b = true;
+        }
         String md5Password = checkFranchisee(franchisee);
         SysUser sysUser = sysUserService.lambdaQuery()
                 .eq(SysUser::getFranchiseeId, franchisee.getId())
@@ -182,10 +955,22 @@
             // 生成sysUser账号
             sysUser.setNickName(franchisee.getName());
             sysUser.setAccount(franchisee.getAdminAccount());
-            sysUser.setPassword(md5Password);
+            if (!b) {
+                sysUser.setPassword(md5Password);
+            }
             sysUser.setIsEnable(franchisee.getIsEnable());
+
+
+
             sysUserService.updateById(sysUser);
         }
+        List<String> cityStr = new ArrayList<>();
+        String[] split = franchisee.getCityCode().split(",");
+        for (String s : split) {
+            Region one = regionService.lambdaQuery().eq(Region::getCode, s).one();
+            cityStr.add(one.getName());
+        }
+        franchisee.setCity(String.join(",", cityStr));
 
         return franchiseeService.updateById(franchisee) ? R.ok() : R.fail();
     }

--
Gitblit v1.7.1