From 0d8b60c9ed72d996280688a82ffa8eac3afbbff9 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期五, 02 六月 2023 15:28:24 +0800
Subject: [PATCH] 新增加充值和提现功能

---
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RechargeRecordServiceImpl.java   |   15 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SettlementRecordMapper.java               |   11 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RechargeRecordMapper.xml          |   20 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/RechargeRecord.java                     |   80 +
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RechargeRecordMapper.java                 |   11 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/Withdraw.java             |   96 +
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAgentController.java      |  611 +++++++++-
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SettlementRecordMapper.xml        |   14 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISettlementRecordService.java         |   11 
 management/guns-admin/src/main/webapp/WEB-INF/view/system/tAgent/enterprisePage.html                                |  444 ++++++++
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IRechargeRecordService.java           |   11 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/QueryBalance.java         |   16 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/QueryOrder.java           |   31 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/ImageUpload.java          |   44 
 management/guns-admin/src/main/resources/application.yml                                                            |   21 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/Deposit.java              |  126 ++
 management/guns-admin/src/main/webapp/WEB-INF/view/system/tAgent/tAgent_add.html                                    |  173 ++
 management/guns-admin/src/main/webapp/static/js/qrcode.js                                                           | 1237 +++++++++++++++++++++++
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/util/RSASignature.java          |    2 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SettlementRecord.java                   |   54 +
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/InterfaceResponse.java    |    2 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/InterfaceRequest.java     |    6 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java |   15 
 management/guns-admin/src/main/webapp/static/modular/system/tAgent/tAgent_info.js                                   |    3 
 management/guns-admin/src/main/webapp/static/js/jquery.qrcode.js                                                    |   89 +
 25 files changed, 3,009 insertions(+), 134 deletions(-)

diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAgentController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAgentController.java
index c2d7aba..a219bfc 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAgentController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TAgentController.java
@@ -1,28 +1,33 @@
 package com.stylefeng.guns.modular.system.controller.general;
 
+import cn.hutool.core.codec.Base64;
+import cn.hutool.core.util.ZipUtil;
 import cn.hutool.crypto.SecureUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.stylefeng.guns.core.base.controller.BaseController;
 import com.stylefeng.guns.core.base.tips.SuccessTip;
 import com.stylefeng.guns.core.common.constant.state.ManagerStatus;
 import com.stylefeng.guns.core.exception.GunsException;
 import com.stylefeng.guns.core.exception.ServiceExceptionEnum;
 import com.stylefeng.guns.core.shiro.ShiroKit;
+import com.stylefeng.guns.core.shiro.ShiroUser;
 import com.stylefeng.guns.core.util.DateUtil;
+import com.stylefeng.guns.core.util.ToolUtil;
 import com.stylefeng.guns.modular.system.controller.resp.TAgentResp;
 import com.stylefeng.guns.modular.system.controller.util.ExcelUtil;
+import com.stylefeng.guns.modular.system.controller.util.UUIDUtil;
 import com.stylefeng.guns.modular.system.enums.OrderStateEnum;
 import com.stylefeng.guns.modular.system.enums.PayStatusEnum;
 import com.stylefeng.guns.modular.system.enums.UserTypeEnum;
 import com.stylefeng.guns.modular.system.model.*;
 import com.stylefeng.guns.modular.system.service.*;
-import com.stylefeng.guns.modular.system.util.MallBook.model.BindAccount;
-import com.stylefeng.guns.modular.system.util.MallBook.model.InterfaceResponse;
-import com.stylefeng.guns.modular.system.util.MallBook.model.Register;
+import com.stylefeng.guns.modular.system.util.MallBook.model.*;
 import com.stylefeng.guns.modular.system.util.MallBook.util.TrhRequest;
 import com.stylefeng.guns.modular.system.util.RedisUtil;
+import com.stylefeng.guns.modular.system.util.ResultUtil;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
@@ -39,10 +44,12 @@
 import org.springframework.ui.Model;
 import org.springframework.beans.factory.annotation.Autowired;
 import com.stylefeng.guns.core.log.LogObjectHolder;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
-import java.io.OutputStream;
+import java.io.*;
 import java.math.BigDecimal;
+import java.net.InetAddress;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -74,6 +81,12 @@
     private IUserService userService;
     @Autowired
     private RedisUtil redisUtil;
+
+    @Autowired
+    private ISettlementRecordService settlementRecordService;
+
+    @Autowired
+    private IRechargeRecordService rechargeRecordService;
 
     @Value("${callbackPath}")
     private String callbackPath;
@@ -221,7 +234,12 @@
         user.setSex(1);
         userService.insert(user);
 
-
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                registeredMerchant(tAgent);
+            }
+        }).start();
 
         return SUCCESS_TIP;
     }
@@ -229,97 +247,162 @@
 
 
     public void registeredMerchant(TAgent tAgent){
-        Register registerVO = new Register();
-        registerVO.setMerUserId("agent_" + tAgent.getId());
-        registerVO.setPhone(tAgent.getPrincipalPhone());
-        registerVO.setUserType(tAgent.getUserType().toString());
-        registerVO.setUserName(tAgent.getMerchantName());
-        registerVO.setCertId(tAgent.getMerchantIDCode());
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
-        registerVO.setCertIdExpires(sdf.format(tAgent.getCertIdExpires()));
-        registerVO.setBusinessScope(tAgent.getBusinessScope());
-        registerVO.setSocialCreditCode(tAgent.getSocialCreditCode());
-        registerVO.setSocialCreditCodeExpires(sdf.format(tAgent.getSocialCreditCodeExpires()));
-        registerVO.setLegalPhone(tAgent.getLegalPhone());
-        registerVO.setLegalPerson(tAgent.getLegalPerson());
-        registerVO.setAddress(tAgent.getAddress());
-        /**
-         * 省份编码(子商户类型非小微必填) 字段长度最长:4位
-         */
-        registerVO.setProvCode("0035");
-        /**
-         * 地区编码(子商户类型非小微必填) 字段长度最长:4位
-         */
-        registerVO.setAreaCode("3501");
-        registerVO.setFileNo(tAgent.getFileNo());
-        registerVO.setNotifyUrl(callbackPath + "/base/driver/microenterpriseCallback");
-        registerVO.setParameter1(tAgent.getId().toString());
-
-        TrhRequest<Register> request = new TrhRequest();
-        InterfaceResponse response = request.execute(registerVO, Register.SERVICE_CODE);
-        if("0000".equals(response.getCode())){
-            JSONObject jsonObject = JSON.parseObject(response.getResult());
-            String status = jsonObject.getString("status");
-            if("2".equals(status)){
-                tAgent.setMerchantStatus(2);
-                tAgentService.updateById(tAgent);
-                System.err.println("注册代理商子商户失败");
-            }
-            if("0".equals(status)){
-                tAgent.setMerchantStatus(0);
-                tAgentService.updateById(tAgent);
-                System.err.println("注册代理商子商户处理中");
-            }
-            if("1".equals(status)){
-                String userId = jsonObject.getString("userId");
-                tAgent.setMerchantNumber(userId);
-                tAgent.setMerchantStatus(1);
-                tAgentService.updateById(tAgent);
-
-                //开始绑定结算账户
-                BindAccount bindAccount = new BindAccount();
-                bindAccount.setUserId(tAgent.getMerchantNumber());
-                bindAccount.setCertId(tAgent.getMerchantIDCode());
-                bindAccount.setCardName(tAgent.getCardName());
-                bindAccount.setCardNo(tAgent.getCardNo());
-                bindAccount.setBankAcctType(tAgent.getBankAcctType().toString());
-                bindAccount.setPhone(tAgent.getPhone());
-                bindAccount.setBankCode(tAgent.getBankCode());
-                /**
-                 * 省份编码
-                 */
-                bindAccount.setProvCode("0035");
-                /**
-                 * 地区编码
-                 */
-                bindAccount.setAreaCode("3501");
-                TrhRequest<BindAccount> request1 = new TrhRequest();
-                InterfaceResponse execute = request1.execute(bindAccount, BindAccount.SERVICE_CODE);
-                if("0000".equals(execute.getCode())){
-                    JSONObject jsonObject1 = JSON.parseObject(execute.getResult());
-                    String status1 = jsonObject1.getString("status");
-                    if("2".equals(status1)){
-                        tAgent.setBankStatus(2);
-                        tAgentService.updateById(tAgent);
-                        System.err.println("绑定结算账户失败" );
-                    }
-                    if("1".equals(status1)){
-                        tAgent.setBankStatus(1);
-                        tAgentService.updateById(tAgent);
-                        System.err.println("绑定结算账户成功");
-                    }
-                    if("0".equals(status1)){
-                        tAgent.setBankStatus(0);
-                        tAgentService.updateById(tAgent);
-                        System.err.println("绑定结算账户处理中");
-                    }
-                }else{
-                    System.err.println("绑定结算账户失败:" + execute.getMsg());
+        if(tAgent.getUserType() == 0){
+            Register registerVO = new Register();
+            registerVO.setMerUserId("agent_" + tAgent.getId());
+            registerVO.setPhone(tAgent.getPrincipalPhone());
+            registerVO.setUserType("0");
+            registerVO.setUserName(tAgent.getMerchantName());
+            registerVO.setCertId(tAgent.getMerchantIDCode());
+            registerVO.setNotifyUrl(callbackPath + "/base/driver/microenterpriseCallback");
+            TrhRequest<Register> request = new TrhRequest();
+            InterfaceResponse execute = request.execute(registerVO, Register.SERVICE_CODE);
+            if("0000".equals(execute.getCode())){
+                JSONObject jsonObject = JSON.parseObject(execute.getResult());
+                String status = jsonObject.getString("status");
+                if("2".equals(status)){
+                    tAgent.setMerchantStatus(2);
+                    tAgentService.updateById(tAgent);
+                    System.err.println("注册代理商子商户失败");
                 }
+                if("0".equals(status)){
+                    tAgent.setMerchantStatus(0);
+                    tAgentService.updateById(tAgent);
+                    System.err.println("注册代理商子商户处理中");
+                }
+                if("1".equals(status)){
+                    String userId = jsonObject.getString("userId");
+                    tAgent.setMerchantNumber(userId);
+                    tAgent.setMerchantStatus(1);
+                    tAgentService.updateById(tAgent);
 
+                    BindAccount bindAccount = new BindAccount();
+                    bindAccount.setUserId(tAgent.getMerchantNumber());
+                    bindAccount.setCertId(tAgent.getMerchantIDCode());
+                    bindAccount.setCardName(tAgent.getCardName());
+                    bindAccount.setCardNo(tAgent.getCardNo());
+                    bindAccount.setBankAcctType(tAgent.getBankAcctType().toString());
+                    bindAccount.setPhone(tAgent.getPhone());
+                    TrhRequest<BindAccount> request1 = new TrhRequest();
+                    InterfaceResponse execute1 = request1.execute(bindAccount, BindAccount.SERVICE_CODE);
+                    if("0000".equals(execute1.getCode())){
+                        JSONObject jsonObject1 = JSON.parseObject(execute1.getResult());
+                        String status1 = jsonObject1.getString("status");
+                        if("2".equals(status1)){
+                            tAgent.setBankStatus(2);
+                            tAgentService.updateById(tAgent);
+                            System.err.println("绑定结算账户失败" );
+                        }
+                        if("1".equals(status1)){
+                            tAgent.setBankStatus(1);
+                            tAgentService.updateById(tAgent);
+                            System.err.println("绑定结算账户成功");
+                        }
+                        if("0".equals(status1)){
+                            tAgent.setBankStatus(0);
+                            tAgentService.updateById(tAgent);
+                            System.err.println("绑定结算账户处理中");
+                        }
+                    }else{
+                        System.err.println("绑定结算账户失败:" + execute.getMsg());
+                    }
+                }
+            }else{
+                System.err.println("注册代理商子商户异常:" + execute.getMsg());
             }
         }else{
-            System.err.println("注册代理商子商户异常:" + response.getMsg());
+            Register registerVO = new Register();
+            registerVO.setMerUserId("agent_" + tAgent.getId());
+            registerVO.setPhone(tAgent.getPrincipalPhone());
+            registerVO.setUserType(tAgent.getUserType().toString());
+            registerVO.setUserName(tAgent.getMerchantName());
+            registerVO.setCertId(tAgent.getMerchantIDCode());
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+            registerVO.setCertIdExpires(sdf.format(tAgent.getCertIdExpires()));
+            registerVO.setBusinessScope(tAgent.getBusinessScope());
+            registerVO.setSocialCreditCode(tAgent.getSocialCreditCode());
+            registerVO.setSocialCreditCodeExpires(sdf.format(tAgent.getSocialCreditCodeExpires()));
+            registerVO.setLegalPhone(tAgent.getLegalPhone());
+            registerVO.setLegalPerson(tAgent.getLegalPerson());
+            registerVO.setAddress(tAgent.getAddress());
+            /**
+             * 省份编码(子商户类型非小微必填) 字段长度最长:4位
+             */
+            registerVO.setProvCode("0035");
+            /**
+             * 地区编码(子商户类型非小微必填) 字段长度最长:4位
+             */
+            registerVO.setAreaCode("3501");
+            registerVO.setFileNo(tAgent.getFileNo());
+            registerVO.setNotifyUrl(callbackPath + "/base/driver/microenterpriseCallback");
+            registerVO.setParameter1(tAgent.getId().toString());
+
+            TrhRequest<Register> request = new TrhRequest();
+            InterfaceResponse response = request.execute(registerVO, Register.SERVICE_CODE);
+            if("0000".equals(response.getCode())){
+                JSONObject jsonObject = JSON.parseObject(response.getResult());
+                String status = jsonObject.getString("status");
+                if("2".equals(status)){
+                    tAgent.setMerchantStatus(2);
+                    tAgentService.updateById(tAgent);
+                    System.err.println("注册代理商子商户失败");
+                }
+                if("0".equals(status)){
+                    tAgent.setMerchantStatus(0);
+                    tAgentService.updateById(tAgent);
+                    System.err.println("注册代理商子商户处理中");
+                }
+                if("1".equals(status)){
+                    String userId = jsonObject.getString("userId");
+                    tAgent.setMerchantNumber(userId);
+                    tAgent.setMerchantStatus(1);
+                    tAgentService.updateById(tAgent);
+
+                    //开始绑定结算账户
+                    BindAccount bindAccount = new BindAccount();
+                    bindAccount.setUserId(tAgent.getMerchantNumber());
+                    bindAccount.setCertId(tAgent.getMerchantIDCode());
+                    bindAccount.setCardName(tAgent.getCardName());
+                    bindAccount.setCardNo(tAgent.getCardNo());
+                    bindAccount.setBankAcctType(tAgent.getBankAcctType().toString());
+                    bindAccount.setPhone(tAgent.getPhone());
+                    bindAccount.setBankCode(tAgent.getBankCode());
+                    /**
+                     * 省份编码
+                     */
+                    bindAccount.setProvCode("0035");
+                    /**
+                     * 地区编码
+                     */
+                    bindAccount.setAreaCode("3501");
+                    TrhRequest<BindAccount> request1 = new TrhRequest();
+                    InterfaceResponse execute = request1.execute(bindAccount, BindAccount.SERVICE_CODE);
+                    if("0000".equals(execute.getCode())){
+                        JSONObject jsonObject1 = JSON.parseObject(execute.getResult());
+                        String status1 = jsonObject1.getString("status");
+                        if("2".equals(status1)){
+                            tAgent.setBankStatus(2);
+                            tAgentService.updateById(tAgent);
+                            System.err.println("绑定结算账户失败" );
+                        }
+                        if("1".equals(status1)){
+                            tAgent.setBankStatus(1);
+                            tAgentService.updateById(tAgent);
+                            System.err.println("绑定结算账户成功");
+                        }
+                        if("0".equals(status1)){
+                            tAgent.setBankStatus(0);
+                            tAgentService.updateById(tAgent);
+                            System.err.println("绑定结算账户处理中");
+                        }
+                    }else{
+                        System.err.println("绑定结算账户失败:" + execute.getMsg());
+                    }
+
+                }
+            }else{
+                System.err.println("注册代理商子商户异常:" + response.getMsg());
+            }
         }
     }
 
@@ -476,4 +559,348 @@
         }
     }
 
+
+    @ResponseBody
+    @RequestMapping(value = "/uploadFile")
+    public String uploadFile(MultipartFile file){
+        File srcFile = null;
+        String originalFilename = file.getOriginalFilename();
+        String substring = originalFilename.substring(originalFilename.lastIndexOf("."));
+        String fileName = "";
+        try {
+            fileName = UUIDUtil.getRandomCode(28) + ".png";
+            srcFile = multipartFileToFile(file, fileName);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        ImageUpload imageUpload = new ImageUpload();
+        imageUpload.setMerUserId("33567678901213221");
+        File zip = ZipUtil.zip(srcFile);
+        imageUpload.setName(zip.getName());
+        imageUpload.setFile(Base64.encode(zip));
+        TrhRequest<ImageUpload> request = new TrhRequest();
+        InterfaceResponse execute = request.execute(imageUpload, ImageUpload.SERVICE_CODE);
+        if(execute.getCode().equals("0000")){
+            JSONObject jsonObject = JSON.parseObject(execute.getResult());
+            return jsonObject.getString("fileNo");
+        }
+        return "";
+    }
+
+
+    public File multipartFileToFile(MultipartFile file, String fileName) throws Exception {
+        File toFile = null;
+        if (file.equals("") || file.getSize() <= 0) {
+            file = null;
+        } else {
+            InputStream ins = null;
+            ins = file.getInputStream();
+            toFile = new File("D:\\logs\\" + fileName);
+            inputStreamToFile(ins, toFile);
+            ins.close();
+        }
+        return toFile;
+
+    }
+
+
+    private static void inputStreamToFile(InputStream ins, File file) {
+        try {
+            OutputStream os = new FileOutputStream(file);
+            int bytesRead = 0;
+            byte[] buffer = new byte[8192];
+            while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
+                os.write(buffer, 0, bytesRead);
+            }
+            os.close();
+            ins.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    /**
+     * 跳转到企业信息页
+     * @return
+     */
+    @GetMapping("/showEnterprisePage")
+    public String showEnterprisePage(Model model){
+        ShiroUser user = ShiroKit.getUser();
+        Integer objectId = user.getObjectId();
+        Integer roleType = user.getRoleType();
+        User user1 = userService.selectById(user.getId());
+        TAgent tAgent = new TAgent();
+        if(roleType == 1){//平台
+            tAgent.setPrincipal(user1.getName());
+            tAgent.setPrincipalPhone(user1.getPhone());
+            tAgent.setEmail(user1.getEmail());
+            tAgent.setMerchantNumber("553021440975");
+        }
+        if(roleType == 3){//代理商
+            tAgent = tAgentService.selectById(objectId);
+        }
+        model.addAttribute("roleType", roleType);
+        model.addAttribute("item", tAgent);
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        model.addAttribute("socialCreditCodeExpires", roleType == 1 ? "" : sdf.format(tAgent.getSocialCreditCodeExpires()));
+        model.addAttribute("certIdExpires", roleType == 1 ? "" : sdf.format(tAgent.getCertIdExpires()));
+        Wrapper<SettlementRecord> settlementRecordWrapper = new EntityWrapper<SettlementRecord>().eq("type", roleType == 1 ? 1 : 2);
+        if(roleType == 2){
+            settlementRecordWrapper.eq("objectId", objectId);
+        }
+        List<SettlementRecord> settlementRecords = settlementRecordService.selectList(settlementRecordWrapper.isNotNull("arrivalTime").orderBy("insertTime desc"));
+        model.addAttribute("settlementRecords", settlementRecords);
+
+        QueryBalance queryBalance = new QueryBalance();
+        queryBalance.setUserId(tAgent.getMerchantNumber());
+        TrhRequest<QueryBalance> request = new TrhRequest();
+        InterfaceResponse execute = request.execute(queryBalance, QueryBalance.SERVICE_CODE);
+        model.addAttribute("balance", 0);
+        model.addAttribute("marketingAmount", 0);
+        if("0000".equals(execute.getCode())){
+            JSONObject jsonObject = JSON.parseObject(execute.getResult());
+            model.addAttribute("balance", jsonObject.getDoubleValue("settledAmount") / 100);
+            if(roleType == 1){
+                model.addAttribute("marketingAmount", jsonObject.getDoubleValue("marketingAmount") / 100);
+            }
+        }
+        return PREFIX + "enterprisePage.html";
+    }
+
+
+    /**
+     * 提现申请
+     * @return
+     */
+    @ResponseBody
+    @PostMapping("/withdrawCash")
+    public ResultUtil withdrawCash(){
+        ShiroUser user = ShiroKit.getUser();
+        Integer objectId = user.getObjectId();
+        Integer roleType = user.getRoleType();
+        User user1 = userService.selectById(user.getId());
+        TAgent tAgent = new TAgent();
+        if(roleType == 1){//平台
+            tAgent.setLegalPerson(user1.getName());
+            tAgent.setLegalPhone(user1.getPhone());
+            tAgent.setEmail(user1.getEmail());
+            tAgent.setMerchantNumber("553021440975");
+        }
+        if(roleType == 3){//代理商
+            tAgent = tAgentService.selectById(objectId);
+        }
+        QueryBalance queryBalance = new QueryBalance();
+        queryBalance.setUserId(tAgent.getMerchantNumber());
+        TrhRequest<QueryBalance> request = new TrhRequest();
+        InterfaceResponse execute = request.execute(queryBalance, QueryBalance.SERVICE_CODE);
+        if("0000".equals(execute.getCode())){
+            JSONObject jsonObject = JSON.parseObject(execute.getResult());
+            double settledAmount = jsonObject.getDoubleValue("settledAmount");
+            if(0 == settledAmount){
+                return ResultUtil.error("余额不足");
+            }
+            SettlementRecord settlementRecord = new SettlementRecord();
+            settlementRecord.setType(roleType == 1 ? 1 : 2);
+            if(roleType == 3){
+                settlementRecord.setObjectId(tAgent.getId());
+            }
+            settlementRecord.setAmount(settledAmount);
+            settlementRecord.setInsertTime(new Date());
+            settlementRecordService.insert(settlementRecord);
+
+
+            Withdraw withdraw = new Withdraw();
+            withdraw.setUserId(tAgent.getMerchantNumber());
+            withdraw.setAmount(settledAmount + "");
+            withdraw.setOrderName("账户余额提现");
+            withdraw.setRemark("账户余额提现");
+            withdraw.setNotifyUrl(callbackPath + "/tAgent/withdrawCashCallback");
+            withdraw.setParameter1(settlementRecord.getId().toString());
+            TrhRequest<Withdraw> request1 = new TrhRequest();
+            InterfaceResponse execute1 = request1.execute(withdraw, Withdraw.SERVICE_CODE);//结算(提现)
+            if("0000".equals(execute1.getCode())){
+                JSONObject jsonObject1 = JSON.parseObject(execute1.getResult());
+                String merOrderId1 = jsonObject1.getString("merOrderId");
+                Integer status = jsonObject1.getInteger("status");//0:待处理;1:成功;2:失败
+                if(0 == status){
+                    return ResultUtil.error("申请处理中");
+                }
+                if(1 == status){
+                    settlementRecord.setOrderNumber(merOrderId1);
+                    settlementRecord.setArrivalTime(new Date());
+                    settlementRecordService.updateById(settlementRecord);
+                    return ResultUtil.success();
+                }
+                if(2 == status){
+                    return ResultUtil.error("结算接口异常【提现】:" + jsonObject1.getString("statusMsg"));
+                }
+            }else{
+                return ResultUtil.error("结算接口异常【提现】:" + execute.getMsg());
+            }
+
+        }else{
+            return ResultUtil.error(execute.getMsg());
+        }
+        return ResultUtil.error("未知异常");
+    }
+
+
+    /**
+     * 提现回调
+     * @param interfaceResponse
+     */
+    @ResponseBody
+    @PostMapping("/withdrawCashCallback")
+    public void withdrawCashCallback(@RequestBody InterfaceResponse interfaceResponse) {
+        if("0000".equals(interfaceResponse.getCode())){
+            JSONObject jsonObject1 = JSON.parseObject(interfaceResponse.getResult());
+            String merOrderId1 = jsonObject1.getString("merOrderId");
+            Integer status = jsonObject1.getInteger("status");//0:待处理;1:成功;2:失败
+            if(1 == status){
+                String parameter1 = jsonObject1.getString("parameter1");
+                SettlementRecord settlementRecord = settlementRecordService.selectById(parameter1);
+                settlementRecord.setOrderNumber(merOrderId1);
+                settlementRecord.setArrivalTime(new Date());
+                settlementRecordService.updateById(settlementRecord);
+            }
+            if(2 == status){
+                System.err.println("结算接口异常【提现】:" + jsonObject1.getString("statusMsg"));
+            }
+        }else{
+            System.err.println("结算接口异常【提现】:" + interfaceResponse.getMsg());
+        }
+    }
+
+
+    /**
+     * 充值补贴金额
+     * @param amount
+     * @return
+     */
+    @ResponseBody
+    @PostMapping("/accountRecharge")
+    public ResultUtil accountRecharge(Double amount){
+        try {
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+            String out_trade_no = sdf.format(new Date()) + UUIDUtil.getNumberRandom(3);
+            RechargeRecord rechargeRecord = new RechargeRecord();
+            rechargeRecord.setCode(out_trade_no);
+            rechargeRecord.setType(4);
+            rechargeRecord.setAmount(amount);
+            rechargeRecord.setPayType(2);
+            rechargeRecord.setPayStatus(1);
+            rechargeRecord.setCreateTime(new Date());
+            rechargeRecordService.insert(rechargeRecord);
+
+            Deposit deposit = new Deposit();
+            deposit.setAmount(String.valueOf(Double.valueOf(amount * 100).intValue()));
+            deposit.setOrderName("补贴充值");
+            deposit.setPayType("ALI_CB");
+            deposit.setTerminalIp(InetAddress.getLocalHost().getHostAddress());
+            deposit.setFrontUrl(callbackPath + "/tAgent/accountRechargeCallback");
+            deposit.setNotifyUrl(callbackPath + "/tAgent/accountRechargeCallback");
+            deposit.setParameter1(rechargeRecord.getId().toString());
+            TrhRequest<Deposit> request = new TrhRequest();
+            InterfaceResponse execute = request.execute(deposit, Deposit.SERVICE_CODE);
+            if("0000".equals(execute.getCode())){
+                JSONObject jsonObject = JSON.parseObject(execute.getResult());
+                Integer status = jsonObject.getInteger("status");
+                if(2 == status){
+                    return ResultUtil.error("支付异常");
+                }
+                String merOrderId = jsonObject.getString("merOrderId");
+                String payCode = jsonObject.getString("payCode");
+                if(ToolUtil.isNotEmpty(payCode)){
+                    new Thread(new Runnable() {
+                        @Override
+                        public void run() {
+                            try {
+                                int num = 1;
+                                int wait = 0;
+                                while (num <= 10){
+                                    int min = 5000;
+                                    wait += (min * num);
+                                    RechargeRecord rechargeRecord1 = rechargeRecordService.selectById(rechargeRecord.getId());
+                                    if(rechargeRecord1.getPayStatus() != 1){
+                                        return;
+                                    }
+                                    QueryOrder queryOrder = new QueryOrder();
+                                    queryOrder.setOriginalMerOrderId(merOrderId);
+                                    /**
+                                     * 1:支付查询 2:退款查询 3:确认收货查询 4:结算查询 5:充值查询 6:转账查询 7:异步分账查询(必填)  字段长度最长:1位
+                                     */
+                                    queryOrder.setQueryType("5");
+                                    TrhRequest<QueryOrder> request = new TrhRequest();
+                                    InterfaceResponse execute1 = request.execute(queryOrder, QueryOrder.SERVICE_CODE);
+                                    if("0000".equals(execute1.getCode())){
+                                        JSONObject jsonObject1 = JSON.parseObject(execute1.getResult());
+                                        String status1 = jsonObject1.getString("status");
+                                        if("0".equals(status1)){//待处理
+                                            Thread.sleep(wait);
+                                            num++;
+                                        }
+                                        if("1".equals(status1)){//成功
+                                            String merOrderId = jsonObject1.getString("merOrderId");
+                                            rechargeRecord1.setPayTime(new Date());
+                                            rechargeRecord1.setPayStatus(2);
+                                            rechargeRecord1.setOrderNumber(merOrderId);
+                                            rechargeRecord1.setSurplusDividedAmount(rechargeRecord1.getAmount());
+                                            rechargeRecordService.updateById(rechargeRecord1);
+                                            break;
+                                        }
+                                        if("2".equals(status1) || 10 == num){//失败
+                                            rechargeRecordService.deleteById(rechargeRecord1.getId());
+                                            break;
+                                        }
+                                    }else{
+                                        Thread.sleep(wait);
+                                        num++;
+                                    }
+                                }
+                            }catch (Exception e){
+                                e.printStackTrace();
+                            }
+                        }
+                    }).start();
+                }
+                return ResultUtil.success(payCode);
+            }else{
+                return ResultUtil.error(execute.getMsg());
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+            return ResultUtil.runErr();
+        }
+    }
+
+
+    /**
+     * 补贴金额充值回调
+     * @param interfaceResponse
+     */
+    @ResponseBody
+    @PostMapping("/accountRechargeCallback")
+    public void accountRechargeCallback(@RequestBody InterfaceResponse interfaceResponse){
+        if("0000".equals(interfaceResponse.getCode())){
+            JSONObject jsonObject = JSON.parseObject(interfaceResponse.getResult());
+            Integer status = jsonObject.getInteger("status");
+            if(2 == status){
+                System.err.println("支付异常");
+                return;
+            }
+            if(1 == status){
+                String parameter1 = jsonObject.getString("parameter1");
+                RechargeRecord rechargeRecord = rechargeRecordService.selectById(parameter1);
+                rechargeRecord.setPayStatus(2);
+                rechargeRecord.setPayTime(new Date());
+                rechargeRecord.setOrderNumber(jsonObject.getString("merOrderId"));
+                rechargeRecord.setSurplusDividedAmount(rechargeRecord.getAmount());
+                rechargeRecordService.updateById(rechargeRecord);
+            }
+        }else{
+            System.err.println(interfaceResponse.getMsg());
+        }
+    }
+
 }
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RechargeRecordMapper.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RechargeRecordMapper.java
new file mode 100644
index 0000000..65ef755
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/RechargeRecordMapper.java
@@ -0,0 +1,11 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.RechargeRecord;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/6/2 14:25
+ */
+public interface RechargeRecordMapper extends BaseMapper<RechargeRecord> {
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SettlementRecordMapper.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SettlementRecordMapper.java
new file mode 100644
index 0000000..4f2f146
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/SettlementRecordMapper.java
@@ -0,0 +1,11 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.stylefeng.guns.modular.system.model.SettlementRecord;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/6/2 12:46
+ */
+public interface SettlementRecordMapper extends BaseMapper<SettlementRecord> {
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RechargeRecordMapper.xml b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RechargeRecordMapper.xml
new file mode 100644
index 0000000..c53a45f
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/RechargeRecordMapper.xml
@@ -0,0 +1,20 @@
+<?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.stylefeng.guns.modular.system.dao.RechargeRecordMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.RechargeRecord">
+        <id column="id" property="id" />
+        <result column="type" property="type" />
+        <result column="userId" property="userId" />
+        <result column="code" property="code" />
+        <result column="amount" property="amount"/>
+        <result column="payType" property="payType" />
+        <result column="payTime" property="payTime" />
+        <result column="payStatus" property="payStatus" />
+        <result column="orderNumber" property="orderNumber" />
+        <result column="createTime" property="createTime" />
+        <result column="agentId" property="agentId" />
+        <result column="surplusDividedAmount" property="surplusDividedAmount"/>
+    </resultMap>
+</mapper>
\ No newline at end of file
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SettlementRecordMapper.xml b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SettlementRecordMapper.xml
new file mode 100644
index 0000000..6ce2c62
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/SettlementRecordMapper.xml
@@ -0,0 +1,14 @@
+<?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.stylefeng.guns.modular.system.dao.SettlementRecordMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.SettlementRecord">
+        <id column="id" property="id" />
+        <result column="type" property="type" />
+        <result column="objectId" property="objectId" />
+        <result column="amount" property="amount" />
+        <result column="arrivalTime" property="arrivalTime" />
+        <result column="insertTime" property="insertTime" />
+    </resultMap>
+</mapper>
\ No newline at end of file
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/RechargeRecord.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/RechargeRecord.java
new file mode 100644
index 0000000..603373a
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/RechargeRecord.java
@@ -0,0 +1,80 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 系统充值记录
+ * @author zhibing.pu
+ * @date 2023/3/21 23:08
+ */
+@Data
+@TableName("t_recharge_record")
+public class RechargeRecord {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 数据类型(1=用户,2=司机,3=代理商,4=平台)
+     */
+    @TableField("type")
+    private Integer type;
+    /**
+     * 用户id
+     */
+    @TableField("userId")
+    private Integer userId;
+    /**
+     * 流水号
+     */
+    @TableField("code")
+    private String code;
+    /**
+     * 充值金额
+     */
+    @TableField("amount")
+    private Double amount;
+    /**
+     * 支付方式(1=微信,2=系统充值)
+     */
+    @TableField("payType")
+    private Integer payType;
+    /**
+     * 完成支付时间
+     */
+    @TableField("payTime")
+    private Date payTime;
+    /**
+     * 支付状态(1=待支付,2=已完成)
+     */
+    @TableField("payStatus")
+    private Integer payStatus;
+    /**
+     * 第三方流水号
+     */
+    @TableField("orderNumber")
+    private String orderNumber;
+    /**
+     * 添加时间
+     */
+    @TableField("createTime")
+    private Date createTime;
+    /**
+     * 代理商id
+     */
+    @TableField("agentId")
+    private Integer agentId;
+    /**
+     * 剩余待分账金额
+     */
+    @TableField("surplusDividedAmount")
+    private Double surplusDividedAmount;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SettlementRecord.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SettlementRecord.java
new file mode 100644
index 0000000..c1defa5
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/SettlementRecord.java
@@ -0,0 +1,54 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 结算记录
+ * @author zhibing.pu
+ * @date 2023/6/2 12:43
+ */
+@Data
+@TableName("t_settlement_record")
+public class SettlementRecord {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    /**
+     * 1=平台,2=代理商,3=司机
+     */
+    @TableField("type")
+    private Integer type;
+    /**
+     * 结算对象id
+     */
+    @TableField("objectId")
+    private Integer objectId;
+    /**
+     * 提现金额
+     */
+    @TableField("amount")
+    private Double amount;
+    /**
+     * 第三方流水号
+     */
+    @TableField("orderNumber")
+    private String orderNumber;
+    /**
+     * 到账时间
+     */
+    @TableField("arrivalTime")
+    private Date arrivalTime;
+    /**
+     * 添加时间
+     */
+    @TableField("insertTime")
+    private Date insertTime;
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IRechargeRecordService.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IRechargeRecordService.java
new file mode 100644
index 0000000..eacb603
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IRechargeRecordService.java
@@ -0,0 +1,11 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.RechargeRecord;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/6/2 14:26
+ */
+public interface IRechargeRecordService extends IService<RechargeRecord> {
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISettlementRecordService.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISettlementRecordService.java
new file mode 100644
index 0000000..7bf975b
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ISettlementRecordService.java
@@ -0,0 +1,11 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.stylefeng.guns.modular.system.model.SettlementRecord;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/6/2 12:48
+ */
+public interface ISettlementRecordService extends IService<SettlementRecord> {
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RechargeRecordServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RechargeRecordServiceImpl.java
new file mode 100644
index 0000000..7541b01
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/RechargeRecordServiceImpl.java
@@ -0,0 +1,15 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.RechargeRecordMapper;
+import com.stylefeng.guns.modular.system.model.RechargeRecord;
+import com.stylefeng.guns.modular.system.service.IRechargeRecordService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/6/2 14:26
+ */
+@Service
+public class RechargeRecordServiceImpl extends ServiceImpl<RechargeRecordMapper, RechargeRecord> implements IRechargeRecordService {
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java
new file mode 100644
index 0000000..d75a61e
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/SettlementRecordServiceImpl.java
@@ -0,0 +1,15 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.stylefeng.guns.modular.system.dao.SettlementRecordMapper;
+import com.stylefeng.guns.modular.system.model.SettlementRecord;
+import com.stylefeng.guns.modular.system.service.ISettlementRecordService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/6/2 12:48
+ */
+@Service
+public class SettlementRecordServiceImpl extends ServiceImpl<SettlementRecordMapper, SettlementRecord> implements ISettlementRecordService {
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/Deposit.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/Deposit.java
new file mode 100644
index 0000000..214e08a
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/Deposit.java
@@ -0,0 +1,126 @@
+package com.stylefeng.guns.modular.system.util.MallBook.model;
+
+public class Deposit {
+    /**业务类型编号,必须和接口文档一致*/
+    public static String SERVICE_CODE = "deposit";
+    //充值金额
+    private String amount;
+    //订单信息
+    private String orderName;
+    //支付类型
+    private String payType;
+    //微信或支付宝的appid
+    private String appid;
+    //微信或支付宝用户id
+    private String openid;
+    //终端IP
+    private String terminalIp;
+    //前台回调地址
+    private String frontUrl;
+    //后台回调地址
+    private String notifyUrl;
+    //自定义参数1
+    private String parameter1;
+    //自定义参数2
+    private String parameter2;
+
+    private String bankCode;
+
+    private String cardType;
+
+    public String getBankCode() {
+        return bankCode;
+    }
+
+    public void setBankCode(String bankCode) {
+        this.bankCode = bankCode;
+    }
+
+    public String getCardType() {
+        return cardType;
+    }
+
+    public void setCardType(String cardType) {
+        this.cardType = cardType;
+    }
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+    public String getOrderName() {
+        return orderName;
+    }
+
+    public void setOrderName(String orderName) {
+        this.orderName = orderName;
+    }
+
+    public String getPayType() {
+        return payType;
+    }
+
+    public void setPayType(String payType) {
+        this.payType = payType;
+    }
+
+    public String getAppid() {
+        return appid;
+    }
+
+    public void setAppid(String appid) {
+        this.appid = appid;
+    }
+
+    public String getOpenid() {
+        return openid;
+    }
+
+    public void setOpenid(String openid) {
+        this.openid = openid;
+    }
+
+    public String getTerminalIp() {
+        return terminalIp;
+    }
+
+    public void setTerminalIp(String terminalIp) {
+        this.terminalIp = terminalIp;
+    }
+
+    public String getFrontUrl() {
+        return frontUrl;
+    }
+
+    public void setFrontUrl(String frontUrl) {
+        this.frontUrl = frontUrl;
+    }
+
+    public String getNotifyUrl() {
+        return notifyUrl;
+    }
+
+    public void setNotifyUrl(String notifyUrl) {
+        this.notifyUrl = notifyUrl;
+    }
+
+    public String getParameter1() {
+        return parameter1;
+    }
+
+    public void setParameter1(String parameter1) {
+        this.parameter1 = parameter1;
+    }
+
+    public String getParameter2() {
+        return parameter2;
+    }
+
+    public void setParameter2(String parameter2) {
+        this.parameter2 = parameter2;
+    }
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/ImageUpload.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/ImageUpload.java
new file mode 100644
index 0000000..86e758f
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/ImageUpload.java
@@ -0,0 +1,44 @@
+package com.stylefeng.guns.modular.system.util.MallBook.model;
+
+
+/**
+ * @author huangh
+ * @version 1.0
+ * @description
+ * @date 2021/9/18 16:10
+ */
+
+public class ImageUpload {
+    /**业务类型编号,必须和接口文档一致*/
+    public static String SERVICE_CODE = "fileUpload";
+    //业务系统会员编号
+    private String merUserId;
+    //文件名称
+    private String file;
+    //文件
+    private String name;
+
+    public String getMerUserId() {
+        return merUserId;
+    }
+
+    public void setMerUserId(String merUserId) {
+        this.merUserId = merUserId;
+    }
+
+    public String getFile() {
+        return file;
+    }
+
+    public void setFile(String file) {
+        this.file = file;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/InterfaceRequest.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/InterfaceRequest.java
index 619db50..1c52ff0 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/InterfaceRequest.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/InterfaceRequest.java
@@ -6,9 +6,9 @@
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
-import com.supersavedriving.driver.modular.system.util.MallBook.config.ChannelConfig;
-import com.supersavedriving.driver.modular.system.util.MallBook.util.RSASignature;
-import com.supersavedriving.driver.modular.system.util.MallBook.util.StringUtil;
+import com.stylefeng.guns.modular.system.util.MallBook.config.ChannelConfig;
+import com.stylefeng.guns.modular.system.util.MallBook.util.RSASignature;
+import com.stylefeng.guns.modular.system.util.MallBook.util.StringUtil;
 
 import java.io.Serializable;
 
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/InterfaceResponse.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/InterfaceResponse.java
index ba25251..d202eb3 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/InterfaceResponse.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/InterfaceResponse.java
@@ -5,7 +5,7 @@
 
 
 import cn.hutool.core.util.StrUtil;
-import com.supersavedriving.driver.modular.system.util.MallBook.util.StringUtil;
+import com.stylefeng.guns.modular.system.util.MallBook.util.StringUtil;
 
 import java.io.Serializable;
 
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/QueryBalance.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/QueryBalance.java
new file mode 100644
index 0000000..9de45a2
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/QueryBalance.java
@@ -0,0 +1,16 @@
+package com.stylefeng.guns.modular.system.util.MallBook.model;
+
+
+public class QueryBalance {
+    /**业务类型编号,必须和接口文档一致*/
+    public static String SERVICE_CODE = "queryBalance";
+    private String userId;//子商户编号
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/QueryOrder.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/QueryOrder.java
new file mode 100644
index 0000000..8d36d11
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/QueryOrder.java
@@ -0,0 +1,31 @@
+package com.stylefeng.guns.modular.system.util.MallBook.model;
+
+public class QueryOrder {
+    /**业务类型编号,必须和接口文档一致*/
+    public static String SERVICE_CODE = "queryOrder";
+    /**
+     * 原请求订单号
+     */
+    private String originalMerOrderId;
+
+    /**
+     * 查询类型
+     */
+    private String queryType;
+
+    public String getOriginalMerOrderId() {
+        return originalMerOrderId;
+    }
+
+    public void setOriginalMerOrderId(String originalMerOrderId) {
+        this.originalMerOrderId = originalMerOrderId;
+    }
+
+    public String getQueryType() {
+        return queryType;
+    }
+
+    public void setQueryType(String queryType) {
+        this.queryType = queryType;
+    }
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/Withdraw.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/Withdraw.java
new file mode 100644
index 0000000..0a1800d
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/model/Withdraw.java
@@ -0,0 +1,96 @@
+package com.stylefeng.guns.modular.system.util.MallBook.model;
+
+public class Withdraw {
+    /**业务类型编号,必须和接口文档一致*/
+    public static String SERVICE_CODE = "withdraw";
+    /**
+     * 子商户编号(必填)
+     */
+    private String userId;
+
+    /**
+     * 结算金额(必填)
+     */
+    private String amount;
+
+    /**
+     * 订单名称
+     */
+    private String orderName;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 后台回调地址(必填)
+     */
+    private String notifyUrl;
+
+    /**
+     * 自定义参数1
+     */
+    private String parameter1;
+
+    /**
+     * 自定义参数2
+     */
+    private String parameter2;
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getAmount() {
+        return amount;
+    }
+
+    public void setAmount(String amount) {
+        this.amount = amount;
+    }
+
+    public String getOrderName() {
+        return orderName;
+    }
+
+    public void setOrderName(String orderName) {
+        this.orderName = orderName;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public String getNotifyUrl() {
+        return notifyUrl;
+    }
+
+    public void setNotifyUrl(String notifyUrl) {
+        this.notifyUrl = notifyUrl;
+    }
+
+    public String getParameter1() {
+        return parameter1;
+    }
+
+    public void setParameter1(String parameter1) {
+        this.parameter1 = parameter1;
+    }
+
+    public String getParameter2() {
+        return parameter2;
+    }
+
+    public void setParameter2(String parameter2) {
+        this.parameter2 = parameter2;
+    }
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/util/RSASignature.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/util/RSASignature.java
index ef74493..d927439 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/util/RSASignature.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/util/RSASignature.java
@@ -1,7 +1,7 @@
 package com.stylefeng.guns.modular.system.util.MallBook.util;
 
 
-import com.supersavedriving.driver.modular.system.util.MallBook.config.ChannelConfig;
+import com.stylefeng.guns.modular.system.util.MallBook.config.ChannelConfig;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/management/guns-admin/src/main/resources/application.yml b/management/guns-admin/src/main/resources/application.yml
index 1c0979a..6e2b5cb 100644
--- a/management/guns-admin/src/main/resources/application.yml
+++ b/management/guns-admin/src/main/resources/application.yml
@@ -88,4 +88,23 @@
 #正式环境
 #callbackPath: https://okyueche.com:8010
 #测试环境
-callbackPath: http://121.37.15.157:8010
\ No newline at end of file
+callbackPath: http://121.37.15.157:8010
+
+
+---
+
+#  mallbook 调起接口参数配置
+mallbook:
+  # pay_url:mallbook接口地址    测试环境: https://uat.mallbook.cn/api   生产环境:https://cloudpay.mallbook.cn/api
+  pay_url: https://cloudpay.mallbook.cn/api
+  # merchant_no 业务系统商户平台编号,需替换为mallbook工作人员提供的商户编号
+  merchant_no: MBH23056
+  # version 接口版本号
+  version: 1.0.0
+  # channel_type 渠道类型 HF:汇付
+  channel_type: HF
+  # merchant_private_key 商户平台私钥,需要替换成商户平台自己生成的私钥
+  merchant_private_key: MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALHmyTrxPYcAwABnX+3VW9vxUftm57zBpnbfOT4vizMnKdpfCkIgtdbfdnSCtt637yWM2fxnZfItnhTeQA2lL8f4SXgZt/bVXfmAWi4IxQ+HJy0Qs8nNy2nnjICPBPcpWzHwUxQ/THHqU0a7b9B91J5DFcbQb25BHeRpHwkBw6A/AgMBAAECgYAmcWq2s/7Jt53F+JDAQkTRaHqAyyH0phwkv+QMzhVUfngK2lLLK2pf/nYIg16lDjY9dQx+AJIFHVp1w/kveayzOz3BIqPoznyIVYPolRGZCWPo+2vdp0CIdBh7zahST5g5Gem4cU47wO5hPYs1kXKPG4mUPtaIAMHFxhyLvIagAQJBAOS63AIZrRrldeNCVVNXbpAT52JuWLCgravM9coOh6scmG6UQwxxcott8hneHr9fazk2LHbHMxlG8F+dQPA0+D8CQQDHHJN7Dnske8oJ+1sq4uhQP3HMsmNIgth+ZcaZpiPcxnNKYVGhzAwTVV2ruFJle5ajebo6zfWuqJhtZGRNh1gBAkA/lRoXk1+lfGfa9tOVSVa4wm+t0xLgdqoQefdRZdyc2mQdSSWiTd8Tl0qXmkFd3X6G9uJBWnp/6lJjoektXOwtAkBsZTQsw99qJzIAaSRinpDWTxPG2j6OlR0DAqkxsG7JnAfbsEteh9TzGYAbIgdJVBTX/kbSCJn9ca85rnOkeVABAkAUbDfU3Z702z20NtwAxc1IkrtQ1lKuqSpj9/LuR1/6KRkYQsUWnUiOO9hu5YDWIcflFrnCenF8j8OnvGghltxT
+  # mall_book_public_key mallbook测试环境公钥 不需要替换
+  mall_book_public_key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq6OLZKgUHH5wOk9xSBgN7yC17r3PQwMlY9/IorqrOlaIqrU0eAVZ5+dWrJD/3bdu7Ctq8n8trTm/IUYs7wtMg5SKwyX4/N+KQc2N7LL4yCq4vNl41q9sYgrtA0QnZoucIZcq1mwyu7RTDC8Wp7LGddnlkJsmL8masgMxA6cc9NwIDAQAB
+
diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tAgent/enterprisePage.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tAgent/enterprisePage.html
new file mode 100644
index 0000000..aa3076d
--- /dev/null
+++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tAgent/enterprisePage.html
@@ -0,0 +1,444 @@
+@layout("/common/_container.html"){
+<style type="text/css">
+    table{
+        width: 100%;
+    }
+    td, th{
+        border: 1px solid #eee;
+        text-align: center;
+        height: 40px;
+        line-height: 40px;
+    }
+    td select, td div, td div input, td input{
+        height: 100%;
+        width: 95%;
+        border: none;
+        text-indent: 10px;
+    }
+</style>
+<div class="ibox float-e-margins">
+    <div class="ibox-content">
+        <div class="form-horizontal" id="tAgentInfoForm">
+            <input type="hidden" id="provCodeEnterprise1" value="${item.provCodeEnterprise}">
+            <input type="hidden" id="areaCodeEnterprise1" value="${item.areaCodeEnterprise}">
+            <input type="hidden" id="provCodeBank1" value="${item.provCodeBank}">
+            <input type="hidden" id="areaCodeBank1" value="${item.areaCodeBank}">
+            <div class="row">
+                <div class="col-sm-6">
+                    <div class="form-group">
+                        企业信息
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">*负责人姓名:</label>
+                        <div class="col-sm-9">
+                            <input class="form-control" id="principal" name="principal" value="${item.principal}" placeholder="请输入">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">*联系电话:</label>
+                        <div class="col-sm-9">
+                            <input class="form-control" id="principalPhone" name="principalPhone" value="${item.principalPhone}" maxlength="11" type="number" placeholder="请输入">
+                        </div>
+                    </div>
+                    <div class="form-group" ${roleType == 1 ? 'hidden' : ''}>
+                        <input id="areaId" type="hidden">
+                        <label class="col-sm-3 control-label">*代理区域:</label>
+                        <div class="col-sm-9">
+                            <input class="form-control" id="area" onclick="TAgent.area()" name="area" value="${item.provinceName}/${item.cityName}" placeholder="请选择" readonly>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">*邮箱:</label>
+                        <div class="col-sm-9">
+                            <input class="form-control" id="email" name="email" type="email" value="${item.email}" maxlength="40" placeholder="请输入">
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="row" ${roleType == 1 ? 'hidden' : ''}>
+                <div class="col-sm-6">
+                    <div class="form-group">
+                        商户信息
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">*商户类型:</label>
+                        <div class="col-sm-9">
+                            <select class="form-control" id="userType">
+                                <option value="0" ${item.userType == 0 ? 'selected' : '' }>小微商户</option>
+                                <option value="1" ${item.userType == 1 ? 'selected' : '' }>个体工商户</option>
+                                <option value="2" ${item.userType == 2 ? 'selected' : '' }>企业</option>
+                            </select>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">*公司名称:</label>
+                        <div class="col-sm-9">
+                            <input class="form-control" id="merchantName" name="merchantName" value="${item.merchantName}" type="text" maxlength="20" placeholder="请输入">
+                        </div>
+                    </div>
+                    <div class="form-group qy">
+                        <label class="col-sm-3 control-label">*经营范围:</label>
+                        <div class="col-sm-9">
+                            <input class="form-control" id="businessScope" name="businessScope" value="${item.businessScope}" type="text" maxlength="20" placeholder="请输入">
+                        </div>
+                    </div>
+                    <div class="form-group qy">
+                        <label class="col-sm-3 control-label">*统一社会信用码:</label>
+                        <div class="col-sm-9">
+                            <input class="form-control" id="socialCreditCode" name="socialCreditCode" value="${item.socialCreditCode}" type="text" maxlength="20" placeholder="请输入">
+                        </div>
+                    </div>
+                    <div class="form-group qy">
+                        <label class="col-sm-3 control-label">*统一社会信用证有效期:</label>
+                        <div class="col-sm-9">
+                            <input class="form-control" id="socialCreditCodeExpires" name="socialCreditCodeExpires" value="${socialCreditCodeExpires}" type="text" maxlength="20" placeholder="请输入">
+                        </div>
+                    </div>
+                    <div class="form-group qy">
+                        <label class="col-sm-3 control-label">*地区:</label>
+                        <div class="col-sm-4">
+                            <select class="form-control" id="provCodeEnterprise" name="provCodeEnterprise" onchange="initArea(this, 'areaCodeEnterprise')"></select>
+                        </div>
+                        <div class="col-sm-4">
+                            <select class="form-control" id="areaCodeEnterprise" name="areaCodeEnterprise"></select>
+                        </div>
+                    </div>
+                    <div class="form-group qy">
+                        <label class="col-sm-3 control-label">*企业详细地址:</label>
+                        <div class="col-sm-9">
+                            <input class="form-control" id="address" name="address" value="${item.address}" type="text" maxlength="20" placeholder="请输入">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">*结算账户名:</label>
+                        <div class="col-sm-9">
+                            <input class="form-control" id="cardName" name="cardName" value="${item.cardName}" type="text" maxlength="20" placeholder="请输入">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">*结算账户号:</label>
+                        <div class="col-sm-9">
+                            <input class="form-control" id="cardNo" name="cardNo" value="${item.cardNo}" type="text" maxlength="20" placeholder="请输入">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">*银行账户类型:</label>
+                        <div class="col-sm-9">
+                            <select class="form-control" id="bankAcctType">
+                                <option value="1" ${item.bankAcctType == 1 ? 'selected' : ''}>对公</option>
+                                <option value="2" ${item.bankAcctType == 2 ? 'selected' : ''}>对私</option>
+                            </select>
+                        </div>
+                    </div>
+                </div>
+                <div class="col-sm-6">
+                    <div class="form-group">
+                    </div>
+                    <div class="form-group qy">
+                        <label class="col-sm-3 control-label">*法人姓名:</label>
+                        <div class="col-sm-9">
+                            <input class="form-control" id="legalPerson" name="legalPerson" value="${item.legalPerson}" type="text" maxlength="20" placeholder="请输入">
+                        </div>
+                    </div>
+                    <div class="form-group qy">
+                        <label class="col-sm-3 control-label">*法人身份证号:</label>
+                        <div class="col-sm-9">
+                            <input class="form-control" id="merchantIDCode" name="merchantIDCode" value="${item.merchantIDCode}" type="text" maxlength="20" placeholder="请输入">
+                        </div>
+                    </div>
+                    <div class="form-group qy">
+                        <label class="col-sm-3 control-label">*法人身份证有效期:</label>
+                        <div class="col-sm-9">
+                            <input class="form-control" id="certIdExpires" name="certIdExpires" value="${certIdExpires}">
+                        </div>
+                    </div>
+                    <div class="form-group qy">
+                        <label class="col-sm-3 control-label">*法人手机号:</label>
+                        <div class="col-sm-9">
+                            <input class="form-control" id="legalPhone" name="legalPhone" value="${item.legalPhone}" type="text" maxlength="11" placeholder="请输入">
+                        </div>
+                    </div>
+                    <div class="form-group qy">
+                        <label class="col-sm-3 control-label">营业执照扫描件:</label>
+                        <div class="col-sm-7">
+                            <input class="form-control" id="fileNo" name="fileNo" value="${item.fileNo}" value="" readonly style="height: 100%;width: 100%;border: none;"/>
+                        </div>
+                        <div class="col-sm-2">
+                            <button class="form-control" id="fileNoBtnId">上传</button>
+                        </div>
+                        <input type="file" id="file" style="display: none;">
+                    </div>
+                    <div class="form-group qy">
+                        <label class="col-sm-3 control-label">*银行名称:</label>
+                        <div class="col-sm-9">
+                            <select class="form-control" id="bankCode" name="bankCode">
+                                <option value="01020000" ${item.bankAcctType == '01020000' ? 'selected' : ''}>工商银行</option>
+                                <option value="01030000" ${item.bankAcctType == '01030000' ? 'selected' : ''}>农业银行</option>
+                                <option value="01040000" ${item.bankAcctType == '01040000' ? 'selected' : ''}>中国银行</option>
+                                <option value="01050000" ${item.bankAcctType == '01050000' ? 'selected' : ''}>建设银行</option>
+                                <option value="03010000" ${item.bankAcctType == '03010000' ? 'selected' : ''}>交通银行</option>
+                                <option value="03134402" ${item.bankAcctType == '03134402' ? 'selected' : ''}>平安银行</option>
+                                <option value="03020000" ${item.bankAcctType == '03020000' ? 'selected' : ''}>中信银行</option>
+                                <option value="03030000" ${item.bankAcctType == '03030000' ? 'selected' : ''}>光大银行</option>
+                                <option value="03040000" ${item.bankAcctType == '03040000' ? 'selected' : ''}>华夏银行</option>
+                                <option value="03050000" ${item.bankAcctType == '03050000' ? 'selected' : ''}>民生银行</option>
+                                <option value="03060000" ${item.bankAcctType == '03060000' ? 'selected' : ''}>广发银行</option>
+                                <option value="03080000" ${item.bankAcctType == '03080000' ? 'selected' : ''}>招商银行</option>
+                                <option value="03090000" ${item.bankAcctType == '03090000' ? 'selected' : ''}>兴业银行</option>
+                                <option value="03100000" ${item.bankAcctType == '03100000' ? 'selected' : ''}>浦发银行</option>
+                                <option value="03130011" ${item.bankAcctType == '03130011' ? 'selected' : ''}>北京银行</option>
+                                <option value="03130012" ${item.bankAcctType == '03130012' ? 'selected' : ''}>天津银行</option>
+                                <option value="03130031" ${item.bankAcctType == '03130031' ? 'selected' : ''}>上海银行</option>
+                                <option value="03130032" ${item.bankAcctType == '03130032' ? 'selected' : ''}>江苏银行</option>
+                                <option value="03130050" ${item.bankAcctType == '03130050' ? 'selected' : ''}>重庆银行</option>
+                                <option value="03132102" ${item.bankAcctType == '03132102' ? 'selected' : ''}>大连银行</option>
+                                <option value="03132301" ${item.bankAcctType == '03132301' ? 'selected' : ''}>哈尔滨银行</option>
+                                <option value="03133201" ${item.bankAcctType == '03133201' ? 'selected' : ''}>南京银行</option>
+                                <option value="03133301" ${item.bankAcctType == '03133301' ? 'selected' : ''}>杭州银行</option>
+                                <option value="03133302" ${item.bankAcctType == '03133302' ? 'selected' : ''}>宁波银行</option>
+                                <option value="03133308" ${item.bankAcctType == '03133308' ? 'selected' : ''}>温州银行</option>
+                                <option value="03150000" ${item.bankAcctType == '03150000' ? 'selected' : ''}>恒丰银行</option>
+                                <option value="03160000" ${item.bankAcctType == '03160000' ? 'selected' : ''}>浙商银行</option>
+                            </select>
+                        </div>
+                    </div>
+                    <div class="form-group qy">
+                        <label class="col-sm-3 control-label">*开户行地区:</label>
+                        <div class="col-sm-4">
+                            <select class="form-control" id="provCodeBank" name="provCodeBank" onchange="initArea(this, 'areaCodeBank')"></select>
+                        </div>
+                        <div class="col-sm-4">
+                            <select class="form-control" id="areaCodeBank" name="areaCodeBank"></select>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">*银行预留手机号:</label>
+                        <div class="col-sm-9">
+                            <input class="form-control" id="phone" name="phone" value="${item.phone}" type="number" maxlength="11" placeholder="请输入">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">*注册状态:</label>
+                        <div class="col-sm-4">
+                            商户开户状态:
+                        </div>
+                        <div class="col-sm-4">
+                            结算账户绑定状态:
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="row">
+                <div class="col-sm-6">
+                    <div class="form-group">
+                        账户信息
+                    </div>
+                    <div class="form-group" ${roleType != 1 ? 'hidden' : ''}>
+                        <label class="col-sm-3 control-label">充值余额:</label>
+                        <div class="col-sm-3">
+                            <span>${marketingAmount}</span>
+                        </div>
+                        <div class="col-sm-3">
+                            <input class="form-control" id="amount" type="number" min="0" placeholder="请输入充值金额">
+                        </div>
+                        <div class="col-sm-3">
+                            <button onclick="accountRecharge()">充值</button>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">可提现余额:</label>
+                        <div class="col-sm-3">
+                            <span id="balance">${balance}</span>
+                        </div>
+                        <div class="col-sm-3">
+                            <button onclick="withdrawCash()">提现</button>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">提现记录:</label>
+                        <div class="col-sm-9">
+                            <table>
+                                <thead>
+                                    <tr><th>提现时间</th><th>提现金额</th><th>到账时间</th></tr>
+                                </thead>
+                                <tbody>
+                                    @for(obj in settlementRecords){
+                                        <tr><td>${obj.insertTime}</td><td>${obj.amount}</td><td>${obj.arrivalTime}</td></tr>
+                                    @}
+                                </tbody>
+                            </table>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+
+    </div>
+</div>
+<script src="${ctxPath}/static/modular/system/tAgent/tAgent_info.js"></script>
+<script src="${ctxPath}/static/modular/system/tAgent/tAgent.js"></script>
+<script src="${ctxPath}/static/js/qrcode.js"></script>
+<script src="${ctxPath}/static/js/jquery.qrcode.js"></script>
+<script type="text/javascript">
+    var citys = [{"value":"0011","title":"北京市","cities":[{"value":"1100","title":"北京市"}]},{"value":"0012","title":"天津市","cities":[{"value":"1200","title":"天津市"}]},{"value":"0013","title":"河北省","cities":[{"value":"1301","title":"石家庄"},{"value":"1302","title":"保定"},{"value":"1303","title":"沧州"},{"value":"1304","title":"承德"},{"value":"1305","title":"邯郸"},{"value":"1306","title":"衡水"},{"value":"1307","title":"廊坊"},{"value":"1308","title":"秦皇岛"},{"value":"1309","title":"唐山"},{"value":"1310","title":"邢台"},{"value":"1311","title":"张家口"}]},{"value":"0014","title":"山西省","cities":[{"value":"1401","title":"太原"},{"value":"1402","title":"长治"},{"value":"1403","title":"大同"},{"value":"1404","title":"晋城"},{"value":"1405","title":"离石"},{"value":"1406","title":"临汾"},{"value":"1407","title":"朔州"},{"value":"1408","title":"忻州"},{"value":"1409","title":"阳泉"},{"value":"1410","title":"榆次"},{"value":"1411","title":"运城"},{"value":"1412","title":"晋中"},{"value":"1413","title":"吕梁"}]},{"value":"0015","title":"内蒙古自治区","cities":[{"value":"1501","title":"呼和浩特"},{"value":"1502","title":"包头"},{"value":"1503","title":"阿拉善"},{"value":"1504","title":"巴彦淖尔"},{"value":"1505","title":"赤峰"},{"value":"1506","title":"呼伦贝尔"},{"value":"1507","title":"乌海"},{"value":"1508","title":"乌兰察布"},{"value":"1509","title":"锡林郭勒"},{"value":"1510","title":"兴安"},{"value":"1511","title":"鄂尔多斯"},{"value":"1512","title":"通辽"},{"value":"1513","title":"满洲里"}]},{"value":"0021","title":"辽宁省","cities":[{"value":"2101","title":"沈阳"},{"value":"2102","title":"大连"},{"value":"2103","title":"鞍山"},{"value":"2104","title":"本溪"},{"value":"2105","title":"朝阳"},{"value":"2106","title":"丹东"},{"value":"2107","title":"抚顺"},{"value":"2108","title":"阜新"},{"value":"2109","title":"葫芦岛"},{"value":"2110","title":"锦州"},{"value":"2111","title":"辽阳"},{"value":"2112","title":"盘锦"},{"value":"2113","title":"铁岭"},{"value":"2114","title":"营口"}]},{"value":"0022","title":"吉林省","cities":[{"value":"2201","title":"长春"},{"value":"2202","title":"白城"},{"value":"2203","title":"白山"},{"value":"2204","title":"吉林"},{"value":"2205","title":"辽源"},{"value":"2206","title":"四平"},{"value":"2207","title":"松原"},{"value":"2208","title":"通化"},{"value":"2209","title":"延边"}]},{"value":"0023","title":"黑龙江省","cities":[{"value":"2301","title":"哈尔滨"},{"value":"2302","title":"大庆"},{"value":"2303","title":"大兴安岭"},{"value":"2304","title":"鹤岗"},{"value":"2305","title":"黑河"},{"value":"2306","title":"鸡西"},{"value":"2307","title":"佳木斯"},{"value":"2308","title":"牡丹江"},{"value":"2309","title":"七台河"},{"value":"2310","title":"齐齐哈尔"},{"value":"2311","title":"双鸭山"},{"value":"2312","title":"绥化"},{"value":"2313","title":"伊春"}]},{"value":"0031","title":"上海市","cities":[{"value":"3100","title":"上海市"}]},{"value":"0032","title":"江苏省","cities":[{"value":"3201","title":"南京"},{"value":"3202","title":"常州"},{"value":"3203","title":"淮安"},{"value":"3204","title":"连云港"},{"value":"3205","title":"南通"},{"value":"3206","title":"苏州"},{"value":"3207","title":"宿迁"},{"value":"3208","title":"泰州"},{"value":"3209","title":"无锡"},{"value":"3210","title":"徐州"},{"value":"3211","title":"盐城"},{"value":"3212","title":"扬州"},{"value":"3213","title":"镇江"},{"value":"3214","title":"胥浦"},{"value":"3215","title":"昆山"}]},{"value":"0033","title":"浙江省","cities":[{"value":"3301","title":"杭州"},{"value":"3302","title":"宁波"},{"value":"3303","title":"湖州"},{"value":"3304","title":"嘉兴"},{"value":"3305","title":"金华"},{"value":"3306","title":"绍兴"},{"value":"3307","title":"台州"},{"value":"3308","title":"温州"},{"value":"3309","title":"舟山"},{"value":"3310","title":"衢州"},{"value":"3311","title":"丽水"}]},{"value":"0034","title":"安徽省","cities":[{"value":"3401","title":"合肥"},{"value":"3402","title":"安庆"},{"value":"3403","title":"蚌埠"},{"value":"3404","title":"巢湖"},{"value":"3405","title":"池州"},{"value":"3406","title":"滁州"},{"value":"3407","title":"阜阳"},{"value":"3408","title":"淮北"},{"value":"3409","title":"淮南"},{"value":"3410","title":"黄山"},{"value":"3411","title":"六安"},{"value":"3412","title":"马鞍山"},{"value":"3414","title":"铜陵"},{"value":"3415","title":"芜湖"},{"value":"3416","title":"宣城"},{"value":"3417","title":"亳州"},{"value":"3418","title":"宿州"}]},{"value":"0035","title":"福建省","cities":[{"value":"3501","title":"福州"},{"value":"3502","title":"厦门"},{"value":"3503","title":"龙岩"},{"value":"3504","title":"南平"},{"value":"3505","title":"宁德"},{"value":"3506","title":"莆田"},{"value":"3507","title":"泉州"},{"value":"3508","title":"三明"},{"value":"3509","title":"漳州"}]},{"value":"0036","title":"江西省","cities":[{"value":"3601","title":"南昌"},{"value":"3602","title":"抚州"},{"value":"3603","title":"赣州"},{"value":"3604","title":"吉安"},{"value":"3605","title":"景德镇"},{"value":"3606","title":"九江"},{"value":"3607","title":"萍乡"},{"value":"3608","title":"上饶"},{"value":"3609","title":"新余"},{"value":"3610","title":"宜春"},{"value":"3611","title":"鹰潭"}]},{"value":"0037","title":"山东省","cities":[{"value":"3701","title":"济南"},{"value":"3702","title":"青岛"},{"value":"3703","title":"滨州"},{"value":"3704","title":"德州"},{"value":"3705","title":"东营"},{"value":"3706","title":"菏泽"},{"value":"3707","title":"济宁"},{"value":"3708","title":"莱芜"},{"value":"3709","title":"聊城"},{"value":"3710","title":"临沂"},{"value":"3711","title":"日照"},{"value":"3712","title":"泰安"},{"value":"3713","title":"威海"},{"value":"3714","title":"潍坊"},{"value":"3715","title":"烟台"},{"value":"3716","title":"枣庄"},{"value":"3717","title":"淄博"}]},{"value":"0041","title":"河南省","cities":[{"value":"4101","title":"郑州"},{"value":"4102","title":"安阳"},{"value":"4103","title":"焦作"},{"value":"4104","title":"鹤壁"},{"value":"4105","title":"开封"},{"value":"4106","title":"洛阳"},{"value":"4107","title":"南阳"},{"value":"4108","title":"平顶山"},{"value":"4109","title":"三门峡"},{"value":"4110","title":"商丘"},{"value":"4111","title":"新乡"},{"value":"4112","title":"信阳"},{"value":"4113","title":"许昌"},{"value":"4114","title":"周口"},{"value":"4115","title":"驻马店"},{"value":"4116","title":"漯河"},{"value":"4117","title":"濮阳"},{"value":"4118","title":"济源"}]},{"value":"0042","title":"湖北省","cities":[{"value":"4201","title":"武汉"},{"value":"4202","title":"鄂州"},{"value":"4203","title":"恩施"},{"value":"4204","title":"黄冈"},{"value":"4205","title":"黄石"},{"value":"4206","title":"荆门"},{"value":"4207","title":"荆州"},{"value":"4208","title":"十堰"},{"value":"4209","title":"随州"},{"value":"4210","title":"咸宁"},{"value":"4211","title":"襄樊"},{"value":"4212","title":"孝感"},{"value":"4213","title":"神农架"},{"value":"4214","title":"天门"},{"value":"4215","title":"宜昌"},{"value":"4216","title":"三峡"},{"value":"4217","title":"潜江"},{"value":"4218","title":"仙桃"}]},{"value":"0043","title":"湖南省","cities":[{"value":"4301","title":"长沙"},{"value":"4302","title":"常德"},{"value":"4303","title":"郴州"},{"value":"4304","title":"衡阳"},{"value":"4305","title":"怀化"},{"value":"4306","title":"娄底"},{"value":"4307","title":"邵阳"},{"value":"4308","title":"湘潭"},{"value":"4309","title":"湘西"},{"value":"4310","title":"益阳"},{"value":"4311","title":"永州"},{"value":"4312","title":"岳阳"},{"value":"4313","title":"张家界"},{"value":"4314","title":"株洲"},{"value":"4331","title":"吉首"}]},{"value":"0044","title":"广东省","cities":[{"value":"4401","title":"广州"},{"value":"4402","title":"深圳"},{"value":"4403","title":"潮州"},{"value":"4404","title":"东莞"},{"value":"4405","title":"佛山"},{"value":"4406","title":"惠州"},{"value":"4407","title":"江门"},{"value":"4408","title":"揭阳"},{"value":"4409","title":"茂名"},{"value":"4410","title":"梅州"},{"value":"4411","title":"清远"},{"value":"4412","title":"汕头"},{"value":"4413","title":"汕尾"},{"value":"4414","title":"韶关"},{"value":"4415","title":"阳江"},{"value":"4416","title":"云浮"},{"value":"4417","title":"湛江"},{"value":"4418","title":"肇庆"},{"value":"4419","title":"中山"},{"value":"4420","title":"河源"},{"value":"4421","title":"珠海"}]},{"value":"0045","title":"广西壮族自治区","cities":[{"value":"4501","title":"南宁"},{"value":"4502","title":"百色"},{"value":"4503","title":"北海"},{"value":"4504","title":"桂林"},{"value":"4505","title":"河池"},{"value":"4506","title":"柳州"},{"value":"4507","title":"梧州"},{"value":"4508","title":"玉林"},{"value":"4509","title":"崇左"},{"value":"4510","title":"防城港"},{"value":"4511","title":"贵港"},{"value":"4512","title":"贺州"},{"value":"4513","title":"来宾"},{"value":"4514","title":"钦州"}]},{"value":"0046","title":"海南省","cities":[{"value":"4601","title":"海口"},{"value":"4602","title":"三亚"},{"value":"4603","title":"白沙"},{"value":"4604","title":"保亭"},{"value":"4605","title":"昌江"},{"value":"4606","title":"澄迈"},{"value":"4607","title":"儋州"},{"value":"4608","title":"定安"},{"value":"4609","title":"东方"},{"value":"4610","title":"乐东"},{"value":"4611","title":"临高"},{"value":"4612","title":"陵水"},{"value":"4613","title":"琼海"},{"value":"4614","title":"琼中"},{"value":"4615","title":"屯昌"},{"value":"4616","title":"万宁"},{"value":"4617","title":"文昌"},{"value":"4618","title":"五指山"},{"value":"4619","title":"洋浦"}]},{"value":"0050","title":"重庆市","cities":[{"value":"5000","title":"重庆市"}]},{"value":"0051","title":"四川省","cities":[{"value":"5101","title":"成都"},{"value":"5102","title":"巴中"},{"value":"5103","title":"达州"},{"value":"5104","title":"德阳"},{"value":"5105","title":"广安"},{"value":"5106","title":"广元"},{"value":"5107","title":"乐山"},{"value":"5108","title":"凉山"},{"value":"5109","title":"眉山"},{"value":"5110","title":"绵阳"},{"value":"5111","title":"南充"},{"value":"5112","title":"内江"},{"value":"5113","title":"攀枝花"},{"value":"5114","title":"遂宁"},{"value":"5115","title":"雅安"},{"value":"5116","title":"宜宾"},{"value":"5117","title":"自贡"},{"value":"5118","title":"泸州"},{"value":"5119","title":"阿坝"},{"value":"5120","title":"甘孜"},{"value":"5121","title":"资阳"}]},{"value":"0052","title":"贵州省","cities":[{"value":"5201","title":"贵阳"},{"value":"5202","title":"安顺"},{"value":"5203","title":"毕节"},{"value":"5204","title":"六盘水"},{"value":"5205","title":"铜仁"},{"value":"5206","title":"遵义"},{"value":"5207","title":"黔东南"},{"value":"5208","title":"黔南"},{"value":"5209","title":"黔西南"}]},{"value":"0053","title":"云南省","cities":[{"value":"5301","title":"昆明"},{"value":"5302","title":"西双版纳"},{"value":"5303","title":"保山"},{"value":"5304","title":"楚雄"},{"value":"5305","title":"大理"},{"value":"5306","title":"德宏"},{"value":"5307","title":"红河"},{"value":"5308","title":"丽江"},{"value":"5309","title":"临沧"},{"value":"5310","title":"怒江"},{"value":"5311","title":"曲靖"},{"value":"5312","title":"思茅"},{"value":"5313","title":"文山"},{"value":"5314","title":"玉溪"},{"value":"5315","title":"昭通"},{"value":"5316","title":"中甸"},{"value":"5317","title":"迪庆州"}]},{"value":"0054","title":"西藏自治区","cities":[{"value":"5401","title":"拉萨"},{"value":"5402","title":"阿里"},{"value":"5403","title":"昌都"},{"value":"5404","title":"林芝"},{"value":"5405","title":"那曲"},{"value":"5406","title":"日喀则"},{"value":"5407","title":"山南"},{"value":"5424","title":"樟木口岸"}]},{"value":"0061","title":"陕西省","cities":[{"value":"6101","title":"西安"},{"value":"6102","title":"安康"},{"value":"6103","title":"宝鸡"},{"value":"6104","title":"汉中"},{"value":"6105","title":"商洛"},{"value":"6106","title":"铜川"},{"value":"6107","title":"渭南"},{"value":"6108","title":"咸阳"},{"value":"6109","title":"延安"},{"value":"6110","title":"榆林"}]},{"value":"0062","title":"甘肃省","cities":[{"value":"6201","title":"兰州"},{"value":"6202","title":"白银"},{"value":"6203","title":"定西"},{"value":"6204","title":"东风"},{"value":"6205","title":"合作"},{"value":"6206","title":"嘉峪关"},{"value":"6207","title":"金昌"},{"value":"6208","title":"酒泉"},{"value":"6209","title":"矿区"},{"value":"6210","title":"临夏"},{"value":"6211","title":"陇南"},{"value":"6212","title":"平凉"},{"value":"6213","title":"庆阳"},{"value":"6214","title":"天水"},{"value":"6215","title":"武威"},{"value":"6216","title":"张掖"},{"value":"6217","title":"甘南州"}]},{"value":"0063","title":"青海省","cities":[{"value":"6301","title":"西宁"},{"value":"6302","title":"海东"},{"value":"6322","title":"海北"},{"value":"6323","title":"黄南"},{"value":"6325","title":"海南"},{"value":"6326","title":"果洛"},{"value":"6327","title":"玉树"},{"value":"6328","title":"海西"}]},{"value":"0064","title":"宁夏回族自治区","cities":[{"value":"6401","title":"银川"},{"value":"6402","title":"中卫"},{"value":"6403","title":"固原"},{"value":"6404","title":"石嘴山"},{"value":"6405","title":"吴忠"}]},{"value":"0065","title":"新疆维吾尔自治区","cities":[{"value":"6501","title":"乌鲁木齐"},{"value":"6502","title":"阿克苏"},{"value":"6503","title":"阿勒泰"},{"value":"6504","title":"巴州"},{"value":"6505","title":"博州"},{"value":"6506","title":"昌吉"},{"value":"6507","title":"哈密"},{"value":"6508","title":"和田"},{"value":"6509","title":"喀什"},{"value":"6510","title":"克拉玛依"},{"value":"6511","title":"马兰"},{"value":"6512","title":"石河子"},{"value":"6513","title":"塔城"},{"value":"6514","title":"吐鲁番"},{"value":"6515","title":"伊犁"},{"value":"6516","title":"克州"},{"value":"6517","title":"阿拉尔"},{"value":"6518","title":"五家渠"}]},{"value":"2003","title":"台湾省","cities":[{"value":"9903","title":"台湾省"}]},{"value":"2001","title":"香港特别行政区","cities":[{"value":"9901","title":"香港特别行政区"}]},{"value":"2002","title":"澳门特别行政区","cities":[{"value":"9902","title":"澳门特别行政区"}]}];
+    laydate.render({
+        elem: '#socialCreditCodeExpires',
+        type: "date"
+    });
+    laydate.render({
+        elem: '#certIdExpires',
+        type: "date"
+    });
+    $('#userType').change(function () {
+        let userType = $(this).val();
+        if(userType == 0){
+            $('.qy').hide();
+            $('#bankAcctType').html('<option value="2">对私</option>')
+        }else{
+            $('.qy').show();
+            $('#bankAcctType').html('<option value="1">对公</option>')
+        }
+    })
+    $('#userType').click();
+
+    function initCity(id) {
+        let city = "";
+        for(let i in citys){
+            let p = citys[i];
+            city += '<option value="' + p.value + '">' +  p.title+ '</option>'
+        }
+        $('#' + id).html(city);
+    }
+
+    function initArea(e, id) {
+        let city = "";
+        let cityCode = $(e).val();
+        for(let i in citys){
+            let p = citys[i];
+            if(p.value == cityCode){
+                let a = p.cities;
+                for(let j in a){
+                    city += '<option value="' + a[j].value + '">' +  a[j].title+ '</option>'
+                }
+                break;
+            }
+
+        }
+        $('#' + id).html(city);
+    }
+
+
+    $('#fileNoBtnId').click(function () {
+        $('#file').click();
+    })
+
+    $('#file').change(function () {
+        var formData = new FormData();
+        formData.append('file', $('#file')[0].files[0])
+        $.ajax({
+            url : Feng.ctxPath + "/tAgent/uploadFile",
+            type : "POST",
+            data : formData,
+            contentType : false,
+            processData : false,
+            success : function(data) {
+                if("" == data){
+                    Feng.error("上传失败");
+                }else{
+                    $('#fileNo').val(data);
+                    $('#file').val('');
+                    Feng.success("上传成功!");
+                }
+            },
+            error : function() {
+                Feng.error("上传失败");
+            }
+        })
+    })
+
+    function withdrawCash(){
+        $.ajax({
+            url : Feng.ctxPath + "/tAgent/withdrawCash",
+            type : "POST",
+            success : function(data) {
+                if(data.code == 200){
+                    Feng.success("提现成功!");
+                    document.location.reload();
+                }else{
+                    Feng.error(data.msg);
+                }
+            },
+            error : function() {
+                Feng.error("提现失败");
+            }
+        })
+    }
+
+
+    function accountRecharge(){
+        let amount = $('#amount').val();
+        if(null == amount || '' == amount || 0 >= amount){
+            Feng.error("请填入有效的充值金额");
+            return
+        }
+        $.ajax({
+            url : Feng.ctxPath + "/tAgent/accountRecharge",
+            type : "POST",
+            data: {
+                amount: amount
+            },
+            success : function(data) {
+                if(data.code == 200){
+                    const str = '<div class="row">\n' +
+                        '                <div class="form-group" style="height: 50px;">\n' +
+                        '                    <div class="col-sm-8">\n' +
+                        '                        <div id="canvas"></div>\n' +
+                        '                    </div>\n' +
+                        '                </div>\n' +
+                        '       </div>'
+                    layer.open({
+                        type: 1
+                        ,title: '支付宝收款二维码'
+                        ,area: ['343px', '386px']
+                        ,offset: 'auto' //具体配置参考:http://www.layui.com/doc/modules/layer.html#offset
+                        ,id: 'layerDemo' //防止重复弹出
+                        ,content: '<div style="padding: 20px">' + str + '</div>'
+                        ,btnAlign: 'c' //按钮居中
+                        ,shade: 0.5 //不显示遮罩
+                    });
+                    $("#canvas").qrcode({
+                        render: "canvas", //设置渲染方式:table和canvas,使用canvas方式性能相对来说比较好.
+                        width: 300, //默认宽度
+                        height: 300, //默认高度
+                        typeNumber: -1, //计算模式一般默认为-1
+                        correctLevel: 2, //二维码纠错级别
+                        background: "#ffffff", //背景颜色
+                        foreground: "#000000", //二维码颜色
+                        text: data.data, //二维码内容:可以直接填一个网址
+                    });
+                }else{
+                    Feng.error(data.msg);
+                }
+            },
+            error : function() {
+                Feng.error("提现失败");
+            }
+        })
+    }
+
+
+
+    $(function () {
+        initCity('provCodeBank');
+        initCity('provCodeEnterprise');
+
+        $('#provCodeBank').val($('#provCodeBank1').val());
+        initArea($('#provCodeBank'), 'areaCodeBank');
+        $('#areaCodeBank').val($('#areaCodeBank1').val());
+
+        $('#provCodeEnterprise').val($('#provCodeEnterprise1').val());
+        initArea($('#provCodeEnterprise'), 'areaCodeEnterprise');
+        $('#areaCodeEnterprise').val($('#areaCodeEnterprise1').val());
+    })
+</script>
+@}
diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tAgent/tAgent_add.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tAgent/tAgent_add.html
index 077e2c6..8ba5537 100644
--- a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tAgent/tAgent_add.html
+++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tAgent/tAgent_add.html
@@ -61,6 +61,7 @@
                         <label class="col-sm-3 control-label">*商户类型:</label>
                         <div class="col-sm-9">
                             <select class="form-control" id="userType">
+                                <option value="0">小微商户</option>
                                 <option value="1">个体工商户</option>
                                 <option value="2">企业</option>
                             </select>
@@ -72,37 +73,34 @@
                             <input class="form-control" id="merchantName" name="merchantName" type="text" maxlength="20" placeholder="请输入">
                         </div>
                     </div>
-                    <div class="form-group">
+                    <div class="form-group qy">
                         <label class="col-sm-3 control-label">*经营范围:</label>
                         <div class="col-sm-9">
                             <input class="form-control" id="businessScope" name="businessScope" type="text" maxlength="20" placeholder="请输入">
                         </div>
                     </div>
-                    <div class="form-group">
+                    <div class="form-group qy">
                         <label class="col-sm-3 control-label">*统一社会信用码:</label>
                         <div class="col-sm-9">
                             <input class="form-control" id="socialCreditCode" name="socialCreditCode" type="text" maxlength="20" placeholder="请输入">
                         </div>
                     </div>
-                    <div class="form-group">
+                    <div class="form-group qy">
                         <label class="col-sm-3 control-label">*统一社会信用证有效期:</label>
                         <div class="col-sm-9">
                             <input class="form-control" id="socialCreditCodeExpires" name="socialCreditCodeExpires" type="text" maxlength="20" placeholder="请输入">
                         </div>
                     </div>
-                    <div class="form-group">
+                    <div class="form-group qy">
                         <label class="col-sm-3 control-label">*地区:</label>
-                        <div class="col-sm-3">
-                            <input class="form-control" id="provCodeEnterprise" name="provCodeEnterprise">
+                        <div class="col-sm-4">
+                            <select class="form-control" id="provCodeEnterprise" name="provCodeEnterprise" onchange="initArea(this, 'areaCodeEnterprise')"></select>
                         </div>
-                        <div class="col-sm-3">
-                            <input class="form-control" id="cityCodeEnterprise" name="cityCodeEnterprise">
-                        </div>
-                        <div class="col-sm-3">
-                            <input class="form-control" id="areaCodeEnterprise" name="areaCodeEnterprise">
+                        <div class="col-sm-4">
+                            <select class="form-control" id="areaCodeEnterprise" name="areaCodeEnterprise"></select>
                         </div>
                     </div>
-                    <div class="form-group">
+                    <div class="form-group qy">
                         <label class="col-sm-3 control-label">*企业详细地址:</label>
                         <div class="col-sm-9">
                             <input class="form-control" id="address" name="address" type="text" maxlength="20" placeholder="请输入">
@@ -129,55 +127,91 @@
                             </select>
                         </div>
                     </div>
-                    <div class="form-group">
-                        <label class="col-sm-3 control-label">*银行预留手机号:</label>
-                        <div class="col-sm-9">
-                            <input class="form-control" id="phone" name="phone" type="text" maxlength="20" placeholder="请输入">
-                        </div>
-                    </div>
                 </div>
                 <div class="col-sm-6">
                     <div class="form-group">
+                    </div>
+                    <div class="form-group qy">
                         <label class="col-sm-3 control-label">*法人姓名:</label>
                         <div class="col-sm-9">
                             <input class="form-control" id="legalPerson" name="legalPerson" type="text" maxlength="20" placeholder="请输入">
                         </div>
                     </div>
-                    <div class="form-group">
+                    <div class="form-group qy">
                         <label class="col-sm-3 control-label">*法人身份证号:</label>
                         <div class="col-sm-9">
                             <input class="form-control" id="merchantIDCode" name="merchantIDCode" type="text" maxlength="20" placeholder="请输入">
                         </div>
                     </div>
-                    <div class="form-group">
+                    <div class="form-group qy">
                         <label class="col-sm-3 control-label">*法人身份证有效期:</label>
                         <div class="col-sm-9">
                             <input class="form-control" id="certIdExpires" name="certIdExpires">
                         </div>
                     </div>
-                    <div class="form-group">
+                    <div class="form-group qy">
                         <label class="col-sm-3 control-label">*法人手机号:</label>
                         <div class="col-sm-9">
                             <input class="form-control" id="legalPhone" name="legalPhone" type="text" maxlength="11" placeholder="请输入">
                         </div>
                     </div>
-                    <#avatar id="fileNo" name="营业执照扫描件:" />
-                    <div class="form-group">
+                    <div class="form-group qy">
+                        <label class="col-sm-3 control-label">营业执照扫描件:</label>
+                        <div class="col-sm-7">
+                            <input class="form-control" id="fileNo" name="fileNo" value="" readonly style="height: 100%;width: 100%;border: none;"/>
+                        </div>
+                        <div class="col-sm-2">
+                            <button class="form-control" id="fileNoBtnId">上传</button>
+                        </div>
+                        <input type="file" id="file" style="display: none;">
+                    </div>
+                    <div class="form-group qy">
                         <label class="col-sm-3 control-label">*银行名称:</label>
                         <div class="col-sm-9">
-                            <input class="form-control" id="bankCode" name="bankCode" type="text" maxlength="20" placeholder="请输入">
+                            <select class="form-control" id="bankCode" name="bankCode">
+                                <option value="01020000">工商银行</option>
+                                <option value="01030000">农业银行</option>
+                                <option value="01040000">中国银行</option>
+                                <option value="01050000">建设银行</option>
+                                <option value="03010000">交通银行</option>
+                                <option value="03134402">平安银行</option>
+                                <option value="03020000">中信银行</option>
+                                <option value="03030000">光大银行</option>
+                                <option value="03040000">华夏银行</option>
+                                <option value="03050000">民生银行</option>
+                                <option value="03060000">广发银行</option>
+                                <option value="03080000">招商银行</option>
+                                <option value="03090000">兴业银行</option>
+                                <option value="03100000">浦发银行</option>
+                                <option value="03130011">北京银行</option>
+                                <option value="03130012">天津银行</option>
+                                <option value="03130031">上海银行</option>
+                                <option value="03130032">江苏银行</option>
+                                <option value="03130050">重庆银行</option>
+                                <option value="03132102">大连银行</option>
+                                <option value="03132301">哈尔滨银行</option>
+                                <option value="03133201">南京银行</option>
+                                <option value="03133301">杭州银行</option>
+                                <option value="03133302">宁波银行</option>
+                                <option value="03133308">温州银行</option>
+                                <option value="03150000">恒丰银行</option>
+                                <option value="03160000">浙商银行</option>
+                            </select>
+                        </div>
+                    </div>
+                    <div class="form-group qy">
+                        <label class="col-sm-3 control-label">*开户行地区:</label>
+                        <div class="col-sm-4">
+                            <select class="form-control" id="provCodeBank" name="provCodeBank" onchange="initArea(this, 'areaCodeBank')"></select>
+                        </div>
+                        <div class="col-sm-4">
+                            <select class="form-control" id="areaCodeBank" name="areaCodeBank"></select>
                         </div>
                     </div>
                     <div class="form-group">
-                        <label class="col-sm-3 control-label">*开户行地区:</label>
-                        <div class="col-sm-3">
-                            <input class="form-control" id="provCodeBank" name="provCodeBank">
-                        </div>
-                        <div class="col-sm-3">
-                            <input class="form-control" id="cityCodeBank" name="cityCodeBank">
-                        </div>
-                        <div class="col-sm-3">
-                            <input class="form-control" id="areaCodeBank" name="areaCodeBank">
+                        <label class="col-sm-3 control-label">*银行预留手机号:</label>
+                        <div class="col-sm-9">
+                            <input class="form-control" id="phone" name="phone" type="number" maxlength="11" placeholder="请输入">
                         </div>
                     </div>
                     <div class="form-group">
@@ -204,6 +238,7 @@
 <script src="${ctxPath}/static/modular/system/tAgent/tAgent_info.js"></script>
 <script src="${ctxPath}/static/modular/system/tAgent/tAgent.js"></script>
 <script type="text/javascript">
+    var citys = [{"value":"0011","title":"北京市","cities":[{"value":"1100","title":"北京市"}]},{"value":"0012","title":"天津市","cities":[{"value":"1200","title":"天津市"}]},{"value":"0013","title":"河北省","cities":[{"value":"1301","title":"石家庄"},{"value":"1302","title":"保定"},{"value":"1303","title":"沧州"},{"value":"1304","title":"承德"},{"value":"1305","title":"邯郸"},{"value":"1306","title":"衡水"},{"value":"1307","title":"廊坊"},{"value":"1308","title":"秦皇岛"},{"value":"1309","title":"唐山"},{"value":"1310","title":"邢台"},{"value":"1311","title":"张家口"}]},{"value":"0014","title":"山西省","cities":[{"value":"1401","title":"太原"},{"value":"1402","title":"长治"},{"value":"1403","title":"大同"},{"value":"1404","title":"晋城"},{"value":"1405","title":"离石"},{"value":"1406","title":"临汾"},{"value":"1407","title":"朔州"},{"value":"1408","title":"忻州"},{"value":"1409","title":"阳泉"},{"value":"1410","title":"榆次"},{"value":"1411","title":"运城"},{"value":"1412","title":"晋中"},{"value":"1413","title":"吕梁"}]},{"value":"0015","title":"内蒙古自治区","cities":[{"value":"1501","title":"呼和浩特"},{"value":"1502","title":"包头"},{"value":"1503","title":"阿拉善"},{"value":"1504","title":"巴彦淖尔"},{"value":"1505","title":"赤峰"},{"value":"1506","title":"呼伦贝尔"},{"value":"1507","title":"乌海"},{"value":"1508","title":"乌兰察布"},{"value":"1509","title":"锡林郭勒"},{"value":"1510","title":"兴安"},{"value":"1511","title":"鄂尔多斯"},{"value":"1512","title":"通辽"},{"value":"1513","title":"满洲里"}]},{"value":"0021","title":"辽宁省","cities":[{"value":"2101","title":"沈阳"},{"value":"2102","title":"大连"},{"value":"2103","title":"鞍山"},{"value":"2104","title":"本溪"},{"value":"2105","title":"朝阳"},{"value":"2106","title":"丹东"},{"value":"2107","title":"抚顺"},{"value":"2108","title":"阜新"},{"value":"2109","title":"葫芦岛"},{"value":"2110","title":"锦州"},{"value":"2111","title":"辽阳"},{"value":"2112","title":"盘锦"},{"value":"2113","title":"铁岭"},{"value":"2114","title":"营口"}]},{"value":"0022","title":"吉林省","cities":[{"value":"2201","title":"长春"},{"value":"2202","title":"白城"},{"value":"2203","title":"白山"},{"value":"2204","title":"吉林"},{"value":"2205","title":"辽源"},{"value":"2206","title":"四平"},{"value":"2207","title":"松原"},{"value":"2208","title":"通化"},{"value":"2209","title":"延边"}]},{"value":"0023","title":"黑龙江省","cities":[{"value":"2301","title":"哈尔滨"},{"value":"2302","title":"大庆"},{"value":"2303","title":"大兴安岭"},{"value":"2304","title":"鹤岗"},{"value":"2305","title":"黑河"},{"value":"2306","title":"鸡西"},{"value":"2307","title":"佳木斯"},{"value":"2308","title":"牡丹江"},{"value":"2309","title":"七台河"},{"value":"2310","title":"齐齐哈尔"},{"value":"2311","title":"双鸭山"},{"value":"2312","title":"绥化"},{"value":"2313","title":"伊春"}]},{"value":"0031","title":"上海市","cities":[{"value":"3100","title":"上海市"}]},{"value":"0032","title":"江苏省","cities":[{"value":"3201","title":"南京"},{"value":"3202","title":"常州"},{"value":"3203","title":"淮安"},{"value":"3204","title":"连云港"},{"value":"3205","title":"南通"},{"value":"3206","title":"苏州"},{"value":"3207","title":"宿迁"},{"value":"3208","title":"泰州"},{"value":"3209","title":"无锡"},{"value":"3210","title":"徐州"},{"value":"3211","title":"盐城"},{"value":"3212","title":"扬州"},{"value":"3213","title":"镇江"},{"value":"3214","title":"胥浦"},{"value":"3215","title":"昆山"}]},{"value":"0033","title":"浙江省","cities":[{"value":"3301","title":"杭州"},{"value":"3302","title":"宁波"},{"value":"3303","title":"湖州"},{"value":"3304","title":"嘉兴"},{"value":"3305","title":"金华"},{"value":"3306","title":"绍兴"},{"value":"3307","title":"台州"},{"value":"3308","title":"温州"},{"value":"3309","title":"舟山"},{"value":"3310","title":"衢州"},{"value":"3311","title":"丽水"}]},{"value":"0034","title":"安徽省","cities":[{"value":"3401","title":"合肥"},{"value":"3402","title":"安庆"},{"value":"3403","title":"蚌埠"},{"value":"3404","title":"巢湖"},{"value":"3405","title":"池州"},{"value":"3406","title":"滁州"},{"value":"3407","title":"阜阳"},{"value":"3408","title":"淮北"},{"value":"3409","title":"淮南"},{"value":"3410","title":"黄山"},{"value":"3411","title":"六安"},{"value":"3412","title":"马鞍山"},{"value":"3414","title":"铜陵"},{"value":"3415","title":"芜湖"},{"value":"3416","title":"宣城"},{"value":"3417","title":"亳州"},{"value":"3418","title":"宿州"}]},{"value":"0035","title":"福建省","cities":[{"value":"3501","title":"福州"},{"value":"3502","title":"厦门"},{"value":"3503","title":"龙岩"},{"value":"3504","title":"南平"},{"value":"3505","title":"宁德"},{"value":"3506","title":"莆田"},{"value":"3507","title":"泉州"},{"value":"3508","title":"三明"},{"value":"3509","title":"漳州"}]},{"value":"0036","title":"江西省","cities":[{"value":"3601","title":"南昌"},{"value":"3602","title":"抚州"},{"value":"3603","title":"赣州"},{"value":"3604","title":"吉安"},{"value":"3605","title":"景德镇"},{"value":"3606","title":"九江"},{"value":"3607","title":"萍乡"},{"value":"3608","title":"上饶"},{"value":"3609","title":"新余"},{"value":"3610","title":"宜春"},{"value":"3611","title":"鹰潭"}]},{"value":"0037","title":"山东省","cities":[{"value":"3701","title":"济南"},{"value":"3702","title":"青岛"},{"value":"3703","title":"滨州"},{"value":"3704","title":"德州"},{"value":"3705","title":"东营"},{"value":"3706","title":"菏泽"},{"value":"3707","title":"济宁"},{"value":"3708","title":"莱芜"},{"value":"3709","title":"聊城"},{"value":"3710","title":"临沂"},{"value":"3711","title":"日照"},{"value":"3712","title":"泰安"},{"value":"3713","title":"威海"},{"value":"3714","title":"潍坊"},{"value":"3715","title":"烟台"},{"value":"3716","title":"枣庄"},{"value":"3717","title":"淄博"}]},{"value":"0041","title":"河南省","cities":[{"value":"4101","title":"郑州"},{"value":"4102","title":"安阳"},{"value":"4103","title":"焦作"},{"value":"4104","title":"鹤壁"},{"value":"4105","title":"开封"},{"value":"4106","title":"洛阳"},{"value":"4107","title":"南阳"},{"value":"4108","title":"平顶山"},{"value":"4109","title":"三门峡"},{"value":"4110","title":"商丘"},{"value":"4111","title":"新乡"},{"value":"4112","title":"信阳"},{"value":"4113","title":"许昌"},{"value":"4114","title":"周口"},{"value":"4115","title":"驻马店"},{"value":"4116","title":"漯河"},{"value":"4117","title":"濮阳"},{"value":"4118","title":"济源"}]},{"value":"0042","title":"湖北省","cities":[{"value":"4201","title":"武汉"},{"value":"4202","title":"鄂州"},{"value":"4203","title":"恩施"},{"value":"4204","title":"黄冈"},{"value":"4205","title":"黄石"},{"value":"4206","title":"荆门"},{"value":"4207","title":"荆州"},{"value":"4208","title":"十堰"},{"value":"4209","title":"随州"},{"value":"4210","title":"咸宁"},{"value":"4211","title":"襄樊"},{"value":"4212","title":"孝感"},{"value":"4213","title":"神农架"},{"value":"4214","title":"天门"},{"value":"4215","title":"宜昌"},{"value":"4216","title":"三峡"},{"value":"4217","title":"潜江"},{"value":"4218","title":"仙桃"}]},{"value":"0043","title":"湖南省","cities":[{"value":"4301","title":"长沙"},{"value":"4302","title":"常德"},{"value":"4303","title":"郴州"},{"value":"4304","title":"衡阳"},{"value":"4305","title":"怀化"},{"value":"4306","title":"娄底"},{"value":"4307","title":"邵阳"},{"value":"4308","title":"湘潭"},{"value":"4309","title":"湘西"},{"value":"4310","title":"益阳"},{"value":"4311","title":"永州"},{"value":"4312","title":"岳阳"},{"value":"4313","title":"张家界"},{"value":"4314","title":"株洲"},{"value":"4331","title":"吉首"}]},{"value":"0044","title":"广东省","cities":[{"value":"4401","title":"广州"},{"value":"4402","title":"深圳"},{"value":"4403","title":"潮州"},{"value":"4404","title":"东莞"},{"value":"4405","title":"佛山"},{"value":"4406","title":"惠州"},{"value":"4407","title":"江门"},{"value":"4408","title":"揭阳"},{"value":"4409","title":"茂名"},{"value":"4410","title":"梅州"},{"value":"4411","title":"清远"},{"value":"4412","title":"汕头"},{"value":"4413","title":"汕尾"},{"value":"4414","title":"韶关"},{"value":"4415","title":"阳江"},{"value":"4416","title":"云浮"},{"value":"4417","title":"湛江"},{"value":"4418","title":"肇庆"},{"value":"4419","title":"中山"},{"value":"4420","title":"河源"},{"value":"4421","title":"珠海"}]},{"value":"0045","title":"广西壮族自治区","cities":[{"value":"4501","title":"南宁"},{"value":"4502","title":"百色"},{"value":"4503","title":"北海"},{"value":"4504","title":"桂林"},{"value":"4505","title":"河池"},{"value":"4506","title":"柳州"},{"value":"4507","title":"梧州"},{"value":"4508","title":"玉林"},{"value":"4509","title":"崇左"},{"value":"4510","title":"防城港"},{"value":"4511","title":"贵港"},{"value":"4512","title":"贺州"},{"value":"4513","title":"来宾"},{"value":"4514","title":"钦州"}]},{"value":"0046","title":"海南省","cities":[{"value":"4601","title":"海口"},{"value":"4602","title":"三亚"},{"value":"4603","title":"白沙"},{"value":"4604","title":"保亭"},{"value":"4605","title":"昌江"},{"value":"4606","title":"澄迈"},{"value":"4607","title":"儋州"},{"value":"4608","title":"定安"},{"value":"4609","title":"东方"},{"value":"4610","title":"乐东"},{"value":"4611","title":"临高"},{"value":"4612","title":"陵水"},{"value":"4613","title":"琼海"},{"value":"4614","title":"琼中"},{"value":"4615","title":"屯昌"},{"value":"4616","title":"万宁"},{"value":"4617","title":"文昌"},{"value":"4618","title":"五指山"},{"value":"4619","title":"洋浦"}]},{"value":"0050","title":"重庆市","cities":[{"value":"5000","title":"重庆市"}]},{"value":"0051","title":"四川省","cities":[{"value":"5101","title":"成都"},{"value":"5102","title":"巴中"},{"value":"5103","title":"达州"},{"value":"5104","title":"德阳"},{"value":"5105","title":"广安"},{"value":"5106","title":"广元"},{"value":"5107","title":"乐山"},{"value":"5108","title":"凉山"},{"value":"5109","title":"眉山"},{"value":"5110","title":"绵阳"},{"value":"5111","title":"南充"},{"value":"5112","title":"内江"},{"value":"5113","title":"攀枝花"},{"value":"5114","title":"遂宁"},{"value":"5115","title":"雅安"},{"value":"5116","title":"宜宾"},{"value":"5117","title":"自贡"},{"value":"5118","title":"泸州"},{"value":"5119","title":"阿坝"},{"value":"5120","title":"甘孜"},{"value":"5121","title":"资阳"}]},{"value":"0052","title":"贵州省","cities":[{"value":"5201","title":"贵阳"},{"value":"5202","title":"安顺"},{"value":"5203","title":"毕节"},{"value":"5204","title":"六盘水"},{"value":"5205","title":"铜仁"},{"value":"5206","title":"遵义"},{"value":"5207","title":"黔东南"},{"value":"5208","title":"黔南"},{"value":"5209","title":"黔西南"}]},{"value":"0053","title":"云南省","cities":[{"value":"5301","title":"昆明"},{"value":"5302","title":"西双版纳"},{"value":"5303","title":"保山"},{"value":"5304","title":"楚雄"},{"value":"5305","title":"大理"},{"value":"5306","title":"德宏"},{"value":"5307","title":"红河"},{"value":"5308","title":"丽江"},{"value":"5309","title":"临沧"},{"value":"5310","title":"怒江"},{"value":"5311","title":"曲靖"},{"value":"5312","title":"思茅"},{"value":"5313","title":"文山"},{"value":"5314","title":"玉溪"},{"value":"5315","title":"昭通"},{"value":"5316","title":"中甸"},{"value":"5317","title":"迪庆州"}]},{"value":"0054","title":"西藏自治区","cities":[{"value":"5401","title":"拉萨"},{"value":"5402","title":"阿里"},{"value":"5403","title":"昌都"},{"value":"5404","title":"林芝"},{"value":"5405","title":"那曲"},{"value":"5406","title":"日喀则"},{"value":"5407","title":"山南"},{"value":"5424","title":"樟木口岸"}]},{"value":"0061","title":"陕西省","cities":[{"value":"6101","title":"西安"},{"value":"6102","title":"安康"},{"value":"6103","title":"宝鸡"},{"value":"6104","title":"汉中"},{"value":"6105","title":"商洛"},{"value":"6106","title":"铜川"},{"value":"6107","title":"渭南"},{"value":"6108","title":"咸阳"},{"value":"6109","title":"延安"},{"value":"6110","title":"榆林"}]},{"value":"0062","title":"甘肃省","cities":[{"value":"6201","title":"兰州"},{"value":"6202","title":"白银"},{"value":"6203","title":"定西"},{"value":"6204","title":"东风"},{"value":"6205","title":"合作"},{"value":"6206","title":"嘉峪关"},{"value":"6207","title":"金昌"},{"value":"6208","title":"酒泉"},{"value":"6209","title":"矿区"},{"value":"6210","title":"临夏"},{"value":"6211","title":"陇南"},{"value":"6212","title":"平凉"},{"value":"6213","title":"庆阳"},{"value":"6214","title":"天水"},{"value":"6215","title":"武威"},{"value":"6216","title":"张掖"},{"value":"6217","title":"甘南州"}]},{"value":"0063","title":"青海省","cities":[{"value":"6301","title":"西宁"},{"value":"6302","title":"海东"},{"value":"6322","title":"海北"},{"value":"6323","title":"黄南"},{"value":"6325","title":"海南"},{"value":"6326","title":"果洛"},{"value":"6327","title":"玉树"},{"value":"6328","title":"海西"}]},{"value":"0064","title":"宁夏回族自治区","cities":[{"value":"6401","title":"银川"},{"value":"6402","title":"中卫"},{"value":"6403","title":"固原"},{"value":"6404","title":"石嘴山"},{"value":"6405","title":"吴忠"}]},{"value":"0065","title":"新疆维吾尔自治区","cities":[{"value":"6501","title":"乌鲁木齐"},{"value":"6502","title":"阿克苏"},{"value":"6503","title":"阿勒泰"},{"value":"6504","title":"巴州"},{"value":"6505","title":"博州"},{"value":"6506","title":"昌吉"},{"value":"6507","title":"哈密"},{"value":"6508","title":"和田"},{"value":"6509","title":"喀什"},{"value":"6510","title":"克拉玛依"},{"value":"6511","title":"马兰"},{"value":"6512","title":"石河子"},{"value":"6513","title":"塔城"},{"value":"6514","title":"吐鲁番"},{"value":"6515","title":"伊犁"},{"value":"6516","title":"克州"},{"value":"6517","title":"阿拉尔"},{"value":"6518","title":"五家渠"}]},{"value":"2003","title":"台湾省","cities":[{"value":"9903","title":"台湾省"}]},{"value":"2001","title":"香港特别行政区","cities":[{"value":"9901","title":"香港特别行政区"}]},{"value":"2002","title":"澳门特别行政区","cities":[{"value":"9902","title":"澳门特别行政区"}]}];
     laydate.render({
         elem: '#socialCreditCodeExpires',
         type: "date"
@@ -212,5 +247,77 @@
         elem: '#certIdExpires',
         type: "date"
     });
+    $('.qy').hide();
+    $('#userType').change(function () {
+        let userType = $(this).val();
+        if(userType == 0){
+            $('.qy').hide();
+            $('#bankAcctType').html('<option value="2">对私</option>')
+        }else{
+            $('.qy').show();
+            $('#bankAcctType').html('<option value="1">对公</option>')
+        }
+    })
+
+    function initCity(id) {
+        let city = "";
+        for(let i in citys){
+            let p = citys[i];
+            city += '<option value="' + p.value + '">' +  p.title+ '</option>'
+        }
+        $('#' + id).html(city);
+    }
+
+    function initArea(e, id) {
+        let city = "";
+        let cityCode = $(e).val();
+        for(let i in citys){
+            let p = citys[i];
+            if(p.value == cityCode){
+                let a = p.cities;
+                for(let j in a){
+                    city += '<option value="' + a[j].value + '">' +  a[j].title+ '</option>'
+                }
+                break;
+            }
+
+        }
+        $('#' + id).html(city);
+    }
+
+
+    $('#fileNoBtnId').click(function () {
+        $('#file').click();
+    })
+
+    $('#file').change(function () {
+        var formData = new FormData();
+        formData.append('file', $('#file')[0].files[0])
+        $.ajax({
+            url : Feng.ctxPath + "/tAgent/uploadFile",
+            type : "POST",
+            data : formData,
+            contentType : false,
+            processData : false,
+            success : function(data) {
+                if("" == data){
+                    Feng.error("上传失败");
+                }else{
+                    $('#fileNo').val(data);
+                    $('#file').val('');
+                    Feng.success("上传成功!");
+                }
+            },
+            error : function() {
+                Feng.error("上传失败");
+            }
+        })
+    })
+
+
+    $(function () {
+        initCity('provCodeBank');
+        initCity('provCodeEnterprise');
+    })
 </script>
 @}
diff --git a/management/guns-admin/src/main/webapp/static/js/jquery.qrcode.js b/management/guns-admin/src/main/webapp/static/js/jquery.qrcode.js
new file mode 100644
index 0000000..d329934
--- /dev/null
+++ b/management/guns-admin/src/main/webapp/static/js/jquery.qrcode.js
@@ -0,0 +1,89 @@
+(function( $ ){
+	$.fn.qrcode = function(options) {
+		// if options is string, 
+		if( typeof options === 'string' ){
+			options	= { text: options };
+		}
+
+		// set default values
+		// typeNumber < 1 for automatic calculation
+		options	= $.extend( {}, {
+			render		: "canvas",
+			width		: 256,
+			height		: 256,
+			typeNumber	: -1,
+			correctLevel	: QRErrorCorrectLevel.H,
+                        background      : "#ffffff",
+                        foreground      : "#000000"
+		}, options);
+
+		var createCanvas	= function(){
+			// create the qrcode itself
+			var qrcode	= new QRCode(options.typeNumber, options.correctLevel);
+			qrcode.addData(options.text);
+			qrcode.make();
+
+			// create canvas element
+			var canvas	= document.createElement('canvas');
+			canvas.width	= options.width;
+			canvas.height	= options.height;
+			var ctx		= canvas.getContext('2d');
+
+			// compute tileW/tileH based on options.width/options.height
+			var tileW	= options.width  / qrcode.getModuleCount();
+			var tileH	= options.height / qrcode.getModuleCount();
+
+			// draw in the canvas
+			for( var row = 0; row < qrcode.getModuleCount(); row++ ){
+				for( var col = 0; col < qrcode.getModuleCount(); col++ ){
+					ctx.fillStyle = qrcode.isDark(row, col) ? options.foreground : options.background;
+					var w = (Math.ceil((col+1)*tileW) - Math.floor(col*tileW));
+					var h = (Math.ceil((row+1)*tileH) - Math.floor(row*tileH));
+					ctx.fillRect(Math.round(col*tileW),Math.round(row*tileH), w, h);  
+				}	
+			}
+			// return just built canvas
+			return canvas;
+		}
+
+		// from Jon-Carlos Rivera (https://github.com/imbcmdth)
+		var createTable	= function(){
+			// create the qrcode itself
+			var qrcode	= new QRCode(options.typeNumber, options.correctLevel);
+			qrcode.addData(options.text);
+			qrcode.make();
+			
+			// create table element
+			var $table	= $('<table></table>')
+				.css("width", options.width+"px")
+				.css("height", options.height+"px")
+				.css("border", "0px")
+				.css("border-collapse", "collapse")
+				.css('background-color', options.background);
+		  
+			// compute tileS percentage
+			var tileW	= options.width / qrcode.getModuleCount();
+			var tileH	= options.height / qrcode.getModuleCount();
+
+			// draw in the table
+			for(var row = 0; row < qrcode.getModuleCount(); row++ ){
+				var $row = $('<tr></tr>').css('height', tileH+"px").appendTo($table);
+				
+				for(var col = 0; col < qrcode.getModuleCount(); col++ ){
+					$('<td></td>')
+						.css('width', tileW+"px")
+						.css('background-color', qrcode.isDark(row, col) ? options.foreground : options.background)
+						.appendTo($row);
+				}	
+			}
+			// return just built canvas
+			return $table;
+		}
+  
+
+		return this.each(function(){
+			var element	= options.render == "canvas" ? createCanvas() : createTable();
+			$(element).appendTo(this);
+		});
+	};
+})( jQuery );
diff --git a/management/guns-admin/src/main/webapp/static/js/qrcode.js b/management/guns-admin/src/main/webapp/static/js/qrcode.js
new file mode 100644
index 0000000..5cbe0f6
--- /dev/null
+++ b/management/guns-admin/src/main/webapp/static/js/qrcode.js
@@ -0,0 +1,1237 @@
+//---------------------------------------------------------------------
+// QRCode for JavaScript
+//
+// Copyright (c) 2009 Kazuhiko Arase
+//
+// URL: http://www.d-project.com/
+//
+// Licensed under the MIT license:
+//   http://www.opensource.org/licenses/mit-license.php
+//
+// The word "QR Code" is registered trademark of 
+// DENSO WAVE INCORPORATED
+//   http://www.denso-wave.com/qrcode/faqpatent-e.html
+//
+//---------------------------------------------------------------------
+
+//---------------------------------------------------------------------
+// QR8bitByte
+//---------------------------------------------------------------------
+
+function QR8bitByte(data) {
+	this.mode = QRMode.MODE_8BIT_BYTE;
+	this.data = data;
+}
+
+QR8bitByte.prototype = {
+
+	getLength : function(buffer) {
+		return this.data.length;
+	},
+	
+	write : function(buffer) {
+		for (var i = 0; i < this.data.length; i++) {
+			// not JIS ...
+			buffer.put(this.data.charCodeAt(i), 8);
+		}
+	}
+};
+
+//---------------------------------------------------------------------
+// QRCode
+//---------------------------------------------------------------------
+
+function QRCode(typeNumber, errorCorrectLevel) {
+	this.typeNumber = typeNumber;
+	this.errorCorrectLevel = errorCorrectLevel;
+	this.modules = null;
+	this.moduleCount = 0;
+	this.dataCache = null;
+	this.dataList = new Array();
+}
+
+QRCode.prototype = {
+	
+	addData : function(data) {
+		var newData = new QR8bitByte(data);
+		this.dataList.push(newData);
+		this.dataCache = null;
+	},
+	
+	isDark : function(row, col) {
+		if (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {
+			throw new Error(row + "," + col);
+		}
+		return this.modules[row][col];
+	},
+
+	getModuleCount : function() {
+		return this.moduleCount;
+	},
+	
+	make : function() {
+		// Calculate automatically typeNumber if provided is < 1
+		if (this.typeNumber < 1 ){
+			var typeNumber = 1;
+			for (typeNumber = 1; typeNumber < 40; typeNumber++) {
+				var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel);
+
+				var buffer = new QRBitBuffer();
+				var totalDataCount = 0;
+				for (var i = 0; i < rsBlocks.length; i++) {
+					totalDataCount += rsBlocks[i].dataCount;
+				}
+
+				for (var i = 0; i < this.dataList.length; i++) {
+					var data = this.dataList[i];
+					buffer.put(data.mode, 4);
+					buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber) );
+					data.write(buffer);
+				}
+				if (buffer.getLengthInBits() <= totalDataCount * 8)
+					break;
+			}
+			this.typeNumber = typeNumber;
+		}
+		this.makeImpl(false, this.getBestMaskPattern() );
+	},
+	
+	makeImpl : function(test, maskPattern) {
+		
+		this.moduleCount = this.typeNumber * 4 + 17;
+		this.modules = new Array(this.moduleCount);
+		
+		for (var row = 0; row < this.moduleCount; row++) {
+			
+			this.modules[row] = new Array(this.moduleCount);
+			
+			for (var col = 0; col < this.moduleCount; col++) {
+				this.modules[row][col] = null;//(col + row) % 3;
+			}
+		}
+	
+		this.setupPositionProbePattern(0, 0);
+		this.setupPositionProbePattern(this.moduleCount - 7, 0);
+		this.setupPositionProbePattern(0, this.moduleCount - 7);
+		this.setupPositionAdjustPattern();
+		this.setupTimingPattern();
+		this.setupTypeInfo(test, maskPattern);
+		
+		if (this.typeNumber >= 7) {
+			this.setupTypeNumber(test);
+		}
+	
+		if (this.dataCache == null) {
+			this.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList);
+		}
+	
+		this.mapData(this.dataCache, maskPattern);
+	},
+
+	setupPositionProbePattern : function(row, col)  {
+		
+		for (var r = -1; r <= 7; r++) {
+			
+			if (row + r <= -1 || this.moduleCount <= row + r) continue;
+			
+			for (var c = -1; c <= 7; c++) {
+				
+				if (col + c <= -1 || this.moduleCount <= col + c) continue;
+				
+				if ( (0 <= r && r <= 6 && (c == 0 || c == 6) )
+						|| (0 <= c && c <= 6 && (r == 0 || r == 6) )
+						|| (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {
+					this.modules[row + r][col + c] = true;
+				} else {
+					this.modules[row + r][col + c] = false;
+				}
+			}		
+		}		
+	},
+	
+	getBestMaskPattern : function() {
+	
+		var minLostPoint = 0;
+		var pattern = 0;
+	
+		for (var i = 0; i < 8; i++) {
+			
+			this.makeImpl(true, i);
+	
+			var lostPoint = QRUtil.getLostPoint(this);
+	
+			if (i == 0 || minLostPoint >  lostPoint) {
+				minLostPoint = lostPoint;
+				pattern = i;
+			}
+		}
+	
+		return pattern;
+	},
+	
+	createMovieClip : function(target_mc, instance_name, depth) {
+	
+		var qr_mc = target_mc.createEmptyMovieClip(instance_name, depth);
+		var cs = 1;
+	
+		this.make();
+
+		for (var row = 0; row < this.modules.length; row++) {
+			
+			var y = row * cs;
+			
+			for (var col = 0; col < this.modules[row].length; col++) {
+	
+				var x = col * cs;
+				var dark = this.modules[row][col];
+			
+				if (dark) {
+					qr_mc.beginFill(0, 100);
+					qr_mc.moveTo(x, y);
+					qr_mc.lineTo(x + cs, y);
+					qr_mc.lineTo(x + cs, y + cs);
+					qr_mc.lineTo(x, y + cs);
+					qr_mc.endFill();
+				}
+			}
+		}
+		
+		return qr_mc;
+	},
+
+	setupTimingPattern : function() {
+		
+		for (var r = 8; r < this.moduleCount - 8; r++) {
+			if (this.modules[r][6] != null) {
+				continue;
+			}
+			this.modules[r][6] = (r % 2 == 0);
+		}
+	
+		for (var c = 8; c < this.moduleCount - 8; c++) {
+			if (this.modules[6][c] != null) {
+				continue;
+			}
+			this.modules[6][c] = (c % 2 == 0);
+		}
+	},
+	
+	setupPositionAdjustPattern : function() {
+	
+		var pos = QRUtil.getPatternPosition(this.typeNumber);
+		
+		for (var i = 0; i < pos.length; i++) {
+		
+			for (var j = 0; j < pos.length; j++) {
+			
+				var row = pos[i];
+				var col = pos[j];
+				
+				if (this.modules[row][col] != null) {
+					continue;
+				}
+				
+				for (var r = -2; r <= 2; r++) {
+				
+					for (var c = -2; c <= 2; c++) {
+					
+						if (r == -2 || r == 2 || c == -2 || c == 2 
+								|| (r == 0 && c == 0) ) {
+							this.modules[row + r][col + c] = true;
+						} else {
+							this.modules[row + r][col + c] = false;
+						}
+					}
+				}
+			}
+		}
+	},
+	
+	setupTypeNumber : function(test) {
+	
+		var bits = QRUtil.getBCHTypeNumber(this.typeNumber);
+	
+		for (var i = 0; i < 18; i++) {
+			var mod = (!test && ( (bits >> i) & 1) == 1);
+			this.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod;
+		}
+	
+		for (var i = 0; i < 18; i++) {
+			var mod = (!test && ( (bits >> i) & 1) == 1);
+			this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod;
+		}
+	},
+	
+	setupTypeInfo : function(test, maskPattern) {
+	
+		var data = (this.errorCorrectLevel << 3) | maskPattern;
+		var bits = QRUtil.getBCHTypeInfo(data);
+	
+		// vertical		
+		for (var i = 0; i < 15; i++) {
+	
+			var mod = (!test && ( (bits >> i) & 1) == 1);
+	
+			if (i < 6) {
+				this.modules[i][8] = mod;
+			} else if (i < 8) {
+				this.modules[i + 1][8] = mod;
+			} else {
+				this.modules[this.moduleCount - 15 + i][8] = mod;
+			}
+		}
+	
+		// horizontal
+		for (var i = 0; i < 15; i++) {
+	
+			var mod = (!test && ( (bits >> i) & 1) == 1);
+			
+			if (i < 8) {
+				this.modules[8][this.moduleCount - i - 1] = mod;
+			} else if (i < 9) {
+				this.modules[8][15 - i - 1 + 1] = mod;
+			} else {
+				this.modules[8][15 - i - 1] = mod;
+			}
+		}
+	
+		// fixed module
+		this.modules[this.moduleCount - 8][8] = (!test);
+	
+	},
+	
+	mapData : function(data, maskPattern) {
+		
+		var inc = -1;
+		var row = this.moduleCount - 1;
+		var bitIndex = 7;
+		var byteIndex = 0;
+		
+		for (var col = this.moduleCount - 1; col > 0; col -= 2) {
+	
+			if (col == 6) col--;
+	
+			while (true) {
+	
+				for (var c = 0; c < 2; c++) {
+					
+					if (this.modules[row][col - c] == null) {
+						
+						var dark = false;
+	
+						if (byteIndex < data.length) {
+							dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);
+						}
+	
+						var mask = QRUtil.getMask(maskPattern, row, col - c);
+	
+						if (mask) {
+							dark = !dark;
+						}
+						
+						this.modules[row][col - c] = dark;
+						bitIndex--;
+	
+						if (bitIndex == -1) {
+							byteIndex++;
+							bitIndex = 7;
+						}
+					}
+				}
+								
+				row += inc;
+	
+				if (row < 0 || this.moduleCount <= row) {
+					row -= inc;
+					inc = -inc;
+					break;
+				}
+			}
+		}
+		
+	}
+
+};
+
+QRCode.PAD0 = 0xEC;
+QRCode.PAD1 = 0x11;
+
+QRCode.createData = function(typeNumber, errorCorrectLevel, dataList) {
+	
+	var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel);
+	
+	var buffer = new QRBitBuffer();
+	
+	for (var i = 0; i < dataList.length; i++) {
+		var data = dataList[i];
+		buffer.put(data.mode, 4);
+		buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber) );
+		data.write(buffer);
+	}
+
+	// calc num max data.
+	var totalDataCount = 0;
+	for (var i = 0; i < rsBlocks.length; i++) {
+		totalDataCount += rsBlocks[i].dataCount;
+	}
+
+	if (buffer.getLengthInBits() > totalDataCount * 8) {
+		throw new Error("code length overflow. ("
+			+ buffer.getLengthInBits()
+			+ ">"
+			+  totalDataCount * 8
+			+ ")");
+	}
+
+	// end code
+	if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {
+		buffer.put(0, 4);
+	}
+
+	// padding
+	while (buffer.getLengthInBits() % 8 != 0) {
+		buffer.putBit(false);
+	}
+
+	// padding
+	while (true) {
+		
+		if (buffer.getLengthInBits() >= totalDataCount * 8) {
+			break;
+		}
+		buffer.put(QRCode.PAD0, 8);
+		
+		if (buffer.getLengthInBits() >= totalDataCount * 8) {
+			break;
+		}
+		buffer.put(QRCode.PAD1, 8);
+	}
+
+	return QRCode.createBytes(buffer, rsBlocks);
+}
+
+QRCode.createBytes = function(buffer, rsBlocks) {
+
+	var offset = 0;
+	
+	var maxDcCount = 0;
+	var maxEcCount = 0;
+	
+	var dcdata = new Array(rsBlocks.length);
+	var ecdata = new Array(rsBlocks.length);
+	
+	for (var r = 0; r < rsBlocks.length; r++) {
+
+		var dcCount = rsBlocks[r].dataCount;
+		var ecCount = rsBlocks[r].totalCount - dcCount;
+
+		maxDcCount = Math.max(maxDcCount, dcCount);
+		maxEcCount = Math.max(maxEcCount, ecCount);
+		
+		dcdata[r] = new Array(dcCount);
+		
+		for (var i = 0; i < dcdata[r].length; i++) {
+			dcdata[r][i] = 0xff & buffer.buffer[i + offset];
+		}
+		offset += dcCount;
+		
+		var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);
+		var rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1);
+
+		var modPoly = rawPoly.mod(rsPoly);
+		ecdata[r] = new Array(rsPoly.getLength() - 1);
+		for (var i = 0; i < ecdata[r].length; i++) {
+            var modIndex = i + modPoly.getLength() - ecdata[r].length;
+			ecdata[r][i] = (modIndex >= 0)? modPoly.get(modIndex) : 0;
+		}
+
+	}
+	
+	var totalCodeCount = 0;
+	for (var i = 0; i < rsBlocks.length; i++) {
+		totalCodeCount += rsBlocks[i].totalCount;
+	}
+
+	var data = new Array(totalCodeCount);
+	var index = 0;
+
+	for (var i = 0; i < maxDcCount; i++) {
+		for (var r = 0; r < rsBlocks.length; r++) {
+			if (i < dcdata[r].length) {
+				data[index++] = dcdata[r][i];
+			}
+		}
+	}
+
+	for (var i = 0; i < maxEcCount; i++) {
+		for (var r = 0; r < rsBlocks.length; r++) {
+			if (i < ecdata[r].length) {
+				data[index++] = ecdata[r][i];
+			}
+		}
+	}
+
+	return data;
+
+}
+
+//---------------------------------------------------------------------
+// QRMode
+//---------------------------------------------------------------------
+
+var QRMode = {
+	MODE_NUMBER :		1 << 0,
+	MODE_ALPHA_NUM : 	1 << 1,
+	MODE_8BIT_BYTE : 	1 << 2,
+	MODE_KANJI :		1 << 3
+};
+
+//---------------------------------------------------------------------
+// QRErrorCorrectLevel
+//---------------------------------------------------------------------
+ 
+var QRErrorCorrectLevel = {
+	L : 1,
+	M : 0,
+	Q : 3,
+	H : 2
+};
+
+//---------------------------------------------------------------------
+// QRMaskPattern
+//---------------------------------------------------------------------
+
+var QRMaskPattern = {
+	PATTERN000 : 0,
+	PATTERN001 : 1,
+	PATTERN010 : 2,
+	PATTERN011 : 3,
+	PATTERN100 : 4,
+	PATTERN101 : 5,
+	PATTERN110 : 6,
+	PATTERN111 : 7
+};
+
+//---------------------------------------------------------------------
+// QRUtil
+//---------------------------------------------------------------------
+ 
+var QRUtil = {
+
+    PATTERN_POSITION_TABLE : [
+	    [],
+	    [6, 18],
+	    [6, 22],
+	    [6, 26],
+	    [6, 30],
+	    [6, 34],
+	    [6, 22, 38],
+	    [6, 24, 42],
+	    [6, 26, 46],
+	    [6, 28, 50],
+	    [6, 30, 54],		
+	    [6, 32, 58],
+	    [6, 34, 62],
+	    [6, 26, 46, 66],
+	    [6, 26, 48, 70],
+	    [6, 26, 50, 74],
+	    [6, 30, 54, 78],
+	    [6, 30, 56, 82],
+	    [6, 30, 58, 86],
+	    [6, 34, 62, 90],
+	    [6, 28, 50, 72, 94],
+	    [6, 26, 50, 74, 98],
+	    [6, 30, 54, 78, 102],
+	    [6, 28, 54, 80, 106],
+	    [6, 32, 58, 84, 110],
+	    [6, 30, 58, 86, 114],
+	    [6, 34, 62, 90, 118],
+	    [6, 26, 50, 74, 98, 122],
+	    [6, 30, 54, 78, 102, 126],
+	    [6, 26, 52, 78, 104, 130],
+	    [6, 30, 56, 82, 108, 134],
+	    [6, 34, 60, 86, 112, 138],
+	    [6, 30, 58, 86, 114, 142],
+	    [6, 34, 62, 90, 118, 146],
+	    [6, 30, 54, 78, 102, 126, 150],
+	    [6, 24, 50, 76, 102, 128, 154],
+	    [6, 28, 54, 80, 106, 132, 158],
+	    [6, 32, 58, 84, 110, 136, 162],
+	    [6, 26, 54, 82, 110, 138, 166],
+	    [6, 30, 58, 86, 114, 142, 170]
+    ],
+
+    G15 : (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0),
+    G18 : (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0),
+    G15_MASK : (1 << 14) | (1 << 12) | (1 << 10)	| (1 << 4) | (1 << 1),
+
+    getBCHTypeInfo : function(data) {
+	    var d = data << 10;
+	    while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {
+		    d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) ) ); 	
+	    }
+	    return ( (data << 10) | d) ^ QRUtil.G15_MASK;
+    },
+
+    getBCHTypeNumber : function(data) {
+	    var d = data << 12;
+	    while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {
+		    d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) ) ); 	
+	    }
+	    return (data << 12) | d;
+    },
+
+    getBCHDigit : function(data) {
+
+	    var digit = 0;
+
+	    while (data != 0) {
+		    digit++;
+		    data >>>= 1;
+	    }
+
+	    return digit;
+    },
+
+    getPatternPosition : function(typeNumber) {
+	    return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];
+    },
+
+    getMask : function(maskPattern, i, j) {
+	    
+	    switch (maskPattern) {
+		    
+	    case QRMaskPattern.PATTERN000 : return (i + j) % 2 == 0;
+	    case QRMaskPattern.PATTERN001 : return i % 2 == 0;
+	    case QRMaskPattern.PATTERN010 : return j % 3 == 0;
+	    case QRMaskPattern.PATTERN011 : return (i + j) % 3 == 0;
+	    case QRMaskPattern.PATTERN100 : return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0;
+	    case QRMaskPattern.PATTERN101 : return (i * j) % 2 + (i * j) % 3 == 0;
+	    case QRMaskPattern.PATTERN110 : return ( (i * j) % 2 + (i * j) % 3) % 2 == 0;
+	    case QRMaskPattern.PATTERN111 : return ( (i * j) % 3 + (i + j) % 2) % 2 == 0;
+
+	    default :
+		    throw new Error("bad maskPattern:" + maskPattern);
+	    }
+    },
+
+    getErrorCorrectPolynomial : function(errorCorrectLength) {
+
+	    var a = new QRPolynomial([1], 0);
+
+	    for (var i = 0; i < errorCorrectLength; i++) {
+		    a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0) );
+	    }
+
+	    return a;
+    },
+
+    getLengthInBits : function(mode, type) {
+
+	    if (1 <= type && type < 10) {
+
+		    // 1 - 9
+
+		    switch(mode) {
+		    case QRMode.MODE_NUMBER 	: return 10;
+		    case QRMode.MODE_ALPHA_NUM 	: return 9;
+		    case QRMode.MODE_8BIT_BYTE	: return 8;
+		    case QRMode.MODE_KANJI  	: return 8;
+		    default :
+			    throw new Error("mode:" + mode);
+		    }
+
+	    } else if (type < 27) {
+
+		    // 10 - 26
+
+		    switch(mode) {
+		    case QRMode.MODE_NUMBER 	: return 12;
+		    case QRMode.MODE_ALPHA_NUM 	: return 11;
+		    case QRMode.MODE_8BIT_BYTE	: return 16;
+		    case QRMode.MODE_KANJI  	: return 10;
+		    default :
+			    throw new Error("mode:" + mode);
+		    }
+
+	    } else if (type < 41) {
+
+		    // 27 - 40
+
+		    switch(mode) {
+		    case QRMode.MODE_NUMBER 	: return 14;
+		    case QRMode.MODE_ALPHA_NUM	: return 13;
+		    case QRMode.MODE_8BIT_BYTE	: return 16;
+		    case QRMode.MODE_KANJI  	: return 12;
+		    default :
+			    throw new Error("mode:" + mode);
+		    }
+
+	    } else {
+		    throw new Error("type:" + type);
+	    }
+    },
+
+    getLostPoint : function(qrCode) {
+	    
+	    var moduleCount = qrCode.getModuleCount();
+	    
+	    var lostPoint = 0;
+	    
+	    // LEVEL1
+	    
+	    for (var row = 0; row < moduleCount; row++) {
+
+		    for (var col = 0; col < moduleCount; col++) {
+
+			    var sameCount = 0;
+			    var dark = qrCode.isDark(row, col);
+
+				for (var r = -1; r <= 1; r++) {
+
+				    if (row + r < 0 || moduleCount <= row + r) {
+					    continue;
+				    }
+
+				    for (var c = -1; c <= 1; c++) {
+
+					    if (col + c < 0 || moduleCount <= col + c) {
+						    continue;
+					    }
+
+					    if (r == 0 && c == 0) {
+						    continue;
+					    }
+
+					    if (dark == qrCode.isDark(row + r, col + c) ) {
+						    sameCount++;
+					    }
+				    }
+			    }
+
+			    if (sameCount > 5) {
+				    lostPoint += (3 + sameCount - 5);
+			    }
+		    }
+	    }
+
+	    // LEVEL2
+
+	    for (var row = 0; row < moduleCount - 1; row++) {
+		    for (var col = 0; col < moduleCount - 1; col++) {
+			    var count = 0;
+			    if (qrCode.isDark(row,     col    ) ) count++;
+			    if (qrCode.isDark(row + 1, col    ) ) count++;
+			    if (qrCode.isDark(row,     col + 1) ) count++;
+			    if (qrCode.isDark(row + 1, col + 1) ) count++;
+			    if (count == 0 || count == 4) {
+				    lostPoint += 3;
+			    }
+		    }
+	    }
+
+	    // LEVEL3
+
+	    for (var row = 0; row < moduleCount; row++) {
+		    for (var col = 0; col < moduleCount - 6; col++) {
+			    if (qrCode.isDark(row, col)
+					    && !qrCode.isDark(row, col + 1)
+					    &&  qrCode.isDark(row, col + 2)
+					    &&  qrCode.isDark(row, col + 3)
+					    &&  qrCode.isDark(row, col + 4)
+					    && !qrCode.isDark(row, col + 5)
+					    &&  qrCode.isDark(row, col + 6) ) {
+				    lostPoint += 40;
+			    }
+		    }
+	    }
+
+	    for (var col = 0; col < moduleCount; col++) {
+		    for (var row = 0; row < moduleCount - 6; row++) {
+			    if (qrCode.isDark(row, col)
+					    && !qrCode.isDark(row + 1, col)
+					    &&  qrCode.isDark(row + 2, col)
+					    &&  qrCode.isDark(row + 3, col)
+					    &&  qrCode.isDark(row + 4, col)
+					    && !qrCode.isDark(row + 5, col)
+					    &&  qrCode.isDark(row + 6, col) ) {
+				    lostPoint += 40;
+			    }
+		    }
+	    }
+
+	    // LEVEL4
+	    
+	    var darkCount = 0;
+
+	    for (var col = 0; col < moduleCount; col++) {
+		    for (var row = 0; row < moduleCount; row++) {
+			    if (qrCode.isDark(row, col) ) {
+				    darkCount++;
+			    }
+		    }
+	    }
+	    
+	    var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;
+	    lostPoint += ratio * 10;
+
+	    return lostPoint;		
+    }
+
+};
+
+
+//---------------------------------------------------------------------
+// QRMath
+//---------------------------------------------------------------------
+
+var QRMath = {
+
+	glog : function(n) {
+	
+		if (n < 1) {
+			throw new Error("glog(" + n + ")");
+		}
+		
+		return QRMath.LOG_TABLE[n];
+	},
+	
+	gexp : function(n) {
+	
+		while (n < 0) {
+			n += 255;
+		}
+	
+		while (n >= 256) {
+			n -= 255;
+		}
+	
+		return QRMath.EXP_TABLE[n];
+	},
+	
+	EXP_TABLE : new Array(256),
+	
+	LOG_TABLE : new Array(256)
+
+};
+	
+for (var i = 0; i < 8; i++) {
+	QRMath.EXP_TABLE[i] = 1 << i;
+}
+for (var i = 8; i < 256; i++) {
+	QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4]
+		^ QRMath.EXP_TABLE[i - 5]
+		^ QRMath.EXP_TABLE[i - 6]
+		^ QRMath.EXP_TABLE[i - 8];
+}
+for (var i = 0; i < 255; i++) {
+	QRMath.LOG_TABLE[QRMath.EXP_TABLE[i] ] = i;
+}
+
+//---------------------------------------------------------------------
+// QRPolynomial
+//---------------------------------------------------------------------
+
+function QRPolynomial(num, shift) {
+
+	if (num.length == undefined) {
+		throw new Error(num.length + "/" + shift);
+	}
+
+	var offset = 0;
+
+	while (offset < num.length && num[offset] == 0) {
+		offset++;
+	}
+
+	this.num = new Array(num.length - offset + shift);
+	for (var i = 0; i < num.length - offset; i++) {
+		this.num[i] = num[i + offset];
+	}
+}
+
+QRPolynomial.prototype = {
+
+	get : function(index) {
+		return this.num[index];
+	},
+	
+	getLength : function() {
+		return this.num.length;
+	},
+	
+	multiply : function(e) {
+	
+		var num = new Array(this.getLength() + e.getLength() - 1);
+	
+		for (var i = 0; i < this.getLength(); i++) {
+			for (var j = 0; j < e.getLength(); j++) {
+				num[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i) ) + QRMath.glog(e.get(j) ) );
+			}
+		}
+	
+		return new QRPolynomial(num, 0);
+	},
+	
+	mod : function(e) {
+	
+		if (this.getLength() - e.getLength() < 0) {
+			return this;
+		}
+	
+		var ratio = QRMath.glog(this.get(0) ) - QRMath.glog(e.get(0) );
+	
+		var num = new Array(this.getLength() );
+		
+		for (var i = 0; i < this.getLength(); i++) {
+			num[i] = this.get(i);
+		}
+		
+		for (var i = 0; i < e.getLength(); i++) {
+			num[i] ^= QRMath.gexp(QRMath.glog(e.get(i) ) + ratio);
+		}
+	
+		// recursive call
+		return new QRPolynomial(num, 0).mod(e);
+	}
+};
+
+//---------------------------------------------------------------------
+// QRRSBlock
+//---------------------------------------------------------------------
+
+function QRRSBlock(totalCount, dataCount) {
+	this.totalCount = totalCount;
+	this.dataCount  = dataCount;
+}
+
+QRRSBlock.RS_BLOCK_TABLE = [
+
+	// L
+	// M
+	// Q
+	// H
+
+	// 1
+	[1, 26, 19],
+	[1, 26, 16],
+	[1, 26, 13],
+	[1, 26, 9],
+	
+	// 2
+	[1, 44, 34],
+	[1, 44, 28],
+	[1, 44, 22],
+	[1, 44, 16],
+
+	// 3
+	[1, 70, 55],
+	[1, 70, 44],
+	[2, 35, 17],
+	[2, 35, 13],
+
+	// 4		
+	[1, 100, 80],
+	[2, 50, 32],
+	[2, 50, 24],
+	[4, 25, 9],
+	
+	// 5
+	[1, 134, 108],
+	[2, 67, 43],
+	[2, 33, 15, 2, 34, 16],
+	[2, 33, 11, 2, 34, 12],
+	
+	// 6
+	[2, 86, 68],
+	[4, 43, 27],
+	[4, 43, 19],
+	[4, 43, 15],
+	
+	// 7		
+	[2, 98, 78],
+	[4, 49, 31],
+	[2, 32, 14, 4, 33, 15],
+	[4, 39, 13, 1, 40, 14],
+	
+	// 8
+	[2, 121, 97],
+	[2, 60, 38, 2, 61, 39],
+	[4, 40, 18, 2, 41, 19],
+	[4, 40, 14, 2, 41, 15],
+	
+	// 9
+	[2, 146, 116],
+	[3, 58, 36, 2, 59, 37],
+	[4, 36, 16, 4, 37, 17],
+	[4, 36, 12, 4, 37, 13],
+	
+	// 10		
+	[2, 86, 68, 2, 87, 69],
+	[4, 69, 43, 1, 70, 44],
+	[6, 43, 19, 2, 44, 20],
+	[6, 43, 15, 2, 44, 16],
+
+	// 11
+	[4, 101, 81],
+	[1, 80, 50, 4, 81, 51],
+	[4, 50, 22, 4, 51, 23],
+	[3, 36, 12, 8, 37, 13],
+
+	// 12
+	[2, 116, 92, 2, 117, 93],
+	[6, 58, 36, 2, 59, 37],
+	[4, 46, 20, 6, 47, 21],
+	[7, 42, 14, 4, 43, 15],
+
+	// 13
+	[4, 133, 107],
+	[8, 59, 37, 1, 60, 38],
+	[8, 44, 20, 4, 45, 21],
+	[12, 33, 11, 4, 34, 12],
+
+	// 14
+	[3, 145, 115, 1, 146, 116],
+	[4, 64, 40, 5, 65, 41],
+	[11, 36, 16, 5, 37, 17],
+	[11, 36, 12, 5, 37, 13],
+
+	// 15
+	[5, 109, 87, 1, 110, 88],
+	[5, 65, 41, 5, 66, 42],
+	[5, 54, 24, 7, 55, 25],
+	[11, 36, 12],
+
+	// 16
+	[5, 122, 98, 1, 123, 99],
+	[7, 73, 45, 3, 74, 46],
+	[15, 43, 19, 2, 44, 20],
+	[3, 45, 15, 13, 46, 16],
+
+	// 17
+	[1, 135, 107, 5, 136, 108],
+	[10, 74, 46, 1, 75, 47],
+	[1, 50, 22, 15, 51, 23],
+	[2, 42, 14, 17, 43, 15],
+
+	// 18
+	[5, 150, 120, 1, 151, 121],
+	[9, 69, 43, 4, 70, 44],
+	[17, 50, 22, 1, 51, 23],
+	[2, 42, 14, 19, 43, 15],
+
+	// 19
+	[3, 141, 113, 4, 142, 114],
+	[3, 70, 44, 11, 71, 45],
+	[17, 47, 21, 4, 48, 22],
+	[9, 39, 13, 16, 40, 14],
+
+	// 20
+	[3, 135, 107, 5, 136, 108],
+	[3, 67, 41, 13, 68, 42],
+	[15, 54, 24, 5, 55, 25],
+	[15, 43, 15, 10, 44, 16],
+
+	// 21
+	[4, 144, 116, 4, 145, 117],
+	[17, 68, 42],
+	[17, 50, 22, 6, 51, 23],
+	[19, 46, 16, 6, 47, 17],
+
+	// 22
+	[2, 139, 111, 7, 140, 112],
+	[17, 74, 46],
+	[7, 54, 24, 16, 55, 25],
+	[34, 37, 13],
+
+	// 23
+	[4, 151, 121, 5, 152, 122],
+	[4, 75, 47, 14, 76, 48],
+	[11, 54, 24, 14, 55, 25],
+	[16, 45, 15, 14, 46, 16],
+
+	// 24
+	[6, 147, 117, 4, 148, 118],
+	[6, 73, 45, 14, 74, 46],
+	[11, 54, 24, 16, 55, 25],
+	[30, 46, 16, 2, 47, 17],
+
+	// 25
+	[8, 132, 106, 4, 133, 107],
+	[8, 75, 47, 13, 76, 48],
+	[7, 54, 24, 22, 55, 25],
+	[22, 45, 15, 13, 46, 16],
+
+	// 26
+	[10, 142, 114, 2, 143, 115],
+	[19, 74, 46, 4, 75, 47],
+	[28, 50, 22, 6, 51, 23],
+	[33, 46, 16, 4, 47, 17],
+
+	// 27
+	[8, 152, 122, 4, 153, 123],
+	[22, 73, 45, 3, 74, 46],
+	[8, 53, 23, 26, 54, 24],
+	[12, 45, 15, 28, 46, 16],
+
+	// 28
+	[3, 147, 117, 10, 148, 118],
+	[3, 73, 45, 23, 74, 46],
+	[4, 54, 24, 31, 55, 25],
+	[11, 45, 15, 31, 46, 16],
+
+	// 29
+	[7, 146, 116, 7, 147, 117],
+	[21, 73, 45, 7, 74, 46],
+	[1, 53, 23, 37, 54, 24],
+	[19, 45, 15, 26, 46, 16],
+
+	// 30
+	[5, 145, 115, 10, 146, 116],
+	[19, 75, 47, 10, 76, 48],
+	[15, 54, 24, 25, 55, 25],
+	[23, 45, 15, 25, 46, 16],
+
+	// 31
+	[13, 145, 115, 3, 146, 116],
+	[2, 74, 46, 29, 75, 47],
+	[42, 54, 24, 1, 55, 25],
+	[23, 45, 15, 28, 46, 16],
+
+	// 32
+	[17, 145, 115],
+	[10, 74, 46, 23, 75, 47],
+	[10, 54, 24, 35, 55, 25],
+	[19, 45, 15, 35, 46, 16],
+
+	// 33
+	[17, 145, 115, 1, 146, 116],
+	[14, 74, 46, 21, 75, 47],
+	[29, 54, 24, 19, 55, 25],
+	[11, 45, 15, 46, 46, 16],
+
+	// 34
+	[13, 145, 115, 6, 146, 116],
+	[14, 74, 46, 23, 75, 47],
+	[44, 54, 24, 7, 55, 25],
+	[59, 46, 16, 1, 47, 17],
+
+	// 35
+	[12, 151, 121, 7, 152, 122],
+	[12, 75, 47, 26, 76, 48],
+	[39, 54, 24, 14, 55, 25],
+	[22, 45, 15, 41, 46, 16],
+
+	// 36
+	[6, 151, 121, 14, 152, 122],
+	[6, 75, 47, 34, 76, 48],
+	[46, 54, 24, 10, 55, 25],
+	[2, 45, 15, 64, 46, 16],
+
+	// 37
+	[17, 152, 122, 4, 153, 123],
+	[29, 74, 46, 14, 75, 47],
+	[49, 54, 24, 10, 55, 25],
+	[24, 45, 15, 46, 46, 16],
+
+	// 38
+	[4, 152, 122, 18, 153, 123],
+	[13, 74, 46, 32, 75, 47],
+	[48, 54, 24, 14, 55, 25],
+	[42, 45, 15, 32, 46, 16],
+
+	// 39
+	[20, 147, 117, 4, 148, 118],
+	[40, 75, 47, 7, 76, 48],
+	[43, 54, 24, 22, 55, 25],
+	[10, 45, 15, 67, 46, 16],
+
+	// 40
+	[19, 148, 118, 6, 149, 119],
+	[18, 75, 47, 31, 76, 48],
+	[34, 54, 24, 34, 55, 25],
+	[20, 45, 15, 61, 46, 16]
+];
+
+QRRSBlock.getRSBlocks = function(typeNumber, errorCorrectLevel) {
+	
+	var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);
+	
+	if (rsBlock == undefined) {
+		throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + errorCorrectLevel);
+	}
+
+	var length = rsBlock.length / 3;
+	
+	var list = new Array();
+	
+	for (var i = 0; i < length; i++) {
+
+		var count = rsBlock[i * 3 + 0];
+		var totalCount = rsBlock[i * 3 + 1];
+		var dataCount  = rsBlock[i * 3 + 2];
+
+		for (var j = 0; j < count; j++) {
+			list.push(new QRRSBlock(totalCount, dataCount) );	
+		}
+	}
+	
+	return list;
+}
+
+QRRSBlock.getRsBlockTable = function(typeNumber, errorCorrectLevel) {
+
+	switch(errorCorrectLevel) {
+	case QRErrorCorrectLevel.L :
+		return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
+	case QRErrorCorrectLevel.M :
+		return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
+	case QRErrorCorrectLevel.Q :
+		return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
+	case QRErrorCorrectLevel.H :
+		return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
+	default :
+		return undefined;
+	}
+}
+
+//---------------------------------------------------------------------
+// QRBitBuffer
+//---------------------------------------------------------------------
+
+function QRBitBuffer() {
+	this.buffer = new Array();
+	this.length = 0;
+}
+
+QRBitBuffer.prototype = {
+
+	get : function(index) {
+		var bufIndex = Math.floor(index / 8);
+		return ( (this.buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;
+	},
+	
+	put : function(num, length) {
+		for (var i = 0; i < length; i++) {
+			this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);
+		}
+	},
+	
+	getLengthInBits : function() {
+		return this.length;
+	},
+	
+	putBit : function(bit) {
+	
+		var bufIndex = Math.floor(this.length / 8);
+		if (this.buffer.length <= bufIndex) {
+			this.buffer.push(0);
+		}
+	
+		if (bit) {
+			this.buffer[bufIndex] |= (0x80 >>> (this.length % 8) );
+		}
+	
+		this.length++;
+	}
+};
diff --git a/management/guns-admin/src/main/webapp/static/modular/system/tAgent/tAgent_info.js b/management/guns-admin/src/main/webapp/static/modular/system/tAgent/tAgent_info.js
index 179ae62..53f47c2 100644
--- a/management/guns-admin/src/main/webapp/static/modular/system/tAgent/tAgent_info.js
+++ b/management/guns-admin/src/main/webapp/static/modular/system/tAgent/tAgent_info.js
@@ -345,7 +345,4 @@
 
 $(function() {
     Feng.initValidator("tAgentInfoForm", TAgentInfoDlg.validateFields);
-    var carPhoto = new $WebUpload("fileNo");
-    carPhoto.setUploadBarId("progressBar");
-    carPhoto.init();
 });

--
Gitblit v1.7.1