Kaynağa Gözat

新增产业会员、自营会员功能

xie.kaifeng 1 yıl önce
ebeveyn
işleme
91988089fb
100 değiştirilmiş dosya ile 8541 ekleme ve 135 silme
  1. 12 0
      mtp3-century/pom.xml
  2. 19 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/configuration/RabbitConfig.java
  3. 93 3
      mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/CommonController.java
  4. 130 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/OrderQueryController.java
  5. 52 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/PerformanceController.java
  6. 175 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/PresaleController.java
  7. 99 7
      mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/QueryController.java
  8. 69 5
      mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/ReportFormController.java
  9. 32 3
      mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/SettlementController.java
  10. 7 1
      mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/TradingAccountController.java
  11. 104 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/WarehouseController.java
  12. 48 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/handler/GoodsMergeStrategy.java
  13. 1 1
      mtp3-century/src/main/java/com/muchinfo/mtp3century/interceptor/SignAuthInterceptor.java
  14. 216 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/listener/OrderListener.java
  15. 193 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/listener/TradeCpListener.java
  16. 16 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/ICommonService.java
  17. 27 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IForwardOrderService.java
  18. 40 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IOrderQueryService.java
  19. 2 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IOrganService.java
  20. 17 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IPerformanceService.java
  21. 34 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IPresaleService.java
  22. 24 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IQueryService.java
  23. 20 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IReportFormService.java
  24. 11 3
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/ISettlementService.java
  25. 3 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/ITradingAccountService.java
  26. 33 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IWarehouseService.java
  27. 258 6
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/CommonServiceImpl.java
  28. 226 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/ForwardOrderServiceImpl.java
  29. 510 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/OrderQueryServiceImpl.java
  30. 1 1
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/OrganServiceImpl.java
  31. 417 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/PerformanceServiceImpl.java
  32. 390 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/PresaleServiceImpl.java
  33. 378 12
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/QueryServiceImpl.java
  34. 239 4
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/ReportFormServiceImpl.java
  35. 419 17
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/SettlementServiceImpl.java
  36. 77 1
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/TradingAccountServiceImpl.java
  37. 475 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/WarehouseServiceImpl.java
  38. 0 9
      mtp3-century/src/main/java/com/muchinfo/mtp3century/utils/RedisServiceUtil.java
  39. 233 0
      mtp3-century/src/main/resources/mapper/CptradePositionapplyMapper.xml
  40. 223 0
      mtp3-century/src/main/resources/mapper/CptradePresalegoodsexMapper.xml
  41. 92 0
      mtp3-century/src/main/resources/mapper/GoodsMapper.xml
  42. 445 0
      mtp3-century/src/main/resources/mapper/PerformanceplanMapper.xml
  43. 38 0
      mtp3-century/src/main/resources/mapper/ReckonDaydividecountMapper.xml
  44. 88 0
      mtp3-century/src/main/resources/mapper/ReckonDaydividecountdetailMapper.xml
  45. 443 0
      mtp3-century/src/main/resources/mapper/TradeHolderdetailexMapper.xml
  46. 392 27
      mtp3-century/src/main/resources/mapper/TradeOrderdetailMapper.xml
  47. 21 0
      mtp3-century/src/main/resources/mapper/UseraccountMapper.xml
  48. 230 0
      mtp3-century/src/main/resources/mapper/WroutinapplyMapper.xml
  49. 20 1
      mtp3-century/src/main/resources/message_en.properties
  50. 20 0
      mtp3-century/src/main/resources/message_th.properties
  51. 20 0
      mtp3-century/src/main/resources/message_zh-CN.properties
  52. 20 0
      mtp3-century/src/main/resources/message_zh-HK.properties
  53. 20 0
      mtp3-century/src/main/resources/message_zh-TW.properties
  54. 6 0
      mtp3-common/src/main/java/com/muchinfo/mtp3common/enumtype/FunCodeConstants.java
  55. 21 2
      mtp3-common/src/main/java/com/muchinfo/mtp3common/enumtype/MessageType.java
  56. 34 0
      mtp3-common/src/main/java/com/muchinfo/mtp3common/utils/SerialNumberHelper.java
  57. 51 1
      mtp3-common/src/main/java/com/muchinfo/mtp3common/utils/SerialNumberUtils.java
  58. 34 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/ICptradePositionapplyMapper.java
  59. 16 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/ICptradePositioncancelMapper.java
  60. 36 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/ICptradePresalegoodsexMapper.java
  61. 16 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IDeliveryrelationMapper.java
  62. 16 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IDgfactoryitemMapper.java
  63. 16 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IDgfactoryitemtypeMapper.java
  64. 7 1
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IGoodsMapper.java
  65. 16 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IHisPerformancebreachMapper.java
  66. 16 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IHisTradeExercisedetailMapper.java
  67. 16 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IPerformancebreachMapper.java
  68. 16 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IPerformancebreachapplyMapper.java
  69. 32 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IPerformanceplanMapper.java
  70. 16 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IPerformancestepMapper.java
  71. 17 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IPerformancesteptypeMapper.java
  72. 5 3
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IReckonDaydividecountMapper.java
  73. 15 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IReckonDaydividecountdetailMapper.java
  74. 16 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/ITradeExercisedetailMapper.java
  75. 40 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/ITradeHolderdetailexMapper.java
  76. 18 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/ITradeOrderdetailMapper.java
  77. 2 2
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IUseraccountMapper.java
  78. 16 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IWrcategoryMapper.java
  79. 17 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IWrholdlbMapper.java
  80. 38 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IWroutinapplyMapper.java
  81. 16 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IWroutindetailMapper.java
  82. 16 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IWroutinexpressMapper.java
  83. 16 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IWroutinfactorydetailMapper.java
  84. 16 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IWrstandardfactoryitemMapper.java
  85. 3 3
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Arearolemarket.java
  86. 1 1
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/BankAccountoutinapply.java
  87. 1 1
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/BankAccountsign.java
  88. 1 1
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/BankCusbankinfo.java
  89. 128 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/CptradePositionapply.java
  90. 119 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/CptradePositioncancel.java
  91. 180 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/CptradePresalegoodsex.java
  92. 132 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Deliveryrelation.java
  93. 68 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Dgfactoryitem.java
  94. 105 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Dgfactoryitemtype.java
  95. 2 3
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Division.java
  96. 1 1
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/DraftUseraccountNew.java
  97. 1 1
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Enumdicitem.java
  98. 1 1
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Errorcode.java
  99. 9 9
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Goods.java
  100. 4 4
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Goodsoptionproperty.java

+ 12 - 0
mtp3-century/pom.xml

@@ -116,6 +116,18 @@
             <version>1.62.2</version>
         </dependency>-->
 
+        <!-- 处理word中的表格 -->
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>3.14</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>3.14</version>
+        </dependency>
+
         <!-- 如果使用 Spring AOP -->
         <dependency>
             <groupId>org.springframework.boot</groupId>

+ 19 - 0
mtp3-century/src/main/java/com/muchinfo/mtp3century/configuration/RabbitConfig.java

@@ -51,6 +51,15 @@ public class RabbitConfig {
         return new Queue("loginStatusMsgQueue");
     }
 
+    @Bean
+    public Queue tradeCpRspQueue() {
+        return new Queue("tradeCpRspQueue");
+    }
+
+    @Bean
+    public Queue orderQueue() {
+        return new Queue("orderQueue");
+    }
 
     @Bean
     Binding bindingBankQueue() {
@@ -71,4 +80,14 @@ public class RabbitConfig {
     Binding bindingLoginStatusMsgQueue() {
         return BindingBuilder.bind(loginStatusMsgQueue()).to(exchange()).with("user_rsp");
     }
+
+    @Bean
+    Binding bindingTradeCpRspQueue() {
+        return BindingBuilder.bind(tradeCpRspQueue()).to(exchange()).with("trade_cp_manage_rsp");
+    }
+
+    @Bean
+    Binding bindingOrderQueue() {
+        return BindingBuilder.bind(orderQueue()).to(exchange()).with("order_rsp");
+    }
 }

+ 93 - 3
mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/CommonController.java

@@ -2,34 +2,39 @@ package com.muchinfo.mtp3century.controller;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.muchinfo.mtp3century.service.ICommonService;
 import com.muchinfo.mtp3century.service.IOrganService;
 import com.muchinfo.mtp3century.utils.RedisServiceUtil;
 import com.muchinfo.mtp3common.enumtype.*;
 import com.muchinfo.mtp3common.utils.*;
 import com.muchinfo.mtp3common.vo.AjaxResult;
-import com.muchinfo.mtp3common.vo.PageResult;
 import com.muchinfo.mtp3interface.mapper.*;
 import com.muchinfo.mtp3pojos.entity.*;
 import com.muchinfo.mtp3pojos.vo.FileMetaVo;
 import com.muchinfo.mtp3pojos.vo.bankcusbank.BankCusBankExtendResult;
 import com.muchinfo.mtp3pojos.vo.common.*;
 import com.muchinfo.mtp3pojos.vo.organ.UserAccountVo;
+import com.muchinfo.mtp3pojos.vo.taaccount.TaAccountQueryResult;
+import com.muchinfo.mtp3pojos.vo.taaccount.TaAccountReportParam;
 import io.jsonwebtoken.Claims;
 import io.jsonwebtoken.ExpiredJwtException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
+import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.beanutils.ConvertUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -282,8 +287,93 @@ public class CommonController {
 
     @ApiOperation("子机构管理-->获取机构及所有子机构")
     @RequestMapping(method = RequestMethod.GET, value = "/getAreaAndAllChilds")
-    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
     private AjaxResult<UserAccountVo> getAreaAndAllChilds(HttpServletRequest request) {
         return iOrganService.getAreaAndAllChilds(request);
     }
+
+    @ApiOperation("子机构管理-->获取机构及所有子机构")
+    @RequestMapping(method = RequestMethod.GET, value = "/queryOrganSelect2And3")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    private AjaxResult<OrganSelectResult> queryOrganSelect2And3(OrganSelectParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        if (systemmanager.getReletype() != 1) {
+            param.setUserid(systemmanager.getAreauserid());
+        }
+        // 运营机构同平台可查所有
+        if (("," + param.getOrgztypes() + ",").contains(",2,")) {
+            param.setUserid(null);
+        }
+        return iCommonService.queryOrganSelect2And3(param, request);
+    }
+
+    @ApiOperation("预售管理-->获取申请人(或者其他接口通用)")
+    @RequestMapping(method = RequestMethod.GET, value = "queryOrganSelectP")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult<OrganSelectResult> queryOrganSelectP(OrganSelectParam vo, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        log.info("vo.parentuserid={}", vo.getParentuserid());
+        if (SysConstants.SYS_TYPE_MANAGE.equals(systemmanager.getReletype())) {
+            //平台管理员 可以查询所有会员
+            if (vo.getIsusertype() == null || vo.getIsusertype() != 1) {
+                vo.setUsertype(null);
+            }
+        } else if (SysConstants.SYS_TYPE_CLIENT.equals(systemmanager.getReletype())) {
+            //机构管理员,可以查下级
+            if (("," + vo.getOrgztypes() + ",").contains(",3,")) {
+                vo.setParentuseridfirst(systemmanager.getAreauserid());
+            } else {
+                vo.setMemberuserid(systemmanager.getAreauserid());
+            }
+        } else if (SysConstants.SYS_TYPE_MEMBER.equals(systemmanager.getReletype())) {
+            //子机构
+            vo.setParentuserid(systemmanager.getAreauserid());
+        }
+        return iCommonService.queryOrganSelect(vo, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value ="queryOrganSelectPAndC")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult<OrganSelectResult> queryOrganSelectPAndC(OrganSelectParam vo,  HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        vo.setUsertype(null);
+        List<OrganSelectResult> list = (List<OrganSelectResult>) this.queryOrganSelectP( vo, request);
+        List<Useraccount> uaList = iUseraccountMapper.selectList(new QueryWrapper<Useraccount>()
+                .eq("accountstatus", 4)
+                .eq("hasauth", 1)
+                .eq(StringUtils.isNotBlank(vo.getUsertype()),"usertype",vo.getUsertype())
+                .eq(SysConstants.SYS_TYPE_CLIENT.equals(systemmanager.getReletype()),"memberuserid", systemmanager.getAreauserid()));
+        list.addAll(uaList.stream().filter(x -> StringUtils.isBlank(vo.getSearchcode()) ||
+                (StringUtils.isNotBlank(vo.getSearchcode()) && x.getAccountname().contains(vo.getSearchcode()) || x.getUserid().toString().contains(vo.getSearchcode()))).map(x -> {
+            OrganSelectResult organSelectVo = new OrganSelectResult();
+            organSelectVo.setUserid(x.getUserid());
+            organSelectVo.setAccountname(x.getAccountname());
+            organSelectVo.setMemberuserid(x.getMemberuserid());
+            organSelectVo.setParentuserid(x.getParentuserid());
+            organSelectVo.setUsertype(x.getUsertype()+"");
+            return organSelectVo;
+        }).collect(Collectors.toList()));
+        list = list.stream().limit(10).collect(Collectors.toList());
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), list);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value ="queryAccountId")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    @ApiOperation("获取资金账户信息")
+    public AjaxResult<Taaccount> queryAccountId(Long userid,  HttpServletRequest request) {
+        return iCommonService.queryAccountId(userid, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value ="queryMobileByUserId")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    @ApiOperation("获取手机号")
+    public AjaxResult queryMobileByUserId(Long userid,  HttpServletRequest request) {
+        return iCommonService.queryMobileByUserId(userid, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value ="queryTAAccountList")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult<TaAccountQueryResult> queryTAAccountList(TaAccountReportParam param, HttpServletRequest request) {
+        return iCommonService.queryTAAccountList(param, request);
+    }
 }

+ 130 - 0
mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/OrderQueryController.java

@@ -0,0 +1,130 @@
+package com.muchinfo.mtp3century.controller;
+
+import com.muchinfo.mtp3century.service.IOrderQueryService;
+import com.muchinfo.mtp3common.vo.AjaxResult;
+import com.muchinfo.mtp3common.vo.PageResult;
+import com.muchinfo.mtp3pojos.vo.HolderDetailExRedisVo;
+import com.muchinfo.mtp3pojos.vo.query.order.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+
+@RestController
+@RequestMapping("/queryOrder")
+@Api(value = "订单查询API", description = "订单查询管理")
+public class OrderQueryController {
+
+    @Resource
+    private IOrderQueryService iOrderQueryService;
+
+    @RequestMapping(method = RequestMethod.GET, value = "/query")
+    @ApiOperation("订单管理--> 订单查询 --> 获取列表")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    public PageResult<OrderQueryResult> query(OrderQueryParam param, HttpServletRequest request) {
+        return iOrderQueryService.query(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/queryDetail")
+    @ApiOperation("订单管理--> 订单查询 --> 获取详情")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult<OrderQueryResult> queryDetail(OrderQueryParam param, HttpServletRequest request) {
+        return iOrderQueryService.queryDetail(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/export")
+    @ApiOperation("订单管理--> 订单查询 --> 导出")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult export(OrderQueryParam param, HttpServletRequest request) {
+        return iOrderQueryService.export(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/queryTerOrder")
+    @ApiOperation("订单管理--> 终止单查询 --> 获取列表")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    public PageResult<TerOrderQueryResult> queryTerOrder(TerOrderQueryParam param, HttpServletRequest request) {
+        return iOrderQueryService.queryTerOrder(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/terOrderExport")
+    @ApiOperation("订单管理--> 终止单查询 --> 获取列表")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult terOrderExport(TerOrderQueryParam param, HttpServletRequest request) {
+        return iOrderQueryService.terOrderExport(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/queryDeliveryOrder")
+    @ApiOperation("订单管理--> 交收单管理 --> 获取列表")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    public PageResult<DeliveryOrderResult> queryDeliveryOrder(DeliveryOrderParam param, HttpServletRequest request) {
+        return iOrderQueryService.queryDeliveryOrder(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/deliveryOrderDetail")
+    @ApiOperation("订单管理--> 交收单管理 --> 获取详情")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult<DeliveryOrderResult> deliveryOrderDetail(DeliveryOrderParam param, HttpServletRequest request) {
+        return iOrderQueryService.deliveryOrderDetail(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/deliveryOrderExport")
+    @ApiOperation("订单管理--> 交收单管理 --> 导出")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult deliveryOrderExport(DeliveryOrderParam param, HttpServletRequest request) {
+        return iOrderQueryService.deliveryOrderExport(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/queryOrderDate")
+    @ApiOperation("订单管理--> 订单日报表 --> 获取列表")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    public PageResult<OrderDateQueryResult> queryOrderDate(OrderDateQueryParam param, HttpServletRequest request) {
+        return iOrderQueryService.queryOrderDate(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/orderDateExport")
+    @ApiOperation("订单管理--> 订单日报表 --> 导出")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult orderDateExport(OrderDateQueryParam param, HttpServletRequest request) {
+        return iOrderQueryService.orderDateExport(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/queryForcedOrder")
+    @ApiOperation("订单管理--> 强制终止单 --> 获取列表")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    public PageResult<ForcedOrderResult> queryForcedOrder(ForcedOrderParam param, HttpServletRequest request) {
+        return iOrderQueryService.queryForcedOrder(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/forcedOrderExport")
+    @ApiOperation("订单管理--> 强制终止单 --> 导出")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult forcedOrderExport(ForcedOrderParam param, HttpServletRequest request) {
+        return iOrderQueryService.forcedOrderExport(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/forcedOrderRecover")
+    @ApiOperation("订单管理--> 强制终止单 --> 斩仓恢复")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult forcedOrderRecover(String closeid, HttpServletRequest request) {
+        return iOrderQueryService.forcedOrderRecover(closeid, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/monitorddjkCount")
+    @ApiOperation("订单管理--> 订单监控 --> 获取总数居")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult<MonitorddjkCountResult> monitorddjkCount(MonitorddjkParam param, HttpServletRequest request) {
+        return iOrderQueryService.monitorddjkCount(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/monitorddjk")
+    @ApiOperation("订单管理--> 订单监控 --> 获取列表")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public PageResult<HolderDetailExRedisVo> monitorddjk(MonitorddjkParam param, HttpServletRequest request) {
+        return iOrderQueryService.monitorddjk(param, request);
+    }
+}

+ 52 - 0
mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/PerformanceController.java

@@ -0,0 +1,52 @@
+package com.muchinfo.mtp3century.controller;
+
+import com.muchinfo.mtp3century.service.IPerformanceService;
+import com.muchinfo.mtp3common.vo.AjaxResult;
+import com.muchinfo.mtp3common.vo.PageResult;
+import com.muchinfo.mtp3pojos.vo.performance.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+
+@RestController
+@RequestMapping("/performance")
+@Api(value = "履约管理API", description = "履约管理")
+public class PerformanceController {
+
+    @Resource
+    private IPerformanceService iPerformanceService;
+
+    @RequestMapping(method = RequestMethod.GET, value = "/query")
+    @ApiOperation("履约管理--> 我的买履约、我的卖履约 --> 获取列表")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    public PageResult<PayPerformanceResult> query(PayPerformanceParam param, HttpServletRequest request) {
+        return iPerformanceService.query(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/view")
+    @ApiOperation("履约管理--> 我的买履约、我的卖履约 --> 详情")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult<PayPerformanceDetailResult> view(String planid, Integer sellorbuy, String histradedate, HttpServletRequest request) {
+        return iPerformanceService.view(planid, sellorbuy, histradedate, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/doBreach")
+    @ApiOperation("履约管理--> 我的买履约、我的卖履约 --> 违约申请")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult doBreach(PayPerformanceBreachParam param, HttpServletRequest request) {
+        return iPerformanceService.doBreach(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/doDelay")
+    @ApiOperation("履约管理--> 我的买履约、我的卖履约 --> 延期申请")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult doDelay(PayPerformanceDelayParam param, HttpServletRequest request) {
+        return iPerformanceService.doDelay(param, request);
+    }
+}

+ 175 - 0
mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/PresaleController.java

@@ -0,0 +1,175 @@
+package com.muchinfo.mtp3century.controller;
+
+import com.muchinfo.mtp3century.service.IForwardOrderService;
+import com.muchinfo.mtp3century.service.IPresaleService;
+import com.muchinfo.mtp3common.vo.AjaxResult;
+import com.muchinfo.mtp3common.vo.PageResult;
+import com.muchinfo.mtp3pojos.vo.presale.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+
+@RestController
+@RequestMapping("/presale")
+@Api(value = "预售管理API", description = "预售管理")
+public class PresaleController {
+
+    @Resource
+    private IPresaleService iPresaleService;
+    @Resource
+    IForwardOrderService iForwardOrderService;
+
+    @RequestMapping(method = RequestMethod.GET, value = "/query")
+    @ApiOperation("预售管理--> 预售查询 --> 获取列表")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    public PageResult<PresaleQueryResult> query(PresaleQueryParam param, HttpServletRequest request) {
+        return iPresaleService.query(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/view")
+    @ApiOperation("预售管理--> 预售查询 --> 查看详情")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult<PresaleQueryDetailResult> view(String applyid, HttpServletRequest request) {
+        return iPresaleService.view(applyid, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/viewPresaleLottery")
+    @ApiOperation("预售管理--> 预售查询 --> 中签结果")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult<PresalePresaleLotteryResult> viewPresaleLottery(Long goodsid, HttpServletRequest request) {
+        return iPresaleService.viewPresaleLottery(goodsid, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/viewfinsh")
+    @ApiOperation("预售管理--> 预售查询 --> 配售结果")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult<PresaleFinishResult> viewfinsh(Long goodsid, HttpServletRequest request) {
+        return iPresaleService.viewfinsh(goodsid, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/lottery")
+    @ApiOperation("预售管理--> 预售查询 --> 摇号")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult lottery(Long goodsid, Integer lotteryqty, HttpServletRequest request) {
+        return iPresaleService.lottery(goodsid, lotteryqty, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/complatesView")
+    @ApiOperation("预售管理--> 预售查询 --> 完成")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult<PresaleQueryResult> complatesView(Long goodsid, HttpServletRequest request) {
+        return iPresaleService.complatesView(goodsid, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/getAccountIds")
+    @ApiOperation("预售管理--> 预售查询 --> 完成--> 配售信息新增初始化账号")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult<PresaleFinishInitAddResult> getAccountIds(Long goodsid, HttpServletRequest request) {
+        return iPresaleService.getAccountIds(goodsid, request);
+    }
+
+    @RequestMapping(method = RequestMethod.POST, value = "/saveComplates")
+    @ApiOperation("预售管理--> 预售查询 --> 完成--> 保存")
+    @ApiResponse(code = 200, message = "成功", response = PresaleComplatesParam.class)
+    public AjaxResult saveComplates(@RequestBody PresaleComplatesParam param, HttpServletRequest request) {
+        return iPresaleService.saveComplates(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/queryApply")
+    @ApiOperation("预售管理--> 预售申请 --> 获取列表")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    public PageResult<PresaleApplyResult> queryApply(PresaleApplyParam param, HttpServletRequest request) {
+        return iPresaleService.queryApply(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/applyView")
+    @ApiOperation("预售管理--> 预售申请 --> 详情")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult<PresaleApplyResult> applyView(String applyid, HttpServletRequest request) {
+        return iPresaleService.applyView(applyid, request);
+    }
+
+    @RequestMapping(method = RequestMethod.POST, value = "/save")
+    @ApiOperation("预售管理--> 预售申请 --> 新增")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult save(@RequestBody PresaleApplyAddParam param, HttpServletRequest request) {
+        return iPresaleService.save(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/saveInit")
+    @ApiOperation("预售管理--> 预售申请 --> 新增初始化市场信息")
+    @ApiResponse(code = 200, message = "成功", response = PresaleApplyAddInitResult.class)
+    public AjaxResult<PresaleApplyAddInitResult> saveInit(HttpServletRequest request) {
+        return iPresaleService.saveInit(request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/queryForward")
+    @ApiOperation("远期订单管理--> 订单申请 --> 获取列表")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    public PageResult<ForwardOrderApplyResult> queryForward(ForwardOrderApplyParam param, HttpServletRequest request) {
+        return iForwardOrderService.queryForward(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/forwardView")
+    @ApiOperation("远期订单管理--> 订单申请 --> 详情")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult<ForwardOrderApplyResult> forwardView(String applyid, HttpServletRequest request) {
+        return iForwardOrderService.forwardView(applyid, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/forwardAddInit")
+    @ApiOperation("远期订单管理--> 订单申请 --> 新增--> 初始化市场、商品信息(确定商品后展示其余信息)")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult<ForwardAddMarketAndGoods> forwardAddInit(Long marketid, Long goodid, HttpServletRequest request) {
+        return iForwardOrderService.forwardAddInit(marketid, goodid, request);
+    }
+
+    @RequestMapping(method = RequestMethod.POST, value = "/forwardAdd")
+    @ApiOperation("远期订单管理--> 订单申请 --> 新增")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult forwardAdd(@RequestBody ForwardAddParam param, HttpServletRequest request) {
+        return iForwardOrderService.forwardAdd(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/queryCancelApply")
+    @ApiOperation("远期订单管理--> 注销申请 --> 获取列表")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    public PageResult<ForwardCancelApplyResult> queryCancelApply(ForwardCancelApplyParam param, HttpServletRequest request) {
+        return iForwardOrderService.queryCancelApply(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/cancelApplyView")
+    @ApiOperation("远期订单管理--> 注销申请 --> 详情")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    public AjaxResult<ForwardCancelApplyResult> cancelApplyView(Long cancelid, HttpServletRequest request) {
+        return iForwardOrderService.cancelApplyView(cancelid, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/cancelApplyAddInit")
+    @ApiOperation("远期订单管理--> 注销申请 --> 新增 --> 获取市场列表信息")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    public AjaxResult<ForwardCancelApplyInit> cancelApplyAddInit(Long accountid, HttpServletRequest request) {
+        return iForwardOrderService.cancelApplyAddInit(accountid, request);
+    }
+
+    @RequestMapping(method = RequestMethod.POST, value = "/cancelApplyAdd")
+    @ApiOperation("远期订单管理--> 注销申请 --> 新增")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult cancelApplyAdd(@RequestBody ForwardCancelAddParam param, HttpServletRequest request) {
+        return iForwardOrderService.cancelApplyAdd(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/queryOrder")
+    @ApiOperation("远期订单管理--> 订单查询 --> 获取列表")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    public PageResult<ForwardOrderQueryResult> queryOrder(ForwardOrderQueryParam param, HttpServletRequest request) {
+        return iForwardOrderService.queryOrder(param, request);
+    }
+}

+ 99 - 7
mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/QueryController.java

@@ -17,6 +17,10 @@ import com.muchinfo.mtp3pojos.vo.query.goodstrade.GoodsTradeQueryParam;
 import com.muchinfo.mtp3pojos.vo.query.goodstrade.GoodsTradeQueryResult;
 import com.muchinfo.mtp3pojos.vo.query.investorsum.InvestorSumQueryParam;
 import com.muchinfo.mtp3pojos.vo.query.investorsum.InvestorSumQueryResult;
+import com.muchinfo.mtp3pojos.vo.query.other.EsignrecordQueryParam;
+import com.muchinfo.mtp3pojos.vo.query.other.EsignrecordQueryResult;
+import com.muchinfo.mtp3pojos.vo.query.other.InvestorQueryParam;
+import com.muchinfo.mtp3pojos.vo.query.other.InvestorQueryResult;
 import com.muchinfo.mtp3pojos.vo.query.position.*;
 import com.muchinfo.mtp3pojos.vo.query.tradesum.TradeSumQueryParam;
 import com.muchinfo.mtp3pojos.vo.query.tradesum.TradeSumQueryResult;
@@ -195,7 +199,7 @@ public class QueryController {
     @RequestMapping(method = RequestMethod.GET, value = "/summaryQueryInit")
     @ResponseBody
     @ApiOperation("仓单查询--> 仓单汇总查询查询 --> 详情 --> 初始化持有人")
-    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
     public AjaxResult<OrganSelectResult> summaryQueryInit(HttpServletRequest request) {
         return iQueryService.summaryQueryInit(request);
     }
@@ -243,7 +247,7 @@ public class QueryController {
     @RequestMapping(method = RequestMethod.GET, value = "/queryGoodsTradeExport")
     @ResponseBody
     @ApiOperation("内部订单查询--> 商品成交汇总 --> 导出 ")
-    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
     public AjaxResult queryGoodsTradeExport(GoodsTradeQueryParam param, HttpServletRequest request) {
         return iQueryService.queryGoodsTradeExport(param, request);
     }
@@ -259,7 +263,7 @@ public class QueryController {
     @RequestMapping(method = RequestMethod.GET, value = "/exportTradeSum")
     @ResponseBody
     @ApiOperation("内部订单查询--> 成交汇总查询 --> 导出列表 ")
-    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
     public AjaxResult exportTradeSum(TradeSumQueryParam param, HttpServletRequest request) {
         return iQueryService.exportTradeSum(param, request);
     }
@@ -275,7 +279,7 @@ public class QueryController {
     @RequestMapping(method = RequestMethod.GET, value = "/queryWRStandard")
     @ResponseBody
     @ApiOperation("内部订单查询--> 交收委托查询 --> 获取现货商品 ")
-    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
     public AjaxResult<DeliveryOrderWrsResult> queryWRStandard(DeliveryOrderWrsParam param, HttpServletRequest request) {
         return iQueryService.queryWRStandard(param, request);
     }
@@ -283,7 +287,7 @@ public class QueryController {
     @RequestMapping(method = RequestMethod.GET, value = "/deliveryOrderDetail")
     @ResponseBody
     @ApiOperation("内部订单查询--> 交收委托查询 --> 交收委托详情 ")
-    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
     public AjaxResult<DeliveryOrderDetailResult> deliveryOrderDetail(String deliveryorderid, String histradedate, HttpServletRequest request) {
         return iQueryService.deliveryOrderDetail(deliveryorderid, histradedate, request);
     }
@@ -299,7 +303,7 @@ public class QueryController {
     @RequestMapping(method = RequestMethod.GET, value = "/settlementDealDetail")
     @ResponseBody
     @ApiOperation("内部订单查询--> 交收成交 --> 交收成交详情 ")
-    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
     public AjaxResult<SettlementDealDetailResult> settlementDealDetail(SettlementDealDetailParam param, HttpServletRequest request) {
         return iQueryService.settlementDealDetail(param, request);
     }
@@ -307,8 +311,96 @@ public class QueryController {
     @RequestMapping(method = RequestMethod.GET, value = "/applyOrderDetail")
     @ResponseBody
     @ApiOperation("内部订单查询--> 交收成交 --> 交收成交详情 --> 申报式委托单详情")
-    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
     public AjaxResult<ApplyOrderDetailResult> applyOrderDetail(String deliveryorderid ,String histradedate, HttpServletRequest request) {
         return iQueryService.applyOrderDetail(deliveryorderid,histradedate, request);
     }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/queryoffline")
+    @ResponseBody
+    @ApiOperation("内部订单查询--> 线下交收单查询 --> 获取列表 ")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    public PageResult<OfflineDeliveryResult> queryoffline(OfflineDeliveryParam param, HttpServletRequest request) {
+        return iQueryService.queryoffline(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/offlinedetail")
+    @ResponseBody
+    @ApiOperation("内部订单查询--> 线下交收单查询 --> 详情 ")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult<OfflineDeliveryDetailResult> offlineDetail(String deliveryorderid, HttpServletRequest request) {
+        return iQueryService.offlineDetail(deliveryorderid, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/offlineclose")
+    @ResponseBody
+    @ApiOperation("内部订单查询--> 线下交收单查询 --> 确认交收 ")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult offlineclose(String deliveryorderid,Long marketid, HttpServletRequest request) {
+        return iQueryService.offlineclose(deliveryorderid, marketid,request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/offlinefail")
+    @ResponseBody
+    @ApiOperation("内部订单查询--> 线下交收单查询 --> 交收失败 ")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult offlinefail(String deliveryorderid,Long marketid,String auditremark, HttpServletRequest request) {
+        return iQueryService.offlinefail(deliveryorderid, marketid, auditremark,request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/sellGoods")
+    @ResponseBody
+    @ApiOperation("内部订单查询--> 线下交收单查询 --> 交收付款 ")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult sellGoods(String deliveryorderid,Long marketid, HttpServletRequest request) {
+        return iQueryService.sellGoods(deliveryorderid, marketid,request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/offlineexport")
+    @ResponseBody
+    @ApiOperation("内部订单查询--> 线下交收单查询 --> 导出 ")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult offlineexport(OfflineDeliveryParam param, HttpServletRequest request) {
+        return iQueryService.offlineexport(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/queryesignrecord")
+    @ResponseBody
+    @ApiOperation("内部订单查询--> 电子协议管理 --> 获取列表 ")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    public PageResult<EsignrecordQueryResult> queryesignrecord(EsignrecordQueryParam param, HttpServletRequest request) {
+        return iQueryService.queryesignrecord(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/resetStatus")
+    @ResponseBody
+    @ApiOperation("其他查询--> 电子协议管理 --> 重新签署 ")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult resetStatus(Long recordid, HttpServletRequest request) {
+        return iQueryService.changeStatus(recordid ,1, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/hasSigned")
+    @ResponseBody
+    @ApiOperation("其他查询--> 电子协议管理 --> 线下已签署 ")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult hasSigned(Long recordid, HttpServletRequest request) {
+        return iQueryService.changeStatus(recordid,3, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/queryinvestor")
+    @ResponseBody
+    @ApiOperation("其他查询--> 交易商资金查询、机构资金查询--> 获取列表 ")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    public PageResult<InvestorQueryResult> queryinvestor(InvestorQueryParam param, HttpServletRequest request) {
+        return iQueryService.queryinvestor(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/queryinvestortradeposition")
+    @ResponseBody
+    @ApiOperation("其他查询--> 交易商资金查询、机构资金查询- --> 持仓汇总 ")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    public PageResult<PositionSumSheetResult> queryinvestortradeposition(PositionSumSheetParam param, HttpServletRequest request) {
+        return iQueryService.queryinvestortradeposition(param, request);
+    }
 }

+ 69 - 5
mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/ReportFormController.java

@@ -15,6 +15,8 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.Map;
 
 @RestController
 @RequestMapping("/reportForm")
@@ -54,18 +56,32 @@ public class ReportFormController {
 
     @RequestMapping(method = RequestMethod.GET, value = "/orgReportQueryExport")
     @ApiOperation("报表管理-->经纪会员报表-->导出")
-    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
     public AjaxResult orgReportQueryExport(OrgReportQueryParam param, HttpServletRequest request) {
         return iReportFormService.orgReportQueryExport(param, request);
     }
 
     @RequestMapping(method = RequestMethod.GET, value = "/investorReportQuery")
-    @ApiOperation("报表管理-->交易商资金报表")
+    @ApiOperation("报表管理-->交易商资金报表/机构资金报表")
     @ApiResponse(code = 200, message = "成功", response = PageResult.class)
     public PageResult<InvestorReportQueryResult> investorReportQuery(InvestorReportQueryParam param, HttpServletRequest request) {
         return iReportFormService.investorReportQuery(param, request);
     }
 
+    @RequestMapping(method = RequestMethod.GET, value = "/investorReportExport")
+    @ApiOperation("报表管理-->交易商资金报表 --> 导出")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult investorReportExport(InvestorReportQueryParam param, HttpServletRequest request) {
+        return iReportFormService.investorReportExport(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/investorReportOrgExport")
+    @ApiOperation("报表管理-->机构资金报表 --> 导出")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult investorReportOrgExport(InvestorReportQueryParam param, HttpServletRequest request) {
+        return iReportFormService.investorReportOrgExport(param, request);
+    }
+
     @RequestMapping(method = RequestMethod.GET, value = "/queryTAAccountChildrenSelect")
     @ApiOperation("报表管理-->资金账户报表-->资金账户下拉列表")
     @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
@@ -73,10 +89,9 @@ public class ReportFormController {
         return iReportFormService.queryTAAccountChildrenSelect(searchcode, request);
     }
 
-
     @RequestMapping(method = RequestMethod.GET, value = "/taaccountReportQuery")
     @ApiOperation("报表管理-->资金账户报表-->资金信息")
-    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
     public AjaxResult<ReportTaaccount> taaccountReportQuery(TaAccountReportParam param, HttpServletRequest request) {
         return iReportFormService.taaccountReportQuery(param, request);
     }
@@ -104,8 +119,57 @@ public class ReportFormController {
 
     @RequestMapping(method = RequestMethod.GET, value = "/accountppquery")
     @ApiOperation("报表管理-->资金账户报表-->履约汇总表")
-    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
     public AjaxResult<ReportPlateformpp> accountppquery(TaAccountReportParam param, HttpServletRequest request) {
         return iReportFormService.accountppquery(param, request);
     }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/cusbank")
+    @ApiOperation("报表管理-->银行资金报表")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    public PageResult<CusBankReportResult> cusbank(CusBankReportParam param, HttpServletRequest request) {
+        return iReportFormService.cusbank(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/cusbankexport")
+    @ApiOperation("报表管理-->银行资金报表-->导出")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult cusbankexport(CusBankReportParam param, HttpServletRequest request) {
+        return iReportFormService.cusbankexport(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/managediv")
+    @ApiOperation("报表管理-->服务费分润报表")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    public PageResult<ManageDivReportResult> managediv(CusBankReportParam param, HttpServletRequest request) {
+        return iReportFormService.managediv(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/managedivexport")
+    @ApiOperation("报表管理-->服务费分润报表-->导出")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult managedivexport(CusBankReportParam param, HttpServletRequest request) {
+        return iReportFormService.managedivexport(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/rerun")
+    @ApiOperation("报表管理-->报表重算")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult rerun(String startDate, String endDate, HttpServletRequest request) {
+        return iReportFormService.rerun(startDate, endDate, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/daygoodscount")
+    @ApiOperation("报表管理-->商品交易报表")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult<Map<Long, List<GoodsReportResult>>> daygoodscount(GoodsReportParam param, HttpServletRequest request) {
+        return iReportFormService.daygoodscount(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/goodscountexport")
+    @ApiOperation("报表管理-->商品交易报表-->导出")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult goodscountexport(GoodsReportParam param, HttpServletRequest request) {
+        return iReportFormService.goodscountexport(param, request);
+    }
 }

+ 32 - 3
mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/SettlementController.java

@@ -4,18 +4,19 @@ import com.muchinfo.mtp3century.service.ISettlementService;
 import com.muchinfo.mtp3common.vo.AjaxResult;
 import com.muchinfo.mtp3common.vo.PageResult;
 import com.muchinfo.mtp3pojos.entity.ReckonDaydividecount;
-import com.muchinfo.mtp3pojos.vo.settlement.SecondProfitSharDetailParam;
-import com.muchinfo.mtp3pojos.vo.settlement.SecondProfitSharDetailResult;
-import com.muchinfo.mtp3pojos.vo.settlement.SecondProfitSharResult;
+import com.muchinfo.mtp3pojos.vo.settlement.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.util.List;
 
 @RestController
 @RequestMapping("/settlement")
@@ -59,4 +60,32 @@ public class SettlementController {
     private AjaxResult batchPay(String areaids, Integer tradedate, HttpServletRequest request) {
         return iSettlementService.batchPay(areaids, tradedate, request);
     }
+
+    @ApiOperation("结算管理-->持仓过户-->获取列表")
+    @RequestMapping(method = RequestMethod.GET, value = "/positiontransferquery")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    private PageResult<PositionTransferQueryResult> positiontransferquery(PositionTransferQueryParam param, HttpServletRequest request) {
+        return iSettlementService.positiontransferquery(param, request);
+    }
+
+    @ApiOperation("结算管理-->持仓过户-->详情")
+    @RequestMapping(method = RequestMethod.GET, value = "/positiontransferdetail")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    private AjaxResult<PositionTransferQueryResult> positiontransferdetail(String applyid, HttpServletRequest request) {
+        return iSettlementService.positiontransferdetail(applyid, request);
+    }
+
+    @ApiOperation("结算管理-->持仓过户-->批量导入-->导入")
+    @RequestMapping(method = RequestMethod.GET, value = "/batchimport")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    private AjaxResult<PositionTransferImport> batchimport(MultipartHttpServletRequest request) {
+        return iSettlementService.batchimport(request);
+    }
+
+    @ApiOperation("结算管理-->持仓过户-->批量导入-->保存")
+    @RequestMapping(method = RequestMethod.POST, value = "/saveimport")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    private AjaxResult saveimport(@RequestBody List<PositionTransferImport> param, HttpServletRequest request) {
+        return iSettlementService.saveimport(param,request);
+    }
 }

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

@@ -4,6 +4,7 @@ import com.muchinfo.mtp3century.service.ITradingAccountService;
 import com.muchinfo.mtp3common.vo.AjaxResult;
 import com.muchinfo.mtp3common.vo.PageResult;
 import com.muchinfo.mtp3pojos.entity.Loginaccount;
+import com.muchinfo.mtp3pojos.vo.tradingacc.InitAddResult;
 import com.muchinfo.mtp3pojos.vo.tradingacc.TradingAccountAddParam;
 import com.muchinfo.mtp3pojos.vo.tradingacc.TradingAccountQueryParam;
 import com.muchinfo.mtp3pojos.vo.tradingacc.TradingAccountQueryResult;
@@ -75,5 +76,10 @@ public class TradingAccountController {
         return iTradingAccountService.add(request, param);
     }
 
-
+    @ApiOperation("账号管理-->交易账号管理-->新增-->初始化登录账户及授权资金账户")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    @RequestMapping(method = RequestMethod.GET, value = "/initAdd")
+    public AjaxResult<InitAddResult> initAdd(HttpServletRequest request) {
+        return iTradingAccountService.initAdd(request);
+    }
 }

+ 104 - 0
mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/WarehouseController.java

@@ -0,0 +1,104 @@
+package com.muchinfo.mtp3century.controller;
+
+import com.muchinfo.mtp3century.service.IWarehouseService;
+import com.muchinfo.mtp3common.vo.AjaxResult;
+import com.muchinfo.mtp3common.vo.PageResult;
+import com.muchinfo.mtp3pojos.entity.Dgfactoryitemtype;
+import com.muchinfo.mtp3pojos.vo.LineTreeNode;
+import com.muchinfo.mtp3pojos.vo.warehouse.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+
+@RestController
+@RequestMapping("/warehouse")
+@Api(value = "仓储仓单api", description = "仓储仓单管理")
+public class WarehouseController {
+
+    @Resource
+    private IWarehouseService iWarehouseService;
+
+    @RequestMapping(method = RequestMethod.GET, value = "/query")
+    @ApiOperation("仓储仓单管理--> 仓单注册注销查询 --> 获取列表")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    public PageResult<WarehouseQueryResult> query(WarehouseQueryParam param, HttpServletRequest request) {
+        return iWarehouseService.query(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/queryDetail")
+    @ApiOperation("仓储仓单管理--> 仓单注册注销查询 --> 详情")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult<WarehouseDetailResult> queryDetail(String applyid, HttpServletRequest request) {
+        return iWarehouseService.queryDetail(applyid, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/warehouseTree")
+    @ApiOperation("仓储仓单管理--> 仓单注册申请 --> 初始化商品信息")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult<LineTreeNode> warehouseTree(Long categoryid, HttpServletRequest request) {
+        return iWarehouseService.warehouseTree(categoryid, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/querydgfactory")
+    @ApiOperation("仓储仓单管理--> 仓单注册申请 --> 根据商品获取信息")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult<Dgfactoryitemtype> querydgfactory(Long wrstandardid, HttpServletRequest request) {
+        return iWarehouseService.querydgfactory(wrstandardid, request);
+    }
+
+    @RequestMapping(method = RequestMethod.POST, value = "/wrInApply")
+    @ApiOperation("仓储仓单管理--> 仓单注册申请 --> 新增")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult wrInApply(@RequestBody WarehouseInAddParam param, HttpServletRequest request) {
+        return iWarehouseService.wrInApply(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/queryUserList")
+    @ApiOperation("仓储仓单管理--> 仓单注销申请 --> 获取申请人列表")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult queryUserList(HttpServletRequest request) {
+        return iWarehouseService.queryUserList(request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/querywslist")
+    @ApiOperation("仓储仓单管理--> 仓单注销申请 --> 获取商品名称")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult querywslist(Long userid, HttpServletRequest request) {
+        return iWarehouseService.querywslist(userid, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/querywhlist")
+    @ApiOperation("仓储仓单管理--> 仓单注销申请 --> 获取仓库地址")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult querywhlist(Long userid, Long wrstandardid, HttpServletRequest request) {
+        return iWarehouseService.querywhlist(userid, wrstandardid, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/queryWRHoldLB")
+    @ApiOperation("仓储仓单管理--> 仓单注销申请 --> 获取列表")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult<WrHoldLBResult> queryWRHoldLB(WrHoldLBParam param, HttpServletRequest request) {
+        return iWarehouseService.queryWRHoldLB(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.POST, value = "/wrOutApply")
+    @ApiOperation("仓储仓单管理--> 仓单注销申请 --> 新增")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult wrOutApply(@RequestBody WarehouseOutAddParam param, HttpServletRequest request) {
+        return iWarehouseService.wrOutApply(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/receiptquery")
+    @ApiOperation("仓储仓单管理--> 交收仓库管理 --> 获取列表")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    public PageResult<WarehouseReceiptResult> receiptquery(WarehouseReceiptParam param, HttpServletRequest request) {
+        return iWarehouseService.receiptquery(param, request);
+    }
+}

+ 48 - 0
mtp3-century/src/main/java/com/muchinfo/mtp3century/handler/GoodsMergeStrategy.java

@@ -0,0 +1,48 @@
+package com.muchinfo.mtp3century.handler;
+
+import com.alibaba.excel.write.handler.AbstractRowWriteHandler;
+import com.alibaba.excel.write.handler.CellWriteHandler;
+import com.alibaba.excel.write.handler.context.CellWriteHandlerContext;
+import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
+import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.util.CellRangeAddress;
+
+public class GoodsMergeStrategy extends AbstractRowWriteHandler implements CellWriteHandler {
+    private WriteSheetHolder writeSheetHolder;
+    private WriteTableHolder writeTableHolder;
+    private String lastRowContent = null; // 上一行的内容
+    private int lastRowNum = -1; // 上一行的行号
+
+    @Override
+    public void beforeRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder,Integer rowIndex, Integer relativeRowIndex, Boolean isHead) {
+        this.writeSheetHolder = writeSheetHolder;
+        this.writeTableHolder = writeTableHolder;
+    }
+
+    @Override
+    public void afterCellCreate(CellWriteHandlerContext context) {
+        if (!context.getHead()) { // 只处理数据行
+            String currentRowContent = context.getCell().getStringCellValue();
+            int currentRowNum = context.getRow().getRowNum();
+
+            if (lastRowContent != null && lastRowContent.equals(currentRowContent)) {
+                // 如果当前行和上一行内容相同,则合并单元格
+                Sheet sheet = writeSheetHolder.getSheet();
+                // 合并第0列和第1列
+                CellRangeAddress cellRangeAddress = new CellRangeAddress(
+                        lastRowNum, // 起始行号
+                        currentRowNum, // 结束行号
+                        0, // 起始列号
+                        1); // 结束列号
+
+                // 添加合并区域
+                sheet.addMergedRegion(cellRangeAddress);
+            } else {
+                // 内容不同,记录当前行内容和行号
+                lastRowContent = currentRowContent;
+                lastRowNum = currentRowNum;
+            }
+        }
+    }
+}

+ 1 - 1
mtp3-century/src/main/java/com/muchinfo/mtp3century/interceptor/SignAuthInterceptor.java

@@ -25,7 +25,7 @@ public class SignAuthInterceptor implements HandlerInterceptor {
     private RedisServiceUtil redisUtils;
 
     @Override
-    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){
         String timestampStr = request.getHeader("timestamp");
         if (StringUtils.isBlank(timestampStr)) {
             log.debug("timestamp不能为空...........");

+ 216 - 0
mtp3-century/src/main/java/com/muchinfo/mtp3century/listener/OrderListener.java

@@ -0,0 +1,216 @@
+package com.muchinfo.mtp3century.listener;
+
+import com.muchinfo.mtp.proto.TkernelMI1.*;
+import com.muchinfo.mtp.proto.TkernelMI2;
+import com.muchinfo.mtp3common.enumtype.FunCodeConstants;
+import com.muchinfo.mtp3common.utils.PropertyUtils;
+import com.muchinfo.mtp3common.utils.SerialNumberUtils;
+import com.muchinfo.mtp3common.vo.Calculator;
+import com.muchinfo.mtp3common.vo.ProtoHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.core.MessageListener;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.stereotype.Component;
+
+@Component
+@RabbitListener(queues = "tradeCpRspQueue")
+public class OrderListener implements MessageListener {
+	
+	private final static Logger logger = LoggerFactory.getLogger(OrderListener.class);
+	@Override
+	public void onMessage(Message message) {
+		logger.debug("GET MESSAGE---------------OrderListener---------------------");
+		byte[] msgBody = message.getBody();
+		int serverId = ProtoHelper.getServerIdForNTAS(msgBody);
+		int funCode = ProtoHelper.getFunCodeForNTAS(msgBody);
+		
+		if(serverId != PropertyUtils.serverId){
+			logger.debug("非本服务器消息-------------------------{}-----------",funCode);
+			return;
+		}
+		
+		try{
+			byte[] body = ProtoHelper.getProtoForNTAS(msgBody);
+			switch (funCode){
+				/*case FunCodeConstants.FunCode_Trade_ManageAmendHolderRsp:{
+					ManageAmendHolderRsp rsp = ManageAmendHolderRsp.parseFrom(body);
+					logger.debug(rsp.toBuilder().build().toString());
+					Long uuid = Long.valueOf(rsp.getEntrustID());
+	                SerialNumberUtils.putMessageMap(uuid, rsp);
+	                Calculator c = SerialNumberUtils.lockMap.remove(uuid);
+	                if (c != null) {
+	                    c.start();
+	                }else{
+	                	//修改状态
+	                	MessageHead hd = rsp.getHeader();
+	                	StringBuffer sb = new StringBuffer();
+	            		sb.append(hd.getAccessID()).append(hd.getGoodsID());
+	            		Long key = Long.valueOf(sb.toString());
+	                	Long applyid = uuid - key;
+	                	
+	                	updatePositionApplyService.editApplyByMsg(applyid, rsp.getRetCode());
+	                	
+	                }
+					break;
+				}*/
+				case FunCodeConstants.FunCode_Trade_ManageForceCloseRsp:{
+					ManageForceCloseRsp rsp = ManageForceCloseRsp.parseFrom(body);
+					logger.debug(rsp.toBuilder().build().toString());
+					Long uuid = Long.valueOf(rsp.getEntrustID());
+                    SerialNumberUtils.putMessageMap(uuid, rsp);
+                    Calculator c = SerialNumberUtils.lockMap.remove(uuid);
+                    if (c != null) {
+                        c.start();
+                    }
+					break;
+				}
+				/*case FunCodeConstants.FunCode_Trade_PreSaleListingInfoRsp:{
+					PreSaleListingInfoRsp rsp = PreSaleListingInfoRsp.parseFrom(body);
+					logger.debug(rsp.toBuilder().build().toString());
+					Long uuid = Long.valueOf(rsp.getHeader().getUUID());
+                    SerialNumberUtils.putMessageMap(uuid, rsp);
+                    Calculator c = SerialNumberUtils.lockMap.remove(uuid);
+                    if (c != null) {
+                        c.start();
+                    }else{
+                    	PresaleOrderapply apply = presaleOrderapplyService.get(rsp.getApplyID());
+                    	if(rsp.getRetCode() == 0){
+                    		apply.setApplystatus(3);
+                    	}else{
+                    		apply.setApplystatus(5);
+                    		apply.setRemark(ProtoErrorCodes.resultMsg(rsp.getRetCode()));
+                    	}
+                    	presaleOrderapplyService.update(apply);
+                    }
+					break;
+				}*/
+				case FunCodeConstants.FunCode_Trade_PreSaleCancelRsp:{
+					PreSaleCancelRsp rsp = PreSaleCancelRsp.parseFrom(body);
+					logger.debug(rsp.toBuilder().build().toString());
+					Long uuid = Long.valueOf(rsp.getHeader().getUUID());
+					SerialNumberUtils.putMessageMap(uuid, rsp);
+					Calculator c = SerialNumberUtils.lockMap.remove(uuid);
+					if (c != null) {
+						c.start();
+					}
+					break;
+				}
+				case FunCodeConstants.FunCode_Trade_GoodsDelistRsp: {
+					GoodsDelistRsp rsp = GoodsDelistRsp.parseFrom(body);
+					logger.debug("GoodsDelistRsp={}", rsp.toString());
+					Long uuid = Long.valueOf(rsp.getHeader().getUUID());
+					SerialNumberUtils.endCalculator(uuid, rsp);
+					break;
+				}
+				case FunCodeConstants.FunCode_Trade_DelistingRepoRsp: {
+					DelistingRepoRsp rsp = DelistingRepoRsp.parseFrom(body);
+					logger.debug("DelistingRepoRsp={}", rsp.toString());
+					Long uuid = Long.valueOf(rsp.getHeader().getUUID());
+                    SerialNumberUtils.endCalculator(uuid,rsp);
+                    break;
+                }
+                case FunCodeConstants.FunCode_Trade_CancelOrderRsp:{
+                	CancelOrderRsp rsp = CancelOrderRsp.parseFrom(body);
+                	logger.debug(rsp.toBuilder().build().toString());
+                	Long uuid = Long.valueOf(rsp.getHeader().getUUID());
+                	SerialNumberUtils.putMessageMap(uuid, rsp);
+                	Calculator c = SerialNumberUtils.lockMap.remove(uuid);
+                	if (c != null) {
+                        c.start();
+                    }
+                	break;
+                }
+                case FunCodeConstants.FunCode_Trade_ManageAmendTradeRsp:{
+                	ManageAmendTradeRsp rsp = ManageAmendTradeRsp.parseFrom(body);
+                	logger.debug(rsp.toBuilder().build().toString());
+                	Long uuid = Long.valueOf(rsp.getHeader().getUUID());
+                	SerialNumberUtils.putMessageMap(uuid, rsp);
+                	Calculator c = SerialNumberUtils.lockMap.remove(uuid);
+                	if (c != null) {
+                        c.start();
+                    }
+                	break;
+                }
+                case FunCodeConstants.FunCode_Trade_OrderTransferRsp:{
+                    OrderTransferRsp rsp = OrderTransferRsp.parseFrom(body);
+                    logger.debug("TkernelMI1.OrderTransferRsp={}",rsp.toString());
+                    Long uuid = Long.valueOf(rsp.getHeader().getUUID());
+                    SerialNumberUtils.endCalculator(uuid,rsp);
+                    break;
+                }
+                
+                case FunCodeConstants.FunCode_Trade_ManageAmendOrderRsp:{
+                	ManageAmendOrderRsp rsp = ManageAmendOrderRsp.parseFrom(body);
+                	logger.debug("ManageAmendOrderRsp:"+rsp.toBuilder().build().toString());
+                	Long uuid = Long.valueOf(rsp.getHeader().getUUID());
+                	SerialNumberUtils.putMessageMap(uuid, rsp);
+                	Calculator c = SerialNumberUtils.lockMap.remove(uuid);
+                	if (c != null) {
+                        c.start();
+                    }
+                	break;
+                }
+                case FunCodeConstants.FunCode_Trade_ManageUnBoundOrderRsp:{
+                	ManageUnBoundOrderRsp rsp = ManageUnBoundOrderRsp.parseFrom(body);
+                	logger.debug("ManageUnBoundOrderRsp:"+rsp.toBuilder().build().toString());
+                	Long uuid = Long.valueOf(rsp.getHeader().getUUID());
+                	SerialNumberUtils.putMessageMap(uuid, rsp);
+                	Calculator c = SerialNumberUtils.lockMap.remove(uuid);
+                	if (c != null) {
+                        c.start();
+                    }
+                	break;
+                }
+                case FunCodeConstants.FunCode_Trade_SwapProtoCloseApplyPassRsp:{
+                	SwapProtoCloseApplyPassRsp rsp = SwapProtoCloseApplyPassRsp.parseFrom(body);
+                	logger.debug("FunCode_Trade_SwapProtoCloseApplyPassRsp:"+rsp.toBuilder().build().toString());
+                	Long uuid = Long.valueOf(rsp.getHeader().getUUID());
+                	SerialNumberUtils.putMessageMap(uuid, rsp);
+                	Calculator c = SerialNumberUtils.lockMap.remove(uuid);
+                	if (c != null) {
+                        c.start();
+                    }
+                	break;
+                }
+				case FunCodeConstants.FuncCode_HolderTransferApplyRsp: {
+					//持仓过户申请接口响应
+					TkernelMI2.HolderTransferApplyRsp rsp = TkernelMI2.HolderTransferApplyRsp.parseFrom(body);
+					Long endUuid = Long.valueOf(rsp.getHeader().getUUID());
+					SerialNumberUtils.putMessageMap(endUuid, rsp);
+					Calculator c = SerialNumberUtils.lockMap.get(endUuid);
+					if (c != null) {
+						c.start();
+					}
+					break;
+				}
+				case FunCodeConstants.FuncCode_HolderTransferRefuseRsp: {
+					//持仓过户审核拒绝接口响应
+					TkernelMI2.HolderTransferRefuseRsp rsp = TkernelMI2.HolderTransferRefuseRsp.parseFrom(body);
+					Long endUuid = Long.valueOf(rsp.getHeader().getUUID());
+					SerialNumberUtils.putMessageMap(endUuid, rsp);
+					Calculator c = SerialNumberUtils.lockMap.get(endUuid);
+					if (c != null) {
+						c.start();
+					}
+					break;
+				}
+
+				// 定金转让持仓操作响应
+				/*case FunCodeConstants.FuncCode_DepositTransferOperateRsp : {
+					TkernelMI2.DepositTransferOperateRsp rsp = TkernelMI2.DepositTransferOperateRsp.parseFrom(body);
+					Long endUuid = Long.valueOf(rsp.getHeader().getUUID());
+					SerialNumberUtils.putMessageMap(endUuid, rsp);
+					Calculator c = SerialNumberUtils.lockMap.get(endUuid);
+					if (c != null) {
+						c.start();
+					}
+					break;
+				}*/
+			}
+		}catch (Exception e) {
+            logger.error("解包异常,功能编号为:" + funCode,e);
+        }
+	}
+}

+ 193 - 0
mtp3-century/src/main/java/com/muchinfo/mtp3century/listener/TradeCpListener.java

@@ -0,0 +1,193 @@
+package com.muchinfo.mtp3century.listener;
+
+import com.muchinfo.mtp3common.enumtype.FunCodeConstants;
+import com.muchinfo.mtp3common.vo.Calculator;
+import com.muchinfo.mtp3common.vo.ProtoHelper;
+import com.muchinfo.mtp3common.utils.SerialNumberUtils;
+import com.muchinfo.mtp.proto.TkernelMI1.*;
+import com.muchinfo.mtp.proto.TkernelMI2;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.core.MessageListener;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.stereotype.Component;
+
+@Component
+@RabbitListener(queues = "tradeCpRspQueue")
+public class TradeCpListener implements MessageListener {
+
+    private final static Logger logger = LoggerFactory.getLogger(TradeCpListener.class);
+
+    @Override
+    public void onMessage(Message message) {
+        byte[] msgBody = message.getBody();
+        int funCode = ProtoHelper.getFunCodeForNTAS(msgBody);
+        Long uuid = 0L;
+
+        try {
+            byte[] body = ProtoHelper.getProtoForNTAS(msgBody);
+            switch (funCode) {
+                case FunCodeConstants.FunCode_Trade_CpPositionTransferInRetrialPassRsp: {
+                    //头寸转入复审通过响应(196680)
+                    CpPositionTransferInRetrialPassRsp rsp = CpPositionTransferInRetrialPassRsp.parseFrom(body);
+                    Long endUuid = Long.valueOf(rsp.getHeader().getUUID());
+                    SerialNumberUtils.putMessageMap(endUuid, rsp);
+                    Calculator c = SerialNumberUtils.lockMap.get(endUuid);
+                    if (c != null) {
+                        c.start();
+                    }
+                    break;
+                }
+                case FunCodeConstants.FunCode_Trade_CpPresaleRsp: {
+                    //产能预售申请响应(196684)
+                    CpPresaleRsp rsp = CpPresaleRsp.parseFrom(body);
+                    Long endUuid = Long.valueOf(rsp.getHeader().getUUID());
+                    SerialNumberUtils.putMessageMap(endUuid, rsp);
+                    Calculator c = SerialNumberUtils.lockMap.get(endUuid);
+                    if (c != null) {
+                        c.start();
+                    }
+                    break;
+                }
+                case FunCodeConstants.FunCode_Trade_CpPresaleOperateRsp: {
+                    //产能预售申请撤销、拒绝应答
+                    CpPresaleOperateRsp rsp = CpPresaleOperateRsp.parseFrom(body);
+                    Long endUuid = Long.valueOf(rsp.getHeader().getUUID());
+                    SerialNumberUtils.putMessageMap(endUuid, rsp);
+                    Calculator c = SerialNumberUtils.lockMap.get(endUuid);
+                    if (c != null) {
+                        c.start();
+                    }
+                    break;
+                }
+                case FunCodeConstants.FunCode_Trade_CpPositionTransferInCancelRetrialPassRsp: {
+                    //产能预售注销复审应答
+                    CpPositionTransferInCancelRetrialPassRsp rsp = CpPositionTransferInCancelRetrialPassRsp.parseFrom(body);
+                    Long endUuid = Long.valueOf(rsp.getHeader().getUUID());
+                    SerialNumberUtils.putMessageMap(endUuid, rsp);
+                    Calculator c = SerialNumberUtils.lockMap.get(endUuid);
+                    if (c != null) {
+                        c.start();
+                    }
+                    break;
+                }
+                case FunCodeConstants.FunCode_Trade_CpPresalePaymentRsp: {
+                    //补齐尾款应答
+                    CpPresalePaymentRsp rsp = CpPresalePaymentRsp.parseFrom(body);
+                    Long endUuid = Long.valueOf(rsp.getHeader().getUUID());
+                    SerialNumberUtils.putMessageMap(endUuid, rsp);
+                    Calculator c = SerialNumberUtils.lockMap.get(endUuid);
+                    if (c != null) {
+                        c.start();
+                    }
+                    break;
+                }
+                case FunCodeConstants.FunCode_Trade_TerminatePreSellRsp: {
+                    //预售终止
+                    TerminatePreSellRsp rsp = TerminatePreSellRsp.parseFrom(body);
+                    Long endUuid = Long.valueOf(rsp.getHeader().getUUID());
+                    SerialNumberUtils.putMessageMap(endUuid, rsp);
+                    Calculator c = SerialNumberUtils.lockMap.get(endUuid);
+                    if (c != null) {
+                        c.start();
+                    }
+                    break;
+                }
+                case FunCodeConstants.FunCode_Trade_CpPresaleFinishRsp: {
+                    //预售完成应答
+                    CpPresaleFinishRsp rsp = CpPresaleFinishRsp.parseFrom(body);
+                    Long endUuid = Long.valueOf(rsp.getHeader().getUUID());
+                    SerialNumberUtils.putMessageMap(endUuid, rsp);
+                    Calculator c = SerialNumberUtils.lockMap.get(endUuid);
+                    if (c != null) {
+                        c.start();
+                    }
+                    break;
+                }
+                case FunCodeConstants.FunCode_Trade_OrderPresaleLotteryRsp: {
+                    //定金预售摇号应答
+                    OrderPresaleLotteryRsp rsp = OrderPresaleLotteryRsp.parseFrom(body);
+                    Long endUuid = Long.valueOf(rsp.getHeader().getUUID());
+                    SerialNumberUtils.putMessageMap(endUuid, rsp);
+                    Calculator c = SerialNumberUtils.lockMap.get(endUuid);
+                    if (c != null) {
+                        c.start();
+                    }
+                    break;
+                }
+                case FunCodeConstants.FunCode_Trade_OrderPresaleFinishRsp: {
+                    //定金预售完成应答
+                    TkernelMI2.OrderPresaleFinishRsp rsp = TkernelMI2.OrderPresaleFinishRsp.parseFrom(body);
+                    Long endUuid = Long.valueOf(rsp.getHeader().getUUID());
+                    SerialNumberUtils.putMessageMap(endUuid, rsp);
+                    Calculator c = SerialNumberUtils.lockMap.get(endUuid);
+                    if (c != null) {
+                        c.start();
+                    }
+                    break;
+                }
+                case FunCodeConstants.FunCode_Trade_AdjustmentTransferDepositRatioRsp: {
+                    // 调整商品转让定金比例应答
+                    AdjustmentTransferDepositRatioRsp rsp = AdjustmentTransferDepositRatioRsp.parseFrom(body);
+                    Long endUuid = Long.valueOf(rsp.getHeader().getUUID());
+                    SerialNumberUtils.putMessageMap(endUuid, rsp);
+                    Calculator c = SerialNumberUtils.lockMap.get(endUuid);
+                    if (c != null) {
+                        c.start();
+                    }
+                    break;
+                }
+                case FunCodeConstants.FunCode_DeliveryManageOperatorRsp: {
+                    // 交收管理端操作接口请求-YJHJ
+                    TkernelMI2.DeliveryManageOperatorRsp rsp = TkernelMI2.DeliveryManageOperatorRsp.parseFrom(body);
+                    Long endUuid = Long.valueOf(rsp.getHeader().getUUID());
+                    SerialNumberUtils.putMessageMap(endUuid, rsp);
+                    Calculator c = SerialNumberUtils.lockMap.get(endUuid);
+                    if (c != null) {
+                        c.start();
+                    }
+                    break;
+                }
+                case FunCodeConstants.FuncCode_RiskCloseRecoverRsp: {
+                    // 斩仓恢复接口
+                    TkernelMI2.RiskCloseRecoverRsp rsp = TkernelMI2.RiskCloseRecoverRsp.parseFrom(body);
+                    Long endUuid = Long.valueOf(rsp.getHeader().getUUID());
+                    SerialNumberUtils.putMessageMap(endUuid, rsp);
+                    Calculator c = SerialNumberUtils.lockMap.get(endUuid);
+                    if (c != null) {
+                        c.start();
+                    }
+                    break;
+                }
+
+                // 买方支付交收货款响应
+                case FunCodeConstants.FuncCode_DeliveryProviderPaySellAmountRsp : {
+                    TkernelMI2.DeliveryProviderPaySellAmountRsp cpRsp = TkernelMI2.DeliveryProviderPaySellAmountRsp.parseFrom(body);
+                    Long endUuid = Long.valueOf(cpRsp.getHeader().getUUID());
+                    SerialNumberUtils.putMessageMap(endUuid, cpRsp);
+                    Calculator c = SerialNumberUtils.lockMap.get(endUuid);
+                    if (c != null) {
+                        c.start();
+                    }
+                    break;
+                }
+
+                // 录入建平仓接口响应
+                case FunCodeConstants.FuncCode_InputOpenCloseOrderRsp : {
+                    TkernelMI2.InputOpenCloseOrderRsp cpRsp = TkernelMI2.InputOpenCloseOrderRsp.parseFrom(body);
+                    Long endUuid = Long.valueOf(cpRsp.getHeader().getUUID());
+                    SerialNumberUtils.putMessageMap(endUuid, cpRsp);
+                    Calculator c = SerialNumberUtils.lockMap.get(endUuid);
+                    if (c != null) {
+                        c.start();
+                    }
+                    break;
+                }
+
+            }
+        } catch (Exception e) {
+            logger.info("解包异常,功能编号为:" + funCode);
+        }
+    }
+}

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

@@ -3,8 +3,12 @@ package com.muchinfo.mtp3century.service;
 import com.muchinfo.mtp3common.vo.AjaxResult;
 import com.muchinfo.mtp3pojos.entity.*;
 import com.muchinfo.mtp3pojos.vo.FileMetaVo;
+import com.muchinfo.mtp3pojos.vo.HolderDetailExRedisVo;
+import com.muchinfo.mtp3pojos.vo.RealtimeQuoteVo;
 import com.muchinfo.mtp3pojos.vo.bankcusbank.BankCusBankExtendResult;
 import com.muchinfo.mtp3pojos.vo.common.*;
+import com.muchinfo.mtp3pojos.vo.taaccount.TaAccountQueryResult;
+import com.muchinfo.mtp3pojos.vo.taaccount.TaAccountReportParam;
 
 import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
@@ -62,4 +66,16 @@ public interface ICommonService {
     boolean checkLoginAccountRole(Systemmanager systemmanager, Long loginid);
 
     void sendMsg(Loginaccount la, int type);
+
+    List<HolderDetailExRedisVo> getHolderDetailExFromRedis(HolderDetailExRedisVo holderDetailExRedisVo, int flag);
+
+    AjaxResult<OrganSelectResult> queryOrganSelect2And3(OrganSelectParam param, HttpServletRequest request);
+
+    RealtimeQuoteVo getRealtimeQuote(String goodscode, int decimalplace);
+
+    AjaxResult<Taaccount> queryAccountId(Long userid, HttpServletRequest request);
+
+    AjaxResult<TaAccountQueryResult> queryTAAccountList(TaAccountReportParam param, HttpServletRequest request);
+
+    AjaxResult queryMobileByUserId(Long userid, HttpServletRequest request);
 }

+ 27 - 0
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IForwardOrderService.java

@@ -0,0 +1,27 @@
+package com.muchinfo.mtp3century.service;
+
+import com.muchinfo.mtp3common.vo.AjaxResult;
+import com.muchinfo.mtp3common.vo.PageResult;
+import com.muchinfo.mtp3pojos.vo.presale.*;
+
+import javax.servlet.http.HttpServletRequest;
+
+public interface IForwardOrderService {
+    PageResult<ForwardOrderApplyResult> queryForward(ForwardOrderApplyParam param, HttpServletRequest request);
+
+    AjaxResult<ForwardOrderApplyResult> forwardView(String applyid, HttpServletRequest request);
+
+    PageResult<ForwardOrderQueryResult> queryOrder(ForwardOrderQueryParam param, HttpServletRequest request);
+
+    PageResult<ForwardCancelApplyResult> queryCancelApply(ForwardCancelApplyParam param, HttpServletRequest request);
+
+    AjaxResult<ForwardCancelApplyResult> cancelApplyView(Long cancelid, HttpServletRequest request);
+
+    AjaxResult<ForwardAddMarketAndGoods> forwardAddInit(Long marketid,Long goodid, HttpServletRequest request);
+
+    AjaxResult forwardAdd(ForwardAddParam param, HttpServletRequest request);
+
+    AjaxResult<ForwardCancelApplyInit> cancelApplyAddInit(Long accountid, HttpServletRequest request);
+
+    AjaxResult cancelApplyAdd(ForwardCancelAddParam param, HttpServletRequest request);
+}

+ 40 - 0
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IOrderQueryService.java

@@ -0,0 +1,40 @@
+package com.muchinfo.mtp3century.service;
+
+import com.muchinfo.mtp3common.vo.AjaxResult;
+import com.muchinfo.mtp3common.vo.PageResult;
+import com.muchinfo.mtp3pojos.vo.HolderDetailExRedisVo;
+import com.muchinfo.mtp3pojos.vo.query.order.*;
+
+import javax.servlet.http.HttpServletRequest;
+
+public interface IOrderQueryService {
+    PageResult<OrderQueryResult> query(OrderQueryParam param, HttpServletRequest request);
+
+    AjaxResult<OrderQueryResult> queryDetail(OrderQueryParam param,HttpServletRequest request);
+
+    AjaxResult export(OrderQueryParam param, HttpServletRequest request);
+
+    PageResult<TerOrderQueryResult> queryTerOrder(TerOrderQueryParam param, HttpServletRequest request);
+
+    AjaxResult terOrderExport(TerOrderQueryParam param, HttpServletRequest request);
+
+    PageResult<DeliveryOrderResult> queryDeliveryOrder(DeliveryOrderParam param, HttpServletRequest request);
+
+    AjaxResult<DeliveryOrderResult> deliveryOrderDetail(DeliveryOrderParam param, HttpServletRequest request);
+
+    AjaxResult deliveryOrderExport(DeliveryOrderParam param, HttpServletRequest request);
+
+    PageResult<OrderDateQueryResult> queryOrderDate(OrderDateQueryParam param, HttpServletRequest request);
+
+    AjaxResult orderDateExport(OrderDateQueryParam param, HttpServletRequest request);
+
+    PageResult<ForcedOrderResult> queryForcedOrder(ForcedOrderParam param, HttpServletRequest request);
+
+    AjaxResult forcedOrderExport(ForcedOrderParam param, HttpServletRequest request);
+
+    AjaxResult forcedOrderRecover(String closeid, HttpServletRequest request);
+
+    AjaxResult<MonitorddjkCountResult> monitorddjkCount(MonitorddjkParam param, HttpServletRequest request);
+
+    PageResult<HolderDetailExRedisVo> monitorddjk(MonitorddjkParam param, HttpServletRequest request);
+}

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

@@ -2,6 +2,8 @@ package com.muchinfo.mtp3century.service;
 
 import com.muchinfo.mtp3common.vo.AjaxResult;
 import com.muchinfo.mtp3common.vo.PageResult;
+import com.muchinfo.mtp3pojos.vo.common.OrganSelectParam;
+import com.muchinfo.mtp3pojos.vo.common.OrganSelectResult;
 import com.muchinfo.mtp3pojos.vo.organ.UserAccountReqParam;
 import com.muchinfo.mtp3pojos.vo.organ.UserAccountVo;
 import com.muchinfo.mtp3pojos.vo.organ.OrganParam;

+ 17 - 0
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IPerformanceService.java

@@ -0,0 +1,17 @@
+package com.muchinfo.mtp3century.service;
+
+import com.muchinfo.mtp3common.vo.AjaxResult;
+import com.muchinfo.mtp3common.vo.PageResult;
+import com.muchinfo.mtp3pojos.vo.performance.*;
+
+import javax.servlet.http.HttpServletRequest;
+
+public interface IPerformanceService {
+    PageResult<PayPerformanceResult> query(PayPerformanceParam param, HttpServletRequest request);
+
+    AjaxResult<PayPerformanceDetailResult> view(String planid, Integer sellorbuy, String histradedate, HttpServletRequest request);
+
+    AjaxResult doBreach(PayPerformanceBreachParam param, HttpServletRequest request);
+
+    AjaxResult doDelay(PayPerformanceDelayParam param, HttpServletRequest request);
+}

+ 34 - 0
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IPresaleService.java

@@ -0,0 +1,34 @@
+package com.muchinfo.mtp3century.service;
+
+import com.muchinfo.mtp3common.vo.AjaxResult;
+import com.muchinfo.mtp3common.vo.PageResult;
+import com.muchinfo.mtp3pojos.entity.CptradePresalegoodsex;
+import com.muchinfo.mtp3pojos.vo.presale.*;
+
+import javax.servlet.http.HttpServletRequest;
+
+public interface IPresaleService {
+    PageResult<PresaleQueryResult> query(PresaleQueryParam param, HttpServletRequest request);
+
+    AjaxResult<PresaleQueryDetailResult> view(String applyid, HttpServletRequest request);
+
+    AjaxResult<PresalePresaleLotteryResult> viewPresaleLottery(Long goodsid, HttpServletRequest request);
+
+    AjaxResult<PresaleFinishResult> viewfinsh(Long goodsid, HttpServletRequest request);
+
+    AjaxResult lottery(Long goodsid, Integer lotteryqty,HttpServletRequest request);
+
+    AjaxResult<PresaleQueryResult> complatesView(Long goodsid, HttpServletRequest request);
+
+    AjaxResult<PresaleFinishInitAddResult> getAccountIds(Long goodsid, HttpServletRequest request);
+
+    AjaxResult saveComplates(PresaleComplatesParam param, HttpServletRequest request);
+
+    PageResult<PresaleApplyResult> queryApply(PresaleApplyParam param, HttpServletRequest request);
+
+    AjaxResult<PresaleApplyResult> applyView(String applyid, HttpServletRequest request);
+
+    AjaxResult save(PresaleApplyAddParam param, HttpServletRequest request);
+
+    AjaxResult<PresaleApplyAddInitResult> saveInit(HttpServletRequest request);
+}

+ 24 - 0
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IQueryService.java

@@ -16,6 +16,10 @@ import com.muchinfo.mtp3pojos.vo.query.goodstrade.GoodsTradeQueryParam;
 import com.muchinfo.mtp3pojos.vo.query.goodstrade.GoodsTradeQueryResult;
 import com.muchinfo.mtp3pojos.vo.query.investorsum.InvestorSumQueryParam;
 import com.muchinfo.mtp3pojos.vo.query.investorsum.InvestorSumQueryResult;
+import com.muchinfo.mtp3pojos.vo.query.other.EsignrecordQueryParam;
+import com.muchinfo.mtp3pojos.vo.query.other.EsignrecordQueryResult;
+import com.muchinfo.mtp3pojos.vo.query.other.InvestorQueryParam;
+import com.muchinfo.mtp3pojos.vo.query.other.InvestorQueryResult;
 import com.muchinfo.mtp3pojos.vo.query.position.*;
 import com.muchinfo.mtp3pojos.vo.query.tradesum.TradeSumQueryParam;
 import com.muchinfo.mtp3pojos.vo.query.tradesum.TradeSumQueryResult;
@@ -91,4 +95,24 @@ public interface IQueryService {
     AjaxResult<SettlementDealDetailResult> settlementDealDetail(SettlementDealDetailParam param, HttpServletRequest request);
 
     AjaxResult<ApplyOrderDetailResult> applyOrderDetail(String deliveryorderid, String histradedate, HttpServletRequest request);
+
+    PageResult<OfflineDeliveryResult> queryoffline(OfflineDeliveryParam param, HttpServletRequest request);
+
+    AjaxResult<OfflineDeliveryDetailResult> offlineDetail(String deliveryorderid, HttpServletRequest request);
+
+    AjaxResult offlineclose(String deliveryorderid,Long marketid,  HttpServletRequest request);
+
+    AjaxResult offlinefail(String deliveryorderid, Long marketid, String auditremark, HttpServletRequest request);
+
+    AjaxResult offlineexport(OfflineDeliveryParam param, HttpServletRequest request);
+
+    PageResult<EsignrecordQueryResult> queryesignrecord(EsignrecordQueryParam param, HttpServletRequest request);
+
+    AjaxResult changeStatus(Long recordid,Integer newStatus, HttpServletRequest request);
+
+    PageResult<InvestorQueryResult> queryinvestor(InvestorQueryParam param, HttpServletRequest request);
+
+    PageResult<PositionSumSheetResult> queryinvestortradeposition(PositionSumSheetParam param, HttpServletRequest request);
+
+    AjaxResult sellGoods(String deliveryorderid, Long marketid, HttpServletRequest request);
 }

+ 20 - 0
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IReportFormService.java

@@ -7,6 +7,8 @@ import com.muchinfo.mtp3pojos.entity.ReportTaaccount;
 import com.muchinfo.mtp3pojos.vo.reportform.*;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.Map;
 
 public interface IReportFormService {
     PageResult<ShareAmountQueryResult> selectShareAmount(ShareAmountQueryParam param, HttpServletRequest request);
@@ -32,4 +34,22 @@ public interface IReportFormService {
     AjaxResult<ReportPlateformpp> accountppquery(TaAccountReportParam param, HttpServletRequest request);
 
     AjaxResult<TAAccountChildrenSelect> queryTAAccountChildrenSelect(String searchcode, HttpServletRequest request);
+
+    PageResult<CusBankReportResult> cusbank(CusBankReportParam param, HttpServletRequest request);
+
+    AjaxResult cusbankexport(CusBankReportParam param, HttpServletRequest request);
+
+    PageResult<ManageDivReportResult> managediv(CusBankReportParam param, HttpServletRequest request);
+
+    AjaxResult managedivexport(CusBankReportParam param, HttpServletRequest request);
+
+    AjaxResult investorReportExport(InvestorReportQueryParam param, HttpServletRequest request);
+
+    AjaxResult investorReportOrgExport(InvestorReportQueryParam param, HttpServletRequest request);
+
+    AjaxResult rerun(String startDate, String endDate, HttpServletRequest request);
+
+    AjaxResult<Map<Long, List<GoodsReportResult>>> daygoodscount(GoodsReportParam param, HttpServletRequest request);
+
+    AjaxResult goodscountexport(GoodsReportParam param, HttpServletRequest request);
 }

+ 11 - 3
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/ISettlementService.java

@@ -3,11 +3,11 @@ package com.muchinfo.mtp3century.service;
 import com.muchinfo.mtp3common.vo.AjaxResult;
 import com.muchinfo.mtp3common.vo.PageResult;
 import com.muchinfo.mtp3pojos.entity.ReckonDaydividecount;
-import com.muchinfo.mtp3pojos.vo.settlement.SecondProfitSharDetailParam;
-import com.muchinfo.mtp3pojos.vo.settlement.SecondProfitSharDetailResult;
-import com.muchinfo.mtp3pojos.vo.settlement.SecondProfitSharResult;
+import com.muchinfo.mtp3pojos.vo.settlement.*;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.List;
 
 public interface ISettlementService {
     PageResult<SecondProfitSharResult> sharedayquery(String tradedate, Integer areatype, Integer pageNum, Integer pageSize, HttpServletRequest request);
@@ -19,4 +19,12 @@ public interface ISettlementService {
     AjaxResult<ReckonDaydividecount> detail(String tradedate, Integer areatype, Long areaid, HttpServletRequest request);
 
     AjaxResult batchPay(String areaids, Integer tradedate, HttpServletRequest request);
+
+    PageResult<PositionTransferQueryResult> positiontransferquery(PositionTransferQueryParam param, HttpServletRequest request);
+
+    AjaxResult<PositionTransferQueryResult> positiontransferdetail(String applyid, HttpServletRequest request);
+
+    AjaxResult<PositionTransferImport> batchimport(MultipartHttpServletRequest request);
+
+    AjaxResult saveimport(List<PositionTransferImport> param, HttpServletRequest request);
 }

+ 3 - 0
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/ITradingAccountService.java

@@ -3,6 +3,7 @@ package com.muchinfo.mtp3century.service;
 import com.muchinfo.mtp3common.vo.AjaxResult;
 import com.muchinfo.mtp3common.vo.PageResult;
 import com.muchinfo.mtp3pojos.entity.Loginaccount;
+import com.muchinfo.mtp3pojos.vo.tradingacc.InitAddResult;
 import com.muchinfo.mtp3pojos.vo.tradingacc.TradingAccountAddParam;
 import com.muchinfo.mtp3pojos.vo.tradingacc.TradingAccountQueryParam;
 import com.muchinfo.mtp3pojos.vo.tradingacc.TradingAccountQueryResult;
@@ -23,4 +24,6 @@ public interface ITradingAccountService {
     AjaxResult undelAccount(HttpServletRequest request, Long loginid);
 
     AjaxResult add(HttpServletRequest request, TradingAccountAddParam param);
+
+    AjaxResult<InitAddResult> initAdd(HttpServletRequest request);
 }

+ 33 - 0
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IWarehouseService.java

@@ -0,0 +1,33 @@
+package com.muchinfo.mtp3century.service;
+
+import com.muchinfo.mtp3common.vo.AjaxResult;
+import com.muchinfo.mtp3common.vo.PageResult;
+import com.muchinfo.mtp3pojos.entity.Dgfactoryitemtype;
+import com.muchinfo.mtp3pojos.vo.LineTreeNode;
+import com.muchinfo.mtp3pojos.vo.warehouse.*;
+
+import javax.servlet.http.HttpServletRequest;
+
+public interface IWarehouseService {
+    PageResult<WarehouseQueryResult> query(WarehouseQueryParam param, HttpServletRequest request);
+
+    AjaxResult<WarehouseDetailResult> queryDetail(String applyid, HttpServletRequest request);
+
+    AjaxResult<LineTreeNode> warehouseTree(Long categoryid,HttpServletRequest request);
+
+    AjaxResult<Dgfactoryitemtype> querydgfactory(Long wrstandardid, HttpServletRequest request);
+
+    AjaxResult wrInApply(WarehouseInAddParam param, HttpServletRequest request);
+
+    AjaxResult queryUserList(HttpServletRequest request);
+
+    AjaxResult querywslist(Long userid, HttpServletRequest request);
+
+    AjaxResult querywhlist(Long userid, Long wrstandardid, HttpServletRequest request);
+
+    AjaxResult<WrHoldLBResult> queryWRHoldLB(WrHoldLBParam param, HttpServletRequest request);
+
+    AjaxResult wrOutApply(WarehouseOutAddParam param, HttpServletRequest request);
+
+    PageResult<WarehouseReceiptResult> receiptquery(WarehouseReceiptParam param, HttpServletRequest request);
+}

+ 258 - 6
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/CommonServiceImpl.java

@@ -3,6 +3,7 @@ package com.muchinfo.mtp3century.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.muchinfo.mtp.proto.AccountRedis;
 import com.muchinfo.mtp.proto.AkernelMI1;
 import com.muchinfo.mtp.proto.Common;
 import com.muchinfo.mtp.proto.QuoteMI1;
@@ -10,11 +11,14 @@ import com.muchinfo.mtp3century.service.ICommonService;
 import com.muchinfo.mtp3century.service.ISendMsgService;
 import com.muchinfo.mtp3century.utils.RedisServiceUtil;
 import com.muchinfo.mtp3common.enumtype.*;
+import com.muchinfo.mtp3common.utils.EncryptionUtils;
 import com.muchinfo.mtp3common.vo.AjaxResult;
 import com.muchinfo.mtp3common.utils.JwtUtil;
 import com.muchinfo.mtp3interface.mapper.*;
 import com.muchinfo.mtp3pojos.entity.*;
 import com.muchinfo.mtp3pojos.vo.FileMetaVo;
+import com.muchinfo.mtp3pojos.vo.HolderDetailExRedisVo;
+import com.muchinfo.mtp3pojos.vo.RealtimeQuoteVo;
 import com.muchinfo.mtp3pojos.vo.bankcusbank.BankCusBankExtendResult;
 import com.muchinfo.mtp3pojos.vo.common.*;
 import com.muchinfo.mtp3pojos.vo.taaccount.TaAccountQueryResult;
@@ -25,6 +29,10 @@ import org.slf4j.LoggerFactory;
 import org.springframework.amqp.core.Message;
 import org.springframework.amqp.core.MessageProperties;
 import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.data.redis.connection.RedisConnection;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
 import org.springframework.stereotype.Service;
 import com.muchinfo.mtp3common.utils.SerialNumberUtils;
 import com.muchinfo.mtp3common.vo.Calculator;
@@ -38,6 +46,7 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.io.File;
 import java.io.FileOutputStream;
+import java.io.Serializable;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.DateFormat;
@@ -83,6 +92,9 @@ public class CommonServiceImpl implements ICommonService {
     private ILoginaccountMapper iLoginaccountMapper;
     @Resource
     private ISendMsgService iSendMsgService;
+    @Resource
+    @Qualifier("byteArrayRedisTemplate")
+    private RedisTemplate<String, String> stringRedisTemplate;
 
     /**
      * 获取当前登入用户loginCode
@@ -208,10 +220,15 @@ public class CommonServiceImpl implements ICommonService {
     @Override
     public AjaxResult<GoodsSelectResult> queryGoodsSelect(GoodsSelectParam param, HttpServletRequest request) {
         String[] split = new String[0];
+        String[] tradeModeSplit = new String[0];
         if (StringUtils.isNotBlank(param.getGoodsStatusIds())) {
             split = param.getGoodsStatusIds().split(",");
         }
-        List<GoodsSelectResult> goodsSelectResults = iGoodsMapper.queryGoodsSelect(split, param);
+        if (StringUtils.isNotBlank(param.getTrademodels())) {
+            tradeModeSplit = param.getTrademodels().split(",");
+        }
+
+        List<GoodsSelectResult> goodsSelectResults = iGoodsMapper.queryGoodsSelect(split,tradeModeSplit, param);
         return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), goodsSelectResults);
     }
 
@@ -356,7 +373,7 @@ public class CommonServiceImpl implements ICommonService {
         TaAccountReportParam vo = new TaAccountReportParam();
         vo.setAccountId(accountId);
         vo.setUserId(systemmanager.getAreauserid());
-        List<TaAccountQueryResult> voList = iTaaccountMapper.queryTAAccount(vo);
+        List<TaAccountQueryResult> voList = queryTAAccount(vo);
         //不是本机构的资金账户不能使用
         return !voList.isEmpty();
     }
@@ -468,7 +485,7 @@ public class CommonServiceImpl implements ICommonService {
         TaAccountReportParam vo = new TaAccountReportParam();
         vo.setAccountId(accountid);
         vo.setUserId(systemmanager.getAreauserid());
-        List<TaAccountQueryResult> taAccountQueryResults = iTaaccountMapper.queryTAAccount(vo);
+        List<TaAccountQueryResult> taAccountQueryResults = queryTAAccount(vo);
         //不是本机构的资金账户不能使用
         if (CollectionUtils.isNotEmpty(taAccountQueryResults)) {
             return true;
@@ -486,11 +503,11 @@ public class CommonServiceImpl implements ICommonService {
         //会员或子机构
         if (systemmanager.getReletype() == 2 || systemmanager.getReletype() == 3) {
             Loginaccount la = iLoginaccountMapper.selectOne(new QueryWrapper<Loginaccount>().eq("loginid", loginid));
-            if (la == null){
+            if (la == null) {
                 return false;
             }
-            Useraccount ua = iUseraccountMapper.selectOne(new QueryWrapper<Useraccount>().eq("userid",la.getUserid()));
-            if (ua == null){
+            Useraccount ua = iUseraccountMapper.selectOne(new QueryWrapper<Useraccount>().eq("userid", la.getUserid()));
+            if (ua == null) {
                 return false;
             }
             if (ua.getSubarealevelpath().contains("," + systemmanager.getAreauserid().toString() + ",")) {
@@ -542,4 +559,239 @@ public class CommonServiceImpl implements ICommonService {
         // 启动线程
         myThread.start();
     }
+
+    @Override
+    public List<HolderDetailExRedisVo> getHolderDetailExFromRedis(HolderDetailExRedisVo param, int flag) {
+        // flag=1:YJ(按定金率,值小风险大  flag=2:交易中心(按风险率,值大风险大)
+        List<HolderDetailExRedisVo> resultList = new ArrayList<>();
+        try {
+            StringBuilder key = new StringBuilder("TradeHolderDetailEx:");
+            // 根据方向过滤
+            if (param.getBuyorsell() != null) {
+                key.append("*_").append(param.getBuyorsell()).append("_");
+            }
+            key.append("*");
+
+            Set<String> set = stringRedisTemplate.keys(key.toString());
+            Enumdicitem buyItem = iEnumdicitemMapper.selectOne(new QueryWrapper<Enumdicitem>()
+                    .eq("enumdiccode", "buyOrSell").eq("enumitemname", 0L));
+            String buyStr = buyItem == null ? "B" : buyItem.getEnumdicname();
+            Enumdicitem sellItem = iEnumdicitemMapper.selectOne(new QueryWrapper<Enumdicitem>()
+                    .eq("enumdiccode", "buyOrSell").eq("enumitemname", 1L));
+            String sellStr = sellItem == null ? "S" : sellItem.getEnumdicname();
+
+            BigDecimal riskParam = null;
+            if (param.getRisk() != null) {
+                riskParam = param.getRisk().divide(new BigDecimal(100));
+            }
+            if (CollectionUtils.isNotEmpty(set)) {
+                for (String str : set) {
+                    byte[] valuebts = redisServiceUtil.getBytes(str);
+                    if (valuebts != null) {
+                        try {
+                            AccountRedis.RedisTradeHolderDetailEx redisEx = AccountRedis.RedisTradeHolderDetailEx.newBuilder().mergeFrom(valuebts).build();
+                            if (redisEx != null && redisEx.getTHDetailEx() != null) {
+                                AccountRedis.TradeHolderDetailEx ex = redisEx.getTHDetailEx();
+                                // 过滤持仓量为0的单据(当天已平仓)
+                                if (ex.getHolderQty() == 0L) {
+                                    continue;
+                                }
+                                // flag=1:YJ(按定金率,值小风险大  flag=2:交易中心(按风险率,值大风险大)
+                                if (flag == 1) {
+                                    // 根据 定金率 risk 过滤 值小风险大
+                                    if (riskParam != null && BigDecimal.valueOf(ex.getDepositRate()).compareTo(riskParam) >= 0) {
+                                        continue;
+                                    }
+                                } else if (flag == 2) {
+                                    // 根据 风险率 risk 过滤 值大风险大
+                                    if (riskParam != null && riskParam.compareTo(BigDecimal.valueOf(ex.getDepositRate())) >= 0) {
+                                        continue;
+                                    }
+                                }
+                                // 过滤不合法单据号
+                                if (ex.getTradeID() <= 0L) {
+                                    continue;
+                                }
+                                // 根据商品过滤
+                                if (!StringUtils.isBlank(param.getGoodsfullname())) {
+                                    String goodsSearch = param.getGoodsfullname().trim();
+                                    if (!goodsSearch.equals(redisEx.getGoodsCode()) && !goodsSearch.equals(redisEx.getGoodsName())) {
+                                        continue;
+                                    }
+                                }
+
+                                HolderDetailExRedisVo vo = new HolderDetailExRedisVo();
+                                vo.setTradeid(String.valueOf(ex.getTradeID()));
+
+                                vo.setUserfullname(ex.getUserID() + "");
+                                Useraccount ua = iUseraccountMapper.selectOne(new QueryWrapper<Useraccount>().eq("userid", ex.getUserID()));
+                                if (ua != null) {
+                                    // 根据选择客户过滤
+                                    if (!StringUtils.isBlank(param.getUserfullname())) {
+                                        String username = param.getUserfullname().trim();
+                                        if (!Integer.toString(ex.getUserID()).contains(username) &&
+                                                !ua.getAccountname().contains(username) &&
+                                                !Long.toString(ex.getAccountID()).contains(username)
+                                        ) {
+                                            continue;
+                                        }
+                                    }
+
+                                    // 根据所属机构代码过滤
+                                    if (!StringUtils.isBlank(param.getParentusername())) {
+                                        String memberuserid = param.getParentusername().trim();
+                                        if (!memberuserid.equals(ua.getMemberuserid().toString())) {
+                                            continue;
+                                        }
+                                    }
+
+                                    vo.setUserfullname(ua.getUserid() + "/" + ua.getAccountname());
+                                    vo.setMemberusername(iUseraccountMapper.selectOrganName(ua.getMemberuserid()));
+                                    if (ua.getMemberuserid().equals(ua.getParentuserid())) {
+                                        vo.setParentusername("--");
+                                    } else {
+                                        vo.setParentusername(iUseraccountMapper.selectOrganName(ua.getMemberuserid()));
+                                    }
+                                }
+
+                                vo.setGoodsfullname(redisEx.getGoodsCode() + "/" + redisEx.getGoodsName());
+                                vo.setBuyorsell(ex.getBuyOrSell());
+                                vo.setBuyorselldisplay(ex.getBuyOrSell() == 1 ? sellStr : buyStr);
+                                vo.setHolderprice(BigDecimal.valueOf(ex.getHolderPrice()));
+                                long num = ex.getHolderQty() * (long) redisEx.getAgreeUnit();
+                                vo.setHolderqty(ex.getHolderQty());
+                                vo.setAgreeunit(redisEx.getAgreeUnit());
+                                vo.setHoldernum(Long.toString(num));
+                                vo.setHolderamount(BigDecimal.valueOf(ex.getHolderAmount()).setScale(2, RoundingMode.HALF_UP));
+                                vo.setPayeddeposit(BigDecimal.valueOf(ex.getPayedDeposit()).setScale(2, RoundingMode.HALF_UP));
+                                vo.setRestockdeposit(BigDecimal.valueOf(ex.getRestockDeposit()).setScale(2, RoundingMode.HALF_UP));
+                                vo.setCallatefee(BigDecimal.valueOf(ex.getCallAteFee()).setScale(2, RoundingMode.HALF_UP));
+                                vo.setHolddays(ex.getHoldDays() + 1);
+                                vo.setFloatpl(BigDecimal.valueOf(ex.getFloatPL()).setScale(2, RoundingMode.HALF_UP));
+
+                                if (flag == 1) {
+                                    // 四舍五入(值越小风险越大)
+                                    vo.setDepositrate(BigDecimal.valueOf(ex.getDepositRate()).setScale(4, RoundingMode.HALF_UP));
+                                } else {
+                                    // 截断(值越大风险越大)
+                                    vo.setDepositrate(BigDecimal.valueOf(ex.getDepositRate()).setScale(4, RoundingMode.DOWN));
+                                }
+                                vo.setDepositratedisplay(vo.getDepositrate().multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP) + "%");
+                                vo.setPromptdepositrate(BigDecimal.valueOf(ex.getPromptDepositRate()).setScale(4, RoundingMode.HALF_UP));
+                                vo.setCutdepositrate(BigDecimal.valueOf(ex.getCutDepositRate()).setScale(4, RoundingMode.HALF_UP));
+                                long freezeNum = ex.getFreezeQty() * (long) redisEx.getAgreeUnit();
+                                vo.setFreezeqty(ex.getFreezeQty());
+                                vo.setFreezenum(Long.toString(freezeNum));
+                                // 添加现价(平仓价)
+                                RealtimeQuoteVo quote = getRealtimeQuote(redisEx.getGoodsCode(), redisEx.getDecimalPlace());
+                                if (quote == null) {
+                                    vo.setLastprice("--");
+                                } else {
+                                    if (vo.getBuyorsell().equals(0)) {
+                                        // 买单显示买价
+                                        if (quote.getBid() == null) {
+                                            vo.setLastprice("--");
+                                        } else {
+                                            vo.setLastprice(quote.getBid().toString());
+                                        }
+                                    } else if (vo.getBuyorsell().equals(1)) {
+                                        // 卖单显示卖价
+                                        if (quote.getAsk() == null) {
+                                            vo.setLastprice("--");
+                                        } else {
+                                            vo.setLastprice(quote.getAsk().toString());
+                                        }
+                                    }
+                                }
+
+                                // 添加提示价格、
+                                String promptPrice = BigDecimal.valueOf(ex.getPromptPrice()).setScale(redisEx.getDecimalPlace(), RoundingMode.HALF_UP).toString();
+                                vo.setPromptprice(promptPrice);
+                                String cutPrice = BigDecimal.valueOf(ex.getCutPrice()).setScale(redisEx.getDecimalPlace(), RoundingMode.HALF_UP).toString();
+                                vo.setCutprice(cutPrice);
+                                //vo.setTradetimestr(ex.getTradeTime());
+                                resultList.add(vo);
+
+                            }
+                        } catch (Exception e) {
+                            logger.error("获取风险率等信息失败,失败原因:" + e.getMessage());
+                        }
+                    }
+                }
+            }
+        } catch (Exception e) {
+            logger.error("获取风险率等信息失败,失败原因:" + e.getMessage());
+        }
+        return resultList;
+    }
+
+    @Override
+    public AjaxResult<OrganSelectResult> queryOrganSelect2And3(OrganSelectParam param, HttpServletRequest request) {
+        List<OrganSelectResult> results = iUseraccountMapper.queryOrganSelect2And3(param);
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), results);
+    }
+
+    @Override
+    public RealtimeQuoteVo getRealtimeQuote(String goodscode, int decimalplace) {
+        RealtimeQuoteVo entity = null;
+        byte[] value = redisServiceUtil.getBytes("QUOTE:" + goodscode);
+        String strUnit = "1";
+        for (int i = 0; i < decimalplace; i++) {
+            strUnit += "0";
+        }
+        Double decimal = Double.valueOf(strUnit);
+        try {
+            QuoteMI1.RealtimeQuote quoteProto = QuoteMI1.RealtimeQuote.parseFrom(value);
+            if (quoteProto != null) {
+                entity = new RealtimeQuoteVo();
+                entity.setLast((double) quoteProto.getLast() / decimal);
+                entity.setOpen((double) quoteProto.getOpen() / decimal);
+                entity.setHigh((double) quoteProto.getHigh() / decimal);
+                entity.setLow((double) quoteProto.getLow() / decimal);
+                entity.setPreclose((double) quoteProto.getPreClose() / decimal);
+                entity.setReckonprice((double) quoteProto.getReckonPrice() / decimal);
+                entity.setLowlimit((double) quoteProto.getLowLimit() / decimal);
+                entity.setHighlimit((double) quoteProto.getHighLimit() / decimal);
+                entity.setAverage((double) quoteProto.getAverage() / decimal);
+
+                if (quoteProto.getBidPriceArrayCount() > 0 && quoteProto.getBidPriceArray(0) > 0) {
+                    entity.setBid(quoteProto.getBidPriceArray(0) / decimal);
+                }
+                if (quoteProto.getAskPriceArrayCount() > 0 && quoteProto.getAskPriceArray(0) > 0) {
+                    entity.setAsk(quoteProto.getAskPriceArray(0) / decimal);
+                }
+            }
+        } catch (Exception e) {
+            logger.error("获取实时行情异常", e);
+            entity = null;
+        }
+        return entity;
+    }
+
+    @Override
+    public AjaxResult<Taaccount> queryAccountId(Long userid, HttpServletRequest request) {
+        List<Taaccount> list = iTaaccountMapper.selectList(new QueryWrapper<Taaccount>().eq("userid", userid));
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), list);
+    }
+
+    @Override
+    public AjaxResult<TaAccountQueryResult> queryTAAccountList(TaAccountReportParam param, HttpServletRequest request) {
+        List<TaAccountQueryResult> list = queryTAAccount(param);
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), list);
+    }
+
+    @Override
+    public AjaxResult queryMobileByUserId(Long userid, HttpServletRequest request) {
+        Userinfo userinfo = iUserinfoMapper.selectOne(new QueryWrapper<Userinfo>().eq("userid",userid));
+        String mobile = null;
+        if(StringUtils.isNotBlank(userinfo.getMobile())){
+            mobile = EncryptionUtils.decryptForAES(userinfo.getMobile());
+        }
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), mobile);
+    }
+
+
+    public List<TaAccountQueryResult> queryTAAccount(TaAccountReportParam param) {
+        return iTaaccountMapper.queryTAAccount(param);
+    }
 }

+ 226 - 0
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/ForwardOrderServiceImpl.java

@@ -0,0 +1,226 @@
+package com.muchinfo.mtp3century.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.muchinfo.mtp3century.service.ICommonService;
+import com.muchinfo.mtp3century.service.IForwardOrderService;
+import com.muchinfo.mtp3common.enumtype.Constants;
+import com.muchinfo.mtp3common.enumtype.MessageType;
+import com.muchinfo.mtp3common.enumtype.SysConstants;
+import com.muchinfo.mtp3common.enumtype.SysEnums;
+import com.muchinfo.mtp3common.utils.SerialNumberUtils;
+import com.muchinfo.mtp3common.vo.AjaxResult;
+import com.muchinfo.mtp3common.vo.PageResult;
+import com.muchinfo.mtp3interface.mapper.*;
+import com.muchinfo.mtp3pojos.entity.*;
+import com.muchinfo.mtp3pojos.vo.presale.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.*;
+
+@Service
+public class ForwardOrderServiceImpl implements IForwardOrderService {
+    private final Logger log = LoggerFactory.getLogger(this.getClass());
+    @Resource
+    private ISystemmanagerMapper iSystemmanagerMapper;
+    @Resource
+    private ICommonService iCommonService;
+    @Resource
+    private ICptradePositionapplyMapper iCptradePositionapplyMapper;
+    @Resource
+    private IMarketMapper iMarketMapper;
+    @Resource
+    private IGoodsMapper iGoodsMapper;
+    @Resource
+    private IUseraccountMapper iUseraccountMapper;
+    @Resource
+    private IDeliveryrelationMapper iDeliveryrelationMapper;
+    @Resource
+    private IWrstandardMapper iWrstandardMapper;
+    @Resource
+    private IMarketrunMapper iMarketrunMapper;
+    @Resource
+    private ICptradePositioncancelMapper iCptradePositioncancelMapper;
+
+    @Override
+    public PageResult<ForwardOrderApplyResult> queryForward(ForwardOrderApplyParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        if (systemmanager.getReletype().intValue() != SysConstants.SYS_TYPE_MANAGE) {
+            param.setUserid(systemmanager.getAreauserid());
+        }
+        PageResult<ForwardOrderApplyResult> pageResult = new PageResult<>();
+        IPage<ForwardOrderApplyResult> page = new Page<>(param.getPageNum(), param.getPageSize());
+        IPage<ForwardOrderApplyResult> resultIPage = iCptradePositionapplyMapper.queryForward(page, param);
+        pageResult.setCode(Constants.Success_Code_Design);
+        pageResult.setMessage(AjaxResult.dealMsg(MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language")));
+        pageResult.setPages(resultIPage.getPages());
+        pageResult.setCurrent(resultIPage.getCurrent());
+        pageResult.setTotal(resultIPage.getTotal());
+        pageResult.setPageSize(resultIPage.getSize());
+        pageResult.setData(resultIPage.getRecords());
+        return pageResult;
+    }
+
+    @Override
+    public AjaxResult<ForwardOrderApplyResult> forwardView(String applyid, HttpServletRequest request) {
+        ForwardOrderApplyParam param = new ForwardOrderApplyParam();
+        param.setApplyid(applyid);
+        List<ForwardOrderApplyResult> results = iCptradePositionapplyMapper.queryForward(param);
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), results.get(0));
+    }
+
+    @Override
+    public PageResult<ForwardOrderQueryResult> queryOrder(ForwardOrderQueryParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        if (systemmanager.getReletype().intValue() != SysConstants.SYS_TYPE_MANAGE) {
+            param.setUserid(systemmanager.getAreauserid());
+        }
+        PageResult<ForwardOrderQueryResult> pageResult = new PageResult<>();
+        IPage<ForwardOrderQueryResult> page = new Page<>(param.getPageNum(), param.getPageSize());
+        IPage<ForwardOrderQueryResult> resultIPage = iCptradePositionapplyMapper.queryOrder(page, param);
+        pageResult.setCode(Constants.Success_Code_Design);
+        pageResult.setMessage(AjaxResult.dealMsg(MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language")));
+        pageResult.setPages(resultIPage.getPages());
+        pageResult.setCurrent(resultIPage.getCurrent());
+        pageResult.setTotal(resultIPage.getTotal());
+        pageResult.setPageSize(resultIPage.getSize());
+        pageResult.setData(resultIPage.getRecords());
+        return pageResult;
+    }
+
+    @Override
+    public PageResult<ForwardCancelApplyResult> queryCancelApply(ForwardCancelApplyParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        if (systemmanager.getReletype().intValue() != SysConstants.SYS_TYPE_MANAGE) {
+            param.setUserid(systemmanager.getAreauserid());
+        }
+        PageResult<ForwardCancelApplyResult> pageResult = new PageResult<>();
+        IPage<ForwardCancelApplyResult> page = new Page<>(param.getPageNum(), param.getPageSize());
+        IPage<ForwardCancelApplyResult> resultIPage = iCptradePositionapplyMapper.queryCancelApply(page, param);
+        pageResult.setCode(Constants.Success_Code_Design);
+        pageResult.setMessage(AjaxResult.dealMsg(MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language")));
+        pageResult.setPages(resultIPage.getPages());
+        pageResult.setCurrent(resultIPage.getCurrent());
+        pageResult.setTotal(resultIPage.getTotal());
+        pageResult.setPageSize(resultIPage.getSize());
+        pageResult.setData(resultIPage.getRecords());
+        return pageResult;
+    }
+
+    @Override
+    public AjaxResult<ForwardCancelApplyResult> cancelApplyView(Long cancelid, HttpServletRequest request) {
+        ForwardCancelApplyParam param = new ForwardCancelApplyParam();
+        param.setCancelid(cancelid);
+        List<ForwardCancelApplyResult> results = iCptradePositionapplyMapper.queryCancelApply(param);
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), results.get(0));
+    }
+
+    @Override
+    public AjaxResult<ForwardAddMarketAndGoods> forwardAddInit(Long marketid,Long goodid, HttpServletRequest request) {
+        ForwardAddMarketAndGoods result = new ForwardAddMarketAndGoods();
+        List<Market> marketList = iMarketMapper.selectList(new QueryWrapper<Market>()
+                .eq("tradeProperty", 2)
+                .in("tradeMode", 10, 13, 16, 70, 49));
+        result.setMarketList(marketList);
+        if (marketid != null) {
+            List<Goods> goods = iGoodsMapper.selectList(new QueryWrapper<Goods>().eq("goodsstatus", 3)
+                    .eq("marketid", marketid));
+            Market market = iMarketMapper.selectOne(new QueryWrapper<Market>().eq("marketid", marketid));
+            List<Goods> goodsList = new ArrayList<>();
+            if (CollectionUtils.isNotEmpty(goods)) {
+                goods.forEach(p -> {
+                    if (market != null) {
+                        if (market.getTrademode().equals(SysEnums.TradeMode.DJZR.getCode())) {
+                            //定金转让市场49 只取未预售的商品
+                            if (p.getPresaleflag() != null && p.getPresaleflag().equals(1)) {
+                                goodsList.add(p);
+                            }
+                        } else {
+                            //其它市场无此限制
+                            goodsList.add(p);
+                        }
+                    }
+                });
+            }
+            result.setGoods(goodsList);
+
+            if(CollectionUtils.isNotEmpty(goodsList)){
+                goodsList.forEach(p -> {
+                    p.setProviderusername(iUseraccountMapper.selectOne(new QueryWrapper<Useraccount>().eq("userid",p.getProvideruserid())).getAccountname());
+                });
+            }
+        }
+
+        if(goodid != null){
+            ForwardAddOtherInit otherInit = iCptradePositionapplyMapper.queryDRelation(goodid);
+            Deliveryrelation dr = iDeliveryrelationMapper.selectOne(new QueryWrapper<Deliveryrelation>().eq("goodsid",goodid));
+            Wrstandard  wr = iWrstandardMapper.selectOne(new QueryWrapper<Wrstandard>().eq("wrstandardid",dr.getWrstandardid()));
+            otherInit.setWrstandardid(wr.getWrstandardid());
+            otherInit.setWrstandardcode(wr.getWrstandardcode());
+            otherInit.setWrstandardname(wr.getWrstandardname());
+            result.setOtherInit(otherInit);
+        }
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), result);
+    }
+
+    @Override
+    public AjaxResult forwardAdd(ForwardAddParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        Market market = iMarketMapper.selectOne(new QueryWrapper<Market>().eq("marketid", param.getMarketid()));
+        Goods good = iGoodsMapper.selectOne(new QueryWrapper<Goods>().eq("goodsid", param.getGoodsid()));
+        //定金转让市场(49)只允许添加商品发行方的远期订单
+        if (market.getTrademode().equals(SysEnums.TradeMode.DJZR.getCode())) {
+            if (!Objects.equals(param.getUserid(), good.getProvideruserid())) {
+                Object[] objects = {good.getProvideruserid()};
+                return AjaxResult.error(Constants.Error_Code_Design, MessageType.INVESTOR_ERROR_CODE_008.getCode(), objects, request.getHeader("Accept-Language"));
+            }
+        }
+
+        Long applyid = SerialNumberUtils.getSerialNumber(SerialNumberUtils.prefix_capacity);
+
+        Marketrun mr = iMarketrunMapper.selectOne(new QueryWrapper<Marketrun>().eq("marketid",0L));
+
+        CptradePositionapply pa = new CptradePositionapply();
+        BeanUtils.copyProperties(param, pa);
+        pa.setApplyid(applyid);
+        pa.setApplystatus(1);
+        pa.setApplytime(new Date());
+        pa.setCreatorid(systemmanager.getAutoid());
+        pa.setCreatetime(new Date());
+        if (mr != null) {
+            pa.setTradedate(mr.getTradedate());
+        }
+        iCptradePositionapplyMapper.insert(pa);
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
+    }
+
+    @Override
+    public AjaxResult<ForwardCancelApplyInit> cancelApplyAddInit(Long accountid, HttpServletRequest request) {
+        List<ForwardCancelApplyInit> init = iCptradePositionapplyMapper.cancelApplyAddInit(accountid);
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"),init);
+    }
+
+    @Override
+    public AjaxResult cancelApplyAdd(ForwardCancelAddParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        Marketrun mr = iMarketrunMapper.selectOne(new QueryWrapper<Marketrun>().eq("marketid",0L));
+        CptradePositioncancel pa = new CptradePositioncancel();
+        BeanUtils.copyProperties(param, pa);
+        pa.setApplystatus(1);
+        pa.setApplytime(new Date());
+        pa.setCreatorid(systemmanager.getAutoid());
+        pa.setCreatetime(new Date());
+        if(mr != null){
+            pa.setTradedate(mr.getTradedate());
+        }
+        iCptradePositioncancelMapper.insert(pa);
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
+    }
+}

+ 510 - 0
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/OrderQueryServiceImpl.java

@@ -0,0 +1,510 @@
+package com.muchinfo.mtp3century.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+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.common.base.Strings;
+import com.muchinfo.mtp.proto.AkernelMI1;
+import com.muchinfo.mtp.proto.Common;
+import com.muchinfo.mtp.proto.TkernelMI2;
+import com.muchinfo.mtp3century.service.ICommonService;
+import com.muchinfo.mtp3century.service.IOrderQueryService;
+import com.muchinfo.mtp3common.enumtype.Constants;
+import com.muchinfo.mtp3common.enumtype.FunCodeConstants;
+import com.muchinfo.mtp3common.enumtype.MessageType;
+import com.muchinfo.mtp3common.enumtype.SysConstants;
+import com.muchinfo.mtp3common.utils.DateTimeUtils;
+import com.muchinfo.mtp3common.utils.ExportUtil;
+import com.muchinfo.mtp3common.utils.SerialNumberUtils;
+import com.muchinfo.mtp3common.vo.*;
+import com.muchinfo.mtp3interface.mapper.ISystemmanagerMapper;
+import com.muchinfo.mtp3interface.mapper.ITradeHolderdetailexMapper;
+import com.muchinfo.mtp3pojos.entity.Systemmanager;
+import com.muchinfo.mtp3pojos.vo.HolderDetailExRedisVo;
+import com.muchinfo.mtp3pojos.vo.ProtoErrorCodes;
+import com.muchinfo.mtp3pojos.vo.RealtimeQuoteVo;
+import com.muchinfo.mtp3pojos.vo.query.order.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.core.MessageProperties;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class OrderQueryServiceImpl implements IOrderQueryService {
+
+    private final Logger log = LoggerFactory.getLogger(this.getClass());
+
+    @Resource
+    private ISystemmanagerMapper iSystemmanagerMapper;
+    @Resource
+    private ICommonService iCommonService;
+    @Resource
+    private ITradeHolderdetailexMapper iTradeHolderdetailexMapper;
+    @Resource
+    private RabbitTemplate rabbitTemplate;
+
+    @Override
+    public PageResult<OrderQueryResult> query(OrderQueryParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        if (systemmanager.getReletype() != 1) {
+            //经纪会员查询自己下属客户的订单
+            param.setAreauserid(systemmanager.getAreauserid());
+        }
+        PageResult<OrderQueryResult> pageResult = new PageResult<>();
+        IPage<OrderQueryResult> page = new Page<>(param.getPageNum(), param.getPageSize());
+        IPage<OrderQueryResult> resultIPage = iTradeHolderdetailexMapper.query(page, param);
+
+        List<HolderDetailExRedisVo> redisData = iCommonService.getHolderDetailExFromRedis(new HolderDetailExRedisVo(), 0);
+
+        resultIPage.getRecords().forEach(a -> {
+            // 查询Redis数据,获取定金率等数据, flag=0, 忽略DepositRate(定金率\风险率)条件
+            if (CollectionUtils.isNotEmpty(redisData)) {
+                for (HolderDetailExRedisVo vo : redisData) {
+                    if (vo != null && vo.getTradeid() != null && vo.getTradeid().toString().equals(a.getTradeid())) {
+                        a.setDepositratedisplay(new BigDecimal(vo.getDepositratedisplay()));
+                    }
+                }
+            }
+        });
+
+        pageResult.setCode(Constants.Success_Code_Design);
+        pageResult.setMessage(AjaxResult.dealMsg(MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language")));
+        pageResult.setPages(resultIPage.getPages());
+        pageResult.setCurrent(resultIPage.getCurrent());
+        pageResult.setTotal(resultIPage.getTotal());
+        pageResult.setPageSize(resultIPage.getSize());
+        pageResult.setData(resultIPage.getRecords());
+        return pageResult;
+    }
+
+    @Override
+    public AjaxResult<OrderQueryResult> queryDetail(OrderQueryParam param, HttpServletRequest request) {
+        List<OrderQueryResult> result = iTradeHolderdetailexMapper.query(param);
+        List<HolderDetailExRedisVo> redisData = iCommonService.getHolderDetailExFromRedis(new HolderDetailExRedisVo(), 0);
+        // 查询Redis数据,获取定金率等数据, flag=0, 忽略DepositRate(定金率\风险率)条件
+        if (CollectionUtils.isNotEmpty(redisData)) {
+            for (HolderDetailExRedisVo vo : redisData) {
+                if (vo != null && vo.getTradeid() != null && vo.getTradeid().toString().equals(result.get(0).getTradeid())) {
+                    result.get(0).setDepositratedisplay(new BigDecimal(vo.getDepositratedisplay()));
+                }
+            }
+        }
+
+        Integer buyOrSell = result.get(0).getBuyorsell();
+        String goodsCode = result.get(0).getGoodscode();
+        Integer decimalPlace = result.get(0).getDecimalplace();
+        BigDecimal agreeUnit = result.get(0).getAgreeunit();
+        Integer holderQty = result.get(0).getHolderqty();
+        BigDecimal holderAmount = result.get(0).getHolderamount();
+        // 获取时间行情
+        RealtimeQuoteVo quoteVo = iCommonService.getRealtimeQuote(goodsCode, decimalPlace);
+        if (quoteVo != null) {
+            BigDecimal closePrice;
+            if (buyOrSell == 0) {
+                // 买持仓
+                closePrice = new BigDecimal(quoteVo.getBid().toString()).setScale(decimalPlace, RoundingMode.HALF_UP);
+            } else {
+                // 卖持仓
+                closePrice = new BigDecimal(quoteVo.getAsk().toString()).setScale(decimalPlace, RoundingMode.HALF_UP);
+            }
+            BigDecimal floatPL = iCommonService.calcFloaPL(goodsCode, agreeUnit, buyOrSell, holderQty, holderAmount);
+
+            result.get(0).setCloseprice(closePrice.toString());
+            result.get(0).setFloatpl(floatPL == null ? "-" : floatPL.toString());
+        } else {
+            result.get(0).setCloseprice("-");
+            result.get(0).setFloatpl("-");
+        }
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), result.get(0));
+    }
+
+    @Override
+    public AjaxResult export(OrderQueryParam param, HttpServletRequest request) {
+        try {
+            Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+            if (systemmanager.getReletype() != 1) {
+                //经纪会员查询自己下属客户的订单
+                param.setAreauserid(systemmanager.getAreauserid());
+            }
+            String fileName = "订单查询_" + DateTimeUtils.getDateTime("yyyyMMdd");
+            List<OrderQueryResult> resultIPage = iTradeHolderdetailexMapper.query(param);
+            if (CollectionUtils.isEmpty(resultIPage)) {
+                return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_006.getCode(), request.getHeader("Accept-Language"));
+            }
+            List<HolderDetailExRedisVo> redisData = iCommonService.getHolderDetailExFromRedis(new HolderDetailExRedisVo(), 0);
+            resultIPage.forEach(a -> {
+                // 查询Redis数据,获取定金率等数据, flag=0, 忽略DepositRate(定金率\风险率)条件
+                if (CollectionUtils.isNotEmpty(redisData)) {
+                    for (HolderDetailExRedisVo vo : redisData) {
+                        if (vo != null && vo.getTradeid() != null && vo.getTradeid().toString().equals(a.getTradeid())) {
+                            a.setDepositratedisplay(new BigDecimal(vo.getDepositratedisplay()));
+                        }
+                    }
+                }
+            });
+            ExportResult exportResult = ExportUtil.write(fileName, OrderQueryResult.class, resultIPage);
+            return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), exportResult);
+        } catch (Exception e) {
+            log.error("订单查询导出失败,失败原因:" + e);
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_006.getCode(), request.getHeader("Accept-Language"));
+        }
+    }
+
+    @Override
+    public PageResult<TerOrderQueryResult> queryTerOrder(TerOrderQueryParam param, HttpServletRequest request) {
+        PageResult<TerOrderQueryResult> pageResult = new PageResult<>();
+        //校验
+        if (param.getIshis() == 1 && Strings.isNullOrEmpty(String.valueOf(param.getStartdate()))) {
+            pageResult.setCode(Constants.Error_Code_Design);
+            pageResult.setMessage(AjaxResult.dealMsg(MessageType.QUERY_ERROR_CODE_002.getCode(), request.getHeader("Accept-Language")));
+            return pageResult;
+        }
+        if (param.getIshis() == 1 && Strings.isNullOrEmpty(param.getEnddate())) {
+            pageResult.setCode(Constants.Error_Code_Design);
+            pageResult.setMessage(AjaxResult.dealMsg(MessageType.QUERY_ERROR_CODE_003.getCode(), request.getHeader("Accept-Language")));
+            return pageResult;
+        }
+        //排除交易模式
+        List<Integer> filterTrademodeList = new ArrayList<>();
+        filterTrademodeList.add(15);
+        filterTrademodeList.add(97);
+        filterTrademodeList.add(99);
+        param.setFilterTrademodeList(filterTrademodeList);
+
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        if (systemmanager.getReletype() != 1) {
+            // 会员所属机构为自己
+            param.setAreauserid(systemmanager.getAreauserid());
+        }
+        IPage<TerOrderQueryResult> page = new Page<>(param.getPageNum(), param.getPageSize());
+        IPage<TerOrderQueryResult> resultIPage = iTradeHolderdetailexMapper.queryYJCloselList(page, param);
+        pageResult.setCode(Constants.Success_Code_Design);
+        pageResult.setMessage(AjaxResult.dealMsg(MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language")));
+        pageResult.setPages(resultIPage.getPages());
+        pageResult.setCurrent(resultIPage.getCurrent());
+        pageResult.setTotal(resultIPage.getTotal());
+        pageResult.setPageSize(resultIPage.getSize());
+        pageResult.setData(resultIPage.getRecords());
+        return pageResult;
+    }
+
+    @Override
+    public AjaxResult terOrderExport(TerOrderQueryParam param, HttpServletRequest request) {
+        try {
+            Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+            if (systemmanager.getReletype() != 1) {
+                // 会员所属机构为自己
+                param.setAreauserid(systemmanager.getAreauserid());
+            }
+            //校验
+            if (param.getIshis() == 1 && StringUtils.isEmpty(String.valueOf(param.getStartdate()))) {
+                return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_002.getCode(), request.getHeader("Accept-Language"));
+            }
+            if (param.getIshis() == 1 && StringUtils.isEmpty(String.valueOf(param.getEnddate()))) {
+                return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_003.getCode(), request.getHeader("Accept-Language"));
+            }
+            //排除交易模式
+            List<Integer> filterTrademodeList = new ArrayList<>();
+            filterTrademodeList.add(15);
+            filterTrademodeList.add(97);
+            filterTrademodeList.add(99);
+            param.setFilterTrademodeList(filterTrademodeList);
+            String fileName = "终止单查询_" + DateTimeUtils.getDateTime("yyyyMMdd");
+            List<TerOrderQueryResult> resultIPage = iTradeHolderdetailexMapper.queryYJCloselList(param);
+            if (CollectionUtils.isEmpty(resultIPage)) {
+                return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_006.getCode(), request.getHeader("Accept-Language"));
+            }
+            ExportResult exportResult = ExportUtil.write(fileName, TerOrderQueryResult.class, resultIPage);
+            return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), exportResult);
+        } catch (Exception e) {
+            log.error("终止单查询导出失败,失败原因:" + e);
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_006.getCode(), request.getHeader("Accept-Language"));
+        }
+    }
+
+    @Override
+    public PageResult<DeliveryOrderResult> queryDeliveryOrder(DeliveryOrderParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        if (systemmanager.getReletype() != 1) {
+            // 会员所属机构为自己
+            param.setMatchuserid(systemmanager.getAreauserid());
+        }
+        PageResult<DeliveryOrderResult> pageResult = new PageResult<>();
+        IPage<DeliveryOrderResult> page = new Page<>(param.getPageNum(), param.getPageSize());
+        IPage<DeliveryOrderResult> resultIPage = iTradeHolderdetailexMapper.queryDeliveryOfflinePage(page, param);
+        pageResult.setCode(Constants.Success_Code_Design);
+        pageResult.setMessage(AjaxResult.dealMsg(MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language")));
+        pageResult.setPages(resultIPage.getPages());
+        pageResult.setCurrent(resultIPage.getCurrent());
+        pageResult.setTotal(resultIPage.getTotal());
+        pageResult.setPageSize(resultIPage.getSize());
+        pageResult.setData(resultIPage.getRecords());
+        return pageResult;
+    }
+
+    @Override
+    public AjaxResult<DeliveryOrderResult> deliveryOrderDetail(DeliveryOrderParam param, HttpServletRequest request) {
+        List<DeliveryOrderResult> resultIPage = iTradeHolderdetailexMapper.queryDeliveryOfflinePage(param);
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), resultIPage.get(0));
+    }
+
+    @Override
+    public AjaxResult deliveryOrderExport(DeliveryOrderParam param, HttpServletRequest request) {
+        try {
+            Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+            if (systemmanager.getReletype() != 1) {
+                // 会员所属机构为自己
+                param.setMatchuserid(systemmanager.getAreauserid());
+            }
+            String fileName = "线下交收单_" + DateTimeUtils.getDateTime("yyyyMMdd");
+            List<DeliveryOrderResult> resultIPage = iTradeHolderdetailexMapper.queryDeliveryOfflinePage(param);
+            if (CollectionUtils.isEmpty(resultIPage)) {
+                return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_006.getCode(), request.getHeader("Accept-Language"));
+            }
+            ExportResult exportResult = ExportUtil.write(fileName, OrderQueryResult.class, resultIPage);
+            return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), exportResult);
+        } catch (Exception e) {
+            log.error("线下交收单导出失败,失败原因:" + e);
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_006.getCode(), request.getHeader("Accept-Language"));
+        }
+    }
+
+    @Override
+    public PageResult<OrderDateQueryResult> queryOrderDate(OrderDateQueryParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        if (systemmanager.getReletype() != 1) {
+            param.setAreauserid(systemmanager.getAreauserid());
+        }
+        PageResult<OrderDateQueryResult> pageResult = new PageResult<>();
+        IPage<OrderDateQueryResult> page = new Page<>(param.getPageNum(), param.getPageSize());
+        IPage<OrderDateQueryResult> resultIPage = iTradeHolderdetailexMapper.queryOrderDate(page, param);
+        pageResult.setCode(Constants.Success_Code_Design);
+        pageResult.setMessage(AjaxResult.dealMsg(MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language")));
+        pageResult.setPages(resultIPage.getPages());
+        pageResult.setCurrent(resultIPage.getCurrent());
+        pageResult.setTotal(resultIPage.getTotal());
+        pageResult.setPageSize(resultIPage.getSize());
+        pageResult.setData(resultIPage.getRecords());
+        return pageResult;
+    }
+
+    @Override
+    public AjaxResult orderDateExport(OrderDateQueryParam param, HttpServletRequest request) {
+        try {
+            Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+            if (systemmanager.getReletype() != 1) {
+                param.setAreauserid(systemmanager.getAreauserid());
+            }
+            String fileName = "订单日报表_" + DateTimeUtils.getDateTime("yyyyMMdd");
+            List<OrderDateQueryResult> resultIPage = iTradeHolderdetailexMapper.queryOrderDate(param);
+            if (CollectionUtils.isEmpty(resultIPage)) {
+                return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_006.getCode(), request.getHeader("Accept-Language"));
+            }
+            ExportResult exportResult = ExportUtil.write(fileName, OrderDateQueryResult.class, resultIPage);
+            return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), exportResult);
+        } catch (Exception e) {
+            log.error("线下交收单导出失败,失败原因:" + e);
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_006.getCode(), request.getHeader("Accept-Language"));
+        }
+    }
+
+    @Override
+    public PageResult<ForcedOrderResult> queryForcedOrder(ForcedOrderParam param, HttpServletRequest request) {
+        PageResult<ForcedOrderResult> pageResult = new PageResult<>();
+        if (param.getIshis() == 1) {
+            // 历史查询
+            if (Strings.isNullOrEmpty(param.getStartdate())) {
+                pageResult.setCode(Constants.Error_Code_Design);
+                pageResult.setMessage(AjaxResult.dealMsg(MessageType.QUERY_ERROR_CODE_002.getCode(), request.getHeader("Accept-Language")));
+                return pageResult;
+            }
+            if (Strings.isNullOrEmpty(param.getEnddate())) {
+                pageResult.setCode(Constants.Error_Code_Design);
+                pageResult.setMessage(AjaxResult.dealMsg(MessageType.QUERY_ERROR_CODE_003.getCode(), request.getHeader("Accept-Language")));
+                return pageResult;
+            }
+        }
+        IPage<ForcedOrderResult> page = new Page<>(param.getPageNum(), param.getPageSize());
+        IPage<ForcedOrderResult> resultIPage = iTradeHolderdetailexMapper.queryForcedOrder(page, param);
+        pageResult.setCode(Constants.Success_Code_Design);
+        pageResult.setMessage(AjaxResult.dealMsg(MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language")));
+        pageResult.setPages(resultIPage.getPages());
+        pageResult.setCurrent(resultIPage.getCurrent());
+        pageResult.setTotal(resultIPage.getTotal());
+        pageResult.setPageSize(resultIPage.getSize());
+        pageResult.setData(resultIPage.getRecords());
+        return pageResult;
+    }
+
+    @Override
+    public AjaxResult forcedOrderExport(ForcedOrderParam param, HttpServletRequest request) {
+        try {
+            String fileName = "强制终止单_" + DateTimeUtils.getDateTime("yyyyMMdd");
+            List<ForcedOrderResult> resultIPage = iTradeHolderdetailexMapper.queryForcedOrder(param);
+            if (CollectionUtils.isEmpty(resultIPage)) {
+                return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_006.getCode(), request.getHeader("Accept-Language"));
+            }
+            ExportResult exportResult = ExportUtil.write(fileName, ForcedOrderResult.class, resultIPage);
+            return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), exportResult);
+        } catch (Exception e) {
+            log.error("线下交收单导出失败,失败原因:" + e);
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_006.getCode(), request.getHeader("Accept-Language"));
+        }
+    }
+
+    @Override
+    public AjaxResult forcedOrderRecover(String closeid, HttpServletRequest request) {
+        ForcedOrderParam param = ForcedOrderParam.builder().closeid(closeid).build();
+        List<ForcedOrderResult> results = iTradeHolderdetailexMapper.queryForcedOrder(param);
+        for (ForcedOrderResult result : results) {
+            //调用52101 服务“斩仓恢复”接口
+            Long uuid = SerialNumberUtils.getNewSerialNumber(SerialNumberUtils.prefix_trade);
+            Calculator ca = new Calculator(uuid, FunCodeConstants.FuncCode_RiskCloseRecoverReq);
+            SerialNumberUtils.lockMap.put(uuid, ca);
+
+            TkernelMI2.RiskCloseRecoverReq.Builder builder = TkernelMI2.RiskCloseRecoverReq.newBuilder();
+            // Header
+            Common.MessageHead.Builder hd = Common.MessageHead.newBuilder();
+            hd.setUUID(String.valueOf(uuid));
+            hd.setFunCode(FunCodeConstants.FuncCode_RiskCloseRecoverReq);
+            hd.setMarketID(result.getMarketid().intValue());
+            hd.setUserID(result.getUserid().intValue());
+            hd.setAccountID(result.getAccountid());
+            builder.setHeader(hd);
+
+            // Body
+            builder.setUserID(result.getUserid().intValue());
+            builder.setAccountID(result.getAccountid());
+            builder.setTradeID(Long.parseLong(result.getTradeid()));
+            builder.setBuyOrSell(result.getBuyorsell());
+
+            byte[] body = ProtoHelper.getNTAS(builder.build().toByteArray(), FunCodeConstants.FuncCode_RiskCloseRecoverReq);
+            rabbitTemplate.send(SysConstants.TradeCpReq, new Message(body, new MessageProperties()));
+
+            synchronized (ca) {
+                try {
+                    ca.wait(6000);
+                    Object o = ca.obj;
+                    if (o != null) {
+                        TkernelMI2.RiskCloseRecoverRsp rsp_ = (TkernelMI2.RiskCloseRecoverRsp) o;
+                        if (rsp_.getRetCode() == 0) {
+                            return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM011.getCode(), request.getHeader("Accept-Language"));
+                        } else {
+                            return AjaxResult.error(Constants.Error_Code_Design, ProtoErrorCodes.resultMsg(rsp_.getRetCode()), "", null);
+                        }
+                    } else {
+                        return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM006.getCode(), request.getHeader("Accept-Language"));
+                    }
+                } catch (InterruptedException e) {
+                    e.printStackTrace();
+                } finally {
+                    SerialNumberUtils.lockMap.remove(uuid);
+                }
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public AjaxResult<MonitorddjkCountResult> monitorddjkCount(MonitorddjkParam param, HttpServletRequest request) {
+        if (param.getRisk() == null) {
+            param.setRisk(new BigDecimal("50.0"));
+        }
+
+        MonitorddjkCountResult result = new MonitorddjkCountResult();
+        HolderDetailExRedisVo build = HolderDetailExRedisVo.builder()
+                .risk(param.getRisk())
+                .buyorsell(param.getBuyorsell())
+                .userfullname(param.getUserfullname())
+                .goodsfullname(param.getGoodsfullname())
+                .parentusername(param.getParentusername())
+                .build();
+        //销售总数量
+        double sellCount = 0.0;
+        //回购总数量
+        double buyBackCount = 0.0;
+        //持仓总金额
+        BigDecimal totalAmount = BigDecimal.valueOf(0);
+        //持仓均价
+        String avgHolderPrice = "0";
+        //总浮动盈亏
+        BigDecimal totalFloatPL = BigDecimal.valueOf(0);
+        List<HolderDetailExRedisVo> redisData = iCommonService.getHolderDetailExFromRedis(build, 2);
+
+        for (HolderDetailExRedisVo vo : redisData) {
+            if (vo.getBuyorsell().equals(0)) {
+                buyBackCount = (vo.getHolderqty() * vo.getAgreeunit()) + buyBackCount;
+            } else {
+                sellCount = (vo.getHolderqty() * vo.getAgreeunit()) + sellCount;
+            }
+            totalAmount = totalAmount.add(vo.getHolderamount());
+            totalFloatPL = totalFloatPL.add(vo.getFloatpl());
+        }
+
+        //设置销售、回购总数量
+        result.setSellCount(sellCount);
+        result.setBuyBackCount(buyBackCount);
+        result.setNetcurpositionqty(buyBackCount - sellCount);
+        double totalCount = sellCount + buyBackCount;
+        avgHolderPrice = totalCount == 0.0 ? "-" : totalAmount.divide(BigDecimal.valueOf(sellCount + buyBackCount), 2, RoundingMode.HALF_UP).toString();
+        result.setAvgholderprice(avgHolderPrice);
+        result.setFloatpl(totalFloatPL);
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), result);
+    }
+
+    @Override
+    public PageResult<HolderDetailExRedisVo> monitorddjk(MonitorddjkParam param, HttpServletRequest request) {
+        HolderDetailExRedisVo build = HolderDetailExRedisVo.builder()
+                .risk(param.getRisk())
+                .buyorsell(param.getBuyorsell())
+                .userfullname(param.getUserfullname())
+                .goodsfullname(param.getGoodsfullname())
+                .parentusername(param.getParentusername())
+                .build();
+        // flag=1:YJ(按定金率,值小风险大  flag=2:交易中心(按风险率,值大风险大)
+        List<HolderDetailExRedisVo> resultList = iCommonService.getHolderDetailExFromRedis(build, 2);
+        // 排序
+        List<HolderDetailExRedisVo> newResult;
+        PageResult<HolderDetailExRedisVo> pageResult = new PageResult<>();
+        if (CollectionUtils.isNotEmpty(resultList)) {
+            newResult = resultList.stream()
+                    .sorted(Comparator.comparing(HolderDetailExRedisVo::getDepositrate).reversed())
+                    .collect(Collectors.toList());
+
+            // 本页数据汇总
+            List<HolderDetailExRedisVo> pageList = new ArrayList<>();
+
+            int index = 0;
+            int startIndex = (param.getPageNum() - 1) * param.getPageSize();
+            int endIndex = param.getPageNum() * param.getPageSize();
+            for (HolderDetailExRedisVo p : newResult) {
+                if (index >= startIndex && index < endIndex) {
+                    pageList.add(p);
+                }
+                index++;
+            }
+            pageResult.setData(pageList);
+        }
+        //设置分页列表
+        pageResult.setCode(Constants.Success_Code_Design);
+        pageResult.setMessage(AjaxResult.dealMsg(MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language")));
+        pageResult.setCurrent(Long.valueOf(param.getPageNum()));
+        pageResult.setTotal((long) resultList.size());
+        pageResult.setPageSize(Long.valueOf(param.getPageSize()));
+        return pageResult;
+    }
+
+}

+ 1 - 1
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/IOrganServiceImpl.java → mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/OrganServiceImpl.java

@@ -44,7 +44,7 @@ import javax.servlet.http.HttpServletRequest;
 import java.util.*;
 
 @Service
-public class IOrganServiceImpl implements IOrganService {
+public class OrganServiceImpl implements IOrganService {
     private final Logger log = LoggerFactory.getLogger(this.getClass());
     @Resource
     private ISystemmanagerMapper iSystemmanagerMapper;

+ 417 - 0
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/PerformanceServiceImpl.java

@@ -0,0 +1,417 @@
+package com.muchinfo.mtp3century.service.impl;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.muchinfo.mtp.proto.Common;
+import com.muchinfo.mtp.proto.PerformanceMI1;
+import com.muchinfo.mtp3century.service.ICommonService;
+import com.muchinfo.mtp3century.service.IPerformanceService;
+import com.muchinfo.mtp3common.enumtype.Constants;
+import com.muchinfo.mtp3common.enumtype.FunCodeConstants;
+import com.muchinfo.mtp3common.enumtype.MessageType;
+import com.muchinfo.mtp3common.enumtype.SysConstants;
+import com.muchinfo.mtp3common.utils.SerialNumberUtils;
+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.*;
+import com.muchinfo.mtp3pojos.entity.*;
+import com.muchinfo.mtp3pojos.vo.ProtoErrorCodes;
+import com.muchinfo.mtp3pojos.vo.performance.*;
+import com.muchinfo.mtp3pojos.vo.query.deliveryorder.SettlementDealDetailParam;
+import com.muchinfo.mtp3pojos.vo.query.deliveryorder.SettlementDealDetailResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.core.MessageProperties;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+@Service
+public class PerformanceServiceImpl implements IPerformanceService {
+
+    private final Logger log = LoggerFactory.getLogger(this.getClass());
+    @Resource
+    private ISystemmanagerMapper iSystemmanagerMapper;
+    @Resource
+    private ICommonService iCommonService;
+    @Resource
+    private IPerformanceplanMapper iPerformanceplanMapper;
+    @Resource
+    private IPerformancebreachMapper iPerformancebreachMapper;
+    @Resource
+    private IHisPerformancebreachMapper iHisPerformancebreachMapper;
+    @Resource
+    private IUseraccountMapper iUseraccountMapper;
+    @Resource
+    private IPerformancestepMapper iPerformancestepMapper;
+    @Resource
+    private IPerformancesteptypeMapper iPerformancesteptypeMapper;
+    @Resource
+    private ITradeOrderdetailMapper iTradeOrderdetailMapper;
+    @Resource
+    private ITradeExercisedetailMapper iTradeExercisedetailMapper;
+    @Resource
+    private IHisTradeExercisedetailMapper iHisTradeExercisedetailMapper;
+    @Resource
+    private IGoodsMapper iGoodsMapper;
+    @Resource
+    private IPerformancebreachapplyMapper iPerformancebreachapplyMapper;
+    @Resource
+    private RabbitTemplate rabbitTemplate;
+
+    @Override
+    public PageResult<PayPerformanceResult> query(PayPerformanceParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        if (!SysConstants.SYS_TYPE_MANAGE.equals(systemmanager.getReletype())) {
+            if (("," + param.getOrgztypes() + ",").contains(",3,")) {
+                param.setParentuserid(systemmanager.getAreauserid());
+            }
+        }
+        param.setAccountid(systemmanager.getAreauserid());
+        PageResult<PayPerformanceResult> pageResult = new PageResult<>();
+        IPage<PayPerformanceResult> page = new Page<>(param.getPageNum(), param.getPageSize());
+        IPage<PayPerformanceResult> resultIPage;
+        if (param.getIshis() != null && param.getIshis() == 1) {
+            resultIPage = iPerformanceplanMapper.query(page, param);
+        } else {
+            resultIPage = iPerformanceplanMapper.queryHis(page, param);
+        }
+        for (PayPerformanceResult record : resultIPage.getRecords()) {
+            String sysparm = iCommonService.getSysparmById(SysConstants.SYSPARAM_CODE_DELAY);
+            if (StringUtils.isNotBlank(sysparm)) {
+                record.setDelayapply(sysparm);
+            } else {
+                record.setDelayapply("1");
+            }
+            record.setAccountid(systemmanager.getAreauserid());
+        }
+        pageResult.setCode(Constants.Success_Code_Design);
+        pageResult.setMessage(AjaxResult.dealMsg(MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language")));
+        pageResult.setPages(resultIPage.getPages());
+        pageResult.setCurrent(resultIPage.getCurrent());
+        pageResult.setTotal(resultIPage.getTotal());
+        pageResult.setPageSize(resultIPage.getSize());
+        pageResult.setData(resultIPage.getRecords());
+        return pageResult;
+    }
+
+    @Override
+    public AjaxResult<PayPerformanceDetailResult> view(String planid, Integer sellorbuy, String histradedate, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+
+        PayPerformanceDetailResult result = new PayPerformanceDetailResult();
+        PayPerformancePlanResult plan;
+        if (StringUtils.isEmpty(histradedate)) {
+            plan = iPerformanceplanMapper.queryPerformancePlanDetail(planid);
+            //违约信息
+            result.setPerformancebreach(iPerformancebreachMapper.selectOne(new QueryWrapper<Performancebreach>()
+                    .eq("planid", planid)));
+        } else {
+            plan = iPerformanceplanMapper.getHisPerformancePlanDetail(planid, histradedate);
+            //违约信息
+            result.setHisPerformancebreach(iHisPerformancebreachMapper.selectList(new QueryWrapper<HisPerformancebreach>()
+                    .eq("planid", planid)
+                    .eq("isvaliddata", 1)
+                    .eq("histradedate", histradedate)).get(0));
+        }
+        //履约延期
+        result.setPerformanceDelayResult(iPerformanceplanMapper.queryPerformanceDelayList(planid));
+
+        Long accountid = null;
+        if (plan != null) {
+            plan.setBuyAccountName(iUseraccountMapper.selectUserName(plan.getBuyAccountId()));
+            plan.setSellAccountName(iUseraccountMapper.selectUserName(plan.getSellAccountId()));
+            plan.setWrtransferusername(iUseraccountMapper.selectOrganName(plan.getWrTransferUserId()));
+            plan.setPerformancesteps(iPerformancestepMapper.selectList(new QueryWrapper<Performancestep>().eq("planid", planid).orderByAsc("stepindex")));
+
+            if (StringUtils.isNotBlank(plan.getBuyerInfo())) {
+                String buyerInfo = plan.getBuyerInfo();
+                try {
+                    buyerInfo = buyerInfo.replaceAll("&quot;", "\"");
+                    JSONObject json = JSONObject.parseObject(buyerInfo);
+                    String contactinfo = json.getString("ContactInfo");
+                    String receiptaccount = json.getString("ReceiptInfo");
+                    String address = json.getString("ReceiveInfo");
+                    buyerInfo = "联络信息:" + contactinfo + "<br/>" + "收货地址:" + address + "<br/>" + "发票信息:" + receiptaccount;
+                } catch (Exception e) {
+                    log.info("买方信息转换json失败,失败原因:" + e.getMessage());
+                }
+                plan.setBuyerInfo(buyerInfo);
+            }
+            if (StringUtils.isNotBlank(plan.getSellerInfo())) {
+                String sellerInfo = plan.getSellerInfo();
+                try {
+                    sellerInfo = sellerInfo.replaceAll("&quot;", "\"");
+                    JSONObject json = JSONObject.parseObject(sellerInfo);
+                    String contactinfo = json.getString("ContactInfo");
+                    sellerInfo = "联络信息:" + contactinfo;
+                } catch (Exception e) {
+                    log.info("卖方信息转换json失败,失败原因:" + e.getMessage());
+                }
+                plan.setSellerInfo(sellerInfo);
+            }
+            if (sellorbuy != null) {
+                if (sellorbuy == 1) {
+                    accountid = plan.getBuyAccountId();
+                } else if (sellorbuy == 2) {
+                    accountid = plan.getSellAccountId();
+                }
+                if (accountid != null && !iCommonService.checkTaAccountReport(systemmanager, accountid)) {
+                    return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM003.getCode(), request.getHeader("Accept-Language"));
+                }
+            }
+            result.setPayPerformancePlanResult(plan);
+        }
+
+        List<Performancesteptype> list = iPerformancesteptypeMapper.selectList(new QueryWrapper<>());
+        Map<Integer, String> map = new HashMap<Integer, String>();
+        list.forEach(p -> {
+            map.put(p.getSteptypeid(), p.getSteptypename());
+        });
+        result.setSteptype(map);
+
+        Performancesteptype pst10 = iPerformancesteptypeMapper.selectOne(new QueryWrapper<Performancesteptype>().eq("steptypeid", 10));
+        if (Objects.nonNull(pst10))
+            result.setIsHasStep10(1);
+        else
+            result.setIsHasStep10(0);
+
+        Performancesteptype pst12 = iPerformancesteptypeMapper.selectOne(new QueryWrapper<Performancesteptype>().eq("steptypeid", 12));
+        if (Objects.nonNull(pst12))
+            result.setIsHasStep10(1);
+        else
+            result.setIsHasStep10(0);
+
+        //履约商品
+        int buyorsell = 0; //买
+        PayPerformanceRelatedInfoResult relatedInfoResult = new PayPerformanceRelatedInfoResult();
+        if (plan != null && plan.getExecuteside() != null && plan.getExecuteside() == 2)
+            buyorsell = 1; //卖
+        if (plan != null && plan.getPerformancetype() == 1) {
+            SettlementDealDetailParam dealDetailParam = new SettlementDealDetailParam();
+            SettlementDealDetailResult detailResult;
+            //交割
+            if (StringUtils.isEmpty(histradedate)) {
+                //当前
+                dealDetailParam.setBuyorsell(sellorbuy);
+                dealDetailParam.setDeliveryid(plan.getRelatedOrderId());
+                detailResult = iTradeOrderdetailMapper.settlementDealDetail(dealDetailParam);
+            } else {
+                //历史
+                dealDetailParam.setBuyorsell(sellorbuy);
+                dealDetailParam.setDeliveryid(plan.getRelatedOrderId());
+                dealDetailParam.setHistradedate(histradedate);
+                detailResult = iTradeOrderdetailMapper.settlementDealDetail(dealDetailParam);
+            }
+            relatedInfoResult.setWrstandardcode(detailResult.getWrstandardcode());
+            relatedInfoResult.setWarehousename(detailResult.getWarehousename());
+            relatedInfoResult.setWrstandardname(detailResult.getWrstandardname());
+            relatedInfoResult.setDeliverytotalamount(detailResult.getDeliverytotalamount());
+            result.setRelatedInfoResult(relatedInfoResult);
+        } else if (plan != null && (plan.getPerformancetype() == 2 || plan.getPerformancetype() == 3)) {
+
+        } else if (plan != null && plan.getPerformancetype() == 5) {
+            //挂牌期权
+            if (StringUtils.isEmpty(histradedate)) {
+                TradeExercisedetail tradeExercisedetail = iTradeExercisedetailMapper.selectOne(new QueryWrapper<TradeExercisedetail>().eq("tradeid", plan.getRelatedOrderId()));
+                Goods goods = iGoodsMapper.selectOne(new QueryWrapper<Goods>().eq("goodsid", tradeExercisedetail.getGoodsid()));
+                relatedInfoResult.setGoodsname(goods.getGoodsname());
+                relatedInfoResult.setBuyerout(tradeExercisedetail.getBuyerout());
+            } else {
+                HisTradeExercisedetail tradeExercisedetail = iHisTradeExercisedetailMapper.selectOne(new QueryWrapper<HisTradeExercisedetail>()
+                        .eq("tradeid", plan.getRelatedOrderId())
+                        .eq("histradedate", histradedate));
+                Goods goods = iGoodsMapper.selectOne(new QueryWrapper<Goods>().eq("goodsid", tradeExercisedetail.getGoodsid()));
+                relatedInfoResult.setGoodsname(goods.getGoodsname());
+                relatedInfoResult.setBuyerout(tradeExercisedetail.getBuyerout());
+            }
+            result.setRelatedInfoResult(relatedInfoResult);
+        } else if (plan != null) {
+            PayPerformanceReportResult reportResult;
+            if (StringUtils.isEmpty(histradedate)) {
+                reportResult = iPerformanceplanMapper.queryReportInfo(plan.getRelatedOrderId(), buyorsell);
+            } else {
+                reportResult = iPerformanceplanMapper.queryHisReportInfo(plan.getRelatedOrderId(), buyorsell, histradedate);
+            }
+            relatedInfoResult.setGoodsname(reportResult.getGoodsName());
+            relatedInfoResult.setWrFactorTypeName(reportResult.getWrfactorTypeName());
+            relatedInfoResult.setTradeAmount(reportResult.getTradeAmount());
+            result.setRelatedInfoResult(relatedInfoResult);
+        }
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), result);
+    }
+
+    @Override
+    public AjaxResult doBreach(PayPerformanceBreachParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+
+        Performanceplan plan = iPerformanceplanMapper.selectOne(new QueryWrapper<Performanceplan>().eq("performanceplanid", param.getPerformanceplanid()));
+        Long accountid = null;
+        if (param.getSellorbuy() != null) {
+            if (param.getSellorbuy() == 1) {
+                accountid = plan.getBuyaccountid();
+            } else if (param.getSellorbuy() == 2) {
+                accountid = plan.getSellaccountid();
+            }
+            if (accountid != null && !iCommonService.checkTaaccountReport(systemmanager, accountid)) {
+                return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM003.getCode(), request.getHeader("Accept-Language"));
+            }
+        }
+        Performancebreachapply apply = iPerformancebreachapplyMapper.selectOne(new QueryWrapper<Performancebreachapply>()
+                .eq("planid", param.getPerformanceplanid())
+                .eq("breachstatus", 1));
+        if (Objects.nonNull(apply)) {
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM015.getCode(), request.getHeader("Accept-Language"));
+        }
+
+        PerformanceMI1.PerformanceContractedApplyReq.Builder builder = PerformanceMI1.PerformanceContractedApplyReq.newBuilder();
+        Common.MessageHead.Builder hd = Common.MessageHead.newBuilder();
+        Long uuid = SerialNumberUtils.getNewSerialNumber(SerialNumberUtils.prefix_Performance);
+        hd.setUUID(uuid.toString());
+        hd.setFunCode(FunCodeConstants.FunCode_Trade_PerformanceContractedApplyReq);
+        hd.setClientTime(System.currentTimeMillis());
+        builder.setHeader(hd);
+        builder.setBreachType(param.getSellorbuy() == 1 ? 2 : 1);
+        builder.setPerformancePlanID(param.getPerformanceplanid());
+        builder.setApplyRemark(StringUtils.isBlank(param.getRemark()) ? "" : param.getRemark());
+        builder.setAttachment(param.getAttachment());
+        builder.setApplicant(systemmanager.getAreauserid());
+        return sendPerformanceMsg(builder.build().toByteArray(),
+                SysConstants.RabbitPerformanceNtfKey,
+                FunCodeConstants.FunCode_Trade_PerformanceContractedApplyReq, uuid, request);
+    }
+
+    @Override
+    public AjaxResult doDelay(PayPerformanceDelayParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+
+        Performanceplan plan = iPerformanceplanMapper.selectOne(new QueryWrapper<Performanceplan>().eq("performanceplanid", param.getPerformanceplanid()));
+        Long accountid = null;
+        if (param.getSellorbuy() != null) {
+            if (param.getSellorbuy() == 1) {
+                accountid = plan.getBuyaccountid();
+            } else if (param.getSellorbuy() == 2) {
+                accountid = plan.getSellaccountid();
+            }
+            if (accountid != null && !iCommonService.checkTaaccountReport(systemmanager, accountid)) {
+                return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM003.getCode(), request.getHeader("Accept-Language"));
+            }
+        }
+        if (plan.getCurstepid().compareTo(param.getPerformanceplanid()) != 0) {
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM016.getCode(), request.getHeader("Accept-Language"));
+        }
+
+        PerformanceMI1.PerformanceDelayApplyReq.Builder builder = PerformanceMI1.PerformanceDelayApplyReq.newBuilder();
+        Common.MessageHead.Builder hd = Common.MessageHead.newBuilder();
+        hd.setFunCode(FunCodeConstants.FunCode_Trade_PerformanceDelayApplyReq);
+        hd.setClientTime(System.currentTimeMillis());
+        Long uuid = SerialNumberUtils.getNewSerialNumber(SerialNumberUtils.prefix_Performance);
+        hd.setUUID(uuid.toString());
+        builder.setHeader(hd);
+        builder.setPerformancePlanStepID(param.getPerformancestepid());
+        builder.setDelaydays(param.getDelaydays());
+        builder.setApplyremark(StringUtils.isBlank(param.getRemark()) ? "" : param.getRemark());
+        builder.setApplicant(systemmanager.getAreauserid());
+        return sendPerformanceMsg(builder.build().toByteArray(),
+                SysConstants.RabbitPerformanceNtfKey,
+                FunCodeConstants.FunCode_Trade_PerformanceDelayApplyReq, uuid, request);
+    }
+
+    private AjaxResult sendPerformanceMsg(byte[] byteArray, String topic, Integer funcode, Long uuid, HttpServletRequest request) {
+        byte[] body = ProtoHelper.getNTAS(byteArray, funcode);
+        Calculator ca = new Calculator(uuid);
+        SerialNumberUtils.lockMap.put(uuid, ca);
+        rabbitTemplate.send(topic, new Message(body, new MessageProperties()));
+
+        synchronized (ca) {
+            try {
+                ca.wait(10000);
+                Object rsp = ca.obj;
+                if (rsp != null) {
+                    switch (funcode) {
+                        //履约确认
+                        case FunCodeConstants.FunCode_Trade_PerformanceManualConfirmReq: {
+                            PerformanceMI1.PerformanceManualConfirmRsp rsp_ = (PerformanceMI1.PerformanceManualConfirmRsp) rsp;
+                            if (rsp_.getRetCode() == 0) {
+                                return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM016.getCode(), request.getHeader("Accept-Language"));
+                            } else {
+                                return AjaxResult.error(Constants.Error_Code_Design, ProtoErrorCodes.resultMsg(rsp_.getRetCode()), "", null);
+                            }
+                        }
+                        //延期申请                                        FunCode_Trade_PerformanceDelayApplyReq
+                        case FunCodeConstants.FunCode_Trade_PerformanceDelayApplyReq: {
+                            PerformanceMI1.PerformanceDelayApplyRsp rsp_ = (PerformanceMI1.PerformanceDelayApplyRsp) rsp;
+                            if (rsp_.getRetCode() == 0) {
+                                return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM017.getCode(), request.getHeader("Accept-Language"));
+                            } else {
+                                return AjaxResult.error(Constants.Error_Code_Design, ProtoErrorCodes.resultMsg(rsp_.getRetCode()), "", null);
+                            }
+                        }
+                        //违约申请                                        FunCode_Trade_PerformanceContractedApplyReq
+                        case FunCodeConstants.FunCode_Trade_PerformanceContractedApplyReq: {
+                            PerformanceMI1.PerformanceContractedApplyRsp rsp_ = (PerformanceMI1.PerformanceContractedApplyRsp) rsp;
+                            if (rsp_.getRetCode() == 0) {
+                                return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM017.getCode(), request.getHeader("Accept-Language"));
+                            } else {
+                                return AjaxResult.error(Constants.Error_Code_Design, ProtoErrorCodes.resultMsg(rsp_.getRetCode()), "", null);
+                            }
+                        }
+                        //履约修改联络信息
+                        case FunCodeConstants.FunCode_Trade_PerformanceModifyContactReq: {
+                            PerformanceMI1.PerformanceModifyContactRsp rsp_ = (PerformanceMI1.PerformanceModifyContactRsp) rsp;
+                            if (rsp_.getRetCode() == 0) {
+                                return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM018.getCode(), request.getHeader("Accept-Language"));
+                            } else {
+                                return AjaxResult.error(Constants.Error_Code_Design, ProtoErrorCodes.resultMsg(rsp_.getRetCode()), "", null);
+                            }
+                        }
+                        // 履约执行合同
+                        case FunCodeConstants.FunCode_Trade_PerformanceExecuteContractReq: {
+                            PerformanceMI1.PerformanceExecuteContractRsp rsp_ = (PerformanceMI1.PerformanceExecuteContractRsp) rsp;
+                            if (rsp_.getRetCode() == 0) {
+                                return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM019.getCode(), request.getHeader("Accept-Language"));
+                            } else {
+                                return AjaxResult.error(Constants.Error_Code_Design, ProtoErrorCodes.resultMsg(rsp_.getRetCode()), "", null);
+                            }
+                        }
+                        // 履约激活
+                        case FunCodeConstants.FunCode_Trade_PerformanceActivateReq: {
+                            PerformanceMI1.PerformanceActivateRsp rsp_ = (PerformanceMI1.PerformanceActivateRsp) rsp;
+                            if (rsp_.getRetCode() == 0) {
+                                return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM019.getCode(), request.getHeader("Accept-Language"));
+                            } else {
+                                return AjaxResult.error(Constants.Error_Code_Design, ProtoErrorCodes.resultMsg(rsp_.getRetCode()), "", null);
+                            }
+                        }
+                        default:
+                            break;
+                    }
+                } else {
+                    if (funcode == FunCodeConstants.FunCode_Trade_PerformanceModifyContactReq) {
+                        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM018.getCode(), request.getHeader("Accept-Language"));
+                    } else {
+                        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM016.getCode(), request.getHeader("Accept-Language"));
+                    }
+                }
+            } catch (InterruptedException e) {
+                log.info("获取违约申请返回失败,失败原因:" + e.getMessage());
+            } finally {
+                SerialNumberUtils.lockMap.remove(uuid);
+            }
+        }
+
+        return null;
+    }
+}

+ 390 - 0
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/PresaleServiceImpl.java

@@ -0,0 +1,390 @@
+package com.muchinfo.mtp3century.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.muchinfo.mtp.proto.Common;
+import com.muchinfo.mtp.proto.SystemMI1;
+import com.muchinfo.mtp.proto.TkernelMI1;
+import com.muchinfo.mtp.proto.TkernelMI2;
+import com.muchinfo.mtp3century.service.ICommonService;
+import com.muchinfo.mtp3century.service.IPresaleService;
+import com.muchinfo.mtp3common.enumtype.Constants;
+import com.muchinfo.mtp3common.enumtype.FunCodeConstants;
+import com.muchinfo.mtp3common.enumtype.MessageType;
+import com.muchinfo.mtp3common.enumtype.SysConstants;
+import com.muchinfo.mtp3common.utils.SerialNumberUtils;
+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.*;
+import com.muchinfo.mtp3pojos.entity.*;
+import com.muchinfo.mtp3pojos.vo.ProtoErrorCodes;
+import com.muchinfo.mtp3pojos.vo.presale.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.core.MessageProperties;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+@Service
+public class PresaleServiceImpl implements IPresaleService {
+    private final Logger log = LoggerFactory.getLogger(this.getClass());
+    @Resource
+    private ISystemmanagerMapper iSystemmanagerMapper;
+    @Resource
+    private ICommonService iCommonService;
+    @Resource
+    private ICptradePresalegoodsexMapper iCptradePresalegoodsexMapper;
+    @Resource
+    private RabbitTemplate rabbitTemplate;
+    @Resource
+    private IMarketMapper iMarketMapper;
+    @Resource
+    private IMarketrunMapper iMarketrunMapper;
+    @Resource
+    private IWskhOpenaccountconfigMapper iWskhOpenaccountconfigMapper;
+
+    @Override
+    public PageResult<PresaleQueryResult> query(PresaleQueryParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        if (systemmanager.getReletype().intValue() != SysConstants.SYS_TYPE_MANAGE) {
+            param.setAreauserid(systemmanager.getAreauserid());
+        }
+        PageResult<PresaleQueryResult> pageResult = new PageResult<>();
+        IPage<PresaleQueryResult> page = new Page<>(param.getPageNum(), param.getPageSize());
+        IPage<PresaleQueryResult> resultIPage = iCptradePresalegoodsexMapper.query(page, param);
+        pageResult.setCode(Constants.Success_Code_Design);
+        pageResult.setMessage(AjaxResult.dealMsg(MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language")));
+        pageResult.setPages(resultIPage.getPages());
+        pageResult.setCurrent(resultIPage.getCurrent());
+        pageResult.setTotal(resultIPage.getTotal());
+        pageResult.setPageSize(resultIPage.getSize());
+        pageResult.setData(resultIPage.getRecords());
+        return pageResult;
+    }
+
+    @Override
+    public AjaxResult<PresaleQueryDetailResult> view(String applyid, HttpServletRequest request) {
+        PresaleQueryDetailResult result = iCptradePresalegoodsexMapper.view(applyid);
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), result);
+    }
+
+    @Override
+    public AjaxResult<PresalePresaleLotteryResult> viewPresaleLottery(Long goodsid, HttpServletRequest request) {
+        List<PresalePresaleLotteryResult> result = iCptradePresalegoodsexMapper.viewPresaleLottery(goodsid);
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), result);
+    }
+
+    @Override
+    public AjaxResult<PresaleFinishResult> viewfinsh(Long goodsid, HttpServletRequest request) {
+        List<PresaleFinishResult> result = iCptradePresalegoodsexMapper.viewfinsh(goodsid);
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), result);
+    }
+
+    @Override
+    public AjaxResult lottery(Long goodsid, Integer lotteryqty, HttpServletRequest request) {
+        CptradePresalegoodsex paramObj = iCptradePresalegoodsexMapper.selectOne(new QueryWrapper<CptradePresalegoodsex>().eq("goodsid", goodsid));
+
+        //调用51201 服务“预售摇号”接口
+        Long uuid = SerialNumberUtils.getNewSerialNumber(SerialNumberUtils.prefix_capacitytwo);
+        Calculator ca = new Calculator(uuid, FunCodeConstants.FunCode_Trade_OrderPresaleLotteryReq);
+        SerialNumberUtils.lockMap.put(uuid, ca);
+
+        TkernelMI1.OrderPresaleLotteryReq.Builder builder = TkernelMI1.OrderPresaleLotteryReq.newBuilder();
+
+        Common.MessageHead.Builder hd = Common.MessageHead.newBuilder();
+        hd.setUUID(String.valueOf(uuid));
+        hd.setFunCode(FunCodeConstants.FunCode_Trade_OrderPresaleLotteryReq);
+        hd.setMarketID(paramObj.getMarketid().intValue());
+        hd.setAccountID(paramObj.getAccountid());
+        hd.setUserID(paramObj.getUserid().intValue());
+        builder.setHeader(hd);
+        builder.setGoodsID(paramObj.getGoodsid().intValue());
+        builder.setLotteryQty(lotteryqty);
+        builder.setClientTicket(String.valueOf(uuid));
+
+        byte[] body = ProtoHelper.getNTAS(builder.build().toByteArray(),
+                FunCodeConstants.FunCode_Trade_OrderPresaleLotteryReq);
+
+        rabbitTemplate.send(SysConstants.TradeCpReq, new Message(body, new MessageProperties()));
+
+        synchronized (ca) {
+            try {
+                ca.wait(ca.getOutTime());
+                Object rsp = ca.obj;
+                if (rsp != null) {
+                    TkernelMI1.OrderPresaleLotteryRsp rsp_ = (TkernelMI1.OrderPresaleLotteryRsp) rsp;
+                    if (rsp_.getRetCode() == 0) {
+                        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM013.getCode(), request.getHeader("Accept-Language"));
+                    } else {
+                        return AjaxResult.error(Constants.Error_Code_Design, ProtoErrorCodes.resultMsg(rsp_.getRetCode()), "");
+                    }
+                } else {
+                    return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM006.getCode(), request.getHeader("Accept-Language"));
+                }
+            } catch (InterruptedException e) {
+                log.error("预售摇号失败,失败信息:" + e);
+            } finally {
+                SerialNumberUtils.lockMap.remove(uuid);
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public AjaxResult<PresaleQueryResult> complatesView(Long goodsid, HttpServletRequest request) {
+        PresaleQueryParam param = new PresaleQueryParam();
+        param.setGoodsid(goodsid);
+        List<PresaleQueryResult> resultIPage = iCptradePresalegoodsexMapper.query(param);
+
+        Integer qty = 0;
+        if (resultIPage.get(0).getLuckyqty() != null) {
+            qty = resultIPage.get(0).getPresaleqty() - resultIPage.get(0).getLuckyqty();
+        } else {
+            qty = resultIPage.get(0).getPresaleqty();
+        }
+        resultIPage.get(0).setQty(qty);
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), resultIPage.get(0));
+    }
+
+    @Override
+    public AjaxResult<PresaleFinishInitAddResult> getAccountIds(Long goodsid, HttpServletRequest request) {
+        PresaleInitResult result = new PresaleInitResult();
+        PresaleQueryParam param = new PresaleQueryParam();
+        param.setGoodsid(goodsid);
+        List<PresaleQueryResult> resultIPage = iCptradePresalegoodsexMapper.query(param);
+
+        List<PresaleFinishInitAddResult> listWRPresaleInfo = iCptradePresalegoodsexMapper.queryUserList(resultIPage.get(0).getUserid());
+        result.setResults(listWRPresaleInfo);
+        result.setPrice(resultIPage.get(0).getRefprice());
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), result);
+    }
+
+    @Override
+    public AjaxResult saveComplates(PresaleComplatesParam param, HttpServletRequest request) {
+        CptradePresalegoodsex paramObj = iCptradePresalegoodsexMapper.selectOne(new QueryWrapper<CptradePresalegoodsex>().eq("goodsid", param.getGoodsid()));
+
+        //调用51201 服务“预售完成”接口
+        Long uuid = SerialNumberUtils.getNewSerialNumber(SerialNumberUtils.prefix_capacitytwo);
+        Calculator ca = new Calculator(uuid, FunCodeConstants.FunCode_Trade_OrderPresaleFinishReq);
+        SerialNumberUtils.lockMap.put(uuid, ca);
+
+        TkernelMI1.OrderPresaleFinishReq.Builder builder = TkernelMI1.OrderPresaleFinishReq.newBuilder();
+        Common.MessageHead.Builder hd = Common.MessageHead.newBuilder();
+        hd.setUUID(String.valueOf(uuid));
+        hd.setFunCode(FunCodeConstants.FunCode_Trade_OrderPresaleFinishReq);
+        hd.setMarketID(paramObj.getMarketid().intValue());
+        hd.setAccountID(paramObj.getAccountid());
+        hd.setUserID(paramObj.getUserid().intValue());
+        builder.setHeader(hd);
+        builder.setGoodsID(paramObj.getGoodsid().intValue());
+        builder.setClientTicket(String.valueOf(uuid));
+
+        if (CollectionUtils.isNotEmpty(param.getResults())) {
+            for (PresaleFinishInitAddResult result : param.getResults()) {
+                if (result.getUserid() != null && result.getAccountid() != null && result.getPlaceqty() != null) {
+                    TkernelMI1.OrderPresalePlaceInfo.Builder child = TkernelMI1.OrderPresalePlaceInfo.newBuilder();
+                    child.setAccountId(result.getAccountid());
+                    child.setUserId(result.getUserid().intValue());
+                    child.setPlaceQty(result.getPlaceqty());
+                    builder.addPlaceInfos(child);
+                }
+
+            }
+        }
+
+        byte[] body = ProtoHelper.getNTAS(builder.build().toByteArray(),
+                FunCodeConstants.FunCode_Trade_OrderPresaleFinishReq);
+
+        rabbitTemplate.send(SysConstants.TradeCpReq, new Message(body, new MessageProperties()));
+
+        synchronized (ca) {
+            try {
+                ca.wait(ca.getOutTime());
+                Object rsp = ca.obj;
+                if (rsp != null) {
+                    TkernelMI2.OrderPresaleFinishRsp rsp_ = (TkernelMI2.OrderPresaleFinishRsp) rsp;
+                    if (rsp_.getRetCode() == 0) {
+                        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM014.getCode(), request.getHeader("Accept-Language"));
+                    } else {
+                        return AjaxResult.error(Constants.Error_Code_Design, ProtoErrorCodes.resultMsg(rsp_.getRetCode()), "");
+                    }
+                } else {
+                    return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM006.getCode(), request.getHeader("Accept-Language"));
+                }
+            } catch (InterruptedException e) {
+                log.error("预售完成失败,失败信息:" + e);
+            } finally {
+                SerialNumberUtils.lockMap.remove(uuid);
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public PageResult<PresaleApplyResult> queryApply(PresaleApplyParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        if (systemmanager.getReletype().intValue() != SysConstants.SYS_TYPE_MANAGE) {
+            param.setAreauserid(systemmanager.getAreauserid());
+        }
+        PageResult<PresaleApplyResult> pageResult = new PageResult<>();
+        IPage<PresaleApplyResult> page = new Page<>(param.getPageNum(), param.getPageSize());
+        IPage<PresaleApplyResult> resultIPage = iCptradePresalegoodsexMapper.queryApply(page, param);
+        pageResult.setCode(Constants.Success_Code_Design);
+        pageResult.setMessage(AjaxResult.dealMsg(MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language")));
+        pageResult.setPages(resultIPage.getPages());
+        pageResult.setCurrent(resultIPage.getCurrent());
+        pageResult.setTotal(resultIPage.getTotal());
+        pageResult.setPageSize(resultIPage.getSize());
+        pageResult.setData(resultIPage.getRecords());
+        return pageResult;
+    }
+
+    @Override
+    public AjaxResult<PresaleApplyResult> applyView(String applyid, HttpServletRequest request) {
+        PresaleApplyParam param = new PresaleApplyParam();
+        param.setApplyid(applyid);
+        List<PresaleApplyResult> resultIPage = iCptradePresalegoodsexMapper.queryApply(param);
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), resultIPage.get(0));
+    }
+
+    @Override
+    public AjaxResult save(PresaleApplyAddParam param, HttpServletRequest request) {
+
+        Long uuid = SerialNumberUtils.getNewSerialNumber(SerialNumberUtils.prefix_capacitytwo);
+        Calculator ca = new Calculator(uuid, FunCodeConstants.FunCode_Trade_CpPresaleReq);
+        SerialNumberUtils.lockMap.put(uuid, ca);
+
+        TkernelMI1.CpPresaleReq.Builder builder = TkernelMI1.CpPresaleReq.newBuilder();
+        Common.MessageHead.Builder hd = Common.MessageHead.newBuilder();
+        hd.setFunCode(FunCodeConstants.FunCode_Trade_CpPresaleReq);
+        hd.setUUID(String.valueOf(uuid));
+        hd.setClientTime(System.currentTimeMillis());
+        //header里使用二级商品的市场ID
+        hd.setMarketID(param.getRelatedmarketid().intValue());
+        builder.setHeader(hd);
+
+        builder.setAccountID(param.getAccountid());
+        builder.setUserID(param.getUserid().intValue());
+        builder.setRelatedGoodsID(param.getRelatedgoodsid().intValue());
+        builder.setStartTime(param.getStarttime());
+        builder.setEndTime(param.getEndtime());
+        builder.setPresaleMode(param.getPresalemode());
+        builder.setPresaleQty(param.getPresaleqty());
+        //一口价(全额)
+        if (param.getPresalemode() == 1) {
+            builder.setRefPrice(param.getRefprice().doubleValue());
+        }
+        //大宗竞拍(全额、定金)
+        if (param.getPresalemode() == 2) {
+            builder.setStartPrice(param.getStartprice().doubleValue());
+            builder.setFloorPrice(param.getFloorprice().doubleValue());
+            //goodsdetail字段作废
+            builder.setGoodsDetail("");
+            //缩略图
+            builder.setAttachmentUrl(param.getAttachmenturl());
+        }
+        //71:预售挂牌-海商
+        if (param.getPresalemode() == 3) {
+            builder.setRefPrice(param.getRefprice().doubleValue());
+        }
+        //48 定金预售(大宗)
+        if (param.getPresalemode() == 4) {
+            builder.setStartPrice(param.getStartprice().doubleValue());
+            builder.setFloorPrice(param.getFloorprice().doubleValue());
+        }
+        //51:定金预售(中签)
+        if (param.getPresalemode() == 5) {
+            builder.setRefPrice(param.getRefprice().doubleValue());
+            builder.setBaseQty(param.getBaseqty());
+            builder.setMaxBuyQty(param.getMaxbuyqty());
+        }
+        //48 定金预售(大宗) 51:定金预售(中签) 上传新字段AttachmentUrl、PictureUrls、BannerPicUrl、PresaleDepositAlgorithm、PresaleDepositValue
+        if (param.getPresalemode() == 4 || param.getPresalemode() == 5) {
+            //goodsdetail字段作废
+            builder.setGoodsDetail("");
+            //缩略图
+            builder.setAttachmentUrl(param.getAttachmenturl());
+            builder.setPictureUrls(param.getPictureurls());
+            builder.setBannerPicUrl(param.getBannerpicurl());
+            builder.setPresaleDepositAlgorithm(param.getPresaledepositalgorithm());
+            if (param.getPresaledepositvalue() != null) {
+                if (param.getPresaledepositalgorithm().equals(1)) {
+                    builder.setPresaleDepositValue(param.getPresaledepositvalue().divide(new BigDecimal(100)).doubleValue());
+                } else {
+                    builder.setPresaleDepositValue(param.getPresaledepositvalue().doubleValue());
+                }
+            }
+        }
+
+        builder.setClientTicket(String.valueOf(uuid));
+        //此处使用界面选择的市场ID
+        builder.setMarketID(param.getMarketid().intValue());
+
+        if (param.getApplyremark() != null) {
+            builder.setApplyRemark(param.getApplyremark());
+        }
+
+        byte[] body = ProtoHelper.getNTAS(builder.build().toByteArray(),
+                FunCodeConstants.FunCode_Trade_CpPresaleReq);
+
+        rabbitTemplate.send(SysConstants.TradeCpReq, new Message(body, new MessageProperties()));
+
+        synchronized (ca) {
+            try {
+                ca.wait(ca.getOutTime());
+                Object rsp = ca.obj;
+                if (rsp != null) {
+                    TkernelMI1.CpPresaleRsp rsp_ = (TkernelMI1.CpPresaleRsp) rsp;
+                    if (rsp_.getRetCode() == 0) {
+                        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM015.getCode(), request.getHeader("Accept-Language"));
+                    } else {
+                        return AjaxResult.error(Constants.Error_Code_Design, ProtoErrorCodes.resultMsg(rsp_.getRetCode()), "");
+                    }
+                } else {
+                    return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM006.getCode(), request.getHeader("Accept-Language"));
+                }
+            } catch (InterruptedException e) {
+                log.error("预售申请失败,失败信息:" + e);
+            } finally {
+                SerialNumberUtils.lockMap.remove(uuid);
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public AjaxResult<PresaleApplyAddInitResult> saveInit(HttpServletRequest request) {
+        PresaleApplyAddInitResult result = new PresaleApplyAddInitResult();
+        List<Market> marketList = iMarketMapper.selectList(new QueryWrapper<Market>()
+                .eq("MARKETSTATUS",2)
+                .in("TRADEMODE",40,41,71,48,51));
+        result.setMarketList(marketList);
+        Marketrun marketrun = iMarketrunMapper.selectOne(new QueryWrapper<Marketrun>().eq("marketid", 0));
+        if(Objects.nonNull(marketrun)){
+            result.setNexttradedate(marketrun.getNexttradedate());
+        }
+
+        //获取图片上传大小
+        WskhOpenaccountconfig config = iWskhOpenaccountconfigMapper.selectOne(new QueryWrapper<WskhOpenaccountconfig>().eq("configtype",25));
+        if (config != null) {
+            result.setMaxsize(config.getConfigvalue());
+        } else {
+            //默认文件最大10M
+            result.setMaxsize(String.valueOf(10 * 1024 * 1024));
+        }
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), result);
+    }
+}

+ 378 - 12
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/QueryServiceImpl.java

@@ -6,21 +6,21 @@ 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.common.base.Strings;
+import com.muchinfo.mtp.proto.AccountRedis;
+import com.muchinfo.mtp.proto.Common;
 import com.muchinfo.mtp.proto.QuoteMI1;
+import com.muchinfo.mtp.proto.TkernelMI2;
 import com.muchinfo.mtp3century.service.ICommonService;
 import com.muchinfo.mtp3century.service.IQueryService;
 import com.muchinfo.mtp3century.utils.RedisServiceUtil;
-import com.muchinfo.mtp3common.enumtype.Constants;
-import com.muchinfo.mtp3common.enumtype.MessageType;
-import com.muchinfo.mtp3common.enumtype.SysConstants;
-import com.muchinfo.mtp3common.enumtype.SysEnums;
-import com.muchinfo.mtp3common.vo.AjaxResult;
+import com.muchinfo.mtp3common.enumtype.*;
+import com.muchinfo.mtp3common.utils.SerialNumberUtils;
+import com.muchinfo.mtp3common.vo.*;
 import com.muchinfo.mtp3common.utils.DateTimeUtils;
 import com.muchinfo.mtp3common.utils.ExportUtil;
-import com.muchinfo.mtp3common.vo.PageResult;
-import com.muchinfo.mtp3common.vo.ExportResult;
 import com.muchinfo.mtp3interface.mapper.*;
 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.query.accounttransaction.AccountTransactionQueryParam;
@@ -32,12 +32,19 @@ import com.muchinfo.mtp3pojos.vo.query.goodstrade.GoodsTradeQueryParam;
 import com.muchinfo.mtp3pojos.vo.query.goodstrade.GoodsTradeQueryResult;
 import com.muchinfo.mtp3pojos.vo.query.investorsum.InvestorSumQueryParam;
 import com.muchinfo.mtp3pojos.vo.query.investorsum.InvestorSumQueryResult;
+import com.muchinfo.mtp3pojos.vo.query.other.EsignrecordQueryParam;
+import com.muchinfo.mtp3pojos.vo.query.other.EsignrecordQueryResult;
+import com.muchinfo.mtp3pojos.vo.query.other.InvestorQueryParam;
+import com.muchinfo.mtp3pojos.vo.query.other.InvestorQueryResult;
 import com.muchinfo.mtp3pojos.vo.query.position.*;
 import com.muchinfo.mtp3pojos.vo.query.tradesum.TradeSumQueryParam;
 import com.muchinfo.mtp3pojos.vo.query.tradesum.TradeSumQueryResult;
 import com.muchinfo.mtp3pojos.vo.query.warehouse.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.core.MessageProperties;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
@@ -90,7 +97,11 @@ public class QueryServiceImpl implements IQueryService {
     @Resource
     private IWarehouseinfoMapper iWarehouseinfoMapper;
     @Resource
-    private IWrfactortypeitemMapper iWrfactortypeitemMapper;
+    private IMarketrunMapper iMarketrunMapper;
+    @Resource
+    private IUseresignrecordMapper iUseresignrecordMapper;
+    @Resource
+    private RabbitTemplate rabbitTemplate;
 
     @Override
     public PageResult<CommissionSheetResult> commissionSheetQuery(CommissionSheetParam commissionSheetParam, HttpServletRequest request) {
@@ -609,7 +620,7 @@ public class QueryServiceImpl implements IQueryService {
     public AjaxResult<PositionSheetResultDetail> positionSheetDetail(String tradeid, Integer buyorsell, Integer ishis, String histradedate, HttpServletRequest request) {
         Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
         PositionSheetResultDetail resultDetail = iTradeOrderdetailMapper.queryTradeHolderDetailById(ishis, tradeid, buyorsell, histradedate);
-        if (!iCommonService.checkTaAccountReport(systemmanager, resultDetail.getAccountid())) {
+        if (iCommonService.checkTaAccountReport(systemmanager, resultDetail.getAccountid())) {
             return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_004.getCode(), request.getHeader("Accept-Language"));
         } else {
             return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), resultDetail);
@@ -720,7 +731,7 @@ public class QueryServiceImpl implements IQueryService {
             dto.setIsyijia(1);
         }
         //校验
-        if (!iCommonService.checkTaAccountReport(systemmanager, dto.getWrTradeOrderDetail().getAccountid())) {
+        if (iCommonService.checkTaAccountReport(systemmanager, dto.getWrTradeOrderDetail().getAccountid())) {
             return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_004.getCode(), request.getHeader("Accept-Language"));
         }
         return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), dto);
@@ -1104,6 +1115,8 @@ public class QueryServiceImpl implements IQueryService {
     @Override
     public AjaxResult<DeliveryOrderDetailResult> deliveryOrderDetail(String deliveryorderid, String histradedate, HttpServletRequest request) {
         DeliveryOrderDetailResult deliveryOrderParam = iTradeOrderdetailMapper.queryDeliveryOrderById(deliveryorderid, histradedate);
+        deliveryOrderParam.setAccountname(iUseraccountMapper.selectUserName(deliveryOrderParam.getAccountid()));
+        deliveryOrderParam.setMatchaccountname(iUseraccountMapper.selectUserName(deliveryOrderParam.getMatchaccountid()));
         List<Wrfactortypeitem> list = iTradeOrderdetailMapper.queryWRFactorTypeItemNew(deliveryOrderParam.getWrfactortypeid());
         deliveryOrderParam.setWrFactorTypeItemList(list);
         return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), deliveryOrderParam);
@@ -1139,7 +1152,7 @@ public class QueryServiceImpl implements IQueryService {
     @Override
     public AjaxResult<SettlementDealDetailResult> settlementDealDetail(SettlementDealDetailParam param, HttpServletRequest request) {
         Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
-        if (iCommonService.checkUserAccountRole(systemmanager, systemmanager.getAreauserid())) {
+        if (!iCommonService.checkUserAccountRole(systemmanager, systemmanager.getAreauserid())) {
             return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM003.getCode(), request.getHeader("Accept-Language"));
         }
         SettlementDealDetailResult result = iTradeOrderdetailMapper.settlementDealDetail(param);
@@ -1160,7 +1173,7 @@ public class QueryServiceImpl implements IQueryService {
     public AjaxResult<ApplyOrderDetailResult> applyOrderDetail(String deliveryorderid, String histradedate, HttpServletRequest request) {
         Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
         ApplyOrderDetailResult result;
-        List<DeliveryDetailResult> detailResult = new ArrayList<>();
+        List<DeliveryDetailResult> detailResult;
         String sellId = null;
         String buyId = null;
         if (StringUtils.isNotBlank(histradedate)) {
@@ -1196,6 +1209,359 @@ public class QueryServiceImpl implements IQueryService {
         return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), result);
     }
 
+    @Override
+    public PageResult<OfflineDeliveryResult> queryoffline(OfflineDeliveryParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        if (systemmanager.getReletype() != 1) {
+            // 不是平台,产业会员只查对手为自己的单据
+            param.setMatchuserid(systemmanager.getAreauserid());
+        }
+        IPage<OfflineDeliveryResult> page = new Page<>(param.getPageNum(), param.getPageSize());
+        IPage<OfflineDeliveryResult> resultIPage = iTradeOrderdetailMapper.queryDeliveryOfflinePage(page, param);
+        PageResult<OfflineDeliveryResult> pageResult = new PageResult<>();
+        pageResult.setCode(Constants.Success_Code_Design);
+        pageResult.setMessage(AjaxResult.dealMsg(MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language")));
+        pageResult.setPages(resultIPage.getPages());
+        pageResult.setCurrent(resultIPage.getCurrent());
+        pageResult.setTotal(resultIPage.getTotal());
+        pageResult.setPageSize(resultIPage.getSize());
+        pageResult.setData(resultIPage.getRecords());
+        return pageResult;
+    }
+
+    @Override
+    public AjaxResult<OfflineDeliveryDetailResult> offlineDetail(String deliveryorderid, HttpServletRequest request) {
+        OfflineDeliveryDetailResult result = iTradeOrderdetailMapper.queryDeliveryOfflineDetail(deliveryorderid);
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), result);
+    }
+
+    @Override
+    public AjaxResult offlineclose(String deliveryorderid, Long marketid, HttpServletRequest request) {
+        Marketrun marketRun = iMarketrunMapper.selectOne(new QueryWrapper<Marketrun>().eq("marketid", marketid));
+        if (Objects.nonNull(marketRun) && marketRun.getRunstatus().equals(2)) {
+            int result = closeDeliveryOffline(deliveryorderid);
+            if (result == -1) {
+                return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_009.getCode(), request.getHeader("Accept-Language"));
+            } else {
+                return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
+            }
+        } else {
+            // 市场错误或市场状态不为开市场状态
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_008.getCode(), request.getHeader("Accept-Language"));
+        }
+    }
+
+    @Override
+    public AjaxResult offlinefail(String deliveryorderid, Long marketid, String auditremark, HttpServletRequest request) {
+        Marketrun marketRun = iMarketrunMapper.selectOne(new QueryWrapper<Marketrun>().eq("marketid", marketid));
+        if (Objects.nonNull(marketRun) && marketRun.getRunstatus().equals(2)) {
+            int result = failDeliveryOffline(deliveryorderid, auditremark);
+            if (result == -1) {
+                return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_009.getCode(), request.getHeader("Accept-Language"));
+            } else {
+                return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
+            }
+        } else {
+            // 市场错误或市场状态不为开市场状态
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_008.getCode(), request.getHeader("Accept-Language"));
+        }
+    }
+
+    @Override
+    public AjaxResult offlineexport(OfflineDeliveryParam param, HttpServletRequest request) {
+        try {
+            List<OfflineDeliveryResult> results = iTradeOrderdetailMapper.queryDeliveryOfflinePage(param);
+            String fileName = "线下交收单_" + DateTimeUtils.getDateTime("yyyyMMdd");
+            if (CollectionUtils.isEmpty(results)) {
+                return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_005.getCode(), request.getHeader("Accept-Language"));
+            }
+            ExportResult exportResult = ExportUtil.write(fileName, OfflineDeliveryResult.class, results);
+            return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), exportResult);
+        } catch (Exception e) {
+            log.error("线下交收单导出失败,失败原因:" + e);
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_006.getCode(), request.getHeader("Accept-Language"));
+        }
+    }
+
+    @Override
+    public PageResult<EsignrecordQueryResult> queryesignrecord(EsignrecordQueryParam param, HttpServletRequest request) {
+        IPage<EsignrecordQueryResult> page = new Page<>(param.getPageNum(), param.getPageSize());
+        IPage<EsignrecordQueryResult> resultIPage = iTradeOrderdetailMapper.queryesignrecord(page, param);
+        // Go查询腾讯电子签子客URL地址\爱签查询
+        resultIPage.getRecords().forEach(a -> {
+            String sp1005 = iCommonService.getSystemParam(Constants.REDIS_HEADER_SYSPARAM, "1005");
+            if (!Strings.isNullOrEmpty(sp1005)) {
+                //处理请求url
+                if (sp1005.contains("/api/")) {
+                    a.setSp1005Url(sp1005 + "Asign/SyncContractStatus");
+                } else {
+                    a.setSp1005Url(sp1005 + "/Asign/SyncContractStatus");
+                }
+            }
+        });
+        PageResult<EsignrecordQueryResult> pageResult = new PageResult<>();
+        pageResult.setCode(Constants.Success_Code_Design);
+        pageResult.setMessage(AjaxResult.dealMsg(MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language")));
+        pageResult.setPages(resultIPage.getPages());
+        pageResult.setCurrent(resultIPage.getCurrent());
+        pageResult.setTotal(resultIPage.getTotal());
+        pageResult.setPageSize(resultIPage.getSize());
+        pageResult.setData(resultIPage.getRecords());
+        return pageResult;
+    }
+
+    @Override
+    public AjaxResult changeStatus(Long recordid, Integer newStatus, HttpServletRequest request) {
+        Useresignrecord record = iUseresignrecordMapper.selectOne(new QueryWrapper<Useresignrecord>().eq("recordid", recordid));
+
+        if (record == null) {
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM002.getCode(), request.getHeader("Accept-Language"));
+        }
+        if (newStatus == 1L) {
+            // 2:签署中\4:签署拒绝的可重置为未签署
+            if (!record.getRecordstatus().equals(2L) && !record.getRecordstatus().equals(4L)) {
+                return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM002.getCode(), request.getHeader("Accept-Language"));
+            }
+        } else if (newStatus == 3L) {
+            // 1:未签署\4:签署拒绝更新为3:已签署
+            if (!record.getRecordstatus().equals(1L) && !record.getRecordstatus().equals(4L)) {
+                return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM002.getCode(), request.getHeader("Accept-Language"));
+            }
+        } else {
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM002.getCode(), request.getHeader("Accept-Language"));
+        }
+        record.setRecordstatus(newStatus);
+        record.setUpdatetime(new Date());
+        iUseresignrecordMapper.updateById(record);
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
+    }
+
+    @Override
+    public PageResult<InvestorQueryResult> queryinvestor(InvestorQueryParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        if (systemmanager.getReletype() != 1) {
+            if (("," + param.getOrgztypes() + ",").contains(",3,")) {
+                param.setChangeflag(3);
+            }
+            param.setAreauserid(systemmanager.getAreauserid());
+        }
+        IPage<InvestorQueryResult> page = new Page<>(param.getPageNum(), param.getPageSize());
+        IPage<InvestorQueryResult> resultIPage = iTradeOrderdetailMapper.queryinvestor(page, param);
+        //处理金额
+        getRiskFromRedis(resultIPage.getRecords());
+        PageResult<InvestorQueryResult> pageResult = new PageResult<>();
+        pageResult.setCode(Constants.Success_Code_Design);
+        pageResult.setMessage(AjaxResult.dealMsg(MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language")));
+        pageResult.setPages(resultIPage.getPages());
+        pageResult.setCurrent(resultIPage.getCurrent());
+        pageResult.setTotal(resultIPage.getTotal());
+        pageResult.setPageSize(resultIPage.getSize());
+        pageResult.setData(resultIPage.getRecords());
+        return pageResult;
+    }
+
+    private void getRiskFromRedis(List<InvestorQueryResult> records) {
+        try {
+            String floatplFlag = iCommonService.getSystemParam(Constants.REDIS_HEADER_SYSPARAM, "113");
+            String creditFlag = iCommonService.getSystemParam(Constants.REDIS_HEADER_SYSPARAM, "946");
+            String closeplFlag = iCommonService.getSystemParam(Constants.REDIS_HEADER_SYSPARAM, "112");
+            String inamountFlag = iCommonService.getSystemParam(Constants.REDIS_HEADER_SYSPARAM, "111");
+            for (InvestorQueryResult record : records) {
+                byte[] valuebts = redisServiceUtil.getBytes("risk:" + record.getAccountid());
+                AccountRedis.AccRiskInfo accRiskInfo = null;
+                if (valuebts != null) {
+                    accRiskInfo = AccountRedis.AccRiskInfo.newBuilder().mergeFrom(valuebts).build();
+                    log.info("risk:" + record.getAccountid() + "--------------accRiskInfo:" + accRiskInfo);
+
+                    record.setCur_risk_rate(BigDecimal.valueOf(accRiskInfo.getCURRISKRATE()).multiply(BigDecimal.valueOf(100d)).setScale(2, RoundingMode.DOWN));
+                    record.setFloatpl(BigDecimal.valueOf(accRiskInfo.getTOTALFLOATPL()));
+                } else {
+                    // Redis无记录,风险率、浮动盈亏设置为0
+                    record.setCur_risk_rate(BigDecimal.ZERO);
+                    record.setFloatpl(BigDecimal.ZERO);
+                }
+
+                // 更新可用
+                setAvaliableAmount(record, floatplFlag);
+
+                // 更新可出
+                setAvaliableOutAmount(record, floatplFlag, creditFlag, closeplFlag, inamountFlag);
+
+                // 更新当前净值= 期末余额+浮动盈亏(收益权)
+                record.setFloatnetvalue(record.getCurrentbalance().add(record.getFloatpl()));
+            }
+        } catch (Exception e) {
+            log.error("设置风险率失败,请检查!");
+        }
+    }
+
+    private void setAvaliableOutAmount(InvestorQueryResult vo, String floatplFlag, String creditFlag, String closeplFlag, String inamountFlag) {
+        //根据系统参数计算s1(946	是否可设置收益权市场的交易授信 0:不显示 1:显示 默认0)
+        //946 = 0:
+        //s1=期末余额-交易占用-交易冻结-手续费冻结-出金冻结-其它冻结-授信金额-其它授信金额+浮动盈亏-[平仓盈利(正值)](当日平仓盈利不可出112)-[浮动盈利(正值)](当日浮动盈利不可出113)
+        //946 = 1:
+        //s1=期末余额-交易占用-交易冻结-手续费冻结-出金冻结-其它冻结-授信金额-其它授信金额+浮动盈亏-[平仓盈利(正值)](当日平仓盈利不可出112)-[浮动盈利(正值)](当日浮动盈利不可出113)
+        //s2=期初余额+子账号期初余额汇总+当日出金(负值)-出金冻结+[当日入金](当日入金可出111)
+        //可出资金=min(s1,s2)
+        BigDecimal s1 = BigDecimal.ZERO;
+        if ("1".equals(creditFlag)) {
+            s1 = vo.getCurrentbalance().subtract(vo.getUsedmargin())
+                    .subtract(vo.getFreezemargin()).subtract(vo.getOtherfreezemargin()).subtract(vo.getFreezecharge())
+                    .subtract(vo.getOutamountfreeze()).subtract(vo.getOthercredit()).add(vo.getFloatpl());
+
+        } else {
+            s1 = vo.getCurrentbalance().subtract(vo.getUsedmargin())
+                    .subtract(vo.getFreezemargin()).subtract(vo.getOtherfreezemargin()).subtract(vo.getFreezecharge())
+                    .subtract(vo.getOutamountfreeze()).subtract(vo.getMortgagecredit()).subtract(vo.getOthercredit())
+                    .add(vo.getFloatpl());
+        }
+
+        if ("0".equals(closeplFlag) && vo.getClosepl().compareTo(BigDecimal.ZERO) > 0) {
+            s1 = s1.subtract(vo.getClosepl());
+        }
+        if ("0".equals(floatplFlag) && vo.getFloatpl().compareTo(BigDecimal.ZERO) > 0) {
+            s1 = s1.subtract(vo.getFloatpl());
+        }
+        BigDecimal s2 = vo.getBalance();
+        if (vo.getOutamount().compareTo(BigDecimal.ZERO) < 0) {
+            s2 = s2.add(vo.getOutamount());
+        }
+        s2.subtract(vo.getOutamountfreeze());
+        if ("1".equals(inamountFlag)) {
+            s2 = s2.add(vo.getInamount());
+        }
+
+        if ("0".equals(closeplFlag)) {
+            vo.setAvaiableoutmoney(s1.compareTo(s2) > 0 ? s2 : s1);
+        } else {
+            vo.setAvaiableoutmoney(s1);
+        }
+
+        // 减去账户出金阀值
+        if (vo.getOutthreshold() != null) {
+            if (vo.getOutthreshold().compareTo(vo.getAvaiableoutmoney()) > -1) {
+                vo.setAvaiableoutmoney(BigDecimal.ZERO);
+            } else {
+                vo.setAvaiableoutmoney(vo.getAvaiableoutmoney().subtract(vo.getOutthreshold()));
+            }
+        }
+
+        // 可出小于0,显示时强制值为0
+        if (BigDecimal.ZERO.compareTo(vo.getAvaiableoutmoney()) > -1) {
+            vo.setAvaiableoutmoney(BigDecimal.ZERO);
+        }
+    }
+
+    private void setAvaliableAmount(InvestorQueryResult vo, String floatplFlag) {
+        //可用资金:
+        //      账户总浮动盈亏为负:
+        //      =期末余额+总浮动盈亏(收益权)-占用-冻结-其它冻结-手续费冻结-出金冻结
+        //		账户总浮动盈亏为正 且 113 = 0 :
+        //		=期末余额-占用-冻结-其它冻结-手续费冻结-出金冻结
+        //		账户总浮动盈亏为正 且 113 = 1 :
+        //		=期末余额+总浮动盈亏(收益权)-占用-冻结-其它冻结-手续费冻结-出金冻结
+        //		*系统参数”113“(当日浮动盈利是否可用) 0:不可用 1:可用
+        if (vo == null) return;
+
+        if (floatplFlag.equals("1") || vo.getFloatpl().compareTo(new BigDecimal(0)) < 0) {
+            vo.setAvaiablemoney(vo.getCurrentbalance().add(vo.getFloatpl()).subtract(vo.getUsedmargin())
+                    .subtract(vo.getFreezemargin()).subtract(vo.getOtherfreezemargin()).subtract(vo.getFreezecharge())
+                    .subtract(vo.getOutamountfreeze()));
+        } else {
+            vo.setAvaiablemoney(vo.getCurrentbalance().subtract(vo.getUsedmargin())
+                    .subtract(vo.getFreezemargin()).subtract(vo.getOtherfreezemargin()).subtract(vo.getFreezecharge())
+                    .subtract(vo.getOutamountfreeze()));
+        }
+    }
+
+    @Override
+    public PageResult<PositionSumSheetResult> queryinvestortradeposition(PositionSumSheetParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        PageResult<PositionSumSheetResult> pageResult = new PageResult<>();
+        if (iCommonService.checkTaaccountReport(systemmanager, param.getAccountid())) {
+            pageResult.setCode(Constants.Error_Code_Design);
+            pageResult.setMessage(AjaxResult.dealMsg(MessageType.QUERY_ERROR_CODE_004.getCode(), request.getHeader("Accept-Language")));
+            return pageResult;
+        }
+        IPage<PositionSumSheetResult> page = new Page<>(param.getPageNum(), param.getPageSize());
+        IPage<PositionSumSheetResult> resultIPage = iTradeOrderdetailMapper.queryTradePositionPage(page, param);
+        //处理金额
+        dealSunAmount(resultIPage.getRecords());
+        pageResult.setCode(Constants.Success_Code_Design);
+        pageResult.setMessage(AjaxResult.dealMsg(MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language")));
+        pageResult.setPages(resultIPage.getPages());
+        pageResult.setCurrent(resultIPage.getCurrent());
+        pageResult.setTotal(resultIPage.getTotal());
+        pageResult.setPageSize(resultIPage.getSize());
+        pageResult.setData(resultIPage.getRecords());
+        return pageResult;
+    }
+
+    @Override
+    public AjaxResult sellGoods(String deliveryorderid, Long marketid, HttpServletRequest request) {
+        Marketrun marketRun = iMarketrunMapper.selectOne(new QueryWrapper<Marketrun>().eq("marketid", marketid));
+        if (marketRun != null && marketRun.getRunstatus().equals(2)) {
+            log.info("支付交收货款处理开始");
+            Long uuid = SerialNumberUtils.getNewSerialNumber(SerialNumberUtils.prefix_capacity);
+            Calculator ca = new Calculator(uuid, FunCodeConstants.FuncCode_DeliveryProviderPaySellAmountReq);
+            SerialNumberUtils.lockMap.put(uuid, ca);
+
+            TkernelMI2.DeliveryProviderPaySellAmountReq.Builder builder = TkernelMI2.DeliveryProviderPaySellAmountReq.newBuilder();
+            Common.MessageHead.Builder hd = Common.MessageHead.newBuilder();
+            hd.setFunCode(FunCodeConstants.FuncCode_DeliveryProviderPaySellAmountReq);
+            hd.setUUID(String.valueOf(uuid));
+            hd.setClientTime(System.currentTimeMillis());
+            hd.setMarketID(Integer.parseInt(String.valueOf(marketid)));
+            builder.setHeader(hd);
+            builder.setDeliveryOrderID(Long.parseLong(deliveryorderid));
+
+            byte[] body = ProtoHelper.getNTAS(builder.build().toByteArray(),
+                    FunCodeConstants.FuncCode_DeliveryProviderPaySellAmountReq);
+
+            rabbitTemplate.send(SysConstants.TradeCpReq, new Message(body, new MessageProperties()));
+
+            synchronized (ca) {
+                try {
+                    ca.wait(6000);
+                    Object o = ca.obj;
+                    if (o != null) {
+                        TkernelMI2.DeliveryProviderPaySellAmountRsp rsp_ = (TkernelMI2.DeliveryProviderPaySellAmountRsp) o;
+                        if (rsp_.getRetCode() == 0) {
+                            return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM012.getCode(), request.getHeader("Accept-Language"));
+                        } else {
+                            return AjaxResult.error(Constants.Error_Code_Design, ProtoErrorCodes.resultMsg(rsp_.getRetCode()), "", null);
+                        }
+                    } else {
+                        return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM006.getCode(), request.getHeader("Accept-Language"));
+                    }
+                } catch (InterruptedException e) {
+                    log.error("DeliveryProviderPaySellAmountRsp 获取响应失败,失败原因:" + e.getMessage());
+                } finally {
+                    SerialNumberUtils.lockMap.remove(uuid);
+                }
+            }
+        } else {
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_008.getCode(), request.getHeader("Accept-Language"));
+        }
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
+    }
+
+    private int failDeliveryOffline(String deliveryorderid, String auditremark) {
+        Marketrun mr = iMarketrunMapper.selectOne(new QueryWrapper<Marketrun>().eq("marketid", 0L));
+        if (mr != null && deliveryorderid != null) {
+            return iTradeOrderdetailMapper.failDeliveryOffline(mr.getTradedate(), deliveryorderid, auditremark);
+        }
+        return -1;
+    }
+
+    private int closeDeliveryOffline(String deliveryorderid) {
+        Marketrun mr = iMarketrunMapper.selectOne(new QueryWrapper<Marketrun>().eq("marketid", 0L));
+        if (mr != null && deliveryorderid != null) {
+            return iTradeOrderdetailMapper.closeDeliveryOffline(mr.getTradedate(), deliveryorderid);
+        }
+        return -1;
+    }
+
     private void getPerformanceTemplateById(WarehouseCommissionResultDetail dto) {
         Performanceplantemplate plantemplate = iPerformanceplantemplateMapper.selectOne(
                 new QueryWrapper<Performanceplantemplate>().eq("autoid", dto.getWrTradeOrderDetail().getPerformancetemplateid()));

+ 239 - 4
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/ReportFormServiceImpl.java

@@ -1,10 +1,13 @@
 package com.muchinfo.mtp3century.service.impl;
 
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.support.ExcelTypeEnum;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.muchinfo.mtp3century.handler.GoodsMergeStrategy;
 import com.muchinfo.mtp3century.service.ICommonService;
 import com.muchinfo.mtp3century.service.IReportFormService;
 import com.muchinfo.mtp3century.utils.RedisServiceUtil;
@@ -26,12 +29,12 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.io.ByteArrayOutputStream;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.ParseException;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class ReportFormServiceImpl implements IReportFormService {
@@ -57,6 +60,8 @@ public class ReportFormServiceImpl implements IReportFormService {
     private IReportTaaccountMapper iReportTaaccountMapper;
     @Resource
     private IReportPlateformppMapper iReportPlateformppMapper;
+    @Resource
+    private IGoodsMapper iGoodsMapper;
 
     @Override
     public PageResult<ShareAmountQueryResult> selectShareAmount(ShareAmountQueryParam param, HttpServletRequest request) {
@@ -140,7 +145,7 @@ public class ReportFormServiceImpl implements IReportFormService {
     public PageResult<OrgReportQueryResult> orgReportQuery(OrgReportQueryParam param, HttpServletRequest request) {
         Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
         PageResult<OrgReportQueryResult> pageResult = new PageResult<>();
-        if(!iCommonService.checkTaaccountReport(systemmanager,param.getAccountid())){
+        if (!iCommonService.checkTaaccountReport(systemmanager, param.getAccountid())) {
             pageResult.setCode(Constants.Error_Code_Design);
             pageResult.setMessage(AjaxResult.dealMsg(MessageType.QUERY_ERROR_CODE_004.getCode(), request.getHeader("Accept-Language")));
             return pageResult;
@@ -385,6 +390,236 @@ public class ReportFormServiceImpl implements IReportFormService {
         return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), result);
     }
 
+    @Override
+    public PageResult<CusBankReportResult> cusbank(CusBankReportParam param, HttpServletRequest request) {
+        IPage<CusBankReportResult> page = new Page<>(param.getPageNum(), param.getPageSize());
+        IPage<CusBankReportResult> resultIPage = detailMapper.queryCusBank(page, param);
+        PageResult<CusBankReportResult> pageResult = new PageResult<>();
+        pageResult.setCode(Constants.Success_Code_Design);
+        pageResult.setMessage(AjaxResult.dealMsg(MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language")));
+        pageResult.setPages(resultIPage.getPages());
+        pageResult.setCurrent(resultIPage.getCurrent());
+        pageResult.setTotal(resultIPage.getTotal());
+        pageResult.setPageSize(resultIPage.getSize());
+        pageResult.setData(resultIPage.getRecords());
+        return pageResult;
+    }
+
+    @Override
+    public AjaxResult cusbankexport(CusBankReportParam param, HttpServletRequest request) {
+        try {
+            String fileName = "银行资金报表_" + DateTimeUtils.getDateTime("yyyyMMdd");
+            List<CusBankReportResult> resultIPage = detailMapper.queryCusBank(param);
+            if (CollectionUtils.isEmpty(resultIPage)) {
+                return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_005.getCode(), request.getHeader("Accept-Language"));
+            }
+            ExportResult exportResult = ExportUtil.write(fileName, CusBankReportResult.class, resultIPage);
+            return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), exportResult);
+        } catch (Exception e) {
+            log.error("银行资金报表导出失败,失败原因:" + e);
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_006.getCode(), request.getHeader("Accept-Language"));
+        }
+    }
+
+    @Override
+    public PageResult<ManageDivReportResult> managediv(CusBankReportParam param, HttpServletRequest request) {
+        IPage<ManageDivReportResult> page = new Page<>(param.getPageNum(), param.getPageSize());
+        IPage<ManageDivReportResult> resultIPage = detailMapper.managediv(page, param);
+        PageResult<ManageDivReportResult> pageResult = new PageResult<>();
+        pageResult.setCode(Constants.Success_Code_Design);
+        pageResult.setMessage(AjaxResult.dealMsg(MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language")));
+        pageResult.setPages(resultIPage.getPages());
+        pageResult.setCurrent(resultIPage.getCurrent());
+        pageResult.setTotal(resultIPage.getTotal());
+        pageResult.setPageSize(resultIPage.getSize());
+        pageResult.setData(resultIPage.getRecords());
+        return pageResult;
+    }
+
+    @Override
+    public AjaxResult managedivexport(CusBankReportParam param, HttpServletRequest request) {
+        try {
+            String fileName = "服务费分润报表_" + DateTimeUtils.getDateTime("yyyyMMdd");
+            List<ManageDivReportResult> resultIPage = detailMapper.managediv(param);
+            if (CollectionUtils.isEmpty(resultIPage)) {
+                return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_005.getCode(), request.getHeader("Accept-Language"));
+            }
+            ExportResult exportResult = ExportUtil.write(fileName, ManageDivReportResult.class, resultIPage);
+            return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), exportResult);
+        } catch (Exception e) {
+            log.error("银行资金报表导出失败,失败原因:" + e);
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_006.getCode(), request.getHeader("Accept-Language"));
+        }
+    }
+
+    @Override
+    public AjaxResult investorReportExport(InvestorReportQueryParam param, HttpServletRequest request) {
+        try {
+            String fileName = "交易商资金报表_" + DateTimeUtils.getDateTime("yyyyMMdd");
+            Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+            if (systemmanager.getReletype() != 1) {
+                if (("," + param.getOrgztypes() + ",").contains(",3,")) {
+                    param.setChangeflag(3);
+                }
+                param.setParentuserid(systemmanager.getAreauserid());
+            }
+            //周、月、季、年、全
+            if (param.getCycletype() == 2) {
+                //季报表
+                param.setReckondate(param.getReckondate() + param.getQuarter());
+                param.setReckondateend(param.getReckondateend() + param.getQuarterend());
+            }
+            List<InvestorReportQueryResult> resultIPage;
+            if (param.getCycletype() == 0) {
+                resultIPage = detailMapper.queryReckonDayTa(param);
+            } else {
+                resultIPage = detailMapper.queryReportTa(param);
+            }
+            if (CollectionUtils.isEmpty(resultIPage)) {
+                return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_005.getCode(), request.getHeader("Accept-Language"));
+            }
+            ExportResult exportResult = ExportUtil.write(fileName, InvestorReportQueryResult.class, resultIPage);
+            return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), exportResult);
+        } catch (Exception e) {
+            log.error("交易商资金报表导出失败,失败原因:" + e);
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_006.getCode(), request.getHeader("Accept-Language"));
+        }
+    }
+
+    @Override
+    public AjaxResult investorReportOrgExport(InvestorReportQueryParam param, HttpServletRequest request) {
+        try {
+            String fileName = "机构资金报表_" + DateTimeUtils.getDateTime("yyyyMMdd");
+            Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+            if (systemmanager.getReletype() != 1) {
+                if (("," + param.getOrgztypes() + ",").contains(",3,")) {
+                    param.setChangeflag(3);
+                }
+                param.setParentuserid(systemmanager.getAreauserid());
+            }
+            //周、月、季、年、全
+            if (param.getCycletype() == 2) {
+                //季报表
+                param.setReckondate(param.getReckondate() + param.getQuarter());
+                param.setReckondateend(param.getReckondateend() + param.getQuarterend());
+            }
+            List<InvestorReportQueryResult> resultIPage;
+            if (param.getCycletype() == 0) {
+                resultIPage = detailMapper.queryReckonDayTa(param);
+            } else {
+                resultIPage = detailMapper.queryReportTa(param);
+            }
+            List<InvestorReportOrgResult> results = new ArrayList<>();
+            for (InvestorReportQueryResult investorReportQueryResult : resultIPage) {
+                InvestorReportOrgResult result = new InvestorReportOrgResult();
+                BeanUtils.copyProperties(investorReportQueryResult, result);
+                results.add(result);
+            }
+            if (CollectionUtils.isEmpty(resultIPage)) {
+                return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_005.getCode(), request.getHeader("Accept-Language"));
+            }
+            ExportResult exportResult = ExportUtil.write(fileName, InvestorReportOrgResult.class, results);
+            return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), exportResult);
+        } catch (Exception e) {
+            log.error("机构资金报表导出失败,失败原因:" + e);
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_006.getCode(), request.getHeader("Accept-Language"));
+        }
+    }
+
+    @Override
+    public AjaxResult rerun(String startDateStr, String endDateStr, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        log.info("{},call report,startDate:{},endDate:{}", systemmanager.getUsername(), startDateStr, endDateStr);
+        Object[] param = {startDateStr, endDateStr};
+        try {
+            Date startDate = DateTimeUtils.parseDate(startDateStr, DateTimeUtils.DATE_CHAR_PATTERN);
+            Date endDate = DateTimeUtils.parseDate(endDateStr, DateTimeUtils.DATE_CHAR_PATTERN);
+            if (startDate.compareTo(endDate) == 0) {
+                detailMapper.execReportMonthType(startDate);
+            } else {
+                while (startDate.compareTo(endDate) < 0) {
+                    detailMapper.execReportMonthType(startDate);
+                    log.info("tradedate:{}", startDate);
+                    startDate = DateTimeUtils.addDay(startDate, 7);
+                }
+                if (startDate.compareTo(endDate) > 0) {
+                    detailMapper.execReportMonthType(endDate);
+                    log.info("tradedate:{}", endDate);
+                }
+            }
+        } catch (Exception e) {
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.REPORT_ERROR_CODE_001.getCode(), param, request.getHeader("Accept-Language"));
+        }
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
+    }
+
+    @Override
+    public AjaxResult<Map<Long, List<GoodsReportResult>>> daygoodscount(GoodsReportParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        //平台登陆查所有    运营机构登陆
+        if (systemmanager.getReletype() != 1) {
+            param.setAreauserid(systemmanager.getAreauserid());
+        }
+        List<GoodsReportResult> list = new ArrayList<>();
+        if (param.getCycletype() == 0) {
+            list = iGoodsMapper.queryByDate(param);
+        } else {
+            //周、月、季、年报表
+            if (param.getCycletype() == 2) {
+                //季报表
+                param.setReckondate(param.getReckondate() + param.getQuarter());
+            }
+            list = iGoodsMapper.queryByOther(param);
+        }
+        //将List转换为Map
+        Map<Long, List<GoodsReportResult>> resultMap = list.stream()
+                .collect(Collectors.groupingBy(
+                        GoodsReportResult::getMarketid,
+                        Collectors.toList()
+                ));
+
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), resultMap);
+    }
+
+    @Override
+    public AjaxResult goodscountexport(GoodsReportParam param, HttpServletRequest request) {
+        try {
+            String fileName = "商品交易报表_" + DateTimeUtils.getDateTime("yyyyMMdd");
+            Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+            //平台登陆查所有    运营机构登陆
+            if (systemmanager.getReletype() != 1) {
+                param.setAreauserid(systemmanager.getAreauserid());
+            }
+            List<GoodsReportResult> list;
+            if (param.getCycletype() == 0) {
+                list = iGoodsMapper.queryByDate(param);
+            } else {
+                //周、月、季、年报表
+                if (param.getCycletype() == 2) {
+                    //季报表
+                    param.setReckondate(param.getReckondate() + param.getQuarter());
+                }
+                list = iGoodsMapper.queryByOther(param);
+            }
+            if (CollectionUtils.isEmpty(list)) {
+                return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_005.getCode(), request.getHeader("Accept-Language"));
+            }
+            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
+            EasyExcel.write(byteArrayOutputStream)
+                    .head(GoodsReportResult.class)
+                    .registerWriteHandler(new GoodsMergeStrategy())
+                    .excelType(ExcelTypeEnum.XLSX)
+                    .sheet(fileName)
+                    .doWrite(list);
+            byte[] bytes = byteArrayOutputStream.toByteArray();
+            ExportResult result = ExportResult.builder().fileName(fileName).base64(Base64.getEncoder().encodeToString(bytes)).build();
+            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.QUERY_ERROR_CODE_006.getCode(), request.getHeader("Accept-Language"));
+        }
+    }
+
     private String formatDate(Integer cycletype, String cycletime, Integer quarter) {
         String rdate = null;
         if (cycletype == 0) {

+ 419 - 17
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/SettlementServiceImpl.java

@@ -3,9 +3,13 @@ package com.muchinfo.mtp3century.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 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.common.base.Strings;
 import com.muchinfo.mtp.proto.AkernelMI1;
 import com.muchinfo.mtp.proto.Common;
+import com.muchinfo.mtp.proto.SystemMI1;
+import com.muchinfo.mtp.proto.TkernelMI2;
 import com.muchinfo.mtp3century.service.ICommonService;
 import com.muchinfo.mtp3century.service.ISettlementService;
 import com.muchinfo.mtp3common.enumtype.Constants;
@@ -14,30 +18,32 @@ import com.muchinfo.mtp3common.enumtype.MessageType;
 import com.muchinfo.mtp3common.enumtype.SysConstants;
 import com.muchinfo.mtp3common.utils.*;
 import com.muchinfo.mtp3common.vo.*;
-import com.muchinfo.mtp3interface.mapper.IBankAccountsignMapper;
-import com.muchinfo.mtp3interface.mapper.IReckonDaydividecountMapper;
-import com.muchinfo.mtp3interface.mapper.ISystemmanagerMapper;
-import com.muchinfo.mtp3interface.mapper.IUseraccountMapper;
-import com.muchinfo.mtp3pojos.entity.BankAccountsign;
-import com.muchinfo.mtp3pojos.entity.ReckonDaydividecount;
-import com.muchinfo.mtp3pojos.entity.Systemmanager;
-import com.muchinfo.mtp3pojos.entity.Useraccount;
-import com.muchinfo.mtp3pojos.vo.settlement.SecondProfitSharDetailParam;
-import com.muchinfo.mtp3pojos.vo.settlement.SecondProfitSharDetailResult;
-import com.muchinfo.mtp3pojos.vo.settlement.SecondProfitSharResult;
+import com.muchinfo.mtp3interface.mapper.*;
+import com.muchinfo.mtp3pojos.entity.*;
+import com.muchinfo.mtp3pojos.vo.ProtoErrorCodes;
+import com.muchinfo.mtp3pojos.vo.settlement.*;
+import org.apache.poi.hssf.usermodel.HSSFCell;
+import org.apache.poi.hssf.usermodel.HSSFDataFormat;
+import org.apache.poi.hssf.usermodel.HSSFDateUtil;
+import org.apache.poi.ss.usermodel.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.amqp.core.Message;
 import org.springframework.amqp.core.MessageProperties;
 import org.springframework.amqp.rabbit.core.RabbitTemplate;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.regex.Pattern;
 
 @Service
 public class SettlementServiceImpl implements ISettlementService {
@@ -55,6 +61,10 @@ public class SettlementServiceImpl implements ISettlementService {
     private IUseraccountMapper iUseraccountMapper;
     @Resource
     private RabbitTemplate rabbitTemplate;
+    @Resource
+    private ILoginaccountMapper iLoginaccountMapper;
+    @Resource
+    private IGoodsMapper iGoodsMapper;
 
     @Override
     public PageResult<SecondProfitSharResult> sharedayquery(String tradedate, Integer areatype, Integer pageNum, Integer pageSize, HttpServletRequest request) {
@@ -139,7 +149,7 @@ public class SettlementServiceImpl implements ISettlementService {
                         .eq("areatype", areatype)
                         .eq("areaid", areaid));
                 if (reckonDaydividecount.getPaystatus() != 1) {
-                    return AjaxResult.error(Constants.Error_Code_Design,  MessageType.SETTLEMENT_MESSAGE_002.getCode(), request.getHeader("Accept-Language"));
+                    return AjaxResult.error(Constants.Error_Code_Design, MessageType.SETTLEMENT_MESSAGE_002.getCode(), request.getHeader("Accept-Language"));
                 }
 
                 map = confirmPay(reckonDaydividecount, systemmanager);
@@ -155,7 +165,322 @@ public class SettlementServiceImpl implements ISettlementService {
         }
         Object[] param = {success, fail};
 
-        return AjaxResult.success(Constants.Success_Code_Design,MessageType.SETTLEMENT_MESSAGE_001.getCode(),param,request.getHeader("Accept-Language"));
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.SETTLEMENT_MESSAGE_001.getCode(), param, request.getHeader("Accept-Language"));
+    }
+
+    @Override
+    public PageResult<PositionTransferQueryResult> positiontransferquery(PositionTransferQueryParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        if (!SysConstants.SYS_TYPE_MANAGE.equals(systemmanager.getReletype())) {
+            // 会员查询自己转出的记录
+            param.setOutuserid(systemmanager.getAreauserid());
+        }
+        IPage<PositionTransferQueryResult> page = new Page<>(param.getPageNum(), param.getPageSize());
+        IPage<PositionTransferQueryResult> resultIPage = iReckonDaydividecountMapper.queryPositionTransfer(page, param);
+        PageResult<PositionTransferQueryResult> result = new PageResult<>();
+        result.setCode(Constants.Success_Code_Design);
+        result.setMessage(AjaxResult.dealMsg(MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language")));
+        result.setPages(resultIPage.getPages());
+        result.setCurrent(resultIPage.getCurrent());
+        result.setTotal(resultIPage.getTotal());
+        result.setPageSize(resultIPage.getSize());
+        result.setData(resultIPage.getRecords());
+        return result;
+    }
+
+    @Override
+    public AjaxResult<PositionTransferQueryResult> positiontransferdetail(String applyid, HttpServletRequest request) {
+        PositionTransferQueryParam param = new PositionTransferQueryParam();
+        param.setApplyid(applyid);
+        List<PositionTransferQueryResult> resultIPage = iReckonDaydividecountMapper.queryPositionTransfer(param);
+
+        if (StringUtils.isNotBlank(resultIPage.get(0).getRetremark())) {
+            String p_[] = resultIPage.get(0).getRetremark().split(":");
+            if (p_.length > 1 && null != p_[1] && StringUtils.isNotBlank(p_[1])) {
+                resultIPage.get(0).setRetremark(p_[0] + ":" + ProtoErrorCodes.resultMsg(Integer.valueOf(p_[1])));
+            }
+        }
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), resultIPage.get(0));
+    }
+
+    @Override
+    public AjaxResult<PositionTransferImport> batchimport(MultipartHttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        // 平台 按登录账号转移
+        Iterator<String> fileNames = request.getFileNames();
+        if (fileNames.hasNext()) {
+            String fileName = fileNames.next();
+            MultipartFile file = request.getFile(fileName);
+            InputStream is = null;
+            try {
+                is = file.getInputStream();
+                List<PositionTransferImport> returnList = new ArrayList<>();
+                Set<Long> loginList = new HashSet<>();
+                Set<String> goodsList = new HashSet<>();
+
+                Workbook wb = WorkbookFactory.create(is);
+                Sheet sheet = wb.getSheetAt(0);
+                int lastr = sheet.getLastRowNum();
+
+                if (lastr == 0) {
+                    return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_010.getCode(), request.getHeader("Accept-Language"));
+                }
+                for (int i = 1; i <= lastr; i++) {
+                    Row row = sheet.getRow(i);
+                    Cell c_outloginid;
+                    Cell c_inloginid;
+                    Cell c_goodscode;
+                    Cell c_buyorsell;
+                    Cell c_transferprice;
+                    Cell c_qty;
+                    Cell c_freezedays;
+                    String outloginid = null;
+
+                    if (systemmanager.getReletype() == 1) {
+                        c_outloginid = row.getCell(0);
+                        c_inloginid = row.getCell(1);
+                        c_goodscode = row.getCell(2);
+                        c_buyorsell = row.getCell(3);
+                        c_transferprice = row.getCell(4);
+                        c_qty = row.getCell(5);
+                        c_freezedays = row.getCell(6);
+                        outloginid = Strings.isNullOrEmpty(c_outloginid.toString().trim()) ? "0" : getCellValue2(c_outloginid);
+                        if (StringUtils.isEmpty(outloginid) || outloginid.equals("0")) {
+                            // 转出方为空时,忽略此行
+                            continue;
+                        }
+                        loginList.add(Long.valueOf(outloginid));
+                    } else {
+                        c_inloginid = row.getCell(0);
+                        c_goodscode = row.getCell(1);
+                        c_buyorsell = row.getCell(2);
+                        c_transferprice = row.getCell(3);
+                        c_qty = row.getCell(4);
+                        c_freezedays = row.getCell(5);
+                    }
+
+
+                    String inloginid = Strings.isNullOrEmpty(c_inloginid.toString().trim()) ? "0" : getCellValue2(c_inloginid);
+                    if (StringUtils.isEmpty(inloginid) || inloginid.equals("0")) {
+                        // 转入方为空时,忽略此行
+                        continue;
+                    }
+
+                    String goodscode = c_goodscode == null ? "0" : getCellValue2(c_goodscode);
+                    String buyorsell = c_buyorsell == null ? "0" : getCellValue(c_buyorsell);
+                    String transferprice = c_transferprice == null ? "0" : getCellValue(c_transferprice);
+                    String qty = c_qty == null ? "0" : getCellValue2(c_qty);
+                    String freezedays = c_freezedays == null ? "0" : getCellValue2(c_freezedays);
+
+                    PositionTransferImport anImport = PositionTransferImport.builder()
+                            .outloginid(outloginid)
+                            .inloginid(inloginid)
+                            .goodscode(goodscode)
+                            .buyorsell(buyorsell)
+                            .transferprice(transferprice)
+                            .qty(qty)
+                            .freezedays(freezedays).build();
+                    anImport.setOutloginid(outloginid);
+                    returnList.add(anImport);
+
+                    //数据校验
+                    loginList.add(Long.valueOf(inloginid));
+                    goodsList.add(goodscode);
+                }
+
+                if (loginList.isEmpty()) {
+                    return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_010.getCode(), request.getHeader("Accept-Language"));
+                }
+
+                checkImport(returnList, loginList, goodsList, systemmanager);
+                return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), returnList);
+            } catch (Exception e) {
+                log.error("导出文件失败,失败原因:" + e.getMessage());
+            } finally {
+                try {
+                    is.close();
+                } catch (IOException ignored) {
+                }
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public AjaxResult saveimport(List<PositionTransferImport> param, HttpServletRequest request) {
+
+        if(CollectionUtils.isNotEmpty(param)) {
+            //调用16201 服务“持仓过户申请”接口
+            Long uuid = SerialNumberUtils.getNewSerialNumber(SerialNumberUtils.prefix_positiontransfer);
+            Calculator ca = new Calculator(uuid, FunCodeConstants.FuncCode_HolderTransferApplyReq);
+            SerialNumberUtils.lockMap.put(uuid, ca);
+
+            TkernelMI2.HolderTransferApplyReq.Builder builder = TkernelMI2.HolderTransferApplyReq.newBuilder();
+
+            Common.MessageHead.Builder hd = Common.MessageHead.newBuilder();
+            hd.setUUID(String.valueOf(uuid));
+            hd.setFunCode(FunCodeConstants.FuncCode_HolderTransferApplyReq);
+            hd.setMarketID(16201);
+            builder.setHeader(hd);
+
+            for (PositionTransferImport anImport : param) {
+                // 平台导入时转出方登录号不为空,自营会员转出时转出方用户ID不为空
+                if (anImport != null && (anImport.getOutuserid() != null || anImport.getOutloginid() != null)) {
+                    Integer outUserID = null;
+                    if (anImport.getOutuserid() == null){
+                        Loginaccount  outLogin = iLoginaccountMapper.selectOne(new QueryWrapper<Loginaccount>().eq("loginid",anImport.getOutloginid()));
+                        if (outLogin != null){
+                            outUserID = outLogin.getUserid().intValue();
+                        }
+                    }else{
+                        outUserID = anImport.getOutuserid().intValue();
+                    }
+                    if(outUserID == null){
+                        continue;
+                    }
+
+                    Loginaccount inLogin = iLoginaccountMapper.selectOne(new QueryWrapper<Loginaccount>().eq("loginid",anImport.getInloginid()));
+                    if (inLogin == null){
+                        continue;
+                    }
+
+                    if (anImport.getGoodsid() == null){
+                        continue;
+                    }
+
+                    TkernelMI2.HolderTransferDetail.Builder detail = TkernelMI2.HolderTransferDetail.newBuilder();
+                    detail.setOutUserID(outUserID);
+                    detail.setInUserID(inLogin.getUserid().intValue());
+                    detail.setGoodsID(anImport.getGoodsid().intValue());
+                    detail.setBuyOrSell(Integer.parseInt(anImport.getBuyorsell()));
+                    detail.setQty(Long.parseLong(anImport.getQty()));
+                    detail.setTransferPrice(Double.parseDouble(anImport.getTransferprice()));
+                    detail.setFreezeDays(Integer.parseInt(anImport.getFreezedays()));
+                    detail.setTransferType(1);
+
+                    builder.addHolderTransferDetails(detail);
+                }
+            }
+
+            builder.setClientSerialNo(String.valueOf(uuid));
+            builder.setClientType(1); // PC管理端
+
+            byte[] body = ProtoHelper.getNTAS(builder.build().toByteArray(), FunCodeConstants.FuncCode_HolderTransferApplyReq);
+
+            rabbitTemplate.send(SysConstants.RabbitOrderReq, new Message(body, new MessageProperties()));
+
+            synchronized (ca) {
+                try {
+                    ca.wait(10000);
+                    Object rsp = ca.obj;
+                    if (rsp != null) {
+                        TkernelMI2.HolderTransferApplyRsp rsp_ = (TkernelMI2.HolderTransferApplyRsp) rsp;
+                        if (rsp_.getRetCode() == 0) {
+                            return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM020.getCode(), request.getHeader("Accept-Language"));
+                        } else {
+                            return AjaxResult.error(Constants.Error_Code_Design, ProtoErrorCodes.resultMsg(rsp_.getRetCode()), "");
+                        }
+                    } else {
+                        return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM006.getCode(), request.getHeader("Accept-Language"));
+                    }
+                } catch (InterruptedException e) {
+                    log.error("收取锁定交易账号通知失败,失败原因:" + e.getMessage());
+                } finally {
+                    SerialNumberUtils.lockMap.remove(uuid);
+                }
+            }
+        }
+
+        return null;
+    }
+
+    private void checkImport(List<PositionTransferImport> returnList, Set<Long> loginList, Set<String> goodList, Systemmanager user) {
+        // 登录账号校验
+        List<Loginaccount> loginlist = iLoginaccountMapper.selectList(new QueryWrapper<Loginaccount>()
+                .in("loginid", loginList));
+
+        String ologinid = null;
+        if (user.getReletype() != 1) {
+            // 获取转出方登录账号
+            Loginaccount outLoginAccount = iLoginaccountMapper.selectOne(new QueryWrapper<Loginaccount>().eq("userid", user.getAreauserid()));
+            ologinid = outLoginAccount == null ? "" : outLoginAccount.getLoginid().toString();
+        }
+
+        Map<Long, Loginaccount> loginMap = new HashMap<>();
+        for (Loginaccount loginaccount : loginlist) {
+            loginMap.put(loginaccount.getLoginid(), loginaccount);
+        }
+
+        // 商品校验
+        List<Goods> goodsList = iGoodsMapper.selectList(new QueryWrapper<Goods>()
+                .in("goodscode", goodList));
+        Map<String, Goods> hasgood = new HashMap<>();
+        for (Goods goods : goodsList) {
+            hasgood.put(goods.getGoodscode(), goods);
+        }
+
+        List<String> bs = Arrays.asList("卖", "买");
+
+        Pattern pt = Pattern.compile("^\\d+(\\.\\d+)?$");
+
+        for (PositionTransferImport anImport : returnList) {
+            if (!isNumeric(anImport.getOutloginid())) {
+                anImport.setCresult("转出登录账号错误");
+                continue;
+            }
+            if (!isNumeric(anImport.getInloginid())) {
+                anImport.setCresult("转入登录账号错误");
+                continue;
+            }
+            if (!pt.matcher(anImport.getTransferprice()).matches()) {
+                anImport.setCresult("转让价格错误");
+                continue;
+            }
+            if (!pt.matcher(anImport.getQty()).matches()) {
+                anImport.setCresult("转让数量错误");
+                continue;
+            }
+
+            if (!pt.matcher(anImport.getFreezedays()).matches()) {
+                anImport.setCresult("冻结天数错误");
+                continue;
+            }
+
+            if (!bs.contains(anImport.getBuyorsell())) {
+                anImport.setCresult("买卖方向错误");
+                continue;
+            }
+
+            if (user.getReletype() != 1) {
+                if (anImport.getInloginid().equals(ologinid)) {
+                    anImport.setCresult("转出转入账号不能相同");
+                    continue;
+                }
+            } else {
+                if (anImport.getOutloginid().equals(anImport.getInloginid())) {
+                    anImport.setCresult("转出转入账号不能相同");
+                    continue;
+                }
+            }
+
+            if (!loginMap.containsKey(Long.valueOf(anImport.getOutloginid()))) {
+                anImport.setCresult("转出登录账号不存在");
+                continue;
+            }
+
+            if (!loginMap.containsKey(Long.valueOf(anImport.getInloginid()))) {
+                anImport.setCresult("转入登录账号不存在");
+                continue;
+            }
+
+            if (!hasgood.containsKey(anImport.getGoodscode())) {
+                anImport.setCresult("商品不存在");
+                anImport.setGoodsname(anImport.getGoodscode());
+            } else {
+                anImport.setGoodsname(hasgood.get(anImport.getGoodscode()).getGoodsname() + "/" + anImport.getGoodscode());
+                anImport.setGoodsid(hasgood.get(anImport.getGoodscode()).getGoodsid());
+            }
+        }
     }
 
     private Map<String, Object> confirmPay(ReckonDaydividecount rd, Systemmanager systemmanager) {
@@ -393,4 +718,81 @@ public class SettlementServiceImpl implements ISettlementService {
         }
         return result;
     }
+
+    private String getCellValue2(Cell cell) {
+        int cellType = cell.getCellType();
+        switch (cellType) {
+            case HSSFCell.CELL_TYPE_STRING:
+                return cell.getStringCellValue();
+            case HSSFCell.CELL_TYPE_NUMERIC:
+                DecimalFormat df = new DecimalFormat("0");
+                return df.format(cell.getNumericCellValue());
+            default:
+                return cell.toString();
+        }
+    }
+
+    protected String getCellValue(Cell cell) {
+        NumberFormat formater = NumberFormat.getInstance();
+        formater.setGroupingUsed(false);
+        formater.setMaximumFractionDigits(6);
+        String cellValue = "";
+        if (cell == null) {
+            return cellValue;
+        }
+        switch (cell.getCellType()) {
+            case HSSFCell.CELL_TYPE_NUMERIC:
+
+                if (HSSFDateUtil.isCellDateFormatted(cell)) {
+                    SimpleDateFormat sdf = null;
+                    if (cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("h:mm:ss")) {
+                        sdf = new SimpleDateFormat("HH:mm:ss");
+                    } else {// 日期
+                        sdf = new SimpleDateFormat("yyyy-MM-dd");
+
+                    }
+                    Date date = cell.getDateCellValue();
+                    cellValue = sdf.format(date);
+
+                } else {
+                    cellValue = formater.format(cell.getNumericCellValue());
+        		/* if("-".equals(cellValue.trim())){
+               	  System.out.println(cellValue);
+                 }*/
+                }
+                break;
+            case HSSFCell.CELL_TYPE_STRING:
+
+                cellValue = cell.getStringCellValue();
+                if ("-".equals(cellValue.trim())) {
+                    cellValue = "";
+                }
+                break;
+            case HSSFCell.CELL_TYPE_BLANK:
+                cellValue = cell.getStringCellValue();
+                break;
+            case HSSFCell.CELL_TYPE_BOOLEAN:
+                cellValue = Boolean.valueOf(cell.getBooleanCellValue()).toString();
+                break;
+            case HSSFCell.CELL_TYPE_ERROR:
+                cellValue = String.valueOf(cell.getErrorCellValue());
+                break;
+            default:
+                cellValue = "";
+        }
+        return cellValue.trim();
+    }
+
+    public boolean isNumeric(String str) {
+        if (str == null) {
+            return false;
+        }
+        int sz = str.length();
+        for (int i = 0; i < sz; i++) {
+            if (!Character.isDigit(str.charAt(i))) {
+                return false;
+            }
+        }
+        return true;
+    }
 }

+ 77 - 1
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/TradingAccountServiceImpl.java

@@ -13,6 +13,7 @@ import com.muchinfo.mtp3common.enumtype.Constants;
 import com.muchinfo.mtp3common.enumtype.FunCodeConstants;
 import com.muchinfo.mtp3common.enumtype.MessageType;
 import com.muchinfo.mtp3common.enumtype.SysConstants;
+import com.muchinfo.mtp3common.utils.CommonUtil;
 import com.muchinfo.mtp3common.utils.EncryptionUtils;
 import com.muchinfo.mtp3common.utils.SerialNumberUtils;
 import com.muchinfo.mtp3common.vo.ProtoHelper;
@@ -22,6 +23,7 @@ import com.muchinfo.mtp3common.vo.PageResult;
 import com.muchinfo.mtp3interface.mapper.*;
 import com.muchinfo.mtp3pojos.entity.*;
 import com.muchinfo.mtp3pojos.vo.ProtoErrorCodes;
+import com.muchinfo.mtp3pojos.vo.tradingacc.InitAddResult;
 import com.muchinfo.mtp3pojos.vo.tradingacc.TradingAccountAddParam;
 import com.muchinfo.mtp3pojos.vo.tradingacc.TradingAccountQueryParam;
 import com.muchinfo.mtp3pojos.vo.tradingacc.TradingAccountQueryResult;
@@ -34,6 +36,7 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import javax.validation.ConstraintViolationException;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -252,10 +255,83 @@ public class TradingAccountServiceImpl implements ITradingAccountService {
 
     @Override
     public AjaxResult add(HttpServletRequest request, TradingAccountAddParam param) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        Loginaccount la = new Loginaccount();
+        la.setLoginfailnum(0);
+        la.setLoginid(param.getLoginid());
+        la.setLoginstatus(1);
+        la.setLoginusertype(param.getLoginusertype());
+        la.setPassword(EncryptionUtils.encryptSHA(la.getLoginid() + param.getPassword()));
+        la.setUserid(systemmanager.getAreauserid());
+        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"));
+        }
 
+        List<Long> accountids = Arrays.stream(param.getAccountids().split(","))
+                .map(Long::valueOf)
+                .collect(Collectors.toList());
+        if (CollectionUtils.isNotEmpty(accountids)) {
+            for (Long id : accountids) {
+                Logintaaccount lt = new Logintaaccount();
+                lt.setAccountid(id);
+                lt.setLoginid(la.getLoginid());
+                lt.setModifierid(systemmanager.getAutoid());
+                lt.setModifytime(new Date());
+                iLogintaaccountMapper.insert(lt);
+            }
+        }
+        writelog(la, systemmanager, SysConstants.BUTTON_CODE_ADD);
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
+    }
 
+    @Override
+    public AjaxResult<InitAddResult> initAdd(HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        InitAddResult result = new InitAddResult();
+        List<Taaccount> list = iTaaccountMapper.selectList(new QueryWrapper<Taaccount>()
+                .eq("tradestatus", 1)
+                .and(a -> a.eq("userid", systemmanager.getAreauserid()).or().eq("relateduserid", systemmanager.getAreauserid())));
+        result.setTaaccounts(list);
+        result.setLoginid(getNewLoginIdByUserid(systemmanager.getAreauserid(), 2));
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), result);
+    }
 
-        return null;
+    private Long getNewLoginIdByUserid(Long userid, int type) {
+        if (type == 1) {
+            //投资者
+            //生成投资者时会初始化一个登录账户 后面的直接 +1
+            Long userid_ = iLoginaccountMapper.selectOne(new QueryWrapper<Loginaccount>()
+                    .eq("userid", userid)
+                    .select("loginid").orderByDesc("loginid").
+                    last("limit 1")).getLoginid();
+            if (userid_.toString().length() == 14) {
+                return Long.valueOf(userid_ + "01");
+            }
+            return userid_ + 1;
+        } else {
+            //机构
+            Map<String, Object> map = new HashMap<>();
+            map.put("userid", userid);
+            map.put("loginusertype", 2);
+            Long count = iLoginaccountMapper.selectCount(new QueryWrapper<Loginaccount>()
+                    .eq("userid", userid)
+                    .eq("loginusertype", 2)
+            );
+            return Long.valueOf("1" + userid.toString() + CommonUtil.addZero(String.valueOf((count + 1)), 7));
+        }
     }
 
     private void writelog(Loginaccount la, Systemmanager opeartion, String button_code) {

+ 475 - 0
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/WarehouseServiceImpl.java

@@ -0,0 +1,475 @@
+package com.muchinfo.mtp3century.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.muchinfo.mtp3century.service.ICommonService;
+import com.muchinfo.mtp3century.service.IWarehouseService;
+import com.muchinfo.mtp3common.enumtype.Constants;
+import com.muchinfo.mtp3common.enumtype.MessageType;
+import com.muchinfo.mtp3common.enumtype.SysConstants;
+import com.muchinfo.mtp3common.utils.DateTimeUtils;
+import com.muchinfo.mtp3common.vo.AjaxResult;
+import com.muchinfo.mtp3common.vo.PageResult;
+import com.muchinfo.mtp3interface.mapper.*;
+import com.muchinfo.mtp3pojos.entity.*;
+import com.muchinfo.mtp3common.utils.SerialNumberUtils;
+import com.muchinfo.mtp3pojos.vo.LineTreeNode;
+import com.muchinfo.mtp3pojos.vo.common.OrganSelectResult;
+import com.muchinfo.mtp3pojos.vo.warehouse.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.*;
+
+@Service
+public class WarehouseServiceImpl implements IWarehouseService {
+    private final Logger log = LoggerFactory.getLogger(this.getClass());
+    @Resource
+    private ICommonService iCommonService;
+    @Resource
+    private ISystemmanagerMapper iSystemmanagerMapper;
+    @Resource
+    private IWroutinapplyMapper iWroutinapplyMapper;
+    @Resource
+    private IWrstandardMapper iWrstandardMapper;
+    @Resource
+    private IWroutinexpressMapper iWroutinexpressMapper;
+    @Resource
+    private IWroutindetailMapper iWroutindetailMapper;
+    @Resource
+    private IDgfactoryitemtypeMapper iDgfactoryitemtypeMapper;
+    @Resource
+    private IWroutinfactorydetailMapper iWroutinfactorydetailMapper;
+    @Resource
+    private IDgfactoryitemMapper iDgfactoryitemMapper;
+    @Resource
+    private IEnumdicitemMapper iEnumdicitemMapper;
+    @Resource
+    private IDeliverygoodsMapper iDeliverygoodsMapper;
+    @Resource
+    private IWarehouseinfoMapper iWarehouseinfoMapper;
+    @Resource
+    private IDivisionMapper iDivisionMapper;
+    @Resource
+    private IWrstandardfactoryitemMapper iWrstandardfactoryitemMapper;
+    @Resource
+    private IWrholdlbMapper iWrholdlbMapper;
+
+
+    @Override
+    public PageResult<WarehouseQueryResult> query(WarehouseQueryParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        if (systemmanager.getReletype().intValue() != SysConstants.SYS_TYPE_MANAGE) {
+            param.setUserid(systemmanager.getAreauserid());
+        }
+        if ((param.getApplytype() == 3 || param.getApplytype() == 4) && param.getFlag() != 0) {
+            param.setApplystatus(param.getFlag());
+        }
+        IPage<WarehouseQueryResult> page = new Page<>(param.getPageNum(), param.getPageSize());
+        IPage<WarehouseQueryResult> userAccountVos = iWroutinapplyMapper.queryWROutInApplyPage(page, param);
+        PageResult<WarehouseQueryResult> 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<WarehouseDetailResult> queryDetail(String applyid, HttpServletRequest request) {
+        WarehouseDetailResult result = new WarehouseDetailResult();
+        WarehouseQueryParam param = new WarehouseQueryParam();
+        param.setApplyid(applyid);
+        List<WarehouseQueryResult> userAccountVos = iWroutinapplyMapper.queryWROutInApplyPage(param);
+        BeanUtils.copyProperties(userAccountVos.get(0), result);
+
+        result.setWrstandard(iWrstandardMapper.selectOne(new QueryWrapper<Wrstandard>().eq("WRSTANDARDID", result.getWrstandardid())));
+        Wroutinexpress wrOutInExpress = iWroutinexpressMapper.selectOne(new QueryWrapper<Wroutinexpress>().eq("WRSTANDARDID", result.getWrstandardid()));
+        Wroutindetail wrOutInDetail = iWroutindetailMapper.selectOne(new QueryWrapper<Wroutindetail>().eq("WRSTANDARDID", result.getWrstandardid()));
+        HashMap<Long, String> map = new HashMap<>();
+
+        List<Dgfactoryitemtype> dgFactoryItemTypes = iDgfactoryitemtypeMapper.selectList(new QueryWrapper<Dgfactoryitemtype>().eq("deliverygoodsid", result.getDeliverygoodsid()));
+        if (CollectionUtils.isNotEmpty(dgFactoryItemTypes)) {
+            for (Dgfactoryitemtype dGFactoryItemType : dgFactoryItemTypes) {
+                map.put(dGFactoryItemType.getDgfactoryitemtypeid(), dGFactoryItemType.getItemtypename());
+            }
+        }
+
+        List<Wroutinfactorydetail> wrOutInFactoryDetails = iWroutinfactorydetailMapper.selectList(new QueryWrapper<Wroutinfactorydetail>().eq("applyid", param.getApplyid()));
+        if (CollectionUtils.isNotEmpty(wrOutInFactoryDetails)) {
+            for (Wroutinfactorydetail wROutInFactoryDetail : wrOutInFactoryDetails) {
+                if (wROutInFactoryDetail.getItemtypemode() == 1 && StringUtils.isNotBlank(wROutInFactoryDetail.getTypevalue())) {
+                    Dgfactoryitem dgfi = iDgfactoryitemMapper.selectOne(new QueryWrapper<Dgfactoryitem>()
+                            .eq("dgfactoryitemtypeid", wROutInFactoryDetail.getTypeid())
+                            .eq("dgfactoryitemid", Long.valueOf(wROutInFactoryDetail.getTypevalue())));
+                    if (dgfi != null) {
+                        wROutInFactoryDetail.setTypevaluename(dgfi.getDgfactoryitemvalue());
+                    }
+                    if (wROutInFactoryDetail.getTypevalue2() != null) {
+                        if (!wROutInFactoryDetail.getTypevalue().equals(wROutInFactoryDetail.getTypevalue2())) {
+                            wROutInFactoryDetail.setIssame(0);
+                        }
+                        Dgfactoryitem dgfi2 = iDgfactoryitemMapper.selectOne(new QueryWrapper<Dgfactoryitem>()
+                                .eq("dgfactoryitemtypeid", wROutInFactoryDetail.getTypeid())
+                                .eq("dgfactoryitemid", Long.valueOf(wROutInFactoryDetail.getTypevalue2())));
+                        if (dgfi2 != null) {
+                            wROutInFactoryDetail.setTypevaluename2(dgfi2.getDgfactoryitemvalue());
+                        }
+                    }
+                } else {
+                    Dgfactoryitemtype dgfit = iDgfactoryitemtypeMapper.selectOne(new QueryWrapper<Dgfactoryitemtype>().eq("dgfactoryitemtypeid", wROutInFactoryDetail.getTypeid()));
+                    Enumdicitem enumDicItem = iEnumdicitemMapper.selectOne(new QueryWrapper<Enumdicitem>()
+                            .eq("enumitemname", dgfit.getUnitid())
+                            .eq("enumdiccode", "goodsunit"));
+                    if (enumDicItem != null) {
+                        wROutInFactoryDetail.setUnitname(enumDicItem.getEnumdicname());
+                    }
+                    if (wROutInFactoryDetail.getTypevalue2() != null) {
+                        if (!wROutInFactoryDetail.getTypevalue().equals(wROutInFactoryDetail.getTypevalue2())) {
+                            wROutInFactoryDetail.setIssame(0);
+                        }
+                    }
+                }
+
+                wROutInFactoryDetail.setTypename(map.get(wROutInFactoryDetail.getTypeid()));
+            }
+        }
+        result.setWrOutInDetail(wrOutInDetail);
+        result.setWroutinexpress(wrOutInExpress);
+        result.setWrOutInFactoryDetails(wrOutInFactoryDetails);
+        HashMap<Long, String> map2 = new HashMap<>();
+        List<Systemmanager> systemManagers = iSystemmanagerMapper.selectList(new QueryWrapper<Systemmanager>().eq("managertype", 1));
+        if (CollectionUtils.isNotEmpty(systemManagers)) {
+            for (Systemmanager systemManager : systemManagers) {
+                map2.put(systemManager.getAutoid(), systemManager.getUsername());
+            }
+        }
+        result.setCreatorname(map2.get(result.getCreatorid()));
+        result.setFirstauditname(map2.get(result.getFirstauditid()));
+        result.setSecondauditname(map2.get(result.getSecondauditid()));
+        result.setFirstauditname2(map2.get(result.getFirstauditid2()));
+        result.setSecondauditname2(map2.get(result.getSecondauditid2()));
+
+        Deliverygoods deliveryGoods = iDeliverygoodsMapper.selectOne(new QueryWrapper<Deliverygoods>().eq("deliverygoodsid", result.getDeliverygoodsid()));
+        result.setDeliverygoodsname(deliveryGoods.getDeliverygoodsname());
+
+        Warehouseinfo byProerties = iWarehouseinfoMapper.selectOne(new QueryWrapper<Warehouseinfo>().eq("autoid", result.getWarehouseid()));
+        if (byProerties != null) {
+            result.setWarehousename(byProerties.getWarehousename());
+        }
+        if (result.getApplytype() == 2 || result.getApplytype() == 4) {
+            List<Division> divisions = iDivisionMapper.selectList(new QueryWrapper<>());
+            HashMap<Long, String> map3 = new HashMap<>();
+            if (CollectionUtils.isNotEmpty(divisions)) {
+                for (Division divisiono : divisions) {
+                    map3.put(divisiono.getAutoid(), divisiono.getDivisionname());
+                }
+            }
+            String address = null;
+            if (result.getProvinceid() != null && result.getProvinceid() != 0 &&
+                    result.getCityid() != null && result.getCityid() != 0 &&
+                    result.getDistrictid() != null && result.getDistrictid() != 0) {
+                address = map3.get(result.getProvinceid()) + map3.get(result.getCityid()) +
+                        map3.get(result.getDistrictid()) + result.getAddress();
+            } else if (byProerties != null) {
+                address = byProerties.getCountrystr() + (StringUtils.isNotEmpty(byProerties.getCitystr()) ? byProerties.getCitystr() : "")
+                        + (StringUtils.isNotEmpty(result.getAddress()) ? result.getAddress() : byProerties.getAddress());
+            }
+            result.setAddressinfo(address);
+        }
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), result);
+    }
+
+    @Override
+    public AjaxResult<LineTreeNode> warehouseTree(Long categoryid, HttpServletRequest request) {
+        List<LineTreeNode> allNode = new ArrayList<>();
+        String p = iCommonService.getSystemParam(Constants.REDIS_HEADER_SYSPARAM, SysConstants.SYSPAMA_CODE_WRCATEGORY_LEVEL);
+        if (categoryid == null) {
+            categoryid = 0L;
+        }
+        if ("0".equals(p)) {
+            List<Deliverygoods> dgList = iDeliverygoodsMapper.selectList(new QueryWrapper<Deliverygoods>().eq("isvalid", 1));
+            for (Deliverygoods d : dgList) {
+                LineTreeNode node = new LineTreeNode();
+                node.setId(d.getDeliverygoodsid().toString());
+                node.setPid(d.getCategoryid() == null ? null : d.getCategoryid().toString());
+                node.setName(d.getDeliverygoodsname());
+                node.setNodeType("1");
+                node.setObjs(d);
+                allNode.add(node);
+            }
+        } else {
+            //查询分类
+            List<Wrcategory> categoryList = iWroutinapplyMapper.loadWRCategoryGoodsTree(categoryid);
+            //查询品种
+            List<Deliverygoods> dgList = iDeliverygoodsMapper.selectList(new QueryWrapper<Deliverygoods>().eq("isvalid", 1));
+            for (Wrcategory ca : categoryList) {
+                LineTreeNode node = new LineTreeNode();
+                node.setId(ca.getCategoryid().toString());
+                node.setPid(ca.getParentcategoryid() == null ? "0" : ca.getParentcategoryid().toString());
+                node.setName(ca.getCategoryname());
+                node.setNodeType("1");
+                node.setObjs(ca);
+                allNode.add(node);
+                //获取品种
+                List<LineTreeNode> gpchildren = getChildren(dgList, ca.getCategoryid());
+                if (CollectionUtils.isNotEmpty(gpchildren)) {
+                    //添加品种
+                    allNode.addAll(gpchildren);
+                }
+            }
+        }
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), allNode);
+    }
+
+    @Override
+    public AjaxResult<Dgfactoryitemtype> querydgfactory(Long wrstandardid, HttpServletRequest request) {
+        Wrstandard ws = iWrstandardMapper.selectOne(new QueryWrapper<Wrstandard>().eq("wrstandardid", wrstandardid));
+        // 品种要素项表
+        List<Dgfactoryitemtype> dgfitlist = iDgfactoryitemtypeMapper.selectList(new QueryWrapper<Dgfactoryitemtype>().eq("deliverygoodsid", ws.getDeliverygoodsid()));
+        for (int i = 0; i < dgfitlist.size(); i++) {
+            Dgfactoryitemtype dgfit = dgfitlist.get(i);
+            if (dgfit.getItemtypemode() == 2) {
+                double num = Math.pow(10, dgfit.getMinivaluedp());
+                dgfit.setMinivalue2(BigDecimal.valueOf(dgfit.getMinivalue().doubleValue()).divide(new BigDecimal(num)).setScale(2, RoundingMode.HALF_UP));
+
+                Enumdicitem enumDicItem = iEnumdicitemMapper.selectOne(new QueryWrapper<Enumdicitem>()
+                        .eq("enumitemname", dgfit.getUnitid())
+                        .eq("enumdiccode", "goodsunit"));
+                dgfit.setUnitname(enumDicItem.getEnumdicname());
+            }
+            Long deliverygoodsid;
+            if (dgfit.getItemtypemode() == 3) {
+                deliverygoodsid = 0L;
+            } else {
+                deliverygoodsid = ws.getDeliverygoodsid();
+            }
+            // 品种选择项定义
+            List<Dgfactoryitem> dgfilist = iDgfactoryitemMapper.selectList(new QueryWrapper<Dgfactoryitem>()
+                    .eq("deliverygoodsid", deliverygoodsid)
+                    .eq("dgfactoryitemtypeid", dgfit.getDgfactoryitemtypeid()));
+            for (int j = 0; j < dgfilist.size(); j++) {
+                Dgfactoryitem dgfi = dgfilist.get(j);
+                Wrstandardfactoryitem wrsfi = iWrstandardfactoryitemMapper.selectOne(new QueryWrapper<Wrstandardfactoryitem>()
+                        .eq("wrstandardid", wrstandardid)
+                        .eq("dgfactoryitemtypeid", dgfit.getDgfactoryitemtypeid())
+                        .eq("dgfactoryitemid", dgfi.getDgfactoryitemid()));
+                if (wrsfi == null) {
+                    dgfi.setIschecked(0);
+                } else {
+                    dgfi.setIschecked(1);
+                    if (dgfit.getItemtypemode() == 3) {
+                        dgfit.setTypevalue(dgfi.getDgfactoryitemvalue());
+                    }
+                }
+
+            }
+
+            dgfit.setDgfilist(dgfilist);
+        }
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), dgfitlist);
+    }
+
+    @Override
+    public AjaxResult wrInApply(WarehouseInAddParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        String sm = iCommonService.getSysparmById(SysConstants.SYSPAMA_CODE_CANGDANWRIN);
+        Wroutinapply wroutinapply = new Wroutinapply();
+        wroutinapply.setWrstandardid(param.getWrstandardid());
+        wroutinapply.setWarehouseid(param.getWarehouseid());
+        wroutinapply.setWrstandardcode(param.getWrstandardcode());
+        wroutinapply.setDeliverygoodsid(param.getDeliverygoodsid());
+        wroutinapply.setUserid(param.getUserid());
+        wroutinapply.setAccountid(param.getAccountid());
+        wroutinapply.setMobile(param.getMobile());
+        wroutinapply.setInqty(param.getInqty());
+        wroutinapply.setAppointmentremark(param.getAppointmentremark());
+        wroutinapply.setAppointmentmodel(param.getAppointmentmodel());
+        if ("5".equals(sm)) {
+            wroutinapply.setApplytype(3);
+            wroutinapply.setApplystatus(5);
+            wroutinapply.setApplystatus2(2);
+            wroutinapply.setInrealqty(param.getInqty());
+            wroutinapply.setFirstauditid(systemmanager.getAutoid());
+            wroutinapply.setFirstaudittime(new Date());
+            wroutinapply.setSecondauditid(systemmanager.getAutoid());
+            wroutinapply.setSecondaudittime(new Date());
+        } else {
+            wroutinapply.setApplystatus(1);
+            wroutinapply.setApplytype(1);
+        }
+        wroutinapply.setCreatorid(systemmanager.getAutoid());
+        wroutinapply.setCreatetime(new Date());
+        wroutinapply.setApplytime(new Date());
+        if (StringUtils.isNotBlank(param.getAppointmentdatestr())) {
+            try {
+                wroutinapply.setAppointmentdate(DateTimeUtils.parseDate(param.getAppointmentdatestr()));
+            } catch (Exception e) {
+                log.error("wrInApply 时间格式转换失败");
+            }
+        }
+        Long applyid = SerialNumberUtils.getSerialNumber(SerialNumberUtils.prefix_wroutin);
+        wroutinapply.setApplyid(applyid);
+        iWroutinapplyMapper.insert(wroutinapply);
+        List<Wroutinfactorydetail> wrOutInFactoryDetails = param.getWrOutInFactoryDetails();
+        if (CollectionUtils.isNotEmpty(wrOutInFactoryDetails)) {
+            for (Wroutinfactorydetail wROutInFactoryDetailo : wrOutInFactoryDetails) {
+                wROutInFactoryDetailo.setApplyid(applyid);
+                wROutInFactoryDetailo.setTypevalue2(wROutInFactoryDetailo.getTypevalue());
+                iWroutinfactorydetailMapper.insert(wROutInFactoryDetailo);
+            }
+        }
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
+    }
+
+    @Override
+    public AjaxResult queryUserList(HttpServletRequest request) {
+        List<OrganSelectResult> results = iWroutinapplyMapper.queryUserList();
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), results);
+    }
+
+    @Override
+    public AjaxResult querywslist(Long userid, HttpServletRequest request) {
+        List<WslistQueryResult> results = iWroutinapplyMapper.querywslist(userid);
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), results);
+    }
+
+    @Override
+    public AjaxResult querywhlist(Long userid, Long wrstandardid, HttpServletRequest request) {
+        List<WhlistQueryResult> results = iWroutinapplyMapper.querywhlist(userid,wrstandardid);
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), results);
+    }
+
+    @Override
+    public AjaxResult<WrHoldLBResult> queryWRHoldLB(WrHoldLBParam param, HttpServletRequest request) {
+        List<WrHoldLBResult> results = iWroutinapplyMapper.queryWRHoldLB(param);
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), results);
+    }
+
+    @Override
+    public AjaxResult wrOutApply(WarehouseOutAddParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        String sm = iCommonService.getSysparmById(SysConstants.SYSPAMA_CODE_CANGDANWROUT);
+        Wroutinapply vo = new Wroutinapply();
+        if ("5".equals(sm)) {
+            vo.setApplytype(4);
+            vo.setApplystatus(5);
+            vo.setApplystatus2(2);
+            vo.setInrealqty(vo.getInqty());
+            vo.setFirstauditid(systemmanager.getAutoid());
+            vo.setFirstaudittime(new Date());
+            vo.setSecondauditid(systemmanager.getAutoid());
+            vo.setSecondaudittime(new Date());
+        }else{
+            vo.setApplystatus(1);
+            vo.setApplytype(2);
+        }
+
+        vo.setCreatorid(systemmanager.getAutoid());
+        vo.setCreatetime(new Date());
+        vo.setApplytime(new Date());
+
+        if (StringUtils.isNotBlank(param.getAppointmentdatestr())) {
+            try {
+                vo.setAppointmentdate(DateTimeUtils.parseDate(param.getAppointmentdatestr()));
+            } catch (Exception e) {
+                log.error("wrInApply 时间格式转换失败");
+            }
+        }
+
+        Long applyid = SerialNumberUtils.getSerialNumber(SerialNumberUtils.prefix_wroutin);
+        vo.setApplyid(applyid);
+        Wrstandard wr = iWrstandardMapper.selectOne(new QueryWrapper<Wrstandard>().eq("wrstandardid",param.getWrstandardid()));
+        vo.setWrstandardcode(wr.getWrstandardcode());
+        vo.setDeliverygoodsid(wr.getDeliverygoodsid());
+        Integer inqty = 0;
+        List<WrHoldLBResult> wrHoldLBs = param.getResultList();
+        if(CollectionUtils.isNotEmpty(wrHoldLBs)){
+            for (WrHoldLBResult wrHoldLBo : wrHoldLBs) {
+                inqty += wrHoldLBo.getOutqty();
+                Wroutindetail wd = new Wroutindetail();
+                wd.setApplyid(applyid);
+                wd.setLadingbillid(Long.valueOf(wrHoldLBo.getLadingbillid()));
+                wd.setSubnum(wrHoldLBo.getSubnum());
+                wd.setQty(Long.valueOf(wrHoldLBo.getQty()));
+                wd.setOutqty(Long.valueOf(wrHoldLBo.getOutqty()));
+                wd.setCreatorid(vo.getCreatorid());
+                wd.setUpdatorid(vo.getCreatorid());
+                if (wrHoldLBo.getWrfactortypeid() != null) {
+                    wd.setWrfactortypeid(wrHoldLBo.getWrfactortypeid());
+                }
+                else {
+                    Wrholdlb wrHoldLB = iWrholdlbMapper.selectOne(new QueryWrapper<Wrholdlb>()
+                            .eq("ladingbillid", wrHoldLBo.getLadingbillid())
+                            .eq("subnum", wrHoldLBo.getSubnum()));
+                    wd.setWrfactortypeid(wrHoldLB.getWrfactortypeid());
+                    wd.setQty(wrHoldLB.getQty());
+                }
+                //跳过初审阶段时,赋值实际出库量
+                if ("5".equals(sm)) {
+                    wd.setOutrealqty(Long.valueOf(wrHoldLBo.getOutqty()));
+                    iWroutindetailMapper.insert(wd);
+                }else{
+                    iWroutindetailMapper.insert(wd);
+                }
+            }
+        }
+        vo.setInqty(Long.valueOf(inqty));
+        if ("5".equals(sm)) {
+            vo.setInrealqty(vo.getInqty());
+        }
+
+        iWroutinapplyMapper.insert(vo);
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
+    }
+
+    @Override
+    public PageResult<WarehouseReceiptResult> receiptquery(WarehouseReceiptParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        if (!SysConstants.SYS_TYPE_MANAGE.equals(systemmanager.getReletype())){	//如果不是平台管理员
+            param.setAreauserid(systemmanager.getAreauserid());
+        }
+        param.setWarehousecode(param.getWarehousecode() == null ? null : param.getWarehousecode().trim());
+        param.setAreaname(param.getAreaname() == null ? null : param.getAreaname().trim());
+        IPage<WarehouseReceiptResult> page = new Page<>(param.getPageNum(), param.getPageSize());
+        IPage<WarehouseReceiptResult> userAccountVos = iWroutinapplyMapper.receiptquery(page, param);
+        PageResult<WarehouseReceiptResult> 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;
+    }
+
+    private List<LineTreeNode> getChildren(List<Deliverygoods> dgList, Long categoryid) {
+        List<LineTreeNode> tnlist = new ArrayList<>();
+        for (Deliverygoods dg : dgList) {
+            if (Objects.equals(dg.getCategoryid(), categoryid)) {
+                LineTreeNode child = new LineTreeNode();
+                child.setId(dg.getCategoryid() + "_" + dg.getDeliverygoodsid());
+                child.setPid(String.valueOf(dg.getCategoryid()));
+                child.setNodeType("2");
+                child.setName(dg.getDeliverygoodsname());
+                child.setObjs(dg);
+                tnlist.add(child);
+            }
+        }
+        return tnlist;
+    }
+
+}

+ 0 - 9
mtp3-century/src/main/java/com/muchinfo/mtp3century/utils/RedisServiceUtil.java

@@ -260,15 +260,6 @@ public class RedisServiceUtil {
         return redisTemplate.opsForHash().delete(key, hKey) > 0;
     }
 
-    /**
-     * 获得缓存的基本对象列表
-     *
-     * @param pattern 字符串前缀
-     * @return 对象列表
-     */
-    public Collection<String> keys(final String pattern) {
-        return redisTemplate.keys(pattern);
-    }
 
     public byte[] getBytes(String string) {
         RedisConnection redisConn = null;

+ 233 - 0
mtp3-century/src/main/resources/mapper/CptradePositionapplyMapper.xml

@@ -0,0 +1,233 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.muchinfo.mtp3interface.mapper.ICptradePositionapplyMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.muchinfo.mtp3pojos.entity.CptradePositionapply">
+        <id column="APPLYID" property="applyid" />
+        <result column="USERID" property="userid" />
+        <result column="ACCOUNTID" property="accountid" />
+        <result column="WRSTANDARDID" property="wrstandardid" />
+        <result column="GOODSID" property="goodsid" />
+        <result column="WRQTY" property="wrqty" />
+        <result column="GOODSQTY" property="goodsqty" />
+        <result column="APPLYSTATUS" property="applystatus" />
+        <result column="HANDLESTATUS" property="handlestatus" />
+        <result column="APPLYTIME" property="applytime" />
+        <result column="APPLYREMARK" property="applyremark" />
+        <result column="CREATORID" property="creatorid" />
+        <result column="CREATETIME" property="createtime" />
+        <result column="FIRSTAUDITID" property="firstauditid" />
+        <result column="FIRSTAUDITTIME" property="firstaudittime" />
+        <result column="FIRSTREMARK" property="firstremark" />
+        <result column="SECONDAUDITID" property="secondauditid" />
+        <result column="SECONDAUDITTIME" property="secondaudittime" />
+        <result column="SECONDREMARK" property="secondremark" />
+        <result column="CLIENTTICKET" property="clientticket" />
+        <result column="TRADEDATE" property="tradedate" />
+        <result column="MARKETID" property="marketid" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        APPLYID, USERID, ACCOUNTID, WRSTANDARDID, GOODSID, WRQTY, GOODSQTY, APPLYSTATUS, HANDLESTATUS, APPLYTIME, APPLYREMARK, CREATORID, CREATETIME, FIRSTAUDITID, FIRSTAUDITTIME, FIRSTREMARK, SECONDAUDITID, SECONDAUDITTIME, SECONDREMARK, CLIENTTICKET, TRADEDATE, MARKETID
+    </sql>
+
+    <select id="queryForward" parameterType="com.muchinfo.mtp3pojos.vo.presale.ForwardOrderApplyParam" resultType="com.muchinfo.mtp3pojos.vo.presale.ForwardOrderApplyResult">
+        select t.*,
+        m.marketname,
+        g.goodscode,
+        g.goodsname,
+        g.deliveryflag,
+        w.wrstandardcode,
+        w.wrstandardname,
+        d.deliverygoodscode,
+        d.deliverygoodsname,
+        u.customername username,
+        s.username firstauditname,
+        sm.username secondauditname
+        from CPTrade_PositionApply t
+        left join market m on t.marketid = m.marketid
+        left join goods g on t.goodsid = g.goodsid
+        left join wrstandard w on t.wrstandardid = w.wrstandardid
+        left join deliverygoods d on w.deliverygoodsid = d.deliverygoodsid
+        left join userinfo u on t.userid = u.userid
+        left join systemmanager s on t.firstauditid = s.autoid
+        left join systemmanager sm on t.secondauditid = sm.autoid
+        <where>
+            <if test="vo.applyid != null and vo.applyid != ''">
+                and (t.applyid like '%'||#{vo.applyid}||'%')
+            </if>
+            <if test="vo.deliverygoodsname != null and vo.deliverygoodsname != ''">
+                and ((d.deliverygoodscode like '%'||#{vo.deliverygoodsname}||'%')
+                or(d.deliverygoodsname like '%'||#{vo.deliverygoodsname}||'%'))
+            </if>
+            <if test="vo.username != null and vo.username != ''">
+                and ((t.userid like '%'||#{vo.username}||'%')
+                or(u.customername like '%'||#{vo.username}||'%'))
+            </if>
+            <if test="vo.marketname != null and vo.marketname != ''">
+                and ((m.marketname like '%'||#{vo.marketname}||'%')
+                or(m.marketid like '%'||#{vo.marketname}||'%'))
+            </if>
+            <if test="vo.goodsname != null and vo.goodsname != ''">
+                and ((g.goodscode like '%'||#{vo.goodsname}||'%')
+                or(g.goodsname like '%'||#{vo.goodsname}||'%'))
+            </if>
+            <if test="vo.applytimestr != null and vo.applytimestr != ''">
+                and t.applytime &gt;= to_date(#{vo.applytimestr}||',00:00:00','yyyyMMdd,hh24:mi:ss')
+                and t.applytime &lt;= to_date(#{vo.applytimestr}||',23:59:59','yyyyMMdd,hh24:mi:ss')
+            </if>
+            <if test="vo.applystatus != null">
+                and t.applystatus = #{vo.applystatus}
+            </if>
+            <if test="vo.userid != null">
+                and t.userid = #{vo.userid}
+            </if>
+        </where>
+        order by t.applytime desc
+    </select>
+
+    <select id="queryOrder" parameterType="com.muchinfo.mtp3pojos.vo.presale.ForwardOrderQueryParam" resultType="com.muchinfo.mtp3pojos.vo.presale.ForwardOrderQueryResult">
+        select t.*,
+        m.marketname,
+        g.goodscode,
+        g.goodsname,
+        g.deliveryflag,
+        w.wrstandardcode,
+        w.wrstandardname,
+        d.deliverygoodscode,
+        d.deliverygoodsname,
+        u.customername username,
+        least((nvl(t.inqty,0)- nvl(t.deliveryqty,0) - nvl(t.cancelqty,0) - nvl(t.curpresaleqty,0) - nvl(t.presaledqty,0)),
+        (nvl(tp.buycurpositionqty,0) - nvl(tp.buyfrozenqty,0)))  canqty
+        from CPTrade_UserGoodsData t
+        left join market m on t.marketid = m.marketid
+        left join goods g on t.goodsid = g.goodsid
+        left join wrstandard w on t.wrstandardid = w.wrstandardid
+        left join deliverygoods d on w.deliverygoodsid = d.deliverygoodsid
+        left join userinfo u on t.userid = u.userid
+        left join tradeposition tp on t.accountid = tp.accountid and t.goodsid = tp.goodsid
+        <where>
+            <if test="vo.username != null and vo.username != ''">
+                and ((t.userid like '%'||#{vo.username}||'%')
+                or(u.customername like '%'||#{vo.username}||'%'))
+            </if>
+            <if test="vo.marketname != null and vo.marketname != ''">
+                and ((m.marketname like '%'||#{vo.marketname}||'%')
+                or(m.marketid like '%'||#{vo.marketname}||'%'))
+            </if>
+            <if test="vo.goodsname != null and vo.goodsname != ''">
+                and ((g.goodscode like '%'||#{vo.goodsname}||'%')
+                or(g.goodsname like '%'||#{vo.goodsname}||'%'))
+            </if>
+            <if test="vo.accountid != null and vo.accountid != ''">
+                and (t.accountid like '%'||#{vo.accountid}||'%')
+            </if>
+            <if test="vo.userid != null">
+                and t.userid = #{vo.userid}
+            </if>
+        </where>
+        order by t.accountid,t.goodsid
+    </select>
+
+    <select id="queryCancelApply" parameterType="com.muchinfo.mtp3pojos.vo.presale.ForwardCancelApplyParam"  resultType="com.muchinfo.mtp3pojos.vo.presale.ForwardCancelApplyResult">
+        select t.*,
+        m.marketname,
+        g.goodscode,
+        g.goodsname,
+        g.deliveryflag,
+        u.customername username,
+        s.username firstauditname,
+        sm.username secondauditname,
+        ssm.username creatorname,
+        dg.deliverygoodscode,
+        dg.deliverygoodsname,
+        least((ug.inqty - ug.cancelqty - ug.deliveryqty -ug.curpresaleqty),
+        (tp.buycurpositionqty-tp.buyfrozenqty-tp.buyotherfrozenqty)) canrealqty,
+        ei.enumdicname
+        from CPTrade_PositionCancel t
+        left join market m on t.marketid = m.marketid
+        left join goods g on t.goodsid = g.goodsid
+        left join userinfo u on t.userid = u.userid
+        left join systemmanager s on t.firstauditid = s.autoid
+        left join systemmanager sm on t.secondauditid = sm.autoid
+        left join systemmanager ssm on t.creatorid = ssm.autoid
+        left join CPTrade_UserGoodsData ug on t.goodsid = ug.goodsid and t.accountid = ug.accountid
+        left join tradeposition tp on ug.accountid = tp.accountid and ug.goodsid = tp.goodsid
+        left join wrstandard wr on ug.wrstandardid = wr.wrstandardid
+        left join deliverygoods dg on wr.deliverygoodsid = dg.deliverygoodsid
+        left join enumdicitem ei on ei.enumitemname = wr.unitid and ei.enumdiccode='goodsunit'
+        <where>
+            <if test="vo.cancelid != null and vo.cancelid != ''">
+                and (t.cancelid like '%'||#{vo.cancelid}||'%')
+            </if>
+            <if test="vo.username != null and vo.username != ''">
+                and ((t.userid like '%'||#{vo.username}||'%')
+                or(u.customername like '%'||#{vo.username}||'%'))
+            </if>
+            <if test="vo.marketname != null and vo.marketname != ''">
+                and ((m.marketname like '%'||#{vo.marketname}||'%')
+                or(m.marketid like '%'||#{vo.marketname}||'%'))
+            </if>
+            <if test="vo.goodsname != null and vo.goodsname != ''">
+                and ((g.goodscode like '%'||#{vo.goodsname}||'%')
+                or(g.goodsname like '%'||#{vo.goodsname}||'%'))
+            </if>
+            <if test="vo.deliverygoodsname != null and vo.deliverygoodsname != ''">
+                and ((dg.deliverygoodscode like '%'||#{vo.deliverygoodsname}||'%')
+                or(dg.deliverygoodsname like '%'||#{vo.deliverygoodsname}||'%'))
+            </if>
+            <if test="vo.applytimestr != null and vo.applytimestr != ''">
+                and t.applytime &gt;= to_date(#{vo.applytimestr}||',00:00:00','yyyyMMdd,hh24:mi:ss')
+                and t.applytime &lt;= to_date(#{vo.applytimestr}||',23:59:59','yyyyMMdd,hh24:mi:ss')
+            </if>
+            <if test="vo.applystatus != null">
+                and t.applystatus = #{vo.applystatus}
+            </if>
+            <if test="vo.userid != null">
+                and t.userid = #{vo.userid}
+            </if>
+        </where>
+        order by t.applytime desc
+    </select>
+
+    <select id="queryDRelation" resultType="com.muchinfo.mtp3pojos.vo.presale.ForwardAddOtherInit">
+        select
+            g.goodsid,
+            g.agreeunit,
+            dr.mindeliveryqty,
+            dr.rratio1,
+            dr.rratio2,
+            dr.deliverymode
+        from goods g,DeliveryRelation dr
+        where g.goodsid = dr.goodsid
+          and g.goodsid = #{goodsid}
+    </select>
+
+    <select id="cancelApplyAddInit" resultType="com.muchinfo.mtp3pojos.vo.presale.ForwardCancelApplyInit">
+        select t.*,
+        g.transferdepositratio,
+        least((t.inqty - t.cancelqty - t.deliveryqty - t.curpresaleqty),
+        (tp.buycurpositionqty - tp.buyfrozenqty - tp.buyotherfrozenqty)) canrealqty,
+        m.marketname,
+        g.goodscode,
+        g.goodsname,
+        g.deliveryflag,
+        g.decimalplace,
+        g.quoteminunit agreeunit,
+        decode(w.wrstandardid, null, 1, w.minivalue / power(10, w.minivaluedp)) minivalue,
+        nvl(w.unitid, g.goodunitid) unitid,
+        ei.enumdicname
+        from CPTrade_UserGoodsData t
+        left join market m on t.marketid = m.marketid
+        left join goods g on t.goodsid = g.goodsid
+        left join wrstandard w on t.wrstandardid = w.wrstandardid
+        left join enumdicitem ei on ei.enumitemname = w.unitid and ei.enumdiccode = 'goodsunit'
+        left join tradeposition tp on t.accountid = tp.accountid and t.goodsid = tp.goodsid
+        where t.accountid = #{accountid}
+        and m.trademode in (10,13,16,70,49)
+        and least((t.inqty - t.cancelqty - t.deliveryqty - t.curpresaleqty),
+        (tp.buycurpositionqty - tp.buyfrozenqty - tp.buyotherfrozenqty)) > 0
+    </select>
+</mapper>

+ 223 - 0
mtp3-century/src/main/resources/mapper/CptradePresalegoodsexMapper.xml

@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.muchinfo.mtp3interface.mapper.ICptradePresalegoodsexMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.muchinfo.mtp3pojos.entity.CptradePresalegoodsex">
+        <id column="GOODSID" property="goodsid" />
+        <result column="APPLYID" property="applyid" />
+        <result column="USERID" property="userid" />
+        <result column="ACCOUNTID" property="accountid" />
+        <result column="RELATEDGOODSID" property="relatedgoodsid" />
+        <result column="PRESALEQTY" property="presaleqty" />
+        <result column="STARTTIME" property="starttime" />
+        <result column="ENDTIME" property="endtime" />
+        <result column="ATTACHMENTURL" property="attachmenturl" />
+        <result column="PRESALEMODE" property="presalemode" />
+        <result column="MARKETID" property="marketid" />
+        <result column="REFPRICE" property="refprice" />
+        <result column="STARTPRICE" property="startprice" />
+        <result column="FLOORPRICE" property="floorprice" />
+        <result column="CREATETIME" property="createtime" />
+        <result column="TRADEDATE" property="tradedate" />
+        <result column="RELATEDMARKETID" property="relatedmarketid" />
+        <result column="PRESALEDQTY" property="presaledqty" />
+        <result column="PRESALEDAMOUNT" property="presaledamount" />
+        <result column="SELLSTATUS" property="sellstatus" />
+        <result column="GOODSDETAIL" property="goodsdetail" />
+        <result column="TRADEPRICE" property="tradeprice" />
+        <result column="BUYMAXQTY" property="buymaxqty" />
+        <result column="PRESALEDEPOSITALGORITHM" property="presaledepositalgorithm" />
+        <result column="PRESALEDEPOSITVALUE" property="presaledepositvalue" />
+        <result column="PRESALESTATUS" property="presalestatus" />
+        <result column="PICTUREURLS" property="pictureurls" />
+        <result column="BANNERPICURL" property="bannerpicurl" />
+        <result column="BASEQTY" property="baseqty" />
+        <result column="MAXBUYQTY" property="maxbuyqty" />
+        <result column="LOTTERYFLAG" property="lotteryflag" />
+        <result column="LOTTERYQTY" property="lotteryqty" />
+        <result column="LUCKYQTY" property="luckyqty" />
+        <result column="PLACEQTY" property="placeqty" />
+        <result column="HANDLESTATUS" property="handlestatus" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        GOODSID, APPLYID, USERID, ACCOUNTID, RELATEDGOODSID, PRESALEQTY, STARTTIME, ENDTIME, ATTACHMENTURL, PRESALEMODE, MARKETID, REFPRICE, STARTPRICE, FLOORPRICE, CREATETIME, TRADEDATE, RELATEDMARKETID, PRESALEDQTY, PRESALEDAMOUNT, SELLSTATUS, GOODSDETAIL, TRADEPRICE, BUYMAXQTY, PRESALEDEPOSITALGORITHM, PRESALEDEPOSITVALUE, PRESALESTATUS, PICTUREURLS, BANNERPICURL, BASEQTY, MAXBUYQTY, LOTTERYFLAG, LOTTERYQTY, LUCKYQTY, PLACEQTY, HANDLESTATUS
+    </sql>
+
+    <select id="query" parameterType="com.muchinfo.mtp3pojos.vo.presale.PresaleQueryParam"
+            resultType="com.muchinfo.mtp3pojos.vo.presale.PresaleQueryResult">
+        select t.*,
+        m.marketname,
+        gg.goodscode,
+        gg.goodsname,
+        gg.deliveryflag,
+        gg.goodsstatus,
+        g.goodscode relatedgoodscode,
+        g.goodsname relatedgoodsname,
+        gg.listingdate,
+        gg.lasttradedate,
+        u.customername username
+        from CPTrade_PresaleGoodsEx t
+        left join market m on t.marketid = m.marketid
+        left join goods g on t.relatedgoodsid = g.goodsid
+        left join goods gg on t.goodsid = gg.goodsid
+        left join userinfo u on t.userid = u.userid
+        left join taaccount ta on t.accountid = ta.accountid
+        <where>
+            <if test="vo.goodsid != null">
+                and t.goodsid = #{vo.goodsid}
+            </if>
+            <if test="vo.username != null and vo.username != ''">
+                and ((t.userid like '%'||#{vo.username}||'%')
+                or(u.customername like '%'||#{vo.username}||'%'))
+            </if>
+            <if test="vo.presalemode != null">
+                and t.presalemode = #{vo.presalemode}
+            </if>
+            <if test="vo.relatedgoodsname != null and vo.relatedgoodsname != ''">
+                and ((g.goodscode like '%'||#{vo.relatedgoodsname}||'%')
+                or(g.goodsname like '%'||#{vo.relatedgoodsname}||'%'))
+            </if>
+            <if test="vo.goodsstatus != null">
+                and gg.goodsstatus = #{vo.goodsstatus}
+            </if>
+            <if test="vo.applyid != null and vo.applyid != ''">
+                and (t.applyid like '%'||#{vo.applyid}||'%')
+            </if>
+            <if test="vo.starttime != null and vo.starttime != ''">
+                and t.starttime &gt;= to_date(#{vo.starttime}||',00:00:00','yyyyMMdd,hh24:mi:ss')
+                and t.starttime &lt;= to_date(#{vo.starttime}||',23:59:59','yyyyMMdd,hh24:mi:ss')
+            </if>
+            <if test="vo.endtime != null and vo.endtime != ''">
+                and t.endtime &gt;= to_date(#{vo.endtime}||',00:00:00','yyyyMMdd,hh24:mi:ss')
+                and t.endtime &lt;= to_date(#{vo.endtime}||',23:59:59','yyyyMMdd,hh24:mi:ss')
+            </if>
+            <if test="vo.areauserid != null">
+                and ta.relateduserid = #{vo.areauserid}
+            </if>
+        </where>
+        order by t.createtime desc
+    </select>
+
+    <select id="view" parameterType="java.lang.String" resultType="com.muchinfo.mtp3pojos.vo.presale.PresaleQueryDetailResult">
+        select t.*,
+        m.marketname,
+        gg.goodscode,
+        gg.goodsname,
+        gg.deliveryflag,
+        gg.goodsstatus,
+        g.goodscode relatedgoodscode,
+        g.goodsname relatedgoodsname,
+        gg.listingdate,
+        gg.lasttradedate,
+        u.customername username
+        from CPTrade_PresaleGoodsEx t
+        left join market m on t.marketid = m.marketid
+        left join goods g on t.relatedgoodsid = g.goodsid
+        left join goods gg on t.goodsid = gg.goodsid
+        left join userinfo u on t.userid = u.userid
+        left join taaccount ta on t.accountid = ta.accountid
+        <where>
+            <if test="applyid != null and applyid != ''">
+                and t.applyid = #{applyid}
+            </if>
+        </where>
+        order by t.createtime desc
+    </select>
+
+
+    <select id="viewPresaleLottery" parameterType="java.lang.Long"
+            resultType="com.muchinfo.mtp3pojos.vo.presale.PresalePresaleLotteryResult">
+        select wp.presaleapplyid,
+               wp.wrtradeorderid,
+               wp.drawlotnum,
+               wp.userid,
+               wp.accountid,
+               u.accountname
+        from WR_PresaleLottery wp
+                 left join useraccount u on wp.userid = u.userid
+        where wp.presaleapplyid = #{goodsid}
+          and wp.islucky = '1'
+        order by wp.drawlotnum
+    </select>
+
+    <select id="viewfinsh"  parameterType="java.lang.Long"
+            resultType="com.muchinfo.mtp3pojos.vo.presale.PresaleFinishResult">
+        select wp.presaleapplyid,
+               wp.buyuserid,
+               wp.buyaccountid,
+               u.accountname,
+               wp.placeqty,
+               wp.placestatus
+        from WR_PresalePlaceResult wp
+                 left join useraccount u on wp.buyuserid = u.userid
+        where wp.presaleapplyid = #{goodsid}
+        order by wp.createtime desc
+    </select>
+
+    <select id="queryUserList" parameterType="java.lang.Long"
+            resultType="com.muchinfo.mtp3pojos.vo.presale.PresaleFinishInitAddResult">
+        select u.userid,
+               o.accountname,
+               t.accountid
+        from userinfo u
+                 left join useraccount o on o.userid = u.userid
+                 left join taaccount t on o.userid = t.userid
+        where o.accountstatus = '4'
+          and u.userstatus = '1'
+          and u.usertype in (2)
+          and u.userid!=#{userid}
+          and o.userid in (select a.userid from AREAROLE a where a.roletype in ('6'))
+    </select>
+
+    <select id="queryApply" parameterType="com.muchinfo.mtp3pojos.vo.presale.PresaleApplyParam"
+            resultType="com.muchinfo.mtp3pojos.vo.presale.PresaleApplyResult">
+        select t.*,
+        m.marketname,
+        g.goodscode relatedgoodscode,
+        g.goodsname relatedgoodsname,
+        to_char(g1.listingdate, 'yyyy-MM-dd') "listingdate1",
+        to_char(g1.lasttradedate, 'yyyy-MM-dd') "lasttradedate1",
+        g.deliveryflag,
+        u.customername username,
+        s.username firstauditname,
+        sm.username secondauditname
+        from CPTrade_PresaleApply t
+        left join goods g1 on t.goodscode = g1.goodscode
+        left join market m on t.marketid = m.marketid
+        left join goods g on t.relatedgoodsid = g.goodsid
+        left join userinfo u on t.userid = u.userid
+        left join systemmanager s on t.firstauditid = s.autoid
+        left join systemmanager sm on t.secondauditid = sm.autoid
+        left join taaccount ta on t.accountid = ta.accountid
+        <where>
+            <if test="vo.applyid != null and vo.applyid != ''">
+                and (t.applyid like '%'||#{vo.applyid}||'%')
+            </if>
+            <if test="vo.username != null and vo.username != ''">
+                and ((t.userid like '%'||#{vo.username}||'%')
+                or(u.customername like '%'||#{vo.username}||'%'))
+            </if>
+            <if test="vo.relatedgoodsname != null and vo.relatedgoodsname != ''">
+                and ((g.goodscode like '%'||#{vo.relatedgoodsname}||'%')
+                or(g.goodsname like '%'||#{vo.relatedgoodsname}||'%'))
+            </if>
+            <if test="vo.applytime != null and vo.applytime != ''">
+                and t.applytime &gt;= to_date(#{vo.applytime}||',00:00:00','yyyyMMdd,hh24:mi:ss')
+                and t.applytime &lt;= to_date(#{vo.applytime}||',23:59:59','yyyyMMdd,hh24:mi:ss')
+            </if>
+            <if test="vo.applystatus != null">
+                and t.applystatus = #{vo.applystatus}
+            </if>
+            <if test="vo.presalemode != null">
+                and t.presalemode = #{vo.presalemode}
+            </if>
+            <if test="vo.areauserid != null">
+                and ta.relateduserid = #{vo.areauserid}
+            </if>
+        </where>
+        order by t.applytime desc
+    </select>
+</mapper>

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

@@ -89,6 +89,12 @@
             <if test="vo.deliveryflag != null">
                 and g.deliveryflag = #{vo.deliveryflag}
             </if>
+            <if test="tradeModeSplit!=null and tradeModeSplit.length>0">
+                <foreach collection="tradeModeSplit" item="item" open=" and m.trademode in (" close=")"
+                         separator=",">
+                    ${item}
+                </foreach>
+            </if>
         </where>
         and rownum &lt;= 10
         order by g.goodscode
@@ -103,4 +109,90 @@
         u.marketid = #{marketid} and u.usergroupid=#{usergroupid}
         )
     </select>
+
+    <select id="queryByDate"
+            parameterType="com.muchinfo.mtp3pojos.vo.reportform.GoodsReportParam"
+            resultType="com.muchinfo.mtp3pojos.vo.reportform.GoodsReportResult">
+        select t.reckondate,
+        t.goodsid,
+        g.goodsname,
+        t.marketid,
+        m.marketname,
+        nvl(t.buyinterest, 0) + nvl(t.sellinterest, 0) totalinterest,
+        (nvl(t.buyorderqty,0) + nvl(t.sellorderqty,0)) as totalorderqty,
+        t.tradeqty,
+        t.curbuyholdqty,t.oribuyholdqty,t.cursellholdqty,t.orisellholdqty,
+        t.tradelot,
+        t.tradeamount,
+        (nvl(t.Buycharge,0) + nvl(t.sellcharge,0)) as totalcharge,
+        t.buyinterest,
+        t.sellinterest,
+        t.holdaccountcount,
+        t.orderaccountcount,
+        t.tradeaccountcount,
+        g.goodscode
+        from
+        reckon_daygoodscount t
+        left join goods g on g.goodsid = t.goodsid
+        left join Market m on m.marketid = t.marketid
+        <where>
+            m.trademode not in (40,41,48,51)
+            <if test="vo.reckondate != null and vo.reckondate != '' ">
+                and t.reckondate= #{vo.reckondate,jdbcType=CHAR}
+            </if>
+            <if test="vo.areauserid != null and vo.areauserid != '' ">
+                and t.marketid in
+                (select m.marketid from market m
+                where m.exchareaid = #{vo.areauserid})
+            </if>
+        </where>
+        order by t.tradeqty desc
+    </select>
+
+    <select id="queryByOther"
+            parameterType="com.muchinfo.mtp3pojos.vo.reportform.GoodsReportParam"
+            resultType="com.muchinfo.mtp3pojos.vo.reportform.GoodsReportResult">
+        select t.cycletype,
+        t.cycletime as reckondate,
+        t.goodsid,
+        g.goodsname,
+        t.marketid,
+        m.marketname,
+        nvl(t.buyinterest, 0) + nvl(t.sellinterest, 0) totalinterest,
+        (nvl(t.buyorderqty,0) + nvl(t.sellorderqty,0)) as totalorderqty,
+        t.tradeqty,
+        t.curbuyholdqty,t.oribuyholdqty,t.cursellholdqty,t.orisellholdqty,
+        t.tradelot,
+        t.tradeamount,
+        (nvl(t.Buycharge,0) + nvl(t.sellcharge,0)) as totalcharge,
+        t.buyinterest,
+        t.sellinterest,
+        t.holdaccountcount,
+        t.orderaccountcount,
+        t.tradeaccountcount,
+        g.goodscode
+        from
+        report_goodscount t
+        left join goods g on g.goodsid = t.goodsid
+        left join Market m on m.marketid = t.marketid
+        <where>
+            m.trademode not in (40,41,48,51)
+            <if test="vo.cycletype !=null and vo.cycletype != ''">
+                and t.cycletype=#{vo.cycletype}
+            </if>
+            <if test="vo.reckondate !=null and vo.reckondate != '' and vo.cycletype != 4">
+                and t.cycletime = #{vo.reckondate}
+            </if>
+            <if test="vo.reckondate !=null and vo.reckondate != '' and vo.cycletype == 4">
+                and t.cycletime= (select to_char(trunc(to_date(#{vo.reckondate}, 'YYYYMMDD'),'iw')+3,'yyyy') ||
+                to_char(to_date(#{vo.reckondate}, 'YYYYMMDD'), 'iw') from dual)
+            </if>
+            <if test="vo.areauserid != null and vo.areauserid != '' ">
+                and t.marketid in
+                (select m.marketid from market m
+                where m.exchareaid = #{vo.areauserid})
+            </if>
+        </where>
+        order by t.tradeqty desc
+    </select>
 </mapper>

+ 445 - 0
mtp3-century/src/main/resources/mapper/PerformanceplanMapper.xml

@@ -0,0 +1,445 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.muchinfo.mtp3interface.mapper.IPerformanceplanMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.muchinfo.mtp3pojos.entity.Performanceplan">
+        <id column="PERFORMANCEPLANID" property="performanceplanid" />
+        <result column="PERFORMANCETYPE" property="performancetype" />
+        <result column="RELATEDORDERID" property="relatedorderid" />
+        <result column="AMOUNT" property="amount" />
+        <result column="PAYMENTTYPE" property="paymenttype" />
+        <result column="PERFORMANCESTATUS" property="performancestatus" />
+        <result column="CURSTEPID" property="curstepid" />
+        <result column="BUYACCOUNTID" property="buyaccountid" />
+        <result column="WRTRANSFERUSERID" property="wrtransferuserid" />
+        <result column="BUYPAIDAMOUNT" property="buypaidamount" />
+        <result column="SELLACCOUNTID" property="sellaccountid" />
+        <result column="SELLRECEIVEDAMOUNT" property="sellreceivedamount" />
+        <result column="BUYTODAYAMOUNT" property="buytodayamount" />
+        <result column="SELLTODAYAMOUNT" property="selltodayamount" />
+        <result column="CREATETIME" property="createtime" />
+        <result column="CREATORID" property="creatorid" />
+        <result column="REMARK" property="remark" />
+        <result column="BUYERFREEZEAMOUNT" property="buyerfreezeamount" />
+        <result column="BUYERFREEZEAMOUNTREMAIN" property="buyerfreezeamountremain" />
+        <result column="SELLERFREEZEAMOUNT" property="sellerfreezeamount" />
+        <result column="SELLERFREEZEAMOUNTREMAIN" property="sellerfreezeamountremain" />
+        <result column="OVERSHORTAMOUNT" property="overshortamount" />
+        <result column="HASOVERSHORT" property="hasovershort" />
+        <result column="SHIPREMARK" property="shipremark" />
+        <result column="MIDDLEUSERID" property="middleuserid" />
+        <result column="MIDDLEACCOUNTID" property="middleaccountid" />
+        <result column="HASWR" property="haswr" />
+        <result column="BUYERINFO" property="buyerinfo" />
+        <result column="SELLERINFO" property="sellerinfo" />
+        <result column="OVERSHORTQTY" property="overshortqty" />
+        <result column="MARKETID" property="marketid" />
+        <result column="EXPRESSFEECONFIRMED" property="expressfeeconfirmed" />
+        <result column="EXPRESSFEE" property="expressfee" />
+        <result column="CONTRACTID" property="contractid" />
+        <result column="CURSTEPDEADLINE" property="curstepdeadline" />
+        <result column="QTY" property="qty" />
+        <result column="ACTIVATEMODE" property="activatemode" />
+        <result column="ACTIVATEMONTH" property="activatemonth" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        PERFORMANCEPLANID, PERFORMANCETYPE, RELATEDORDERID, AMOUNT, PAYMENTTYPE, PERFORMANCESTATUS, CURSTEPID, BUYACCOUNTID, WRTRANSFERUSERID, BUYPAIDAMOUNT, SELLACCOUNTID, SELLRECEIVEDAMOUNT, BUYTODAYAMOUNT, SELLTODAYAMOUNT, CREATETIME, CREATORID, REMARK, BUYERFREEZEAMOUNT, BUYERFREEZEAMOUNTREMAIN, SELLERFREEZEAMOUNT, SELLERFREEZEAMOUNTREMAIN, OVERSHORTAMOUNT, HASOVERSHORT, SHIPREMARK, MIDDLEUSERID, MIDDLEACCOUNTID, HASWR, BUYERINFO, SELLERINFO, OVERSHORTQTY, MARKETID, EXPRESSFEECONFIRMED, EXPRESSFEE, CONTRACTID, CURSTEPDEADLINE, QTY, ACTIVATEMODE, ACTIVATEMONTH
+    </sql>
+
+    <select id="query" parameterType="com.muchinfo.mtp3pojos.vo.performance.PayPerformanceParam"
+            resultType="com.muchinfo.mtp3pojos.vo.performance.PayPerformanceResult">
+        with ps as(
+        select p.*,st.steptypename from performancestep p
+        left join performancesteptype st on p.steptypeid=st.steptypeid
+        )
+        select p.performanceplanid,
+			'- -' "histradedate",
+			p.performancetype,
+			p.relatedorderid,
+			p.amount,
+			p.paymenttype,
+			p.performancestatus,
+			p.curstepid,
+			p.buyaccountid,
+			p.wrtransferuserid,
+			p.buypaidamount,
+			p.sellaccountid,
+			p.sellreceivedamount,
+			p.buytodayamount,
+			p.selltodayamount,
+			p.createtime,
+			p.creatorid,
+			p.remark,
+			p.overshortamount,
+			p.hasovershort,
+			p.shipremark,
+			p.middleuserid,
+			p.middleaccountid,
+			p.haswr,
+			p.buyerinfo,
+			p.sellerinfo,
+			p.overshortqty,
+			p.buyerfreezeamount,
+			p.buyerfreezeamountremain,
+			p.sellerfreezeamount,
+			p.sellerfreezeamountremain,
+			p.marketid,
+			p.expressfeeconfirmed,
+			p.expressfee,
+			p.contractid,
+			p.curstepdeadline,
+			p.qty,
+			p.activatemode,
+			p.activatemonth,
+			ps.stepstatus,
+			ps.steptypename,
+			ps.executeside,
+			ps.steptypeid,
+			ps.delaydays,
+			ps.remaindays,
+			(p.amount + p.overshortamount) as rekonamount,
+			(select t.stepstatus from performancestep t where t.planid=p.performanceplanid and t.steptypeid=11) as contractstatus,
+			(select cpd.autoid from PerformanceDelay cpd where cpd.planid=p.performanceplanid and cpd.delaystatus=1 and rownum &lt; 2) as delayapplyid,
+			(select cpd.applicant from PerformanceDelay cpd where cpd.planid=p.performanceplanid and cpd.delaystatus=1 and rownum &lt; 2) as applicant,
+			0 as ishis
+		from performanceplan p left join ps on p.curstepid = ps.performancestepid
+		left join taaccount buyta on p.buyaccountid = buyta.accountid
+		left join taaccount sellta on p.sellaccountid = sellta.accountid
+        <where>
+            <if test="vo.relatedorderid != null and vo.relatedorderid != '' ">
+                AND p.relatedOrderId like
+                '%'||#{vo.relatedorderid}||'%'
+            </if>
+            <if test="vo.searchrange != null ">
+                <if test="vo.searchrange == -1 ">
+                    <![CDATA[and ps.remaindays < 0]]>
+                </if>
+            </if>
+            <choose>
+                <when test="type = 0 ">
+                    <if test="accountid != null and accountid != '' ">
+                        AND p.buyAccountId in (select accountid from taaccount
+                        where userid = #{accountid})
+                    </if>
+                </when>
+                <otherwise>
+                    <if test="accountid != null and accountid != '' ">
+                        AND p.sellAccountId in (select accountid from taaccount
+                        where userid = #{accountid})
+                    </if>
+                </otherwise>
+            </choose>
+            <if test="vo.parentuserid != null and vo.parentuserid!=0">
+
+                and (buyta.userid in (select userid from useraccount uo
+                start with uo.userid = #{vo.parentuserid}
+                connect by prior uo.userid =uo.parentuserid and uo.userid !=#{vo.parentuserid})
+                or sellta.userid in (select userid from useraccount uo
+                start with uo.userid = #{vo.parentuserid}
+                connect by prior uo.userid =uo.parentuserid and uo.userid !=#{vo.parentuserid})
+                )
+            </if>
+        </where>
+        order by p.performancestatus asc,p.createtime desc
+    </select>
+
+    <!-- 历史数据 -->
+    <select id="queryHis"
+            parameterType="com.muchinfo.mtp3pojos.vo.performance.PayPerformanceParam"
+            resultType="com.muchinfo.mtp3pojos.vo.performance.PayPerformanceResult">
+        with ps as(
+        select p.*,st.steptypename from his_performancestep p
+        left join performancesteptype st on p.steptypeid=st.steptypeid
+        <where>
+            and p.isvaliddata = 1
+            <if test="vo.starttime != null and vo.starttime != '' ">
+                AND p.histradedate &gt;= #{vo.starttime}
+            </if>
+            <if test="vo.endtime != null and vo.endtime != '' ">
+                AND p.histradedate &lt;= #{vo.endtime}
+            </if>
+        </where>
+        )
+        select p.performanceplanid,
+        p.histradedate,
+        p.performancetype,
+        p.relatedorderid,
+        p.amount,
+        p.paymenttype,
+        p.performancestatus,
+        p.curstepid,
+        p.buyaccountid,
+        p.wrtransferuserid,
+        p.buypaidamount,
+        p.sellaccountid,
+        p.sellreceivedamount,
+        p.buytodayamount,
+        p.selltodayamount,
+        p.createtime,
+        p.creatorid,
+        p.remark,
+        p.overshortamount,
+        p.hasovershort,
+        p.shipremark,
+        p.middleuserid,
+        p.middleaccountid,
+        p.haswr,
+        p.buyerinfo,
+        p.sellerinfo,
+        p.overshortqty,
+        p.buyerfreezeamount,
+        p.buyerfreezeamountremain,
+        p.sellerfreezeamount,
+        p.sellerfreezeamountremain,
+        p.marketid,
+        p.expressfeeconfirmed,
+        p.expressfee,
+        ps.stepstatus,
+        ps.steptypename,
+        ps.executeside,
+        ps.steptypeid,
+        ps.delaydays,
+        ps.remaindays,
+        (p.amount + p.overshortamount) as rekonamount,
+        (select t.stepstatus from his_performancestep t where t.planid=p.performanceplanid and t.steptypeid=11 and t.histradedate=p.histradedate and t.isvaliddata = 1) as contractstatus,
+        1 as ishis
+        from his_performanceplan p left join ps on p.curstepid = ps.performancestepid and p.histradedate = ps.histradedate
+        left join taaccount buyta on p.buyaccountid = buyta.accountid
+        left join taaccount sellta on p.sellaccountid = sellta.accountid
+        where p.performancestatus in(3,6,7,8) and p.isvaliddata = 1
+        <if test="vo.relatedorderid != null and vo.relatedorderid != '' ">
+            AND p.relatedOrderId like
+            '%'||#{vo.relatedorderid}||'%'
+        </if>
+        <if test="vo.starttime != null and vo.starttime != '' ">
+            AND p.histradedate &gt;= #{vo.starttime}
+        </if>
+        <if test="vo.endtime != null and vo.endtime != '' ">
+            AND p.histradedate &lt;= #{vo.endtime}
+        </if>
+        <choose>
+            <when test="type = 0 ">
+                <if test="accountid != null and accountid != '' ">
+                    AND p.buyAccountId in (select accountid from taaccount
+                    where userid = #{accountid})
+                </if>
+            </when>
+            <otherwise>
+                <if test="accountid != null and accountid != '' ">
+                    AND p.sellAccountId in (select accountid from taaccount
+                    where userid = #{accountid})
+                </if>
+            </otherwise>
+        </choose>
+        <if test="vo.searchrange != null ">
+            <if test="vo.searchrange == -1 ">
+                <![CDATA[and ps.remaindays < 0]]>
+            </if>
+        </if>
+        <if test="vo.parentuserid != null and vo.parentuserid!=0">
+            and (buyta.userid in (select userid from useraccount uo
+            start with uo.userid = #{vo.parentuserid}
+            connect by prior uo.userid =uo.parentuserid and uo.userid !=#{vo.parentuserid})
+            or sellta.userid in (select userid from useraccount uo
+            start with uo.userid = #{vo.parentuserid}
+            connect by prior uo.userid =uo.parentuserid and uo.userid !=#{vo.parentuserid})
+            )
+        </if>
+        order by p.performancestatus asc,p.createtime desc
+    </select>
+
+    <select id="queryPerformancePlanDetail" resultType="com.muchinfo.mtp3pojos.vo.performance.PayPerformancePlanResult">
+        with ps as(
+            select p.*,st.steptypename from performancestep p
+                                                left join performancesteptype st on p.steptypeid=st.steptypeid
+            where p.planid = #{performanceplanid,jdbcType=DECIMAL}
+        )
+        select p.*, ps.stepstatus, ps.steptypename, ua.accountname "wrtransferaccountname",
+               (p.amount + NVL(p.overshortamount, 0) + NVL(p.expressfee, 0) - NVL(p.buypaidamount, 0)) "buyAmountReceived",
+               (p.amount + NVL(p.overshortamount, 0) + NVL(p.expressfee, 0) - NVL(p.sellreceivedamount, 0)) "sellAmountReceived",
+               ps.executeside, ps.steptypeid
+        from performanceplan p left join ps on p.curstepid = ps.performancestepid
+                               left join taaccount ta on p.wrtransferuserid = ta.accountid
+                               left join useraccount ua on ta.userid = ua.userid
+        where p.performanceplanid = #{planid}
+    </select>
+
+    <select id="getHisPerformancePlanDetail"
+            resultType="com.muchinfo.mtp3pojos.vo.performance.PayPerformancePlanResult">
+        with ps as(
+        select p.*,st.steptypename from his_performancestep p
+        left join performancesteptype st on p.steptypeid=st.steptypeid
+        where p.planid = #{performanceplanid,jdbcType=DECIMAL} and p.isvaliddata = 1
+        <if test="histradedate != null and histradedate != ''">
+            and p.histradedate = #{histradedate}
+        </if>
+        )
+        select p.*, ps.stepstatus, ps.steptypename, ua.accountname "wrtransferaccountname",
+        (p.amount + NVL(p.overshortamount, 0) + NVL(p.expressfee, 0) - NVL(p.buypaidamount, 0)) "buyAmountReceived",
+        (p.amount + NVL(p.overshortamount, 0) + NVL(p.expressfee, 0) - NVL(p.sellreceivedamount, 0))
+        "sellAmountReceived",
+        ps.executeside, ps.steptypeid
+        from his_performanceplan p left join ps on p.curstepid = ps.performancestepid and p.histradedate =
+        ps.histradedate
+        left join taaccount ta on p.wrtransferuserid = ta.accountid
+        left join useraccount ua on ta.userid = ua.userid
+        where p.performanceplanid = #{planid} and p.isvaliddata = 1
+        <if test="histradedate != null and histradedate != ''">
+            and p.histradedate = #{histradedate}
+        </if>
+    </select>
+
+    <select id="queryPerformanceDelayList" resultType="com.muchinfo.mtp3pojos.vo.performance.PerformanceDelayResult">
+        select p.*, t.steptypename, f.relatedorderid,f.performancetype,ps.executeside
+        from PerformanceDelay p
+        left join performancestep ps on p.stepid = ps.performancestepid
+        left join PerformanceStepType t on ps.steptypeid = t.steptypeid
+        left join PerformancePlan f on ps.planid = f.performanceplanid
+        <where>
+            <if test="planid != null">
+                and p.planid = #{planid}
+                and p.applytime=(select max(tp.applytime) from performancedelay tp where tp.planid=#{planid})
+            </if>
+
+        </where>
+        order by p.applytime desc
+    </select>
+
+    <!-- 竞拍成交单表查询 -->
+    <select id="queryReportInfo" resultType="com.muchinfo.mtp3pojos.vo.performance.PayPerformanceReportResult">
+        select t.tradeid "tradeId",
+        t.buyorsell "buyOrSell",
+        dic1.enumdicname "buyOrSellText",
+        t.orderid "orderId",
+        t.tradedate "tradeDate",
+        t.accountid "accountId",
+        t.goodsid "goodsId",
+        t2.goodsname "goodsName",
+        t2.goodscode "goodsCode",
+        t2.unit "unit",
+        t.marketid "marketId",
+        m.marketname "marketName",
+        t.deliverygoodsid "deliveryGoodsId",
+        dg.deliverygoodscode "deliveryGoodsCode",
+        dg.deliverygoodsname "deliveryGoodsName",
+        t.memberuserid "memberUserId",
+        mem.accountname "memberName",
+        t.matchaccountid "matchAccountId",
+        t.tradetime "tradeTime",
+        t.tradeprice "tradePrice",
+        t.tradeqty "tradeQty",
+        t.tradeamount "tradeAmount",
+        t.charge "charge",
+        t.status "status",
+        (case when t.status=1 then '违约待处理' when t.status=2 then '违约处理中' when t.status=3 then '完成' when
+        t.status=4 then '违约完成'
+        when t.status=5 then '履约中' when t.status=6 then '履约完成' when t.status=7 then '流拍' else '--' end)
+        "statusText",
+        t.handlestatus "handleStatus",
+        (case when t.handlestatus=1 then '待处理' when t.handlestatus=2 then '已处理' when t.handlestatus=3 then '处理失败'
+        else '--' end) "handleStatusText",
+        t.relatedwrid "relatedWrid",
+        t.feealgorithm "feeAlgorithm",
+        dic2.enumdicname "feeAlgorithmText",
+        t.exchagechargevalue "exchageChargeValue",
+        t.ismain "isMain",
+        (case when t.ismain=1 then '是' else '否' end) "isMainText",
+        t.isreckoned "isReckoned",
+        (case when t.isreckoned=0 then '未结算' else '已结算' end) "isReckonedText",
+        t.performanceplanid "performancePlanId",
+        (select to_char(wm_concat(dm.pricemovedesc))
+        from deliverygoodspricemove dm
+        where dm.deliverygoodsid = t2.deliverygoodsid
+        and dm.autoid in (t2.brandid, t2.qualityid, t2.specid,
+        t2.warehouseid, t2.deliverymonthid)) "wrfactorTypeName",
+        '--' "hisTradeDate"
+        from auction_tradedetail t
+        left join enumdicitem dic1 on dic1.enumitemname=t.buyorsell and dic1.enumdiccode='buyOrSell'
+        left join auction_orderinfo t2 on t.goodsid=t2.goodsid
+        left join market m on t.marketid=m.marketid
+        left join deliverygoods dg on t.deliverygoodsid=dg.deliverygoodsid
+        left join useraccount mem on t.memberuserid=mem.userid
+        left join enumdicitem dic2 on dic2.enumitemname=t.feealgorithm and dic2.enumdiccode='SCFRiskMode'
+        <where>
+            <if test="planid != null and planid != ''">
+                and t.tradeid=#{planid}
+            </if>
+            <if test="buyorsell != null">
+                <![CDATA[and t.buyorsell=#{buyOrSell}]]>
+            </if>
+        </where>
+    </select>
+
+    <!--竞拍成交单历史表查询 -->
+    <select id="queryHisReportInfo" resultType="com.muchinfo.mtp3pojos.vo.performance.PayPerformanceReportResult">
+        select t.tradeid "tradeId",
+        t.buyorsell "buyOrSell",
+        dic1.enumdicname "buyOrSellText",
+        t.orderid "orderId",
+        t.tradedate "tradeDate",
+        t.accountid "accountId",
+        t.goodsid "goodsId",
+        t2.goodsname "goodsName",
+        t2.goodscode "goodsCode",
+        t2.unit "unit",
+        t.marketid "marketId",
+        m.marketname "marketName",
+        t.deliverygoodsid "deliveryGoodsId",
+        dg.deliverygoodscode "deliveryGoodsCode",
+        dg.deliverygoodsname "deliveryGoodsName",
+        t.memberuserid "memberUserId",
+        mem.accountname "memberName",
+        t.matchaccountid "matchAccountId",
+        t.tradetime "tradeTime",
+        t.tradeprice "tradePrice",
+        t.tradeqty "tradeQty",
+        t.tradeamount "tradeAmount",
+        t.charge "charge",
+        t.status "status",
+        (case when t.status=1 then '违约待处理' when t.status=2 then '违约处理中' when t.status=3 then '完成' when
+        t.status=4 then '违约完成'
+        when t.status=5 then '履约中' when t.status=6 then '履约完成' when t.status=7 then '流拍' else '--' end)
+        "statusText",
+        t.handlestatus "handleStatus",
+        (case when t.handlestatus=1 then '待处理' when t.handlestatus=2 then '已处理' when t.handlestatus=3 then '处理失败'
+        else '--' end) "handleStatusText",
+        t.relatedwrid "relatedWrid",
+        t.feealgorithm "feeAlgorithm",
+        dic2.enumdicname "feeAlgorithmText",
+        t.exchagechargevalue "exchageChargeValue",
+        t.ismain "isMain",
+        (case when t.ismain=1 then '是' else '否' end) "isMainText",
+        t.isreckoned "isReckoned",
+        (case when t.isreckoned=0 then '未结算' else '已结算' end) "isReckonedText",
+        t.performanceplanid "performancePlanId",
+        (select to_char(wm_concat(dm.pricemovedesc))
+        from deliverygoodspricemove dm
+        where dm.deliverygoodsid = t2.deliverygoodsid
+        and dm.autoid in (t2.brandid, t2.qualityid, t2.specid,
+        t2.warehouseid, t2.deliverymonthid)) "wrfactorTypeName",
+        t.histradedate "hisTradeDate"
+        from his_auction_tradedetail t
+        left join enumdicitem dic1 on dic1.enumitemname=t.buyorsell and dic1.enumdiccode='buyOrSell'
+        left join his_auction_orderinfo t2 on t.goodsid=t2.goodsid and t2.histradedate=t.histradedate and t2.isvaliddata
+        = 1
+        left join market m on t.marketid=m.marketid
+        left join deliverygoods dg on t.deliverygoodsid=dg.deliverygoodsid
+        left join useraccount mem on t.memberuserid=mem.userid
+        left join enumdicitem dic2 on dic2.enumitemname=t.feealgorithm and dic2.enumdiccode='SCFRiskMode'
+        <where>
+            and t.isvaliddata = 1
+            <if test="planid != null and planid != ''">
+                and t.tradeid=#{planid}
+            </if>
+            <if test="buyOrSell != null or buyOrSell == 0">
+                <![CDATA[and t.buyorsell=#{buyOrSell}]]>
+            </if>
+            <if test="histradedate != null and histradedate != ''">
+                <![CDATA[and t.histradedate=#{histradedate}]]>
+            </if>
+        </where>
+    </select>
+</mapper>

+ 38 - 0
mtp3-century/src/main/resources/mapper/ReckonDaydividecountMapper.xml

@@ -105,4 +105,42 @@
         ORDER BY TRADEDATE, PAYTIME DESC
     </select>
 
+    <select id="queryPositionTransfer" resultType="com.muchinfo.mtp3pojos.vo.settlement.PositionTransferQueryResult">
+        select t.*, g.goodscode || '/' || g.goodsname "goodsfullname",
+        m.marketid || '/' || m.marketname "marketfullname",
+        t.outloginid || '/' || ua1.accountname "outname",
+        t.inloginid || '/' || ua2.accountname "inname",
+        sm.logincode || '/' || sm.username "auditname"
+        from Trade_PositionTransfer t
+        left join goods g on t.goodsid = g.goodsid
+        left join market m on t.marketid = m.marketid
+        left join useraccount ua1 on ua1.userid = t.outuserid
+        left join useraccount ua2 on ua2.userid = t.inuserid
+        left join systemmanager sm on sm.autoid = t.auditorid
+        <where>
+            <if test="vo.transferapplystatus != null">
+                and t.transferapplystatus=#{vo.transferapplystatus}
+            </if>
+            <if test="vo.goodsid != null">
+                and t.goodsid=#{vo.goodsid}
+            </if>
+            <if test="vo.outaccountid != null">
+                and t.outaccountid=#{vo.outaccountid}
+            </if>
+            <if test="vo.inaccountid != null">
+                and t.inaccountid=#{vo.inaccountid}
+            </if>
+            <if test="vo.applyid != null">
+                and t.applyid=#{vo.applyid}
+            </if>
+            <if test="vo.applydate != null and vo.applydate!=''">
+                and (t.applytime between to_date(#{vo.applydate}||' 00:00:00','yyyy-MM-dd hh24:mi:ss')
+                and to_date(#{vo.applydate}||' 23:59:59','yyyy-MM-dd hh24:mi:ss'))
+            </if>
+            <if test="vo.outuserid != null">
+                and t.outuserid=#{vo.outuserid}
+            </if>
+        </where>
+        order by t.applytime desc
+    </select>
 </mapper>

+ 88 - 0
mtp3-century/src/main/resources/mapper/ReckonDaydividecountdetailMapper.xml

@@ -657,6 +657,15 @@
             <if test="vo.outamount != null and vo.outamount !='' ">
                 and ra.outamount >= #{vo.outamount}
             </if>
+            <if test="vo.accountstatus != null and vo.accountstatus == 1">
+                and ua.accountstatus = 4
+            </if>
+            <if test="vo.accountstatus != null and vo.accountstatus == 2">
+                and ua.accountstatus in (6,7)
+            </if>
+            <if test="vo.roles != null and vo.roles !='' ">
+                and ua.userid in (select userid from arearole where roletype in (${vo.roles}))
+            </if>
             <if test="vo.parentuserid != null">
                 <choose>
                     <when test="vo.changeflag!=null and vo.changeflag==3">
@@ -945,6 +954,15 @@
             <if test="vo.brokerid !=null and vo.brokerid != ''">
                 and ua.broker = #{vo.brokerid}
             </if>
+            <if test="vo.accountstatus != null and vo.accountstatus == 1">
+                and ua.accountstatus = 4
+            </if>
+            <if test="vo.accountstatus != null and vo.accountstatus == 2">
+                and ua.accountstatus in (6,7)
+            </if>
+            <if test="vo.roles != null and vo.roles !='' ">
+                and ua.userid in (select userid from arearole where roletype in (${vo.roles}))
+            </if>
             <if test="vo.subareaid !=null and vo.subareaid  != ''">
                 and us.subarealevelpath like
                 '%'||#{vo.subareaid}||'%'
@@ -1352,4 +1370,74 @@
             </otherwise>
         </choose>
     </select>
+
+    <select id="queryCusBank" parameterType="com.muchinfo.mtp3pojos.vo.reportform.CusBankReportParam"
+            resultType="com.muchinfo.mtp3pojos.vo.reportform.CusBankReportResult">
+        with exch AS (
+        select t.tradedate, t.cusbankid, sum(t.balance) balance,
+        sum(t.currentbalance) currentbalance, sum(t.PL) totalpl, sum(t.charge) totalcharge,
+        sum(t.inamount) totalinamout, sum(t.outamount) totaloutamount
+        from bank_clearexchresult t
+        where t.signflag = 1
+        group by t.tradedate, t.cusbankid)
+        select
+        t.cusbankid,
+        t.tradedate,
+        t.inamoutcout, exch.totalinamout, t.inamoutnum,
+        t.outamountcout, exch.totaloutamount, t.outamountnum,
+        t.signincount, t.signoutcount, t.opencount, t.totalsignincount,
+        t.totalpl, t.totalcharge, t.totalincharge, t.totaloutcharge,
+        exch.balance,  exch.currentbalance,
+        t.checkstatus,
+        b.currency,
+        b.cusbankname
+        from Bank_CusBankCheck t
+        inner join BANK_CUSBANKINFO b on t.cusbankid=b.cusbankid
+        inner join exch on t.tradedate = exch.tradedate
+        -- and t.cusbankid = exch.cusbankid
+        <where>
+            <if test="vo.startDate != null and vo.startDate != '' and vo.endDate != null and vo.endDate != ''">
+                and to_date(t.tradedate,'yyyy-MM-dd') between to_date(#{vo.startDate},'yyyy-MM-dd')
+                and to_date(#{vo.endDate},'yyyy-MM-dd')
+            </if>
+            <if test="vo.cusbankname != null and vo.cusbankname !=''">
+                and (t.cusbankid like '%'||#{vo.cusbankname}||'%'
+                or b.cusbankname like '%'||#{vo.cusbankname}||'%'
+                )
+            </if>
+        </where>
+        order by t.tradedate desc
+    </select>
+
+    <select id="managediv" parameterType="com.muchinfo.mtp3pojos.vo.reportform.CusBankReportParam"
+            resultType="com.muchinfo.mtp3pojos.vo.reportform.ManageDivReportResult">
+        select
+        r.tradedate, r.areaid,r.areatype,
+        r.areaaccountid,r.totalcount,r.totalfee,
+        r.divideamount,r.accountcurrencyid,
+        u.accountname as areaname ,
+        bi.bankname
+        from reckon_daydividecount r
+        left join useraccount u on r.areaid = u.userid
+        left join Bank_AccountSign bsa on r.areaaccountid=bsa.accountcode
+        left join Bank_BankInfo bi on bsa.bankid=bi.bankid
+        <where>
+            r.areatype = 1
+            <if
+                    test="vo.startDate != null and vo.startDate != '' and vo.endDate != null and vo.endDate != ''">
+                and to_date(r.tradedate,'yyyy-MM-dd') between
+                to_date(#{vo.startDate},'yyyy-MM-dd')
+                and to_date(#{vo.endDate},'yyyy-MM-dd')
+            </if>
+            <if test="vo.bankname != null and vo.bankname !=''">
+                and (bi.bankname like
+                '%'||#{vo.bankname}||'%')
+            </if>
+        </where>
+        order by r.tradedate desc
+    </select>
+
+    <select id="execReportMonthType" parameterType="java.util.HashMap" statementType="CALLABLE">
+        <![CDATA[{call PKG_HIS_REPORT_TABLE.PROC_HIS_REPORT_TABLE_MONTH(#{tradedate,mode=IN,jdbcType=DATE})}]]>
+    </select>
 </mapper>

+ 443 - 0
mtp3-century/src/main/resources/mapper/TradeHolderdetailexMapper.xml

@@ -0,0 +1,443 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.muchinfo.mtp3interface.mapper.ITradeHolderdetailexMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.muchinfo.mtp3pojos.entity.TradeHolderdetailex">
+        <id column="TRADEID" property="tradeid" />
+        <result column="BUYORSELL" property="buyorsell" />
+        <result column="TRADEDATE" property="tradedate" />
+        <result column="MARKETID" property="marketid" />
+        <result column="GOODSID" property="goodsid" />
+        <result column="USERID" property="userid" />
+        <result column="ACCOUNTID" property="accountid" />
+        <result column="MATCHUSERID" property="matchuserid" />
+        <result column="MATCHACCOUNTID" property="matchaccountid" />
+        <result column="OPENQTY" property="openqty" />
+        <result column="TRADEAMOUNT" property="tradeamount" />
+        <result column="OPENPRICE" property="openprice" />
+        <result column="HOLDERQTY" property="holderqty" />
+        <result column="HOLDERAMOUNT" property="holderamount" />
+        <result column="HOLDERPRICE" property="holderprice" />
+        <result column="FREEZEQTY" property="freezeqty" />
+        <result column="DELIVERYQTY" property="deliveryqty" />
+        <result column="HOLDDAYS" property="holddays" />
+        <result column="PAYEDDEPOSIT" property="payeddeposit" />
+        <result column="RESTOCKDEPOSIT" property="restockdeposit" />
+        <result column="LATEFEEDAYS" property="latefeedays" />
+        <result column="LATEFEEALGORITHM" property="latefeealgorithm" />
+        <result column="LATEFEEVALUE" property="latefeevalue" />
+        <result column="CALLATEFEE" property="callatefee" />
+        <result column="PROMPTDEPOSITRATE" property="promptdepositrate" />
+        <result column="CUTDEPOSITRATE" property="cutdepositrate" />
+        <result column="PROMPTPRICE" property="promptprice" />
+        <result column="CUTPRICE" property="cutprice" />
+        <result column="CLOSEPL" property="closepl" />
+        <result column="FLOATPL" property="floatpl" />
+        <result column="DEPOSITRATE" property="depositrate" />
+        <result column="REFUNDABLEDEPOSIT" property="refundabledeposit" />
+        <result column="PAYEDLATEFEE" property="payedlatefee" />
+        <result column="TRADETIME" property="tradetime" />
+        <result column="HANDLESTATUS" property="handlestatus" />
+        <result column="ORIPAYEDDEPOSIT" property="oripayeddeposit" />
+        <result column="ORIRESTOCKDEPOSIT" property="orirestockdeposit" />
+        <result column="CANAUTOADDDEPOSIT" property="canautoadddeposit" />
+        <result column="ADDDEPOSITRATE" property="adddepositrate" />
+        <result column="CANAUTOREFUNDDEPOSIT" property="canautorefunddeposit" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        TRADEID, BUYORSELL, TRADEDATE, MARKETID, GOODSID, USERID, ACCOUNTID, MATCHUSERID, MATCHACCOUNTID, OPENQTY, TRADEAMOUNT, OPENPRICE, HOLDERQTY, HOLDERAMOUNT, HOLDERPRICE, FREEZEQTY, DELIVERYQTY, HOLDDAYS, PAYEDDEPOSIT, RESTOCKDEPOSIT, LATEFEEDAYS, LATEFEEALGORITHM, LATEFEEVALUE, CALLATEFEE, PROMPTDEPOSITRATE, CUTDEPOSITRATE, PROMPTPRICE, CUTPRICE, CLOSEPL, FLOATPL, DEPOSITRATE, REFUNDABLEDEPOSIT, PAYEDLATEFEE, TRADETIME, HANDLESTATUS, ORIPAYEDDEPOSIT, ORIRESTOCKDEPOSIT, CANAUTOADDDEPOSIT, ADDDEPOSITRATE, CANAUTOREFUNDDEPOSIT
+    </sql>
+
+    <select id="query" resultType="com.muchinfo.mtp3pojos.vo.query.order.OrderQueryResult"
+            parameterType="com.muchinfo.mtp3pojos.vo.query.order.OrderQueryParam">
+        select
+        m.trademode "trademode",
+        ua.userid || '/' || ua.accountname "accountname",
+        ua2.userid || '/' || ua2.accountname "membername",
+        ua3.userid || '/' || ua3.accountname "parentname",
+        g.goodscode || '/' || g.goodsname "goodsname",
+        g.goodunitid "goodsunitid",
+        g.agreeunit "agreeunit",
+        g.decimalplace "decimalplace",
+        g.goodscode "goodscode",
+        t.tradeid "tradeid",
+        t.buyorsell "buyorsell",
+        t.tradedate "tradedate",
+        t.marketid "marketid",
+        t.goodsid "goodsid",
+        t.userid "userid",
+        t.accountid "accountid",
+        t.matchuserid "matchuserid",
+        t.matchaccountid "matchaccountid",
+        t.openqty "openqty",
+        t.openqty * g.agreeunit || ' ' || en.enumdicname "opennum",
+        t.tradeamount "tradeamount",
+        t.openprice "openprice",
+        t.holderqty "holderqty",
+        t.holderqty * g.agreeunit || ' ' || en.enumdicname "holdernum",
+        t.holderamount "holderamount",
+        t.holderprice "holderprice",
+        t.freezeqty "freezeqty",
+        t.freezeqty * g.agreeunit || ' ' || en.enumdicname "freezenum",
+        (t.holderqty - t.freezeqty) * g.agreeunit "avaliablenumval",
+        (t.holderqty - t.freezeqty) * g.agreeunit || ' ' || en.enumdicname "avaliablenum",
+        t.deliveryqty "deliveryqty",
+        t.deliveryqty * g.agreeunit || ' ' || en.enumdicname "deliverynum",
+        nvl(t.holddays, 0) + 1 "holddays",
+        t.payeddeposit "payeddeposit",
+        t.restockdeposit "restockdeposit",
+        t.latefeedays "latefeedays",
+        t.latefeealgorithm "latefeealgorithm",
+        t.latefeevalue "latefeevalue",
+        t.callatefee "callatefee",
+        t.promptdepositrate "promptdepositrate",
+        t.cutdepositrate "cutdepositrate",
+        t.promptprice "promptprice",
+        t.cutprice "cutprice",
+        t.closepl "closepl",
+        t.floatpl "floatpl",
+        t.depositrate "depositrate",
+        t.refundabledeposit "refundabledeposit",
+        t.payedlatefee "payedlatefee",
+        to_char(t.tradetime, 'yyyy-MM-dd hh24:mi:ss') "tradetimestr",
+        t.oripayeddeposit "oripayeddeposit",
+        t.orirestockdeposit "orirestockdeposit",
+        t.canautoadddeposit "canautoadddeposit",
+        t.adddepositrate "adddepositrate",
+        t.canautorefunddeposit "canautorefunddeposit"
+        from trade_holderdetailex t
+        left join useraccount ua on t.userid = ua.userid
+        left join useraccount ua2 on ua.memberuserid = ua2.userid
+        left join useraccount ua3 on ua.parentuserid = ua3.userid
+        left join goods g on t.goodsid = g.goodsid
+        left join market m on m.marketid = g.marketid
+        left join enumdicitem en on en.enumitemname = g.goodunitid and en.enumdiccode='goodsunit'
+        where 1=1
+        <if test="vo.goodsid != null and vo.goodsid != ''">
+            and t.goodsid = #{vo.goodsid}
+        </if>
+        <if test="vo.buyorsell != null">
+            and t.buyorsell = #{vo.buyorsell}
+        </if>
+        <if test="vo.tradeid != null and vo.tradeid != ''">
+            and t.tradeid like '%'||#{vo.tradeid}||'%'
+        </if>
+        <if test="vo.accountname != null and vo.accountname != ''">
+            and (ua.accountname like '%'||#{vo.accountname,jdbcType=VARCHAR}||'%'
+            or t.accountid like'%'||#{vo.accountname,jdbcType=VARCHAR}||'%'
+            or t.userid like'%'||#{vo.accountname,jdbcType=VARCHAR}||'%')
+        </if>
+        <if test="vo.parantareaid != null and vo.parantareaid != ''">
+            and ua.parentuserid = #{vo.parantareaid}
+        </if>
+        <if test="vo.areauserid != null and vo.areauserid != 0 and vo.areauserid != 1">
+            and (ua.memberuserid = #{vo.areauserid} or ua.parentuserid =  #{vo.areauserid})
+        </if>
+        <if test="vo.validholderqty != null and vo.validholderqty == 1">
+            <![CDATA[ and t.holderqty > 0 ]]>
+        </if>
+        order by t.tradeid desc
+    </select>
+
+    <select id="queryYJCloselList" resultType="com.muchinfo.mtp3pojos.vo.query.order.TerOrderQueryResult"
+            parameterType="com.muchinfo.mtp3pojos.vo.query.order.TerOrderQueryParam">
+        select cd.opentradeid, cd.closeid,
+        vlog.LOGINIDS loginid, cd.accountid,
+        ua.userid || '/' || ua.accountname currentname,
+        g.goodscode || '/' || g.goodsname goodsfullname, hd.openprice,
+        hd.openqty, hd.openqty * g.agreeunit || ' ' || en.enumdicname "opennum",
+        cd.closeqty, cd.closeqty * g.agreeunit || ' ' || en.enumdicname "closenum",
+        cd.closeprice, cd.closepl,
+        to_char(hd.tradetime, 'yyyy-MM-dd hh24:mi:ss') as tradetime,
+        to_char(cd.closetime,'yyyy-MM-dd hh24:mi:ss') as closetime,
+        hd.buyorsell,
+        enbuyorsell.enumdicname "buyorselldisplay",
+        entradetype.enumdicname "tradetypedisplay",
+        cde.repayeddeposit, cde.rerestockdeposit, cde.recallatefee,
+        <choose>
+            <when test="vo.ishis == null or vo.ishis == 0">
+                0 "ishis"
+            </when>
+            <when test="vo.ishis == 1">
+                1 "ishis"
+            </when>
+        </choose>
+        <choose>
+            <when test="vo.ishis == null or vo.ishis == 0">
+                from trade_closedetail cd
+                left join trade_tradedetail td on cd.tradeid = td.tradeid and cd.buyorsell = td.buyorsell
+            </when>
+            <when test="vo.ishis == 1">
+                from his_trade_closedetail cd
+                left join his_trade_tradedetail td on cd.tradeid = td.tradeid and cd.buyorsell = td.buyorsell and cd.histradedate = td.histradedate
+            </when>
+        </choose>
+        inner join trade_holderdetailex hd on hd.tradeid = cd.opentradeid and hd.accountid = cd.accountid
+        left join trade_closedetailex cde on cd.closeid = cde.closeid
+        left join goods g on cd.goodsid = g.goodsid
+        left join taaccount ta on ta.accountid = cd.accountid
+        left join useraccount ua on ta.userid = ua.userid
+        left join view_user_loginids vlog on vlog.userid = ta.userid
+        left join enumdicitem enbuyorsell on hd.buyorsell = enbuyorsell.enumitemname and enbuyorsell.enumdiccode = 'buyOrSell'
+        left join enumdicitem en on en.enumitemname = g.goodunitid and en.enumdiccode='goodsunit'
+        left join enumdicitem entradetype on entradetype.enumdiccode = 'tradetype' and entradetype.enumitemname = td.tradetype
+        <where>
+            <if test="vo.ishis == 1">
+                AND cd.ISVALIDDATA = 1
+            </if>
+            <if test="vo.account != null and vo.account != ''">
+                AND (ua.accountname like '%'||#{vo.account,jdbcType=VARCHAR}||'%'
+                or ua.userid like '%'||#{vo.account,jdbcType=INTEGER}||'%')
+            </if>
+
+            <if test="vo.tradeid != null">
+                AND cd.opentradeid like '%'||#{vo.tradeid,jdbcType=BIGINT}||'%'
+            </if>
+            <if test="vo.goodsid != null">
+                and cd.goodsid = #{vo.goodsid,jdbcType=DECIMAL}
+            </if>
+            <if test="vo.startdate != null and vo.startdate != ''">
+                <![CDATA[and cd.tradedate >= replace(#{vo.startdate}, '-')]]>
+            </if>
+            <if test="vo.enddate != null and vo.enddate != ''">
+                <![CDATA[and cd.tradedate <= replace(#{vo.enddate}, '-')]]>
+            </if>
+            <if test="vo.areauserid != null and vo.areauserid != 0 and vo.areauserid != 1">
+                and (ua.memberuserid = #{vo.areauserid} or ua.parentuserid = #{vo.areauserid})
+            </if>
+            <if test="vo.buyorsell != null">
+                and hd.buyorsell = #{vo.buyorsell}
+            </if>
+            <if test="vo.tradetype != null">
+                and td.tradetype = #{vo.tradetype}
+            </if>
+        </where>
+        order by cd.closeid desc
+    </select>
+
+    <select id="queryDeliveryOfflinePage" parameterType="com.muchinfo.mtp3pojos.vo.query.order.DeliveryOrderParam"
+            resultType="com.muchinfo.mtp3pojos.vo.query.order.DeliveryOrderResult">
+        select ua.userid || '/' || lo.loginids || '/' || ua.accountname "username",
+        g.goodscode || '/' || g.goodsname "goodsdisplay",
+        e1.enumdicname "buyorselldisplay",
+        t.deliveryqty "deliveryqty",
+        t.deliveryprice "deliveryprice",
+        t.deliveryamount "deliveryamount",
+        ua2.userid || '/' || ua2.accountname "matchname",
+        t.deliveryinfo "deliveryinfo",
+        to_char(t.reqtime, 'yyyy-MM-dd hh24:mi:ss') "reqtime",
+        e2.enumdicname "orderstatusdisplay",
+        e3.enumdicname "deliverystatusdisplay",
+        t.orderstatus "orderstatus",
+        to_char(t.closetime, 'yyyy-MM-dd hh24:mi:ss') "closetime",
+        t.deliveryorderid "deliveryorderid",
+        t.deliverycharge "deliverycharge",
+        t.deliverypremium "deliverypremium",
+        t.deliverytotalamount "deliverytotalamount",
+        t.deliverystatus "deliverystatus",
+        t.payedamount "payedamount",
+        t.freezeamount "freezeamount",
+        t.deliveryqty * t.deliverypremium "deliverytotalpremium",
+        t.buyorsell "buyorsell",
+        g.goodunitid "goodunitid",
+        t.marketid "marketid",
+        t.userid "userid",
+        t.accountid "accountid",
+        t.goodsid "goodsid",
+        t.remark "remark",
+        t.sucdeliveryqty "sucdeliveryqty",
+        t.cancledeliveryqty "cancledeliveryqty",
+        t.canceldeliverylot "canceldeliverylot",
+        nvl(t.deliverytotalamount, 0) - nvl(t.payedamount, 0) "remainamount",
+        t.realdeliveryqty "realdeliveryqty",
+        t.realdeliveryqty * t.deliverypremium "realdeliverytotalpremium"
+        from Trade_GoodsDeliveryOffLine t
+        left join useraccount ua on t.userid = ua.userid
+        left join useraccount ua2 on t.matchuserid = ua2.userid
+        left join goods g on t.goodsid = g.goodsid
+        left join enumdicitem e1 on e1.enumdiccode = 'buyOrSell' and t.buyorsell = e1.enumitemname
+        left join enumdicitem e2 on e2.enumdiccode = 'deliveryOrderStatus' and t.orderstatus = e2.enumitemname
+        left join enumdicitem e3 on e3.enumdiccode = 'deliveryStatus' and t.deliverystatus = e3.enumitemname
+        left join VIEW_USER_LOGINIDS lo on ua.userid = lo.userid
+        where 1=1
+        <if test="vo.accountname !=null and vo.accountname != '' ">
+            AND (ua.accountname = #{vo.accountname} or t.accountid like #{vo.accountname}
+            or ua.userid like #{vo.accountname}
+            )
+        </if>
+        <if test="vo.deliverygoodsname  != null and vo.deliverygoodsname !=''">
+            and (g.goodscode like '%'||#{vo.deliverygoodsname}||'%' or g.goodsname like '%'||#{vo.deliverygoodsname}||'%')
+        </if>
+        <if test="vo.deliveryorderstatus != null and vo.deliveryorderstatus !=''">
+            AND (t.orderstatus = #{vo.deliveryorderstatus} or t.deliverystatus = #{vo.deliveryorderstatus})
+        </if>
+        <if test="vo.matchuserid  != null and vo.matchuserid !=''">
+            and t.matchuserid = #{vo.matchuserid}
+        </if>
+        <if test="vo.buyorsell != null">
+            and t.buyorsell = #{vo.buyorsell}
+        </if>
+        <if test="vo.startdate != null and vo.startdate !=''">
+            and to_char(t.reqtime, 'yyyy-MM-dd') = #{vo.startdate}
+        </if>
+        <if test="vo.deliveryorderid != null and vo.deliveryorderid !=''">
+            AND t.deliveryorderid = #{vo.deliveryorderid}
+        </if>
+        order by t.reqtime desc
+    </select>
+
+    <!--	持仓单扩展日照表 亿爵-->
+    <select id="queryOrderDate" parameterType="com.muchinfo.mtp3pojos.vo.query.order.OrderDateQueryParam"
+            resultType="com.muchinfo.mtp3pojos.vo.query.order.OrderDateQueryResult">
+        WITH MaxDates AS (
+        SELECT t.tradeid, t.accountid, max(t.reckondate) reckondate
+        FROM Reckon_Trade_HolderDetailEx t
+        GROUP BY t.tradeid, t.accountid
+        )
+        select t.tradedate "reckondate",
+        t.tradeid "tradeid",
+        t.buyorsell "buyorsell",
+        t.tradedate "tradedate",
+        t.marketid "marketid",
+        t.goodsid "goodsid",
+        t.userid "userid",
+        t.accountid "accountid",
+        t.matchuserid "matchuserid",
+        t.matchaccountid "matchaccountid",
+        t.openqty "openqty",
+        t.tradeamount "tradeamount",
+        t.openprice "openprice",
+        t.holderqty "holderqty",
+        t.holderamount "holderamount",
+        t.holderprice "holderprice",
+        t.freezeqty "freezeqty",
+        t.deliveryqty "deliveryqty",
+        t.holddays "holddays",
+        t.payeddeposit "payeddeposit",
+        t.restockdeposit "restockdeposit",
+        t.latefeedays "latefeedays",
+        t.latefeealgorithm "latefeealgorithm",
+        t.latefeevalue "latefeevalue",
+        t.callatefee "callatefee",
+        t.promptdepositrate "promptdepositrate",
+        t.cutdepositrate "cutdepositrate",
+        t.promptprice "promptprice",
+        t.cutprice "cutprice",
+        t.closepl "closepl",
+        t.floatpl "floatpl",
+        t.depositrate "depositrate",
+        --         t.reckondeposit "reckondeposit",
+        t.refundabledeposit "refundabledeposit",
+        t.payedlatefee "payedlatefee",
+        g.goodscode || '/' || g.goodsname "goodsfullname",
+        ua.userid || '/' || ua.accountname "userfullname",
+        ua2.userid || '/' || ua2.accountname "areafullname",
+        t.openqty * g.agreeunit || ' ' || e2.enumdicname "opennum",
+        t.holderqty * g.agreeunit || ' ' || e2.enumdicname "holdernum",
+        t.freezeqty * g.agreeunit || ' ' || e2.enumdicname "freezenum",
+        t.deliveryqty * g.agreeunit || ' ' || e2.enumdicname "deliverynum",
+        e.enumdicname "buyorselldisplay",
+        TO_CHAR(ROUND(t.depositrate * 100,2), '9999999999.99') || '%' "depositratedisplay",
+        sm.logincode "operatorcode",
+        t.oripayeddeposit "oripayeddeposit",
+        t.orirestockdeposit "orirestockdeposit"
+        from reckon_trade_holderdetailex t
+        inner join MaxDates m on t.tradeid = m.tradeid and t.reckondate = m.reckondate and t.accountid = m.accountid
+        left join hedge_outimportorder ho on t.tradeid = ho.relatedtradeid and t.userid = ho.userid
+        left join systemmanager sm on ho.creatorid = sm.autoid
+        left join goods g on t.goodsid = g.goodsid
+        left join useraccount ua on t.userid = ua.userid
+        left join useraccount ua2 on ua2.userid = ua.memberuserid
+        left join enumdicitem e on e.enumdiccode = 'buyOrSell' and t.buyorsell = e.enumitemname
+        left join enumdicitem e2 on e2.enumdiccode = 'goodsunit' and g.goodunitid = e2.enumitemname
+        where 1 = 1
+        <if test="vo.startDate != null and vo.startDate != '' and vo.endDate != null and vo.endDate != ''">
+            and (to_date(t.tradedate,'yyyyMMdd') between to_date(#{vo.startDate},'yyyy-MM-dd') and
+            to_date(#{vo.endDate},'yyyy-MM-dd'))
+        </if>
+        <if test="vo.areauserid !=null and vo.areauserid != ''">
+            and ua.memberuserid = #{vo.areauserid}
+        </if>
+        <if test="vo.currentUserId !=null and vo.currentUserId != ''">
+            and t.userid = #{vo.currentUserId}
+        </if>
+        <if test="vo.goodsid !=null and vo.goodsid != ''">
+            and t.goodsid = #{vo.goodsid}
+        </if>
+        <if test="vo.tradeid !=null and vo.tradeid != ''">
+            and t.tradeid = #{vo.tradeid}
+        </if>
+        order by t.tradedate desc, t.tradeid desc
+    </select>
+
+    <select id="queryForcedOrder" parameterType="com.muchinfo.mtp3pojos.vo.query.order.ForcedOrderParam"
+            resultType="com.muchinfo.mtp3pojos.vo.query.order.ForcedOrderResult">
+        select t.closeid "closeid",
+        t.tradeid "tradeid",
+        t.opentradeid "opentradeid",
+        ua.userid "userid",
+        t.accountid "accountid",
+        t.marketid "marketid",
+        ua.userid || '/' || ua.accountname "userfullname",
+        ua2.userid || '/' || ua2.accountname "memberfullname",
+        g.goodscode || '/' || g.goodsname "goodsfullname",
+        t.buyorsell "buyorsell",
+        hd.buyorsell "holderbuyorsell",
+        t.openprice "openprice",
+        hd.openqty "openqty",
+        hd.openqty * g.agreeunit || ' ' || en.enumdicname "opennum",
+        to_char(hd.tradetime, 'yyyy-MM-dd hh24:mi:ss') "opentime",
+        t.closeprice "closeprice",
+        t.closeqty "closeqty",
+        t.isconfirmexercise "isconfirmexercise",
+        t.closeqty * g.agreeunit || ' ' || en.enumdicname "closenum",
+        to_char(t.closetime, 'yyyy-MM-dd hh24:mi:ss') "closetime",
+        t.closepl "closepl",
+        TO_CHAR(hd.depositrate * 100, 'FM9999990.00') || '%' "depositrate"
+        <choose>
+            <when test="vo.ishis == 1">
+                from his_trade_tradedetail td
+                inner join his_trade_closedetail t on t.tradeid = td.tradeid and t.accountid = td.accountid and td.histradedate = t.histradedate
+            </when>
+            <otherwise>
+                from trade_tradedetail td
+                inner join trade_closedetail t on t.tradeid = td.tradeid and t.accountid = td.accountid
+            </otherwise>
+        </choose>
+        inner join trade_holderdetailex hd on t.opentradeid = hd.tradeid and t.accountid = hd.accountid
+        left join taaccount ta on ta.accountid = t.accountid
+        left join useraccount ua on ta.userid = ua.userid
+        left join useraccount ua2 on ua.memberuserid = ua2.userid
+        left join goods g on g.goodsid = t.goodsid
+        left join enumdicitem en on en.enumdiccode = 'goodsunit' and g.goodunitid = en.enumitemname
+        where td.tradetype = 6
+        <if test="vo.closeid != null and vo.closeid != ''">
+            and t.closeid = #{vo.closeid}
+        </if>
+        <if test="vo.opentradeid != null and vo.opentradeid != ''">
+            and t.opentradeid like '%' || #{vo.opentradeid} || '%'
+        </if>
+        <if test="vo.holderbuyorsell != null">
+            and hd.buyorsell = #{vo.holderbuyorsell}
+        </if>
+        <if test="vo.goodsid != null and vo.goodsid != ''">
+            and t.goodsid = #{vo.goodsid}
+        </if>
+        <if test="vo.accountname != null and vo.accountname != ''">
+            and (ua.userid like '%' || #{vo.accountname} ||'%' or ua.accountname like '%' || #{vo.accountname} ||'%')
+        </if>
+        <if test="vo.ishis == 1">
+            AND td.ISVALIDDATA = 1
+        </if>
+        <if test="vo.startdate != null and vo.startdate != ''">
+            <![CDATA[and td.tradedate >= replace(#{vo.startdate}, '-')]]>
+        </if>
+        <if test="vo.enddate != null and vo.enddate != ''">
+            <![CDATA[and td.tradedate <= replace(#{vo.enddate}, '-')]]>
+        </if>
+        order by t.closetime desc
+    </select>
+</mapper>

+ 392 - 27
mtp3-century/src/main/resources/mapper/TradeOrderdetailMapper.xml

@@ -958,6 +958,9 @@
             <if test="vo.goodsid !=null and vo.goodsid !='' ">
                 and t.goodsid = #{vo.goodsid}
             </if>
+            <if test="vo.accountid !=null and vo.accountid !='' ">
+                and t.accountid = #{vo.accountid}
+            </if>
             <if test="vo.accname !=null and vo.accname !='' ">
                 and (ua.accountname like '%'||#{vo.accname,jdbcType=VARCHAR}||'%'
                 or t.accountid like '%'||#{vo.accname,jdbcType=INTEGER}||'%')
@@ -1429,14 +1432,14 @@
         d.deliveryorderstatus, d.ordertime,
         g1.goodsname as xgoodsname,
         g2.goodsname as pgoodsname,
-        wr.wrstandardid, wr.wrstandardcode+'/' + wr.wrstandardname as deliverygoodsname, dic.enumdicname unitname,
-        lo.loginids + '/'+ u.accountname as accountidname
+        wr.wrstandardid, wr.wrstandardcode || '/' || wr.wrstandardname as deliverygoodsname, dic.enumdicname unitname,
+        lo.loginids || '/' || u.accountname as accountidname
         <choose>
             <when test="vo.ishis == null or vo.ishis == 0">
-                from HIS_DELIVERYORDER d
+                from Deliveryorder d
             </when>
             <when test="vo.ishis == 1">
-                from Deliveryorder d
+                from HIS_DELIVERYORDER d
             </when>
         </choose>
         left join goods g1
@@ -1454,7 +1457,10 @@
         left join enumdicitem dic on wr.unitid=dic.enumitemname and dic.enumdiccode = 'goodsunit'
         left join VIEW_USER_LOGINIDS lo on u.userid = lo.userid
         <where>
-            d.selldeliveryapplyorderid is null and d.isvaliddata = 1
+            d.selldeliveryapplyorderid is null
+            <if test="vo.ishis != null and vo.ishis == 1">
+                and d.isvaliddata = 1
+            </if>
             <if test="vo.deliveryorderid != null and vo.deliveryorderid != ''">
                 AND d.deliveryorderid like '%'||#{vo.deliveryorderid}||'%'
             </if>
@@ -1475,7 +1481,15 @@
                 and to_date(#{vo.enddate},'yyyy-MM-dd')
             </if>
         </where>
-        order by d.histradedate desc
+        <choose>
+            <when test="vo.ishis == null or vo.ishis == 0">
+                order by d.ordertime desc
+            </when>
+            <when test="vo.ishis == 1">
+                order by d.histradedate desc
+            </when>
+        </choose>
+
     </select>
 
     <select id="queryDeliveryOrderById" resultType="com.muchinfo.mtp3pojos.vo.query.deliveryorder.DeliveryOrderDetailResult">
@@ -1517,7 +1531,8 @@
         dgp2.pricemovedesc as specname ,
         dgp3.pricemovedesc as qualityname ,
         dgp4.pricemovedesc as warehousename ,
-        dgp5.pricemovedesc as deliverymonthname
+        dgp5.pricemovedesc as deliverymonthname,
+        wr.wrstandardcode, wr.wrstandardname
         <choose>
             <when test="histradedate != null and histradedate != ''">
                 from HIS_DELIVERYORDER d
@@ -1534,6 +1549,8 @@
         on d.p2goodsid = g3.goodsid
         left join deliverygoods dg
         on d.deliverygoodsid = dg.deliverygoodsid
+        left join wrfactortype wft on d.wrfactortypeid = wft.wrfactortypeid
+        left join wrstandard wr on wr.wrstandardid = wft.wrstandardid
         left join deliverygoodspricemove dgp1 on dgp1.autoid = d.brandid
         left join deliverygoodspricemove dgp2 on dgp2.autoid = d.specid
         left join deliverygoodspricemove dgp3 on dgp3.autoid = d.qualityid
@@ -1541,18 +1558,20 @@
         left join deliverygoodspricemove dgp5 on dgp5.autoid = d.deliverymonthid
         left join SystemManager sm on sm.autoid = d.auditid
         <where>
-            d.deliveryorderid = #{deliveryorderid} and d.isvaliddata = 1
+            d.deliveryorderid = #{deliveryorderid}
+            <if test="histradedate != null and histradedate != ''">
+                and d.isvaliddata = 1
+            </if>
             <if test="histradedate != null and histradedate != ''">
                 and d.histradedate = #{histradedate}
             </if>
-
         </where>
     </select>
 
     <select id="queryWRFactorTypeItemNew" resultType="com.muchinfo.mtp3pojos.entity.Wrfactortypeitem">
         select w.*,
-        t.itemtypename dgfactoryitemtypename,
-        f.dgfactoryitemvalue dgfactoryitemname
+            t.itemtypename dgfactoryitemtypename,
+            f.dgfactoryitemvalue dgfactoryitemname
         from wrfactortype wft
         left join wrfactortypeitem w on wft.wrfactortypeid = w.wrfactortypeid
         left join DGFactoryItemType t on t.itemtypemode = 1 and wft.deliverygoodsid = t.deliverygoodsid and w.dgfactoryitemtypeid = t.dgfactoryitemtypeid
@@ -1580,7 +1599,7 @@
         c.goodsname as p_goodsname,a.deliverygoodsid,
         a.deliveryqty,a.deliveryprice,a.deliveryamount,a.deliverypricemove,
         a.deliverycharge,a.buydeliveryapplyorderid,a.selldeliveryapplyorderid,
-        wr.wrstandardid, wr.wrstandardcode + '/' + wr.wrstandardname as deliverygoodsname, dic.enumdicname unitname,
+        wr.wrstandardid, wr.wrstandardcode || '/' || wr.wrstandardname as deliverygoodsname, dic.enumdicname unitname,
         lo1.loginids as loginid, lo2.loginids as matchloginid
         <choose>
             <when test="vo.ishis == 1">
@@ -1601,15 +1620,21 @@
         left join taaccount ta2 on ta2.accountid = a.matchaccountid
         left join VIEW_USER_LOGINIDS lo2 on ta2.userid = lo2.userid
         <where>
-            a.deliverystatus in (2,4)  and a.isvaliddata = 1
             <choose>
                 <when test="vo.ishis == 1">
-                    and a.mainorderflag = 1
+                    a.deliverystatus in (2,4) and a.mainorderflag = 1 and a.isvaliddata = 1
+                    <if test="vo.userid != null">
+                        and ((a.accountid in (select ab.accountid from taaccount ab where ab.userid=#{vo.userid}))
+                        or(a.matchaccountid in (select ab.accountid from taaccount ab where ab.userid=#{vo.userid})))
+                    </if>
                 </when>
                 <otherwise>
                     <if test="vo.mainorderflag != null">
                         and a.mainorderflag = #{vo.mainorderflag}
                     </if>
+                    <if test="vo.userid != null">
+                        and (a.accountid in (select ab.accountid from taaccount ab where ab.userid=#{vo.userid}))
+                    </if>
                 </otherwise>
             </choose>
             <if test="vo.deliveryid != null and vo.deliveryid != '' ">
@@ -1636,15 +1661,20 @@
                 and to_date(a.histradedate,'yyyyMMdd') between to_date(#{vo.startdate},'yyyy-MM-dd')
                 and to_date(#{vo.enddate},'yyyy-MM-dd')
             </if>
-            <if test="vo.userid != null">
-                and ((a.accountid in (select ab.accountid from taaccount ab where ab.userid=#{vo.userid}))
-                or(a.matchaccountid in (select ab.accountid from taaccount ab where ab.userid=#{vo.userid})))
-            </if>
             <if test="vo.buyorsell != null">
                 and a.buyorsell = #{vo.buyorsell,jdbcType=DECIMAL}
             </if>
         </where>
-        order by a.histradedate desc, a.deliveryid desc
+        order by
+        <choose>
+            <when test="vo.ishis == 1">
+                a.histradedate desc,
+            </when>
+            <otherwise>
+                a.tradedate desc,
+            </otherwise>
+        </choose>
+        a.deliveryid desc
     </select>
 
 
@@ -1654,7 +1684,7 @@
         a.deliveryid,
         a.buyorsell,
         <choose>
-            <when test="histradedate != null and histradedate != ''">
+            <when test="vo.histradedate != null and vo.histradedate != ''">
                 to_char(to_date(a.histradedate,'yyyy-MM-dd'),'yyyy-MM-dd') as histradedate,
             </when>
         </choose>
@@ -1662,8 +1692,8 @@
         a.deliveryorderid,
         a.accountid,
         a.matchaccountid,
-        a.xgoodsid, g1.goodsname as x_goodsname,a.xdeliverycloseqty,a.xdeliveryprice,
-        a.pgoodsid, a.ppricemode, g2.goodsname as p_goodsname,a.pdeliverycloseqty,a.pdeliveryprice,
+        a.xgoodsid, g1.goodsname as xgoodsname,a.xdeliverycloseqty,a.xdeliveryprice,
+        a.pgoodsid, a.ppricemode, g2.goodsname as pgoodsname,a.pdeliverycloseqty,a.pdeliveryprice,
         a.p2goodsid, a.p2pricemode, g3.goodsname as p2goodsname,a.p2deliverycloseqty,a.p2deliveryprice,
         a.deliverygoodsid,d.deliverygoodsname,
         a.deliverytime,
@@ -1690,9 +1720,9 @@
         a.freezemargin,
         a.takemode,
         a.receiveraddress,
-        e.enumdicname as deliverygoodsunitname
+        e.enumdicname as deliverygoodsunitname,
         <choose>
-            <when test="histradedate != null and histradedate != ''">
+            <when test="vo.histradedate != null and vo.histradedate != ''">
                 dgp1.pricemovedesc as brandname ,
                 dgp2.pricemovedesc as specname ,
                 dgp3.pricemovedesc as qualityname ,
@@ -1729,10 +1759,10 @@
             </otherwise>
         </choose>
         <where>
-            a.deliveryid = #{deliveryid, jdbcType=DECIMAL}
-            and a.buyorsell=#{buyorsell, jdbcType=INTEGER}
+            a.deliveryid = #{vo.deliveryid, jdbcType=DECIMAL}
+            and a.buyorsell=#{vo.buyorsell, jdbcType=INTEGER}
             <if test="vo.histradedate != null">
-                and a.histradedate = #{histradedate}
+                and a.histradedate = #{vo.histradedate}
                 and a.isvaliddata = 1
             </if>
         </where>
@@ -1993,4 +2023,339 @@
             </if>
         </where>
     </select>
+
+
+    <select id="queryDeliveryOfflinePage" parameterType="com.muchinfo.mtp3pojos.vo.query.deliveryorder.OfflineDeliveryParam"
+            resultType="com.muchinfo.mtp3pojos.vo.query.deliveryorder.OfflineDeliveryResult">
+        select ua.userid || '/' || lo.loginids || '/' || ua.accountname "username",
+        g.goodscode || '/' || g.goodsname "goodsdisplay",
+        e1.enumdicname "buyorselldisplay",
+        t.deliveryqty "deliveryqty",
+        t.deliveryprice "deliveryprice",
+        t.deliveryamount "deliveryamount",
+        ua2.userid || '/' || ua2.accountname "matchname",
+        t.deliveryinfo "deliveryinfo",
+        to_char(t.reqtime, 'yyyy-MM-dd hh24:mi:ss') "reqtime",
+        e2.enumdicname "orderstatusdisplay",
+        e3.enumdicname "deliverystatusdisplay",
+        t.orderstatus "orderstatus",
+        to_char(t.closetime, 'yyyy-MM-dd hh24:mi:ss') "closetime",
+        t.deliveryorderid "deliveryorderid",
+        t.deliverycharge "deliverycharge",
+        t.deliverypremium "deliverypremium",
+        t.deliverytotalamount "deliverytotalamount",
+        t.deliverystatus "deliverystatus",
+        t.payedamount "payedamount",
+        t.freezeamount "freezeamount",
+        t.deliveryqty * t.deliverypremium "deliverytotalpremium",
+        t.buyorsell "buyorsell",
+        g.goodunitid "goodunitid",
+        t.marketid "marketid",
+        t.userid "userid",
+        t.accountid "accountid",
+        t.goodsid "goodsid",
+        t.remark "remark",
+        t.sucdeliveryqty "sucdeliveryqty",
+        t.cancledeliveryqty "cancledeliveryqty",
+        t.canceldeliverylot "canceldeliverylot",
+        nvl(t.deliverytotalamount, 0) - nvl(t.payedamount, 0) "remainamount",
+        t.realdeliveryqty "realdeliveryqty",
+        t.realdeliveryqty * t.deliverypremium "realdeliverytotalpremium"
+        from Trade_GoodsDeliveryOffLine t
+        left join useraccount ua on t.userid = ua.userid
+        left join useraccount ua2 on t.matchuserid = ua2.userid
+        left join goods g on t.goodsid = g.goodsid
+        left join enumdicitem e1 on e1.enumdiccode = 'buyOrSell' and t.buyorsell = e1.enumitemname
+        left join enumdicitem e2 on e2.enumdiccode = 'deliveryOrderStatus' and t.orderstatus = e2.enumitemname
+        left join enumdicitem e3 on e3.enumdiccode = 'deliveryStatus' and t.deliverystatus = e3.enumitemname
+        left join VIEW_USER_LOGINIDS lo on ua.userid = lo.userid
+        where 1=1
+        <if test="vo.accountname !=null and vo.accountname != '' ">
+            AND (ua.accountname = #{vo.accountname} or t.accountid like #{vo.accountname}
+            or ua.userid like #{vo.accountname} )
+        </if>
+        <if test="vo.deliverygoodsname  != null and vo.deliverygoodsname !=''">
+            and (g.goodscode like '%'||#{vo.deliverygoodsname}||'%' or g.goodsname like '%'||#{vo.deliverygoodsname}||'%')
+        </if>
+        <if test="vo.deliveryorderstatus != null and vo.deliveryorderstatus !=''">
+            AND (t.orderstatus = #{vo.deliveryorderstatus} or t.deliverystatus = #{vo.deliveryorderstatus})
+        </if>
+        <if test="vo.matchuserid  != null and vo.matchuserid !=''">
+            and t.matchuserid = #{vo.matchuserid}
+        </if>
+        <if test="vo.buyorsell != null">
+            and t.buyorsell = #{vo.buyorsell}
+        </if>
+        <if test="vo.startdate != null and vo.startdate !=''">
+            and to_char(t.reqtime, 'yyyyMMdd') = #{vo.startdate}
+        </if>
+        order by t.reqtime desc
+    </select>
+
+    <select id="queryDeliveryOfflineDetail" resultType="com.muchinfo.mtp3pojos.vo.query.deliveryorder.OfflineDeliveryDetailResult">
+        select ua.userid || '/' || lo.loginids || '/' || ua.accountname "username",
+        g.goodscode || '/' || g.goodsname "goodsdisplay",
+        e1.enumdicname "buyorselldisplay",
+        t.deliveryqty "deliveryqty",
+        t.deliveryprice "deliveryprice",
+        t.deliveryamount "deliveryamount",
+        ua2.userid || '/' || ua2.accountname "matchname",
+        t.deliveryinfo "deliveryinfo",
+        to_char(t.reqtime, 'yyyy-MM-dd hh24:mi:ss') "reqtime",
+        e2.enumdicname "orderstatusdisplay",
+        e3.enumdicname "deliverystatusdisplay",
+        t.orderstatus "orderstatus",
+        to_char(t.closetime, 'yyyy-MM-dd hh24:mi:ss') "closetime",
+        t.deliveryorderid "deliveryorderid",
+        t.deliverycharge "deliverycharge",
+        t.deliverypremium "deliverypremium",
+        t.deliverytotalamount "deliverytotalamount",
+        t.deliverystatus "deliverystatus",
+        t.payedamount "payedamount",
+        t.freezeamount "freezeamount",
+        t.deliveryqty * t.deliverypremium "deliverytotalpremium",
+        t.buyorsell "buyorsell",
+        g.goodunitid "goodunitid",
+        t.marketid "marketid",
+        t.userid "userid",
+        t.accountid "accountid",
+        t.goodsid "goodsid",
+        t.remark "remark",
+        t.sucdeliveryqty "sucdeliveryqty",
+        t.cancledeliveryqty "cancledeliveryqty",
+        t.canceldeliverylot "canceldeliverylot",
+        nvl(t.deliverytotalamount, 0) - nvl(t.payedamount, 0) "remainamount",
+        t.realdeliveryqty "realdeliveryqty",
+        t.realdeliveryqty * t.deliverypremium "realdeliverytotalpremium"
+        from Trade_GoodsDeliveryOffLine t
+        left join useraccount ua on t.userid = ua.userid
+        left join useraccount ua2 on t.matchuserid = ua2.userid
+        left join goods g on t.goodsid = g.goodsid
+        left join enumdicitem e1 on e1.enumdiccode = 'buyOrSell' and t.buyorsell = e1.enumitemname
+        left join enumdicitem e2 on e2.enumdiccode = 'deliveryOrderStatus' and t.orderstatus = e2.enumitemname
+        left join enumdicitem e3 on e3.enumdiccode = 'deliveryStatus' and t.deliverystatus = e3.enumitemname
+        left join VIEW_USER_LOGINIDS lo on ua.userid = lo.userid
+        where 1=1
+        <if test="deliveryorderid != null and deliveryorderid !=''">
+            AND t.deliveryorderid = #{deliveryorderid}
+        </if>
+        order by t.reqtime desc
+    </select>
+
+    <update id="closeDeliveryOffline" >
+        update Trade_GoodsDeliveryOffLine t
+        set t.orderstatus   =3,
+            t.closetime     = sysdate,
+            t.closetradedate=#{tradedate}
+        where t.deliveryorderid = #{deliveryorderid}
+    </update>
+
+    <update id="failDeliveryOffline" >
+        update Trade_GoodsDeliveryOffLine t
+        set t.orderstatus   =5,
+            t.closetime     = sysdate,
+            t.closetradedate=#{tradedate},
+            t.remark        = #{auditremark}
+        where t.deliveryorderid = #{deliveryorderid}
+    </update>
+
+
+    <!-- 查询电子签记录 -->
+    <select id="queryesignrecord" parameterType="com.muchinfo.mtp3pojos.vo.query.other.EsignrecordQueryParam"
+            resultType="com.muchinfo.mtp3pojos.vo.query.other.EsignrecordQueryResult">
+        select uer.recordid "recordid",
+        ua.userid || '/' || ua.accountname "userfullname",
+        vlogs.LOGINIDS "loginid",
+        et.esigntype "esigntype",
+        uer.templatetype "templatetype",
+        uer.templatename "templatename",
+        uer.recordstatus "recordstatus",
+        to_char(uer.updatetime, 'yyyy-MM-dd hh24:mi:ss') "updatetimestr"
+        from useresignrecord uer
+        left join esigntemplateconfig et on et.templateconfigid = uer.templateconfigid
+        left join useraccount ua on ua.userid = uer.userid
+        left join view_user_loginids vlogs on vlogs.USERID = uer.userid
+        where 1=1
+        <if test="vo.userid != null and vo.userid != ''">
+            and uer.userid = (${vo.userid})
+        </if>
+        <if test="vo.recordstatus != null and vo.recordstatus != ''">
+            and uer.recordstatus = (${vo.recordstatus})
+        </if>
+        order by uer.userid, uer.orderindex
+    </select>
+
+    <select id="queryinvestor" resultType="com.muchinfo.mtp3pojos.vo.query.other.InvestorQueryResult"
+            parameterType="com.muchinfo.mtp3pojos.vo.query.other.InvestorQueryParam">
+        select
+        t.accountid,t.userid,t.currencyid,
+        t.changeflag,t.tradestatus,
+        t.signstatus, t.ismain, t.parentaccountid, t.fromaccountid,
+        t.relateduserid,
+        t.relatedaccountstatus, t.taaccounttype,
+        t.isreckonaccount,
+        t.ismarketaccount, t.balance,
+        t.orifreezemargin, t.oriusedmargin,
+        t.oriotherfreezemargin,
+        t.orifreezecharge, t.orimortgagecredit,
+        t.oriothercredit,
+        t.orioutamountfreeze, t.currentbalance,
+        t.freezemargin,
+        t.usedmargin, t.otherfreezemargin, t.freezecharge,
+        t.mortgagecredit, t.othercredit, t.outamountfreeze,
+        t.inamount,
+        t.outamount, t.paycharge,
+        t.closepl, t.creditincrease,
+        t.creditdecrease,
+        t.othercreditincrease, t.othercreditdecrease,
+        t.transferamount, t.otherpay, t.otherincome,
+        t.outthreshold,
+        u.accountname,
+        u.userid || '/' || u.accountname as accountcodename,
+        t1. invloginids,
+        u.parentuserid,
+        area.userid || '/' || area.accountname as parentarea,
+        u.memberuserid as memberid,
+        ua.userid || '/' || ua.accountname as membername
+        from (
+        select
+        t.accountid,t.userid,t.currencyid,
+        wm_concat(la.loginid) as invloginids
+        from
+        taaccount t
+        left join useraccount u on t.userid = u.userid
+        left join
+        loginaccount la on t.userid=la.userid
+        group by
+        t.accountid,t.userid,t.currencyid) t1 ,taaccount t
+        left join
+        useraccount u on t.userid = u.userid
+        left join useraccount ua on
+        ua.userid=u.memberuserid
+        left join useraccount area on
+        area.userid=u.parentuserid
+        <where>
+            t.accountid != 1 and t1.accountid=t.accountid
+            <if test="vo.accountcode !=null and vo.accountcode != '' ">
+                and t.userid = #{vo.accountcode}
+            </if>
+            <if test="vo.roles != null and vo.roles !='' ">
+                and t.userid in (select userid from arearole where roletype in (${vo.roles}))
+            </if>
+            <if test="vo.accountstatus != null and vo.accountstatus == 1">
+                and u.accountstatus = 4
+            </if>
+            <if test="vo.accountstatus != null and vo.accountstatus == 2">
+                and u.accountstatus in (6,7)
+            </if>
+            <if test="vo.accountid !=null and vo.accountid != '' ">
+                and t.accountid like
+                '%'||#{vo.accountid,jdbcType=DECIMAL}||'%'
+            </if>
+            <if test="vo.type !=null and vo.type != '' ">
+                <choose>
+                    <when test="vo.type == 2">
+                        and u.usertype in (1,2,3)
+                    </when>
+                    <otherwise>
+                        and u.usertype = #{vo.type}
+                    </otherwise>
+                </choose>
+            </if>
+            <if test="vo.areauserid != null and vo.areauserid != '' ">
+                <choose>
+                    <when test="vo.changeflag!=null and vo.changeflag==3">
+                        and u.memberuserid in (select u1.userid from useraccount u1 where u1.parentuserid=#{vo.areauserid}
+                        or u1.userid=#{vo.areauserid})
+                    </when>
+                    <otherwise>
+                        and (u.userid in (
+                        select userid from useraccount uo
+                        start with uo.parentuserid = #{vo.areauserid}
+                        connect by prior uo.userid =uo.parentuserid and uo.userid !=#{vo.areauserid} ))
+                    </otherwise>
+                </choose>
+            </if>
+            <if test="vo.loginid != null and vo.loginid != '' ">
+                and t.userid in (select la.userid from loginaccount la
+                where la.loginid = #{vo.loginid})
+            </if>
+            <if test="vo.memberid !=null and vo.memberid != ''">
+                and u.memberuserid = #{vo.memberid}
+            </if>
+            <if test="vo.parentarea !=null and vo.parentarea != ''">
+                and ((area.accountname like
+                '%'||#{vo.parentarea,jdbcType=VARCHAR}||'%')
+                or(u.parentuserid like
+                '%'||#{vo.parentarea,jdbcType=VARCHAR}||'%'))
+            </if>
+        </where>
+        <choose>
+            <when test="vo.sortfield != null and vo.sortfield == 1">
+                <choose>
+                    <when test="vo.sorttype != null and vo.sorttype == 0 ">
+                        order by t.balance asc
+                    </when>
+                    <otherwise>
+                        order by t.balance desc
+                    </otherwise>
+                </choose>
+            </when>
+            <when test="vo.sortfield != null and vo.sortfield == 2">
+                <choose>
+                    <when test="vo.sorttype != null and vo.sorttype == 0 ">
+                        order by t.currentbalance asc
+                    </when>
+                    <otherwise>
+                        order by t.currentbalance desc
+                    </otherwise>
+                </choose>
+            </when>
+            <when test="vo.sortfield != null and vo.sortfield == 3">
+                <choose>
+                    <when test="vo.sorttype != null and vo.sorttype == 0 ">
+                        order by t.inamount asc
+                    </when>
+                    <otherwise>
+                        order by t.inamount desc
+                    </otherwise>
+                </choose>
+            </when>
+            <when test="vo.sortfield != null and vo.sortfield == 4">
+                <choose>
+                    <when test="vo.sorttype != null and vo.sorttype == 0 ">
+                        order by t.outamount asc
+                    </when>
+                    <otherwise>
+                        order by t.outamount desc
+                    </otherwise>
+                </choose>
+            </when>
+            <when test="vo.sortfield != null and vo.sortfield == 5">
+                <choose>
+                    <when test="vo.sorttype != null and vo.sorttype == 0 ">
+                        order by t.closepl asc
+                    </when>
+                    <otherwise>
+                        order by t.closepl desc
+                    </otherwise>
+                </choose>
+            </when>
+            <when test="vo.sortfield != null and vo.sortfield == 6">
+                <choose>
+                    <when test="vo.sorttype != null and vo.sorttype == 0 ">
+                        order by t.PAYCHARGE asc
+                    </when>
+                    <otherwise>
+                        order by t.PAYCHARGE desc
+                    </otherwise>
+                </choose>
+            </when>
+
+            <otherwise>
+                order by u.accountname
+            </otherwise>
+        </choose>
+    </select>
+
 </mapper>

+ 21 - 0
mtp3-century/src/main/resources/mapper/UseraccountMapper.xml

@@ -737,4 +737,25 @@
         where c.tradepropertyid=(select m.tradeproperty from market m where m.marketid = #{marketid})
         and g.feealgorithm is not null
     </select>
+
+    <!-- 查询经纪会员+下属所有子机构-->
+    <select id="queryOrganSelect2And3"
+            parameterType="com.muchinfo.mtp3pojos.vo.common.OrganSelectParam"
+            resultType="com.muchinfo.mtp3pojos.vo.common.OrganSelectResult">
+        SELECT o.userid ,o.memberuserid, o.accountname, o.parentuserid,o.usertype usertype
+        FROM useraccount o
+        WHERE (o.accountstatus = 4 AND
+        (o.usertype = 3 OR EXISTS
+        (SELECT userid FROM arearole WHERE roletype = 7 AND userid = o.userid)))
+        <if test="vo.userid!=null  and vo.userid!=''">
+            AND o.subarealevelpath LIKE '%,'||#{vo.userid}||',%'
+        </if>
+        <if test="vo.accountname != null and vo.accountname !=''">
+            and (o.accountname like '%'||#{vo.accountname,jdbcType=VARCHAR}||'%'
+            or o.userid like '%'||#{vo.accountname,jdbcType=VARCHAR}||'%')
+        </if>
+
+        and rownum &lt;= 10
+        ORDER BY o.userid
+    </select>
 </mapper>

+ 230 - 0
mtp3-century/src/main/resources/mapper/WroutinapplyMapper.xml

@@ -0,0 +1,230 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.muchinfo.mtp3interface.mapper.IWroutinapplyMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.muchinfo.mtp3pojos.entity.Wroutinapply">
+        <id column="APPLYID" property="applyid" />
+        <result column="APPLYTYPE" property="applytype" />
+        <result column="WRSTANDARDID" property="wrstandardid" />
+        <result column="WRSTANDARDCODE" property="wrstandardcode" />
+        <result column="DELIVERYGOODSID" property="deliverygoodsid" />
+        <result column="WAREHOUSEID" property="warehouseid" />
+        <result column="USERID" property="userid" />
+        <result column="ACCOUNTID" property="accountid" />
+        <result column="MOBILE" property="mobile" />
+        <result column="APPOINTMENTDATE" property="appointmentdate" />
+        <result column="APPOINTMENTMODEL" property="appointmentmodel" />
+        <result column="COUNTRYID" property="countryid" />
+        <result column="PROVINCEID" property="provinceid" />
+        <result column="DISTRICTID" property="districtid" />
+        <result column="CITYID" property="cityid" />
+        <result column="ADDRESS" property="address" />
+        <result column="CONTACTNAME" property="contactname" />
+        <result column="CONTACTNUM" property="contactnum" />
+        <result column="APPOINTMENTREMARK" property="appointmentremark" />
+        <result column="APPLYSTATUS" property="applystatus" />
+        <result column="APPLYTIME" property="applytime" />
+        <result column="CREATORID" property="creatorid" />
+        <result column="CREATETIME" property="createtime" />
+        <result column="FIRSTAUDITID" property="firstauditid" />
+        <result column="FIRSTAUDITTIME" property="firstaudittime" />
+        <result column="FIRSTREMARK" property="firstremark" />
+        <result column="SECONDAUDITID" property="secondauditid" />
+        <result column="SECONDAUDITTIME" property="secondaudittime" />
+        <result column="SECONDREMARK" property="secondremark" />
+        <result column="APPLYSTATUS2" property="applystatus2" />
+        <result column="FIRSTAUDITID2" property="firstauditid2" />
+        <result column="FIRSTAUDITTIME2" property="firstaudittime2" />
+        <result column="FIRSTREMARK2" property="firstremark2" />
+        <result column="SECONDAUDITID2" property="secondauditid2" />
+        <result column="SECONDAUDITTIME2" property="secondaudittime2" />
+        <result column="SECONDREMARK2" property="secondremark2" />
+        <result column="TRADEDATE" property="tradedate" />
+        <result column="INQTY" property="inqty" />
+        <result column="INREALQTY" property="inrealqty" />
+        <result column="INREALQTY2" property="inrealqty2" />
+        <result column="CLIENTTICKET" property="clientticket" />
+        <result column="WRFACTORTYPEID" property="wrfactortypeid" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        APPLYID, APPLYTYPE, WRSTANDARDID, WRSTANDARDCODE, DELIVERYGOODSID, WAREHOUSEID, USERID, ACCOUNTID, MOBILE, APPOINTMENTDATE, APPOINTMENTMODEL, COUNTRYID, PROVINCEID, DISTRICTID, CITYID, ADDRESS, CONTACTNAME, CONTACTNUM, APPOINTMENTREMARK, APPLYSTATUS, APPLYTIME, CREATORID, CREATETIME, FIRSTAUDITID, FIRSTAUDITTIME, FIRSTREMARK, SECONDAUDITID, SECONDAUDITTIME, SECONDREMARK, APPLYSTATUS2, FIRSTAUDITID2, FIRSTAUDITTIME2, FIRSTREMARK2, SECONDAUDITID2, SECONDAUDITTIME2, SECONDREMARK2, TRADEDATE, INQTY, INREALQTY, INREALQTY2, CLIENTTICKET, WRFACTORTYPEID
+    </sql>
+
+    <select id="queryWROutInApplyPage" resultType="com.muchinfo.mtp3pojos.vo.warehouse.WarehouseQueryResult">
+        select w.*,
+        u.customername username,
+        decode(w.applytype, 1, di1.dgfactoryitemvalue, 3, di3.dgfactoryitemvalue, h.warehousename) warehousename,
+        s.wrstandardname wrstandardname,
+        e.enumdicname,
+        wl.ladingbillid,
+        a.typevalues,
+        b.typevalues2
+        from WROUTINAPPLY w
+        left join WROutInFactoryDetail wofd on w.applyid = wofd.applyid and wofd.typeid = 1
+        left join DGFactoryItem di1 on wofd.typevalue = di1.dgfactoryitemid and wofd.typeid = di1.dgfactoryitemtypeid and w.applytype = 1
+        left join DGFactoryItem di3 on wofd.typevalue2 = di3.dgfactoryitemid and wofd.typeid = di3.dgfactoryitemtypeid and w.applytype = 3
+        left join userinfo u on w.userid = u.userid
+        left join WRStandard s on w.wrstandardid = s.wrstandardid
+        left join WarehouseInfo h on h.autoid = w.warehouseid
+        left join enumdicitem e on s.unitid = e.enumitemname and e.enumdiccode = 'goodsunit'
+        left join wrladingbill wl on w.applyid = wl.applyid
+        left join
+        (select t.applyid, listagg(t.dgfactoryitemvalue ,', ') WITHIN GROUP(ORDER BY t.typevalue) typevalues
+        from(
+        select distinct wd.*,
+        dt.itemtypename,
+        di.dgfactoryitemvalue
+        from WROutInFactoryDetail wd
+        left join DGFactoryItemType dt on wd.typeid = dt.dgfactoryitemtypeid
+        left join DGFactoryItem di on dt.dgfactoryitemtypeid = di.dgfactoryitemtypeid and wd.typevalue = di.dgfactoryitemid
+        where wd.typeid != 1
+        and wd.ItemTypeMode = 1) t
+        group by t.applyid) a on a.applyid = w.applyid
+
+        left join
+        (select t1.applyid, listagg(t1.dgfactoryitemvalue ,', ') WITHIN GROUP(ORDER BY t1.typevalue2) typevalues2
+        from(
+        select distinct wd.*,
+        dt.itemtypename,
+        di.dgfactoryitemvalue
+        from WROutInFactoryDetail wd
+        left join DGFactoryItemType dt on wd.typeid = dt.dgfactoryitemtypeid
+        left join DGFactoryItem di on dt.dgfactoryitemtypeid = di.dgfactoryitemtypeid and wd.typevalue2 = di.dgfactoryitemid
+        where wd.typeid != 1
+        and wd.ItemTypeMode = 1) t1
+        group by t1.applyid) b on b.applyid = w.applyid
+        <where>
+            <if test="vo.mobile != null and vo.mobile != ''">
+                and (w.mobile like '%'||#{vo.mobile,jdbcType=VARCHAR}||'%')
+            </if>
+            <if test="vo.wrstandardcode != null and vo.wrstandardcode != ''">
+                and ((s.wrstandardname like '%'||#{vo.wrstandardcode,jdbcType=VARCHAR}||'%')
+                or(w.wrstandardcode like '%'||#{vo.wrstandardcode,jdbcType=VARCHAR}||'%'))
+            </if>
+            <if test="vo.appointmentdatestr != null and vo.appointmentdatestr != ''">
+                and w.appointmentdate = to_date(#{vo.appointmentdatestr},'yyyyMMdd')
+            </if>
+            <if test="vo.applystatus != null">
+                and w.applystatus2 = #{vo.applystatus}
+            </if>
+            <if test="vo.applytype != null and vo.applytype != ''">
+                and w.applytype = #{vo.applytype}
+            </if>
+            <if test="vo.applytimestr != null and vo.applytimestr != ''">
+                and w.applytime &gt;= to_date(#{vo.applytimestr}||',00:00:00','yyyyMMdd,hh24:mi:ss')
+                and w.applytime &lt;= to_date(#{vo.applytimestr}||',23:59:59','yyyyMMdd,hh24:mi:ss')
+            </if>
+            <if test="vo.username != null and vo.username != ''">
+                and ((w.userid like '%'||#{vo.username,jdbcType=VARCHAR}||'%')
+                or(u.customername like '%'||#{vo.username,jdbcType=VARCHAR}||'%'))
+            </if>
+            <if test="vo.applyid != null and vo.applyid != ''">
+                and (w.applyid like '%'||#{vo.applyid,jdbcType=VARCHAR}||'%')
+            </if>
+            <if test="vo.userid != null">
+                and w.userid = #{vo.userid}
+            </if>
+        </where>
+        order by w.createtime desc
+    </select>
+
+    <select id="loadWRCategoryGoodsTree" resultType="com.muchinfo.mtp3pojos.entity.Wrcategory">
+        select * from WRCategory t
+        where t.categoryid != 0
+        <if test="categoryid != null and categoryid != 0">
+            start with t.categoryid =#{categoryid}
+            connect by prior t.categoryid =  t.parentcategoryid
+        </if>
+        order by t.orderindex
+    </select>
+
+    <select id="queryUserList" resultType="com.muchinfo.mtp3pojos.vo.common.OrganSelectResult">
+        select distinct u.userid,u.accountname
+        from Wrposition w,useraccount u
+        where w.wruserid = u.userid
+    </select>
+
+    <select id="querywslist" resultType="com.muchinfo.mtp3pojos.vo.warehouse.WslistQueryResult">
+        select distinct wt.wrstandardid,ws.wrstandardcode,ws.wrstandardname
+        from WRFactorType wt
+                 left join WRStandard ws on wt.wrstandardid = ws.wrstandardid
+                 left join WRHoldLB wl on wt.wrfactortypeid = wl.wrfactortypeid
+        where wl.userid = #{userid}
+    </select>
+
+    <select id="querywhlist" resultType="com.muchinfo.mtp3pojos.vo.warehouse.WhlistQueryResult">
+        select distinct wt.warehouseid autoid, wh.warehousename
+        from WRFactorType wt
+                 left join WRStandard ws on wt.wrstandardid = ws.wrstandardid
+                 left join WarehouseInfo wh on wt.warehouseid = wh.autoid
+                 left join WRHoldLB wl on wt.wrfactortypeid = wl.wrfactortypeid
+        where wl.userid = #{userid}
+          and ws.wrstandardid = #{wrstandardid}
+    </select>
+
+    <select id="queryWRHoldLB" resultType="com.muchinfo.mtp3pojos.vo.warehouse.WrHoldLBResult">
+        with tmp as(
+        select t.deliverygoodsid,
+        listagg(t.itemtypename, ',') within group(order by t.orderindex) as itemtypename
+        from dgfactoryitemtype t where t.itemtypemode!=3
+        group by t.deliverygoodsid
+        )
+        select wf.wrstandardid,wh.autoid, w.*,
+        e.enumdicname unitname,
+        dg.deliverygoodsname,
+        wf.wrfactortypename,
+        wf.optioncompare,
+        wh.warehousename warehousename,
+        ws.wrstandardname wrstandardname,
+        tmp.itemtypename
+        from wrholdlb w
+        left join wrfactortype wf on wf.wrfactortypeid = w.wrfactortypeid
+        left join wrstandard ws on ws.wrstandardid = wf.wrstandardid
+        left join WarehouseInfo wh on wh.autoid = wf.warehouseid
+        left join DeliveryGoods dg on ws.deliverygoodsid = dg.deliverygoodsid
+        left join enumdicitem e on ws.unitid = e.enumitemname and e.enumdiccode = 'goodsunit'
+        left join tmp on ws.deliverygoodsid = tmp.deliverygoodsid
+        <where>
+            <if test="vo.warehouseid != null and vo.warehouseid != ''">
+                and wf.warehouseid = #{vo.warehouseid}
+            </if>
+            <if test="vo.wrstandardid != null and vo.wrstandardid != ''">
+                and wf.wrstandardid = #{vo.wrstandardid}
+            </if>
+            <if test="vo.userid != null and vo.userid != ''">
+                and w.userid = #{vo.userid}
+            </if>
+            <if test="vo.accountid != null and vo.accountid != ''">
+                and w.accountid = #{vo.accountid}
+            </if>
+        </where>
+        order by ws.wrstandardid desc, wf.wrfactortypeid desc
+    </select>
+
+    <select id="receiptquery" resultType="com.muchinfo.mtp3pojos.vo.warehouse.WarehouseReceiptResult">
+        select w.*, o.accountname as areaname
+        from WareHouseinfo w
+        left join UserAccount o on w.areauserid = o.UserID
+        <where>
+            <if test="vo.areaname != null and vo.areaname != ''">
+                and o.accountname like '%'||#{vo.areaname}||'%'
+            </if>
+            <if test="vo.warehousecode != null and vo.warehousecode != ''">
+                and w.warehousecode like '%'||#{vo.warehousecode}||'%'
+            </if>
+            <if test="vo.areauserid != null and vo.areauserid != ''">
+                and w.areauserid = #{vo.areauserid}
+            </if>
+            <if test="vo.starttime != null and vo.starttime !='' ">
+                <![CDATA[and w.createtime >= to_date(#{vo.starttime}||' 00:00:00', 'yyyy-mm-dd hh24:mi:ss')]]>
+            </if>
+            <if test="vo.endtime != null and vo.endtime !='' ">
+                <![CDATA[and w.createtime <= to_date(#{vo.endtime}||' 23:59:59', 'yyyy-mm-dd hh24:mi:ss')]]>
+            </if>
+        </where>
+        order by decode(w.warehousestatus, '3',1,'1',2,'4',3,'2',4),w.autoid desc
+    </select>
+</mapper>

+ 20 - 1
mtp3-century/src/main/resources/message_en.properties

@@ -7,7 +7,16 @@ message_code_system007=Login succeeded
 message_code_system008=Successful withdrawal of funds
 message_code_system009=Deposit successful
 message_code_system010=User authentication passed
-
+message_code_system011=Clearance and recovery operation successful
+message_code_system012=Payment for goods successfully made
+message_code_system013=Pre sale lottery successful
+message_code_system014=Pre sale completed successfully
+message_code_system015=Pre sale application successful
+message_code_system016=The performance confirmation information has been sent and is being processed. Please check again later
+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_error_code_system001=Token invalid, please log in again!
 message_error_code_system002=operation failed
@@ -23,6 +32,9 @@ message_error_code_system011=Account or password error
 message_error_code_system012=The user account has been locked
 message_error_code_system013=The user password has expired
 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}】
 
 login_error_code_001=Account or password error
 login_error_code_002=Unauthorized access is not allowed! Please contact the administrator to handle it!
@@ -76,6 +88,11 @@ query_error_code_004=Do not have this permission
 query_error_code_005=No data available for export
 query_error_code_006=Export failed, please contact the administrator!
 query_error_code_007=Please enter the fund account
+query_error_code_008=Market error or status not in open state
+query_error_code_009=parameter error
+query_error_code_010=The import file is empty
+
+report_error_code_001=Starting trading day {0},End trading day {1} Error in executing report re statistics
 
 settlement_message_001=Confirm payment completion: {0} Successful entry, {1} Article failed
 settlement_message_002=Data has changed, please refresh and try again
@@ -88,6 +105,8 @@ pwd_error_code_005=Old password incorrect
 
 amount_error_code_001=The amount is 0, no processing will be done!
 
+traAcc_error_code_001=Duplicate login account, please click on 'Survive Again' and submit again!
+
 investor_error_code_001=No funds account found
 investor_error_code_002=Non investor accounts cannot be closed for review
 investor_error_code_003=The fund account cannot be closed as it has not been terminated

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

@@ -7,6 +7,16 @@ message_code_system007=เข้าสู่ระบบสำเร็จ
 message_code_system008=ความสำเร็จในการออกคิม
 message_code_system009=ความสำเร็จในการลงทุน
 message_code_system010=การรับรองผู้ใช้ ผ่าน
+message_code_system011=การดำเนินการกู้คืนตำแหน่งตัดประสบความสำเร็จ
+message_code_system012=ชำระเงินค่าสินค้าสำเร็จ
+message_code_system013=ประสบความสำเร็จในการเขย่าตัวเลขก่อนการขาย
+message_code_system014=ความสำเร็จในการขายพรีเซล
+message_code_system015=สมัครล่วงหน้าสำเร็จ
+message_code_system016=ข้อมูลการยืนยันการใช้สิทธิได้ถูกส่งแล้วและกำลังดำเนินการอยู่ โปรดตรวจสอบอีกครั้งในภายหลัง
+message_code_system017=สมัครสำเร็จ
+message_code_system018=ข้อมูลการติดต่อการปฏิบัติงานได้ถูกส่งไปแล้ว กรุณาสอบถามอีกครั้งในภายหลัง
+message_code_system019=ความสำเร็จในการดำเนินการ
+message_code_system020=การนำเข้าแบทช์การเปิดสถานะสำเร็จแล้ว
 
 message_error_code_system001=โทเค็นล้มเหลวโปรดเข้าสู่ระบบอีกครั้ง!
 message_error_code_system002=การดำเนินการล้มเหลว!
@@ -22,6 +32,9 @@ message_error_code_system011=บัญชีหรือรหัสผ่าน
 message_error_code_system012=บัญชีผู้ใช้ถูกล็อค
 message_error_code_system013=รหัสผ่านผู้ใช้ล้มเหลว
 message_error_code_system014=บัญชีผู้ใช้ถูกปิดใช้งาน
+message_error_code_system015=มีการยื่นขอผิดนัดที่ยังไม่ได้ดำเนินการและไม่สามารถเริ่มต้นซ้ำได้
+message_error_code_system016=ขั้นตอนการใช้สิทธิมีการเปลี่ยนแปลงและไม่สามารถขอขยายเวลาได้
+message_error_code_system017=ตลาดโอนเงินมัดจำ โปรดเลือกผู้ออกสินค้า【{0}】
 
 login_error_code_001=บัญชีหรือรหัสผ่านไม่ถูกต้อง
 login_error_code_002=ไม่สามารถเข้าถึงได้โดยไม่ได้รับอนุญาต! กรุณาติดต่อผู้ดูแลระบบเพื่อจัดการ!
@@ -75,6 +88,11 @@ query_error_code_004=ไม่มีสิทธิ์นี้
 query_error_code_005=ไม่มีข้อมูลที่จะส่งออก
 query_error_code_006=ส่งออกล้มเหลว, ติดต่อผู้ดูแลระบบ!
 query_error_code_007=กรุณากรอกบัญชีเงินทุน
+query_error_code_008=ข้อผิดพลาดของตลาดหรือสถานะไม่เปิดตลาด
+query_error_code_009=พารามิเตอร์ผิดพลาด
+query_error_code_010=แฟ้มนำเข้าว่างเปล่า
+
+report_error_code_001=วันเริ่มต้นการซื้อขาย{0},สิ้นสุดวันซื้อขาย {1} เกิดข้อผิดพลาดในการนับรายงานการดำเนินการอีกครั้ง
 
 settlement_message_001=ยืนยันการชำระเงินเสร็จสิ้น: {0} ความสำเร็จของบาร์, {1} แถบล้มเหลว
 settlement_message_002=ข้อมูลมีการเปลี่ยนแปลงโปรดรีเฟรชลองอีกครั้ง
@@ -87,6 +105,8 @@ pwd_error_code_005=รหัสผ่านเก่าผิดพลาด
 
 amount_error_code_001=จำนวนเงินเป็น 0 ไม่มีการประมวลผล!
 
+traAcc_error_code_001=เข้าสู่ระบบบัญชีซ้ำ, กรุณาแตะ Resurve และส่งอีกครั้ง!
+
 investor_error_code_001=ไม่พบบัญชีเงิน
 investor_error_code_002=บัญชีที่ไม่ใช่นักลงทุนและไม่สามารถตรวจสอบได้โดยผู้ขาย
 investor_error_code_003=บัญชีเงินไม่ถูกยกเลิก ขายไม่ออก

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

@@ -7,6 +7,16 @@ message_code_system007=登录成功
 message_code_system008=出金成功
 message_code_system009=入金成功
 message_code_system010=用户认证通过
+message_code_system011=斩仓恢复操作成功
+message_code_system012=支付货款成功
+message_code_system013=预售摇号成功
+message_code_system014=预售完成成功
+message_code_system015=预售申请成功
+message_code_system016=履约确认信息已发送并处理中,稍后请重新查询
+message_code_system017=申请成功
+message_code_system018=履约联络信息已发送,稍后请重新查询
+message_code_system019=执行成功
+message_code_system020=批量导入持仓过户成功
 
 message_error_code_system001=令牌失效,请重新登录!
 message_error_code_system002=操作失败
@@ -22,6 +32,9 @@ message_error_code_system011=账户或密码错误
 message_error_code_system012=用户账户已被锁
 message_error_code_system013=用户密码已失效
 message_error_code_system014=用户账户已禁用
+message_error_code_system015=存在未处理的违约申请,不能重复发起
+message_error_code_system016=履约计划步骤已发生变更,无法申请延期
+message_error_code_system017=定金转让市场,请选择商品发行方【{0}】
 
 login_error_code_001=账户或密码错误
 login_error_code_002=未经允许,不可访问!请联系管理员处理!
@@ -75,6 +88,11 @@ query_error_code_004=没有此权限
 query_error_code_005=无数据可导出
 query_error_code_006=导出失败,请联系管理员!
 query_error_code_007=请输入资金账户
+query_error_code_008=市场错误或状态不为开市状态
+query_error_code_009=参数错误
+query_error_code_010=导入文件为空
+
+report_error_code_001=起始交易日{0},结束交易日{1}执行报表重新统计出错
 
 settlement_message_001=确认付款完成: {0} 条成功, {1} 条失败
 settlement_message_002=数据有变更,请刷新重试
@@ -87,6 +105,8 @@ pwd_error_code_005=旧密码错误
 
 amount_error_code_001=金额为 0,不做处理!
 
+traAcc_error_code_001=登录账户重复,请点击重新生存并再次提交!
+
 investor_error_code_001=没有找到资金账户
 investor_error_code_002=非投资者账户,不能销户审核.
 investor_error_code_003=资金账户未解约,不能销户.

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

@@ -7,6 +7,16 @@ message_code_system007=登入成功
 message_code_system008=出金成功
 message_code_system009=入金成功
 message_code_system010=用戶認證通過
+message_code_system011=斬倉恢復操作成功
+message_code_system012=支付貨款成功
+message_code_system013=預售搖號成功
+message_code_system014=預售完成成功
+message_code_system015=預售申請成功
+message_code_system016=履約確認資訊已發送並處理中,稍後請重新查詢
+message_code_system017=申請成功
+message_code_system018=履約聯絡資訊已發送,稍後請重新查詢
+message_code_system019=執行成功
+message_code_system020=批量導入持倉過戶成功
 
 message_error_code_system001=權杖失效,請重新登入!
 message_error_code_system002=操作失敗
@@ -22,6 +32,9 @@ message_error_code_system011=帳戶或密碼錯誤
 message_error_code_system012=用戶帳戶已被鎖
 message_error_code_system013=用戶密碼已失效
 message_error_code_system014=用戶帳戶已禁用
+message_error_code_system015=存在未處理的違約申請,不能重複發起
+message_error_code_system016=履約計畫步驟已發生變更,無法申請延期
+message_error_code_system017=定金轉讓市場,請選擇商品發行方【{0}】
 
 login_error_code_001=帳戶或密碼錯誤
 login_error_code_002=未經允許,不可訪問! 請聯系管理員處理!
@@ -75,6 +88,11 @@ query_error_code_004=沒有此許可權
 query_error_code_005=無數據可匯出
 query_error_code_006=匯出失敗,請聯系管理員!
 query_error_code_007=請輸入資金帳戶
+query_error_code_008=市場錯誤或狀態不為開市狀態
+query_error_code_009=參數錯誤
+query_error_code_010=導入檔案為空
+
+report_error_code_001=起始交易日{0},結束交易日{1}執行報表重新統計出錯
 
 settlement_message_001=確認付款完成:{0}條成功,{1}條失敗
 settlement_message_002=數據有變更,請重繪重試
@@ -87,6 +105,8 @@ pwd_error_code_005=舊密碼錯誤
 
 amount_error_code_001=金額為0,不做處理!
 
+traAcc_error_code_001=登入帳戶重複,請點擊重新生存並再次提交!
+
 investor_error_code_001=沒有找到資金帳戶
 investor_error_code_002=非投資者帳戶,不能銷戶稽核.
 investor_error_code_003=資金帳戶未解約,不能銷戶.

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

@@ -7,6 +7,16 @@ message_code_system007=登入成功
 message_code_system008=出金成功
 message_code_system009=入金成功
 message_code_system010=用戶認證通過
+message_code_system011=斬倉恢復操作成功
+message_code_system012=支付貨款成功
+message_code_system013=預售搖號成功
+message_code_system014=預售完成成功
+message_code_system015=預售申請成功
+message_code_system016=履約確認資訊已發送並處理中,稍後請重新查詢
+message_code_system017=申請成功
+message_code_system018=履約聯絡資訊已發送,稍後請重新查詢
+message_code_system019=執行成功
+message_code_system020=批量導入持倉過戶成功
 
 message_error_code_system001=權杖失效,請重新登入!
 message_error_code_system002=操作失敗
@@ -22,6 +32,9 @@ message_error_code_system011=帳戶或密碼錯誤
 message_error_code_system012=用戶帳戶已被鎖
 message_error_code_system013=用戶密碼已失效
 message_error_code_system014=用戶帳戶已禁用
+message_error_code_system015=存在未處理的違約申請,不能重複發起
+message_error_code_system016=履約計畫步驟已發生變更,無法申請延期
+message_error_code_system017=定金轉讓市場,請選擇商品發行方【{0}】
 
 login_error_code_001=帳戶或密碼錯誤
 login_error_code_002=未經允許,不可訪問! 請聯系管理員處理!
@@ -75,6 +88,11 @@ query_error_code_004=沒有此許可權
 query_error_code_005=無數據可匯出
 query_error_code_006=匯出失敗,請聯系管理員!
 query_error_code_007=請輸入資金帳戶
+query_error_code_008=市場錯誤或狀態不為開市狀態
+query_error_code_009=參數錯誤
+query_error_code_010=導入檔案為空
+
+report_error_code_001=起始交易日{0},結束交易日{1}執行報表重新統計出錯
 
 settlement_message_001=確認付款完成:{0}條成功,{1}條失敗
 settlement_message_002=數據有變更,請重繪重試
@@ -87,6 +105,8 @@ pwd_error_code_005=舊密碼錯誤
 
 amount_error_code_001=金額為0,不做處理!
 
+traAcc_error_code_001=登入帳戶重複,請點擊重新生存並再次提交!
+
 investor_error_code_001=沒有找到資金帳戶
 investor_error_code_002=非投資者帳戶,不能銷戶稽核.
 investor_error_code_003=資金帳戶未解約,不能銷戶.

+ 6 - 0
mtp3-common/src/main/java/com/muchinfo/mtp3common/enumtype/FunCodeConstants.java

@@ -1109,6 +1109,11 @@ public interface FunCodeConstants {
 
     int FuncCode_InputOpenCloseOrderRsp = 196760; // 录入建平仓接口响应
 
+
+    int FuncCode_DepositTransferOperateReq = 196763;  // 定金转让持仓操作请求(0, 3, 155)
+
+    int FuncCode_DepositTransferOperateRsp = 196764; // 定金转让持仓操作响应(0, 3, 156)
+
     int FuncCode_UpdateUserTradeRightNtf = 131177; //更新用户交易权限通知
 
     int FuncCode_UpdateCheckoutTimeNtf = 131178; // 更新签退时间通知
@@ -1121,4 +1126,5 @@ public interface FunCodeConstants {
     int FuncCode_YJF_WithholdSignOutRsp = 2621456; //云缴费代扣解约响应
     int FuncCode_YJF_WithholdInApplyReq = 2621457; //云缴费代扣入金申请请求
     int FuncCode_YJF_WithholdInApplyRsp = 2621458; //云缴费代扣入金申请响应
+
 }

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

@@ -13,8 +13,17 @@ public enum MessageType {
     MESSAGE_CODE_SYSTEM007("message_code_system007", "登录成功"),
     MESSAGE_CODE_SYSTEM008("message_code_system008", "出金成功"),
     MESSAGE_CODE_SYSTEM009("message_code_system009", "入金成功"),
-    MESSAGE_CODE_SYSTEM010("MESSAGE_CODE_SYSTEM010", "用户认证通过"),
-
+    MESSAGE_CODE_SYSTEM010("message_code_system010", "用户认证通过"),
+    MESSAGE_CODE_SYSTEM011("message_code_system011", "斩仓恢复操作成功"),
+    MESSAGE_CODE_SYSTEM012("message_code_system012", "支付货款成功"),
+    MESSAGE_CODE_SYSTEM013("message_code_system013", "预售摇号成功"),
+    MESSAGE_CODE_SYSTEM014("message_code_system014", "预售完成成功"),
+    MESSAGE_CODE_SYSTEM015("message_code_system015", "预售申请成功"),
+    MESSAGE_CODE_SYSTEM016("message_code_system016", "履约确认信息已发送并处理中,稍后请重新查询"),
+    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_ERROR_CODE_SYSTEM001("message_error_code_system001", "令牌失效,请重新登录!"),
     MESSAGE_ERROR_CODE_SYSTEM002("message_error_code_system002", "操作失败"),
@@ -30,6 +39,9 @@ public enum MessageType {
     MESSAGE_ERROR_CODE_SYSTEM012("message_error_code_system012", "用户账户已被锁"),
     MESSAGE_ERROR_CODE_SYSTEM013("message_error_code_system013", "用户密码已失效"),
     MESSAGE_ERROR_CODE_SYSTEM014("message_error_code_system014", "用户账户已禁用"),
+    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}】"),
 
     LOGIN_ERROR_CODE_001("login_error_code_001", "账户或密码错误"),
     LOGIN_ERROR_CODE_002("login_error_code_002", "未经允许,不可访问!请联系管理员处理"),
@@ -81,6 +93,11 @@ public enum MessageType {
     QUERY_ERROR_CODE_005("query_error_code_005", "无数据可导出"),
     QUERY_ERROR_CODE_006("query_error_code_006", "导出失败,请联系管理员!"),
     QUERY_ERROR_CODE_007("query_error_code_007", "请输入资金账户"),
+    QUERY_ERROR_CODE_008("query_error_code_008", "市场错误或状态不为开市状态!"),
+    QUERY_ERROR_CODE_009("query_error_code_009", "参数错误"),
+    QUERY_ERROR_CODE_010("query_error_code_010", "导入文件为空"),
+
+    REPORT_ERROR_CODE_001("report_error_code_001", "起始交易日{0},结束交易日{1}执行报表重新统计出错"),
 
     MARKET_RUN_MESSAGE_001("market_run_message_001", "强制下线已发送"),
 
@@ -95,6 +112,8 @@ public enum MessageType {
 
     AMOUNT_ERROR_CODE_001("amount_error_code_001", "金额为 0,不做处理!"),
 
+    TRAACC_ERROR_CODE_001("TRAACC_ERROR_CODE_001", "登录账户重复,请点击重新生存并再次提交!"),
+
     INVESTOR_ERROR_CODE_001("investor_error_code_001", "没有找到资金账户"),
     INVESTOR_ERROR_CODE_002("investor_error_code_002", "非投资者账户,不能销户审核."),
     INVESTOR_ERROR_CODE_003("investor_error_code_003", "资金账户未解约,不能销户."),

+ 34 - 0
mtp3-common/src/main/java/com/muchinfo/mtp3common/utils/SerialNumberHelper.java

@@ -0,0 +1,34 @@
+package com.muchinfo.mtp3common.utils;
+
+/**
+ * Created by Administrator on 2018/1/11.
+ */
+public final class SerialNumberHelper {
+    /**计数**/
+    private Long count=0L;
+    /**时间差**/
+    private String timeStamp;
+
+
+    protected SerialNumberHelper(Long count, String timeStamp){
+        this.count=count;
+        this.timeStamp=timeStamp;
+    }
+
+
+    public Long getCount() {
+        return count;
+    }
+
+    public void setCount(Long count) {
+        this.count = count;
+    }
+
+    public String getTimeStamp() {
+        return timeStamp;
+    }
+
+    public void setTimeStamp(String timeStamp) {
+        this.timeStamp = timeStamp;
+    }
+}

+ 51 - 1
mtp3-common/src/main/java/com/muchinfo/mtp3common/utils/SerialNumberUtils.java

@@ -7,13 +7,25 @@ import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 public class SerialNumberUtils {
-
+    /**
+     * 编号生成队列
+     **/
+    private static ConcurrentHashMap<String, SerialNumberHelper> requestMap = new ConcurrentHashMap<>();
     private static ConcurrentHashMap<Long, Object> messageMap = new ConcurrentHashMap<>();
     public static Map<Long, Calculator> lockMap = new HashMap<>();
     public static String prefix_bank = "703";//银行服务
     public static String prefix_account = "701";//账户服务
+    public static String prefix_Performance = "702";//履约服务
     public static String prefix_warehouse = "704";//仓单服务
     public static String prefix_login = "720"; //登录服务
+    public static String prefix_trade = "712"; //交易服务
+    public static String prefix_wroutin = "610";//仓单出入库
+
+    public static String prefix_capacity = "180";//产能预售-远期订单管理端
+
+    public static String prefix_capacitytwo = "181";//产能预售-预售管理
+
+    public static String prefix_positiontransfer = "185";   // 持仓过户申请表
     /**
      * @param prefix 业务表示符号 3位数字字符
      * @return
@@ -57,4 +69,42 @@ public class SerialNumberUtils {
             messageMap.remove(uuid);
         }
     }
+
+    /**
+     * 结束计时器
+     *
+     * @param uuid
+     * @return
+     */
+    public static void endCalculator(Long uuid, Object obj) {
+        Calculator ca = lockMap.remove(uuid);
+        if (null != ca) {
+            messageMap.put(uuid, obj);
+            ca.start();
+        }
+    }
+
+    public static synchronized Long getSerialNumber(String prefix) {
+        String str = "000000";
+        String timeStamp = DateTimeUtils.getNowTimeStamp();
+        Long currCount;
+        if (requestMap.containsKey(prefix)) {
+            currCount = requestMap.get(prefix).getCount();
+            if (requestMap.get(prefix).getTimeStamp().equals(timeStamp)) {
+                currCount = currCount + 1;
+                requestMap.get(prefix).setCount(currCount);
+            } else {
+                currCount = 1L;
+                requestMap.get(prefix).setCount(currCount);
+                requestMap.get(prefix).setTimeStamp(timeStamp);
+            }
+        } else {
+            currCount = 1L;
+            requestMap.put(prefix, new SerialNumberHelper(currCount, timeStamp));
+        }
+
+        String temp = prefix + timeStamp + str.substring(0, str.length() - currCount.toString().length()) + currCount.toString();
+        requestMap.get(prefix).setTimeStamp(timeStamp);
+        return Long.valueOf(temp);
+    }
 }

+ 34 - 0
mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/ICptradePositionapplyMapper.java

@@ -0,0 +1,34 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.muchinfo.mtp3pojos.entity.CptradePositionapply;
+import com.muchinfo.mtp3pojos.vo.presale.*;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 远期订单申请表 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2024-11-25
+ */
+public interface ICptradePositionapplyMapper extends BaseMapper<CptradePositionapply> {
+
+    IPage<ForwardOrderApplyResult> queryForward(IPage<ForwardOrderApplyResult> page, @Param("vo") ForwardOrderApplyParam param);
+
+    List<ForwardOrderApplyResult> queryForward(@Param("vo") ForwardOrderApplyParam param);
+
+    IPage<ForwardOrderQueryResult> queryOrder(IPage<ForwardOrderQueryResult> page, @Param("vo") ForwardOrderQueryParam param);
+
+    IPage<ForwardCancelApplyResult> queryCancelApply(IPage<ForwardCancelApplyResult> page, @Param("vo") ForwardCancelApplyParam param);
+
+    List<ForwardCancelApplyResult> queryCancelApply(@Param("vo") ForwardCancelApplyParam param);
+
+    ForwardAddOtherInit queryDRelation(@Param("goodid") Long goodid);
+
+    List<ForwardCancelApplyInit> cancelApplyAddInit(@Param("accountid") Long accountid);
+}

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

@@ -0,0 +1,16 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.CptradePositioncancel;
+
+/**
+ * <p>
+ * 远期订单注销申请表 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2024-11-26
+ */
+public interface ICptradePositioncancelMapper extends BaseMapper<CptradePositioncancel> {
+
+}

+ 36 - 0
mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/ICptradePresalegoodsexMapper.java

@@ -0,0 +1,36 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.muchinfo.mtp3pojos.entity.CptradePresalegoodsex;
+import com.muchinfo.mtp3pojos.vo.presale.*;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 产能预售商品扩展表 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2024-11-11
+ */
+public interface ICptradePresalegoodsexMapper extends BaseMapper<CptradePresalegoodsex> {
+
+    IPage<PresaleQueryResult> query(IPage<PresaleQueryResult> page, @Param("vo") PresaleQueryParam param);
+
+    List<PresaleQueryResult> query(@Param("vo") PresaleQueryParam param);
+
+    PresaleQueryDetailResult view(@Param("applyid") String applyid);
+
+    List<PresalePresaleLotteryResult> viewPresaleLottery(@Param("goodsid") Long goodsid);
+
+    List<PresaleFinishResult> viewfinsh(@Param("goodsid") Long goodsid);
+
+    List<PresaleFinishInitAddResult> queryUserList(@Param("goodsid") Long userid);
+
+    IPage<PresaleApplyResult> queryApply(IPage<PresaleApplyResult> page,@Param("vo") PresaleApplyParam param);
+
+    List<PresaleApplyResult> queryApply(@Param("vo") PresaleApplyParam param);
+}

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

@@ -0,0 +1,16 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.Deliveryrelation;
+
+/**
+ * <p>
+ * 商品交割关系表 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2024-11-26
+ */
+public interface IDeliveryrelationMapper extends BaseMapper<Deliveryrelation> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.Dgfactoryitem;
+
+/**
+ * <p>
+ * 品种选择项定义表 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2024-11-29
+ */
+public interface IDgfactoryitemMapper extends BaseMapper<Dgfactoryitem> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.Dgfactoryitemtype;
+
+/**
+ * <p>
+ * 品种要素项表 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2024-11-29
+ */
+public interface IDgfactoryitemtypeMapper extends BaseMapper<Dgfactoryitemtype> {
+
+}

+ 7 - 1
mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IGoodsMapper.java

@@ -4,6 +4,8 @@ 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.reportform.GoodsReportParam;
+import com.muchinfo.mtp3pojos.vo.reportform.GoodsReportResult;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -20,7 +22,11 @@ import java.util.List;
 @Mapper
 public interface IGoodsMapper extends BaseMapper<Goods> {
 
-    List<GoodsSelectResult> queryGoodsSelect(@Param("split") String[] split, @Param("vo")GoodsSelectParam param);
+    List<GoodsSelectResult> queryGoodsSelect(@Param("split") String[] split,@Param("tradeModeSplit") String[] tradeModeSplit, @Param("vo")GoodsSelectParam param);
 
     List<Goods> getNoTradeConfigGoods(@Param("areauserid")Long areauserid,@Param("usergroupid") Long usergroupid,@Param("marketid") Long marketid);
+
+    List<GoodsReportResult> queryByDate(@Param("vo") GoodsReportParam param);
+
+    List<GoodsReportResult> queryByOther(@Param("vo") GoodsReportParam param);
 }

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

@@ -0,0 +1,16 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.HisPerformancebreach;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2024-11-20
+ */
+public interface IHisPerformancebreachMapper extends BaseMapper<HisPerformancebreach> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.HisTradeExercisedetail;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2024-11-21
+ */
+public interface IHisTradeExercisedetailMapper extends BaseMapper<HisTradeExercisedetail> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.Performancebreach;
+
+/**
+ * <p>
+ * 履约违约表 - 导历史 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2024-11-15
+ */
+public interface IPerformancebreachMapper extends BaseMapper<Performancebreach> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.Performancebreachapply;
+
+/**
+ * <p>
+ * 履约违约申请表 - 导历史 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2024-11-21
+ */
+public interface IPerformancebreachapplyMapper extends BaseMapper<Performancebreachapply> {
+
+}

+ 32 - 0
mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IPerformanceplanMapper.java

@@ -0,0 +1,32 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.muchinfo.mtp3pojos.entity.Performanceplan;
+import com.muchinfo.mtp3pojos.vo.performance.*;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 履约计划表 (履约完成导历史) Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2024-11-08
+ */
+public interface IPerformanceplanMapper extends BaseMapper<Performanceplan> {
+
+    IPage<PayPerformanceResult> query(IPage<PayPerformanceResult> page, @Param("vo") PayPerformanceParam param);
+
+    IPage<PayPerformanceResult> queryHis(IPage<PayPerformanceResult> page, @Param("vo")PayPerformanceParam param);
+
+    PayPerformancePlanResult queryPerformancePlanDetail(@Param("planid")String planid);
+
+    PayPerformancePlanResult getHisPerformancePlanDetail(@Param("planid")String planid, @Param("histradedate")String histradedate);
+
+    PerformanceDelayResult queryPerformanceDelayList(@Param("planid")String planid);
+
+    PayPerformanceReportResult queryReportInfo(@Param("planid")String relatedOrderId, @Param("buyOrSell")Integer buyorsell);
+
+    PayPerformanceReportResult queryHisReportInfo(@Param("planid")String relatedOrderId, @Param("buyOrSell")Integer buyorsell, @Param("histradedate")String histradedate);
+}

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

@@ -0,0 +1,16 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.Performancestep;
+
+/**
+ * <p>
+ * 履约计划步骤表 - 导历史 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2024-11-20
+ */
+public interface IPerformancestepMapper extends BaseMapper<Performancestep> {
+
+}

+ 17 - 0
mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IPerformancesteptypeMapper.java

@@ -0,0 +1,17 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.Performancesteptype;
+
+/**
+ * <p>
+ * 履约步骤类型表
+1:买方支付 2:卖方收款 3:买方自提 4:卖方发货 5:买方确认货 6:卖方发票 7:买方确认票 8:仓单转移 9:释放卖方冻结 10:货款溢短 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2024-11-20
+ */
+public interface IPerformancesteptypeMapper extends BaseMapper<Performancesteptype> {
+
+}

+ 5 - 3
mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IReckonDaydividecountMapper.java

@@ -3,9 +3,7 @@ package com.muchinfo.mtp3interface.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.muchinfo.mtp3pojos.entity.ReckonDaydividecount;
-import com.muchinfo.mtp3pojos.vo.settlement.SecondProfitSharDetailParam;
-import com.muchinfo.mtp3pojos.vo.settlement.SecondProfitSharDetailResult;
-import com.muchinfo.mtp3pojos.vo.settlement.SecondProfitSharResult;
+import com.muchinfo.mtp3pojos.vo.settlement.*;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -26,4 +24,8 @@ public interface IReckonDaydividecountMapper extends BaseMapper<ReckonDaydividec
     List<SecondProfitSharResult> queryShareDayList(@Param("areauserid") Long areauserid, @Param("areatype")Integer areatype, @Param("tradedate")String tradedate);
 
     IPage<SecondProfitSharDetailResult> queryOrgShareDayList(IPage<SecondProfitSharDetailResult> page,@Param("vo") SecondProfitSharDetailParam param);
+
+    IPage<PositionTransferQueryResult> queryPositionTransfer(IPage<PositionTransferQueryResult> page, @Param("vo")PositionTransferQueryParam param);
+
+    List<PositionTransferQueryResult> queryPositionTransfer( @Param("vo")PositionTransferQueryParam param);
 }

+ 15 - 0
mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IReckonDaydividecountdetailMapper.java

@@ -6,6 +6,7 @@ import com.muchinfo.mtp3pojos.entity.ReckonDaydividecountdetail;
 import com.muchinfo.mtp3pojos.vo.reportform.*;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -40,9 +41,23 @@ public interface IReckonDaydividecountdetailMapper extends BaseMapper<ReckonDayd
 
     IPage<InvestorReportQueryResult> queryReportTa(IPage<InvestorReportQueryResult> page, @Param("vo")InvestorReportQueryParam param);
 
+    List<InvestorReportQueryResult> queryReckonDayTa(@Param("vo")InvestorReportQueryParam param);
+
+    List<InvestorReportQueryResult> queryReportTa(@Param("vo")InvestorReportQueryParam param);
+
     IPage<WrPositionResult> wrposition(IPage<WrPositionResult> page, @Param("vo") TaAccountReportParam param);
 
     IPage<HolderTotalResult> tradeposition(IPage<HolderTotalResult> page,@Param("vo")  TaAccountReportParam param);
 
     IPage<TradeReportQueryResult> tradequery(IPage<TradeReportQueryResult> page, @Param("vo")  TaAccountReportParam param);
+
+    IPage<CusBankReportResult> queryCusBank(IPage<CusBankReportResult> page, @Param("vo") CusBankReportParam param);
+
+    List<CusBankReportResult> queryCusBank( @Param("vo") CusBankReportParam param);
+
+    IPage<ManageDivReportResult> managediv(IPage<ManageDivReportResult> page,@Param("vo") CusBankReportParam param);
+
+    List<ManageDivReportResult> managediv(@Param("vo") CusBankReportParam param);
+
+    void execReportMonthType(@Param("tradedate") Date tradedate);
 }

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

@@ -0,0 +1,16 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.TradeExercisedetail;
+
+/**
+ * <p>
+ * 期权行权明细表 - 导历史 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2024-11-21
+ */
+public interface ITradeExercisedetailMapper extends BaseMapper<TradeExercisedetail> {
+
+}

+ 40 - 0
mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/ITradeHolderdetailexMapper.java

@@ -0,0 +1,40 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.muchinfo.mtp3pojos.entity.TradeHolderdetailex;
+import com.muchinfo.mtp3pojos.vo.query.order.*;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 交易持仓扩展表 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2024-10-15
+ */
+public interface ITradeHolderdetailexMapper extends BaseMapper<TradeHolderdetailex> {
+
+    IPage<OrderQueryResult> query(IPage<OrderQueryResult> page, @Param("vo") OrderQueryParam param);
+
+    List<OrderQueryResult> query(@Param("vo") OrderQueryParam param);
+
+    IPage<TerOrderQueryResult> queryYJCloselList(IPage<TerOrderQueryResult> page, @Param("vo") TerOrderQueryParam param);
+
+    List<TerOrderQueryResult> queryYJCloselList(@Param("vo") TerOrderQueryParam param);
+
+    IPage<DeliveryOrderResult> queryDeliveryOfflinePage(IPage<DeliveryOrderResult> page, @Param("vo") DeliveryOrderParam param);
+
+    List<DeliveryOrderResult> queryDeliveryOfflinePage(@Param("vo") DeliveryOrderParam param);
+
+    IPage<OrderDateQueryResult> queryOrderDate(IPage<OrderDateQueryResult> page, @Param("vo") OrderDateQueryParam param);
+
+    List<OrderDateQueryResult> queryOrderDate(@Param("vo") OrderDateQueryParam param);
+
+    IPage<ForcedOrderResult> queryForcedOrder(IPage<ForcedOrderResult> page, @Param("vo") ForcedOrderParam param);
+
+    List<ForcedOrderResult> queryForcedOrder(@Param("vo") ForcedOrderParam param);
+}

+ 18 - 0
mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/ITradeOrderdetailMapper.java

@@ -17,6 +17,10 @@ import com.muchinfo.mtp3pojos.vo.query.goodstrade.GoodsTradeQueryParam;
 import com.muchinfo.mtp3pojos.vo.query.goodstrade.GoodsTradeQueryResult;
 import com.muchinfo.mtp3pojos.vo.query.investorsum.InvestorSumQueryParam;
 import com.muchinfo.mtp3pojos.vo.query.investorsum.InvestorSumQueryResult;
+import com.muchinfo.mtp3pojos.vo.query.other.EsignrecordQueryParam;
+import com.muchinfo.mtp3pojos.vo.query.other.EsignrecordQueryResult;
+import com.muchinfo.mtp3pojos.vo.query.other.InvestorQueryParam;
+import com.muchinfo.mtp3pojos.vo.query.other.InvestorQueryResult;
 import com.muchinfo.mtp3pojos.vo.query.position.*;
 import com.muchinfo.mtp3pojos.vo.query.tradesum.TradeSumQueryParam;
 import com.muchinfo.mtp3pojos.vo.query.tradesum.TradeSumQueryResult;
@@ -119,4 +123,18 @@ public interface ITradeOrderdetailMapper extends BaseMapper<TradeOrderdetail> {
     List<DeliveryDetailResult> getHisDeliveryDetailByBuyOrSellOrderId(@Param("sellId") String sellId, @Param("buyId") String buyId, @Param("buyorsell") Integer buyorsell);
 
     List<DeliveryDetailResult> getDeliveryDetailByBuyOrSellOrderId(@Param("sellId") String sellId, @Param("buyId") String buyId, @Param("buyorsell") Integer buyorsell);
+
+    IPage<OfflineDeliveryResult> queryDeliveryOfflinePage(IPage<OfflineDeliveryResult> page, @Param("vo") OfflineDeliveryParam param);
+
+    List<OfflineDeliveryResult> queryDeliveryOfflinePage(@Param("vo") OfflineDeliveryParam param);
+
+    OfflineDeliveryDetailResult queryDeliveryOfflineDetail(@Param("deliveryorderid") String deliveryorderid);
+
+    int closeDeliveryOffline(@Param("tradedate") String tradedate, @Param("deliveryorderid") String deliveryorderid);
+
+    int failDeliveryOffline(@Param("tradedate") String tradedate, @Param("deliveryorderid") String deliveryorderid, @Param("auditremark") String auditremark);
+
+    IPage<EsignrecordQueryResult> queryesignrecord(IPage<EsignrecordQueryResult> page,@Param("vo")  EsignrecordQueryParam param);
+
+    IPage<InvestorQueryResult> queryinvestor(IPage<InvestorQueryResult> page, @Param("vo")  InvestorQueryParam param);
 }

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

@@ -71,11 +71,11 @@ public interface IUseraccountMapper extends BaseMapper<Useraccount> {
 
     IPage<AccountRiskConfigResult> queryAccountRiskConfigPage(IPage<AccountRiskConfigResult> page, @Param("vo")AccountRiskConfigParam param);
 
-    List<AccountRiskConfigResult> queryAccountRiskConfigPage( @Param("vo")AccountRiskConfigParam param);
-
     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<FeesConfigVo> getTradeFeeDescriptions(@Param("marketid")Long marketid,@Param("goodsid") Long goodsid,@Param("areauserid") Long areauserid,@Param("usergroupid")Long usergroupid);
+
+    List<OrganSelectResult> queryOrganSelect2And3(@Param("vo")OrganSelectParam param);
 }

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

@@ -0,0 +1,16 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.Wrcategory;
+
+/**
+ * <p>
+ * 现货分类表 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2024-12-02
+ */
+public interface IWrcategoryMapper extends BaseMapper<Wrcategory> {
+
+}

+ 17 - 0
mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IWrholdlbMapper.java

@@ -0,0 +1,17 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.Wrholdlb;
+
+/**
+ * <p>
+ * 仓单持有记录表 - 导历史
+账户服务结算时导历史,当前表 qty=0, freezeqty=0的记录删除 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2024-12-02
+ */
+public interface IWrholdlbMapper extends BaseMapper<Wrholdlb> {
+
+}

+ 38 - 0
mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IWroutinapplyMapper.java

@@ -0,0 +1,38 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.muchinfo.mtp3pojos.entity.Wrcategory;
+import com.muchinfo.mtp3pojos.entity.Wroutinapply;
+import com.muchinfo.mtp3pojos.vo.common.OrganSelectResult;
+import com.muchinfo.mtp3pojos.vo.warehouse.*;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 仓单出入库申请表 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2024-11-27
+ */
+public interface IWroutinapplyMapper extends BaseMapper<Wroutinapply> {
+
+    IPage<WarehouseQueryResult> queryWROutInApplyPage(IPage<WarehouseQueryResult> page, @Param("vo") WarehouseQueryParam param);
+
+    List<WarehouseQueryResult> queryWROutInApplyPage(@Param("vo") WarehouseQueryParam param);
+
+    List<Wrcategory> loadWRCategoryGoodsTree(@Param("categoryid") Long categoryid);
+
+    List<OrganSelectResult> queryUserList();
+
+    List<WslistQueryResult> querywslist(@Param("userid") Long userid);
+
+    List<WhlistQueryResult> querywhlist(@Param("userid") Long userid,@Param("wrstandardid") Long wrstandardid);
+
+    List<WrHoldLBResult> queryWRHoldLB(@Param("vo") WrHoldLBParam param);
+
+    IPage<WarehouseReceiptResult> receiptquery(IPage<WarehouseReceiptResult> page, @Param("vo")WarehouseReceiptParam param);
+}

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

@@ -0,0 +1,16 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.Wroutindetail;
+
+/**
+ * <p>
+ * 仓单出库提单明细表 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2024-11-29
+ */
+public interface IWroutindetailMapper extends BaseMapper<Wroutindetail> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.Wroutinexpress;
+
+/**
+ * <p>
+ * 仓单出入库物流信息表 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2024-11-29
+ */
+public interface IWroutinexpressMapper extends BaseMapper<Wroutinexpress> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.Wroutinfactorydetail;
+
+/**
+ * <p>
+ * 仓单入库要素明细表 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2024-11-29
+ */
+public interface IWroutinfactorydetailMapper extends BaseMapper<Wroutinfactorydetail> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.Wrstandardfactoryitem;
+
+/**
+ * <p>
+ * 现货商品要素项定义表 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2024-12-02
+ */
+public interface IWrstandardfactoryitemMapper extends BaseMapper<Wrstandardfactoryitem> {
+
+}

+ 3 - 3
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Arearolemarket.java

@@ -35,8 +35,8 @@ public class Arearolemarket extends Model<Arearolemarket> {
     private static final long serialVersionUID = 1L;
 
     @ApiModelProperty(value = "机构用户ID")
-    @TableId(value = "AREAUSERID", type = IdType.AUTO)
-    private BigDecimal areauserid;
+    @TableId(value = "AREAUSERID")
+    private Long areauserid;
 
     @ApiModelProperty(value = "角色类型 -  6:自营会员 7:经纪会员 20:组织机构")
     @TableField("ROLETYPE")
@@ -52,7 +52,7 @@ public class Arearolemarket extends Model<Arearolemarket> {
 
     @ApiModelProperty(value = "修改人ID")
     @TableField("MODIFIERID")
-    private BigDecimal modifierid;
+    private Long modifierid;
 
     @ApiModelProperty(value = "现货权限类型 - 0:无 1:可挂可摘 2:可挂 3:可摘 [现货类](卖大厅)")
     @TableField("SPOTRIGHTTYPE")

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

@@ -35,7 +35,7 @@ public class BankAccountoutinapply extends Model<BankAccountoutinapply> {
     private static final long serialVersionUID = 1L;
 
     @ApiModelProperty(value = "资金账号")
-      @TableId(value = "ACCOUNTCODE", type = IdType.AUTO)
+    @TableId(value = "ACCOUNTCODE")
     private String accountcode;
 
     @ApiModelProperty(value = "托管银行编号")

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

@@ -35,7 +35,7 @@ public class BankAccountsign extends Model<BankAccountsign> {
     private static final long serialVersionUID = 1L;
 
     @ApiModelProperty(value = "资金账号")
-    @TableId(value = "ACCOUNTCODE", type = IdType.AUTO)
+    @TableId(value = "ACCOUNTCODE")
     private String accountcode;
 
     @ApiModelProperty(value = "托管银行编号")

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

@@ -33,7 +33,7 @@ public class BankCusbankinfo extends Model<BankCusbankinfo> {
     private static final long serialVersionUID = 1L;
 
     @ApiModelProperty(value = "托管银行编号(对应清算中心TRAN_NO)")
-    @TableId(value = "CUSBANKID", type = IdType.AUTO)
+    @TableId(value = "CUSBANKID")
     private String cusbankid;
 
     @ApiModelProperty(value = "银行业务名称")

+ 128 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/CptradePositionapply.java

@@ -0,0 +1,128 @@
+package com.muchinfo.mtp3pojos.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+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 2024-11-25
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("CPTRADE_POSITIONAPPLY")
+@ApiModel(value="CptradePositionapply对象", description="远期订单申请表")
+public class CptradePositionapply extends Model<CptradePositionapply> {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "转入记录ID(180+Unix秒时间戳(10位)+xxxxxx)")
+    private Long applyid;
+
+    @ApiModelProperty(value = "申请人ID")
+    @TableField("USERID")
+    private Long userid;
+
+    @ApiModelProperty(value = "申请人账户ID")
+    @TableField("ACCOUNTID")
+    private Long accountid;
+
+    @ApiModelProperty(value = "现货商品ID")
+    @TableField("WRSTANDARDID")
+    private Long wrstandardid;
+
+    @ApiModelProperty(value = "商品ID")
+    @TableField("GOODSID")
+    private Long goodsid;
+
+    @ApiModelProperty(value = "仓单数量 = 交易合约手数*u*k*(r2/r1)")
+    @TableField("WRQTY")
+    private Long wrqty;
+
+    @ApiModelProperty(value = "商品数量")
+    @TableField("GOODSQTY")
+    private Long goodsqty;
+
+    @ApiModelProperty(value = "申请状态 - 1:已提交 2:初审通过 3:初审拒绝 4:初审失败 5复审通过 6:复审拒绝 7:复审失败 8:已撤销")
+    @TableField("APPLYSTATUS")
+    private Integer applystatus;
+
+    @ApiModelProperty(value = "处理状态")
+    @TableField("HANDLESTATUS")
+    private Integer handlestatus;
+
+    @ApiModelProperty(value = "申请时间")
+    @TableField("APPLYTIME")
+    private Date applytime;
+
+    @ApiModelProperty(value = "申请备注")
+    @TableField("APPLYREMARK")
+    private String applyremark;
+
+    @ApiModelProperty(value = "创建人")
+    @TableField("CREATORID")
+    private Long creatorid;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField("CREATETIME")
+    private Date createtime;
+
+    @ApiModelProperty(value = "初审人")
+    @TableField("FIRSTAUDITID")
+    private Long firstauditid;
+
+    @ApiModelProperty(value = "初审时间")
+    @TableField("FIRSTAUDITTIME")
+    private Date firstaudittime;
+
+    @ApiModelProperty(value = "初审备注")
+    @TableField("FIRSTREMARK")
+    private String firstremark;
+
+    @ApiModelProperty(value = "复审人")
+    @TableField("SECONDAUDITID")
+    private Long secondauditid;
+
+    @ApiModelProperty(value = "复审时间")
+    @TableField("SECONDAUDITTIME")
+    private Date secondaudittime;
+
+    @ApiModelProperty(value = "复审备注")
+    @TableField("SECONDREMARK")
+    private String secondremark;
+
+    @ApiModelProperty(value = "客户端流水号")
+    @TableField("CLIENTTICKET")
+    private String clientticket;
+
+    @ApiModelProperty(value = "交易日(yyyyMMdd)")
+    @TableField("TRADEDATE")
+    private String tradedate;
+
+    @ApiModelProperty(value = "市场ID")
+    @TableField("MARKETID")
+    private Long marketid;
+
+
+    @Override
+    public Serializable pkVal() {
+        return this.applyid;
+    }
+
+}

+ 119 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/CptradePositioncancel.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 2024-11-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("CPTRADE_POSITIONCANCEL")
+@ApiModel(value="CptradePositioncancel对象", description="远期订单注销申请表")
+@KeySequence(value = "SEQ_CPTRADE_POSITIONCANCEL")
+public class CptradePositioncancel extends Model<CptradePositioncancel> {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "注销ID(SEQ_CPTRADE_POSITIONCANCEL)")
+    @TableId(value = "CANCELID", type = IdType.INPUT)
+    private Long cancelid;
+
+    @ApiModelProperty(value = "申请人ID")
+    @TableField("USERID")
+    private Long userid;
+
+    @ApiModelProperty(value = "申请人账户ID")
+    @TableField("ACCOUNTID")
+    private Long accountid;
+
+    @ApiModelProperty(value = "商品ID")
+    @TableField("GOODSID")
+    private Long goodsid;
+
+    @ApiModelProperty(value = "注销数量")
+    @TableField("CANCELQTY")
+    private Long cancelqty;
+
+    @ApiModelProperty(value = "申请状态 - 1:已提交 2:初审通过 3:初审拒绝 4:初审失败 5复审通过 6:复审拒绝 7:复审失败  8:已撤销")
+    @TableField("APPLYSTATUS")
+    private Integer applystatus;
+
+    @ApiModelProperty(value = "处理状态")
+    @TableField("HANDLESTATUS")
+    private Integer handlestatus;
+
+    @ApiModelProperty(value = "申请时间")
+    @TableField("APPLYTIME")
+    private Date applytime;
+
+    @ApiModelProperty(value = "申请备注")
+    @TableField("APPLYREMARK")
+    private String applyremark;
+
+    @ApiModelProperty(value = "创建人")
+    @TableField("CREATORID")
+    private Long creatorid;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField("CREATETIME")
+    private Date createtime;
+
+    @ApiModelProperty(value = "初审人")
+    @TableField("FIRSTAUDITID")
+    private Long firstauditid;
+
+    @ApiModelProperty(value = "初审时间")
+    @TableField("FIRSTAUDITTIME")
+    private Date firstaudittime;
+
+    @ApiModelProperty(value = "初审备注")
+    @TableField("FIRSTREMARK")
+    private String firstremark;
+
+    @ApiModelProperty(value = "复审人")
+    @TableField("SECONDAUDITID")
+    private Long secondauditid;
+
+    @ApiModelProperty(value = "复审时间")
+    @TableField("SECONDAUDITTIME")
+    private Date secondaudittime;
+
+    @ApiModelProperty(value = "复审备注")
+    @TableField("SECONDREMARK")
+    private String secondremark;
+
+    @ApiModelProperty(value = "客户端流水号")
+    @TableField("CLIENTTICKET")
+    private String clientticket;
+
+    @ApiModelProperty(value = "交易日(yyyyMMdd)")
+    @TableField("TRADEDATE")
+    private String tradedate;
+
+    @ApiModelProperty(value = "市场ID")
+    @TableField("MARKETID")
+    private Long marketid;
+
+
+    @Override
+    public Serializable pkVal() {
+        return this.cancelid;
+    }
+
+}

+ 180 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/CptradePresalegoodsex.java

@@ -0,0 +1,180 @@
+package com.muchinfo.mtp3pojos.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+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 2024-11-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("CPTRADE_PRESALEGOODSEX")
+@ApiModel(value="CptradePresalegoodsex对象", description="产能预售商品扩展表")
+public class CptradePresalegoodsex extends Model<CptradePresalegoodsex> {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "商品ID")
+    private Long goodsid;
+
+    @ApiModelProperty(value = "关联申请ID")
+    @TableField("APPLYID")
+    private Long applyid;
+
+    @ApiModelProperty(value = "卖方用户ID")
+    @TableField("USERID")
+    private Long userid;
+
+    @ApiModelProperty(value = "卖方账户ID")
+    @TableField("ACCOUNTID")
+    private Long accountid;
+
+    @ApiModelProperty(value = "关联交易合约ID")
+    @TableField("RELATEDGOODSID")
+    private Long relatedgoodsid;
+
+    @ApiModelProperty(value = "预售数量")
+    @TableField("PRESALEQTY")
+    private Long presaleqty;
+
+    @ApiModelProperty(value = "预售开始时间")
+    @TableField("STARTTIME")
+    private Date starttime;
+
+    @ApiModelProperty(value = "预售结束时间")
+    @TableField("ENDTIME")
+    private Date endtime;
+
+    @ApiModelProperty(value = "缩略图片(1:1)")
+    @TableField("ATTACHMENTURL")
+    private String attachmenturl;
+
+    @ApiModelProperty(value = "预售模式 - 1:一口价 2:大宗式竞拍 3:挂牌预售(HSBY) 4:定金大宗 5:定金预售(中签) 枚举'presalemode'")
+    @TableField("PRESALEMODE")
+    private Integer presalemode;
+
+    @ApiModelProperty(value = "预售市场ID - 根据预售模式选择市场")
+    @TableField("MARKETID")
+    private Long marketid;
+
+    @ApiModelProperty(value = "参考价单价[一口价、51定金预售中签]")
+    @TableField("REFPRICE")
+    private BigDecimal refprice;
+
+    @ApiModelProperty(value = "起拍价[大宗式竞拍]")
+    @TableField("STARTPRICE")
+    private BigDecimal startprice;
+
+    @ApiModelProperty(value = "底价[大宗式竞拍]")
+    @TableField("FLOORPRICE")
+    private BigDecimal floorprice;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField("CREATETIME")
+    private Date createtime;
+
+    @ApiModelProperty(value = "交易日(yyyyMMdd)")
+    @TableField("TRADEDATE")
+    private String tradedate;
+
+    @ApiModelProperty(value = "关联交易合约市场ID")
+    @TableField("RELATEDMARKETID")
+    private Long relatedmarketid;
+
+    @ApiModelProperty(value = "已预售量(预售结束时更新) 71-委托时更新")
+    @TableField("PRESALEDQTY")
+    private Long presaledqty;
+
+    @ApiModelProperty(value = "已预售总金额(预售结束时更新)71-委托时更新")
+    @TableField("PRESALEDAMOUNT")
+    private BigDecimal presaledamount;
+
+    @ApiModelProperty(value = "卖方处理状态 - 1:卖方头寸未处理 2:卖方头寸已处理")
+    @TableField("SELLSTATUS")
+    private Integer sellstatus;
+
+    @ApiModelProperty(value = "详情[大宗]")
+    @TableField("GOODSDETAIL")
+    private String goodsdetail;
+
+    @ApiModelProperty(value = "成交价[大宗]")
+    @TableField("TRADEPRICE")
+    private BigDecimal tradeprice;
+
+    @ApiModelProperty(value = "购买上限 [71] - 0为不限")
+    @TableField("BUYMAXQTY")
+    private Long buymaxqty;
+
+    @ApiModelProperty(value = "预售定金方式(48) - 1:比例  2:固定")
+    @TableField("PRESALEDEPOSITALGORITHM")
+    private Integer presaledepositalgorithm;
+
+    @ApiModelProperty(value = "预售定金设置值(48)")
+    @TableField("PRESALEDEPOSITVALUE")
+    private BigDecimal presaledepositvalue;
+
+    @ApiModelProperty(value = "预售状态 - 1:未开始 2:预售中 3:已结束 4:已关闭")
+    @TableField("PRESALESTATUS")
+    private Integer presalestatus;
+
+    @ApiModelProperty(value = "详情图片(逗号分隔)(宽:1125)")
+    @TableField("PICTUREURLS")
+    private String pictureurls;
+
+    @ApiModelProperty(value = "Banner图(逗号分隔)(2:1)")
+    @TableField("BANNERPICURL")
+    private String bannerpicurl;
+
+    @ApiModelProperty(value = "中签基数")
+    @TableField("BASEQTY")
+    private Long baseqty;
+
+    @ApiModelProperty(value = "单人最大申购量")
+    @TableField("MAXBUYQTY")
+    private Long maxbuyqty;
+
+    @ApiModelProperty(value = "摇号标识 - 0:未摇号 1:已摇号 2:摇号中 3:摇号失败")
+    @TableField("LOTTERYFLAG")
+    private Integer lotteryflag;
+
+    @ApiModelProperty(value = "摇号总量")
+    @TableField("LOTTERYQTY")
+    private Long lotteryqty;
+
+    @ApiModelProperty(value = "已中签量成交量")
+    @TableField("LUCKYQTY")
+    private Long luckyqty;
+
+    @ApiModelProperty(value = "已配售量")
+    @TableField("PLACEQTY")
+    private Long placeqty;
+
+    @ApiModelProperty(value = "处理状态")
+    @TableField("HANDLESTATUS")
+    private Integer handlestatus;
+
+
+    @Override
+    public Serializable pkVal() {
+        return this.goodsid;
+    }
+
+}

+ 132 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Deliveryrelation.java

@@ -0,0 +1,132 @@
+package com.muchinfo.mtp3pojos.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+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;
+
+/**
+ * <p>
+ * 商品交割关系表
+ * </p>
+ *
+ * @author XKF
+ * @since 2024-11-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("DELIVERYRELATION")
+@ApiModel(value="Deliveryrelation对象", description="商品交割关系表")
+public class Deliveryrelation extends Model<Deliveryrelation> {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "交易合约ID")
+    @TableId(value = "GOODSID")
+    private Long goodsid;
+
+    @ApiModelProperty(value = "交割方式 - 1:点选式 2:申报式 3:无仓单申报式 4:线下交收 (枚举:deliveryMode)")
+    @TableField("DELIVERYMODE")
+    private Integer deliverymode;
+
+    @ApiModelProperty(value = "现货商品ID")
+    @TableField("WRSTANDARDID")
+    private Long wrstandardid;
+
+    @ApiModelProperty(value = "现货品种ID")
+    @TableField("DELIVERYGOODSID")
+    private Long deliverygoodsid;
+
+    @ApiModelProperty(value = "最小交割系数(K)")
+    @TableField("MINDELIVERYQTY")
+    private Long mindeliveryqty;
+
+    @ApiModelProperty(value = "兑换系数(交易合约)(R1)")
+    @TableField("RRATIO1")
+    private Long rratio1;
+
+    @ApiModelProperty(value = "兑换系数(现货商品)(R2)")
+    @TableField("RRATIO2")
+    private Long rratio2;
+
+    @ApiModelProperty(value = "交割价规则- 1:行情价 2:建仓价")
+    @TableField("DELIVERYPRICERULE")
+    private Integer deliverypricerule;
+
+    @ApiModelProperty(value = "起始日期(yyyyMMdd)")
+    @TableField("BEGINDATE")
+    private String begindate;
+
+    @ApiModelProperty(value = "结束日期(yyyyMMdd)")
+    @TableField("ENDDATE")
+    private String enddate;
+
+    @ApiModelProperty(value = "买履约计划模板ID")
+    @TableField("BUYTEMPLATEID")
+    private Long buytemplateid;
+
+    @ApiModelProperty(value = "卖履约计划模板ID")
+    @TableField("SELLTEMPLATEID")
+    private Long selltemplateid;
+
+    @ApiModelProperty(value = "交割模式 - 1:X交割 2:X+P交割 3:X+C交割 4:X+P+C交割")
+    @TableField("DELIVERYTYPE")
+    private Integer deliverytype;
+
+    @ApiModelProperty(value = "交易合约系数(m)")
+    @TableField("XDELIVERYRATIO")
+    private Long xdeliveryratio;
+
+    @ApiModelProperty(value = "P合约价格方式 - 1:商品价  2:固定值")
+    @TableField("PPRICEMODE")
+    private Integer ppricemode;
+
+    @ApiModelProperty(value = "P合约价格(商品价时填写0,固定值时填写固定值)")
+    @TableField("PDELIVERYPRICE")
+    private BigDecimal pdeliveryprice;
+
+    @ApiModelProperty(value = "P合约系数(n)")
+    @TableField("PDELIVERYRATIO")
+    private Long pdeliveryratio;
+
+    @ApiModelProperty(value = "P合约ID")
+    @TableField("PGOODSID")
+    private Long pgoodsid;
+
+    @ApiModelProperty(value = "P2合约价格方式 - 1:商品价  2:固定值")
+    @TableField("P2PRICEMODE")
+    private Integer p2pricemode;
+
+    @ApiModelProperty(value = "P2合约价格(商品价时填写0,固定值时填写固定值)")
+    @TableField("P2DELIVERYPRICE")
+    private BigDecimal p2deliveryprice;
+
+    @ApiModelProperty(value = "P2合约系数(p)")
+    @TableField("P2DELIVERYRATIO")
+    private Long p2deliveryratio;
+
+    @ApiModelProperty(value = "P2合约ID")
+    @TableField("P2GOODSID")
+    private Long p2goodsid;
+
+    @ApiModelProperty(value = "兑换系数(R)")
+    @TableField("RRATIO")
+    private Long rratio;
+
+
+    @Override
+    public Serializable pkVal() {
+        return this.goodsid;
+    }
+
+}

+ 68 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Dgfactoryitem.java

@@ -0,0 +1,68 @@
+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;
+
+/**
+ * <p>
+ * 品种选择项定义表
+ * </p>
+ *
+ * @author XKF
+ * @since 2024-11-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("DGFACTORYITEM")
+@ApiModel(value="Dgfactoryitem对象", description="品种选择项定义表")
+@KeySequence(value = "SEQ_DGFACTORYITEM")
+public class Dgfactoryitem extends Model<Dgfactoryitem> {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "选择项ID(SEQ_DGFACTORYITEM)")
+    @TableId(value = "DGFACTORYITEMID", type = IdType.INPUT)
+    private Long dgfactoryitemid;
+
+    @ApiModelProperty(value = "品种ID")
+    @TableField("DELIVERYGOODSID")
+    private Long deliverygoodsid;
+
+    @ApiModelProperty(value = "要素项类型")
+    @TableField("DGFACTORYITEMTYPEID")
+    private Long dgfactoryitemtypeid;
+
+    @ApiModelProperty(value = "要素项值(类型为仓库时填写仓库名称)")
+    @TableField("DGFACTORYITEMVALUE")
+    private String dgfactoryitemvalue;
+
+    @ApiModelProperty(value = "仓库ID(类型为仓库时填写)")
+    @TableField("WAREHOUSEID")
+    private Long warehouseid;
+
+    @ApiModelProperty(value = "是否有效 - 0:无效 1:有效")
+    @TableField("ISVALID")
+    private Integer isvalid;
+
+    @ApiModelProperty(value = "顺序")
+    @TableField("ORDERINDEX")
+    private Long orderindex;
+
+    @TableField(select = false)
+    private Integer ischecked;
+
+    @Override
+    public Serializable pkVal() {
+        return this.dgfactoryitemid;
+    }
+
+}

+ 105 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Dgfactoryitemtype.java

@@ -0,0 +1,105 @@
+package com.muchinfo.mtp3pojos.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+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;
+import java.util.List;
+
+/**
+ * <p>
+ * 品种要素项表
+ * </p>
+ *
+ * @author XKF
+ * @since 2024-11-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("DGFACTORYITEMTYPE")
+@ApiModel(value="Dgfactoryitemtype对象", description="品种要素项表")
+public class Dgfactoryitemtype extends Model<Dgfactoryitemtype> {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "要素项类型ID(SEQ_DGFACTORYITEMTYPE) 1-999:预留为特殊类型 选择项: 1:仓库 2.品牌 3:规格 属性项: 100:品牌 101 年份 >1000(序列自增) 选择项 录入项")
+    @TableId(value = "DGFACTORYITEMTYPEID")
+    private Long dgfactoryitemtypeid;
+
+    @ApiModelProperty(value = "品种ID")
+    @TableField("DELIVERYGOODSID")
+    private Long deliverygoodsid;
+
+    @ApiModelProperty(value = "要素项类型名称")
+    @TableField("ITEMTYPENAME")
+    private String itemtypename;
+
+    @ApiModelProperty(value = "要素项类型模式 -1:选择项(品种) 2:录入项(品种) 3:属性项(通用)")
+    @TableField("ITEMTYPEMODE")
+    private Integer itemtypemode;
+
+    @ApiModelProperty(value = "顺序")
+    @TableField("ORDERINDEX")
+    private Long orderindex;
+
+    @ApiModelProperty(value = "单位ID - [录入项]")
+    @TableField("UNITID")
+    private Integer unitid;
+
+    @ApiModelProperty(value = "最小变动值 - [录入项]")
+    @TableField("MINIVALUE")
+    private Long minivalue;
+
+    @ApiModelProperty(value = "最小变动值小数位 - [录入项]")
+    @TableField("MINIVALUEDP")
+    private Long minivaluedp;
+
+    @ApiModelProperty(value = "创建人")
+    @TableField("CREATORID")
+    private Long creatorid;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField("CREATETIME")
+    private Date createtime;
+
+    @ApiModelProperty(value = "更新人")
+    @TableField("UPDATORID")
+    private Long updatorid;
+
+    @ApiModelProperty(value = "更新时间")
+    @TableField("UPDATETIME")
+    private Date updatetime;
+
+    @ApiModelProperty(value = "是否有效 - 0:无效 1:有效")
+    @TableField("ISVALID")
+    private Integer isvalid;
+
+    @ApiModelProperty(value = "是否固定 - 0:不固定 1:固定")
+    @TableField("ISFIXED")
+    private Integer isfixed;
+
+    @TableField(select = false)
+    private BigDecimal minivalue2;
+    @TableField(select = false)
+    private String unitname;
+    @TableField(select = false)
+    private String typevalue;
+    @TableField(select = false)
+    private List<Dgfactoryitem> dgfilist;
+
+    public Serializable pkVal() {
+        return this.dgfactoryitemtypeid;
+    }
+
+}

+ 2 - 3
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Division.java

@@ -35,8 +35,7 @@ public class Division extends Model<Division> {
     private static final long serialVersionUID = 1L;
 
     @ApiModelProperty(value = "自增ID")
-      @TableId(value = "AUTOID")
-    private BigDecimal autoid;
+    private Long autoid;
 
     @ApiModelProperty(value = "行政代码")
     @TableField("DIVISIONCODE")
@@ -76,7 +75,7 @@ public class Division extends Model<Division> {
 
     @ApiModelProperty(value = "修改人")
     @TableField("MODIFIERID")
-    private BigDecimal modifierid;
+    private Long modifierid;
 
 
     @Override

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

@@ -33,7 +33,7 @@ public class DraftUseraccountNew extends Model<DraftUseraccountNew> {
     private static final long serialVersionUID = 1L;
 
     @ApiModelProperty(value = "autoid")
-    @TableId(value="autoid", type=IdType.INPUT)
+    @TableId(value="autoid")
     private Long autoid;
 
     @ApiModelProperty(value = "用户ID")

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

@@ -35,7 +35,7 @@ public class Enumdicitem extends Model<Enumdicitem> {
 
     @ApiModelProperty(value = "自增ID")
     @TableId(value = "AUTOID")
-    private BigDecimal autoid;
+    private Long autoid;
 
     @ApiModelProperty(value = "所属枚举ID")
     @TableField("ENUMDICID")

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

@@ -35,7 +35,7 @@ public class Errorcode extends Model<Errorcode> {
 
     @ApiModelProperty(value = "异常ID")
     @TableId(value = "ERRORID")
-    private BigDecimal errorid;
+    private Long errorid;
 
     @ApiModelProperty(value = "异常代码")
     @TableField("ERRORCODE")

+ 9 - 9
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Goods.java

@@ -1,9 +1,6 @@
 package com.muchinfo.mtp3pojos.entity;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -30,12 +27,13 @@ import java.util.Date;
 @AllArgsConstructor
 @NoArgsConstructor
 @Builder
+@KeySequence(value = "SEQ_GOODS")
 public class Goods extends Model<Goods> {
 
     private static final long serialVersionUID = 1L;
 
     @ApiModelProperty(value = "期货合约ID(自增ID SEQ_GOODS)")
-    @TableId(value = "GOODSID", type = IdType.AUTO)
+    @TableId(value = "GOODSID",type=IdType.INPUT)
     private Long goodsid;
 
     @ApiModelProperty(value = "期货合约代码(内部)")
@@ -216,7 +214,7 @@ public class Goods extends Model<Goods> {
 
     @ApiModelProperty(value = "所属机构")
     @TableField("AREAUSERID")
-    private BigDecimal areauserid;
+    private Long areauserid;
 
     @ApiModelProperty(value = "商品图片(逗号)")
     @TableField("PICTUREURL")
@@ -224,7 +222,7 @@ public class Goods extends Model<Goods> {
 
     @ApiModelProperty(value = "参考商品ID")
     @TableField("REFGOODSID")
-    private BigDecimal refgoodsid;
+    private Long refgoodsid;
 
     @ApiModelProperty(value = "掉期天数")
     @TableField("SWAPDAYS")
@@ -236,11 +234,11 @@ public class Goods extends Model<Goods> {
 
     @ApiModelProperty(value = "发售方用户ID(49)供货商(50)")
     @TableField("PROVIDERUSERID")
-    private BigDecimal provideruserid;
+    private Long provideruserid;
 
     @ApiModelProperty(value = "发售方资金账户ID(49)供货商资金账户ID(50)")
     @TableField("PROVIDERACCOUNTID")
-    private BigDecimal provideraccountid;
+    private Long provideraccountid;
 
     @ApiModelProperty(value = "转让定金比例(49)持仓定金(52)")
     @TableField("TRANSFERDEPOSITRATIO")
@@ -262,6 +260,8 @@ public class Goods extends Model<Goods> {
     @TableField("MARGINALGORITHM")
     private Integer marginalgorithm;
 
+    @TableField(select = false)
+    private String providerusername;
 
     @Override
     public Serializable pkVal() {

+ 4 - 4
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Goodsoptionproperty.java

@@ -34,7 +34,7 @@ public class Goodsoptionproperty extends Model<Goodsoptionproperty> {
     private static final long serialVersionUID = 1L;
 
     @ApiModelProperty(value = "商品ID(自增ID)")
-    @TableId(value = "GOODSID", type = IdType.AUTO)
+    @TableId(value = "GOODSID")
     private Long goodsid;
 
     @ApiModelProperty(value = "期权类型 - 1:认购(看涨) 2:认沽(看跌) 3:认购+认沽")
@@ -103,15 +103,15 @@ public class Goodsoptionproperty extends Model<Goodsoptionproperty> {
 
     @ApiModelProperty(value = "融货方ID - ShippingMode=2时设置")
     @TableField("MIDDLEUSERID")
-    private BigDecimal middleuserid;
+    private Long middleuserid;
 
     @ApiModelProperty(value = "融货方资金账号")
     @TableField("MIDDLEACCOUNTID")
-    private BigDecimal middleaccountid;
+    private Long middleaccountid;
 
     @ApiModelProperty(value = "履约计划模板ID")
     @TableField("PERFORMANCETEMPLATEID")
-    private BigDecimal performancetemplateid;
+    private Long performancetemplateid;
 
     @ApiModelProperty(value = "行权类型-1:欧式期权 2:美式期权")
     @TableField("EXERCISETYPE")

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor