作者 Win10-2023FDZSZ\Administrator

询价、投标时部分字段的动态取值、投标增加审批功能

@@ -2,6 +2,7 @@ package org.jeecg.modules.erp.trade.controller; @@ -2,6 +2,7 @@ package org.jeecg.modules.erp.trade.controller;
2 2
3 import java.io.UnsupportedEncodingException; 3 import java.io.UnsupportedEncodingException;
4 import java.io.IOException; 4 import java.io.IOException;
  5 +import java.math.BigDecimal;
5 import java.net.URLDecoder; 6 import java.net.URLDecoder;
6 import java.util.*; 7 import java.util.*;
7 import java.util.stream.Collectors; 8 import java.util.stream.Collectors;
@@ -10,8 +11,11 @@ import javax.servlet.http.HttpServletRequest; @@ -10,8 +11,11 @@ import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse; 11 import javax.servlet.http.HttpServletResponse;
11 12
12 import cn.hutool.core.collection.CollectionUtil; 13 import cn.hutool.core.collection.CollectionUtil;
  14 +import cn.hutool.core.lang.Opt;
  15 +import cn.hutool.core.util.ObjectUtil;
13 import cn.hutool.core.util.StrUtil; 16 import cn.hutool.core.util.StrUtil;
14 import org.jeecg.modules.erp.trade.entity.*; 17 import org.jeecg.modules.erp.trade.entity.*;
  18 +import org.jeecg.modules.erp.trade.mapper.TblTradeBidMaterialDetailsMapper;
15 import org.jeecg.modules.erp.trade.service.*; 19 import org.jeecg.modules.erp.trade.service.*;
16 import com.baomidou.mybatisplus.core.toolkit.Wrappers; 20 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
17 import org.jeecg.modules.erp.trade.entity.TblTradeInventoryIn; 21 import org.jeecg.modules.erp.trade.entity.TblTradeInventoryIn;
@@ -65,6 +69,10 @@ public class TblTradeBidSubController { @@ -65,6 +69,10 @@ public class TblTradeBidSubController {
65 private ITblTradeInventoryInService tblTradeInventoryInService; 69 private ITblTradeInventoryInService tblTradeInventoryInService;
66 @Autowired 70 @Autowired
67 private ITblTradePurchaseInfoService tblTradePurchaseInfoService; 71 private ITblTradePurchaseInfoService tblTradePurchaseInfoService;
  72 + @Autowired
  73 + private ITblTradeInventoryService tblTradeInventoryService;
  74 + @Autowired
  75 + private TblTradeBidMaterialDetailsMapper tblTradeBidMaterialDetailsMapper;
68 76
69 /** 77 /**
70 * 分页列表查询 78 * 分页列表查询
@@ -89,12 +97,34 @@ public class TblTradeBidSubController { @@ -89,12 +97,34 @@ public class TblTradeBidSubController {
89 IPage <TblTradeBidSub> page = new Page<>(); 97 IPage <TblTradeBidSub> page = new Page<>();
90 List<TblTradeBidSub> tblTradeBidSubList = tblTradeBidSubService.list(queryWrapper); 98 List<TblTradeBidSub> tblTradeBidSubList = tblTradeBidSubService.list(queryWrapper);
91 List<TblTradeTenderInfo> tenderInfoList = tblTradeTenderInfoService.list(null); 99 List<TblTradeTenderInfo> tenderInfoList = tblTradeTenderInfoService.list(null);
  100 + List<TblTradeInventory> inventoryList = tblTradeInventoryService.list(null);
  101 + List<TblTradeBidMaterialDetails> lastBidDataList = tblTradeBidMaterialDetailsMapper.getLastBidData();
92 tblTradeBidSubList.forEach(e->{ 102 tblTradeBidSubList.forEach(e->{
93 e.setTenderInfo(tenderInfoList.stream().filter(i->StrUtil.equals(i.getId(),e.getTradeId())).findFirst().get()); 103 e.setTenderInfo(tenderInfoList.stream().filter(i->StrUtil.equals(i.getId(),e.getTradeId())).findFirst().get());
  104 + // 库存数据、在途库存
  105 + TblTradeInventory tblTradeInventory = inventoryList.stream()
  106 + .filter(i -> StrUtil.equals(i.getMaterialCode(), e.getWlbm())).findFirst().orElse(null);
  107 + e.setKcsj(Opt.ofNullable(tblTradeInventory)
  108 + .map(TblTradeInventory::getActualInventory).orElse(0).toString());
  109 + e.setZtkf(Opt.ofNullable(tblTradeInventory)
  110 + .map(TblTradeInventory::getQuantityInTransit).orElse(0).toString());
  111 +
  112 + // 最近中标单价、最后一次中标时间
  113 + TblTradeBidMaterialDetails bidMaterialDetails = lastBidDataList.stream()
  114 + .filter(i -> StrUtil.equals(i.getMaterialCode(), e.getWlbm())).findFirst().orElse(null);
  115 + BigDecimal zjzbdj = Opt.ofNullable(bidMaterialDetails).map(TblTradeBidMaterialDetails::getWinningBidPrice)
  116 + .orElse(null);
  117 + if (ObjectUtil.isNotNull(zjzbdj)){
  118 + e.setZjzbdj(zjzbdj.toPlainString());
  119 + }
  120 + e.setZhzbsj(Opt.ofNullable(bidMaterialDetails).map(TblTradeBidMaterialDetails::getBidDate)
  121 + .orElse(""));
94 122
95 - // TODO 获取库存数据、在途库存、最近中标单价、最后一次中标时间  
96 123
97 }); 124 });
  125 +
  126 +
  127 +
98 page.setRecords(tblTradeBidSubList); 128 page.setRecords(tblTradeBidSubList);
99 page.setTotal(tblTradeBidSubList.size()); 129 page.setTotal(tblTradeBidSubList.size());
100 130
@@ -484,12 +514,33 @@ public class TblTradeBidSubController { @@ -484,12 +514,33 @@ public class TblTradeBidSubController {
484 * @return 514 * @return
485 */ 515 */
486 @RequestMapping("getBidSubData") 516 @RequestMapping("getBidSubData")
487 - public Result<TblTradeBidSub> getBidSubData(@RequestBody TblTradeBidSub tblTradeBidSub){ 517 + public Result<TblTradeBidSub> getBidSubData(@RequestBody TblTradeBidSub tblTradeBidSub) {
488 518
489 TblTradeBidSub data = tblTradeBidSubService.getOne(Wrappers.lambdaQuery(TblTradeBidSub.class) 519 TblTradeBidSub data = tblTradeBidSubService.getOne(Wrappers.lambdaQuery(TblTradeBidSub.class)
490 .eq(TblTradeBidSub::getTradeId, tblTradeBidSub.getTradeId())); 520 .eq(TblTradeBidSub::getTradeId, tblTradeBidSub.getTradeId()));
491 521
492 - // TODO 获取库存数据、在途库存、最近中标单价、最后一次中标时间 522 + // 获取库存数据、在途库存、最近中标单价、最后一次中标时间
  523 + List<TblTradeInventory> inventoryList = tblTradeInventoryService.list(null);
  524 + List<TblTradeBidMaterialDetails> lastBidDataList = tblTradeBidMaterialDetailsMapper.getLastBidData();
  525 +
  526 + // 库存数据、在途库存
  527 + TblTradeInventory tblTradeInventory = inventoryList.stream()
  528 + .filter(e -> StrUtil.equals(e.getMaterialCode(), data.getWlbm())).findFirst().orElse(null);
  529 + data.setKcsj(Opt.ofNullable(tblTradeInventory)
  530 + .map(TblTradeInventory::getActualInventory).orElse(0).toString());
  531 + data.setZtkf(Opt.ofNullable(tblTradeInventory)
  532 + .map(TblTradeInventory::getQuantityInTransit).orElse(0).toString());
  533 +
  534 + // 最近中标单价、最后一次中标时间
  535 + TblTradeBidMaterialDetails bidMaterialDetails = lastBidDataList.stream()
  536 + .filter(e -> StrUtil.equals(e.getMaterialCode(), data.getWlbm())).findFirst().orElse(null);
  537 + BigDecimal zjzbdj = Opt.ofNullable(bidMaterialDetails).map(TblTradeBidMaterialDetails::getWinningBidPrice)
  538 + .orElse(null);
  539 + if (ObjectUtil.isNotNull(zjzbdj)){
  540 + data.setZjzbdj(zjzbdj.toPlainString());
  541 + }
  542 + data.setZhzbsj(Opt.ofNullable(bidMaterialDetails).map(TblTradeBidMaterialDetails::getBidDate)
  543 + .orElse(""));
493 544
494 TblTradeTenderInfo tenderInfo = tblTradeTenderInfoService.getById(tblTradeBidSub.getTradeId()); 545 TblTradeTenderInfo tenderInfo = tblTradeTenderInfoService.getById(tblTradeBidSub.getTradeId());
495 data.setTenderInfo(tenderInfo); 546 data.setTenderInfo(tenderInfo);
@@ -499,6 +550,31 @@ public class TblTradeBidSubController { @@ -499,6 +550,31 @@ public class TblTradeBidSubController {
499 550
500 551
501 /** 552 /**
  553 + * 投标主管审批
  554 + *
  555 + * @param tblTradeBidSubPage
  556 + * @return
  557 + */
  558 + @AutoLog(value = "投标主管审批")
  559 + @ApiOperation(value="投标主管审批", notes="投标主管审批")
  560 + @RequestMapping(value = "/bidApproval", method = {RequestMethod.PUT,RequestMethod.POST})
  561 + public Result<String> bidApproval(@RequestBody TblTradeBidSubPage tblTradeBidSubPage) {
  562 + TblTradeBidSub tblTradeBidSub = new TblTradeBidSub();
  563 + BeanUtils.copyProperties(tblTradeBidSubPage, tblTradeBidSub);
  564 +
  565 + TblTradeBidSub tblTradeBidSubEntity = tblTradeBidSubService.getById(tblTradeBidSub.getId());
  566 + if(tblTradeBidSubEntity==null) {
  567 + return Result.error("未找到对应数据");
  568 + }
  569 +
  570 + // 投标审核状态:0-询价中、1-询价完成、2-投标待审核、3-投标审核完成
  571 + tblTradeBidSub.setStatus("3");
  572 + tblTradeBidSubService.updateById(tblTradeBidSub);
  573 + return Result.OK("审批成功!");
  574 + }
  575 +
  576 +
  577 + /**
502 * 获取本次投标信息 578 * 获取本次投标信息
503 */ 579 */
504 @RequestMapping("getBidInfo") 580 @RequestMapping("getBidInfo")
@@ -256,7 +256,10 @@ public class TblTradeBidSub implements Serializable { @@ -256,7 +256,10 @@ public class TblTradeBidSub implements Serializable {
256 @Excel(name = "需求单位", width = 15) 256 @Excel(name = "需求单位", width = 15)
257 @ApiModelProperty(value = "需求单位") 257 @ApiModelProperty(value = "需求单位")
258 private java.lang.String zbxqdw; 258 private java.lang.String zbxqdw;
259 - 259 + /**投标状态*/
  260 + @Excel(name = "投标状态", width = 15)
  261 + @ApiModelProperty(value = "投标状态")
  262 + private java.lang.String status;
260 263
261 264
262 @TableField(exist = false) 265 @TableField(exist = false)
@@ -20,4 +20,9 @@ public interface TblTradeBidMaterialDetailsMapper extends BaseMapper<TblTradeBid @@ -20,4 +20,9 @@ public interface TblTradeBidMaterialDetailsMapper extends BaseMapper<TblTradeBid
20 IPage<Map<String, Object>> pageList(Page<TblTradeBidMaterialDetails> page, @Param("param")TblTradeBidMaterialDetails tradeBidMaterialDetails); 20 IPage<Map<String, Object>> pageList(Page<TblTradeBidMaterialDetails> page, @Param("param")TblTradeBidMaterialDetails tradeBidMaterialDetails);
21 21
22 Map<String, Object> getHistoryBidInfo(@Param("materialCode")String materialCode); 22 Map<String, Object> getHistoryBidInfo(@Param("materialCode")String materialCode);
  23 + /**
  24 + * 获取最近一次中标情况
  25 + * @return
  26 + */
  27 + List<TblTradeBidMaterialDetails> getLastBidData();
23 } 28 }
@@ -23,6 +23,7 @@ @@ -23,6 +23,7 @@
23 ORDER BY 23 ORDER BY
24 bid_num; 24 bid_num;
25 </select> 25 </select>
  26 +
26 <select id="getHistoryBidInfo" resultType="java.util.Map"> 27 <select id="getHistoryBidInfo" resultType="java.util.Map">
27 SELECT 28 SELECT
28 bid_date AS lastBidDate, 29 bid_date AS lastBidDate,
@@ -35,4 +36,12 @@ @@ -35,4 +36,12 @@
35 ORDER BY bid_date DESC 36 ORDER BY bid_date DESC
36 LIMIT 1; 37 LIMIT 1;
37 </select> 38 </select>
  39 +
  40 + <select id="getLastBidData" resultType="org.jeecg.modules.erp.trade.entity.TblTradeBidMaterialDetails">
  41 + select * from tbl_trade_bid_material_details a
  42 + join
  43 + (SELECT material_code,max(bid_date) as bid_date FROM `tbl_trade_bid_material_details`
  44 + GROUP BY material_code) b
  45 + on b.material_code=a.material_code and b.bid_date=a.bid_date
  46 + </select>
38 </mapper> 47 </mapper>
@@ -54,11 +54,13 @@ public class TblTradeBidSubServiceImpl extends ServiceImpl<TblTradeBidSubMapper, @@ -54,11 +54,13 @@ public class TblTradeBidSubServiceImpl extends ServiceImpl<TblTradeBidSubMapper,
54 @Override 54 @Override
55 @Transactional(rollbackFor = Exception.class) 55 @Transactional(rollbackFor = Exception.class)
56 public void updateMain(TblTradeBidSub tblTradeBidSub,List<TblTradeInquiryInfo> tblTradeInquiryInfoList) { 56 public void updateMain(TblTradeBidSub tblTradeBidSub,List<TblTradeInquiryInfo> tblTradeInquiryInfoList) {
  57 + // 投标审核状态:0-询价中、1-询价完成、2-投标待审核、3-投标审核完成
  58 + tblTradeBidSub.setStatus("2");
57 tblTradeBidSubMapper.updateById(tblTradeBidSub); 59 tblTradeBidSubMapper.updateById(tblTradeBidSub);
58 60
59 -  
60 } 61 }
61 62
  63 + @Transactional(rollbackFor = Exception.class)
62 @Override 64 @Override
63 public void inquiryApproval(TblTradeBidSub tblTradeBidSub, List<TblTradeInquiryInfo> tblTradeInquiryInfoList) { 65 public void inquiryApproval(TblTradeBidSub tblTradeBidSub, List<TblTradeInquiryInfo> tblTradeInquiryInfoList) {
64 // 更新投标参考价, 66 // 更新投标参考价,
@@ -94,6 +96,13 @@ public class TblTradeBidSubServiceImpl extends ServiceImpl<TblTradeBidSubMapper, @@ -94,6 +96,13 @@ public class TblTradeBidSubServiceImpl extends ServiceImpl<TblTradeBidSubMapper,
94 .eq(TblTradePriceInquiry::getXjbswjh, tblTradeBidSub.getXjbswjh()); 96 .eq(TblTradePriceInquiry::getXjbswjh, tblTradeBidSub.getXjbswjh());
95 tblTradePriceInquiryMapper.update(null,updateWrapper2); 97 tblTradePriceInquiryMapper.update(null,updateWrapper2);
96 } 98 }
  99 +
  100 + // 审批通过,更新投标表的状态,投标审核状态:0-询价中、1-询价完成、2-投标待审核、3-投标审核完成
  101 + if (StrUtil.equals(status,"3")){
  102 + tblTradeBidSubMapper.update(null,Wrappers.lambdaUpdate(TblTradeBidSub.class)
  103 + .set(TblTradeBidSub::getStatus, "1")
  104 + .eq(TblTradeBidSub::getId, tblTradeBidSub.getId()));
  105 + }
97 } 106 }
98 107
99 108
@@ -106,6 +106,8 @@ public class TblTradeTenderInfoServiceImpl extends ServiceImpl<TblTradeTenderInf @@ -106,6 +106,8 @@ public class TblTradeTenderInfoServiceImpl extends ServiceImpl<TblTradeTenderInf
106 bidSub.setXjbswjh(e.getXjbswjh()); 106 bidSub.setXjbswjh(e.getXjbswjh());
107 bidSub.setWlbm(e.getCode()); 107 bidSub.setWlbm(e.getCode());
108 bidSub.setMiaoshu(e.getMiaoshu()); 108 bidSub.setMiaoshu(e.getMiaoshu());
  109 + // 投标审核状态:0-询价中、1-询价完成、2-投标待审核、3-投标审核完成
  110 + bidSub.setStatus("0");
109 bidSubList.add(bidSub); 111 bidSubList.add(bidSub);
110 // 排除掉库里已有的物料 112 // 排除掉库里已有的物料
111 TblTradeMeterial tradeMeterial = meterialList.stream().filter(i -> StrUtil.equals(i.getMeterialCode(), e.getCode())) 113 TblTradeMeterial tradeMeterial = meterialList.stream().filter(i -> StrUtil.equals(i.getMeterialCode(), e.getCode()))
@@ -33,7 +33,7 @@ @@ -33,7 +33,7 @@
33 <ojdbc6.version>11.2.0.3</ojdbc6.version> 33 <ojdbc6.version>11.2.0.3</ojdbc6.version>
34 <sqljdbc4.version>4.0</sqljdbc4.version> 34 <sqljdbc4.version>4.0</sqljdbc4.version>
35 <mysql-connector-java.version>8.0.27</mysql-connector-java.version> 35 <mysql-connector-java.version>8.0.27</mysql-connector-java.version>
36 - <hutool.version>5.3.8</hutool.version> 36 + <hutool.version>5.8.26</hutool.version>
37 <redisson.version>3.16.1</redisson.version> 37 <redisson.version>3.16.1</redisson.version>
38 <commons-beanutils.version>1.9.4</commons-beanutils.version> 38 <commons-beanutils.version>1.9.4</commons-beanutils.version>
39 <guava.version>29.0-jre</guava.version> 39 <guava.version>29.0-jre</guava.version>