Prechádzať zdrojové kódy

完善机构管理相关接口

xie.kaifeng 11 mesiacov pred
rodič
commit
6eeea64dc9
39 zmenil súbory, kde vykonal 1336 pridanie a 118 odobranie
  1. 1 1
      mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/InvestorController.java
  2. 22 1
      mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/MarketRunManagerController.java
  3. 78 7
      mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/OrganController.java
  4. 8 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IMarketRunManageService.java
  5. 16 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IOrganService.java
  6. 1 1
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IUseraccountService.java
  7. 158 9
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/MarketRunManageServiceImpl.java
  8. 607 4
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/OrganServiceImpl.java
  9. 4 3
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/TaaccountServiceImpl.java
  10. 7 14
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/TradingAccountServiceImpl.java
  11. 24 23
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/UseraccountServiceImpl.java
  12. 18 0
      mtp3-century/src/main/resources/mapper/GoodsMapper.xml
  13. 2 5
      mtp3-century/src/main/resources/mapper/LoginaccountMapper.xml
  14. 14 0
      mtp3-century/src/main/resources/mapper/MarketMapper.xml
  15. 16 1
      mtp3-century/src/main/resources/mapper/TaaccountMapper.xml
  16. 56 22
      mtp3-century/src/main/resources/mapper/UseraccountMapper.xml
  17. 1 1
      mtp3-common/src/main/java/com/muchinfo/mtp3common/enumtype/MessageType.java
  18. 2 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IGoodsMapper.java
  19. 2 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IMarketMapper.java
  20. 4 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/ITaaccountMapper.java
  21. 2 3
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IUseraccountMapper.java
  22. 10 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Accounttradeconfig.java
  23. 0 1
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Loginaccount.java
  24. 1 1
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Systemmanager.java
  25. 13 13
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/WskhUserinfo.java
  26. 12 2
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/investor/PersonalizationDelParam.java
  27. 86 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/marketrun/AccPosInfoVo.java
  28. 51 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/marketrun/MarketRunMemberResult.java
  29. 1 1
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/organ/AccountRiskConfigParam.java
  30. 33 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/organ/AccountTradeConfigTreeVo.java
  31. 35 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/organ/OrganInitAccountAddResult.java
  32. 1 1
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/organ/OrganRoleModifyParam.java
  33. 36 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/organ/SupportTradeConfigAddParam.java
  34. 1 1
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/organ/UserAccountReqParam.java
  35. 1 1
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/organ/UserAccountRoleParam.java
  36. 1 1
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/organ/UserAccountRspResult.java
  37. 4 1
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/organ/UserAccountSignlogResult.java
  38. 4 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/organ/son/OrganAddSonOrganParam.java
  39. 3 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/taaccount/TaAccountQueryResult.java

+ 1 - 1
mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/InvestorController.java

@@ -413,7 +413,7 @@ public class InvestorController {
     @ApiOperation("交易商管理-->个性化管理-->交易商个性化-->详情")
     @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
     @RequestMapping(method = RequestMethod.GET, value = "/tradeConfigView")
-    public AjaxResult<UserGroupTradeConfigVo> tradeConfigView(InvestorPersonViewParam param, HttpServletRequest request) {
+    public AjaxResult<UserGroupTradeConfigVo> tradeConfigView(PersonalizationDelParam param, HttpServletRequest request) {
         return iUseraccountService.tradeConfigView(param, request);
     }
 

+ 22 - 1
mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/MarketRunManagerController.java

@@ -4,6 +4,7 @@ import com.muchinfo.mtp3century.service.IMarketRunManageService;
 import com.muchinfo.mtp3common.vo.AjaxResult;
 import com.muchinfo.mtp3common.vo.PageResult;
 import com.muchinfo.mtp3pojos.vo.marketrun.*;
+import com.muchinfo.mtp3pojos.vo.query.position.PositionSheetResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
@@ -48,7 +49,7 @@ public class MarketRunManagerController {
     @RequestMapping(method = RequestMethod.GET, value = "/initInvestor")
     @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
     private AjaxResult<MarketRunInitInvestor> initInvestor(HttpServletRequest request) {
-        return iMarketRunManageService.initInvestor( request);
+        return iMarketRunManageService.initInvestor(request);
     }
 
     @ApiOperation("市场运行管理-->监控管理-->账户风险监控-->获取列表")
@@ -58,4 +59,24 @@ public class MarketRunManagerController {
         return iMarketRunManageService.investor(param, request);
     }
 
+    @ApiOperation("市场运行管理-->监控管理-->做市会员风险监控-->获取列表")
+    @RequestMapping(method = RequestMethod.GET, value = "/memberRisk")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    private AjaxResult<MarketRunMemberResult> memberRisk(MarketRunInvestorParam param, HttpServletRequest request) {
+        return iMarketRunManageService.memberRisk(param, request);
+    }
+
+    @ApiOperation("市场运行管理-->监控管理-->做市会员风险监控-->账户持仓汇总监控-->获取列表")
+    @RequestMapping(method = RequestMethod.GET, value = "/accpage")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    private AjaxResult<AccPosInfoVo> accpage(Long accountid, HttpServletRequest request) {
+        return iMarketRunManageService.accpage(accountid, request);
+    }
+
+    @ApiOperation("市场运行管理-->监控管理-->做市会员风险监控-->账户持仓汇总监控-->持仓明细")
+    @RequestMapping(method = RequestMethod.GET, value = "/queryHolderDetailMonitor")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    private AjaxResult<PositionSheetResult> queryHolderDetailMonitor(Long accountid, Long goodsid, HttpServletRequest request) {
+        return iMarketRunManageService.queryHolderDetailMonitor(accountid, goodsid, request);
+    }
 }

+ 78 - 7
mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/OrganController.java

@@ -1,16 +1,20 @@
 package com.muchinfo.mtp3century.controller;
 
-import com.muchinfo.mtp3century.service.IOrganService;
-import com.muchinfo.mtp3century.service.ISystemRoleService;
-import com.muchinfo.mtp3century.service.ISystemmanagerService;
-import com.muchinfo.mtp3century.service.ITaaccountService;
+import com.muchinfo.mtp3century.service.*;
+import com.muchinfo.mtp3century.utils.CenturyDecryptUtil;
+import com.muchinfo.mtp3common.enumtype.Constants;
+import com.muchinfo.mtp3common.enumtype.MessageType;
+import com.muchinfo.mtp3common.utils.JsonUtils;
 import com.muchinfo.mtp3common.vo.AjaxResult;
 import com.muchinfo.mtp3common.vo.PageResult;
 import com.muchinfo.mtp3pojos.entity.Accountriskconfig;
 import com.muchinfo.mtp3pojos.entity.Systemmanager;
 import com.muchinfo.mtp3pojos.vo.SystemRoleVo;
+import com.muchinfo.mtp3pojos.vo.investor.InvestorInitBZResult;
+import com.muchinfo.mtp3pojos.vo.investor.PersonalizationDelParam;
 import com.muchinfo.mtp3pojos.vo.investor.InvestorTaAccountUpdateParam;
 import com.muchinfo.mtp3pojos.vo.organ.*;
+import com.muchinfo.mtp3pojos.vo.organ.son.OrganAddSonOrganParam;
 import com.muchinfo.mtp3pojos.vo.systemuser.SystemUserVo;
 import com.muchinfo.mtp3pojos.vo.taaccount.TaAccountQueryParam;
 import com.muchinfo.mtp3pojos.vo.taaccount.TaAccountQueryResult;
@@ -18,6 +22,8 @@ import com.muchinfo.mtp3pojos.vo.taaccount.TaAccountQueryResultDetail;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -27,15 +33,17 @@ import javax.servlet.http.HttpServletRequest;
 @RequestMapping("/organDetail")
 @Api(value = "机构管理API", description = "机构管理")
 public class OrganController {
+    private final Logger log = LoggerFactory.getLogger(this.getClass());
     @Resource
     private IOrganService iOrganService;
-
     @Resource
     private ITaaccountService iTaaccountService;
     @Resource
     private ISystemmanagerService iSystemmanagerService;
     @Resource
     private ISystemRoleService iSystemRoleService;
+    @Resource
+    private IUseraccountService iUseraccountService;
 
     @ApiOperation("会员机构管理-->机构管理-->系统角色管理-->获取角色列表")
     @RequestMapping(method = RequestMethod.GET, value = "/querysystemrole")
@@ -97,8 +105,14 @@ public class OrganController {
     @ApiOperation("会员机构管理-->机构管理-->机构资料管理-->资金账户-->修改")
     @RequestMapping(method = RequestMethod.POST, value = "/taaccountedit")
     @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
-    private AjaxResult taaccountedit(@RequestBody InvestorTaAccountUpdateParam param, HttpServletRequest request) {
-        return iTaaccountService.edit(param, request);
+    private AjaxResult taaccountedit(@RequestBody String param, HttpServletRequest request) {
+        try {
+            InvestorTaAccountUpdateParam current = JsonUtils.toBean(CenturyDecryptUtil.decryptForJson(param, request), InvestorTaAccountUpdateParam.class);
+            return iTaaccountService.edit(current, request);
+        } catch (Exception e) {
+            log.error("机构资料管理-->资金账户修改失败,失败原因:" + e);
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM002.getCode(), request.getHeader("Accept-Language"));
+        }
     }
 
     @ApiOperation("会员机构管理-->机构管理-->机构资料管理-->资金账户-->重置密码")
@@ -255,4 +269,61 @@ public class OrganController {
     private AjaxResult delaccountriskconfig(Long accountid, HttpServletRequest request) {
         return iOrganService.delaccountriskconfig(accountid, request);
     }
+
+    @ApiOperation("会员机构管理-->机构管理-->机构资料管理-->修改")
+    @RequestMapping(method = RequestMethod.POST, value = "/editorgan")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    private AjaxResult editsonorgan(@RequestBody OrganAddSonOrganParam param, HttpServletRequest request) {
+        return iOrganService.editorgan(param, request);
+    }
+
+    @ApiOperation("会员机构管理-->机构管理-->账户个性化设置--> 获取树结构")
+    @RequestMapping(method = RequestMethod.GET, value = "/createTree")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    private AjaxResult createTree(HttpServletRequest request) {
+        return iOrganService.createTree(request);
+    }
+
+    @ApiOperation("会员机构管理-->机构管理-->账户个性化设置--> 详情")
+    @RequestMapping(method = RequestMethod.GET, value = "/tradeConfigView")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    private AjaxResult tradeConfigView(PersonalizationDelParam param, HttpServletRequest request) {
+        return iOrganService.tradeConfigView(param, request);
+    }
+
+    @ApiOperation("会员机构管理-->机构管理-->账户个性化设置-->修改-->初始化保证金类别")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    @RequestMapping(method = RequestMethod.GET, value = "/initBZList")
+    public AjaxResult<InvestorInitBZResult> initBZList(Long goodsid, HttpServletRequest request) {
+        return iUseraccountService.initBZList(goodsid, request);
+    }
+
+    @ApiOperation("会员机构管理-->机构管理-->账户个性化设置-->修改")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    @RequestMapping(method = RequestMethod.POST, value = "/tradeConfigEdit")
+    public AjaxResult tradeConfigEdit(@RequestBody SupportTradeConfigAddParam param, HttpServletRequest request) {
+        return iOrganService.tradeConfigEdit(param, request);
+    }
+
+    @ApiOperation("会员机构管理-->机构管理-->账户个性化设置-->删除")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    @RequestMapping(method = RequestMethod.GET, value = "/tradeConfigDelete")
+    public AjaxResult tradeConfigDelete(PersonalizationDelParam param, HttpServletRequest request) {
+        return iOrganService.tradeConfigDelete(param, request);
+    }
+
+    @ApiOperation("会员机构管理-->机构管理-->账户个性化设置-->新增初始化列表信息")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    @RequestMapping(method = RequestMethod.GET, value = "/loadSelectOption")
+    public AjaxResult<OrganInitAccountAddResult> loadSelectOption(PersonalizationDelParam param, HttpServletRequest request) {
+        return iOrganService.loadSelectOption(param, request);
+    }
+
+    @ApiOperation("会员机构管理-->机构管理-->账户个性化设置-->新增")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    @RequestMapping(method = RequestMethod.POST, value = "/tradeConfigAdd")
+    public AjaxResult tradeConfigAdd(@RequestBody SupportTradeConfigAddParam param, HttpServletRequest request) {
+        return iOrganService.tradeConfigAdd(param, request);
+    }
+
 }

+ 8 - 0
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IMarketRunManageService.java

@@ -3,6 +3,8 @@ package com.muchinfo.mtp3century.service;
 import com.muchinfo.mtp3common.vo.AjaxResult;
 import com.muchinfo.mtp3common.vo.PageResult;
 import com.muchinfo.mtp3pojos.vo.marketrun.*;
+import com.muchinfo.mtp3pojos.vo.query.position.PositionSheetParam;
+import com.muchinfo.mtp3pojos.vo.query.position.PositionSheetResult;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -16,4 +18,10 @@ public interface IMarketRunManageService {
     AjaxResult<MarketRunInitInvestor> initInvestor(HttpServletRequest request);
 
     AjaxResult<MarketRunInvestorResult> investor(MarketRunInvestorParam param, HttpServletRequest request);
+
+    AjaxResult<MarketRunMemberResult> memberRisk(MarketRunInvestorParam param, HttpServletRequest request);
+
+    AjaxResult<AccPosInfoVo> accpage(Long accountid, HttpServletRequest request);
+
+    AjaxResult<PositionSheetResult> queryHolderDetailMonitor(Long accountid, Long goodsid, HttpServletRequest request);
 }

+ 16 - 0
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IOrganService.java

@@ -3,7 +3,9 @@ package com.muchinfo.mtp3century.service;
 import com.muchinfo.mtp3common.vo.AjaxResult;
 import com.muchinfo.mtp3common.vo.PageResult;
 import com.muchinfo.mtp3pojos.entity.Accountriskconfig;
+import com.muchinfo.mtp3pojos.vo.investor.PersonalizationDelParam;
 import com.muchinfo.mtp3pojos.vo.organ.*;
+import com.muchinfo.mtp3pojos.vo.organ.son.OrganAddSonOrganParam;
 import com.muchinfo.mtp3pojos.vo.taaccount.TaAccountQueryParam;
 import com.muchinfo.mtp3pojos.vo.taaccount.TaAccountQueryResult;
 
@@ -57,4 +59,18 @@ public interface IOrganService {
     AjaxResult editaccountriskconfig(AccountRiskConfigAddParam vo, HttpServletRequest request);
 
     AjaxResult delaccountriskconfig(Long accountid, HttpServletRequest request);
+
+    AjaxResult editorgan(OrganAddSonOrganParam param, HttpServletRequest request);
+
+    AjaxResult createTree(HttpServletRequest request);
+
+    AjaxResult tradeConfigView(PersonalizationDelParam param, HttpServletRequest request);
+
+    AjaxResult tradeConfigEdit(SupportTradeConfigAddParam param, HttpServletRequest request);
+
+    AjaxResult tradeConfigDelete(PersonalizationDelParam param, HttpServletRequest request);
+
+    AjaxResult<OrganInitAccountAddResult> loadSelectOption(PersonalizationDelParam param, HttpServletRequest request);
+
+    AjaxResult tradeConfigAdd(SupportTradeConfigAddParam param, HttpServletRequest request);
 }

+ 1 - 1
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IUseraccountService.java

@@ -70,7 +70,7 @@ public interface IUseraccountService extends IService<Useraccount> {
 
     AjaxResult deleteTraderConfig(InvestorPersonDeleteParam param, HttpServletRequest request);
 
-    AjaxResult<UserGroupTradeConfigVo> tradeConfigView(InvestorPersonViewParam param, HttpServletRequest request);
+    AjaxResult<UserGroupTradeConfigVo> tradeConfigView(PersonalizationDelParam param, HttpServletRequest request);
 
     AjaxResult<AccountTradeConfigTreeVo> getAccTradeTree(HttpServletRequest request);
 

+ 158 - 9
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/MarketRunManageServiceImpl.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.protobuf.InvalidProtocolBufferException;
+import com.muchinfo.mtp.proto.AccountRedis;
 import com.muchinfo.mtp.proto.Common;
 import com.muchinfo.mtp.proto.SystemMI1;
 import com.muchinfo.mtp3century.service.ICommonService;
@@ -21,14 +22,15 @@ import com.muchinfo.mtp3common.vo.AjaxResult;
 import com.muchinfo.mtp3common.vo.Calculator;
 import com.muchinfo.mtp3common.vo.PageResult;
 import com.muchinfo.mtp3common.vo.ProtoHelper;
-import com.muchinfo.mtp3interface.mapper.ISystemmanagerMapper;
-import com.muchinfo.mtp3interface.mapper.ITaaccountMapper;
-import com.muchinfo.mtp3interface.mapper.ITradeOrderdetailMapper;
-import com.muchinfo.mtp3interface.mapper.IUseraccountMapper;
+import com.muchinfo.mtp3interface.mapper.*;
+import com.muchinfo.mtp3pojos.entity.Goods;
+import com.muchinfo.mtp3pojos.entity.Market;
 import com.muchinfo.mtp3pojos.entity.Systemmanager;
 import com.muchinfo.mtp3pojos.entity.Useraccount;
 import com.muchinfo.mtp3pojos.vo.ProtoErrorCodes;
 import com.muchinfo.mtp3pojos.vo.marketrun.*;
+import com.muchinfo.mtp3pojos.vo.query.position.PositionSheetParam;
+import com.muchinfo.mtp3pojos.vo.query.position.PositionSheetResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.amqp.core.Message;
@@ -41,10 +43,7 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
+import java.util.*;
 
 @Service
 public class MarketRunManageServiceImpl implements IMarketRunManageService {
@@ -65,6 +64,12 @@ public class MarketRunManageServiceImpl implements IMarketRunManageService {
     private ITaaccountMapper taaccountMapper;
     @Resource
     private IUseraccountMapper iUseraccountMapper;
+    @Resource
+    private IGoodsMapper iGoodsMapper;
+    @Resource
+    private IMarketMapper iMarketMapper;
+    @Resource
+    private QueryServiceImpl queryService;
 
     @Override
     public PageResult<MarketRunLoginUserResult> queryUserLogin(String loginid, Integer pageNum, Integer pageSize, HttpServletRequest request) {
@@ -186,11 +191,155 @@ public class MarketRunManageServiceImpl implements IMarketRunManageService {
             List<MarketRunInvestorResult> result = getAccountRisk(param, 1, user);
             return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), result);
         } catch (Exception e) {
-            log.error("机构下拉查询加载 会员、经纪人信息失败,失败原因:" + e);
+            log.error("账户风险监控信息加载失败,失败原因:" + e);
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM002.getCode(), request.getHeader("Accept-Language"));
+        }
+    }
+
+    @Override
+    public AjaxResult<MarketRunMemberResult> memberRisk(MarketRunInvestorParam param, HttpServletRequest request) {
+        try {
+            Systemmanager user = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+            param.setSearchtype(0);
+            List<MarketRunInvestorResult> result = getAccountRisk(param, 2, user);
+            return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), result);
+        } catch (Exception e) {
+            log.error("做市会员监控信息加载失败,失败原因:" + e);
             return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM002.getCode(), request.getHeader("Accept-Language"));
         }
     }
 
+    @Override
+    public AjaxResult<AccPosInfoVo> accpage(Long accountid, HttpServletRequest request) {
+        try {
+            List<AccPosInfoVo> results = new ArrayList<>();
+            byte[] valuebts = redisServiceUtil.getBytes("risk:" + accountid);
+            AccountRedis.AccRiskInfo accRiskInfo = null;
+            if (valuebts != null) {
+                accRiskInfo = AccountRedis.AccRiskInfo.newBuilder().mergeFrom(valuebts).build();
+                log.info("risk:" + accountid + "--------------accRiskInfo:" + accRiskInfo);
+
+                TaaccountMonitorVo vo = taaccountMapper.getMonitorInvestor(accountid, null);
+                results = generateAccPosInfo(accRiskInfo, null, vo, accountid);
+            }
+            return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), results);
+        } catch (Exception e) {
+            log.error("设置风险率失败,请检查!失败原因:" + e);
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM002.getCode(), request.getHeader("Accept-Language"));
+        }
+    }
+
+    @Override
+    public AjaxResult<PositionSheetResult> queryHolderDetailMonitor(Long accountid, Long goodsid,  HttpServletRequest request) {
+        PositionSheetParam param = new PositionSheetParam();
+        param.setAccountId(accountid.toString());
+        param.setGoodsId(goodsid);
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        //监控不会传市场id,这边查询一下
+        if (param.getGoodsId() != null && param.getGoodsId() > 0) {
+            Goods g = iGoodsMapper.selectOne(new QueryWrapper<Goods>().eq("goodsid",param.getGoodsId()));
+            param.setMarketId(g.getMarketid());
+        }
+        if(queryService.checkMarketAuth(systemmanager, param.getMarketId(), param.getOrgztypes())){
+            return AjaxResult.error(Constants.Error_Code_Design,MessageType.QUERY_ERROR_CODE_004.getCode(), request.getHeader("Accept-Language"));
+        }
+        if (systemmanager.getReletype() != 1){
+            param.setAreaUserid(systemmanager.getAreauserid());
+        }
+
+        List<PositionSheetResult> results = iTradeOrderdetailMapper.queryTradeHolderDetailList(param);
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), results);
+    }
+
+    private List<AccPosInfoVo> generateAccPosInfo(AccRiskInfo accRiskInfo, AccPosInfoVo param, TaaccountMonitorVo taVo, Long accountid) {
+        List<AccPosInfoVo> resultList = new ArrayList<>();
+        List<AccountRedis.AccPosInfo> list = accRiskInfo.getPOSINFOList();
+        AccountRedis.AccPosInfo l = null;
+        int size = list.size();
+        List<Long> ids = new ArrayList<>();
+        for (AccountRedis.AccPosInfo accPosInfo : list) {
+            l = accPosInfo;
+
+            // 根据商品条件过滤
+            if (param != null && param.getGoodsid() != null && !param.getGoodsid().equals((long) l.getGOODSID())) {
+                continue;
+            }
+
+            ids.add((long) l.getGOODSID());
+            AccPosInfoVo avo = new AccPosInfoVo();
+            avo.setGoodsid((long) l.getGOODSID());
+            avo.setMargin(l.getMARGIN());
+            avo.setBuy_hold_qty(l.getBUYHOLDQTY());
+            avo.setBuy_hold_value(l.getBUYHOLDVALUE());
+            avo.setTotal_float_pl(0.0);
+            if (l.hasBUYFLOATPL()) {
+                avo.setBuy_float_pl(l.getBUYFLOATPL());
+                avo.setTotal_float_pl(l.getBUYFLOATPL());
+            }
+            avo.setSell_hold_qty(l.getSELLHOLDQTY());
+            avo.setSell_hold_value(l.getSELLHOLDVALUE());
+            if (l.hasSELLFLOATPL()) {
+                avo.setSell_float_pl(l.getSELLFLOATPL());
+                avo.setTotal_float_pl(avo.getTotal_float_pl() + l.getSELLFLOATPL());
+            }
+            avo.setQuote_price_buy(l.getQUOTEPRICEBUY());
+            avo.setQuote_price_sell(l.getQUOTEPRICESELL());
+            if (l.hasQUOTEPRICELAST())
+                avo.setQuote_price_last(l.getQUOTEPRICELAST());
+
+            //资金账户
+            avo.setAccountid(accountid);
+            //用户名称
+            avo.setUsername(accountid + "/" + taVo.getLoginid() + "/" + taVo.getUseraccountname());
+            //上级机构
+            avo.setParentname(taVo.getParentusername());
+            //占用保证金
+            avo.setMargin((BigDecimal.valueOf(accRiskInfo.getSumMargin()).doubleValue()));
+
+            resultList.add(avo);
+        }
+        List<Goods> goods = iGoodsMapper.selectList(new QueryWrapper<Goods>().in("goodsid", ids));
+        Map<Long, String> gnames = new HashMap<>();
+        goods.forEach(pg -> {
+            gnames.put(pg.getGoodsid(), pg.getGoodsname());
+        });
+
+        Map<Long, Integer> dp = new HashMap<>();
+        goods.forEach(pg -> {
+            dp.put(pg.getGoodsid(), pg.getDecimalplace());
+        });
+
+        Map<Long, Integer> tm = new HashMap<>();
+        for (Goods g : goods) {
+            Market m = iMarketMapper.selectOne(new QueryWrapper<Market>().eq("marketid", g.getMarketid()));
+            if (m != null) {
+                tm.put(g.getGoodsid(), m.getTrademode());
+            }
+        }
+        Map<Long, BigDecimal> gunits = new HashMap<>();
+        goods.forEach(pg -> {
+            gunits.put(pg.getGoodsid(), pg.getAgreeunit());
+        });
+
+        for (AccPosInfoVo accPosInfoVo : resultList) {
+            accPosInfoVo.setGoodsname(gnames.get(accPosInfoVo.getGoodsid()));
+            accPosInfoVo.setDecimalplace(dp.get(accPosInfoVo.getGoodsid()));
+            accPosInfoVo.setTrademode(tm.get(accPosInfoVo.getGoodsid()));
+            // 格式化均价 金额/(数量*合约乘数)
+            int goodsDP = dp.get(accPosInfoVo.getGoodsid()) + 1;
+            BigDecimal goodsAU = gunits.get(accPosInfoVo.getGoodsid());
+            if (accPosInfoVo.getBuy_hold_qty() > 0) {
+                accPosInfoVo.setBuy_avg_price(BigDecimal.valueOf(accPosInfoVo.getBuy_hold_value()).divide(
+                        new BigDecimal(accPosInfoVo.getBuy_hold_qty()).multiply(goodsAU), goodsDP, RoundingMode.HALF_UP).doubleValue());
+            }
+            if (accPosInfoVo.getSell_hold_qty() > 0) {
+                accPosInfoVo.setSell_avg_price(BigDecimal.valueOf(accPosInfoVo.getSell_hold_value()).divide(
+                        new BigDecimal(accPosInfoVo.getSell_hold_qty()).multiply(goodsAU), goodsDP, RoundingMode.HALF_UP).doubleValue());
+            }
+        }
+        return resultList;
+    }
+
     private List<MarketRunInvestorResult> getAccountRisk(MarketRunInvestorParam param, int type, Systemmanager user) throws InvalidProtocolBufferException {
         List<MarketRunInvestorResult> resultList = new ArrayList<>();
         Double risk = param.getRisk() == null ? 50.0 : param.getRisk();

+ 607 - 4
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/OrganServiceImpl.java

@@ -22,7 +22,12 @@ import com.muchinfo.mtp3pojos.entity.*;
 import com.muchinfo.mtp3pojos.vo.ProtoErrorCodes;
 import com.muchinfo.mtp3pojos.vo.common.OrganSelectParam;
 import com.muchinfo.mtp3pojos.vo.common.OrganSelectResult;
+import com.muchinfo.mtp3pojos.vo.investor.FeesConfigVo;
+import com.muchinfo.mtp3pojos.vo.investor.InvestorInitBZResult;
+import com.muchinfo.mtp3pojos.vo.investor.PersonalizationDelParam;
+import com.muchinfo.mtp3pojos.vo.investor.RulesConfigVo;
 import com.muchinfo.mtp3pojos.vo.organ.*;
+import com.muchinfo.mtp3pojos.vo.organ.son.OrganAddSonOrganParam;
 import com.muchinfo.mtp3pojos.vo.taaccount.TaAccountMarketVo;
 import com.muchinfo.mtp3pojos.vo.taaccount.TaAccountQueryParam;
 import com.muchinfo.mtp3pojos.vo.taaccount.TaAccountQueryResult;
@@ -127,6 +132,10 @@ public class OrganServiceImpl implements IOrganService {
     private IMembergoodslimitconfigMapper iMembergoodslimitconfigMapper;
     @Resource
     private IAccountriskconfigMapper iAccountriskconfigMapper;
+    @Resource
+    private IAccounttradeconfigMapper iAccounttradeconfigMapper;
+    @Resource
+    private IUsergroupdetailMapper iUsergroupdetailMapper;
 
     @Override
     public PageResult<UserAccountRspResult> queryByPage(UserAccountReqParam userInfoReqParam, HttpServletRequest request) {
@@ -254,7 +263,6 @@ public class OrganServiceImpl implements IOrganService {
     public PageResult<TaAccountQueryResult> organtaaccount(TaAccountQueryParam param, HttpServletRequest request) {
         IPage<TaAccountQueryResult> page = new Page<>(param.getPageNum(), param.getPageSize());
         IPage<TaAccountQueryResult> userAccountVos = iTaaccountMapper.queryTaAccountPage(page, param);
-        ;
         //设置风险率
         getRiskFromRedis(userAccountVos.getRecords());
         PageResult<TaAccountQueryResult> pageResult = new PageResult<>();
@@ -604,8 +612,8 @@ public class OrganServiceImpl implements IOrganService {
         }
 
         if (role <= 5) {
-            Integer divide = redisServiceUtil.getCacheMapValue(Constants.REDIS_HEADER_SYSPARAM, SysConstants.SYSPARAM_CODE_DIVIDE);
-            result.setDividetype(divide);
+            String divide = redisServiceUtil.getCacheMapValue(Constants.REDIS_HEADER_SYSPARAM, SysConstants.SYSPARAM_CODE_DIVIDE);
+            result.setDividetype(Integer.valueOf(divide));
         } else if (role == 17) {
             //加载物流地址
             Arearole a = iArearoleMapper.selectOne(new QueryWrapper<Arearole>().eq("userid", userid)
@@ -772,7 +780,7 @@ public class OrganServiceImpl implements IOrganService {
                 List<Integer> roletype = new ArrayList<>();
                 roletype.add(6);
                 roletype.add(9);
-                iRoleuserMapper.delete(new QueryWrapper<Roleuser>().eq("userid", areaid).in("roletype", roletype));
+                iArearoleMapper.delete(new QueryWrapper<Arearole>().eq("userid", areaid).in("roletype", roletype));
                 iArearoledivideconfigMapper.delete(new QueryWrapper<Arearoledivideconfig>().eq("userid", areaid).in("roletype", roletype));
 
                 Systemmanager admin = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("areauserid", areaid).eq("isdefault", 1));
@@ -1127,6 +1135,601 @@ public class OrganServiceImpl implements IOrganService {
         return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
     }
 
+    @Override
+    public AjaxResult editorgan(OrganAddSonOrganParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+
+        Useraccount organ = iUseraccountMapper.selectOne(new QueryWrapper<Useraccount>().eq("userid",param.getUserid()));
+
+        //当为特许经销商时,因为新增特许经销商的时候,默认加了一个名称一样的报价商,现在修改特许经销商名称时,报价商名称也一起修改
+        if (param.getUsertype() == 2) {
+            Long num = iArearoleMapper.selectCount(new QueryWrapper<Arearole>()
+                    .eq("userid", organ.getUserid())
+                    .eq("roletype", 13));
+            if (num.intValue() > 0) {
+                Quoter qt = iQuoterMapper.selectOne(new QueryWrapper<Quoter>()
+                        .eq("areauserid", organ.getUserid())
+                        .eq("quotername", organ.getAccountname()));
+                if (null != qt && null != qt.getQuoterid()) {
+                    //修改为修改后的机构名称
+                    qt.setQuotername(param.getAccountname());
+                    qt.setModifytime(new Date());
+                    qt.setModifierid(systemmanager.getAutoid());
+                    iQuoterMapper.updateById(qt);
+                }
+            }
+        }
+
+        organ.setAccountname(param.getAccountname());
+        organ.setModifierid(systemmanager.getAutoid());
+        organ.setModifytime(new Date());
+        if (param.getRefereeuserid() != null) {
+            organ.setRefereeuserid(param.getRefereeuserid());
+        }
+        iUseraccountMapper.update(organ,new QueryWrapper<Useraccount>().eq("userid",organ.getUserid()));
+
+        Systemparam sysparm = iSystemparamMapper.selectOne(new QueryWrapper<Systemparam>().eq("paraCode", Constants.SYSPARAM_CARD_NO));
+
+        Userinfo ui = iUserinfoMapper.selectOne(new QueryWrapper<Userinfo>().eq("userid",param.getUserid()));
+        if (!ui.getCardnum().equals(param.getCardnum())) {
+            Map<String, Object> map = new HashMap<>();
+            String card = param.getCardnum();
+            if (card != null && !card.isEmpty()) {
+                card = EncryptionUtils.encryptByAES(param.getCardnum());
+                List<Userinfo> uiList = iUserinfoMapper.selectList(new QueryWrapper<Userinfo>()
+                        .eq("cardnum", card)
+                        .eq("userid", param.getUserid())
+                        .eq("userstatus",1)
+                );
+                if (CollectionUtils.isNotEmpty(uiList)) {
+                    if (sysparm == null || "1".equals(sysparm.getParamvalue())) {
+                        return AjaxResult.error(Constants.Error_Code_Design, MessageType.ORGAN_ERROR_CODE_011.getCode(), request.getHeader("Accept-Language"));
+                    }
+                }
+            }
+        }
+        if (ui.getUserinfotype() == 2 && !ui.getCustomername().equals(param.getCustomername().trim())) {
+            //机构类型为企业需 名称唯一
+            Long c3 = iUserinfoMapper.selectCount(new QueryWrapper<Userinfo>()
+                    .eq("customername", param.getCustomername().trim())
+                    .eq("userinfotype", 2));
+            if (c3 > 0) {
+                return AjaxResult.error(Constants.Error_Code_Design, MessageType.ORGAN_ERROR_CODE_017.getCode(), request.getHeader("Accept-Language"));
+            }
+        }
+        ui.setAddress(param.getAddress());
+        ui.setBiznature(param.getBiznature());
+        ui.setCardbackphotourl(param.getCardbackphotourl());
+        ui.setCardfrontphotourl(param.getCardfrontphotourl());
+        ui.setCardnum(param.getCardnum());
+        ui.setCardtypeid(param.getCardtypeid());
+        ui.setCityid(param.getCityid());
+        ui.setCompany(param.getCompany());
+        ui.setCustomername(param.getCustomername());
+        ui.setDistrictid(param.getDistrictid());
+        ui.setEmail(param.getEmail());
+        ui.setMobile(param.getMobile());
+        ui.setModifierid(systemmanager.getAutoid());
+        ui.setModifiertime(new Date());
+        ui.setContactname(param.getContactname());
+        ui.setPostalcode(param.getPostalcode());
+        ui.setProvinceid(param.getProvinceid());
+        ui.setQq(param.getQq());
+        ui.setRemark(param.getRemark());
+        ui.setSex(param.getSex());
+        ui.setTelphone(param.getTelphone());
+        ui.setLegalcardbackphotourl(param.getLegalcardbackphotourl());
+        ui.setLegalpersonname(param.getLegalpersonname());
+        ui.setLegalcardfrontphotourl(param.getLegalcardfrontphotourl());
+        ui.setWechat(param.getWechat());
+        ui.setAttachment1(param.getAttachment1());
+        ui.setAttachment2(param.getAttachment2());
+
+        ui = (Userinfo) SensitiveEncryptUtil.sensitiveEncrypt(ui, null);
+        iUserinfoMapper.update(ui,new QueryWrapper<Userinfo>().eq("userid",ui.getUserid()));
+
+        if (organ.getUsertype() != 4) {
+            Systemmanager admin = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("autoid",param.getAutoid()));
+            if (admin != null && !admin.getUsername().equals(param.getUsername())) {
+                admin.setUsername(param.getUsername());
+                iSystemmanagerMapper.updateById(admin);
+            }
+        }
+
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
+    }
+
+    @Override
+    public AjaxResult<AccountTradeConfigTreeVo> createTree(HttpServletRequest request) {
+        List<Accounttradeconfig> list = iAccounttradeconfigMapper.getListForTree(0L);
+
+        if(list == null || list.isEmpty()){
+            return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"),list);
+        }
+
+        //先按类型
+        Map<Integer, List<Accounttradeconfig>> type = new HashMap<>();
+        for(Accounttradeconfig fig:list){
+            Integer key = fig.getTradetype();
+            if(type.containsKey(key)){
+                type.get(key).add(fig);
+            }else{
+                List<Accounttradeconfig> temp = new ArrayList<>();
+                temp.add(fig);
+                type.put(key, temp);
+            }
+        }
+        //用户userid
+        Map<Integer, Map<Long, List<Accounttradeconfig>>> users = new HashMap<>();
+        for(Map.Entry<Integer, List<Accounttradeconfig>> entry:type.entrySet()){
+            Map<Long, List<Accounttradeconfig>> market = new HashMap<>();
+            List<Accounttradeconfig> temp = entry.getValue();
+            for(Accounttradeconfig fig:temp){
+                Long key = fig.getUserid();
+                if(market.containsKey(key)){
+                    market.get(key).add(fig);
+                }else{
+                    List<Accounttradeconfig> _temp = new ArrayList<>();
+                    _temp.add(fig);
+                    market.put(key, _temp);
+                }
+            }
+            users.put(entry.getKey(), market);
+        }
+        //资金账户
+        Map<Integer, Map<Long, Map<Long, List<Accounttradeconfig>>>> user = new HashMap<>();
+        for(Map.Entry<Integer, Map<Long, List<Accounttradeconfig>>> entry:users.entrySet()){
+            Map<Long, Map<Long, List<Accounttradeconfig>>> u = new HashMap<>();
+
+            Map<Long, List<Accounttradeconfig>> temp = entry.getValue();//userid
+            for(Map.Entry<Long, List<Accounttradeconfig>> entry_:temp.entrySet()){
+                Map<Long, List<Accounttradeconfig>> market = new HashMap<>();
+                List<Accounttradeconfig> ul = entry_.getValue();//用户下所有的资金
+                for(Accounttradeconfig fig:ul){
+                    Long key = fig.getAccountid();
+                    if(market.containsKey(key)){
+                        market.get(key).add(fig);
+                    }else{
+                        List<Accounttradeconfig> _temp = new ArrayList<Accounttradeconfig>();
+                        _temp.add(fig);
+                        market.put(key, _temp);
+                    }
+                }
+                u.put(entry_.getKey(), market);
+            }
+            user.put(entry.getKey(), u);
+        }
+
+        Set<String> set = new HashSet<>();
+        List<AccountTradeConfigTreeVo> result = new ArrayList<>();
+
+        for(Map.Entry<Integer, Map<Long, Map<Long, List<Accounttradeconfig>>>> entry_:user.entrySet()){
+            for(Map.Entry<Long, Map<Long, List<Accounttradeconfig>>> entry:entry_.getValue().entrySet()){
+                Accounttradeconfig base = null;
+                for(Map.Entry<Long, List<Accounttradeconfig>> _entry:entry.getValue().entrySet()){
+                    List<Accounttradeconfig> temp = _entry.getValue();
+                    for(int i=0;i<temp.size();i++ ){
+                        Accounttradeconfig fig = temp.get(i);
+                        if(fig.getTradetype()==null){
+                            fig.setTradetype(1);
+                        }
+                        if(i==0){
+                            base = fig;
+                        }
+                        String setKey = fig.getTradetype()+""+fig.getUserid()+""+fig.getAccountid()+""+fig.getGoodsid();
+                        if(!set.contains(setKey)){
+                            set.add(setKey);
+                            //商品级
+                            AccountTradeConfigTreeVo vo2 = new AccountTradeConfigTreeVo();
+                            vo2.setId(fig.getTradetype()+fig.getGoodsid().toString());
+                            vo2.setPid(fig.getTradetype()+fig.getUserid()+""+fig.getAccountid());
+                            vo2.setLevel(3);
+                            vo2.setName(fig.getGoodsname());//商品名称
+                            vo2.setUserid(fig.getUserid());
+                            vo2.setAccountid(fig.getAccountid());
+                            vo2.setMarketid(fig.getMarketid());
+                            vo2.setGoodsid(fig.getGoodsid());
+                            vo2.setTradetype(fig.getTradetype());
+                            result.add(vo2);
+                        }
+                    }
+                    //资金账户级
+                    AccountTradeConfigTreeVo vo1 = new AccountTradeConfigTreeVo();
+                    vo1.setId(base.getTradetype()+base.getUserid()+""+base.getAccountid());
+                    vo1.setPid(base.getTradetype()+"u"+base.getUserid().toString());
+                    vo1.setLevel(2);
+                    vo1.setName(base.getAccountid().toString());//市场名称
+                    vo1.setUserid(base.getUserid());
+                    vo1.setAccountid(base.getAccountid());
+                    vo1.setTradetype(base.getTradetype());
+                    result.add(vo1);
+                }
+                //用户级
+                AccountTradeConfigTreeVo vo = new AccountTradeConfigTreeVo();
+                vo.setId(base.getTradetype()+"u"+base.getUserid().toString());
+                if(base.getTradetype()==null || base.getTradetype()==0 || base.getTradetype()==1){
+                    vo.setPid("-1");
+                }else{
+                    vo.setPid("-2");
+                }
+                vo.setLevel(1);
+                vo.setName(StringUtils.isBlank(base.getAccountname())?"默认配置":base.getAccountname());//分组名称
+                vo.setUserid(base.getUserid());
+                vo.setTradetype(base.getTradetype());
+                result.add(vo);
+            }
+        }
+
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"),result);
+    }
+
+    @Override
+    public AjaxResult tradeConfigView(PersonalizationDelParam param, HttpServletRequest request) {
+        //这个是投资者的userid ,获取投资者的分组ID
+        param.setMemberuserid(0L);
+        param.setRuletype(1);
+        Map<String, Object> result = new HashMap<>();
+        Usergroupdetail ug = iUsergroupdetailMapper.selectOne(new QueryWrapper<Usergroupdetail>().eq("userid",param.getUserid()));
+        if(ug!=null){
+            param.setUsergroupid2(ug.getUsergroupid());
+        }
+
+        Object o = redisServiceUtil.getCacheMapValue(Constants.REDIS_HEADER_SYSPARAM, "007");
+        //币种小数位
+        BigDecimal Cude = null;
+        //成交量小数位
+        BigDecimal qtyde = null;
+        if(o!=null && "1".equals(o.toString())){
+            Goods goods = iGoodsMapper.selectOne(new QueryWrapper<Goods>().eq("goodsid",param.getGoodsid()));
+            Enumdicitem item = iEnumdicitemMapper.selectOne(new QueryWrapper<Enumdicitem>()
+                    .eq("enumdiccode", "currency")
+                    .eq("enumitemname", goods.getCurrencyid()));
+            if(item!=null && StringUtils.isNotBlank(item.getParam1())){
+                Cude = BigDecimal.valueOf(Math.pow(10, Integer.parseInt(item.getParam1())));
+            }
+            qtyde = BigDecimal.valueOf(Math.pow(10, goods.getQtydecimalplace()));
+        }
+
+        List<RulesConfigVo> ruleList = iUseraccountMapper.getTradeRuleDescriptions(param);
+        List<FeesConfigVo> feeList = iUseraccountMapper.getTradeFeeDescriptions(param);
+
+        List<Accounttradeconfig> list = iAccounttradeconfigMapper.selectList(new QueryWrapper<Accounttradeconfig>()
+                .eq("accountid", param.getAccountid())
+                .eq("userid", param.getUserid())
+                .eq("tradetype", param.getTradetype()));
+
+        Accounttradeconfig detail = new Accounttradeconfig();
+        detail.setGoodsid(param.getGoodsid());
+        detail.setMemberuserid(param.getMemberuserid());
+        detail.setMarketid(param.getMarketid());
+        detail.setUserid(param.getUserid());
+        detail.setAccountid(param.getAccountid());
+        detail.setTradetype(param.getTradetype());
+        Map<String, Accounttradeconfig> map = new HashMap<>();
+        if(list!=null && !list.isEmpty()){
+            for(Accounttradeconfig config:list){
+                if(config.getRuletype() == 1){
+                    detail.setParamid(config.getParamid());
+                }else if(config.getRuletype() == 2){
+                    map.put("rule"+config.getParamid(), config);
+                }else{
+                    map.put("fee"+config.getParamid(),config);
+                }
+            }
+        }
+        if(ruleList !=null && !ruleList.isEmpty()){
+            for(int i=0;i<ruleList.size();i++){
+                Accounttradeconfig config = map.get("rule"+ruleList.get(i).getRuleid());
+                if(config!=null){
+                    //小数位放大
+                    if (qtyde!=null && ruleList.get(i).getRuleid() >= 101 && ruleList.get(i).getRuleid()<=104) {
+                        if(config.getParamvalue()!=null &&
+                                config.getParamvalue().compareTo(BigDecimal.ZERO)!=0){
+                            ruleList.get(i).setCvalue(config.getParamvalue().divide(qtyde));
+                        }
+                        if(ruleList.get(i).getParamvalue()!=null &&
+                                ruleList.get(i).getParamvalue().compareTo(BigDecimal.ZERO)!=0){
+                            ruleList.get(i).setParamvalue(ruleList.get(i).getParamvalue().divide(BigDecimal.valueOf(Math.pow(10, ruleList.get(i).getQtydecimalplace()))));
+                        }
+                        if(ruleList.get(i).getGvalue()!=null &&
+                                ruleList.get(i).getGvalue().compareTo(BigDecimal.ZERO)!=0){
+                            ruleList.get(i).setGvalue(ruleList.get(i).getGvalue().divide(qtyde));
+                        }
+                        if(ruleList.get(i).getDvalue()!=null &&
+                                ruleList.get(i).getDvalue().compareTo(BigDecimal.ZERO)!=0){
+                            ruleList.get(i).setDvalue(ruleList.get(i).getDvalue().divide(qtyde));
+                        }
+                    }else{
+                        ruleList.get(i).setCvalue(config.getParamvalue());
+                    }
+                }
+            }
+        }
+        if(feeList !=null && !feeList.isEmpty()){
+            for(int i=0;i<feeList.size();i++){
+                Accounttradeconfig config = map.get("fee"+feeList.get(i).getTradefeeid());
+                if(config!=null){
+                    feeList.get(i).setCrithm(config.getFeealgorithm());
+                    if(Cude!=null && config.getFeealgorithm()==2){
+                        if(config.getParamvalue()!=null
+                                && config.getParamvalue().compareTo(BigDecimal.ZERO)!=0){
+                            feeList.get(i).setCvalue(config.getParamvalue().divide(Cude));
+                        }
+                        if(feeList.get(i).getExchangevalue()!=null
+                                && feeList.get(i).getExchangevalue().compareTo(BigDecimal.ZERO)!=0){
+                            feeList.get(i).setExchangevalue(feeList.get(i).getExchangevalue().divide(Cude));
+                        }
+                        if(feeList.get(i).getDvalue()!=null
+                                && feeList.get(i).getDvalue().compareTo(BigDecimal.ZERO)!=0){
+                            feeList.get(i).setDvalue(feeList.get(i).getDvalue().divide(Cude));
+                        }
+                        if(feeList.get(i).getGvalue()!=null
+                                && feeList.get(i).getGvalue().compareTo(BigDecimal.ZERO)!=0){
+                            feeList.get(i).setGvalue(feeList.get(i).getGvalue().divide(Cude));
+                        }
+
+                        if(feeList.get(i).getMembermaxvalue()!=null
+                                && feeList.get(i).getMembermaxvalue().compareTo(BigDecimal.ZERO)!=0){
+                            feeList.get(i).setMembermaxvalue(feeList.get(i).getMembermaxvalue().divide(Cude));
+                        }
+                        if(feeList.get(i).getMemberminvalue()!=null
+                                && feeList.get(i).getMemberminvalue().compareTo(BigDecimal.ZERO)!=0){
+                            feeList.get(i).setMemberminvalue(feeList.get(i).getMemberminvalue().divide(Cude));
+                        }
+
+                    }else{
+                        feeList.get(i).setCvalue(config.getParamvalue());
+                    }
+                }
+            }
+        }
+        detail.setDruleList(ruleList);
+        detail.setDfeeList(feeList);
+
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"),result);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult tradeConfigEdit(SupportTradeConfigAddParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+
+        Object o = redisServiceUtil.getCacheMapValue(Constants.REDIS_HEADER_SYSPARAM, "007");
+        //币种小数位
+        BigDecimal Cude = null;
+        //成交量小数位
+        BigDecimal qtyde = null;
+        if(o!=null && "1".equals(o.toString())){
+            Goods goods = iGoodsMapper.selectOne(new QueryWrapper<Goods>().eq("goodsid",param.getGoodsid()));
+            Enumdicitem item = iEnumdicitemMapper.selectOne(new QueryWrapper<Enumdicitem>()
+                    .eq("enumdiccode", "currency")
+                    .eq("enumitemname", goods.getCurrencyid()));
+            if(item!=null && StringUtils.isNotBlank(item.getParam1())){
+                Cude = BigDecimal.valueOf(Math.pow(10, Integer.parseInt(item.getParam1())));
+            }
+            qtyde = BigDecimal.valueOf(Math.pow(10, goods.getQtydecimalplace()));
+        }
+
+        iAccounttradeconfigMapper.delete(new QueryWrapper<Accounttradeconfig>()
+                .eq("goodsid", param.getGoodsid())
+                .eq("marketid", param.getMarketid())
+                .eq("accountid", param.getAccountid())
+                .eq("memberuserid", 0L)
+                .eq("userid", param.getUserid())
+                .eq("tradetype", param.getTradetype())
+        );
+
+        if(param.getParamid() != null){
+            Accounttradeconfig config = new Accounttradeconfig();
+            config.setUserid(param.getUserid());
+            config.setMemberuserid(0L);
+            config.setMarketid(param.getMarketid());
+            config.setGoodsid(param.getGoodsid());
+            config.setAccountid(param.getAccountid());
+            config.setRuletype(1);
+            config.setParamid(param.getParamid());
+            config.setCreatetime(new Date());
+            config.setCreatorid(systemmanager.getAutoid());
+            config.setFeealgorithm(param.getFeealgorithm());
+            config.setTradetype(param.getTradetype());
+            iAccounttradeconfigMapper.insert(config);
+        }
+
+        List<Accounttradeconfig> ruleList = param.getRuleList();
+        if(ruleList!=null && !ruleList.isEmpty()){
+            for(Accounttradeconfig fig:ruleList){
+                if(fig.getParamid()==null ||fig.getParamid()==0
+                        ||fig.getParamvalue() == null){
+                    continue;
+                }
+                //小数位放大
+                if (qtyde!=null && fig.getParamid() >= 101 && fig.getParamid()<=104) {
+                    fig.setParamvalue(fig.getParamvalue().multiply(qtyde));
+                }
+                fig.setFeealgorithm(2);
+                fig.setUserid(param.getUserid());
+                fig.setMemberuserid(0L);
+                fig.setAccountid(param.getAccountid());
+                fig.setMarketid(param.getMarketid());
+                fig.setGoodsid(param.getGoodsid());
+                fig.setRuletype(2);
+                fig.setCreatetime(new Date());
+                fig.setCreatorid(systemmanager.getAutoid());
+                fig.setTradetype(param.getTradetype());
+                iAccounttradeconfigMapper.insert(fig);
+            }
+        }
+
+        List<Accounttradeconfig> feeList = param.getFeeList();
+        if(feeList!=null && !feeList.isEmpty()){
+            for(Accounttradeconfig fig:feeList){
+                if(fig.getParamid()==null ||fig.getParamid()==0
+                        || fig.getFeealgorithm()==null ||fig.getParamvalue() == null){
+                    continue;
+                }
+                if(fig.getFeealgorithm()==1){
+                    if(fig.getParamvalue().compareTo(new BigDecimal(10000))>0){
+                        throw new GlobalException(Constants.Error_Code_Design, MessageType.INVESTOR_ERROR_CODE_011.getCode(), request.getHeader("Accept-Language"));
+                    }
+                    fig.setParamvalue(fig.getParamvalue().divide(new BigDecimal(10000)));
+                }else if(Cude!=null){
+                    fig.setParamvalue(fig.getParamvalue().multiply(Cude));
+                }
+                fig.setUserid(param.getUserid());
+                fig.setMemberuserid(0L);
+                fig.setMarketid(param.getMarketid());
+                fig.setGoodsid(param.getGoodsid());
+                fig.setAccountid(param.getAccountid());
+                fig.setRuletype(3);
+                fig.setCreatetime(new Date());
+                fig.setCreatorid(systemmanager.getAutoid());
+                fig.setTradetype(param.getTradetype());
+                iAccounttradeconfigMapper.insert(fig);
+            }
+        }
+
+        iSendMsgService.sendAccountConfigChangeNtf(4, 2, param.getUserid(), param.getAccountid(), param.getGoodsid(),
+                null, param.getTradetype());
+
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
+    }
+
+    @Override
+    public AjaxResult tradeConfigDelete(PersonalizationDelParam param, HttpServletRequest request) {
+
+        iAccounttradeconfigMapper.delete(new QueryWrapper<Accounttradeconfig>()
+                .eq("memberuserid", 0L)
+                .eq("userid", param.getUserid())
+                .eq("tradetype", param.getTradetype())
+                .eq(param.getGoodsid()!=null,"goodsid", param.getGoodsid())
+                .eq(param.getMarketid()!=null,"marketid", param.getMarketid())
+                .eq(param.getAccountid()!=null,"accountid", param.getAccountid())
+        );
+
+        iSendMsgService.sendAccountConfigChangeNtf(4, 3, param.getUserid(), param.getAccountid(), param.getGoodsid(),
+                null, param.getTradetype());
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
+    }
+
+    @Override
+    public AjaxResult<OrganInitAccountAddResult> loadSelectOption(PersonalizationDelParam param, HttpServletRequest request) {
+        OrganInitAccountAddResult result = new OrganInitAccountAddResult();
+        param.setMemberuserid(0L);
+        if (param.getGoodsid() != null) {
+            //客户类别
+            List<InvestorInitBZResult> bzResults = iUseraccountMapper.getCustomerTypeByGoodsid(param.getGoodsid(), null);
+            result.setResults(bzResults);
+            result.setFeesConfigVos(iUseraccountMapper.getTradeFeeDescriptions(param));
+            result.setRulesConfigVos(iUseraccountMapper.getTradeRuleDescriptions(param));
+        } else if (param.getMarketid() != null) {
+            List<Goods> goods = iGoodsMapper.getNoTradeConfigGoodsForAccount(param);
+            result.setGoods(goods);
+        } else if (param.getAccountid() != null) {
+            List<Market> markets = iMarketMapper.getNoTradeConfigMarketsForAccount(param);
+            result.setMarkets(markets);
+        } else if (param.getUserid() != null) {
+            List<Long> longs = iTaaccountMapper.getNoTradeConfigAccounts(param);
+            result.setAccountids(longs);
+        }
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"),result);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult tradeConfigAdd(SupportTradeConfigAddParam vo, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+
+        Object o = redisServiceUtil.getCacheMapValue(Constants.REDIS_HEADER_SYSPARAM, "007");
+        //币种小数位
+        BigDecimal Cude = null;
+        //成交量小数位
+        BigDecimal qtyde = null;
+        if(o!=null && "1".equals(o.toString())){
+            Goods goods = iGoodsMapper.selectOne(new QueryWrapper<Goods>().eq("goodsid",vo.getGoodsid()));
+            Enumdicitem item = iEnumdicitemMapper.selectOne(new QueryWrapper<Enumdicitem>()
+                    .eq("enumdiccode", "currency")
+                    .eq("enumitemname", goods.getCurrencyid()));
+            if(item!=null && StringUtils.isNotBlank(item.getParam1())){
+                Cude = BigDecimal.valueOf(Math.pow(10, Integer.parseInt(item.getParam1())));
+            }
+            qtyde = BigDecimal.valueOf(Math.pow(10, goods.getQtydecimalplace()));
+        }
+
+        if(vo.getParamid() != null){
+            Accounttradeconfig config = new Accounttradeconfig();
+            config.setUserid(vo.getUserid());
+            config.setMemberuserid(0L);
+            config.setMarketid(vo.getMarketid());
+            config.setGoodsid(vo.getGoodsid());
+            config.setAccountid(vo.getAccountid());
+            config.setRuletype(1);
+            config.setParamid(vo.getParamid());
+            config.setCreatetime(new Date());
+            config.setCreatorid(systemmanager.getAutoid());
+            config.setFeealgorithm(vo.getFeealgorithm());
+            config.setTradetype(vo.getTradetype());
+            iAccounttradeconfigMapper.insert(config);
+        }
+
+        List<Accounttradeconfig> ruleList = vo.getRuleList();
+        if(ruleList!=null && !ruleList.isEmpty()){
+            for(Accounttradeconfig fig:ruleList){
+                if(fig.getParamid()==null ||fig.getParamid()==0
+                        ||fig.getParamvalue() == null){
+                    continue;
+                }
+                //小数位放大
+                if (qtyde!=null && fig.getParamid() >= 101 && fig.getParamid()<=104) {
+                    fig.setParamvalue(fig.getParamvalue().multiply(qtyde));
+                }
+
+                fig.setFeealgorithm(2);
+                fig.setUserid(vo.getUserid());
+                fig.setMemberuserid(0L);
+                fig.setAccountid(vo.getAccountid());
+                fig.setMarketid(vo.getMarketid());
+                fig.setGoodsid(vo.getGoodsid());
+                fig.setRuletype(2);
+                fig.setCreatetime(new Date());
+                fig.setCreatorid(systemmanager.getAutoid());
+                fig.setTradetype(vo.getTradetype());
+                iAccounttradeconfigMapper.insert(fig);
+            }
+        }
+
+        List<Accounttradeconfig> feeList = vo.getFeeList();
+        if(feeList!=null && !feeList.isEmpty()){
+            for(Accounttradeconfig fig:feeList){
+                if(fig.getParamid()==null ||fig.getParamid()==0
+                        || fig.getFeealgorithm()==null ||fig.getParamvalue() == null){
+                    continue;
+                }
+                if(fig.getFeealgorithm()==1){
+                    if(fig.getParamvalue().compareTo(new BigDecimal(10000))>0){
+                        throw new GlobalException(Constants.Error_Code_Design, MessageType.INVESTOR_ERROR_CODE_011.getCode(), request.getHeader("Accept-Language"));
+                    }
+                    fig.setParamvalue(fig.getParamvalue().divide(new BigDecimal(10000)));
+                }else if(Cude!=null){
+                    fig.setParamvalue(fig.getParamvalue().multiply(Cude));
+                }
+                fig.setUserid(vo.getUserid());
+                fig.setMemberuserid(0L);
+                fig.setMarketid(vo.getMarketid());
+                fig.setGoodsid(vo.getGoodsid());
+                fig.setAccountid(vo.getAccountid());
+                fig.setRuletype(3);
+                fig.setCreatetime(new Date());
+                fig.setCreatorid(systemmanager.getAutoid());
+                fig.setTradetype(vo.getTradetype());
+                iAccounttradeconfigMapper.insert(fig);
+            }
+        }
+        iSendMsgService.sendAccountConfigChangeNtf(4, 1, vo.getUserid(), vo.getAccountid(), vo.getGoodsid(),
+                null, vo.getTradetype());
+
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
+    }
+
     private void editARoleModifyMember(OrganRoleModifyParam vo, Systemmanager opeartion) {
         Date date = new Date();
 

+ 4 - 3
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/TaaccountServiceImpl.java

@@ -37,6 +37,7 @@ import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.*;
+import java.util.stream.Collectors;
 
 import static net.sf.jsqlparser.util.validation.metadata.NamedObject.user;
 
@@ -137,9 +138,9 @@ public class TaaccountServiceImpl extends ServiceImpl<ITaaccountMapper, Taaccoun
             taAccountQueryResult.setBankAccountsignList(bankAccountsignList);
         }
         //获取当前登录账户资金权限
-        Logintaaccount loginTaAccount = iLogintaaccountMapper.selectOne(new QueryWrapper<Logintaaccount>().eq("ACCOUNTID", taAccountQueryResult.getAccountId()));
-        if (Objects.nonNull(loginTaAccount)) {
-            loginIds.add(loginTaAccount.getLoginid());
+        List<Logintaaccount> logintaaccounts = iLogintaaccountMapper.selectList(new QueryWrapper<Logintaaccount>().eq("ACCOUNTID", taAccountQueryResult.getAccountId()));
+        if (CollectionUtils.isNotEmpty(logintaaccounts)) {
+            loginIds.addAll(logintaaccounts.stream().map(Logintaaccount::getLoginid).collect(Collectors.toList()));
         }
         //授权交易账号
         List<Long> defaultLogin = iLoginaccountMapper.getLoginNotExistsLt(taAccountQueryResult.getUserId());

+ 7 - 14
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/TradingAccountServiceImpl.java

@@ -117,7 +117,7 @@ public class TradingAccountServiceImpl implements ITradingAccountService {
             la.setModifierid(systemmanager.getAutoid());
             la.setModifytime(new Date());
 
-            iLoginaccountMapper.update(new QueryWrapper<Loginaccount>().eq("LOGINID", la.getLoginid()));
+            iLoginaccountMapper.update(la, new QueryWrapper<Loginaccount>().eq("LOGINID", la.getLoginid()));
             writelog(la, systemmanager, SysConstants.BUTTON_CODE_RESET);
 
             //重置密码短信消息
@@ -255,6 +255,10 @@ public class TradingAccountServiceImpl implements ITradingAccountService {
 
     @Override
     public AjaxResult add(HttpServletRequest request, TradingAccountAddParam param) {
+        Loginaccount current = iLoginaccountMapper.selectOne(new QueryWrapper<Loginaccount>().eq("loginid", param.getLoginid()));
+        if (Objects.nonNull(current)) {
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.TRAACC_ERROR_CODE_001.getCode(), request.getHeader("Accept-Language"));
+        }
         Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
         Loginaccount la = new Loginaccount();
         la.setLoginfailnum(0);
@@ -266,19 +270,8 @@ public class TradingAccountServiceImpl implements ITradingAccountService {
         la.setModifierid(systemmanager.getAutoid());
         la.setModifytime(new Date());
         la.setHasupdatedpwd(0);
-        try {
-            iLoginaccountMapper.insert(la);
-        } catch (ConstraintViolationException e) {
-            log.error("交易账号插入失败,失败原因:" + e.getMessage());
-            String msg = e.getCause().getMessage();
-            if (msg.contains("PK_LOGINACCOUNT")) {
-                return AjaxResult.error(Constants.Error_Code_Design, MessageType.TRAACC_ERROR_CODE_001.getCode(), request.getHeader("Accept-Language"));
-            }
-            return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM008.getCode(), request.getHeader("Accept-Language"));
-        } catch (Exception e) {
-            log.error("交易账号插入失败,失败原因:" + e.getMessage());
-            return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM008.getCode(), request.getHeader("Accept-Language"));
-        }
+        iLoginaccountMapper.insert(la);
+
         if (StringUtils.isNotEmpty(param.getAccountids())) {
             List<Long> accountids = Arrays.stream(param.getAccountids().split(","))
                     .map(Long::valueOf)

+ 24 - 23
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/UseraccountServiceImpl.java

@@ -7,8 +7,8 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.google.protobuf.Message;
 import com.muchinfo.mtp.proto.convert.ServiceMemoryCache;
+import com.muchinfo.mtp3century.exception.GlobalException;
 import com.muchinfo.mtp3century.service.ICommonService;
 import com.muchinfo.mtp3century.service.ISendMsgService;
 import com.muchinfo.mtp3century.service.ISystemmanagerService;
@@ -1212,8 +1212,12 @@ public class UseraccountServiceImpl extends ServiceImpl<IUseraccountMapper, User
                 if (goodsid == null) {
                     result.setGoods(iGoodsMapper.getNoTradeConfigGoods(memberuserid, usergroupid, marketid));
                 } else {
-                    result.setFeesConfigVos(getTradeFeeDescriptions(marketid, goodsid, systemmanager.getAreauserid()));
-                    result.setRulesConfigVos(getTradeRuleDescriptions(marketid, goodsid, systemmanager.getAreauserid()));
+                    PersonalizationDelParam param = new PersonalizationDelParam();
+                    param.setMarketid(marketid);
+                    param.setGoodsid(goodsid);
+                    param.setMemberuserid(systemmanager.getAreauserid());
+                    result.setFeesConfigVos(getTradeFeeDescriptions(param));
+                    result.setRulesConfigVos(getTradeRuleDescriptions(param));
                     //客户类别
                     result.setResults(iUseraccountMapper.getCustomerTypeByGoodsid(goodsid, null));
                 }
@@ -1223,12 +1227,11 @@ public class UseraccountServiceImpl extends ServiceImpl<IUseraccountMapper, User
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public AjaxResult traderPersonAdd(InvestorPersonAddParam param, HttpServletRequest request) {
         Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
         if (param.getFlag() == 0) {
-            AjaxResult Error_Code_Design = addTrader(param, request);
-            if (Error_Code_Design != null) return Error_Code_Design;
-
+            addTrader(param, request);
             iSendMsgService.sendAccountConfigChangeNtf(3, 1, null, null, param.getGoodsid(), param.getUsergroupid(), null);
         } else {
             QueryWrapper<Usergrouptradeconfig> queryWrapper = new QueryWrapper<>();
@@ -1238,15 +1241,13 @@ public class UseraccountServiceImpl extends ServiceImpl<IUseraccountMapper, User
             queryWrapper.eq("usergroupid", param.getUsergroupid());
             iUsergrouptradeconfigMapper.delete(queryWrapper);
 
-            AjaxResult Error_Code_Design = addTrader(param, request);
-            if (Error_Code_Design != null) return Error_Code_Design;
-
+            addTrader(param, request);
             iSendMsgService.sendAccountConfigChangeNtf(3, 2, null, null, param.getGoodsid(), param.getUsergroupid(), null);
         }
         return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
     }
 
-    private AjaxResult addTrader(InvestorPersonAddParam param, HttpServletRequest request) {
+    private void addTrader(InvestorPersonAddParam param, HttpServletRequest request) {
         Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
         if (param.getParamid() != null) {
             Usergrouptradeconfig config = getUsergrouptradeconfig(param, systemmanager);
@@ -1264,9 +1265,9 @@ public class UseraccountServiceImpl extends ServiceImpl<IUseraccountMapper, User
                     .eq("enumdiccode", "currency")
                     .eq("enumitemname", goods.getCurrencyid()));
             if (item != null && StringUtils.isNotBlank(item.getParam1())) {
-                Cude = new BigDecimal(Math.pow(10, Integer.valueOf(item.getParam1())));
+                Cude = BigDecimal.valueOf(Math.pow(10, Integer.parseInt(item.getParam1())));
             }
-            qtyde = new BigDecimal(Math.pow(10, goods.getQtydecimalplace()));
+            qtyde = BigDecimal.valueOf(Math.pow(10, goods.getQtydecimalplace()));
         }
 
         List<Usergrouptradeconfig> ruleList = param.getRuleList();
@@ -1303,7 +1304,7 @@ public class UseraccountServiceImpl extends ServiceImpl<IUseraccountMapper, User
                 }
                 if (fig.getFeealgorithm() == 1) {
                     if (fig.getParamvalue().compareTo(new BigDecimal(10000)) > 0) {
-                        return AjaxResult.error(Constants.Error_Code_Design, MessageType.INVESTOR_ERROR_CODE_011.getCode(), request.getHeader("Accept-Language"));
+                        throw new GlobalException(Constants.Error_Code_Design, MessageType.INVESTOR_ERROR_CODE_011.getCode(), request.getHeader("Accept-Language"));
                     }
                     fig.setParamvalue(fig.getParamvalue().divide(new BigDecimal(10000)));
                 } else if (Cude != null) {
@@ -1319,7 +1320,6 @@ public class UseraccountServiceImpl extends ServiceImpl<IUseraccountMapper, User
                 iUsergrouptradeconfigMapper.insert(fig);
             }
         }
-        return null;
     }
 
     private Usergrouptradeconfig getUsergrouptradeconfig(InvestorPersonAddParam param, Systemmanager systemmanager) {
@@ -1352,11 +1352,12 @@ public class UseraccountServiceImpl extends ServiceImpl<IUseraccountMapper, User
     }
 
     @Override
-    public AjaxResult<UserGroupTradeConfigVo> tradeConfigView(InvestorPersonViewParam param, HttpServletRequest request) {
+    public AjaxResult<UserGroupTradeConfigVo> tradeConfigView(PersonalizationDelParam param, HttpServletRequest request) {
         Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
 
-        List<RulesConfigVo> ruleList = iUseraccountMapper.getTradeRuleDescriptions(param.getMarketid(), param.getGoodsid(), systemmanager.getAreauserid(), param.getUsergroupid());
-        List<FeesConfigVo> feeList = iUseraccountMapper.getTradeFeeDescriptions(param.getMarketid(), param.getGoodsid(), systemmanager.getAreauserid(), param.getUsergroupid());
+        param.setMemberuserid(systemmanager.getAreauserid());
+        List<RulesConfigVo> ruleList = iUseraccountMapper.getTradeRuleDescriptions(param);
+        List<FeesConfigVo> feeList = iUseraccountMapper.getTradeFeeDescriptions(param);
 
         Object o = redisServiceUtil.getCacheMapValue(Constants.REDIS_HEADER_SYSPARAM, "007");
         if (o != null && "1".equals(o.toString())) {
@@ -1591,14 +1592,14 @@ public class UseraccountServiceImpl extends ServiceImpl<IUseraccountMapper, User
         return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), result);
     }
 
-    private List<RulesConfigVo> getTradeRuleDescriptions(Long marketid, Long goodsid, Long areauserid) {
-        List<RulesConfigVo> list = iUseraccountMapper.getTradeRuleDescriptions(marketid, goodsid, areauserid, null);
+    private List<RulesConfigVo> getTradeRuleDescriptions(PersonalizationDelParam param) {
+        List<RulesConfigVo> list = iUseraccountMapper.getTradeRuleDescriptions(param);
 
         if (list != null && !list.isEmpty()) {
             Object o = redisServiceUtil.getCacheMapValue(Constants.REDIS_HEADER_SYSPARAM, "007");
             if (o != null && "1".equals(o.toString())) {
                 //成交量小数位
-                Goods goods = iGoodsMapper.selectOne(new QueryWrapper<Goods>().eq("goodsid", goodsid));
+                Goods goods = iGoodsMapper.selectOne(new QueryWrapper<Goods>().eq("goodsid", param.getGoodsid()));
                 if (goods.getQtydecimalplace() != null && goods.getQtydecimalplace() != 0) {
                     BigDecimal qtyde = new BigDecimal(Math.pow(10, goods.getQtydecimalplace()));
                     for (int i = 0; i < list.size(); i++) {
@@ -1625,13 +1626,13 @@ public class UseraccountServiceImpl extends ServiceImpl<IUseraccountMapper, User
         return list;
     }
 
-    private List<FeesConfigVo> getTradeFeeDescriptions(Long marketid, Long goodsid, Long areauserid) {
-        List<FeesConfigVo> list = iUseraccountMapper.getTradeFeeDescriptions(marketid, goodsid, areauserid, null);
+    private List<FeesConfigVo> getTradeFeeDescriptions(PersonalizationDelParam param) {
+        List<FeesConfigVo> list = iUseraccountMapper.getTradeFeeDescriptions(param);
         if (CollectionUtils.isNotEmpty(list)) {
             Object o = redisServiceUtil.getCacheMapValue(Constants.REDIS_HEADER_SYSPARAM, "007");
             if (o != null && "1".equals(o.toString())) {
                 //币种小数位
-                Goods goods = iGoodsMapper.selectOne(new QueryWrapper<Goods>().eq("goodsid", goodsid));
+                Goods goods = iGoodsMapper.selectOne(new QueryWrapper<Goods>().eq("goodsid", param.getGoodsid()));
                 Enumdicitem item = iEnumdicitemMapper.selectOne(new QueryWrapper<Enumdicitem>()
                         .eq("enumdiccode", "currency")
                         .eq("enumitemname", goods.getCurrencyid()));

+ 18 - 0
mtp3-century/src/main/resources/mapper/GoodsMapper.xml

@@ -213,4 +213,22 @@
         where t.userid = #{userid}
         order by g.goodscode
     </select>
+    <select id="getNoTradeConfigGoodsForAccount" resultType="com.muchinfo.mtp3pojos.entity.Goods"
+            parameterType="com.muchinfo.mtp3pojos.vo.investor.PersonalizationDelParam">
+        select * from goods t where t.marketid = #{vo.marketid}
+        and t.goodsstatus in (2,3)
+        and not exists (
+        select 1 from accounttradeconfig u where u.goodsid = t.goodsid
+        <if test="vo.memberuserid != null"> and u.memberuserid=#{vo.memberuserid} </if>
+        and u.accountid = #{vo.accountid} and u.userid=#{vo.userid}
+        <choose>
+            <when test="vo.tradetype!=null and vo.tradetype==2">
+                and u.tradetype=2
+            </when>
+            <otherwise>
+                and (u.tradetype=1 or u.tradetype is null)
+            </otherwise>
+        </choose>
+        )
+    </select>
 </mapper>

+ 2 - 5
mtp3-century/src/main/resources/mapper/LoginaccountMapper.xml

@@ -45,10 +45,6 @@
           and not exists(select * from logintaaccount l where l.loginid = t.loginid)
     </select>
 
-    <select id="getLoginidsByUserid" parameterType="long" resultType="string">
-        select wm_concat(la.loginid) loginids from loginaccount la where la.userid = #{userid,jdbcType=VARCHAR}
-    </select>
-
 
     <select id="queryLoginAccountPage" resultType="com.muchinfo.mtp3pojos.vo.investor.InvestorLoginQueryResult"
             parameterType="com.muchinfo.mtp3pojos.vo.investor.InvestorLoginQueryParam">
@@ -74,13 +70,14 @@
 
     <select id="queryTradingAccount" resultType="com.muchinfo.mtp3pojos.vo.tradingacc.TradingAccountQueryResult"
             parameterType="com.muchinfo.mtp3pojos.vo.tradingacc.TradingAccountQueryParam">
-        select t.*,s.username,smr.rolename,
+        select t.*,s.username,smr.rolename,s1.username as modifiername,
         (select listagg(uai.authid, ',') within group(order by uai.authtype,uai.authid)
         from userauthinfo uai where uai.loginid=t.loginid and uai.userid=t.userid) "auth",
         (select listagg(uai.authtype, ',') within group(order by uai.authtype,uai.authid)
         from userauthinfo uai where uai.loginid=t.loginid and uai.userid=t.userid) "authtype"
         from loginaccount t
         left join systemmanager s on t.logincode = s.logincode
+        left join systemmanager s1 on t.modifierid = s1.autoid
         left join SystemManagerRole smr on t.clientroleid = smr.autoid
         <where>
             <if test="vo.loginusertype != null">

+ 14 - 0
mtp3-century/src/main/resources/mapper/MarketMapper.xml

@@ -125,4 +125,18 @@
         </if>
         order by m.marketid
     </select>
+    <select id="getNoTradeConfigMarketsForAccount" resultType="com.muchinfo.mtp3pojos.entity.Market"
+            parameterType="com.muchinfo.mtp3pojos.vo.investor.PersonalizationDelParam">
+        select t.* from market tgetNoTradeConfigMarkets
+        <choose>
+            <when test="vo.accountid != null">
+                ,taaccountmarket ta
+                where t.tradeproperty in (1,2,3) and t.trademode not in(40,41) and t.marketid = ta.marketid and ta.accountid=#{vo.accountid}
+            </when>
+            <otherwise>
+                where t.tradeproperty in (1,2,3) and t.trademode not in(40,41) and t.marketid in ( select marketid from arearolemarket a
+                where <if test="vo.memberuserid != null"> a.areauserid = #{vo.memberuserid} and </if> a.roletype = 7)
+            </otherwise>
+        </choose>
+    </select>
 </mapper>

+ 16 - 1
mtp3-century/src/main/resources/mapper/TaaccountMapper.xml

@@ -135,7 +135,7 @@
     <select id="queryTaAccountPage" resultMap="PageResultMap"
             parameterType="com.muchinfo.mtp3pojos.vo.taaccount.TaAccountQueryParam">
         select t.accountid, t.ismain,t.taaccounttype, t.parentaccountid
-        ,t.tradestatus,t.userid, t.relateduserid,t.currencyid
+        ,t.tradestatus,t.userid, t.relateduserid,t.currencyid,t.outthreshold
         from
         taaccount t
         <where>
@@ -379,4 +379,19 @@
         </where>
         order by o.accountstatus,o.userid
     </select>
+    <select id="getNoTradeConfigAccounts" resultType="java.lang.Long"
+            parameterType="com.muchinfo.mtp3pojos.vo.investor.PersonalizationDelParam">
+        select t.accountid from taaccount t where <if test="vo.userid != null"> t.userid = #{vo.userid} and</if>
+        not exists ( select 1 from accounttradeconfig u
+        where u.accountid = t.accountid <if test="vo.memberuserid != null"> and u.memberuserid=#{vo.memberuserid} </if> <if test="vo.userid != null"> and u.userid = #{vo.userid} </if>
+        <choose>
+            <when test="vo.tradetype!=null and vo.tradetype==2">
+                and u.tradetype=2
+            </when>
+            <otherwise>
+                and (u.tradetype=1 or u.tradetype is null)
+            </otherwise>
+        </choose>
+        )
+    </select>
 </mapper>

+ 56 - 22
mtp3-century/src/main/resources/mapper/UseraccountMapper.xml

@@ -667,81 +667,115 @@
 
     <select id="getTradeRuleDescriptions" resultType="com.muchinfo.mtp3pojos.vo.investor.RulesConfigVo">
         with cf as(select u.paramid,u.paramvalue from usergrouptradeconfig u
-        where u.ruletype=2 and u.memberuserid = #{areauserid} and
+        where u.ruletype=2 and u.memberuserid = #{vo.memberuserid} and
         u.usergroupid=0
-        and u.marketid = #{marketid} and u.goodsid = #{goodsid}
+        and u.marketid = #{vo.marketid} and u.goodsid = #{vo.goodsid}
         ),
         baserule as (
-        select t.ruleid,t.paramvalue from goodstraderule t where t.goodsid = #{goodsid}
+        select t.ruleid,t.paramvalue from goodstraderule t where t.goodsid = #{vo.goodsid}
         ),
         jjs as (
         select gs.qtydecimalplace,t.ruleid,t.paramvalue from goodstraderule t,goods gs
-        where t.goodsid=gs.goodsid and t.goodsid = #{goodsid}
+        where t.goodsid=gs.goodsid and t.goodsid = #{vo.goodsid}
         union
         select gp.qtydecimalplace,t.ruleid,t.paramvalue from GoodsGroupTradeRule t, goodsgroup gp
         where t.goodsgroupid = gp.goodsgroupid and t.ruleid not in (select ruleid from baserule)
-        and t.goodsgroupid=(select g.goodsgroupid from goods g where g.goodsid=#{goodsid})
+        and t.goodsgroupid=(select g.goodsgroupid from goods g where g.goodsid=#{vo.goodsid})
         )
-        <if test="usergroupid != null">
+        <if test="vo.usergroupid != null">
             , co as (select u.paramid, u.paramvalue from usergrouptradeconfig u
-            where u.ruletype=2 <if test="areauserid != null">and u.memberuserid = #{areauserid}</if> and
-            u.usergroupid=#{usergroupid} and u.marketid = #{marketid} and u.goodsid = #{goodsid}
+            where u.ruletype=2 <if test="vo.memberuserid != null">and u.memberuserid = #{vo.memberuserid}</if> and
+            u.usergroupid=#{vo.usergroupid} and u.marketid = #{vo.marketid} and u.goodsid = #{vo.goodsid}
             )
         </if>
+        <if test="vo.usergroupid2 != null">
+            , co1 as (select u.paramid, u.paramvalue from usergrouptradeconfig u
+            where u.ruletype=2 <if test="vo.memberuserid != null">and u.memberuserid = #{vo.memberuserid}</if> and
+            u.usergroupid=#{vo.usergroupid2} and u.marketid = #{vo.marketid} and u.goodsid = #{vo.goodsid}
+            )
+        </if>
+
         select t.*,g.qtydecimalplace,g.paramvalue,cf.paramvalue dvalue
-        <if test="usergroupid != null">
+        <if test="vo.usergroupid != null">
             ,co.paramvalue cvalue
         </if>
+        <if test="vo.usergroupid2 != null">
+            ,co1.paramvalue gvalue
+        </if>
+
         from traderuledescription t
         left join traderuleconfig c on t.ruleid = c.ruleid and c.ispersonalized = 1
         left join jjs g on t.ruleid = g.ruleid
         left join cf cf on t.ruleid = cf.paramid
-        <if test="usergroupid != null">
+        <if test="vo.usergroupid != null">
             left join co co on t.ruleid = co.paramid
         </if>
-        where c.trademodeid = (select m.trademode from market m where m.marketid = #{marketid} )
+        <if test="vo.usergroupid2 != null">
+            left join co1 co1 on t.ruleid = co1.paramid
+        </if>
+        where c.trademodeid = (select m.trademode from market m where m.marketid = #{vo.marketid} )
     </select>
 
     <select id="getTradeFeeDescriptions" resultType="com.muchinfo.mtp3pojos.vo.investor.FeesConfigVo">
         with cf as(
         select u.paramid,u.feealgorithm, u.paramvalue
         from usergrouptradeconfig u
-        where u.ruletype=3 <if test="areauserid != null">and u.memberuserid = #{areauserid}</if>   and
+        where u.ruletype=3 <if test="vo.memberuserid != null">and u.memberuserid = #{vo.memberuserid}</if>   and
         u.usergroupid=0
-        and u.marketid = #{marketid} and u.goodsid = #{goodsid}
+        and u.marketid = #{vo.marketid} and u.goodsid = #{vo.goodsid}
         ),
         basefee as (
         select t.tradefeeid,t.feealgorithm,t.exchangevalue,t.memberdefaultvalue,t.memberminvalue,t.membermaxvalue
-        from GoodsTradeFee t where t.goodsid = #{goodsid}
+        from GoodsTradeFee t where t.goodsid = #{vo.goodsid}
         ),
         jjs as (
         select * from basefee t
         union
         select t.tradefeeid,t.feealgorithm,t.exchangevalue,t.memberdefaultvalue,t.memberminvalue,t.membermaxvalue
         from GoodsGroupTradeFee t
-        where t.goodsgroupid=(select g.goodsgroupid from goods g where g.goodsid=#{goodsid})
+        where t.goodsgroupid=(select g.goodsgroupid from goods g where g.goodsid=#{vo.goodsid})
         and t.tradefeeid not in (select tradefeeid from basefee)
         )
-        <if test="usergroupid != null">
+        <if test="vo.usergroupid != null">
             , co as (select u.paramid,u.feealgorithm, u.paramvalue from usergrouptradeconfig u
-            where u.ruletype=3 <if test="areauserid != null">and u.memberuserid = #{areauserid}</if> and
-            u.usergroupid=#{usergroupid} and u.marketid = #{marketid} and u.goodsid = #{goodsid}
+            where u.ruletype=3 <if test="vo.memberuserid != null">and u.memberuserid = #{vo.memberuserid}</if> and
+            u.usergroupid=#{vo.usergroupid} and u.marketid = #{marketid} and u.goodsid = #{vo.goodsid}
+            )
+        </if>
+        <if test="vo.usergroupid2 != null">
+            , co1 as (select u.paramid,u.feealgorithm, u.paramvalue from usergrouptradeconfig u
+            where u.ruletype=3 <if test="vo.memberuserid != null">and u.memberuserid = #{vo.memberuserid}</if> and
+            u.usergroupid=#{vo.usergroupid2} and u.marketid = #{vo.marketid} and u.goodsid = #{vo.goodsid}
             )
         </if>
         select t.*,g.feealgorithm, g.memberminvalue,g.membermaxvalue,
         cf.feealgorithm drithm, cf.paramvalue dvalue
-        <if test="usergroupid != null">
+        <choose>
+            <when test="vo.ruletype != null">
+                ,g.exchangevalue exchangevalue
+            </when>
+            <otherwise>
+                ,g.memberdefaultvalue exchangevalue
+            </otherwise>
+        </choose>
+        <if test="vo.usergroupid != null">
             ,co.feealgorithm crithm,co.paramvalue cvalue
         </if>
+        <if test="vo.usergroupid2 != null">
+            ,co1.feealgorithm grithm,co1.paramvalue gvalue
+        </if>
        ,g.memberdefaultvalue exchangevalue
         from tradefeedescription t
         left join jjs g on t.tradefeeid = g.tradefeeid
         left join tradefeeconfig c on t.tradefeedescriptionid = c.tradefeedescriptionid and c.ispersonalized = 1
         left join cf cf on t.tradefeeid = cf.paramid
-        <if test="usergroupid != null">
+        <if test="vo.usergroupid != null">
             left join co co on t.tradefeeid = co.paramid
         </if>
-        where c.tradepropertyid=(select m.tradeproperty from market m where m.marketid = #{marketid})
+        <if test="vo.usergroupid2 != null">
+            left join co1 co1 on t.tradefeeid = co1.paramid
+        </if>
+        where c.tradepropertyid=(select m.tradeproperty from market m where m.marketid = #{vo.marketid})
         and g.feealgorithm is not null
     </select>
 
@@ -779,7 +813,7 @@
         from userreckonaccount t
                  left join enumdicitem e on e.enumitemname = t.currencyid
         where e.enumdiccode = 'currency'
-          and t.userid = #{areaid}
+          and t.userid = #{userid}
           and t.defaultaccounttype = 2
     </select>
 </mapper>

+ 1 - 1
mtp3-common/src/main/java/com/muchinfo/mtp3common/enumtype/MessageType.java

@@ -122,7 +122,7 @@ public enum MessageType {
 
     AMOUNT_ERROR_CODE_001("amount_error_code_001", "金额为 0,不做处理!"),
 
-    TRAACC_ERROR_CODE_001("TRAACC_ERROR_CODE_001", "登录账户重复,请点击重新生并再次提交!"),
+    TRAACC_ERROR_CODE_001("TRAACC_ERROR_CODE_001", "登录账户重复,请点击重新生并再次提交!"),
 
     INVESTOR_ERROR_CODE_001("investor_error_code_001", "没有找到资金账户"),
     INVESTOR_ERROR_CODE_002("investor_error_code_002", "非投资者账户,不能销户审核."),

+ 2 - 0
mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IGoodsMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.muchinfo.mtp3pojos.entity.Goods;
 import com.muchinfo.mtp3pojos.vo.common.GoodsSelectParam;
 import com.muchinfo.mtp3pojos.vo.common.GoodsSelectResult;
+import com.muchinfo.mtp3pojos.vo.investor.PersonalizationDelParam;
 import com.muchinfo.mtp3pojos.vo.organ.GoodsForRoleVo;
 import com.muchinfo.mtp3pojos.vo.reportform.GoodsReportParam;
 import com.muchinfo.mtp3pojos.vo.reportform.GoodsReportResult;
@@ -33,4 +34,5 @@ public interface IGoodsMapper extends BaseMapper<Goods> {
 
     List<GoodsForRoleVo> queryAreaGoodsConfig(@Param("userid") Long userid);
 
+    List<Goods> getNoTradeConfigGoodsForAccount(@Param("vo") PersonalizationDelParam param);
 }

+ 2 - 0
mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IMarketMapper.java

@@ -3,6 +3,7 @@ package com.muchinfo.mtp3interface.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.muchinfo.mtp3pojos.entity.Market;
 import com.muchinfo.mtp3pojos.entity.Usergroup;
+import com.muchinfo.mtp3pojos.vo.investor.PersonalizationDelParam;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -32,4 +33,5 @@ public interface IMarketMapper extends BaseMapper<Market> {
 
     void updateExchareaidNull(@Param("userid") Long userid);
 
+    List<Market> getNoTradeConfigMarketsForAccount(@Param("vo") PersonalizationDelParam param);
 }

+ 4 - 0
mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/ITaaccountMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.muchinfo.mtp3pojos.entity.Taaccount;
 import com.muchinfo.mtp3pojos.vo.common.TAAccountChildrenResult;
+import com.muchinfo.mtp3pojos.vo.investor.PersonalizationDelParam;
 import com.muchinfo.mtp3pojos.vo.marketrun.TaaccountMonitorVo;
 import com.muchinfo.mtp3pojos.vo.organ.UserAccountRoleParam;
 import com.muchinfo.mtp3pojos.vo.organ.UserAccountRspResult;
@@ -47,4 +48,7 @@ public interface ITaaccountMapper extends BaseMapper<Taaccount> {
     IPage<UserAccountRspResult> queryWarehouseOrganPage(IPage<UserAccountRspResult> page, @Param("vo") UserAccountRoleParam param);
 
     void deleteUserMarket(@Param("userid") Long userid, @Param("marketids") List<Long> marketids);
+
+    List<Long> getNoTradeConfigAccounts(@Param("vo") PersonalizationDelParam param);
+
 }

+ 2 - 3
mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IUseraccountMapper.java

@@ -10,7 +10,6 @@ import com.muchinfo.mtp3pojos.vo.common.OrganSelectParam;
 import com.muchinfo.mtp3pojos.vo.common.OrganSelectResult;
 import com.muchinfo.mtp3pojos.vo.investor.*;
 import com.muchinfo.mtp3pojos.vo.organ.UserAccountReqParam;
-import com.muchinfo.mtp3pojos.vo.organ.UserAccountRoleParam;
 import com.muchinfo.mtp3pojos.vo.organ.UserAccountRspResult;
 import com.muchinfo.mtp3pojos.vo.profitshar.ProfitSharGroupOrganResult;
 import org.apache.ibatis.annotations.Mapper;
@@ -76,9 +75,9 @@ public interface IUseraccountMapper extends BaseMapper<Useraccount> {
 
     List<InvestorInitBZResult> getCustomerTypeByGoodsid(@Param("goodsid") Long goodsid, @Param("customertypeid") Integer customertypeid);
 
-    List<RulesConfigVo> getTradeRuleDescriptions(@Param("marketid") Long marketid, @Param("goodsid") Long goodsid, @Param("areauserid") Long areauserid, @Param("usergroupid") Long usergroupid);
+    List<RulesConfigVo> getTradeRuleDescriptions(@Param("vo") PersonalizationDelParam param);
 
-    List<FeesConfigVo> getTradeFeeDescriptions(@Param("marketid") Long marketid, @Param("goodsid") Long goodsid, @Param("areauserid") Long areauserid, @Param("usergroupid") Long usergroupid);
+    List<FeesConfigVo> getTradeFeeDescriptions(@Param("vo") PersonalizationDelParam param);
 
     List<OrganSelectResult> queryOrganSelect2And3(@Param("vo") OrganSelectParam param);
 

+ 10 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Accounttradeconfig.java

@@ -2,6 +2,8 @@ package com.muchinfo.mtp3pojos.entity;
 
 import com.baomidou.mybatisplus.annotation.*;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.muchinfo.mtp3pojos.vo.investor.FeesConfigVo;
+import com.muchinfo.mtp3pojos.vo.investor.RulesConfigVo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
@@ -10,6 +12,7 @@ import lombok.experimental.Accessors;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 /**
  * <p>
@@ -92,6 +95,13 @@ public class Accounttradeconfig extends Model<Accounttradeconfig> {
 
     @TableField(select = false)
     private String marketname;
+
+    @TableField(select = false)
+    private List<RulesConfigVo> druleList;
+
+    @TableField(select = false)
+    private List<FeesConfigVo> dfeeList;
+
     @Override
     public Serializable pkVal() {
         return this.autoid;

+ 0 - 1
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Loginaccount.java

@@ -140,7 +140,6 @@ public class Loginaccount extends Model<Loginaccount> implements Serializable{
     private Long subjectid;
 
     @TableField(select = false)
-    @ApiModelProperty(value = "授权资金账户List")
     List<Long> accountIdS;
 
     @Override

+ 1 - 1
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Systemmanager.java

@@ -31,7 +31,7 @@ import java.util.List;
 @NoArgsConstructor
 @Builder
 @KeySequence(value = "SEQ_SYSTEMMANAGER")
-public class    Systemmanager extends Model<Systemmanager> implements UserDetails,Serializable{
+public class Systemmanager extends Model<Systemmanager> implements UserDetails,Serializable{
 
     private static final long serialVersionUID = 1L;
 

+ 13 - 13
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/WskhUserinfo.java

@@ -24,7 +24,7 @@ import java.util.Date;
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
 @TableName("WSKH_USERINFO")
-@ApiModel(value="WskhUserinfo对象", description="网上开户用户表 (开户成功删除记录)")
+@ApiModel(value = "WskhUserinfo对象", description = "网上开户用户表 (开户成功删除记录)")
 @AllArgsConstructor
 @NoArgsConstructor
 @Builder
@@ -34,7 +34,7 @@ public class WskhUserinfo extends Model<WskhUserinfo> {
     private static final long serialVersionUID = 1L;
 
     @ApiModelProperty(value = "用户ID(自增ID)SEQ_WSKH_USERINFO")
-    @TableId(value = "USERID", type=IdType.INPUT)
+    @TableId(value = "USERID", type = IdType.INPUT)
     private Long userid;
 
     @ApiModelProperty(value = "用户姓名")
@@ -356,37 +356,37 @@ public class WskhUserinfo extends Model<WskhUserinfo> {
     @TableField("CREDITQUOTA")
     private BigDecimal creditquota;
 
-    @TableField(exist=false)
+    @TableField(exist = false)
     private Integer allocated;
     @ApiModelProperty(value = "签约类型与签约银行是否显示:0为否,1为是")
-    @TableField(exist=false)
+    @TableField(exist = false)
     private String isBank;
     @ApiModelProperty(value = "推荐人名称")
-    @TableField(exist=false)
+    @TableField(exist = false)
     private String referralname;
     @ApiModelProperty(value = "审核状态,1 通过,2 拒绝")
-    @TableField(exist=false)
+    @TableField(exist = false)
     private Integer auditflag;
     @ApiModelProperty(value = "管理员账号")
-    @TableField(exist=false)
+    @TableField(exist = false)
     private String smlogincode;
     @ApiModelProperty(value = "管理员名称")
-    @TableField(exist=false)
+    @TableField(exist = false)
     private String loginname;
     @ApiModelProperty(value = "管理员密码")
-    @TableField(exist=false)
+    @TableField(exist = false)
     private String smpassword;
     @ApiModelProperty(value = "所属会员")
-    @TableField(exist=false)
+    @TableField(exist = false)
     private String memberusername;
     @ApiModelProperty(value = "经纪人")
-    @TableField(exist=false)
+    @TableField(exist = false)
     private String brokername;
     @ApiModelProperty(value = "所属机构")
-    @TableField(exist=false)
+    @TableField(exist = false)
     private String areaname;
     @ApiModelProperty(value = "地址")
-    @TableField(exist=false)
+    @TableField(exist = false)
     private String pathname;
 
     @Override

+ 12 - 2
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/investor/InvestorPersonViewParam.java → mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/investor/PersonalizationDelParam.java

@@ -11,7 +11,7 @@ import lombok.NoArgsConstructor;
 @AllArgsConstructor
 @NoArgsConstructor
 @ApiModel(value = "InvestorPersonViewParam对象", description = "详情")
-public class InvestorPersonViewParam {
+public class PersonalizationDelParam {
 
     private Long usergroupid;
 
@@ -19,5 +19,15 @@ public class InvestorPersonViewParam {
 
     private Long goodsid;
 
-    private Integer goodsname;
+    private Long userid;
+
+    private Long accountid;
+
+    private Long memberuserid;
+
+    private Integer ruletype;
+
+    private Integer tradetype;
+
+    private Long usergroupid2;
 }

+ 86 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/marketrun/AccPosInfoVo.java

@@ -0,0 +1,86 @@
+package com.muchinfo.mtp3pojos.vo.marketrun;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Builder
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(value = "MarketRunAccPageResult对象", description = "账户持仓汇总监控")
+public class AccPosInfoVo {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "商品ID")
+    private Long goodsid;
+
+    @ApiModelProperty(value = "占用保证金")
+    private Double margin;
+
+    @ApiModelProperty(value = "持仓头寸(买)")
+    private Integer buy_hold_qty;
+
+    @ApiModelProperty(value = "持仓金额(买)")
+    private Double buy_hold_value;
+
+    @ApiModelProperty(value = "持仓均价(买)")
+    private Double buy_avg_price;
+
+    @ApiModelProperty(value = "浮动盈亏(买)")
+    private Double buy_float_pl;
+
+    @ApiModelProperty(value = "持仓头寸(卖)")
+    private Integer sell_hold_qty;
+
+    @ApiModelProperty(value = "持仓金额(卖)")
+    private Double sell_hold_value;
+
+    @ApiModelProperty(value = "持仓均价(卖)")
+    private Double sell_avg_price;
+
+    @ApiModelProperty(value = "浮动盈亏(卖)")
+    private Double sell_float_pl;
+
+    @ApiModelProperty(value = "浮动盈亏(总)")
+    private Double total_float_pl;
+
+    @ApiModelProperty(value = "实时行情(买)")
+    private Double quote_price_buy;
+
+    @ApiModelProperty(value = "实时行情(卖)")
+    private Double quote_price_sell;
+
+    @ApiModelProperty(value = "实时行情")
+    private Double quote_price_last;
+
+    private String goodsname;
+
+    @ApiModelProperty(value = "报价小数位")
+    private Integer decimalplace;
+
+    @ApiModelProperty(value = "交易模式")
+    private Integer trademode;
+
+    @ApiModelProperty(value = "用户名称 --查询条件")
+    private String username;
+
+    @ApiModelProperty(value = "上级机构 --查询条件")
+    private String parentname;
+
+    @ApiModelProperty(value = "账户ID 查询条件 --查询条件")
+    private Long accountid;
+
+    @ApiModelProperty(value = "排除账户ID --查询条件")
+    private String excludeaccountids;
+
+    private Integer pageNo;
+    private Integer pageSize;
+
+    @ApiModelProperty(value = "排序方式: 1-总损益顺序 2-总损益倒序 --查询条件")
+    private Integer orderby;
+}

+ 51 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/marketrun/MarketRunMemberResult.java

@@ -0,0 +1,51 @@
+package com.muchinfo.mtp3pojos.vo.marketrun;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+@Builder
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(value = "MarketRunMemberResult对象", description = "做事会员风险监控响应")
+public class MarketRunMemberResult {
+
+    @ApiModelProperty(value = "账户")
+    private Long accountid;
+
+    @ApiModelProperty(value = "账户状态")
+    private Integer tradestatus;
+
+    @ApiModelProperty(value = "会员名称")
+    private String accountname;
+
+    @ApiModelProperty(value = "当前冻结资金")
+    private BigDecimal freezemargin;
+
+    @ApiModelProperty(value = "当前占用保证金")
+    private BigDecimal usedmargin;
+
+    @ApiModelProperty(value = "当前净值")
+    private BigDecimal balance;
+
+    @ApiModelProperty(value = "可用资金")
+    private BigDecimal availmargin;
+
+    @ApiModelProperty(value = "总冻结")
+    private BigDecimal totalfrozen;
+
+    @ApiModelProperty(value = "浮动盈亏")
+    private BigDecimal totalfloatpl;
+
+    @ApiModelProperty(value = "当前风险率(%)")
+    private BigDecimal curriskrate;
+
+    @ApiModelProperty(value = "当前风险等级")
+    private Integer currisklv;
+}

+ 1 - 1
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/organ/AccountRiskConfigParam.java

@@ -11,7 +11,7 @@ import lombok.NoArgsConstructor;
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
-@ApiModel(value = "MemberGoodsAddParam对象", description = "风控个性化设置")
+@ApiModel(value = "AccountRiskConfigParam对象", description = "风控个性化设置")
 public class AccountRiskConfigParam {
 
     @ApiModelProperty(value = "会员")

+ 33 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/organ/AccountTradeConfigTreeVo.java

@@ -0,0 +1,33 @@
+package com.muchinfo.mtp3pojos.vo.organ;
+
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Builder
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(value = "AccountTradeConfigTreeVo对象", description = "账户个性化设置")
+public class AccountTradeConfigTreeVo {
+
+    private String id;
+
+    private String pid;
+
+    private String name;
+
+    private Integer level;
+
+    private Long userid;
+
+    private Long accountid;
+
+    private Long marketid;
+
+    private Long goodsid;
+
+    private Integer tradetype;
+}

+ 35 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/organ/OrganInitAccountAddResult.java

@@ -0,0 +1,35 @@
+package com.muchinfo.mtp3pojos.vo.organ;
+
+import com.muchinfo.mtp3pojos.entity.Goods;
+import com.muchinfo.mtp3pojos.entity.Market;
+import com.muchinfo.mtp3pojos.entity.Usergroup;
+import com.muchinfo.mtp3pojos.vo.investor.FeesConfigVo;
+import com.muchinfo.mtp3pojos.vo.investor.InvestorInitBZResult;
+import com.muchinfo.mtp3pojos.vo.investor.RulesConfigVo;
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Builder
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(value = "OrganInitAccountAddResult对象", description = "资金账户个性化新增初始化")
+public class OrganInitAccountAddResult {
+
+    private List<Market> markets;
+
+    private List<Goods> goods;
+
+    private List<Long> accountids;
+
+    private List<InvestorInitBZResult> results;
+
+    private List<FeesConfigVo> feesConfigVos;
+
+    private List<RulesConfigVo> rulesConfigVos;
+}

+ 1 - 1
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/organ/OrganRoleModifyParam.java

@@ -15,7 +15,7 @@ import java.util.List;
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
-@ApiModel(value = "UserAccountDetailResult对象", description = "机构新增")
+@ApiModel(value = "OrganRoleModifyParam对象", description = "机构新增")
 public class OrganRoleModifyParam {
 
     @ApiModelProperty(value = "1新增 2修改")

+ 36 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/organ/SupportTradeConfigAddParam.java

@@ -0,0 +1,36 @@
+package com.muchinfo.mtp3pojos.vo.organ;
+
+import com.muchinfo.mtp3pojos.entity.Accounttradeconfig;
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Builder
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(value = "SupportTradeConfigViewParam对象", description = "个性化详情")
+public class SupportTradeConfigAddParam {
+
+    private Long userid;
+
+    private Long marketid;
+
+    private Long accountid;
+
+    private Long goodsid;
+
+    private Integer tradetype;
+
+    private Integer feealgorithm;
+
+    private Integer paramid;
+
+    private List<Accounttradeconfig> ruleList;
+
+    private List<Accounttradeconfig> feeList;
+}

+ 1 - 1
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/organ/UserAccountReqParam.java

@@ -12,7 +12,7 @@ import java.util.Date;
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
-@ApiModel(value = "UserInfoReqParam对象", description = "列表查询请求")
+@ApiModel(value = "UserAccountReqParam对象", description = "列表查询请求")
 public class UserAccountReqParam {
 
     private Integer usertype;

+ 1 - 1
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/organ/UserAccountRoleParam.java

@@ -9,7 +9,7 @@ import lombok.NoArgsConstructor;
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
-@ApiModel(value = "UserInfoVo对象", description = "机构资料信息")
+@ApiModel(value = "UserAccountRoleParam对象", description = "机构资料信息")
 public class UserAccountRoleParam {
 
     private Integer roleid;

+ 1 - 1
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/organ/UserAccountRspResult.java

@@ -11,7 +11,7 @@ import java.util.Date;
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
-@ApiModel(value = "UserInfoVo对象", description = "机构资料信息")
+@ApiModel(value = "UserAccountRspResult对象", description = "机构资料信息")
 public class UserAccountRspResult extends Useraccount {
 
     @ApiModelProperty(value = "资金账户")

+ 4 - 1
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/organ/UserAccountSignlogResult.java

@@ -11,7 +11,7 @@ import java.util.Date;
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
-@ApiModel(value = "UserInfoVo对象", description = "机构资料信息")
+@ApiModel(value = "UserAccountSignlogResult对象", description = "机构资料信息")
 public class UserAccountSignlogResult {
 
     @ApiModelProperty(value = "资金账户")
@@ -33,4 +33,7 @@ public class UserAccountSignlogResult {
     private String bankaccountno;
 
     private String histradedate;
+
+    @ApiModelProperty(value = "币种")
+    private String currency;
 }

+ 4 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/organ/son/OrganAddSonOrganParam.java

@@ -108,6 +108,9 @@ public class OrganAddSonOrganParam {
     @ApiModelProperty(value = "管理员登录帐号 ")
     private String logincode;
 
+    @ApiModelProperty(value = "管理员id ")
+    private Long autoid;
+
     @ApiModelProperty(value = "管理员名称 ")
     private String username;
 
@@ -118,4 +121,5 @@ public class OrganAddSonOrganParam {
     private String attachment2;
 
     private Long reckonaccountid;
+
 }

+ 3 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/taaccount/TaAccountQueryResult.java

@@ -46,4 +46,7 @@ public class TaAccountQueryResult {
     @ApiModelProperty(value = "风险率")
     private BigDecimal curRiskRate;
 
+    @ApiModelProperty(value = "出金阈值")
+    private BigDecimal outThreshold;
+
 }