xie.kaifeng 2 месяцев назад
Родитель
Сommit
cba4b4b2b0
37 измененных файлов с 1472 добавлено и 34 удалено
  1. 53 2
      mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/GoodsSetUpController.java
  2. 17 1
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IGoodsSetUpService.java
  3. 392 20
      mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/GoodsSetUpServiceImpl.java
  4. 118 0
      mtp3-century/src/main/resources/mapper/GoodsMapper.xml
  5. 9 0
      mtp3-century/src/main/resources/mapper/WskhUserinfoMapper.xml
  6. 2 0
      mtp3-century/src/main/resources/message_en.properties
  7. 2 0
      mtp3-century/src/main/resources/message_th.properties
  8. 2 0
      mtp3-century/src/main/resources/message_vi.properties
  9. 2 0
      mtp3-century/src/main/resources/message_zh-cn.properties
  10. 2 0
      mtp3-century/src/main/resources/message_zh-hk.properties
  11. 2 0
      mtp3-century/src/main/resources/message_zh-tw.properties
  12. 2 0
      mtp3-common/src/main/java/com/muchinfo/mtp3common/enumtype/MessageType.java
  13. 16 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IDeliveryrelationdetailMapper.java
  14. 14 8
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IGoodsMapper.java
  15. 16 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IGoodscloseplanMapper.java
  16. 16 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IGoodsmarginconfigMapper.java
  17. 16 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IGoodstradefeeMapper.java
  18. 16 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IGoodstraderuleMapper.java
  19. 16 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IHsbyGoodsexMapper.java
  20. 2 0
      mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IWskhUserinfoMapper.java
  21. 55 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Deliveryrelationdetail.java
  22. 2 2
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Dgfactoryitem.java
  23. 71 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Goodscloseplan.java
  24. 79 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Goodsmarginconfig.java
  25. 77 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Goodstradefee.java
  26. 66 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Goodstraderule.java
  27. 132 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/HsbyGoodsex.java
  28. 19 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/tradingmarket/goodssetup/DayRestDto.java
  29. 23 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/tradingmarket/goodssetup/DelistGoodsInfoParam.java
  30. 22 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/tradingmarket/goodssetup/DelistGoodsInfoResult.java
  31. 51 1
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/tradingmarket/goodssetup/GoodsQueryDetailResult.java
  32. 25 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/tradingmarket/goodssetup/GoodsSearchQueryParam.java
  33. 41 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/tradingmarket/goodssetup/GoodsSearchQueryResult.java
  34. 21 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/tradingmarket/goodssetup/GoodsUspendedAddQueryParam.java
  35. 25 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/tradingmarket/goodssetup/GoodsUspendedQueryParam.java
  36. 17 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/tradingmarket/goodssetup/GoodsUspendedQueryResult.java
  37. 31 0
      mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/tradingmarket/goodssetup/WarehouseInfoParam.java

+ 53 - 2
mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/GoodsSetUpController.java

@@ -3,6 +3,8 @@ package com.muchinfo.mtp3century.controller;
 import com.muchinfo.mtp3century.service.IGoodsSetUpService;
 import com.muchinfo.mtp3century.utils.AjaxResult;
 import com.muchinfo.mtp3common.vo.PageResult;
+import com.muchinfo.mtp3pojos.entity.Goods;
+import com.muchinfo.mtp3pojos.entity.Goodsgroup;
 import com.muchinfo.mtp3pojos.entity.Market;
 import com.muchinfo.mtp3pojos.vo.tradingmarket.TradingMarketQuoterFirstAddParam;
 import com.muchinfo.mtp3pojos.vo.tradingmarket.goodssetup.*;
@@ -28,8 +30,8 @@ public class GoodsSetUpController {
     @RequestMapping(method = RequestMethod.POST, value = "/listAllInit")
     @ApiOperation("交易市场管理-->商品管理 --> 初始化市场下拉列表")
     @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
-    public AjaxResult<Market> listAllInit(HttpServletRequest request, String orgztypes) {
-        return iGoodsSetUpService.listAllInit(request, orgztypes);
+    public AjaxResult<Market> listAllInit(HttpServletRequest request, String orgztypes, String filterTrademodeList) {
+        return iGoodsSetUpService.listAllInit(request, orgztypes, filterTrademodeList);
     }
 
     @ApiOperation("交易市场管理-->商品管理--> 商品组设置--> 获取列表")
@@ -73,4 +75,53 @@ public class GoodsSetUpController {
     public AjaxResult<GoodsQueryDetailResult> goodsview(Long goodsid, HttpServletRequest request) {
         return iGoodsSetUpService.goodsview(goodsid, request);
     }
+
+    @ApiOperation("交易市场管理-->商品管理--> 商品停牌管理--> 获取列表(初始化页面)")
+    @RequestMapping(method = RequestMethod.GET, value = "/goodsuspended")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult<GoodsUspendedQueryResult> goodsuspended(GoodsUspendedQueryParam param, HttpServletRequest request) {
+        return iGoodsSetUpService.goodsuspended(param, request);
+    }
+
+    @ApiOperation("交易市场管理-->商品管理--> 商品停牌管理--> 获取列表(确定某日日期)")
+    @RequestMapping(method = RequestMethod.GET, value = "/sreach")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    public PageResult<GoodsSearchQueryResult> sreach(GoodsSearchQueryParam param, HttpServletRequest request) {
+        return iGoodsSetUpService.sreach(param, request);
+    }
+
+    @ApiOperation("交易市场管理-->商品管理--> 商品停牌管理--> 新增获取商品组")
+    @RequestMapping(method = RequestMethod.GET, value = "/goodsGroupList")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult<Goodsgroup> goodsGroupList(Long goodsgroupstatus, Long marketid, HttpServletRequest request) {
+        return iGoodsSetUpService.goodsGroupList(goodsgroupstatus, marketid, request);
+    }
+
+    @ApiOperation("交易市场管理-->商品管理--> 商品停牌管理--> 新增获取商品")
+    @RequestMapping(method = RequestMethod.GET, value = "/queryByGoodsgroupId")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult<Goods> queryByGoodsgroupId(Long goodsgroupid, Integer goodsstatus, Long marketid, HttpServletRequest request) {
+        return iGoodsSetUpService.queryByGoodsgroupId(goodsgroupid, goodsstatus,marketid, request);
+    }
+
+    @RequestMapping(method = RequestMethod.POST, value = "/goodsuspendedadd")
+    @ApiOperation("交易市场管理-->商品管理 --> 商品组设置 --> 新增、修改")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult goodsuspendedadd(@RequestBody GoodsUspendedAddQueryParam param, HttpServletRequest request) {
+        return iGoodsSetUpService.goodsuspendedadd(param, request);
+    }
+
+    @RequestMapping(method = RequestMethod.GET, value = "/goodsuspendeddel")
+    @ApiOperation("交易市场管理-->商品管理 --> 商品组设置 --> 删除")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    public AjaxResult goodsuspendeddel(Long autoid, HttpServletRequest request) {
+        return iGoodsSetUpService.goodsuspendeddel(autoid, request);
+    }
+
+    @ApiOperation("交易市场管理-->商品管理--> 商品退市管理--> 获取列表")
+    @RequestMapping(method = RequestMethod.GET, value = "/queryDelistGoods")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    public PageResult<DelistGoodsInfoResult> queryDelistGoodsInfo(DelistGoodsInfoParam param, HttpServletRequest request) {
+        return iGoodsSetUpService.queryDelistGoodsInfo(param, request);
+    }
 }

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

@@ -2,6 +2,8 @@ package com.muchinfo.mtp3century.service;
 
 import com.muchinfo.mtp3century.utils.AjaxResult;
 import com.muchinfo.mtp3common.vo.PageResult;
+import com.muchinfo.mtp3pojos.entity.Goods;
+import com.muchinfo.mtp3pojos.entity.Goodsgroup;
 import com.muchinfo.mtp3pojos.entity.Market;
 import com.muchinfo.mtp3pojos.vo.tradingmarket.goodssetup.*;
 
@@ -17,9 +19,23 @@ public interface IGoodsSetUpService {
 
     AjaxResult groupsave(GoodsGroupSetDetailResult param, HttpServletRequest request);
 
-    AjaxResult<Market> listAllInit(HttpServletRequest request, String orgztypes);
+    AjaxResult<Market> listAllInit(HttpServletRequest request, String orgztypes, String filterTrademodeList);
 
     PageResult<GoodsQueryResult> goodsQuery(GoodsQueryParam param, HttpServletRequest request);
 
     AjaxResult<GoodsQueryDetailResult> goodsview(Long goodsid, HttpServletRequest request);
+
+    AjaxResult<GoodsUspendedQueryResult> goodsuspended(GoodsUspendedQueryParam param, HttpServletRequest request);
+
+    PageResult<GoodsSearchQueryResult> sreach(GoodsSearchQueryParam param, HttpServletRequest request);
+
+    AjaxResult<Goodsgroup> goodsGroupList(Long goodsgroupstatus, Long marketid, HttpServletRequest request);
+
+    AjaxResult<Goods> queryByGoodsgroupId(Long goodsgroupid, Integer goodsstatus, Long marketid, HttpServletRequest request);
+
+    AjaxResult goodsuspendedadd(GoodsUspendedAddQueryParam param, HttpServletRequest request);
+
+    AjaxResult goodsuspendeddel(Long autoid, HttpServletRequest request);
+
+    PageResult<DelistGoodsInfoResult> queryDelistGoodsInfo(DelistGoodsInfoParam param, HttpServletRequest request);
 }

+ 392 - 20
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/GoodsSetUpServiceImpl.java

@@ -2,7 +2,12 @@ package com.muchinfo.mtp3century.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.muchinfo.mtp.proto.Common;
+import com.muchinfo.mtp.proto.NotifyMI1;
+import com.muchinfo.mtp3common.vo.ProtoHelper;
+import com.muchinfo.mtp3common.enumtype.FunCodeConstants;
 import com.muchinfo.mtp3century.service.ICommonService;
 import com.muchinfo.mtp3century.service.IGoodsSetUpService;
 import com.muchinfo.mtp3century.utils.AjaxResult;
@@ -11,13 +16,18 @@ import com.muchinfo.mtp3common.enumtype.Constants;
 import com.muchinfo.mtp3common.enumtype.MessageType;
 import com.muchinfo.mtp3common.enumtype.SysConstants;
 import com.muchinfo.mtp3common.enumtype.SysEnums;
+import com.muchinfo.mtp3common.utils.DateTimeUtils;
 import com.muchinfo.mtp3common.vo.PageResult;
 import com.muchinfo.mtp3interface.mapper.*;
 import com.muchinfo.mtp3pojos.entity.*;
 import com.muchinfo.mtp3pojos.vo.tradingmarket.goodssetup.*;
-import org.apache.catalina.User;
 import org.apache.commons.beanutils.ConvertUtils;
 import org.apache.commons.lang3.StringUtils;
+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;
 
@@ -25,11 +35,13 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.text.ParseException;
 import java.util.*;
 
 @Service
 public class GoodsSetUpServiceImpl implements IGoodsSetUpService {
 
+    private final Logger log = LoggerFactory.getLogger(this.getClass());
     @Resource
     private ISystemmanagerMapper iSystemmanagerMapper;
     @Resource
@@ -66,7 +78,30 @@ public class GoodsSetUpServiceImpl implements IGoodsSetUpService {
     private IArearoleMapper iArearoleMapper;
     @Resource
     private IArearolemarketMapper iArearolemarketMapper;
-
+    @Resource
+    private IGoodsmarginconfigMapper iGoodsmarginconfigMapper;
+    @Resource
+    private IDeliveryrelationMapper iDeliveryrelationMapper;
+    @Resource
+    private IGoodsoptionpropertyMapper iGoodsoptionpropertyMapper;
+    @Resource
+    private IGoodsexMapper iGoodsexMapper;
+    @Resource
+    private IHsbyGoodsexMapper iHsbyGoodsexMapper;
+    @Resource
+    private IWrcategoryMapper iWrcategoryMapper;
+    @Resource
+    private IDgfactoryitemtypeMapper iDgfactoryitemtypeMapper;
+    @Resource
+    private IDgfactoryitemMapper iDgfactoryitemMapper;
+    @Resource
+    private IDeliveryrelationdetailMapper iDeliveryrelationdetailMapper;
+    @Resource
+    private IWskhUserinfoMapper IWskhUserinfoMapper;
+    @Resource
+    private IGoodscloseplanMapper iGoodscloseplanMapper;
+    @Resource
+    private RabbitTemplate rabbitTemplate;
 
     @Override
     public PageResult<GoodsGroupSetQueryResult> groupSetQuery(GoodsGroupSetQueryParam param, HttpServletRequest request) {
@@ -200,7 +235,7 @@ public class GoodsSetUpServiceImpl implements IGoodsSetUpService {
     }
 
     @Override
-    public AjaxResult<Market> listAllInit(HttpServletRequest request, String orgztypes) {
+    public AjaxResult<Market> listAllInit(HttpServletRequest request, String orgztypes, String filterTrademodeList) {
         //如果即运营机构又是经纪会员会或者金融机构  确实是没办法在一个方法里处理
         Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
         List<Long> markets = null;
@@ -257,26 +292,19 @@ public class GoodsSetUpServiceImpl implements IGoodsSetUpService {
         tradeModes.add(SysEnums.TradeMode.JFSC.getCode());
 
         List<Market> marketList = iMarketMapper.selectList(new QueryWrapper<Market>()
-                .eq("markettype",2)
-                .eq("marketStatus",SysEnums.EnumMarketStatus.NORMAL.getType())
-                .in("tradeMode",tradeModes));
+                .eq("markettype", 2)
+                .eq("marketStatus", SysEnums.EnumMarketStatus.NORMAL.getType())
+                .in("tradeMode", tradeModes));
 
         //排除交易模式
-        List<Integer> filterTrademodeList = new ArrayList<>();
-        filterTrademodeList.add(69);
-        filterTrademodeList.add(40);
-        filterTrademodeList.add(41);
-        filterTrademodeList.add(71);
-        filterTrademodeList.add(48);
-        filterTrademodeList.add(51);
-
-        for (Iterator<Market> it = marketList.iterator(); it.hasNext(); ) {
-            Market market = it.next();
-            if (filterTrademodeList.contains(market.getTrademode())) {
-                it.remove();
-            }
+        String[] split = filterTrademodeList.split(",");
+        List<Integer> list = new ArrayList<>();
+        for (String trademode : split) {
+            list.add(Integer.valueOf(trademode));
         }
 
+        marketList.removeIf(market -> list.contains(market.getTrademode()));
+
         return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), marketList);
     }
 
@@ -317,8 +345,327 @@ public class GoodsSetUpServiceImpl implements IGoodsSetUpService {
 
     @Override
     public AjaxResult<GoodsQueryDetailResult> goodsview(Long goodsid, HttpServletRequest request) {
+        GoodsQueryDetailResult result = new GoodsQueryDetailResult();
+        Goods goods = iGoodsMapper.selectOne(new QueryWrapper<Goods>().eq("GOODSID", goodsid));
+        result.setGoods(goods);
+        // 查询商品保证金
+        List<Goodsmarginconfig> margins = iGoodsmarginconfigMapper.selectList(new QueryWrapper<Goodsmarginconfig>()
+                .eq("GOODSID", goodsid));
+        // 如果保证金计算方式是比率,则值需要乘以100再展示(同时将积的标度设为0)
+        for (Goodsmarginconfig gmc : margins) {
+            setGoodsMarginConfig(gmc);
+        }
+        result.setMargins(margins);
+        // 查询商品规则
+
+        Object o = redisServiceUtil.getCacheMapValue(Constants.REDIS_HEADER_SYSPARAM, "007");
+        Integer de = null;
+        BigDecimal Cude = null;
+        if (o != null && "1".equals(o.toString())) {
+            Enumdicitem item = iEnumdicitemMapper.selectOne(new QueryWrapper<Enumdicitem>()
+                    .eq("enumdiccode", "currency")
+                    .eq("enumitemname", goods.getCurrencyid()));
+            if (item != null && StringUtils.isNotBlank(item.getParam1())) {
+                de = Integer.valueOf(item.getParam1());
+                Cude = BigDecimal.valueOf(Math.pow(10, de));
+            }
+        }
+
+        List<Goodstraderule> traderuleList = iGoodsMapper.getTradeRuleByGoodsId(goodsid);
+        traderuleList.sort((p1, p2) -> p1.getRuleid() > p2.getRuleid() ? 1 : -1);
+        for (Goodstraderule trd : traderuleList) {
+            if (trd.getRuleid() == 107 || trd.getRuleid() == 108 || trd.getRuleid() == 110 || trd.getRuleid() == 111) {
+                trd.setParamvalue(trd.getParamvalue().multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_UP));
+            }
+            if (o != null && "1".equals(o.toString())) {
+                if (trd.getRuleid() >= 101 && trd.getRuleid() <= 104) {
+                    trd.setParamvalue(trd.getParamvalue().divide(BigDecimal.valueOf(Math.pow(10, trd.getQtydecimalplace()))));
+                }
+                if (trd.getRuleid() == 109) {
+                    trd.setParamvalue(trd.getParamvalue().divide(BigDecimal.valueOf(Math.pow(10, goods.getDecimalplace()))));
+                }
+            }
+        }
+        result.setTraderule(traderuleList);
+        // 查询商品费用
+        List<Goodstradefee> tradeFeeList = iGoodsMapper.getTradeFeeByGoodsId(goodsid);
+        // 如果费用算法是比率,则值需要乘以10000再展示(同时将积的标度设为0)
+        for (Goodstradefee fee : tradeFeeList) {
+            if (fee.getFeealgorithm() == 1) {
+                // #6388 商品组、商品:费用比率时支持2位小数
+                fee.setExchangevalue(fee.getExchangevalue().multiply(new BigDecimal(10000)).setScale(2));
+                fee.setMemberdefaultvalue(fee.getMemberdefaultvalue().multiply(new BigDecimal(10000)).setScale(2));
+                fee.setMembermaxvalue(fee.getMembermaxvalue().multiply(new BigDecimal(10000)).setScale(2));
+                fee.setMemberminvalue(fee.getMemberminvalue().multiply(new BigDecimal(10000)).setScale(2));
+            } else if (fee.getFeealgorithm() == 2 && de != null) {
+                fee.setExchangevalue(fee.getExchangevalue().divide(Cude));
+                fee.setMemberdefaultvalue(fee.getMemberdefaultvalue().divide(Cude));
+                fee.setMembermaxvalue(fee.getMembermaxvalue().divide(Cude));
+                fee.setMemberminvalue(fee.getMemberminvalue().divide(Cude));
+            }
+        }
+        result.setTradefee(tradeFeeList);
+        Map<String, Object> map = new HashMap<>();
+        map.put("goodsid", goodsid);
+        // 查询商品交割相关配置
+        if (goods.getDeliveryflag() != null && goods.getDeliveryflag() == 1) {
+            // 交割配置
+            Deliveryrelation dr = iDeliveryrelationMapper.selectOne(new QueryWrapper<Deliveryrelation>()
+                    .eq("GOODSID", goodsid));
+            result.setDrelation(dr);
+
+            // 4:线下交收无交收品种
+            if (dr != null && dr.getDeliverygoodsid() != null) {
+                // 交割升贴水 仓库
+                List<WarehouseInfoParam> whlist = IWskhUserinfoMapper.queryWareHouse(dr.getDeliverygoodsid());
+                for (WarehouseInfoParam wh : whlist) {
+                    Deliveryrelationdetail drd = iDeliveryrelationdetailMapper.selectOne(new QueryWrapper<Deliveryrelationdetail>()
+                            .eq("goodsid", goodsid)
+                            .eq("dgfactoryitemtypeid", 1L)
+                            .eq("dgfactoryitemid", wh.getDgfactoryitemid()));
+                    if (drd == null) {
+                        wh.setIschecked(0);
+                    } else {
+                        wh.setIschecked(1);
+                        wh.setPremiumvalue(drd.getPremiumvalue());
+                    }
+                }
+
+                result.setWhlist(whlist);
+
+                // 交割升贴水 其他选择项
+                result.setItemtypemode(1);
+                List<Dgfactoryitemtype> dgfitlist = iDgfactoryitemtypeMapper.selectList(new QueryWrapper<Dgfactoryitemtype>()
+                        .eq("deliverygoodsid", dr.getDeliverygoodsid())
+                        .eq("itemtypemode", 1));
+                for (Dgfactoryitemtype dgfit : dgfitlist) {
+                    if (dgfit.getDgfactoryitemtypeid() != 1) {
+                        // 品种选择项定义
+                        List<Dgfactoryitem> dgfilist = iDgfactoryitemMapper.selectList(new QueryWrapper<Dgfactoryitem>()
+                                .eq("deliverygoodsid", dr.getDeliverygoodsid())
+                                .eq("dgfactoryitemtypeid", dgfit.getDgfactoryitemtypeid()));
+                        for (int j = 0; j < dgfilist.size(); j++) {
+                            Dgfactoryitem dgfi = dgfilist.get(j);
+                            Deliveryrelationdetail drd = iDeliveryrelationdetailMapper.selectOne(new QueryWrapper<Deliveryrelationdetail>()
+                                    .eq("goodsid", goodsid)
+                                    .eq("dgfactoryitemtypeid", dgfit.getDgfactoryitemtypeid())
+                                    .eq("dgfactoryitemid", dgfi.getDgfactoryitemid()));
+
+                            if (drd == null) {
+                                dgfi.setIschecked(0);
+                                dgfilist.remove(j);
+                            } else {
+                                dgfi.setIschecked(1);
+                                dgfi.setPremiumvalue(drd.getPremiumvalue());
+                            }
+                        }
+                        dgfit.setDgfilist(dgfilist);
+                    }
+                }
+                result.setDgfitlist(dgfitlist);
+            }
+        }
+
+        // 商品期权属性
+        Goodsoptionproperty goodsOptionProperty = iGoodsoptionpropertyMapper.selectOne(new QueryWrapper<Goodsoptionproperty>().eq("goodsid", goodsid));
+        if (goodsOptionProperty != null) {
+            result.setProperty(goodsOptionProperty);
+        }
+        HsbyGoodsex hge = iHsbyGoodsexMapper.selectOne(new QueryWrapper<HsbyGoodsex>().eq("goodsid", goodsid));
+        if (hge != null) {
+            if (hge.getMemberratio() != null) {
+                hge.setMemberratio(hge.getMemberratio().multiply(new BigDecimal(100)));
+            }
+            result.setHsbyGoodsex(hge);
+            if (hge.getCategoryid() != null) {
+                Wrcategory wr = iWrcategoryMapper.selectOne(new QueryWrapper<Wrcategory>().eq("CATEGORYID", hge.getCategoryid()));
+                result.setCategoryname(wr.getCategoryname());
+                if (wr.getParentcategoryid() != null) {
+                    Wrcategory wr2 = iWrcategoryMapper.selectOne(new QueryWrapper<Wrcategory>().eq("CATEGORYID", wr.getParentcategoryid()));
+                    result.setIschild(1);
+                    result.setPcategoryname(wr2.getCategoryname());
+                } else {
+                    result.setIschild(0);
+                }
+            }
+        }
+
+        //获取发售方名称
+        if (goods.getProvideruserid() != null) {
+            Useraccount ua = iUseraccountMapper.selectOne(new QueryWrapper<Useraccount>().eq("userid", goods.getProvideruserid()));
+            if (ua != null) {
+                result.setProviderusername(ua.getAccountname());
+            }
+        }
+
+        Goodsex goodsEx = iGoodsexMapper.selectOne(new QueryWrapper<Goodsex>().eq("GOODSID", goodsid));
+        if (goodsEx != null) {
+            result.setGoodsorder(goodsEx.getGoodsorder());
+
+            // 20241118 TCE 添加字段 #6408
+            result.setGoodsnameen(goodsEx.getGoodsnameen());
+            result.setGoodsnametw(goodsEx.getGoodsnametw());
+            result.setGoodsnameth(goodsEx.getGoodsnameth());
+            result.setGoodsnamevi(goodsEx.getGoodsnamevi());
+        }
+
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), result);
+    }
+
+    @Override
+    public AjaxResult<GoodsUspendedQueryResult> goodsuspended(GoodsUspendedQueryParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        //如果不是平台管理员
+        if (!SysConstants.SYS_TYPE_MANAGE.equals(systemmanager.getReletype())) {
+            param.setExchareaid(systemmanager.getAreauserid());
+        }
+        List<GoodsUspendedQueryResult> results = iGoodsMapper.goodsuspended(param);
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), results);
+    }
+
+    @Override
+    public PageResult<GoodsSearchQueryResult> sreach(GoodsSearchQueryParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        //如果不是平台管理员
+        if (!SysConstants.SYS_TYPE_MANAGE.equals(systemmanager.getReletype())) {
+            param.setExchareaid(systemmanager.getAreauserid());
+        }
+        PageResult<GoodsSearchQueryResult> pageResult = new PageResult<>();
+        IPage<GoodsSearchQueryResult> page = new Page<>(param.getPageNum(), param.getPageSize());
+        IPage<GoodsSearchQueryResult> resultIPage = iGoodsMapper.sreach(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<Goodsgroup> goodsGroupList(Long goodsgroupstatus, Long marketid, HttpServletRequest request) {
+        List<Goodsgroup> gglist = iGoodsgroupMapper.selectList(new QueryWrapper<Goodsgroup>()
+                .eq(marketid != null, "marketid", marketid)
+                .eq(goodsgroupstatus != null, "goodsgroupstatus", goodsgroupstatus));
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), gglist);
+    }
+
+    @Override
+    public AjaxResult<Goods> queryByGoodsgroupId(Long goodsgroupid, Integer goodsstatus, Long marketid, HttpServletRequest request) {
+        List<Goods> goodsList = iGoodsMapper.selectList(new QueryWrapper<Goods>()
+                .eq(goodsgroupid != null, "goodsgroupid", goodsgroupid)
+                .eq(goodsstatus != null, "goodsstatus", goodsstatus)
+                .eq(marketid != null, "marketid", marketid));
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), goodsList);
+    }
+
+    @Override
+    public AjaxResult goodsuspendedadd(GoodsUspendedAddQueryParam param, HttpServletRequest request) {
+        Systemmanager systemmanager = iSystemmanagerMapper.selectOne(new QueryWrapper<Systemmanager>().eq("LOGINCODE", iCommonService.getUserLoginCode(request)));
+        List<Goodscloseplan> gdrList = iGoodscloseplanMapper.selectList(new QueryWrapper<Goodscloseplan>()
+                .eq("goodsid", param.getGoodsid()));
+        if (CollectionUtils.isNotEmpty(param.getDayRestDto())) {
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM070.getCode(), request.getHeader("Accept-Language"));
+        }
+        for (Goodscloseplan goodscloseplan : gdrList) {
+            Boolean mark = false;
+            Date start = goodscloseplan.getStarttime();
+            Date end = goodscloseplan.getEndtime();
+            for (DayRestDto drd : param.getDayRestDto()) {
+                mark = DateTimeUtils.isOverLaps(start, end, parseDate(drd.getStartdate()),
+                        parseDate(drd.getEnddate()));
+                if (mark) {
+                    return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM071.getCode(), request.getHeader("Accept-Language"));
+                }
+            }
+        }
+
+        for (DayRestDto drd : param.getDayRestDto()) {
+            Goodscloseplan goodsDayRest = new Goodscloseplan();
+            goodsDayRest.setGoodsid(param.getGoodsid());
+            try {
+                goodsDayRest.setClosedate(getRunDate(drd.getStartdate()));
+            } catch (ParseException e) {
+                log.error("goodsDayRest 时间格式转换失败");
+            }
+            goodsDayRest.setStarttime(parseDate(drd.getStartdate()));
+            goodsDayRest.setEndtime(parseDate(drd.getEnddate()));
+            goodsDayRest.setModifierid(systemmanager.getAutoid());
+            goodsDayRest.setModifytime(new Date());
+            iGoodscloseplanMapper.insert(goodsDayRest);
+        }
+
+        //交易服务需要市场id,先查下
+        Goods goods = iGoodsMapper.selectOne(new QueryWrapper<Goods>().eq("goodsid", param.getGoodsid()));
+        //再构建消息体
+        NotifyMI1.GoodsClosePlanChangeNtf.Builder builder = NotifyMI1.GoodsClosePlanChangeNtf.newBuilder();
+        Common.MessageHead.Builder hd = Common.MessageHead.newBuilder();
+        hd.setFunCode(FunCodeConstants.FunCode_Trade_GoodsClosePlanChangeNtf);
+        hd.setMarketID(goods.getMarketid().intValue());
+        builder.setGoodsID(param.getGoodsid().intValue());
+        builder.setMarketID(goods.getMarketid().intValue());
+        builder.setHeader(hd);
+        byte[] body = ProtoHelper.getNTAS(builder.build().toByteArray(), FunCodeConstants.FunCode_Trade_GoodsClosePlanChangeNtf);
+        rabbitTemplate.send(SysConstants.RabbitNtfKey, new Message(body, new MessageProperties()));
+
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
+    }
+
+    @Override
+    public AjaxResult goodsuspendeddel(Long autoid, HttpServletRequest request) {
+        Goodscloseplan goodscloseplan = iGoodscloseplanMapper.selectOne(new QueryWrapper<Goodscloseplan>().eq("autoid", autoid));
+        iGoodscloseplanMapper.deleteById(autoid);
+
+        //交易服务需要市场id,先查下
+        Goods goods = iGoodsMapper.selectOne(new QueryWrapper<Goods>().eq("goodsid", goodscloseplan.getGoodsid()));
+        //再构建消息体
+        NotifyMI1.GoodsClosePlanChangeNtf.Builder builder = NotifyMI1.GoodsClosePlanChangeNtf.newBuilder();
+        Common.MessageHead.Builder hd = Common.MessageHead.newBuilder();
+        hd.setFunCode(FunCodeConstants.FunCode_Trade_GoodsClosePlanChangeNtf);
+        hd.setMarketID(goods.getMarketid().intValue());
+        builder.setGoodsID(goodscloseplan.getGoodsid().intValue());
+        builder.setMarketID(goods.getMarketid().intValue());
+        builder.setHeader(hd);
+        byte[] body = ProtoHelper.getNTAS(builder.build().toByteArray(), FunCodeConstants.FunCode_Trade_GoodsClosePlanChangeNtf);
+        rabbitTemplate.send(SysConstants.RabbitNtfKey, new Message(body, new MessageProperties()));
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
+    }
+
+    @Override
+    public PageResult<DelistGoodsInfoResult> queryDelistGoodsInfo(DelistGoodsInfoParam param, HttpServletRequest request) {
+        PageResult<DelistGoodsInfoResult> pageResult = new PageResult<>();
+        IPage<DelistGoodsInfoResult> page = new Page<>(param.getPageNum(), param.getPageSize());
+        IPage<DelistGoodsInfoResult> resultIPage = iGoodsMapper.queryDelistGoodsInfo(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;
+    }
+
+    private void setGoodsMarginConfig(Goodsmarginconfig gmc) {
+        if (gmc.getMarginalgorithm() == 1) {
+            if (gmc.getMarketmarginvalue() != null) {
+                gmc.setMarketmarginvalue(gmc.getMarketmarginvalue().multiply(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_DOWN));
+            } else {//页面订金值映射在reckonmarginvalue字段中
+                gmc.setMarketmarginvalue(gmc.getReckonmarginvalue().multiply(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_DOWN));
+            }
+            if (gmc.getReckonmarginvalue() != null) {
+                gmc.setReckonmarginvalue(gmc.getReckonmarginvalue().multiply(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_DOWN));
+            }
 
-        return null;
+            if (gmc.getLockmarginvalue() != null) {
+                gmc.setLockmarginvalue(gmc.getLockmarginvalue().multiply(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_DOWN));
+            }
+        }
+        if (gmc.getRealmarginalgorithm() != null && gmc.getRealmarginalgorithm() == 1
+                && gmc.getRealmarginvalue() != null) {
+            gmc.setRealmarginvalue(gmc.getRealmarginvalue().multiply(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_DOWN));
+        }
     }
 
     private AjaxResult groupadd(GoodsGroupSetDetailResult param, Systemmanager systemmanager, HttpServletRequest request) {
@@ -594,4 +941,29 @@ public class GoodsSetUpServiceImpl implements IGoodsSetUpService {
         }
         return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
     }
+
+    /**
+     * @Title: parseDatetime
+     * @Description: 格式化时间
+     */
+    private Date parseDate(String dateStr) {
+        //原格式为:yyyyMMdd HH:mm,加上秒才能转化
+        String dateString = dateStr + ":00";
+        Date date = null;
+        try {
+            date = DateTimeUtils.parseDatetime(dateString);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return date;
+    }
+
+    /**
+     * @Title: getRunDate
+     * @Description: 获取运行时间
+     */
+    private String getRunDate(String dateStr) throws ParseException {
+        String rundate = DateTimeUtils.formatStr(dateStr, "yyyyMMdd");
+        return rundate;
+    }
 }

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

@@ -387,4 +387,122 @@
         </choose>
         order by g.goodsstatus,g.goodscode
     </select>
+    <select id="getTradeRuleByGoodsId" resultType="com.muchinfo.mtp3pojos.entity.Goodstraderule"
+            parameterType="java.lang.Long">
+        with GRULE as (
+            select g.qtydecimalplace qtydecimalplace,
+                   t.RULEID,td.RULENAME,t.PARAMVALUE,decode(gtt.RULEID,null,tc.ismandatory,1) as ISMANDATORY,TD.REGEXPRESS,TD.REMARK,'2' as flag
+            from
+                GOODSTRADERULE t left join (select ggt.RULEID from GOODSGROUPTRADERULE ggt,goods g1 where g1.goodsgroupid=ggt.goodsgroupid and g1.goodsid=#{goodsid,jdbcType=DECIMAL})gtt on t.RULEID=gtt.RULEID
+               ,TRADERULEDESCRIPTION td,TRADERULECONFIG tc,GOODS g,MARKET m
+            where t.RULEID = td.RULEID AND TD.RULEID = TC.RULEID AND t.GOODSID = g.GOODSID
+              AND g.MARKETID = m.MARKETID AND TC.TRADEMODEID = m.TRADEMODE
+              AND t.goodsid = #{goodsid,jdbcType=DECIMAL}
+        ),
+             GGRULE as (
+                 select gg.qtydecimalplace qtydecimalplace,
+                        ggt.RULEID,td.RULENAME,ggt.PARAMVALUE,1 as ISMANDATORY,TD.REGEXPRESS,TD.REMARK, '1' as flag
+                 from GOODSGROUPTRADERULE ggt,TRADERULEDESCRIPTION td,TRADERULECONFIG tc,GOODSGROUP gg,MARKET m
+                 where ggt.RULEID = td.RULEID AND TD.RULEID = TC.RULEID AND ggt.GoodsGroupID = GG.GOODSGROUPID
+                   AND GG.MARKETID = m.MARKETID AND TC.TRADEMODEID = m.TRADEMODE
+                   AND ggt.GoodsGroupID in (SELECT GOODSGROUPID FROM GOODS WHERE goodsid = #{goodsid,jdbcType=DECIMAL} )
+                   AND NOT EXISTS (SELECT 1 FROM GRULE A WHERE ggt .RULEID = A .RULEID)
+             )
+        select * from GRULE union select * from GGRULE
+    </select>
+    <select id="getTradeFeeByGoodsId" resultType="com.muchinfo.mtp3pojos.entity.Goodstradefee"
+            parameterType="java.lang.Long">
+        with GFEE as (
+            select
+                t.TRADEFEEID,td.TRADEFEENAME,T.FeeAlgorithm,t.EXCHANGEVALUE,T.MemberMinValue,T.MemberDefaultValue,
+                T.MemberMaxValue,decode(gtt.tradefeeid,null,tc.ismandatory,1) as ISMANDATORY, '2' as flag
+            from
+                GOODSTRADEFEE t left join (select ggt.tradefeeid from GOODSGROUPTRADEFEE ggt,goods g1 where g1.goodsgroupid=ggt.goodsgroupid and g1.goodsid=#{goodsid,jdbcType=DECIMAL})gtt on t.TRADEFEEID=gtt.TRADEFEEID
+               ,TRADEFEEDESCRIPTION td,TRADEFEECONFIG tc,GOODS g,MARKET m
+            where t.TRADEFEEID = td.TRADEFEEID AND TD.TRADEFEEDESCRIPTIONID = TC.TRADEFEEDESCRIPTIONID
+              AND t.GOODSID = g.GOODSID
+              AND g.MARKETID = m.MARKETID AND TC.TRADEPROPERTYID = m.TRADEPROPERTY
+              AND t.goodsid = #{goodsid,jdbcType=DECIMAL}
+        ),
+             GGFEE as (
+                 select
+                     ggt.TRADEFEEID,td.TRADEFEENAME,ggt.FeeAlgorithm,ggt.EXCHANGEVALUE,ggt.MemberMinValue,ggt.MemberDefaultValue,
+                     ggt.MemberMaxValue,1 as ISMANDATORY,'1' as flag
+                 from GOODSGROUPTRADEFEE ggt,TRADEFEEDESCRIPTION td,TRADEFEECONFIG tc,GOODSGROUP gg,MARKET m
+                 where ggt.TRADEFEEID = td.TRADEFEEID AND TD.TRADEFEEDESCRIPTIONID = TC.TRADEFEEDESCRIPTIONID
+                   AND ggt.GoodsGroupID = GG.GOODSGROUPID
+                   AND GG.MARKETID = m.MARKETID AND TC.TRADEPROPERTYID = m.TRADEPROPERTY
+                   AND ggt.GoodsGroupID in (SELECT GOODSGROUPID FROM GOODS WHERE goodsid = #{goodsid,jdbcType=DECIMAL})
+                   AND NOT EXISTS (SELECT 1 FROM GFEE A WHERE ggt.TRADEFEEID = A.TRADEFEEID)
+             )
+        select * from GFEE union select * from GGFEE
+    </select>
+    <select id="goodsuspended" resultType="com.muchinfo.mtp3pojos.vo.tradingmarket.goodssetup.GoodsUspendedQueryResult"
+            parameterType="com.muchinfo.mtp3pojos.vo.tradingmarket.goodssetup.GoodsUspendedQueryParam">
+        SELECT DISTINCT
+        (TO_CHAR (
+        TO_DATE (CLOSEDATE, 'yyyy-MM-dd'),
+        'yyyy-MM-dd'
+        )) AS closedate
+        FROM
+        GOODSCLOSEPLAN Gd,MARKET m,GOODS g
+        LEFT JOIN GOODSGROUP gp ON gp.GoodsGroupid = g.GoodsGroupid
+        WHERE SUBSTR(CLOSEDATE, 0, 4) = #{year,jdbcType=VARCHAR}
+        AND g.GOODSID = Gd.GOODSID
+        and g.marketid = m.MarketID
+        <if test="vo.marketId != null">
+            AND G.MARKETID = #{vo.marketId,jdbcType=DECIMAL}
+        </if>
+        <if test="vo.goodsGroupId != null">
+            AND G.goodsGroupId = #{vo.goodsGroupId,jdbcType=DECIMAL}
+        </if>
+        <if test="vo.goodsid != null">
+            AND G.goodsid = #{vo.goodsid,jdbcType=DECIMAL}
+        </if>
+        <if test="vo.exchareaid != null and vo.exchareaid != ''">
+            AND m.exchareaid = #{vo.exchareaid,jdbcType=DECIMAL}
+        </if>
+    </select>
+    <select id="sreach" resultType="com.muchinfo.mtp3pojos.vo.tradingmarket.goodssetup.GoodsSearchQueryResult">
+        SELECT
+        gdr.AUTOID,
+        gdr.GOODSID,
+        G .GOODSNAME,
+        m.marketname as marketName,
+        gdr.CLOSEDATE as rundate,
+        gdr.STARTTIME,
+        gdr.ENDTIME,
+        GDR.MODIFYTIME,
+        SM.USERNAME as modifiername
+        FROM GOODS G,MARKET m,GOODSCLOSEPLAN gdr
+        LEFT JOIN SYSTEMMANAGER sm ON gdr.MODIFIERID = SM.AUTOID
+        where gdr.GOODSID = G .GOODSID
+        and g.marketid = m.MarketID
+        and GDR.CLOSEDATE = #{vo.rundate}
+        <if test="vo.goodsName != null and vo.goodsName != ''">
+            AND G.GOODSNAME like '%'||#{vo.goodsName,jdbcType=VARCHAR}||'%'
+        </if>
+        <if test="vo.exchareaid != null and vo.exchareaid != ''">
+            AND m.exchareaid = #{vo.exchareaid,jdbcType=DECIMAL}
+        </if>
+        ORDER BY gdr.GOODSID DESC
+    </select>
+    <select id="queryDelistGoodsInfo"
+            resultType="com.muchinfo.mtp3pojos.vo.tradingmarket.goodssetup.DelistGoodsInfoResult">
+        select g.goodscode || '(' || g.goodsname || ')' "goodsName",
+        m.marketName "marketName",
+        m.trademode "trademode",
+        decode(m.trademode,18,3,g.delistingmode) "delistingmode",
+        g.goodsId "goodsId"
+        from goods g, market m
+        where g.goodsstatus = 7
+        and g.marketid = m.marketid
+        and m.trademode not in (40,41,48,51)
+        <if test="null != vo.goodsName">
+            and (g.goodscode like '%'||#{vo.goodsName}||'%' or g.goodsname like '%'||#{vo.goodsName}||'%')
+        </if>
+        <if test="null != vo.marketid">
+            and g.marketid = #{vo.marketid}
+        </if>
+    </select>
 </mapper>

+ 9 - 0
mtp3-century/src/main/resources/mapper/WskhUserinfoMapper.xml

@@ -223,5 +223,14 @@
             order by a.userid ,a.accountid
         </where>
     </select>
+    <select id="queryWareHouse" resultType="com.muchinfo.mtp3pojos.vo.tradingmarket.goodssetup.WarehouseInfoParam"
+            parameterType="java.lang.Long">
+        select t.dgfactoryitemid,w.*,d.pathname
+        from DGFactoryItem t
+                 left join warehouseinfo w on t.warehouseid = w.autoid
+                 left join division d on w.districtid = d.autoid
+        where t.deliverygoodsid = #{deliverygoodsid}
+          and t.warehouseid is not null
+    </select>
 
 </mapper>

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

@@ -98,6 +98,8 @@ message_error_code_system066=There is a commission order in this market, and it
 message_error_code_system067=The risk rule already exists
 message_error_code_system068=There are products in use in this product group
 message_error_code_system069=Duplicate product group names
+message_error_code_system070=The suspension time cannot be empty
+message_error_code_system071=Overlapping suspension periods
 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

@@ -98,6 +98,8 @@ message_error_code_system066=\u0E21\u0E35\u0E15\u0E25\u0E32\u0E14\u0E19\u0E35\u0
 message_error_code_system067=\u0E01\u0E0E\u0E04\u0E27\u0E32\u0E21\u0E40\u0E2A\u0E35\u0E48\u0E22\u0E07\u0E19\u0E35\u0E49\u0E21\u0E35\u0E2D\u0E22\u0E39\u0E48\u0E41\u0E25\u0E49\u0E27
 message_error_code_system068=\u0E2A\u0E34\u0E19\u0E04\u0E49\u0E32\u0E01\u0E25\u0E38\u0E48\u0E21\u0E19\u0E35\u0E49\u0E21\u0E35\u0E2A\u0E34\u0E19\u0E04\u0E49\u0E32\u0E20\u0E32\u0E22\u0E43\u0E15\u0E49\u0E01\u0E32\u0E23\u0E43\u0E0A\u0E49\u0E07\u0E32\u0E19
 message_error_code_system069=\u0E0A\u0E37\u0E48\u0E2D\u0E01\u0E25\u0E38\u0E48\u0E21\u0E2A\u0E34\u0E19\u0E04\u0E49\u0E32 \u0E0B\u0E49\u0E33\u0E01\u0E31\u0E19
+message_error_code_system070=\u0E40\u0E27\u0E25\u0E32\u0E23\u0E30\u0E07\u0E31\u0E1A\u0E44\u0E21\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E27\u0E48\u0E32\u0E07\u0E44\u0E14\u0E49
+message_error_code_system071=\u0E01\u0E32\u0E23\u0E17\u0E31\u0E1A\u0E0B\u0E49\u0E2D\u0E19\u0E02\u0E2D\u0E07\u0E23\u0E30\u0E22\u0E30\u0E40\u0E27\u0E25\u0E32\u0E01\u0E32\u0E23\u0E23\u0E30\u0E07\u0E31\u0E1A
 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

@@ -98,6 +98,8 @@ message_error_code_system066=C\u00F3 gi\u1EA5y \u1EE7y th\u00E1c trong th\u1ECB
 message_error_code_system067=Quy t\u1EAFc r\u1EE7i ro \u0111\u00E3 t\u1ED3n t\u1EA1i
 message_error_code_system068=Nh\u00F3m s\u1EA3n ph\u1EA9m n\u00E0y c\u00F3 c\u00E1c s\u1EA3n ph\u1EA9m \u0111ang \u0111\u01B0\u1EE3c s\u1EED d\u1EE5ng.
 message_error_code_system069=T\u00EAn nh\u00F3m s\u1EA3n ph\u1EA9m tr\u00F9ng l\u1EB7p
+message_error_code_system070=Th\u1EDDi gian d\u1EEBng b\u00E0i kh\u00F4ng \u0111\u01B0\u1EE3c \u0111\u1EC3 tr\u1ED1ng
+message_error_code_system071=Th\u1EDDi gian d\u1EEBng ch\u1ED3ng ch\u00E9o
 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

@@ -98,6 +98,8 @@ message_error_code_system066=\u6709\u6B64\u5E02\u573A\u4E0B\u6709\u59D4\u6258\u5
 message_error_code_system067=\u8BE5\u98CE\u9669\u89C4\u5219\u5DF2\u5B58\u5728
 message_error_code_system068=\u6B64\u5546\u54C1\u7EC4\u6709\u5546\u54C1\u6B63\u5728\u4F7F\u7528\u4E2D
 message_error_code_system069=\u5546\u54C1\u7EC4\u540D\u79F0\u91CD\u590D
+message_error_code_system070=\u505C\u724C\u65F6\u95F4\u4E0D\u80FD\u4E3A\u7A7A
+message_error_code_system071=\u505C\u724C\u65F6\u95F4\u6BB5\u91CD\u53E0
 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

@@ -98,6 +98,8 @@ message_error_code_system066=\u6709\u6B64\u5E02\u5834\u4E0B\u6709\u59D4\u8A17\u5
 message_error_code_system067=\u8A72\u98A8\u96AA\u898F\u5247\u5DF2\u5B58\u5728
 message_error_code_system068=\u6B64\u5546\u54C1\u7D44\u6709\u5546\u54C1\u6B63\u5728\u4F7F\u7528\u4E2D
 message_error_code_system069=\u5546\u54C1\u7D44\u540D\u7A31\u91CD\u8907
+message_error_code_system070=\u505C\u724C\u6642\u9593\u4E0D\u80FD\u70BA\u7A7A
+message_error_code_system071=\u505C\u724C\u6642\u9593\u6BB5\u91CD\u758A
 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

@@ -98,6 +98,8 @@ message_error_code_system066=\u6709\u6B64\u5E02\u5834\u4E0B\u6709\u59D4\u8A17\u5
 message_error_code_system067=\u8A72\u98A8\u96AA\u898F\u5247\u5DF2\u5B58\u5728
 message_error_code_system068=\u6B64\u5546\u54C1\u7D44\u6709\u5546\u54C1\u6B63\u5728\u4F7F\u7528\u4E2D
 message_error_code_system069=\u5546\u54C1\u7D44\u540D\u7A31\u91CD\u8907
+message_error_code_system070=\u505C\u724C\u6642\u9593\u4E0D\u80FD\u70BA\u7A7A
+message_error_code_system071=\u505C\u724C\u6642\u9593\u6BB5\u91CD\u758A
 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

@@ -106,6 +106,8 @@ public enum MessageType {
     MESSAGE_ERROR_CODE_SYSTEM067("message_error_code_system067", "该风险规则已存在"),
     MESSAGE_ERROR_CODE_SYSTEM068("message_error_code_system068", "此商品组有商品正在使用中"),
     MESSAGE_ERROR_CODE_SYSTEM069("message_error_code_system069", "商品组名称重复"),
+    MESSAGE_ERROR_CODE_SYSTEM070("message_error_code_system070", "停牌时间不能为空"),
+    MESSAGE_ERROR_CODE_SYSTEM071("message_error_code_system071", "停牌时间段重叠"),
 
     LOGIN_ERROR_CODE_001("login_error_code_001", "账户或密码错误"),
     LOGIN_ERROR_CODE_002("login_error_code_002", "未经允许,不可访问!请联系管理员处理"),

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

@@ -0,0 +1,16 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.Deliveryrelationdetail;
+
+/**
+ * <p>
+ * 商品交割关系明细表 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2025-09-19
+ */
+public interface IDeliveryrelationdetailMapper extends BaseMapper<Deliveryrelationdetail> {
+
+}

+ 14 - 8
mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IGoodsMapper.java

@@ -2,19 +2,14 @@ package com.muchinfo.mtp3interface.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.muchinfo.mtp3pojos.entity.Goods;
-import com.muchinfo.mtp3pojos.entity.Goodsgrouptradefee;
-import com.muchinfo.mtp3pojos.entity.Goodsgrouptraderule;
+import com.muchinfo.mtp3pojos.entity.*;
 import com.muchinfo.mtp3pojos.vo.common.GoodsSelectParam;
 import com.muchinfo.mtp3pojos.vo.common.GoodsSelectResult;
 import com.muchinfo.mtp3pojos.vo.investor.PersonalizationDelParam;
 import com.muchinfo.mtp3pojos.vo.organ.GoodsForRoleVo;
 import com.muchinfo.mtp3pojos.vo.reportform.GoodsReportParam;
 import com.muchinfo.mtp3pojos.vo.reportform.GoodsReportResult;
-import com.muchinfo.mtp3pojos.vo.tradingmarket.goodssetup.GoodsGroupSetQueryParam;
-import com.muchinfo.mtp3pojos.vo.tradingmarket.goodssetup.GoodsGroupSetQueryResult;
-import com.muchinfo.mtp3pojos.vo.tradingmarket.goodssetup.GoodsQueryParam;
-import com.muchinfo.mtp3pojos.vo.tradingmarket.goodssetup.GoodsQueryResult;
+import com.muchinfo.mtp3pojos.vo.tradingmarket.goodssetup.*;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -49,5 +44,16 @@ public interface IGoodsMapper extends BaseMapper<Goods> {
 
     List<Goodsgrouptradefee> getTradeFeeByGroupid(Long goodsgroupid);
 
-    IPage<GoodsQueryResult> goodsQuery(IPage<GoodsQueryResult> page,  @Param("vo") GoodsQueryParam param);
+    IPage<GoodsQueryResult> goodsQuery(IPage<GoodsQueryResult> page, @Param("vo") GoodsQueryParam param);
+
+    List<Goodstraderule> getTradeRuleByGoodsId(Long goodsid);
+
+    List<Goodstradefee> getTradeFeeByGoodsId(Long goodsid);
+
+    List<GoodsUspendedQueryResult> goodsuspended(@Param("vo") GoodsUspendedQueryParam param);
+
+    IPage<GoodsSearchQueryResult> sreach(IPage<GoodsSearchQueryResult> page, @Param("vo") GoodsSearchQueryParam param);
+
+    IPage<DelistGoodsInfoResult> queryDelistGoodsInfo(IPage<DelistGoodsInfoResult> page, @Param("vo") DelistGoodsInfoParam param);
+
 }

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

@@ -0,0 +1,16 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.Goodscloseplan;
+
+/**
+ * <p>
+ * 商品停牌日计划表 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2025-09-23
+ */
+public interface IGoodscloseplanMapper extends BaseMapper<Goodscloseplan> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.Goodsmarginconfig;
+
+/**
+ * <p>
+ * 商品保证金配置表 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2025-09-18
+ */
+public interface IGoodsmarginconfigMapper extends BaseMapper<Goodsmarginconfig> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.Goodstradefee;
+
+/**
+ * <p>
+ * 商品交易费用表 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2025-09-18
+ */
+public interface IGoodstradefeeMapper extends BaseMapper<Goodstradefee> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.Goodstraderule;
+
+/**
+ * <p>
+ * 商品交易规则表 Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2025-09-18
+ */
+public interface IGoodstraderuleMapper extends BaseMapper<Goodstraderule> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.HsbyGoodsex;
+
+/**
+ * <p>
+ * 商品扩展表(海商报业) Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2025-09-19
+ */
+public interface IHsbyGoodsexMapper extends BaseMapper<HsbyGoodsex> {
+
+}

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

@@ -10,6 +10,7 @@ import com.muchinfo.mtp3pojos.vo.organ.AccountRiskConfigParam;
 import com.muchinfo.mtp3pojos.vo.organ.AccountRiskConfigResult;
 import com.muchinfo.mtp3pojos.vo.organ.MemberGoodsLimitParam;
 import com.muchinfo.mtp3pojos.vo.organ.MemberGoodsLimitResult;
+import com.muchinfo.mtp3pojos.vo.tradingmarket.goodssetup.WarehouseInfoParam;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -34,4 +35,5 @@ public interface IWskhUserinfoMapper extends BaseMapper<WskhUserinfo> {
 
     IPage<AccountRiskConfigResult> accountriskconfig(IPage<AccountRiskConfigResult> page,@Param("vo") AccountRiskConfigParam param);
 
+    List<WarehouseInfoParam> queryWareHouse(Long deliverygoodsid);
 }

+ 55 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Deliveryrelationdetail.java

@@ -0,0 +1,55 @@
+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-09-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("DELIVERYRELATIONDETAIL")
+@ApiModel(value="Deliveryrelationdetail对象", description="商品交割关系明细表")
+public class Deliveryrelationdetail extends Model<Deliveryrelationdetail> {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "交易合约ID")
+    private Long goodsid;
+
+    @ApiModelProperty(value = "选择项ID")
+    @TableField("DGFACTORYITEMID")
+    private Long dgfactoryitemid;
+
+    @ApiModelProperty(value = "要素项类型ID")
+    @TableField("DGFACTORYITEMTYPEID")
+    private Long dgfactoryitemtypeid;
+
+    @ApiModelProperty(value = "升贴水值")
+    @TableField("PREMIUMVALUE")
+    private BigDecimal premiumvalue;
+
+
+    @Override
+    public Serializable pkVal() {
+        return this.goodsid;
+    }
+
+}

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

@@ -59,10 +59,10 @@ public class Dgfactoryitem extends Model<Dgfactoryitem> {
 
     @TableField(select = false)
     private Integer ischecked;
-
     @TableField(select = false)
     private Long wrstandardid;
-
+    @TableField(select = false)
+    private BigDecimal premiumvalue;
     @Override
     public Serializable pkVal() {
         return this.dgfactoryitemid;

+ 71 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Goodscloseplan.java

@@ -0,0 +1,71 @@
+package com.muchinfo.mtp3pojos.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <p>
+ * 商品停牌日计划表
+ * </p>
+ *
+ * @author XKF
+ * @since 2025-09-23
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("GOODSCLOSEPLAN")
+@ApiModel(value="Goodscloseplan对象", description="商品停牌日计划表")
+@KeySequence(value = "SEQ_GOODSCLOSEPLAN")
+public class Goodscloseplan extends Model<Goodscloseplan> {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "自增ID")
+    @TableId(value = "AUTOID", type = IdType.INPUT)
+    private Long autoid;
+
+    @ApiModelProperty(value = "商品ID")
+    @TableField("GOODSID")
+    private Long goodsid;
+
+    @ApiModelProperty(value = "停牌日期(yyyyMMdd)")
+    @TableField("CLOSEDATE")
+    private String closedate;
+
+    @ApiModelProperty(value = "起始时间")
+    @TableField("STARTTIME")
+    private Date starttime;
+
+    @ApiModelProperty(value = "结束时间")
+    @TableField("ENDTIME")
+    private Date endtime;
+
+    @ApiModelProperty(value = "备注")
+    @TableField("REMARK")
+    private String remark;
+
+    @ApiModelProperty(value = "修改时间")
+    @TableField("MODIFYTIME")
+    private Date modifytime;
+
+    @ApiModelProperty(value = "修改人")
+    @TableField("MODIFIERID")
+    private Long modifierid;
+
+
+    @Override
+    public Serializable pkVal() {
+        return this.autoid;
+    }
+
+}

+ 79 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Goodsmarginconfig.java

@@ -0,0 +1,79 @@
+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-09-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("GOODSMARGINCONFIG")
+@ApiModel(value="Goodsmarginconfig对象", description="商品保证金配置表")
+public class Goodsmarginconfig extends Model<Goodsmarginconfig> {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "商品ID")
+    private Long goodsid;
+
+    @ApiModelProperty(value = "投资者客户类别(枚举项的值)")
+    @TableField("CUSTOMERTYPEID")
+    private Integer customertypeid;
+
+    @ApiModelProperty(value = "保证金计算方式 - 1:比率 2.固定")
+    @TableField("MARGINALGORITHM")
+    private Integer marginalgorithm;
+
+    @ApiModelProperty(value = "即市保证金值")
+    @TableField("MARKETMARGINVALUE")
+    private BigDecimal marketmarginvalue;
+
+    @ApiModelProperty(value = "结算保证金值")
+    @TableField("RECKONMARGINVALUE")
+    private BigDecimal reckonmarginvalue;
+
+    @ApiModelProperty(value = "锁仓保证金")
+    @TableField("LOCKMARGINVALUE")
+    private BigDecimal lockmarginvalue;
+
+    @ApiModelProperty(value = "是否默认 - 0:非默认  1:默认")
+    @TableField("ISDEFAULT")
+    private Integer isdefault;
+
+    @ApiModelProperty(value = "市场ID")
+    @TableField("MARKETID")
+    private Long marketid;
+
+    @ApiModelProperty(value = "实付保证金值[做市收益权市场“是否交易授信” = 1 ]")
+    @TableField("REALMARGINVALUE")
+    private BigDecimal realmarginvalue;
+
+    @ApiModelProperty(value = "实付保证金计算方式 - 1:比率 2.固定")
+    @TableField("REALMARGINALGORITHM")
+    private Integer realmarginalgorithm;
+
+
+    @Override
+    public Serializable pkVal() {
+        return this.goodsid;
+    }
+
+}

+ 77 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Goodstradefee.java

@@ -0,0 +1,77 @@
+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-09-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("GOODSTRADEFEE")
+@ApiModel(value="Goodstradefee对象", description="商品交易费用表")
+public class Goodstradefee extends Model<Goodstradefee> {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "商品ID")
+    @TableField("GOODSID")
+    private Long goodsid;
+
+    @ApiModelProperty(value = "交易费用ID - 101建仓(买)手续费 102平仓(卖)手续费 103买递延费(仓储费) 103卖递延费 104买交割手续费 105卖交割手续费")
+    @TableId(value = "TRADEFEEID", type = IdType.AUTO)
+    private Integer tradefeeid;
+
+    @ApiModelProperty(value = "费用算法 - 1:比率 2:固定")
+    @TableField("FEEALGORITHM")
+    private Integer feealgorithm;
+
+    @ApiModelProperty(value = "交易所费用值")
+    @TableField("EXCHANGEVALUE")
+    private BigDecimal exchangevalue;
+
+    @ApiModelProperty(value = "会员费用默认值")
+    @TableField("MEMBERDEFAULTVALUE")
+    private BigDecimal memberdefaultvalue;
+
+    @ApiModelProperty(value = "会员费用最小值")
+    @TableField("MEMBERMINVALUE")
+    private BigDecimal memberminvalue;
+
+    @ApiModelProperty(value = "会员费用最大值")
+    @TableField("MEMBERMAXVALUE")
+    private BigDecimal membermaxvalue;
+
+    @ApiModelProperty(value = "市场ID")
+    @TableField("MARKETID")
+    private Long marketid;
+
+    @TableField(select = false)
+    private String tradefeename;// 费用名称
+    @TableField(select = false)
+    private Integer ismandatory; // 是否必填
+    @TableField(select = false)
+    private Integer flag ; //1-是商品组的设置,2-商品的设置
+    @Override
+    public Serializable pkVal() {
+        return this.tradefeeid;
+    }
+
+}

+ 66 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/Goodstraderule.java

@@ -0,0 +1,66 @@
+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-09-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("GOODSTRADERULE")
+@ApiModel(value="Goodstraderule对象", description="商品交易规则表")
+public class Goodstraderule extends Model<Goodstraderule> {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "商品ID")
+    private Long goodsid;
+
+    @ApiModelProperty(value = "交易规则 - 101 最大买持仓量  102 最大卖持仓量 103 单笔最小建仓量 104 单笔最大建仓量 105 手续费收费规则 106 交易T+N 107 上市首日涨停 108 上市首日跌停 109 上市首日参考价 110 涨停 111 跌停 112 市价最大偏移范围 113 止损点差 114 止盈点差 115 单笔最小交割数量 116 单笔最大交割数量 ")
+    @TableField("RULEID")
+    private Integer ruleid;
+
+    @ApiModelProperty(value = "参数值")
+    @TableField("PARAMVALUE")
+    private BigDecimal paramvalue;
+
+    @ApiModelProperty(value = "市场ID")
+    @TableField("MARKETID")
+    private Long marketid;
+
+    @TableField(select = false)
+    private String rulename;//规则名
+    @TableField(select = false)
+    private String  regexpress;//正则表达式
+    @TableField(select = false)
+    private String  remark;//描述
+    @TableField(select = false)
+    private Integer  ismandatory ; //是否必填
+    @TableField(select = false)
+    private Integer qtydecimalplace;//对应规则的小数位
+    @TableField(select = false)
+    private Integer flag ; //1-是商品组的设置,2-商品的设置
+    @Override
+    public Serializable pkVal() {
+        return this.goodsid;
+    }
+
+}

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

@@ -0,0 +1,132 @@
+package com.muchinfo.mtp3pojos.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <p>
+ * 商品扩展表(海商报业)
+ * </p>
+ *
+ * @author XKF
+ * @since 2025-09-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("HSBY_GOODSEX")
+@ApiModel(value="HsbyGoodsex对象", description="商品扩展表(海商报业)")
+public class HsbyGoodsex extends Model<HsbyGoodsex> {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "商 品ID")
+    private Long goodsid;
+
+    @ApiModelProperty(value = "景点热度")
+    @TableField("HOTINDEX")
+    private Integer hotindex;
+
+    @ApiModelProperty(value = "目的地(省)")
+    @TableField("DESCPROVINCEID")
+    private Long descprovinceid;
+
+    @ApiModelProperty(value = "目的地(市)")
+    @TableField("DESCCITYID")
+    private Long desccityid;
+
+    @ApiModelProperty(value = "供应商ID")
+    @TableField("VENDORID")
+    private Long vendorid;
+
+    @ApiModelProperty(value = "商品详情")
+    @TableField("GOODSDESC")
+    private String goodsdesc;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField("CREATETIME")
+    private Date createtime;
+
+    @ApiModelProperty(value = "创建人")
+    @TableField("CREATORID")
+    private Long creatorid;
+
+    @ApiModelProperty(value = "修改人")
+    @TableField("MODIFIERID")
+    private Long modifierid;
+
+    @ApiModelProperty(value = "修改时间")
+    @TableField("MODIFYTIME")
+    private Date modifytime;
+
+    @ApiModelProperty(value = "会员货款比例 [71]")
+    @TableField("MEMBERRATIO")
+    private BigDecimal memberratio;
+
+    @ApiModelProperty(value = "介绍视频[多张用逗号分隔]")
+    @TableField("VIDEOURLS")
+    private String videourls;
+
+    @ApiModelProperty(value = "介绍图片[多张用逗号分隔](1:1)")
+    @TableField("PICURLS")
+    private String picurls;
+
+    @ApiModelProperty(value = "商品价格")
+    @TableField("GOODSPRICE")
+    private BigDecimal goodsprice;
+
+    @ApiModelProperty(value = "类别ID(WRCATEGORY)")
+    @TableField("CATEGORYID")
+    private Long categoryid;
+
+    @ApiModelProperty(value = "关联商品ID(69,70)")
+    @TableField("RELATEDGOODSID")
+    private Long relatedgoodsid;
+
+    @ApiModelProperty(value = "关联商品市场ID(69,70)")
+    @TableField("RELATEDMARKETID")
+    private Long relatedmarketid;
+
+    @ApiModelProperty(value = "最长提货期(天)")
+    @TableField("MAXDELIVERYTIME")
+    private Long maxdeliverytime;
+
+    @ApiModelProperty(value = "是否支持行程预约 - 0:不支持 1:支持")
+    @TableField("CANAPPOINTMENT")
+    private Integer canappointment;
+
+    @ApiModelProperty(value = "商品有效期(截止日期)")
+    @TableField("EXPIREDDATE")
+    private Date expireddate;
+
+    @ApiModelProperty(value = "商品有效状态 - 0:已过期 1:正常")
+    @TableField("ISVALID")
+    private Integer isvalid;
+
+    @ApiModelProperty(value = "行程天数【支持行程预约】")
+    @TableField("TRIPDAYS")
+    private Integer tripdays;
+
+    @ApiModelProperty(value = "可提前多少天预约【支持行程预约】")
+    @TableField("SCHEDULEDAYS")
+    private Integer scheduledays;
+
+
+    @Override
+    public Serializable pkVal() {
+        return this.goodsid;
+    }
+
+}

+ 19 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/tradingmarket/goodssetup/DayRestDto.java

@@ -0,0 +1,19 @@
+package com.muchinfo.mtp3pojos.vo.tradingmarket.goodssetup;
+
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Builder
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(value="DayRestDto对象", description="商品停牌管理")
+public class DayRestDto {
+
+    private String startdate;
+
+    private String enddate;
+}

+ 23 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/tradingmarket/goodssetup/DelistGoodsInfoParam.java

@@ -0,0 +1,23 @@
+package com.muchinfo.mtp3pojos.vo.tradingmarket.goodssetup;
+
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Builder
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(value="DelistGoodsInfoParam对象", description="商品退市管理")
+public class DelistGoodsInfoParam {
+
+    private Long marketid;
+
+    private String goodsName;
+
+    private Integer pageNum;
+
+    private Integer pageSize;
+}

+ 22 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/tradingmarket/goodssetup/DelistGoodsInfoResult.java

@@ -0,0 +1,22 @@
+package com.muchinfo.mtp3pojos.vo.tradingmarket.goodssetup;
+
+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="DelistGoodsInfoResult对象", description="商品退市管理")
+public class DelistGoodsInfoResult {
+
+    @ApiModelProperty(value = "商品名称")
+    private String goodsName;
+
+    @ApiModelProperty(value = "所属市场")
+    private String marketName;
+}

+ 51 - 1
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/tradingmarket/goodssetup/GoodsQueryDetailResult.java

@@ -1,11 +1,15 @@
 package com.muchinfo.mtp3pojos.vo.tradingmarket.goodssetup;
 
+import com.muchinfo.mtp3pojos.entity.*;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.util.List;
+
 @Builder
 @Data
 @AllArgsConstructor
@@ -13,5 +17,51 @@ import lombok.NoArgsConstructor;
 @ApiModel(value="GoodsQueryDetailResult对象", description="商品设置请求")
 public class GoodsQueryDetailResult {
 
-    private Long goodsid;
+    @ApiModelProperty(value = "商品")
+    private Goods goods;
+
+    @ApiModelProperty(value = "商品保证金")
+    private List<Goodsmarginconfig> margins;
+
+    @ApiModelProperty(value = "商品交易规则表")
+    private List<Goodstraderule> traderule;
+
+    @ApiModelProperty(value = "交割升贴水 其它选择项")
+    private List<Dgfactoryitemtype> dgfitlist;
+
+    @ApiModelProperty(value = "商品交易费用表")
+    private List<Goodstradefee> tradefee;
+
+    @ApiModelProperty(value = "交割升贴水 仓库")
+    private List<WarehouseInfoParam> whlist;
+
+    @ApiModelProperty(value = "商品交割关系表")
+    private Deliveryrelation drelation;
+
+    @ApiModelProperty(value = "商品期权属性表")
+    private Goodsoptionproperty property;
+
+    @ApiModelProperty(value = "商品扩展信息")
+    private Goodsex goodsex;
+
+    @ApiModelProperty(value = "海商报业")
+    private HsbyGoodsex hsbyGoodsex;
+
+    @ApiModelProperty(value = "分类名称")
+    private String categoryname;
+
+    @ApiModelProperty(value = "是否有父类")
+    private Integer ischild;
+
+    @ApiModelProperty(value = "父类名称")
+    private String pcategoryname;
+
+    private String providerusername;
+    private String goodsnameen;
+    private String goodsnameth;
+    private String goodsnametw;
+    private String goodsnamevi;
+    private String goodsorder;
+
+    private Integer itemtypemode;
 }

+ 25 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/tradingmarket/goodssetup/GoodsSearchQueryParam.java

@@ -0,0 +1,25 @@
+package com.muchinfo.mtp3pojos.vo.tradingmarket.goodssetup;
+
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Builder
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(value="GoodsSearchQueryParam对象", description="商品停牌管理")
+public class GoodsSearchQueryParam {
+
+    private String rundate;
+
+    private String goodsName;
+
+    private Long exchareaid;
+
+    private Integer pageNum;
+
+    private Integer pageSize;
+}

+ 41 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/tradingmarket/goodssetup/GoodsSearchQueryResult.java

@@ -0,0 +1,41 @@
+package com.muchinfo.mtp3pojos.vo.tradingmarket.goodssetup;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+@Builder
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(value="GoodsSearchQueryResult对象", description="商品停牌管理")
+public class GoodsSearchQueryResult {
+
+    @ApiModelProperty(value = "市场")
+    private String marketName;
+
+    @ApiModelProperty(value = "商品名称")
+    private String goodsName;
+
+    @ApiModelProperty(value = "运行日期")
+    private String rundate;
+
+    @ApiModelProperty(value = "起始时间")
+    private Date starttime;
+
+    @ApiModelProperty(value = "结束日期")
+    private Date endtime;
+
+    @ApiModelProperty(value = "修改人")
+    private String modifiername;
+
+    @ApiModelProperty(value = "修改日期")
+    private Date modifytime;
+
+    private Long autoid;
+}

+ 21 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/tradingmarket/goodssetup/GoodsUspendedAddQueryParam.java

@@ -0,0 +1,21 @@
+package com.muchinfo.mtp3pojos.vo.tradingmarket.goodssetup;
+
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Builder
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(value="GoodsUspendedAddQueryParam对象", description="商品停牌管理新增")
+public class GoodsUspendedAddQueryParam {
+
+    private List<DayRestDto> dayRestDto;
+
+    private Long goodsid;
+}

+ 25 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/tradingmarket/goodssetup/GoodsUspendedQueryParam.java

@@ -0,0 +1,25 @@
+package com.muchinfo.mtp3pojos.vo.tradingmarket.goodssetup;
+
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Builder
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(value="GoodsUspendedQueryParam对象", description="商品停牌设置")
+public class GoodsUspendedQueryParam {
+
+    private Long goodsGroupId;
+
+    private Long goodsid;
+
+    private Long marketId;
+
+    private String year;
+
+    private Long exchareaid;
+}

+ 17 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/tradingmarket/goodssetup/GoodsUspendedQueryResult.java

@@ -0,0 +1,17 @@
+package com.muchinfo.mtp3pojos.vo.tradingmarket.goodssetup;
+
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Builder
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(value="GoodsUspendedQueryResult对象", description="商品停牌设置")
+public class GoodsUspendedQueryResult {
+
+    private String closedate;
+}

+ 31 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/tradingmarket/goodssetup/WarehouseInfoParam.java

@@ -0,0 +1,31 @@
+package com.muchinfo.mtp3pojos.vo.tradingmarket.goodssetup;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+@Builder
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@ApiModel(value="WarehouseInfoParam对象", description="商品设置响应")
+public class WarehouseInfoParam {
+
+    private Integer ischecked;
+
+    @ApiModelProperty(value = "升贴水")
+    private BigDecimal premiumvalue;
+
+    private Long dgfactoryitemid;
+
+    @ApiModelProperty(value = "仓库名称")
+    private String warehousename;
+
+    @ApiModelProperty(value = "仓库地址")
+    private String detailAddress;
+}