xie.kaifeng пре 5 месеци
родитељ
комит
96f8423740
28 измењених фајлова са 1390 додато и 35 уклоњено
  1. 7 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/OrganController.java
  2. 82 1
      mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/PresaleController.java
  3. 8 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IForwardOrderService.java
  4. 7 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IPresaleService.java
  5. 2 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IUseraccountService.java
  6. 116 9
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/ForwardOrderServiceImpl.java
  7. 5 5
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/NoticeServiceImpl.java
  8. 248 17
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/PresaleServiceImpl.java
  9. 11 2
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/UseraccountServiceImpl.java
  10. 427 0
      mtp3-century/src/main/java/com/muchinfo/mtp3century/utils/DigitalTrans.java
  11. 39 0
      mtp3-century/src/main/resources/mapper/CptradePositionapplyMapper.xml
  12. 2 0
      mtp3-century/src/main/resources/message_en.properties
  13. 2 0
      mtp3-century/src/main/resources/message_th.properties
  14. 2 0
      mtp3-century/src/main/resources/message_vi.properties
  15. 2 0
      mtp3-century/src/main/resources/message_zh-cn.properties
  16. 2 0
      mtp3-century/src/main/resources/message_zh-hk.properties
  17. 2 0
      mtp3-century/src/main/resources/message_zh-tw.properties
  18. 2 0
      mtp3-common/src/main/java/com/muchinfo/mtp3common/enumtype/MessageType.java
  19. 1 0
      mtp3-common/src/main/java/com/muchinfo/mtp3common/enumtype/SysEnums.java
  20. 2 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/ICptradePositionapplyMapper.java
  21. 16 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/ICptradePresaleapplyMapper.java
  22. 16 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/ICptradeUsergoodsdataMapper.java
  23. 197 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/CptradePresaleapply.java
  24. 92 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/CptradeUsergoodsdata.java
  25. 3 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Useraccount.java
  26. 38 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/presale/ForwardPresaleParam.java
  27. 58 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/presale/ForwardPresaleResult.java
  28. 1 1
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/presale/PresaleApplyParam.java

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

@@ -391,4 +391,11 @@ public class OrganController {
             return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM002.getCode(), request.getHeader("Accept-Language"));
         }
     }
+
+    @ApiOperation("会员机构管理-->机构管理-->经纪会员管理-->line账号配置-->修改")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    @RequestMapping(method = RequestMethod.GET, value = "/updatelineaccountconfig")
+    public AjaxResult updatelineaccountconfig(Long userid, String linecsaccount, HttpServletRequest request) {
+        return iUseraccountService.updatelineaccountconfig(userid, linecsaccount, request);
+    }
 }

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

@@ -1,9 +1,15 @@
 package com.muchinfo.mtp3century.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.muchinfo.mtp3century.service.ICommonService;
 import com.muchinfo.mtp3century.service.IForwardOrderService;
 import com.muchinfo.mtp3century.service.IPresaleService;
 import com.muchinfo.mtp3century.utils.AjaxResult;
+import com.muchinfo.mtp3common.enumtype.SysConstants;
 import com.muchinfo.mtp3common.vo.PageResult;
+import com.muchinfo.mtp3interface.mapper.ISystemmanagerMapper;
+import com.muchinfo.mtp3pojos.entity.CptradePresaleapply;
+import com.muchinfo.mtp3pojos.entity.Systemmanager;
 import com.muchinfo.mtp3pojos.vo.presale.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -24,7 +30,11 @@ public class PresaleController {
     @Resource
     private IPresaleService iPresaleService;
     @Resource
-    IForwardOrderService iForwardOrderService;
+    private IForwardOrderService iForwardOrderService;
+    @Resource
+    private ISystemmanagerMapper iSystemmanagerMapper;
+    @Resource
+    private ICommonService iCommonService;
 
     @RequestMapping(method = RequestMethod.GET, value = "/query")
     @ApiOperation("预售管理--> 预售查询 --> 获取列表")
@@ -86,9 +96,34 @@ public class PresaleController {
     @ApiOperation("预售管理--> 预售申请 --> 获取列表")
     @ApiResponse(code = 200, message = "成功", response = PageResult.class)
     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());
+        }
+        return iPresaleService.queryApply(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/queryAuditApply")
+    @ApiOperation("预售管理--> 预售初审/复审 --> 获取列表")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    public PageResult<PresaleApplyResult> queryAuditApply(PresaleApplyParam param, HttpServletRequest request) {
         return iPresaleService.queryApply(param, request);
     }
 
+    @RequestMapping(method = RequestMethod.POST, value = "/firstsave")
+    @ApiOperation("预售管理--> 预售初审 --> 初审")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult firstsave(@RequestBody CptradePresaleapply param, HttpServletRequest request) {
+        return iPresaleService.firstsave(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.POST, value = "/secondsave")
+    @ApiOperation("预售管理--> 预售初审 --> 复审")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult secondsave(@RequestBody CptradePresaleapply param, HttpServletRequest request) {
+        return iPresaleService.secondsave(param, request);
+    }
+
     @RequestMapping(method = RequestMethod.GET, value = "/applyView")
     @ApiOperation("预售管理--> 预售申请 --> 详情")
     @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
@@ -103,6 +138,13 @@ public class PresaleController {
         return iPresaleService.save(param, request);
     }
 
+    @RequestMapping(method = RequestMethod.POST, value = "/cancel")
+    @ApiOperation("预售管理--> 预售申请 --> 撤回")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult cancel(String applyid, HttpServletRequest request) {
+        return iPresaleService.cancel(applyid, request);
+    }
+
     @RequestMapping(method = RequestMethod.GET, value = "/saveInit")
     @ApiOperation("预售管理--> 预售申请 --> 新增初始化市场信息")
     @ApiResponse(code = 200, message = "成功", response = PresaleApplyAddInitResult.class)
@@ -110,13 +152,52 @@ public class PresaleController {
         return iPresaleService.saveInit(request);
     }
 
+    @RequestMapping(method = RequestMethod.GET, value = "/querypresaleresult")
+    @ApiOperation("预售管理--> 预售结果 --> 获取列表")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    public PageResult<ForwardPresaleResult> querypresaleresult(ForwardPresaleParam param, HttpServletRequest request) {
+        return iForwardOrderService.querypresaleresult(param, request);
+    }
+
     @RequestMapping(method = RequestMethod.GET, value = "/queryForward")
     @ApiOperation("远期订单管理--> 订单申请 --> 获取列表")
     @ApiResponse(code = 200, message = "成功", response = PageResult.class)
     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());
+        }
+        return iForwardOrderService.queryForward(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/queryAuditForward")
+    @ApiOperation("远期订单管理--> 订单初审/复审 --> 获取列表")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    public PageResult<ForwardOrderApplyResult> queryAuditForward(ForwardOrderApplyParam param, HttpServletRequest request) {
         return iForwardOrderService.queryForward(param, request);
     }
 
+    @RequestMapping(method = RequestMethod.GET, value = "/forwardcancel")
+    @ApiOperation("远期订单管理--> 订单申请 --> 撤销")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult forwardcancel(String applyid, HttpServletRequest request) {
+        return iForwardOrderService.forwardcancel(applyid, request);
+    }
+
+    @RequestMapping(method = RequestMethod.POST, value = "/forwardfirstsave")
+    @ApiOperation("远期订单管理--> 订单初审 --> 初审")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult forwardfirstsave(String applyid, Integer applystatus, String firstremark, HttpServletRequest request) {
+        return iForwardOrderService.forwardfirstsave(applyid, applystatus, firstremark, request);
+    }
+
+    @RequestMapping(method = RequestMethod.POST, value = "/forwardsecondsave")
+    @ApiOperation("远期订单管理--> 订单初审 --> 复审")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult forwardsecondsave(String applyid, Integer applystatus, String secondremark, HttpServletRequest request) {
+        return iForwardOrderService.forwardsecondsave(applyid, applystatus, secondremark, request);
+    }
+
     @RequestMapping(method = RequestMethod.GET, value = "/forwardView")
     @ApiOperation("远期订单管理--> 订单申请 --> 详情")
     @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)

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

@@ -24,4 +24,12 @@ public interface IForwardOrderService {
     AjaxResult<ForwardCancelApplyInit> cancelApplyAddInit(Long accountid, HttpServletRequest request);
 
     AjaxResult cancelApplyAdd(ForwardCancelAddParam param, HttpServletRequest request);
+
+    PageResult<ForwardPresaleResult> querypresaleresult(ForwardPresaleParam param, HttpServletRequest request);
+
+    AjaxResult forwardcancel(String applyid, HttpServletRequest request);
+
+    AjaxResult forwardfirstsave(String applyid, Integer applystatus, String firstremark, HttpServletRequest request);
+
+    AjaxResult forwardsecondsave(String applyid, Integer applystatus, String secondremark, HttpServletRequest request);
 }

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

@@ -2,6 +2,7 @@ package com.muchinfo.mtp3century.service;
 
 import com.muchinfo.mtp3century.utils.AjaxResult;
 import com.muchinfo.mtp3common.vo.PageResult;
+import com.muchinfo.mtp3pojos.entity.CptradePresaleapply;
 import com.muchinfo.mtp3pojos.vo.presale.*;
 
 import javax.servlet.http.HttpServletRequest;
@@ -30,4 +31,10 @@ public interface IPresaleService {
     AjaxResult save(PresaleApplyAddParam param, HttpServletRequest request);
 
     AjaxResult<PresaleApplyAddInitResult> saveInit(HttpServletRequest request);
+
+    AjaxResult cancel(String applyid, HttpServletRequest request);
+
+    AjaxResult firstsave(CptradePresaleapply param, HttpServletRequest request);
+
+    AjaxResult secondsave(CptradePresaleapply param, HttpServletRequest request);
 }

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

@@ -84,4 +84,6 @@ public interface IUseraccountService extends IService<Useraccount> {
     AjaxResult cancelaudit(Long autoid, Integer auditflag, String msg, HttpServletRequest request);
 
     AjaxResult<UserAccountDetailVo> getUserAccountDetail(Long userid, HttpServletRequest request);
+
+    AjaxResult updatelineaccountconfig(Long userid, String linecsaccount, HttpServletRequest request);
 }

+ 116 - 9
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/ForwardOrderServiceImpl.java

@@ -4,20 +4,25 @@ 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.TkernelMI1;
 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.enumtype.*;
 import com.muchinfo.mtp3common.utils.SerialNumberUtils;
 import com.muchinfo.mtp3century.utils.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.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
@@ -48,13 +53,10 @@ public class ForwardOrderServiceImpl implements IForwardOrderService {
     private IMarketrunMapper iMarketrunMapper;
     @Resource
     private ICptradePositioncancelMapper iCptradePositioncancelMapper;
-
+    @Resource
+    private RabbitTemplate rabbitTemplate;
     @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);
@@ -223,4 +225,109 @@ public class ForwardOrderServiceImpl implements IForwardOrderService {
         iCptradePositioncancelMapper.insert(pa);
         return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
     }
+
+    @Override
+    public PageResult<ForwardPresaleResult> querypresaleresult(ForwardPresaleParam 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());
+        }
+        //只查询48\51 定金预售的持仓,用于追加定金
+        param.setTrademodes("48,51");
+        PageResult<ForwardPresaleResult> pageResult = new PageResult<>();
+        IPage<ForwardPresaleResult> page = new Page<>(param.getPageNum(), param.getPageSize());
+        IPage<ForwardPresaleResult> resultIPage = iCptradePositionapplyMapper.querypresaleresult(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 forwardcancel(String applyid, HttpServletRequest request) {
+        CptradePositionapply pa = iCptradePositionapplyMapper.selectOne(new QueryWrapper<CptradePositionapply>().eq("applyid",applyid));
+        pa.setApplystatus(8);
+        iCptradePositionapplyMapper.update(pa,new QueryWrapper<CptradePositionapply>().eq("applyid",applyid));
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
+    }
+
+    @Override
+    public AjaxResult forwardfirstsave(String applyid, Integer applystatus, String firstremark, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+
+        CptradePositionapply pa = iCptradePositionapplyMapper.selectOne(new QueryWrapper<CptradePositionapply>().eq("applyid",applyid));
+        pa.setApplystatus(applystatus);
+        pa.setFirstauditid(systemmanager.getAutoid());
+        pa.setFirstaudittime(new Date());
+        pa.setFirstremark(firstremark);
+
+        iCptradePositionapplyMapper.update(pa,new QueryWrapper<CptradePositionapply>().eq("applyid",applyid));
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
+    }
+
+    @Override
+    public AjaxResult forwardsecondsave(String applyid, Integer applystatus, String secondremark, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+
+        CptradePositionapply pa = iCptradePositionapplyMapper.selectOne(new QueryWrapper<CptradePositionapply>().eq("applyid",applyid));
+        if(applystatus == 6){
+            pa.setApplystatus(applystatus);
+        }
+
+        pa.setSecondauditid(systemmanager.getAutoid());
+        pa.setSecondaudittime(new Date());
+        pa.setSecondremark(secondremark);
+
+        iCptradePositionapplyMapper.update(pa,new QueryWrapper<CptradePositionapply>().eq("applyid",applyid));
+
+        if(applystatus == 5){
+            Long uuid = SerialNumberUtils.getNewSerialNumber(SerialNumberUtils.prefix_capacity);
+            Calculator ca = new Calculator(uuid, FunCodeConstants.FunCode_Trade_CpPositionTransferInRetrialPassReq);
+            SerialNumberUtils.lockMap.put(uuid, ca);
+
+            TkernelMI1.CpPositionTransferInRetrialPassReq.Builder builder = TkernelMI1.CpPositionTransferInRetrialPassReq.newBuilder();
+            Common.MessageHead.Builder hd = Common.MessageHead.newBuilder();
+            hd.setFunCode(FunCodeConstants.FunCode_Trade_CpPositionTransferInRetrialPassReq);
+            hd.setUUID(String.valueOf(uuid));
+            hd.setClientTime(System.currentTimeMillis());
+            hd.setMarketID(pa.getMarketid().intValue());
+            builder.setHeader(hd);
+
+            builder.setAccountID(pa.getAccountid());
+            builder.setUserID(pa.getUserid().intValue());
+            builder.setApplyID(pa.getApplyid());
+
+            byte[] body = ProtoHelper.getNTAS(builder.build().toByteArray(),
+                    FunCodeConstants.FunCode_Trade_CpPositionTransferInRetrialPassReq);
+
+            rabbitTemplate.send(SysConstants.TradeCpReq, new Message(body, new MessageProperties()));
+
+            synchronized (ca) {
+                try {
+                    ca.wait(ca.getOutTime());
+                    Object rsp = ca.obj;
+                    if (rsp != null) {
+                        TkernelMI1.CpPositionTransferInRetrialPassRsp rsp_ = (TkernelMI1.CpPositionTransferInRetrialPassRsp) rsp;
+                        if (rsp_.getRetCode() == 0) {
+                            return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.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("订单复核失败,失败信息:" + Arrays.toString(e.getStackTrace()));
+                } finally {
+                    SerialNumberUtils.lockMap.remove(uuid);
+                }
+            }
+        }
+
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
+    }
 }

+ 5 - 5
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/NoticeServiceImpl.java

@@ -98,7 +98,7 @@ public class NoticeServiceImpl implements INoticeService {
          * 20250612 目录只开放经纪会员 3,5类型,其它会员不开通公告通知功能
          */
         if (SysEnums.SendTypeEnum.ALLSEND.getCode().equals(param.getSendtype())) {
-            saveSendAll(noticeMsg,systemmanager);
+            saveSendAll(noticeMsg, systemmanager);
         } else if (SysEnums.SendTypeEnum.MEMBERSEND.getCode().equals(param.getSendtype())) {
             String[] split = param.getMemberidlist().split(",");
 
@@ -118,7 +118,7 @@ public class NoticeServiceImpl implements INoticeService {
             }
             saveSendOnlyMember(noticeMsg, split);
         } else if (SysEnums.SendTypeEnum.ALLUSER.getCode().equals(param.getSendtype())) {
-            saveSendAllUser(noticeMsg,systemmanager);
+            saveSendAllUser(noticeMsg, systemmanager);
         }
         return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
     }
@@ -461,7 +461,7 @@ public class NoticeServiceImpl implements INoticeService {
     public AjaxResult<SiteColumndetail> informDetail(Long id, HttpServletRequest request) {
         SiteColumndetail siteColumndetail = iSiteColumndetailMapper.selectOne(new QueryWrapper<SiteColumndetail>().eq("id", id));
         siteColumndetail.setColumnname(iSiteColumnconfigMapper.selectOne(new QueryWrapper<SiteColumnconfig>().eq("id", siteColumndetail.getColumnid())).getColumnname());
-        if(siteColumndetail.getSrcid() != null){
+        if (siteColumndetail.getSrcid() != null) {
             siteColumndetail.setSrcname(iGzMemberinfoMapper.selectOne(new QueryWrapper<GzMemberinfo>().eq("memberid", siteColumndetail.getSrcid())).getMembername());
         }
         return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), siteColumndetail);
@@ -590,7 +590,7 @@ public class NoticeServiceImpl implements INoticeService {
         //查所有的全体交易商
         List<Useraccount> userAccountList = iUseraccountMapper.selectList(new QueryWrapper<Useraccount>()
                 .eq("usertype", SysEnums.SZDivideTargetType.INVESTOR.getCode())
-                .eq(systemmanager.getReletype() != 1,"memberuserid", systemmanager.getAreauserid()));
+                .eq(systemmanager.getReletype() != 1, "memberuserid", systemmanager.getAreauserid()));
 
         if (CollectionUtils.isNotEmpty(userAccountList)) {
             for (Useraccount ua : userAccountList) {
@@ -641,7 +641,7 @@ public class NoticeServiceImpl implements INoticeService {
         //查所有的管理端平台用户,会员用户用户包括机构用户
         List<Systemmanager> users = iSystemmanagerMapper.selectList(new QueryWrapper<Systemmanager>()
                 .eq("managerstatus", SysEnums.SysStatus.ok.getCode())
-                .eq(systemmanager.getReletype() != 1,"areauserid", systemmanager.getAreauserid()));
+                .eq(systemmanager.getReletype() != 1, "areauserid", systemmanager.getAreauserid()));
 
         addMsgreceiver(noticeMsg, users);
     }

+ 248 - 17
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/PresaleServiceImpl.java

@@ -9,10 +9,9 @@ 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.mtp3century.utils.DigitalTrans;
+import com.muchinfo.mtp3century.utils.SequenceIDGeneratorUtils;
+import com.muchinfo.mtp3common.enumtype.*;
 import com.muchinfo.mtp3common.utils.SerialNumberUtils;
 import com.muchinfo.mtp3century.utils.AjaxResult;
 import com.muchinfo.mtp3common.vo.Calculator;
@@ -27,14 +26,13 @@ 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;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 
 @Service
 public class PresaleServiceImpl implements IPresaleService {
@@ -50,10 +48,17 @@ public class PresaleServiceImpl implements IPresaleService {
     @Resource
     private IMarketMapper iMarketMapper;
     @Resource
+    private IGoodsMapper iGoodsMapper;
+    @Resource
     private IMarketrunMapper iMarketrunMapper;
     @Resource
     private IWskhOpenaccountconfigMapper iWskhOpenaccountconfigMapper;
-
+    @Resource
+    private ICptradePresaleapplyMapper iCptradePresaleapplyMapper;
+    @Resource
+    private SequenceIDGeneratorUtils idGeneratorUtils;
+    @Resource
+    private ICptradeUsergoodsdataMapper iCptradeUsergoodsdataMapper;
     @Override
     public PageResult<PresaleQueryResult> query(PresaleQueryParam param, HttpServletRequest request) {
         Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
@@ -233,10 +238,6 @@ public class PresaleServiceImpl implements IPresaleService {
 
     @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);
@@ -260,7 +261,6 @@ public class PresaleServiceImpl implements IPresaleService {
 
     @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);
@@ -367,16 +367,16 @@ public class PresaleServiceImpl implements IPresaleService {
     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));
+                .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)){
+        if (Objects.nonNull(marketrun)) {
             result.setNexttradedate(marketrun.getNexttradedate());
         }
 
         //获取图片上传大小
-        WskhOpenaccountconfig config = iWskhOpenaccountconfigMapper.selectOne(new QueryWrapper<WskhOpenaccountconfig>().eq("configtype",25));
+        WskhOpenaccountconfig config = iWskhOpenaccountconfigMapper.selectOne(new QueryWrapper<WskhOpenaccountconfig>().eq("configtype", 25));
         if (config != null) {
             result.setMaxsize(config.getConfigvalue());
         } else {
@@ -385,4 +385,235 @@ public class PresaleServiceImpl implements IPresaleService {
         }
         return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), result);
     }
+
+    @Override
+    public AjaxResult cancel(String applyid, HttpServletRequest request) {
+        CptradePresaleapply pa = iCptradePresaleapplyMapper.selectOne(new QueryWrapper<CptradePresaleapply>()
+                .eq("applyid", applyid));
+        if (pa.getApplystatus() != 1) {
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM035.getCode(), request.getHeader("Accept-Language"));
+        }
+        Goods g = iGoodsMapper.selectOne(new QueryWrapper<Goods>().eq("goodsid", pa.getRelatedgoodsid()));
+
+        Long uuid = SerialNumberUtils.getNewSerialNumber(SerialNumberUtils.prefix_capacitytwo);
+        Calculator ca = new Calculator(uuid, FunCodeConstants.FunCode_Trade_CpPresaleOperateReq);
+        SerialNumberUtils.lockMap.put(uuid, ca);
+
+        TkernelMI1.CpPresaleOperateReq.Builder builder = TkernelMI1.CpPresaleOperateReq.newBuilder();
+        Common.MessageHead.Builder hd = Common.MessageHead.newBuilder();
+        hd.setFunCode(FunCodeConstants.FunCode_Trade_CpPresaleOperateReq);
+        hd.setUUID(String.valueOf(uuid));
+        hd.setClientTime(System.currentTimeMillis());
+        hd.setMarketID(g.getMarketid().intValue());
+        builder.setHeader(hd);
+
+        builder.setAccountID(pa.getAccountid());
+        builder.setUserID(pa.getUserid().intValue());
+        builder.setApplyID(pa.getApplyid());
+        builder.setOperateType(1);
+        builder.setClientTicket(String.valueOf(uuid));
+
+        byte[] body = ProtoHelper.getNTAS(builder.build().toByteArray(),
+                FunCodeConstants.FunCode_Trade_CpPresaleOperateReq);
+
+        rabbitTemplate.send(SysConstants.TradeCpReq, new Message(body, new MessageProperties()));
+
+        synchronized (ca) {
+            try {
+                ca.wait(ca.getOutTime());
+                Object rsp = ca.obj;
+                if (rsp != null) {
+                    TkernelMI1.CpPresaleOperateRsp rsp_ = (TkernelMI1.CpPresaleOperateRsp) rsp;
+                    if (rsp_.getRetCode() == 0) {
+                        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.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("预售申请撤回失败,失败信息:" + Arrays.toString(e.getStackTrace()));
+            } finally {
+                SerialNumberUtils.lockMap.remove(uuid);
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public AjaxResult firstsave(CptradePresaleapply vo, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        if (vo.getApplyid() == null) {
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_009.getCode(), request.getHeader("Accept-Language"));
+        }
+        CptradePresaleapply pa = iCptradePresaleapplyMapper.selectOne(new QueryWrapper<CptradePresaleapply>()
+                .eq("applyid", vo.getApplyid()));
+        if (vo.getApplystatus() == 2) {
+            pa.setApplystatus(vo.getApplystatus());
+        }
+        if (pa.getPresalemode() == 1 || pa.getPresalemode() == 3) {
+            pa.setRefprice(vo.getRefprice());
+        }
+        if (pa.getPresalemode() == 2 || pa.getPresalemode() == 4) {
+            pa.setStartprice(vo.getStartprice());
+            pa.setFloorprice(vo.getFloorprice());
+        }
+        if (pa.getPresalemode() == 5) {
+            // 预售价格小数位校验:价格小数位为%s, 请输入%s的倍数
+            Goods g = iGoodsMapper.selectOne(new QueryWrapper<Goods>().eq("goodsid", pa.getRelatedgoodsid()));
+            if (g == null || vo.getRefprice() == null) {
+                return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_009.getCode(), request.getHeader("Accept-Language"));
+            }
+
+            // 价格小数位符合商品小数位(<=),且为行情最小变动单位的倍数
+            BigDecimal value1 = BigDecimal.valueOf(Math.pow(10, g.getDecimalplace() * -1)).multiply(BigDecimal.valueOf(g.getQuoteminunit()));
+            if (vo.getRefprice().scale() > g.getDecimalplace()
+                    || vo.getRefprice().remainder(value1).compareTo(BigDecimal.ZERO) != 0) {
+                return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM036.getCode(), request.getHeader("Accept-Language"));
+            }
+
+            pa.setRefprice(vo.getRefprice());
+            pa.setBaseqty(vo.getBaseqty());
+            pa.setMaxbuyqty(vo.getMaxbuyqty());
+        }
+        pa.setStarttime(vo.getStarttime());
+        pa.setEndtime(vo.getEndtime());
+
+        if (vo.getPresaledepositalgorithm() != null) {
+            pa.setPresaledepositalgorithm(vo.getPresaledepositalgorithm());
+        }
+
+        if (vo.getPresaledepositvalue() != null) {
+            if (vo.getPresaledepositalgorithm() == 1) {
+                pa.setPresaledepositvalue(vo.getPresaledepositvalue().divide(new BigDecimal(100)));
+            } else {
+                pa.setPresaledepositvalue(vo.getPresaledepositvalue());
+            }
+        }
+
+        pa.setFirstauditid(systemmanager.getAutoid());
+        pa.setFirstaudittime(new Date());
+        pa.setFirstremark(vo.getFirstremark());
+
+        iCptradePresaleapplyMapper.update(pa, new QueryWrapper<CptradePresaleapply>().eq("applyid", vo.getApplyid()));
+
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
+    }
+
+    @Override
+    public AjaxResult secondsave(CptradePresaleapply vo, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        CptradePresaleapply pa = iCptradePresaleapplyMapper.selectOne(new QueryWrapper<CptradePresaleapply>()
+                .eq("applyid", vo.getApplyid()));
+
+        if (vo.getApplystatus() == 5) {
+            Goods goods = iGoodsMapper.selectOne(new QueryWrapper<Goods>().eq("goodsid", pa.getRelatedgoodsid()));
+
+            pa.setApplystatus(vo.getApplystatus());
+            pa.setHandlestatus(1);
+            if (pa.getPresalemode() == 1) {
+                pa.setRefprice(vo.getRefprice());
+            } else if (pa.getPresalemode() == 3) {
+                pa.setRefprice(vo.getRefprice());
+                pa.setBuymaxqty(vo.getBuymaxqty());
+            } else if (pa.getPresalemode() == 2 || pa.getPresalemode() == 4) {
+                pa.setStartprice(vo.getStartprice());
+                pa.setFloorprice(vo.getFloorprice());
+            } else if (pa.getPresalemode() == 5) {
+                // 预售价格小数位校验
+                if (goods == null || vo.getRefprice() == null) {
+                    return AjaxResult.error(Constants.Error_Code_Design, MessageType.QUERY_ERROR_CODE_009.getCode(), request.getHeader("Accept-Language"));
+                }
+
+                // 价格小数位符合商品小数位(<=),且为行情最小变动单位的倍数
+                BigDecimal value1 = BigDecimal.valueOf(Math.pow(10, goods.getDecimalplace() * -1)).multiply(BigDecimal.valueOf(goods.getQuoteminunit()));
+                if (vo.getRefprice().scale() > goods.getDecimalplace()
+                        || vo.getRefprice().remainder(value1).compareTo(BigDecimal.ZERO) != 0) {
+                    return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM036.getCode(), request.getHeader("Accept-Language"));
+                }
+
+                pa.setRefprice(vo.getRefprice());
+                pa.setBaseqty(vo.getBaseqty());
+                pa.setMaxbuyqty(vo.getMaxbuyqty());
+            }
+            pa.setStarttime(vo.getStarttime());
+            pa.setEndtime(vo.getEndtime());
+
+            if (vo.getPresaledepositalgorithm() != null) {
+                pa.setPresaledepositalgorithm(vo.getPresaledepositalgorithm());
+            }
+            if (vo.getPresaledepositvalue() != null) {
+                if (vo.getPresaledepositalgorithm().equals(1)) {
+                    pa.setPresaledepositvalue(vo.getPresaledepositvalue().divide(new BigDecimal(100)));
+                } else {
+                    pa.setPresaledepositvalue(vo.getPresaledepositvalue());
+                }
+            }
+
+            Long goodsid = idGeneratorUtils.getGeneratorID(Goods.class);
+            pa.setGoodscode("#B" + DigitalTrans.algorismToHEXString(goodsid.intValue(), 6));
+            pa.setGoodsname(goods.getGoodsname());
+
+            Goods g = new Goods();
+            BeanUtils.copyProperties(goods, g);
+            g.setGoodsid(goodsid);
+            g.setGoodscode("#B" + DigitalTrans.algorismToHEXString(goodsid.intValue(), 6));
+            g.setGoodsname(goods.getGoodsname());
+            g.setGoodsgroupid(vo.getGoodsgroupid());
+            g.setMarketid(pa.getMarketid());
+            g.setGoodsstatus(2);
+            g.setDeliveryflag(0);
+            g.setListingdate(vo.getListingdate());
+            g.setLasttradedate(vo.getLasttradedate());
+            g.setDelistingdate(vo.getLasttradedate());
+            g.setCreatorid(systemmanager.getAutoid());
+            g.setCreatetime(new Date());
+            // 默认为退市作废(退市发货)
+            g.setDelistingmode(4);
+
+            // 复制二级市场转让定金比例到一级
+            Market current = iMarketMapper.selectOne(new QueryWrapper<Market>().eq("marketid",g.getMarketid()));
+            if(!current.getTrademode().equals(49) && current.getTradeproperty().equals(2)){
+                // 不为49定金转让的全款模式定金率固定为100%
+                g.setTransferdepositratio(new BigDecimal(1));
+            }else {
+                g.setTransferdepositratio(goods.getTransferdepositratio());
+            }
+
+            // 调用手动SQL插入,加字段须修改SQL“insertGoods”
+            iGoodsMapper.insert(g);
+
+            CptradeUsergoodsdata ugd = iCptradeUsergoodsdataMapper.selectOne(new QueryWrapper<CptradeUsergoodsdata>()
+                    .eq("accountid", pa.getAccountid())
+                    .eq("goodsid", pa.getRelatedgoodsid()));
+
+            CptradePresalegoodsex pge = new CptradePresalegoodsex();
+            BeanUtils.copyProperties(pa, pge);
+            pge.setGoodsid(goodsid);
+            pge.setCreatetime(new Date());
+            pge.setRelatedmarketid(ugd.getMarketid());
+            pge.setPresaledqty(ugd.getPresaledqty());
+            pge.setPresaledamount(ugd.getPresaledamount());
+            pge.setSellstatus(1);
+            pge.setPresalestatus(1);
+            pge.setLotteryflag(0);
+
+            iCptradePresalegoodsexMapper.insert(pge);
+
+            //48:定金预售市场\51中签预售,更新二级商品预售状态为 4:预售中
+            Market market = iMarketMapper.selectOne(new QueryWrapper<Market>().eq("marketid",pa.getMarketid()));
+            if (market != null && (market.getTrademode().equals(SysEnums.TradeMode.DJYSB.getCode()) ||
+                    market.getTrademode().equals(SysEnums.TradeMode.DJYSZQ.getCode()))){
+                goods.setPresaleflag(4);
+                iGoodsMapper.updateById(goods);
+            }
+        }
+        pa.setSecondauditid(systemmanager.getAutoid());
+        pa.setSecondaudittime(new Date());
+        pa.setSecondremark(vo.getSecondremark());
+
+        iCptradePresaleapplyMapper.update(pa,new QueryWrapper<CptradePresaleapply>().eq("applyid", vo.getApplyid()));
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
+    }
 }

+ 11 - 2
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/UseraccountServiceImpl.java

@@ -25,6 +25,7 @@ import com.muchinfo.mtp3interface.mapper.*;
 import com.muchinfo.mtp3pojos.entity.*;
 import com.muchinfo.mtp3pojos.vo.ProtoErrorCodes;
 import com.muchinfo.mtp3pojos.vo.investor.*;
+import org.apache.catalina.User;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.amqp.core.Message;
@@ -1124,7 +1125,7 @@ public class UseraccountServiceImpl extends ServiceImpl<IUseraccountMapper, User
                 Goods goods = iGoodsMapper.selectOne(new QueryWrapper<Goods>().eq("goodsid", fig.getGoodsid()));
                 Goodsex goodsid = iGoodsexMapper.selectOne(new QueryWrapper<Goodsex>().eq("goodsid", goods.getGoodsid()));
                 fig.setGoodsname(goods.getGoodsname());
-                if(goodsid != null){
+                if (goodsid != null) {
                     fig.setGoodsnameen(goodsid.getGoodsnameen());
                     fig.setGoodsnamevi(goodsid.getGoodsnamevi());
                     fig.setGoodsnametw(goodsid.getGoodsnametw());
@@ -1689,7 +1690,7 @@ public class UseraccountServiceImpl extends ServiceImpl<IUseraccountMapper, User
             return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM003.getCode(), request.getHeader("Accept-Language"));
         }
         result.setAccountname(iUseraccountMapper.selectOne(new QueryWrapper<Useraccount>().eq("userid", result.getUserid())).getAccountname());
-        if(result.getAuditid() != null){
+        if (result.getAuditid() != null) {
             result.setAuditusername(iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("autoid", result.getAuditid())).getUsername());
         }
         return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), result);
@@ -1843,6 +1844,14 @@ public class UseraccountServiceImpl extends ServiceImpl<IUseraccountMapper, User
         return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), userAccountDetailVo);
     }
 
+    @Override
+    public AjaxResult updatelineaccountconfig(Long userid, String linecsaccount, HttpServletRequest request) {
+        Useraccount ua = iUseraccountMapper.selectOne(new QueryWrapper<Useraccount>().eq("userid", linecsaccount));
+        ua.setLinecsaccount(linecsaccount);
+        iUseraccountMapper.update(ua, new QueryWrapper<Useraccount>().eq("userid", linecsaccount));
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
+    }
+
     private List<RulesConfigVo> getTradeRuleDescriptions(PersonalizationDelParam param) {
         List<RulesConfigVo> list = iUseraccountMapper.getTradeRuleDescriptions(param);
 

+ 427 - 0
mtp3-century/src/main/java/com/muchinfo/mtp3century/utils/DigitalTrans.java

@@ -0,0 +1,427 @@
+package com.muchinfo.mtp3century.utils;
+
+public class DigitalTrans {
+
+	/**
+	 * ASCII码字符串转数字字符串
+	 * 
+	 * @param String ASCII字符串
+	 * @return 字符串
+	 */
+	public static String AsciiStringToString(String content) {
+		String result = "";
+		int length = content.length() / 2;
+		for (int i = 0; i < length; i++) {
+			String c = content.substring(i * 2, i * 2 + 2);
+			int a = hexStringToAlgorism(c);
+			char b = (char) a;
+			String d = String.valueOf(b);
+			result += d;
+		}
+		return result;
+	}
+
+	public static byte[] subBytes(byte[] src, int begin, int count) {
+		byte[] bs = new byte[count];
+		for (int i = begin; i < begin + count; i++)
+			bs[i - begin] = src[i];
+		return bs;
+	}
+
+	/**
+	 * 数字字符串转ASCII码字符串
+	 * 
+	 * @param String 字符串
+	 * @return ASCII字符串
+	 */
+	public static String StringToAsciiString(String content) {
+		String result = "";
+		int max = content.length();
+		for (int i = 0; i < max; i++) {
+			char c = content.charAt(i);
+			String b = Integer.toHexString(c);
+			result = result + b;
+		}
+		return result;
+	}
+
+	/**
+	 * 十六进制字符串转十进制
+	 * 
+	 * @param hex 十六进制字符串
+	 * @return 十进制数值
+	 */
+	public static int hexStringToAlgorism(String hex) {
+		hex = hex.toUpperCase();
+		int max = hex.length();
+		int result = 0;
+		for (int i = max; i > 0; i--) {
+			char c = hex.charAt(i - 1);
+			int algorism = 0;
+			if (c >= '0' && c <= '9') {
+				algorism = c - '0';
+			} else {
+				algorism = c - 55;
+			}
+			result += Math.pow(16, max - i) * algorism;
+		}
+		return result;
+	}
+
+	/**
+	 * 十六转二进制
+	 * 
+	 * @param hex 十六进制字符串
+	 * @return 二进制字符串
+	 */
+	public static String hexStringToBinary(String hex) {
+		hex = hex.toUpperCase();
+		String result = "";
+		int max = hex.length();
+		for (int i = 0; i < max; i++) {
+			char c = hex.charAt(i);
+			switch (c) {
+				case '0':
+					result += "0000";
+					break;
+				case '1':
+					result += "0001";
+					break;
+				case '2':
+					result += "0010";
+					break;
+				case '3':
+					result += "0011";
+					break;
+				case '4':
+					result += "0100";
+					break;
+				case '5':
+					result += "0101";
+					break;
+				case '6':
+					result += "0110";
+					break;
+				case '7':
+					result += "0111";
+					break;
+				case '8':
+					result += "1000";
+					break;
+				case '9':
+					result += "1001";
+					break;
+				case 'A':
+					result += "1010";
+					break;
+				case 'B':
+					result += "1011";
+					break;
+				case 'C':
+					result += "1100";
+					break;
+				case 'D':
+					result += "1101";
+					break;
+				case 'E':
+					result += "1110";
+					break;
+				case 'F':
+					result += "1111";
+					break;
+			}
+		}
+		return result;
+	}
+
+	/**
+	 * 将十进制转换为指定长度的十六进制字符串
+	 * 
+	 * @param algorism int 十进制数字
+	 * @param maxLength int 转换后的十六进制字符串长度
+	 * @return String 转换后的十六进制字符串
+	 */
+	public static String algorismToHEXString(int algorism, int maxLength) {
+		String result = "";
+		result = Integer.toHexString(algorism);
+
+		if (result.length() % 2 == 1) {
+			result = "0" + result;
+		}
+		return patchHexString(result.toUpperCase(), maxLength);
+	}
+
+	/**
+	 * 字节数组转为普通字符串(ASCII对应的字符)
+	 * 
+	 * @param bytearray byte[]
+	 * @return String
+	 */
+	public static String bytetoString(byte[] bytearray) {
+		String result = "";
+		char temp;
+
+		int length = bytearray.length;
+		for (int i = 0; i < length; i++) {
+			temp = (char) bytearray[i];
+			result += temp;
+		}
+		return result;
+	}
+
+	/**
+	 * 二进制字符串转十进制
+	 * 
+	 * @param binary 二进制字符串
+	 * @return 十进制数值
+	 */
+	public static int binaryToAlgorism(String binary) {
+		int max = binary.length();
+		int result = 0;
+		for (int i = max; i > 0; i--) {
+			char c = binary.charAt(i - 1);
+			int algorism = c - '0';
+			result += Math.pow(2, max - i) * algorism;
+		}
+		return result;
+	}
+
+	/**
+	 * 十进制转换为十六进制字符串
+	 * 
+	 * @param algorism int 十进制的数字
+	 * @return String 对应的十六进制字符串
+	 */
+	public static String algorismToHEXString(int algorism) {
+		String result = "";
+		result = Integer.toHexString(algorism);
+
+		if (result.length() % 2 == 1) {
+			result = "0" + result;
+
+		}
+		result = result.toUpperCase();
+
+		return result;
+	}
+
+	/**
+	 * HEX字符串前补0,主要用于长度位数不足。
+	 * 
+	 * @param str String 需要补充长度的十六进制字符串
+	 * @param maxLength int 补充后十六进制字符串的长度
+	 * @return 补充结果
+	 */
+	static public String patchHexString(String str, int maxLength) {
+		String temp = "";
+		for (int i = 0; i < maxLength - str.length(); i++) {
+			temp = "0" + temp;
+		}
+		str = (temp + str).substring(0, maxLength);
+		return str;
+	}
+
+	/**
+	 * 将一个字符串转换为int
+	 * 
+	 * @param s String 要转换的字符串
+	 * @param defaultInt int 如果出现异常,默认返回的数字
+	 * @param radix int 要转换的字符串是什么进制的,如16 8 10.
+	 * @return int 转换后的数字
+	 */
+	public static int parseToInt(String s, int defaultInt, int radix) {
+		int i = 0;
+		try {
+			i = Integer.parseInt(s, radix);
+		} catch (NumberFormatException ex) {
+			i = defaultInt;
+		}
+		return i;
+	}
+
+	/**
+	 * 将一个十进制形式的数字字符串转换为int
+	 * 
+	 * @param s String 要转换的字符串
+	 * @param defaultInt int 如果出现异常,默认返回的数字
+	 * @return int 转换后的数字
+	 */
+	public static int parseToInt(String s, int defaultInt) {
+		int i = 0;
+		try {
+			i = Integer.parseInt(s);
+		} catch (NumberFormatException ex) {
+			i = defaultInt;
+		}
+		return i;
+	}
+
+	/**
+	 * 十六进制转字符串
+	 * 
+	 * @param hexString 十六进制字符串
+	 * @param encodeType 编码类型4:Unicode,2:普通编码
+	 * @return 字符串
+	 */
+	public static String hexStringToString(String hexString, int encodeType) {
+		String result = "";
+		int max = hexString.length() / encodeType;
+		for (int i = 0; i < max; i++) {
+			char c = (char) DigitalTrans.hexStringToAlgorism(hexString.substring(i * encodeType, (i + 1) * encodeType));
+			result += c;
+		}
+		return result;
+	}
+
+	/**
+	 * 十六进制串转化为byte数组
+	 * 
+	 * @return the array of byte
+	 */
+	public static final byte[] hex2byte(String hex) throws IllegalArgumentException {
+		if (hex.length() % 2 != 0) {
+			throw new IllegalArgumentException();
+		}
+		char[] arr = hex.toCharArray();
+		byte[] b = new byte[hex.length() / 2];
+		for (int i = 0, j = 0, l = hex.length(); i < l; i++, j++) {
+			String swap = "" + arr[i++] + arr[i];
+			int byteint = Integer.parseInt(swap, 16) & 0xFF;
+			b[j] = new Integer(byteint).byteValue();
+		}
+		return b;
+	}
+
+	/**
+	 * 字节数组转换为十六进制字符串
+	 * 
+	 * @param b byte[] 需要转换的字节数组
+	 * @return String 十六进制字符串
+	 */
+	public static final String byte2hex(byte b[]) {
+		if (b == null) {
+			throw new IllegalArgumentException("Argument b ( byte array ) is null! ");
+		}
+		String hs = "";
+		String stmp = "";
+		for (int n = 0; n < b.length; n++) {
+			stmp = Integer.toHexString(b[n] & 0xff);
+			if (stmp.length() == 1) {
+				hs = hs + "0" + stmp;
+			} else {
+				hs = hs + stmp;
+			}
+		}
+		return hs.toUpperCase();
+	}
+
+	/**
+	 * 将整数转换成二进制字节(HEX),高位在前
+	 * 
+	 * @param value
+	 * @param byteCount
+	 * @return
+	 */
+	public static byte[] getHexByte(long value, int byteCount) {
+		byte[] ba = new byte[byteCount];
+		for (int i = 0; i < byteCount; i++) {
+			ba[byteCount - i - 1] = (byte) ((value >> i * 8) & 0xff);
+		}
+		return ba;
+	}
+
+	/**
+	 * 将整数转换成二进制字节(HEX),高位在后
+	 * 
+	 * @param value
+	 * @param byteCount
+	 * @return
+	 */
+	public static byte[] getReverseHexByte(long value, int byteCount) {
+		byte[] ba = new byte[byteCount];
+		for (int i = 0; i < byteCount; i++) {
+			ba[i] = (byte) ((value >> i * 8) & 0xff);
+		}
+		return ba;
+	}
+
+	/**
+	 * 将二进制字节(HEX)转换成整数,高位在后 解包
+	 * 
+	 * @param value
+	 * @param byteCount
+	 * @return
+	 */
+	public static int getReverseByte(byte[] values) {
+		int value = 0;
+		for (int i = 0; i < values.length; i++) {
+			value += ((values[i] & 0xff) << i * 8);
+		}
+		return value;
+	}
+
+	/**
+	 * @author 刘永海
+	 * @功能: BCD码转为10进制串(阿拉伯数据)
+	 * @参数: BCD码
+	 * @结果: 10进制串
+	 */
+	public static String bcd2Str(byte[] bytes) {
+		StringBuffer temp = new StringBuffer(bytes.length * 2);
+		for (int i = 0; i < bytes.length; i++) {
+			temp.append((byte) ((bytes[i] & 0xf0) >>> 4));
+			temp.append((byte) (bytes[i] & 0x0f));
+		}
+		// return temp.toString().substring(0, 1).equalsIgnoreCase("0") ?
+		// temp.toString().substring(1) : temp.toString();
+		return temp.toString();
+	}
+
+	/**
+	 * @author 刘永海
+	 * @功能: 10进制串转为BCD码
+	 * @参数: 10进制串
+	 * @结果: BCD码
+	 */
+	public static byte[] str2Bcd(String asc) {
+		int len = asc.length();
+		int mod = len % 2;
+		if (mod != 0) {
+			asc = "0" + asc;
+			len = asc.length();
+		}
+		byte abt[] = new byte[len];
+		if (len >= 2) {
+			len = len / 2;
+		}
+		byte bbt[] = new byte[len];
+		abt = asc.getBytes();
+		int j, k;
+		for (int p = 0; p < asc.length() / 2; p++) {
+			if ((abt[2 * p] >= '0') && (abt[2 * p] <= '9')) {
+				j = abt[2 * p] - '0';
+			} else if ((abt[2 * p] >= 'a') && (abt[2 * p] <= 'z')) {
+				j = abt[2 * p] - 'a' + 0x0a;
+			} else {
+				j = abt[2 * p] - 'A' + 0x0a;
+			}
+			if ((abt[2 * p + 1] >= '0') && (abt[2 * p + 1] <= '9')) {
+				k = abt[2 * p + 1] - '0';
+			} else if ((abt[2 * p + 1] >= 'a') && (abt[2 * p + 1] <= 'z')) {
+				k = abt[2 * p + 1] - 'a' + 0x0a;
+			} else {
+				k = abt[2 * p + 1] - 'A' + 0x0a;
+			}
+			int a = (j << 4) + k;
+			byte b = (byte) a;
+			bbt[p] = b;
+		}
+		return bbt;
+	}
+
+	public static void main(String[] args) {
+		byte[] b = new byte[] { 120, 5, 0, 0 };
+
+		System.out.println(getReverseByte(b));
+	}
+}

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

@@ -230,4 +230,43 @@
         and least((t.inqty - t.cancelqty - t.deliveryqty - t.curpresaleqty),
         (tp.buycurpositionqty - tp.buyfrozenqty - tp.buyotherfrozenqty)) > 0
     </select>
+
+    <select id="querypresaleresult" resultType="com.muchinfo.mtp3pojos.vo.presale.ForwardPresaleResult">
+        select t.tradeid "tradeid",
+        ua1.userid || '/' || ua1.accountname "buyname",
+        ua2.userid || '/' || ua2.accountname "sellname",
+        g1.goodscode || '/' || g1.goodsname "firstgoods", g2.goodscode || '/' || g2.goodsname "secondgoods",
+        to_char(pg.endtime,'yyyy-MM-dd') "endtime",
+        t.tradeqty "tradeqty", t.openprice "openprice", t.tradeamount "tradeamount",
+        to_char(t.createtime, 'yyyy-MM-dd hh24:mi:ss') "tradetime",
+        t.transferdepositratio * 100 "transferdepositratio", t.transferdeposit "transferdeposit",
+        t.depositremain "depositremain", t.paystatus "paystatus"
+        from CPTrade_PresaleResult t
+        inner join CPTrade_PresaleGoodsEx pg on t.goodsid = pg.goodsid
+        inner join goods g1 on pg.goodsid = g1.goodsid
+        inner join goods g2 on pg.relatedgoodsid = g2.goodsid
+        inner join useraccount ua1 on t.buyuserid = ua1.userid
+        inner join useraccount ua2 on t.selluserid = ua2.userid
+        inner join market mt on g1.marketid = mt.marketid
+        where t.buyuserid != t.selluserid
+        <if test="vo.trademodes != null and vo.trademodes != ''">
+            and mt.trademode in (${vo.trademodes})
+        </if>
+        <if test="vo.username != null and vo.username != ''">
+            and (ua1.accountname like '%'||#{vo.username}||'%' or ua1.userid like '%'||#{vo.username}||'%')
+        </if>
+        <if test="vo.goodsname1 != null and vo.goodsname1 != ''">
+            and (g1.goodscode like '%'||#{vo.goodsname1}||'%' or g1.goodsname like '%'||#{vo.goodsname1}||'%')
+        </if>
+        <if test="vo.goodsname2 != null and vo.goodsname2 != ''">
+            and (g2.goodscode like '%'||#{vo.goodsname2}||'%' or g2.goodsname like '%'||#{vo.goodsname2}||'%')
+        </if>
+        <if test="vo.paystatus != null and vo.paystatus != ''">
+            and t.paystatus = #{vo.paystatus}
+        </if>
+        <if test="vo.areauserid != null">
+            and t.selluserid = #{vo.areauserid}
+        </if>
+        order by t.createtime desc, g1.goodscode
+    </select>
 </mapper>

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

@@ -63,6 +63,8 @@ message_error_code_system031=The custodian bank number already exists
 message_error_code_system032=The information related to the withdrawal account for handling fees has not been configured. Please go to the bank configuration page to edit the relevant information!
 message_error_code_system033=The cash withdrawal amount must be greater than 0!
 message_error_code_system034=The bank is not in a successful check-in status and does not support withdrawal of transaction fees!
+message_error_code_system035=Non preliminary review status cannot be revoked, please refresh the page
+message_error_code_system036=The decimal place of the price is% s. Please enter a multiple of% s
 login_error_code_001=Account or password error
 login_error_code_002=Unauthorized access is not allowed! Please contact the administrator to handle it!
 login_error_code_003=Login locked!

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

@@ -63,6 +63,8 @@ message_error_code_system031=\u0E2B\u0E21\u0E32\u0E22\u0E40\u0E25\u0E02\u0E18\u0
 message_error_code_system032=\u0E04\u0E48\u0E32\u0E18\u0E23\u0E23\u0E21\u0E40\u0E19\u0E35\u0E22\u0E21\u0E01\u0E32\u0E23\u0E16\u0E2D\u0E19\u0E40\u0E07\u0E34\u0E19 \u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E02\u0E49\u0E2D\u0E07\u0E01\u0E31\u0E1A\u0E1A\u0E31\u0E0D\u0E0A\u0E35\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E04\u0E48\u0E32\u0E42\u0E1B\u0E23\u0E14\u0E44\u0E1B\u0E17\u0E35\u0E48\u0E2B\u0E19\u0E49\u0E32\u0E01\u0E32\u0E23\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E04\u0E48\u0E32\u0E18\u0E19\u0E32\u0E04\u0E32\u0E23\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E41\u0E01\u0E49\u0E44\u0E02\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E02\u0E49\u0E2D\u0E07!
 message_error_code_system033=\u0E16\u0E2D\u0E19\u0E40\u0E07\u0E34\u0E19\u0E2A\u0E14\u0E44\u0E14\u0E49\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32 0!
 message_error_code_system034=\u0E18\u0E19\u0E32\u0E04\u0E32\u0E23\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A\u0E2A\u0E16\u0E32\u0E19\u0E30\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08\u0E04\u0E48\u0E32\u0E18\u0E23\u0E23\u0E21\u0E40\u0E19\u0E35\u0E22\u0E21\u0E01\u0E32\u0E23\u0E16\u0E2D\u0E19\u0E40\u0E07\u0E34\u0E19\u0E44\u0E21\u0E48\u0E23\u0E2D\u0E07\u0E23\u0E31\u0E1A!
+message_error_code_system035=\u0E2A\u0E16\u0E32\u0E19\u0E30\u0E17\u0E35\u0E48\u0E44\u0E21\u0E48\u0E23\u0E2D\u0E01\u0E32\u0E23\u0E1E\u0E34\u0E08\u0E32\u0E23\u0E13\u0E32\u0E04\u0E14\u0E35\u0E44\u0E21\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E1E\u0E34\u0E01\u0E16\u0E2D\u0E19\u0E44\u0E14\u0E49\u0E42\u0E1B\u0E23\u0E14\u0E23\u0E35\u0E40\u0E1F\u0E23\u0E0A\u0E2B\u0E19\u0E49\u0E32
+message_error_code_system036=\u0E23\u0E32\u0E04\u0E32\u0E17\u0E28\u0E19\u0E34\u0E22\u0E21\u0E04\u0E37\u0E2D%s \u0E42\u0E1B\u0E23\u0E14\u0E1B\u0E49\u0E2D\u0E19\u0E08\u0E33\u0E19\u0E27\u0E19\u0E40\u0E17\u0E48\u0E32\u0E02\u0E2D\u0E07%s
 login_error_code_001=\u0E1A\u0E31\u0E0D\u0E0A\u0E35\u0E2B\u0E23\u0E37\u0E2D\u0E23\u0E2B\u0E31\u0E2A\u0E1C\u0E48\u0E32\u0E19\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07
 login_error_code_002=\u0E44\u0E21\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E02\u0E49\u0E32\u0E16\u0E36\u0E07\u0E44\u0E14\u0E49\u0E42\u0E14\u0E22\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A\u0E2D\u0E19\u0E38\u0E0D\u0E32\u0E15! \u0E01\u0E23\u0E38\u0E13\u0E32\u0E15\u0E34\u0E14\u0E15\u0E48\u0E2D\u0E1C\u0E39\u0E49\u0E14\u0E39\u0E41\u0E25\u0E23\u0E30\u0E1A\u0E1A\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23!
 login_error_code_003=\u0E25\u0E47\u0E2D\u0E01\u0E2D\u0E34\u0E19!

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

@@ -63,6 +63,8 @@ message_error_code_system031=S\u1ED1 ng\u00E2n h\u00E0ng k\u00FD qu\u1EF9 \u0111
 message_error_code_system032=Th\u00F4ng tin li\u00EAn quan \u0111\u1EBFn t\u00E0i kho\u1EA3n r\u00FAt ti\u1EC1n th\u1EE7 t\u1EE5c ch\u01B0a \u0111\u01B0\u1EE3c c\u1EA5u h\u00ECnh, xin vui l\u00F2ng \u0111\u1EBFn trang c\u1EA5u h\u00ECnh ng\u00E2n h\u00E0ng \u0111\u1EC3 ch\u1EC9nh s\u1EEDa th\u00F4ng tin li\u00EAn quan!
 message_error_code_system033=S\u1ED1 ti\u1EC1n m\u1EB7t ph\u1EA3i l\u1EDBn h\u01A1n 0!
 message_error_code_system034=Ng\u00E2n h\u00E0ng kh\u00F4ng ph\u1EA3i k\u00FD \u0111\u1EBFn tr\u1EA1ng th\u00E1i th\u00E0nh c\u00F4ng, kh\u00F4ng h\u1ED7 tr\u1EE3 r\u00FAt ti\u1EC1n th\u1EE7 t\u1EE5c!
+message_error_code_system035=Kh\u00F4ng th\u1EC3 h\u1EE7y b\u1ECF tr\u1EA1ng th\u00E1i kh\u00F4ng ch\u1EDD x\u00E9t x\u1EED, vui l\u00F2ng l\u00E0m m\u1EDBi l\u1EA1i trang
+message_error_code_system036=Gi\u00E1 th\u1EADp ph\u00E2n%s, h\u00E3y nh\u1EADp b\u1ED9i s\u1ED1 c\u1EE7a%s
 login_error_code_001=L\u1ED7i t\u00E0i kho\u1EA3n ho\u1EB7c m\u1EADt kh\u1EA9u
 login_error_code_002=Kh\u00F4ng \u0111\u01B0\u1EE3c ph\u00E9p, kh\u00F4ng th\u1EC3 truy c\u1EADp! Vui l\u00F2ng li\u00EAn h\u1EC7 v\u1EDBi qu\u1EA3n tr\u1ECB vi\u00EAn \u0111\u1EC3 x\u1EED l\u00FD!
 login_error_code_003=Kh\u00F3a \u0111\u0103ng nh\u1EADp!

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

@@ -63,6 +63,8 @@ message_error_code_system031=\u6258\u7BA1\u94F6\u884C\u7F16\u53F7\u5DF2\u5B58\u5
 message_error_code_system032=\u624B\u7EED\u8D39\u63D0\u73B0\u8D26\u6237\u76F8\u5173\u4FE1\u606F\u672A\u914D\u7F6E\uFF0C\u8BF7\u524D\u5F80\u94F6\u884C\u914D\u7F6E\u9875\u9762\u7F16\u8F91\u76F8\u5173\u4FE1\u606F\uFF01
 message_error_code_system033=\u63D0\u73B0\u91D1\u989D\u987B\u5927\u4E8E0\uFF01
 message_error_code_system034=\u94F6\u884C\u4E0D\u662F\u7B7E\u5230\u6210\u529F\u72B6\u6001\uFF0C\u4E0D\u652F\u6301\u624B\u7EED\u8D39\u63D0\u73B0\uFF01
+message_error_code_system035=\u975E\u5F85\u521D\u5BA1\u72B6\u6001\u65E0\u6CD5\u64A4\u9500,\u8BF7\u5237\u65B0\u9875\u9762
+message_error_code_system036=\u4EF7\u683C\u5C0F\u6570\u4F4D\u4E3A%s, \u8BF7\u8F93\u5165%s\u7684\u500D\u6570
 login_error_code_001=\u8D26\u6237\u6216\u5BC6\u7801\u9519\u8BEF
 login_error_code_002=\u672A\u7ECF\u5141\u8BB8\uFF0C\u4E0D\u53EF\u8BBF\u95EE\uFF01\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u5904\u7406\uFF01
 login_error_code_003=\u767B\u5F55\u9501\u5B9A\uFF01

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

@@ -63,6 +63,8 @@ message_error_code_system031=\u8A17\u7BA1\u9280\u884C\u7DE8\u865F\u5DF2\u5B58\u5
 message_error_code_system032=\u624B\u7E8C\u8CBB\u63D0\u73FE\u5E33\u6236\u76F8\u95DC\u8CC7\u8A0A\u672A\u914D\u5BD8\uFF0C\u8ACB\u524D\u5F80\u9280\u884C\u914D\u5BD8\u9801\u9762\u7DE8\u8F2F\u76F8\u95DC\u8CC7\u8A0A\uFF01
 message_error_code_system033=\u63D0\u73FE\u91D1\u984D\u9808\u5927\u65BC0\uFF01
 message_error_code_system034=\u9280\u884C\u4E0D\u662F\u7C3D\u5230\u6210\u529F\u72C0\u614B\uFF0C\u4E0D\u652F\u6301\u624B\u7E8C\u8CBB\u63D0\u73FE\uFF01
+message_error_code_system035=\u975E\u5F85\u521D\u5BE9\u72C0\u614B\u7121\u6CD5\u64A4\u92B7\uFF0C\u8ACB\u5237\u65B0\u9801\u9762
+message_error_code_system036=\u50F9\u683C\u5C0F\u6578\u4F4D\u70BA%s\uFF0C\u8ACB\u8F38\u5165%s\u7684\u500D\u6578
 login_error_code_001=\u5E33\u6236\u6216\u5BC6\u78BC\u932F\u8AA4
 login_error_code_002=\u672A\u7D93\u5141\u8A31\uFF0C\u4E0D\u53EF\u8A2A\u554F\uFF01 \u8ACB\u806F\u7CFB\u7BA1\u7406\u54E1\u8655\u7406\uFF01
 login_error_code_003=\u767B\u5165\u9396\u5B9A\uFF01

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

@@ -63,6 +63,8 @@ message_error_code_system031=\u8A17\u7BA1\u9280\u884C\u7DE8\u865F\u5DF2\u5B58\u5
 message_error_code_system032=\u624B\u7E8C\u8CBB\u63D0\u73FE\u5E33\u6236\u76F8\u95DC\u8CC7\u8A0A\u672A\u914D\u5BD8\uFF0C\u8ACB\u524D\u5F80\u9280\u884C\u914D\u5BD8\u9801\u9762\u7DE8\u8F2F\u76F8\u95DC\u8CC7\u8A0A\uFF01
 message_error_code_system033=\u63D0\u73FE\u91D1\u984D\u9808\u5927\u65BC0\uFF01
 message_error_code_system034=\u9280\u884C\u4E0D\u662F\u7C3D\u5230\u6210\u529F\u72C0\u614B\uFF0C\u4E0D\u652F\u6301\u624B\u7E8C\u8CBB\u63D0\u73FE\uFF01
+message_error_code_system035=\u975E\u5F85\u521D\u5BE9\u72C0\u614B\u7121\u6CD5\u64A4\u92B7\uFF0C\u8ACB\u5237\u65B0\u9801\u9762
+message_error_code_system036=\u50F9\u683C\u5C0F\u6578\u4F4D\u70BA%s\uFF0C\u8ACB\u8F38\u5165%s\u7684\u500D\u6578
 login_error_code_001=\u5E33\u6236\u6216\u5BC6\u78BC\u932F\u8AA4
 login_error_code_002=\u672A\u7D93\u5141\u8A31\uFF0C\u4E0D\u53EF\u8A2A\u554F\uFF01 \u8ACB\u806F\u7CFB\u7BA1\u7406\u54E1\u8655\u7406\uFF01
 login_error_code_003=\u767B\u5165\u9396\u5B9A\uFF01

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

@@ -71,6 +71,8 @@ public enum MessageType {
     MESSAGE_ERROR_CODE_SYSTEM032("message_error_code_system032", "手续费提现账户相关信息未配置,请前往银行配置页面编辑相关信息!"),
     MESSAGE_ERROR_CODE_SYSTEM033("message_error_code_system033", "提现金额须大于0!"),
     MESSAGE_ERROR_CODE_SYSTEM034("message_error_code_system034", "银行不是签到成功状态,不支持手续费提现!"),
+    MESSAGE_ERROR_CODE_SYSTEM035("message_error_code_system035", "非待初审状态无法撤销,请刷新页面"),
+    MESSAGE_ERROR_CODE_SYSTEM036("message_error_code_system036", "价格小数位为%s, 请输入%s的倍数"),
 
     LOGIN_ERROR_CODE_001("login_error_code_001", "账户或密码错误"),
     LOGIN_ERROR_CODE_002("login_error_code_002", "未经允许,不可访问!请联系管理员处理"),

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

@@ -688,6 +688,7 @@ public class SysEnums {
         DJZR(49, "定金转让"),
         DDGP(50, "订单挂牌"),
         DDZS(52, "订单做市"),
+        DJSC(53, "点价商城"),
 
         GZ62(62, "集采交易"),
         GZ63(63, "预售交易"),

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

@@ -33,4 +33,6 @@ public interface ICptradePositionapplyMapper extends BaseMapper<CptradePositiona
     ForwardAddOtherInit queryDRelation(@Param("goodid") Long goodid);
 
     List<ForwardCancelApplyInit> cancelApplyAddInit(@Param("accountid") Long accountid);
+
+    IPage<ForwardPresaleResult> querypresaleresult(IPage<ForwardPresaleResult> page,@Param("vo") ForwardPresaleParam param);
 }

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

@@ -0,0 +1,16 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.CptradePresaleapply;
+
+/**
+ * <p>
+ * 产能预售申请表 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2025-06-13
+ */
+public interface ICptradePresaleapplyMapper extends BaseMapper<CptradePresaleapply> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.CptradeUsergoodsdata;
+
+/**
+ * <p>
+ * 用户合约数据表 - 导历史 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2025-06-17
+ */
+public interface ICptradeUsergoodsdataMapper extends BaseMapper<CptradeUsergoodsdata> {
+
+}

+ 197 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/CptradePresaleapply.java

@@ -0,0 +1,197 @@
+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 2025-06-13
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("CPTRADE_PRESALEAPPLY")
+@ApiModel(value="CptradePresaleapply对象", description="产能预售申请表")
+public class CptradePresaleapply extends Model<CptradePresaleapply> {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "申请ID(181+Unix秒时间戳(10位)+xxxxxx)")
+    @TableId(value = "APPLYID")
+    private Long applyid;
+
+    @ApiModelProperty(value = "申请人ID")
+    @TableField("USERID")
+    private Long userid;
+
+    @ApiModelProperty(value = "申请人账户ID")
+    @TableField("ACCOUNTID")
+    private Long accountid;
+
+    @ApiModelProperty(value = "商品代码 - 系统自动生成  [#B(2位) + ApplyID十六进制(6位) ]")
+    @TableField("GOODSCODE")
+    private String goodscode;
+
+    @ApiModelProperty(value = "商品名称")
+    @TableField("GOODSNAME")
+    private String goodsname;
+
+    @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:初审拒绝 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 = "预售市场ID")
+    @TableField("MARKETID")
+    private Long marketid;
+
+    @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 = "详情[大宗式竞拍41]")
+    @TableField("GOODSDETAIL")
+    private String goodsdetail;
+
+    @ApiModelProperty(value = "预售模式 - 1:一口价(40) 2:大宗式竞拍(41) 3:预售挂牌(71) 4:定金预售(大宗)48 5:定金预售(中签)51 枚举'presalemode'")
+    @TableField("PRESALEMODE")
+    private Integer presalemode;
+
+    @ApiModelProperty(value = "参考价单价[一口价40定金预售(中签)51]")
+    @TableField("REFPRICE")
+    private BigDecimal refprice;
+
+    @ApiModelProperty(value = "起拍价[大宗式竞拍41,48]")
+    @TableField("STARTPRICE")
+    private BigDecimal startprice;
+
+    @ApiModelProperty(value = "底价[大宗式竞拍41,48]")
+    @TableField("FLOORPRICE")
+    private BigDecimal floorprice;
+
+    @ApiModelProperty(value = "所属商品组ID")
+    @TableField("GOODSGROUPID")
+    private Long goodsgroupid;
+
+    @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 = "详情图片(逗号分隔)(宽: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;
+
+    @TableField(select = false)
+    private Date Listingdate;
+    @TableField(select = false)
+    private Date Lasttradedate;
+
+    @Override
+    public Serializable pkVal() {
+        return this.applyid;
+    }
+
+}

+ 92 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/CptradeUsergoodsdata.java

@@ -0,0 +1,92 @@
+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 2025-06-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("CPTRADE_USERGOODSDATA")
+@ApiModel(value="CptradeUsergoodsdata对象", description="用户合约数据表 - 导历史")
+public class CptradeUsergoodsdata extends Model<CptradeUsergoodsdata> {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "账户ID")
+    @TableId(value = "ACCOUNTID")
+    private Long accountid;
+
+    @ApiModelProperty(value = "商品ID")
+    @TableField("GOODSID")
+    private Long goodsid;
+
+    @ApiModelProperty(value = "现货商品ID")
+    @TableField("WRSTANDARDID")
+    private Long wrstandardid;
+
+    @ApiModelProperty(value = "用户ID")
+    @TableField("USERID")
+    private Long userid;
+
+    @ApiModelProperty(value = "转入量")
+    @TableField("INQTY")
+    private Long inqty;
+
+    @ApiModelProperty(value = "注销量")
+    @TableField("CANCELQTY")
+    private Long cancelqty;
+
+    @ApiModelProperty(value = "交割量")
+    @TableField("DELIVERYQTY")
+    private Long deliveryqty;
+
+    @ApiModelProperty(value = "当前预售量")
+    @TableField("CURPRESALEQTY")
+    private Long curpresaleqty;
+
+    @ApiModelProperty(value = "已预售量")
+    @TableField("PRESALEDQTY")
+    private Long presaledqty;
+
+    @ApiModelProperty(value = "已预售总金额")
+    @TableField("PRESALEDAMOUNT")
+    private BigDecimal presaledamount;
+
+    @ApiModelProperty(value = "冻结金额")
+    @TableField("FREEZEAMOUNT")
+    private BigDecimal freezeamount;
+
+    @ApiModelProperty(value = "市场ID")
+    @TableField("MARKETID")
+    private Long marketid;
+
+    @ApiModelProperty(value = "是否有现货冻结 - 0:否 1:有")
+    @TableField("HASSPOTFREEZE")
+    private Integer hasspotfreeze;
+
+
+    @Override
+    public Serializable pkVal() {
+        return this.accountid;
+    }
+
+}

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

@@ -202,6 +202,9 @@ public class Useraccount extends Model<Useraccount> implements Serializable{
     @TableField("SJACCOUNTNO")
     private String sjaccountno;
 
+    @ApiModelProperty(value = "Line客服账号(经纪会员)")
+    @TableField("LINECSACCOUNT")
+    private String linecsaccount;
 
     @Override
     public Serializable pkVal() {

+ 38 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/presale/ForwardPresaleParam.java

@@ -0,0 +1,38 @@
+package com.muchinfo.mtp3pojos.vo.presale;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Builder
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(value = "ForwardPresaleParam对象", description = "预售结果")
+public class ForwardPresaleParam {
+
+    @ApiModelProperty(value = "认购人")
+    private String username;
+
+    @ApiModelProperty(value = "预售商品")
+    private String goodsname1;
+
+    @ApiModelProperty(value = "转让商品")
+    private String goodsname2;
+
+    @ApiModelProperty(value = "支付状态")
+    private String paystatus;
+
+    @ApiModelProperty(value = "页码")
+    private Integer pageNum;
+
+    @ApiModelProperty(value = "页大小")
+    private Integer pageSize;
+
+    private Long areauserid;
+
+    private String Trademodes;
+}

+ 58 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/presale/ForwardPresaleResult.java

@@ -0,0 +1,58 @@
+package com.muchinfo.mtp3pojos.vo.presale;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Builder
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(value = "ForwardPresaleResult对象", description = "预售结果")
+public class ForwardPresaleResult {
+
+    @ApiModelProperty(value = "认购人")
+    private String buyname;
+
+    @ApiModelProperty(value = "预售方")
+    private String sellname;
+
+    @ApiModelProperty(value = "预售商品")
+    private String firstgoods;
+
+    @ApiModelProperty(value = "转让商品")
+    private String secondgoods;
+
+    @ApiModelProperty(value = "结束日期")
+    private String endtime;
+
+    @ApiModelProperty(value = "数量")
+    private Integer tradeqty;
+
+    @ApiModelProperty(value = "价格")
+    private BigDecimal openprice;
+
+    @ApiModelProperty(value = "金额")
+    private BigDecimal tradeamount;
+
+    @ApiModelProperty(value = "成交时间")
+    private Date tradetime;
+
+    @ApiModelProperty(value = "转让定金比例(%)")
+    private BigDecimal transferdepositratio;
+
+    @ApiModelProperty(value = "转让定金")
+    private BigDecimal transferdeposit;
+
+    @ApiModelProperty(value = "未付定金")
+    private BigDecimal depositremain;
+
+    @ApiModelProperty(value = "支付状态")
+    private Integer paystatus;
+}

+ 1 - 1
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/presale/PresaleApplyParam.java

@@ -29,7 +29,7 @@ public class PresaleApplyParam {
     @ApiModelProperty(value = "申请日期")
     private String applytime;
 
-    @ApiModelProperty(value = "状态")
+    @ApiModelProperty(value = "状态  初审1 复审2")
     private String applystatus;
 
     @ApiModelProperty(value = "页码")