|
|
@@ -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"));
|
|
|
+ }
|
|
|
}
|