Selaa lähdekoodia

新增子机构管理页面接口,修改bug

xie.kaifeng 11 kuukautta sitten
vanhempi
commit
b7760a435a
19 muutettua tiedostoa jossa 756 lisäystä ja 11 poistoa
  1. 38 2
      mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/OrganSonController.java
  2. 12 2
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IOrganSonService.java
  3. 303 3
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/OrganSonServiceService.java
  4. 14 0
      mtp3-century/src/main/resources/mapper/TradepositionMapper.xml
  5. 106 1
      mtp3-century/src/main/resources/mapper/UseraccountMapper.xml
  6. 2 0
      mtp3-century/src/main/resources/message_en.properties
  7. 2 0
      mtp3-century/src/main/resources/message_th.properties
  8. 2 0
      mtp3-century/src/main/resources/message_zh-CN.properties
  9. 2 0
      mtp3-century/src/main/resources/message_zh-HK.properties
  10. 2 0
      mtp3-century/src/main/resources/message_zh-TW.properties
  11. 3 1
      mtp3-common/src/main/java/com/muchinfo/mtp3common/enumtype/MessageType.java
  12. 16 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IInvestortransferMapper.java
  13. 2 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/ITradepositionMapper.java
  14. 14 2
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IUseraccountMapper.java
  15. 119 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Investortransfer.java
  16. 2 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/organ/son/OrganAddSonOrganParam.java
  17. 43 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/organ/son/OrganSonTransferAddParam.java
  18. 29 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/organ/son/OrganSonTransferParam.java
  19. 45 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/organ/son/OrganSonTransferResult.java

+ 38 - 2
mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/OrganSonController.java

@@ -8,11 +8,12 @@ import com.muchinfo.mtp3common.enumtype.MessageType;
 import com.muchinfo.mtp3common.vo.AjaxResult;
 import com.muchinfo.mtp3common.utils.JsonUtils;
 import com.muchinfo.mtp3common.vo.PageResult;
+import com.muchinfo.mtp3pojos.vo.common.OrganSelectResult;
 import com.muchinfo.mtp3pojos.vo.investor.InvestorModifyAuditParam;
+import com.muchinfo.mtp3pojos.vo.organ.OrganRoleModifyParam;
 import com.muchinfo.mtp3pojos.vo.organ.UserAccountReqParam;
 import com.muchinfo.mtp3pojos.vo.organ.UserAccountRspResult;
-import com.muchinfo.mtp3pojos.vo.organ.son.OrganAddSonOrganParam;
-import com.muchinfo.mtp3pojos.vo.organ.son.OrganSonDetailResult;
+import com.muchinfo.mtp3pojos.vo.organ.son.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
@@ -134,4 +135,39 @@ public class OrganSonController {
     public AjaxResult modifyAudit(InvestorModifyAuditParam param, HttpServletRequest request) {
         return iUseraccountService.modifyAudit(param, request);
     }
+
+    @ApiOperation("会员机构管理-->子机构管理-->子机构转移-->获取机构列表")
+    @RequestMapping(method = RequestMethod.GET, value = "/queryOrganSonTransfer")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    private PageResult<OrganSonTransferResult> queryOrganSonTransfer(OrganSonTransferParam param, HttpServletRequest request) {
+        return iOrganSonService.queryOrganSonTransfer(param, request);
+    }
+
+    @ApiOperation("会员机构管理-->子机构管理-->子机构转移-->执行转移")
+    @RequestMapping(method = RequestMethod.GET, value = "/executeTransfer")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    private AjaxResult executeTransfer(HttpServletRequest request) {
+        return iOrganSonService.executeTransfer(request);
+    }
+
+    @ApiOperation("会员机构管理-->子机构管理-->子机构转移-->撤销")
+    @RequestMapping(method = RequestMethod.GET, value = "/backtranfor")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    private AjaxResult backtranfor(Long autoid, HttpServletRequest request) {
+        return iOrganSonService.backtranfor(autoid, request);
+    }
+
+    @ApiOperation("会员机构管理-->子机构管理-->子机构转移-->新增-->获取转出子机构")
+    @RequestMapping(method = RequestMethod.GET, value = "/querySonOrganPageByLevel")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    private AjaxResult<OrganSelectResult> querySonOrganPageByLevel(Integer subarealevel, String searchcode, HttpServletRequest request) {
+        return iOrganSonService.querySonOrganPageByLevel(subarealevel,searchcode, request);
+    }
+
+    @ApiOperation("会员机构管理-->子机构管理-->子机构转移-->新增")
+    @RequestMapping(method = RequestMethod.POST, value = "/organSonTransferAdd")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    private AjaxResult organSonTransferAdd(@RequestBody OrganSonTransferAddParam vo, HttpServletRequest request) {
+        return iOrganSonService.organSonTransferAdd(vo, request);
+    }
 }

+ 12 - 2
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IOrganSonService.java

@@ -2,10 +2,10 @@ package com.muchinfo.mtp3century.service;
 
 import com.muchinfo.mtp3common.vo.AjaxResult;
 import com.muchinfo.mtp3common.vo.PageResult;
+import com.muchinfo.mtp3pojos.vo.common.OrganSelectResult;
 import com.muchinfo.mtp3pojos.vo.organ.UserAccountReqParam;
 import com.muchinfo.mtp3pojos.vo.organ.UserAccountRspResult;
-import com.muchinfo.mtp3pojos.vo.organ.son.OrganAddSonOrganParam;
-import com.muchinfo.mtp3pojos.vo.organ.son.OrganSonDetailResult;
+import com.muchinfo.mtp3pojos.vo.organ.son.*;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -34,4 +34,14 @@ public interface IOrganSonService {
     AjaxResult auditorganson(Long userid, Long auditflag, String msg, HttpServletRequest request);
 
     PageResult<UserAccountRspResult> queryOrganSonModify(UserAccountReqParam param, HttpServletRequest request);
+
+    PageResult<OrganSonTransferResult> queryOrganSonTransfer(OrganSonTransferParam param, HttpServletRequest request);
+
+    AjaxResult executeTransfer(HttpServletRequest request);
+
+    AjaxResult backtranfor(Long autoid, HttpServletRequest request);
+
+    AjaxResult<OrganSelectResult> querySonOrganPageByLevel(Integer subarealevel, String searchcode, HttpServletRequest request);
+
+    AjaxResult organSonTransferAdd(OrganSonTransferAddParam vo, HttpServletRequest request);
 }

+ 303 - 3
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/OrganSonServiceService.java

@@ -25,14 +25,14 @@ import com.muchinfo.mtp3common.vo.PageResult;
 import com.muchinfo.mtp3common.vo.ProtoHelper;
 import com.muchinfo.mtp3interface.mapper.*;
 import com.muchinfo.mtp3pojos.entity.*;
+import com.muchinfo.mtp3pojos.vo.common.OrganSelectResult;
 import com.muchinfo.mtp3pojos.vo.investor.DetailAfterResult;
 import com.muchinfo.mtp3pojos.vo.investor.DetailBeforeResult;
 import com.muchinfo.mtp3pojos.vo.investor.UserAccountDetailVo;
 import com.muchinfo.mtp3pojos.vo.investor.UserinfoDetailVo;
 import com.muchinfo.mtp3pojos.vo.organ.UserAccountReqParam;
 import com.muchinfo.mtp3pojos.vo.organ.UserAccountRspResult;
-import com.muchinfo.mtp3pojos.vo.organ.son.OrganAddSonOrganParam;
-import com.muchinfo.mtp3pojos.vo.organ.son.OrganSonDetailResult;
+import com.muchinfo.mtp3pojos.vo.organ.son.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.amqp.core.Message;
@@ -101,6 +101,10 @@ public class OrganSonServiceService implements IOrganSonService {
     private IRoleuserMapper iRoleuserMapper;
     @Resource
     private IQuoterMapper iQuoterMapper;
+    @Resource
+    private IInvestortransferMapper iInvestortransferMapper;
+    @Resource
+    private ISubareagroupdetailMapper iSubareagroupdetailMapper;
 
     @Override
     public PageResult<UserAccountRspResult> querySon(UserAccountReqParam param, HttpServletRequest request) {
@@ -625,7 +629,9 @@ public class OrganSonServiceService implements IOrganSonService {
                 }
             }
         }
-
+        if (param.getAccountstatus() != null && param.getAccountstatus().equals(2)) {
+            organ.setAccountstatus(param.getAccountstatus());
+        }
         organ.setAccountname(param.getAccountname());
         organ.setModifierid(systemmanager.getAutoid());
         organ.setModifytime(new Date());
@@ -748,6 +754,9 @@ public class OrganSonServiceService implements IOrganSonService {
                 sm.setManagerstatus(2);
                 iSystemmanagerMapper.update(sm, new QueryWrapper<Systemmanager>().eq("autoid", sm.getAutoid()));
             }
+
+            iDraftUseraccountNewMapper.delete(new QueryWrapper<DraftUseraccountNew>().eq("userid", userid));
+            iDraftUserinfoMapper.delete(new QueryWrapper<DraftUserinfo>().eq("USERID", userid));
         } else {
             accountstatus = SysEnums.AccountStatusEnum.NORMAL.getType();
             for (Systemmanager sm : smList) {
@@ -774,6 +783,9 @@ public class OrganSonServiceService implements IOrganSonService {
     public PageResult<UserAccountRspResult> queryOrganSonModify(UserAccountReqParam param, HttpServletRequest request) {
         IPage<UserAccountRspResult> page = new Page<>(param.getPageNum(), param.getPageSize());
         IPage<UserAccountRspResult> userAccountVos = iUseraccountMapper.queryOrganSonModify(page, param);
+        userAccountVos.getRecords().forEach(a->{
+
+        });
         PageResult<UserAccountRspResult> pageResult = new PageResult<>();
         pageResult.setCode(Constants.Success_Code_Design);
         pageResult.setMessage(AjaxResult.dealMsg(MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language")));
@@ -785,6 +797,294 @@ public class OrganSonServiceService implements IOrganSonService {
         return pageResult;
     }
 
+    @Override
+    public PageResult<OrganSonTransferResult> queryOrganSonTransfer(OrganSonTransferParam param, HttpServletRequest request) {
+        param.setTransferusertype(2);
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        if (systemmanager.getReletype() != 1) {
+            param.setMemberuserid(systemmanager.getAreauserid());
+        }
+        IPage<OrganSonTransferResult> page = new Page<>(param.getPageNum(), param.getPageSize());
+        IPage<OrganSonTransferResult> userAccountVos = iUseraccountMapper.queryOrganSonTransfer(page, param);
+        userAccountVos.getRecords().forEach(a->{
+            a.setOutparentusername(iUseraccountMapper.selectOrganName(a.getAreauserid()));
+            a.setInuseridname(iUseraccountMapper.selectOrganName(a.getNewareauserid()));
+        });
+
+        PageResult<OrganSonTransferResult> pageResult = new PageResult<>();
+        pageResult.setCode(Constants.Success_Code_Design);
+        pageResult.setMessage(AjaxResult.dealMsg(MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language")));
+        pageResult.setPages(userAccountVos.getPages());
+        pageResult.setCurrent(userAccountVos.getCurrent());
+        pageResult.setTotal(userAccountVos.getTotal());
+        pageResult.setPageSize(userAccountVos.getSize());
+        pageResult.setData(userAccountVos.getRecords());
+        return pageResult;
+    }
+
+    @Override
+    public AjaxResult executeTransfer(HttpServletRequest request) {
+        Marketrun mr = iMarketrunMapper.selectOne(new QueryWrapper<Marketrun>().eq("marketid", 0L));
+        if (mr != null && mr.getRunstatus().equals(SysEnums.MarketRunStatus.SYSTEM_RECKON_SUCCESS.getCode())) {
+            // 系统日终处理成功时执行,用于自动执行出错时手动执行
+            organSonTransferExecute();
+            return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
+        }
+        return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM018.getCode(), request.getHeader("Accept-Language"));
+    }
+
+    @Override
+    public AjaxResult backtranfor(Long autoid, HttpServletRequest request) {
+        Investortransfer div = iInvestortransferMapper.selectOne(new QueryWrapper<Investortransfer>().eq("autoid", autoid));
+        if (div != null && div.getTransferstatus().equals(1)) {
+            div.setTransferstatus(4);
+            iInvestortransferMapper.updateById(div);
+        }
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
+    }
+
+    @Override
+    public AjaxResult<OrganSelectResult> querySonOrganPageByLevel(Integer subarealevel, String searchcode, HttpServletRequest request) {
+        List<OrganSelectResult> results = iUseraccountMapper.querySonOrganPageByLevel(subarealevel,searchcode);
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"),results);
+    }
+
+    @Override
+    public AjaxResult organSonTransferAdd(OrganSonTransferAddParam vo, HttpServletRequest request) {
+        // 转移交易商(单个+批量)、转移子机构
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+
+        Marketrun mr = iMarketrunMapper.selectOne(new QueryWrapper<Marketrun>().eq("marketid", 0L));
+        //申请,不转移
+        Investortransfer it = new Investortransfer();
+        it.setAreauserid(vo.getOutparentuserid());
+        it.setBrokeruserid(vo.getOutborkerid());
+        it.setInvestoruserid(vo.getOutinvestor());
+        it.setMemberuserid(vo.getOutmemberuserid());
+        it.setNewareauserid(vo.getInuserid());
+        it.setNewmemberuserid(vo.getInmemberuserid());
+        it.setNewbrokeruserid(vo.getInborker());
+        it.setOperatorid(systemmanager.getAutoid().toString());
+        it.setTransfertype(vo.getDiversiontype() + 1);
+        it.setCreatetime(new Date());
+        it.setTransferstatus(1);
+        it.setTransfermode(vo.getTransfermode());
+
+        if (mr != null && mr.getRunstatus() != 26) {
+            iInvestortransferMapper.insert(it);
+            return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM021.getCode(), request.getHeader("Accept-Language"));
+        } else {
+            // 执行中
+            it.setTransferstatus(5);
+            iInvestortransferMapper.insert(it);
+
+            investorTransfer2(it);
+        }
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
+    }
+
+    private void organSonTransferExecute() {
+        log.info("------开始转移--start---------------------------");
+        // 1:单个转移(交易商)  2:批量转移(交易商) 3:子机构转移
+        List<Investortransfer> list = iInvestortransferMapper.selectList(new QueryWrapper<Investortransfer>().eq("transferstatus", 1));
+        for (Investortransfer investortransfer : list) {
+            investorTransfer2(investortransfer);
+        }
+        log.info("------转移---------end--------------------");
+    }
+
+    private void investorTransfer2(Investortransfer it) {
+        log.info("---转移------------------------{}", it.getAutoid());
+        try {
+            Systemmanager user = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("autoid", it.getOperatorid()));
+            // 1:单个转移(交易商)  2:批量转移(交易商) 3:子机构转移
+            switch (it.getTransfertype()) {
+                case 1:
+                case 2:
+                    log.info("---转移交易商------------------------{}", it.getAutoid());
+                    investorTransfer(it, user);
+                    break;
+                case 3:
+                    log.info("---转移子机构------------------------{}", it.getAutoid());
+                    organSonTransfer(it);
+                    break;
+                default:
+                    break;
+            }
+            it.setUpdatetime(new Date());
+            iInvestortransferMapper.updateById(it);
+        } catch (Exception e) {
+            log.error("当前转移失败,失败id:" + it.getAutoid() + ",失败原因:" + e.getMessage());
+
+            it.setTransferstatus(3);
+            it.setRemark(e.getMessage().substring(0, 250));
+            it.setUpdatetime(new Date());
+            iInvestortransferMapper.updateById(it);
+        }
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void organSonTransfer(Investortransfer it) {
+        if (it.getAreauserid().equals(it.getNewareauserid())) {
+            it.setTransferstatus(3);
+            it.setRemark("转出转入机构相等");
+            return;
+        }
+
+        Useraccount outUser = iUseraccountMapper.selectOne(new QueryWrapper<Useraccount>().eq("userid", it.getAreauserid()));
+        Useraccount inUser = iUseraccountMapper.selectOne(new QueryWrapper<Useraccount>().eq("userid", it.getNewareauserid()));
+
+        // 转移前的Subarealevelpath
+        String oldSubPath = outUser.getSubarealevelpath();
+        // 整体转移后的 Subarealevelpath
+        String newSubPath = inUser.getSubarealevelpath() + outUser.getUserid() + ",";
+
+        // 更新所有下级子机构及交易商的memberuserid、parentuserid、Subarealevelpath
+        List<Useraccount> list = iUseraccountMapper.queryUser("," + outUser.getUserid() + ",");
+
+        if (it.getTransfermode() != null && it.getTransfermode().equals(1)) {
+            // 转移下级
+            for (Useraccount ua : list) {
+                if (ua.getUserid().equals(outUser.getUserid())) {
+                    // 忽略自己
+                    continue;
+                }
+
+                if (ua.getParentuserid().equals(outUser.getUserid())) {
+                    // 更新当前子机构的直属下级的上级
+                    ua.setParentuserid(inUser.getUserid());
+                }
+
+                ua.setMemberuserid(inUser.getMemberuserid());
+                // levelpath 用转入机构的path替换转出机构的path
+                String descPath = ua.getSubarealevelpath().replace(oldSubPath, inUser.getSubarealevelpath());
+                ua.setSubarealevelpath(descPath);
+
+                iUseraccountMapper.update(ua, new QueryWrapper<Useraccount>().eq("userid", ua.getUserid()));
+            }
+
+            // 转移下级时,删除转出机构分润分组内的下一级子机构
+            iUseraccountMapper.deleteSubAreaGroupDetailByUserid(outUser.getUserid());
+
+        } else if (it.getTransfermode() != null && it.getTransfermode().equals(2)) {
+            // 整体转移
+            for (Useraccount ua : list) {
+                ua.setMemberuserid(inUser.getMemberuserid());
+
+                if (ua.getUserid().equals(outUser.getUserid())) {
+                    // 转移的当前子机构更新上级为经纪会员
+                    ua.setParentuserid(inUser.getUserid());
+                    // 更新 Subarealevelpath
+                    ua.setSubarealevelpath(newSubPath);
+                } else {
+                    // 转移的下级子机构及交易商
+                    String descPath = ua.getSubarealevelpath().replace(oldSubPath, newSubPath);
+                    ua.setSubarealevelpath(descPath);
+                }
+
+                iUseraccountMapper.update(ua, new QueryWrapper<Useraccount>().eq("userid", ua.getUserid()));
+            }
+
+            // 整体转移时,删除自己所在分润组的记录
+            iSubareagroupdetailMapper.delete(new QueryWrapper<Subareagroupdetail>().eq("userid", outUser.getUserid()));
+        }
+        it.setTransferstatus(2);
+        it.setRemark("执行成功");
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public void investorTransfer(Investortransfer it, Systemmanager user) {
+        Long in_id = it.getNewareauserid() == null ? it.getNewmemberuserid() : it.getNewareauserid();
+        if ((it.getTransfertype() - 1) == 0) {
+            // 1:单个转移
+            Useraccount investor = iUseraccountMapper.selectOne(new QueryWrapper<Useraccount>().eq("userid", it.getInvestoruserid()));
+            if (investor.getParentuserid().equals(in_id)) {
+                it.setTransferstatus(3);
+                it.setRemark("投资者不能在同一机构下转移");
+                return;
+            }
+
+            //会员转时也不用,只有所平台转移才需要检验
+            //因为所属会员不变更,不影响单据
+            if (user.getReletype() != 1 && investor.getMemberuserid().compareTo(user.getAreauserid()) != 0) {
+                it.setTransferstatus(3);
+                it.setRemark("不能转移非会员下级投资者");
+                return;
+            } else {
+                String chkmsg = checkInvestorTransfor(it.getInvestoruserid());
+                if (chkmsg != null) {
+                    it.setTransferstatus(3);
+                    it.setRemark(chkmsg);
+                    return;
+                }
+            }
+
+            if (investor.getModifystatus() == 3 || investor.getModifystatus() == 4) {
+                investor.setModifystatus(1);
+                iDraftUseraccountNewMapper.delete(new QueryWrapper<DraftUseraccountNew>().eq("userid", it.getInvestoruserid()));
+            }
+
+            Useraccount in = iUseraccountMapper.selectOne(new QueryWrapper<Useraccount>().eq("userid", in_id));
+            investor.setParentuserid(in.getUserid());
+            investor.setMemberuserid(in.getMemberuserid());
+            investor.setBroker(it.getNewbrokeruserid());
+            investor.setSubarealevelpath(in.getSubarealevelpath() + investor.getUserid() + ",");
+            iUseraccountMapper.update(investor, new QueryWrapper<Useraccount>().eq("userid", in.getUserid()));
+        } else if ((it.getTransfertype() - 1) == 1) {
+            // 2:批量转移
+            Long out_id = it.getAreauserid() == null ? it.getMemberuserid() : it.getAreauserid();
+
+            if (out_id.equals(in_id)) {
+                it.setTransferstatus(3);
+                it.setRemark("投资者不能在同一机构下转移");
+                return;
+            }
+            List<Useraccount> list = iUseraccountMapper.getInvestorTODiversion(it.getMemberuserid(), it.getAreauserid(), it.getBrokeruserid());
+            if (CollectionUtils.isNotEmpty(list)) {
+                Useraccount in = iUseraccountMapper.selectOne(new QueryWrapper<Useraccount>().eq("userid", in_id));
+                if (user.getReletype() != 1 && in.getMemberuserid().compareTo(user.getAreauserid()) != 0) {
+                    it.setTransferstatus(3);
+                    it.setRemark("不能转移非本会员下级投资者");
+                    return;
+                }
+
+                for (Useraccount ua : list) {
+                    if (user.getReletype() == 1) {
+                        String chkmsg = checkInvestorTransfor(ua.getUserid());
+                        if (chkmsg != null) {
+                            it.setTransferstatus(3);
+                            it.setRemark(chkmsg);
+                            return;
+                        }
+                    }
+                    if (ua.getModifystatus() == 3 || ua.getModifystatus() == 4) {
+                        ua.setModifystatus(1);
+                        iDraftUseraccountNewMapper.delete(new QueryWrapper<DraftUseraccountNew>().eq("userid", it.getInvestoruserid()));
+                    }
+                    ua.setParentuserid(in.getUserid());
+                    ua.setMemberuserid(in.getMemberuserid());
+                    ua.setBroker(it.getNewbrokeruserid());
+                    ua.setSubarealevelpath(in.getSubarealevelpath() + ua.getUserid() + ",");
+                    iUseraccountMapper.update(ua, new QueryWrapper<Useraccount>().eq("userid", ua.getUserid()));
+                }
+            }
+        }
+        it.setTransferstatus(2);
+        it.setRemark("执行成功");
+    }
+
+    private String checkInvestorTransfor(Long userid) {
+        //管理端-投资者管理 > 投资者批量转移: 没有做市收益权模式持仓单时,可以进行投资者转移
+        List<Taaccount> tas = iTaaccountMapper.selectList(new QueryWrapper<Taaccount>().eq("userid", userid));
+        if (tas != null && !tas.isEmpty()) {
+            Integer count = iTradepositionMapper.queryPositionByUserid(userid);
+            if (count > 0) {
+                return "要转移的投资者存在做市收益权持仓单,不能转移";
+            }
+        }
+        return null;
+    }
+
     public void addSonOrgan(OrganAddSonOrganParam param, Systemmanager systemmanager) {
         String lPwd = iCommonService.getSystemParam(Constants.REDIS_HEADER_SYSPARAM, SysConstants.SYSPARAM_CODE_DEFAULT_PWD);
         Useraccount organ = new Useraccount();

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

@@ -48,4 +48,18 @@
           and r.sellcurpositionqty >0 and t.userid=#{areaid}
     </select>
 
+    <select id="queryPositionByUserid" resultType="java.lang.Integer" parameterType="java.lang.Long">
+        select count(t.*)
+        from tradeposition t,
+             taaccount ta,
+             goods g,
+             market m
+        where t.accountid = ta.accountid
+          and t.goodsid = g.goodsid
+          and g.marketid = m.marketid
+          and m.trademode = 10
+          and t.tradeproperty = 1
+          and ta.userid = #{userid}
+    </select>
+
 </mapper>

+ 106 - 1
mtp3-century/src/main/resources/mapper/UseraccountMapper.xml

@@ -50,6 +50,9 @@
                      select="com.muchinfo.mtp3interface.mapper.ISystemmanagerMapper.selectUsersName"></association>
         <association property="parentname" column="PARENTUSERID"
                      jdbcType="VARCHAR" select="selectOrganName"></association>
+        <association property="memberusername" column="MEMBERUSERID"
+                     jdbcType="VARCHAR"
+                     select="selectOrganName"></association>
         <association property="roleIds" column="USERID" jdbcType="VARCHAR"
                      javaType="java.lang.String"
                      select="com.muchinfo.mtp3interface.mapper.IArearoleMapper.getRolesByAreaid"></association>
@@ -126,6 +129,12 @@
     <sql id="Base_Column_List">
         USERID, USERTYPE, MODIFYSTATUS, ACCOUNTNAME, PARENTUSERID, BROKER, SUBAREALEVELPATH, REFEREEUSERID, MEMBERUSERID, ACCOUNTSTATUS, RECKONACCOUNTID, CREATETIME, CREATORID, AUDITTIME, AUDITUSERID, AUDITREMARK, CANCELTIME, CANCELUSERID, MODIFYTIME, MODIFIERID, MODIFYREMARK, MAXINVESTORNUM, HASAUTH, REFERCOUNT, REFERNUM, ISANONYMOUS, PARENTTOPUSER, SUBACCOUNTLEVEL, APPLYSRC, AUDITSRC, ROOTUSERID, CANRECOMMEND, CREATETRADEDATE, SECREFERCOUNT, HASUPLOADED, UPLOADEDTIME, OUTERUSERID, TEAMMANAGERUSERID, SUBJECTID, CREDITQUOTA, MODIFYSRC, SJACCOUNTNO
     </sql>
+    <delete id="deleteSubAreaGroupDetailByUserid" parameterType="java.lang.Long">
+        delete
+        from subareagroupdetail t
+        where t.subareagroupid in
+              (select sg.subareagroupid from subareagroup sg where sg.areauserid = #{userid})
+    </delete>
 
     <select id="queryOrganSelect"
             parameterType="com.muchinfo.mtp3pojos.vo.common.OrganSelectParam"
@@ -819,6 +828,7 @@
           and t.userid = #{userid}
           and t.defaultaccounttype = 2
     </select>
+
     <select id="queryExchSonOrgin" resultType="com.muchinfo.mtp3pojos.vo.common.OrganSelectResult"
             parameterType="com.muchinfo.mtp3pojos.vo.common.OrganSelectParam">
         <![CDATA[select t.userid,t.accountname,t.parentuserid,t.memberuserid from useraccount t
@@ -836,7 +846,8 @@
         </where>
         and rownum &lt;= 10
     </select>
-    <select id="queryOrganSonModify" resultType="com.muchinfo.mtp3pojos.vo.organ.UserAccountRspResult">
+
+    <select id="queryOrganSonModify" resultMap="PageResultMap">
         select o.*
         from draft_useraccount_new o
         left join (SELECT (LEVEL - 1) subarealevel, t.*
@@ -860,4 +871,98 @@
         </where>
         order by o.modifytime desc,o.accountstatus,o.userid
     </select>
+
+    <select id="queryOrganSonTransfer" resultType="com.muchinfo.mtp3pojos.vo.organ.son.OrganSonTransferResult">
+        select outua.subarealevel "outlevel", inua.subarealevel "inlevel", t.* from investortransfer t
+        left join
+        (SELECT (LEVEL - 1) subarealevel, t.*
+        FROM useraccount t
+        where t.usertype in (2,3)
+        START
+        WITH t.userid = 1
+        CONNECT BY PRIOR t.userid = t.parentuserid
+        ORDER BY LEVEL) outua on t.areauserid = outua.userid
+        left join
+        (SELECT (LEVEL - 1) subarealevel, t.*
+        FROM useraccount t
+        where t.usertype in (2,3)
+        START
+        WITH t.userid = 1
+        CONNECT BY PRIOR t.userid = t.parentuserid
+        ORDER BY LEVEL) inua on t.newareauserid = inua.userid
+        <where>
+            <if test="vo.outmemberuserid != null and vo.outmemberuserid!=0">
+                and (t.memberuserid = #{vo.outmemberuserid} or t.areauserid = #{vo.outmemberuserid}
+                or t.brokeruserid = #{vo.outmemberuserid})
+            </if>
+            <if test="vo.inuserid != null and vo.inuserid!=0">
+                and (t.newmemberuserid = #{vo.inuserid} or t.newareauserid = #{vo.inuserid}
+                or t.newbrokeruserid = #{vo.inuserid})
+            </if>
+            <if test="vo.transferstatus != null">
+                and t.transferstatus = #{vo.transferstatus}
+            </if>
+            <choose>
+                <when test="vo.transferusertype != null and vo.transferusertype == 1">
+                    and t.transfertype in (1,2)
+                </when>
+                <when test="vo.transferusertype != null and vo.transferusertype == 2">
+                    and t.transfertype in (3)
+                </when>
+            </choose>
+        </where>
+        order by t.autoid desc
+    </select>
+
+    <select id="getInvestorTODiversion" resultType="com.muchinfo.mtp3pojos.entity.Useraccount">
+        select * from useraccount o
+        <where>
+            and 1=1
+            and o.usertype =5
+            <if test="memberuserid != null">
+                and o.memberuserid = #{memberuserid}
+            </if>
+            <if test="brokeruserid != null">
+                and o.broker = #{brokeruserid}
+            </if>
+            <if test="areauserid != null">
+                start with o.userid = #{areauserid}
+                connect by prior o.userid = o.parentuserid
+            </if>
+        </where>
+    </select>
+
+    <select id="queryUser" resultType="com.muchinfo.mtp3pojos.entity.Useraccount"
+            parameterType="java.lang.String">
+        select ua.*
+        from useraccount ua
+        left join useraccount tua on ua.teammanageruserid = tua.userid
+        left join userinfo ui on ua.userid = ui.userid
+        left join division p on ui.provinceid = p.autoid
+        left join division c on ui.cityid = c.autoid
+        left join division d on ui.districtid = d.autoid
+        <where>
+            <if test="subarealevelpath!=null and subarealevelpath!=''">
+                and ua.subarealevelpath like '%' || #{subarealevelpath}||'%'
+            </if>
+        </where>
+        order by ua.userid
+    </select>
+
+    <select id="querySonOrganPageByLevel" resultType="com.muchinfo.mtp3pojos.vo.common.OrganSelectResult">
+        select ua.*,
+        ua1.userid || '/' || ua1.accountname "memberusername" ,
+        ua2.userid || '/' || ua2.accountname "parentname"
+        from useraccount ua
+        left join useraccount ua1 on ua.memberuserid = ua1.userid
+        left join useraccount ua2 on ua.parentuserid = ua2.userid
+        where ua.usertype=3
+        <if test="subarealevel != null and subarealevel != '' ">
+            and (LENGTH(ua.subarealevelpath) - LENGTH(REPLACE(ua.subarealevelpath, ',', ''))-2) = #{subarealevel}
+        </if>
+        <if test="searchcode != null and searchcode != '' ">
+            and ((ua.accountname like '%'||#{searchcode}||'%')
+            or(ua.userid like '%'||#{searchcode}||'%'))
+        </if>
+    </select>
 </mapper>

+ 2 - 0
mtp3-century/src/main/resources/message_en.properties

@@ -17,6 +17,7 @@ message_code_system017=Application successful
 message_code_system018=The contact information for performance has been sent. Please check again later
 message_code_system019=Execution succeeded
 message_code_system020=Batch import of position transfer successful
+message_code_system021=Submitted successfully, automatic transfer will be performed after market closure
 
 message_error_code_system001=Token invalid, please log in again!
 message_error_code_system002=operation failed
@@ -35,6 +36,7 @@ message_error_code_system014=User account disabled
 message_error_code_system015=There are unprocessed breach requests that cannot be initiated repeatedly
 message_error_code_system016=The steps of the performance plan have been changed and an extension cannot be applied for
 message_error_code_system017=Deposit transfer market, please select the issuer of the product【{0}】
+message_error_code_system018=Please execute when the system completes processing successfully at the end of the day
 
 login_error_code_001=Account or password error
 login_error_code_002=Unauthorized access is not allowed! Please contact the administrator to handle it!

+ 2 - 0
mtp3-century/src/main/resources/message_th.properties

@@ -17,6 +17,7 @@ message_code_system017=สมัครสำเร็จ
 message_code_system018=ข้อมูลการติดต่อการปฏิบัติงานได้ถูกส่งไปแล้ว กรุณาสอบถามอีกครั้งในภายหลัง
 message_code_system019=ความสำเร็จในการดำเนินการ
 message_code_system020=การนำเข้าแบทช์การเปิดสถานะสำเร็จแล้ว
+message_code_system021=ส่งเรียบร้อยแล้วโอนเงินโดยอัตโนมัติหลังจากปิดตลาด
 
 message_error_code_system001=โทเค็นล้มเหลวโปรดเข้าสู่ระบบอีกครั้ง!
 message_error_code_system002=การดำเนินการล้มเหลว!
@@ -35,6 +36,7 @@ message_error_code_system014=บัญชีผู้ใช้ถูกปิด
 message_error_code_system015=มีการยื่นขอผิดนัดที่ยังไม่ได้ดำเนินการและไม่สามารถเริ่มต้นซ้ำได้
 message_error_code_system016=ขั้นตอนการใช้สิทธิมีการเปลี่ยนแปลงและไม่สามารถขอขยายเวลาได้
 message_error_code_system017=ตลาดโอนเงินมัดจำ โปรดเลือกผู้ออกสินค้า【{0}】
+message_error_code_system018=โปรดดำเนินการเมื่อการประมวลผลสิ้นสุดวันที่ระบบสำเร็จ
 
 login_error_code_001=บัญชีหรือรหัสผ่านไม่ถูกต้อง
 login_error_code_002=ไม่สามารถเข้าถึงได้โดยไม่ได้รับอนุญาต! กรุณาติดต่อผู้ดูแลระบบเพื่อจัดการ!

+ 2 - 0
mtp3-century/src/main/resources/message_zh-CN.properties

@@ -17,6 +17,7 @@ message_code_system017=申请成功
 message_code_system018=履约联络信息已发送,稍后请重新查询
 message_code_system019=执行成功
 message_code_system020=批量导入持仓过户成功
+message_code_system021=提交成功,闭市后自动进行转移
 
 message_error_code_system001=令牌失效,请重新登录!
 message_error_code_system002=操作失败
@@ -35,6 +36,7 @@ message_error_code_system014=用户账户已禁用
 message_error_code_system015=存在未处理的违约申请,不能重复发起
 message_error_code_system016=履约计划步骤已发生变更,无法申请延期
 message_error_code_system017=定金转让市场,请选择商品发行方【{0}】
+message_error_code_system018=请于系统日终处理成功时执行
 
 login_error_code_001=账户或密码错误
 login_error_code_002=未经允许,不可访问!请联系管理员处理!

+ 2 - 0
mtp3-century/src/main/resources/message_zh-HK.properties

@@ -17,6 +17,7 @@ message_code_system017=申請成功
 message_code_system018=履約聯絡資訊已發送,稍後請重新查詢
 message_code_system019=執行成功
 message_code_system020=批量導入持倉過戶成功
+message_code_system021=提交成功,閉市後自動進行轉移
 
 message_error_code_system001=權杖失效,請重新登入!
 message_error_code_system002=操作失敗
@@ -35,6 +36,7 @@ message_error_code_system014=用戶帳戶已禁用
 message_error_code_system015=存在未處理的違約申請,不能重複發起
 message_error_code_system016=履約計畫步驟已發生變更,無法申請延期
 message_error_code_system017=定金轉讓市場,請選擇商品發行方【{0}】
+message_error_code_system018=請於系統日終處理成功時執行
 
 login_error_code_001=帳戶或密碼錯誤
 login_error_code_002=未經允許,不可訪問! 請聯系管理員處理!

+ 2 - 0
mtp3-century/src/main/resources/message_zh-TW.properties

@@ -17,6 +17,7 @@ message_code_system017=申請成功
 message_code_system018=履約聯絡資訊已發送,稍後請重新查詢
 message_code_system019=執行成功
 message_code_system020=批量導入持倉過戶成功
+message_code_system021=提交成功,閉市後自動進行轉移
 
 message_error_code_system001=權杖失效,請重新登入!
 message_error_code_system002=操作失敗
@@ -35,6 +36,7 @@ message_error_code_system014=用戶帳戶已禁用
 message_error_code_system015=存在未處理的違約申請,不能重複發起
 message_error_code_system016=履約計畫步驟已發生變更,無法申請延期
 message_error_code_system017=定金轉讓市場,請選擇商品發行方【{0}】
+message_error_code_system018=請於系統日終處理成功時執行
 
 login_error_code_001=帳戶或密碼錯誤
 login_error_code_002=未經允許,不可訪問! 請聯系管理員處理!

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

@@ -23,7 +23,8 @@ public enum MessageType {
     MESSAGE_CODE_SYSTEM017("message_code_system017", "申请成功"),
     MESSAGE_CODE_SYSTEM018("message_code_system018", "履约联络信息已发送,稍后请重新查询"),
     MESSAGE_CODE_SYSTEM019("message_code_system019", "执行成功"),
-    MESSAGE_CODE_SYSTEM020("message_code_system020", "执行成功"),
+    MESSAGE_CODE_SYSTEM020("message_code_system020", "批量导入持仓过户成功"),
+    MESSAGE_CODE_SYSTEM021("message_code_system021", "提交成功,闭市后自动进行转移"),
 
     MESSAGE_ERROR_CODE_SYSTEM001("message_error_code_system001", "令牌失效,请重新登录!"),
     MESSAGE_ERROR_CODE_SYSTEM002("message_error_code_system002", "操作失败"),
@@ -42,6 +43,7 @@ public enum MessageType {
     MESSAGE_ERROR_CODE_SYSTEM015("message_error_code_system015", "存在未处理的违约申请,不能重复发起"),
     MESSAGE_ERROR_CODE_SYSTEM016("message_error_code_system016", "履约计划步骤已发生变更,无法申请延期"),
     MESSAGE_ERROR_CODE_SYSTEM017("message_error_code_system017", "定金转让市场,请选择商品发行方【{0}】"),
+    MESSAGE_ERROR_CODE_SYSTEM018("message_error_code_system018", "请于系统日终处理成功时执行"),
 
     LOGIN_ERROR_CODE_001("login_error_code_001", "账户或密码错误"),
     LOGIN_ERROR_CODE_002("login_error_code_002", "未经允许,不可访问!请联系管理员处理"),

+ 16 - 0
mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IInvestortransferMapper.java

@@ -0,0 +1,16 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.Investortransfer;
+
+/**
+ * <p>
+ * 投资者转移表 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2025-01-02
+ */
+public interface IInvestortransferMapper extends BaseMapper<Investortransfer> {
+
+}

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

@@ -19,4 +19,6 @@ import java.util.List;
 public interface ITradepositionMapper extends BaseMapper<Tradeposition> {
 
     List<Tradeposition> queryAmount(@Param("areaid") Long areaid);
+
+    Integer queryPositionByUserid(Long userid);
 }

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

@@ -11,6 +11,8 @@ 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.UserAccountRspResult;
+import com.muchinfo.mtp3pojos.vo.organ.son.OrganSonTransferParam;
+import com.muchinfo.mtp3pojos.vo.organ.son.OrganSonTransferResult;
 import com.muchinfo.mtp3pojos.vo.profitshar.ProfitSharGroupOrganResult;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -83,9 +85,19 @@ public interface IUseraccountMapper extends BaseMapper<Useraccount> {
 
     List<Useraccount> queryUserAccount(@Param("userid") Long userid);
 
-    List<Userreckonaccount> queryUra(@Param("userid")Long userid);
+    List<Userreckonaccount> queryUra(@Param("userid") Long userid);
 
     List<OrganSelectResult> queryExchSonOrgin(@Param("vo") OrganSelectParam vo);
 
-    IPage<UserAccountRspResult> queryOrganSonModify(IPage<UserAccountRspResult> page,@Param("vo") UserAccountReqParam param);
+    IPage<UserAccountRspResult> queryOrganSonModify(IPage<UserAccountRspResult> page, @Param("vo") UserAccountReqParam param);
+
+    IPage<OrganSonTransferResult> queryOrganSonTransfer(IPage<OrganSonTransferResult> page, @Param("vo") OrganSonTransferParam param);
+
+    List<Useraccount> getInvestorTODiversion(Long memberuserid, Long areauserid, Long brokeruserid);
+
+    List<Useraccount> queryUser(String subarealevelpath);
+
+    void deleteSubAreaGroupDetailByUserid(Long userid);
+
+    List<OrganSelectResult> querySonOrganPageByLevel(Integer subarealevel, String searchcode);
 }

+ 119 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Investortransfer.java

@@ -0,0 +1,119 @@
+package com.muchinfo.mtp3pojos.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <p>
+ * 投资者转移表
+ * </p>
+ *
+ * @author XKF
+ * @since 2025-01-02
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("INVESTORTRANSFER")
+@ApiModel(value="Investortransfer对象", description="投资者转移表")
+@KeySequence(value = "SEQ_INVESTORTRANSFER")
+public class Investortransfer extends Model<Investortransfer> {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "AutoID")
+    @TableId(value = "AUTOID", type = IdType.INPUT)
+    private Long autoid;
+
+    @ApiModelProperty(value = "转移类型 - 1:单个转移(交易商)  2:批量转移(交易商) 3:子机构转移")
+    @TableField("TRANSFERTYPE")
+    private Integer transfertype;
+
+    @ApiModelProperty(value = "转出投资者[单个转移]")
+    @TableField("INVESTORUSERID")
+    private Long investoruserid;
+
+    @ApiModelProperty(value = "转出会员 [批量转移]")
+    @TableField("MEMBERUSERID")
+    private Long memberuserid;
+
+    @ApiModelProperty(value = "转出机构 [批量转移]")
+    @TableField("AREAUSERID")
+    private Long areauserid;
+
+    @ApiModelProperty(value = "转出经纪人 [批量转移]")
+    @TableField("BROKERUSERID")
+    private Long brokeruserid;
+
+    @ApiModelProperty(value = "转入会员")
+    @TableField("NEWMEMBERUSERID")
+    private Long newmemberuserid;
+
+    @ApiModelProperty(value = "转入机构")
+    @TableField("NEWAREAUSERID")
+    private Long newareauserid;
+
+    @ApiModelProperty(value = "转入经纪人")
+    @TableField("NEWBROKERUSERID")
+    private Long newbrokeruserid;
+
+    @ApiModelProperty(value = "转移状态 - 1:未执行 2:执行成功 3:执行失败 4:已撤销 5:执行中")
+    @TableField("TRANSFERSTATUS")
+    private Integer transferstatus;
+
+    @ApiModelProperty(value = "错误码")
+    @TableField("RETCODE")
+    private String retcode;
+
+    @ApiModelProperty(value = "备注")
+    @TableField("REMARK")
+    private String remark;
+
+    @ApiModelProperty(value = "操作人")
+    @TableField("OPERATORID")
+    private String operatorid;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField("CREATETIME")
+    private Date createtime;
+
+    @ApiModelProperty(value = "更新时间")
+    @TableField("UPDATETIME")
+    private Date updatetime;
+
+    @ApiModelProperty(value = "转出运营中心 [批量转移]")
+    @TableField("OPCENTERUSERID")
+    private Long opcenteruserid;
+
+    @ApiModelProperty(value = "转出代理商 [批量转移]")
+    @TableField("AGENTUSERID")
+    private Long agentuserid;
+
+    @ApiModelProperty(value = "转入运营中心 [批量转移]")
+    @TableField("NEWOPCENTERUSERID")
+    private Long newopcenteruserid;
+
+    @ApiModelProperty(value = "转入代理商 [批量转移]")
+    @TableField("NEWAGENTUSERID")
+    private Long newagentuserid;
+
+    @ApiModelProperty(value = "转移方式(3:子机构转移) 1:转下级 2:整体转移")
+    @TableField("TRANSFERMODE")
+    private Integer transfermode;
+
+
+    @Override
+    public Serializable pkVal() {
+        return this.autoid;
+    }
+
+}

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

@@ -120,6 +120,8 @@ public class OrganAddSonOrganParam {
     @ApiModelProperty(value = "附件2 ")
     private String attachment2;
 
+    private Integer accountstatus;
+
     private Long reckonaccountid;
 
 }

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

@@ -0,0 +1,43 @@
+package com.muchinfo.mtp3pojos.vo.organ.son;
+
+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 = "OrganSonTransferAddParam对象", description = "子机构转移")
+public class OrganSonTransferAddParam {
+
+    private Integer diversiontype;
+
+    @ApiModelProperty(value = "转出类型")
+    private Integer diversionoutlevel;
+
+    @ApiModelProperty(value = "转出机构")
+    private Long outparentuserid;
+
+    @ApiModelProperty(value = "转入方式")
+    private Integer transfermode;
+
+    @ApiModelProperty(value = "转入类型")
+    private Integer diversioninlevel;
+
+    @ApiModelProperty(value = "转出机构")
+    private Long inuserid;
+
+    private Long outborkerid;
+
+    private Long outinvestor;
+
+    private Long outmemberuserid;
+
+    private Long inmemberuserid;
+
+    private Long inborker;
+}

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

@@ -0,0 +1,29 @@
+package com.muchinfo.mtp3pojos.vo.organ.son;
+
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Builder
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(value = "OrganSonTransferParam对象", description = "子机构转移")
+public class OrganSonTransferParam {
+
+    private Integer transferusertype;
+
+    private Long outmemberuserid;
+
+    private Long inuserid;
+
+    private Integer transferstatus;
+
+    private Long memberuserid;
+
+    private Integer pageNum;
+
+    private Integer pageSize;
+}

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

@@ -0,0 +1,45 @@
+package com.muchinfo.mtp3pojos.vo.organ.son;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+@Builder
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(value = "OrganSonTransferResult对象", description = "子机构转移响应")
+public class OrganSonTransferResult {
+
+    @ApiModelProperty(value = "转出机构")
+    private String outparentusername;
+
+    @ApiModelProperty(value = "转出机构类型")
+    private Integer outlevel;
+
+    @ApiModelProperty(value = "转入机构")
+    private String inuseridname;
+
+    @ApiModelProperty(value = "转入机构类型")
+    private Integer inlevel;
+
+    @ApiModelProperty(value = "转移方式")
+    private Integer transfermode;
+
+    @ApiModelProperty(value = "转移状态")
+    private Integer transferstatus;
+
+    @ApiModelProperty(value = "申请时间")
+    private Date createtime;
+
+    private Long autoid;
+
+    private Long areauserid;
+
+    private Long newareauserid;
+}