Explorar o código

项目管理-采购执行

suntianwu %!s(int64=2) %!d(string=hai) anos
pai
achega
4dc221089a

+ 70 - 4
purchase-admin/src/main/java/com/ozs/web/controller/pm/PmPurchaseExecutionController.java

@@ -3,16 +3,23 @@ package com.ozs.web.controller.pm;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ozs.base.domain.BaseAgency;
+import com.ozs.base.domain.BaseExpert;
+import com.ozs.base.domain.vo.BaseExpertVo;
 import com.ozs.base.service.BaseAgencyService;
+import com.ozs.base.service.BaseExpertService;
 import com.ozs.common.annotation.Log;
 import com.ozs.common.constant.ModularConstans;
 import com.ozs.common.core.controller.BaseController;
 import com.ozs.common.core.domain.AjaxResult;
 import com.ozs.common.enums.BusinessType;
+import com.ozs.common.enums.NameListType;
 import com.ozs.common.enums.SysFileRefEnum;
+import com.ozs.common.utils.StringUtils;
 import com.ozs.pm.doman.PmDemand;
 import com.ozs.pm.doman.PmReleaseAnnouncement;
+import com.ozs.pm.doman.vo.requestVo.PmBaseExpertReqVo;
 import com.ozs.pm.doman.vo.requestVo.PmDemandReqVo;
 import com.ozs.pm.doman.vo.requestVo.PmPurchaseExecutionReqVo;
 import com.ozs.pm.doman.vo.requestVo.PmReleaseAnnouncementReqVo;
@@ -23,6 +30,7 @@ import com.ozs.system.domain.SysFileRef;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.util.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -46,7 +54,8 @@ public class PmPurchaseExecutionController extends BaseController {
     private IPmDemandService pmDemandService;
     @Autowired
     private BaseAgencyService baseAgencyService;
-
+    @Autowired
+    private BaseExpertService baseExpertService;
 
     /**
      * 采购执行查询列表
@@ -156,14 +165,71 @@ public class PmPurchaseExecutionController extends BaseController {
     }
 
     @ApiOperation(value = "发布公告")
-    @PostMapping("/insertBaseAgency")
-    public AjaxResult insertBaseAgency(@NotEmpty(message = "数据为空")
+    @PostMapping("/insertPmReleaseAnnouncement")
+    public AjaxResult insertPmReleaseAnnouncement(@NotEmpty(message = "数据为空")
                                        @RequestBody PmReleaseAnnouncementReqVo pmReleaseAnnouncementReqVo) {
         pmReleaseAnnouncementReqVo.setCreateBy(getUserId().toString());
         pmReleaseAnnouncementReqVo.setCreateTime(new Date());
         pmReleaseAnnouncementReqVo.setUpdateBy(pmReleaseAnnouncementReqVo.getCreateBy());
         pmReleaseAnnouncementReqVo.setUpdateTime(pmReleaseAnnouncementReqVo.getCreateTime());
-        return toAjax(pmDemandService.insertBaseAgency(pmReleaseAnnouncementReqVo));
+        return toAjax(pmDemandService.insertPmReleaseAnnouncement(pmReleaseAnnouncementReqVo));
+    }
+
+    @ApiOperation(value = "获取专家身份证号列表")
+    @PostMapping("/getExpertIdNumberList")
+    public AjaxResult getExpertIdNumberList(@NotEmpty(message = "采购需求id不能为空")
+                                                @RequestParam(value = "demandId", required = true) Long demandId) {
+        PmDemand pmDemand = pmDemandService.getById(demandId);
+        if(ObjectUtils.isEmpty(pmDemand)){
+            return error("参数错误");
+        }
+
+        LambdaQueryWrapper<BaseExpert> lw = new LambdaQueryWrapper<BaseExpert>();
+        lw.eq(BaseExpert::getVarietyPurchase,pmDemand.getProjectType())
+                .eq(BaseExpert::getStatus,NameListType.WHITE.getCode());
+        BaseExpert baseExpert = baseExpertService.getOne(lw);
+        return success(baseExpert);
     }
 
+    @ApiOperation(value = "根据身份证号查询专家", notes = "必传 查询条件:身份证号")
+    @PostMapping("/findExpertWithIdNumber")
+    public AjaxResult findExpertWithIdNumber(@NotEmpty(message = "采购需求id不能为空")
+                                                 @RequestParam(value = "demandId", required = true) Long demandId,
+                                             @NotEmpty(message = "身份证号不能为空")
+                                       @RequestParam(value = "idNumber", required = true) String idNumber) {
+        PmDemand pmDemand = pmDemandService.getById(demandId);
+        if(ObjectUtils.isEmpty(pmDemand)){
+            return error("参数错误");
+        }
+        LambdaQueryWrapper<BaseExpert> lw = new LambdaQueryWrapper<BaseExpert>();
+        lw.eq(BaseExpert::getIdNumber,idNumber);
+        BaseExpert baseExpert = baseExpertService.getOne(lw);
+        if(baseExpert != null){
+            if(baseExpert.getStatus().equals(NameListType.WHITE.getCode())){
+                return error("该专家属于黑名单");
+            }
+            if(pmDemand.getProjectType().equals(baseExpert.getVarietyPurchase())){
+                return error("该专家所属采购品种和项目类型不匹配");
+            }
+        }
+
+        return success(baseExpert);
+    }
+
+
+    @ApiOperation(value = "填写专家信息批量提交", notes = "必传 采购需求ID和专家信息列表,注意:若该专家已经在库里存在,需要传专家对象BaseExpert的ID")
+    @PostMapping("/insertExpertBatch")
+    @PreAuthorize("@ss.hasPermi('pm:purchaseExecution:insertExpertBatch')")
+    @Log(title = ModularConstans.purchaseExecution, businessType = BusinessType.INSERT)
+    public AjaxResult insertExpertBatch(@RequestBody PmBaseExpertReqVo pmBaseExpertReqVo) {
+        if (ObjectUtils.isEmpty(pmBaseExpertReqVo) || ObjectUtils.isEmpty(pmBaseExpertReqVo.getDemandId()) || ObjectUtils.isEmpty(pmBaseExpertReqVo.getBaseExpertList())) {
+            return error("参数错误");
+        }
+        try {
+            return toAjax(pmDemandService.insertExpertBatch(pmBaseExpertReqVo));
+        } catch (Exception e) {
+            return error(e.getMessage());
+        }
+
+    }
 }

+ 12 - 0
purchase-common/src/main/java/com/ozs/common/constant/ModularConstans.java

@@ -13,4 +13,16 @@ public class ModularConstans {
     public static final String fileTemplate = "文件模板管理";
 
     public static final String monthly = "月度对表";
+
+    public static final String demand = "采购需求管理";
+
+    public static final String demandExamine = "采购需求审核";
+
+    public static final String taskRelease = "任务下达管理";
+
+    public static final String purchaseExecution = "采购执行管理";
+
+    public static final String contractInfo = "合同信息管理";
+
+    public static final String projectConstruction = "项目建设管理";
 }

+ 70 - 0
purchase-system/src/main/java/com/ozs/pm/doman/PmDemandExpertRef.java

@@ -0,0 +1,70 @@
+package com.ozs.pm.doman;
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 项目专家关联表(PmDemandExpertRef)实体类
+ *
+ * @author makejava
+ * @since 2023-02-03 15:37:02
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("pm_demand_expert_ref")
+@ApiModel(value = "项目专家关联表", description = "")
+public class PmDemandExpertRef implements Serializable {
+    private static final long serialVersionUID = 193148255064096336L;
+
+    @TableId(value = "ID", type = IdType.AUTO)
+    private Long id;
+
+
+    @ApiModelProperty("需求ID")
+    @TableField("DEMAND_ID")
+    private Long demandId;
+
+
+    @ApiModelProperty("专家ID")
+    @TableField("EXPERT_ID")
+    private Long expertId;
+
+
+    @ApiModelProperty("创建者")
+    @TableField("CREATE_BY")
+    private String createBy;
+
+
+    @ApiModelProperty("创建时间")
+    @TableField("CREATE_TIME")
+    private Date createTime;
+
+
+    @ApiModelProperty("更新者")
+    @TableField("UPDATE_BY")
+    private String updateBy;
+
+
+    @ApiModelProperty("更新时间")
+    @TableField("UPDATE_TIME")
+    private Date updateTime;
+
+
+}

+ 18 - 0
purchase-system/src/main/java/com/ozs/pm/doman/vo/requestVo/PmBaseExpertReqVo.java

@@ -0,0 +1,18 @@
+package com.ozs.pm.doman.vo.requestVo;
+
+import com.ozs.base.domain.BaseExpert;
+import com.ozs.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PmBaseExpertReqVo extends BaseEntity {
+
+    @ApiModelProperty("需求ID")
+    private Long demandId;
+
+    @ApiModelProperty("专家信息列表")
+    private List<BaseExpert> baseExpertList;
+}

+ 15 - 0
purchase-system/src/main/java/com/ozs/pm/mapper/PmDemandExpertRefMapper.java

@@ -0,0 +1,15 @@
+package com.ozs.pm.mapper;
+
+import com.ozs.pm.doman.PmDemandExpertRef;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+
+/**
+ * 项目专家关联表(PmDemandExpertRef)表数据库访问层
+ *
+ * @author makejava
+ * @since 2023-02-03 15:37:07
+ */
+public interface PmDemandExpertRefMapper extends BaseMapper<PmDemandExpertRef> {
+
+}

+ 6 - 1
purchase-system/src/main/java/com/ozs/pm/service/IPmDemandService.java

@@ -3,7 +3,9 @@ package com.ozs.pm.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ozs.base.domain.BaseExpert;
 import com.ozs.pm.doman.PmDemand;
+import com.ozs.pm.doman.vo.requestVo.PmBaseExpertReqVo;
 import com.ozs.pm.doman.vo.requestVo.PmBookBuildingReqVo;
 import com.ozs.pm.doman.vo.requestVo.PmDemandReqVo;
 import com.ozs.pm.doman.vo.requestVo.PmReleaseAnnouncementReqVo;
@@ -112,5 +114,8 @@ public interface IPmDemandService extends IService<PmDemand>
 
     boolean uploadFile(Long redId,Integer fileType, List<SysFileRef> sysFileRefs,String upateBy);
 
-    boolean insertBaseAgency(PmReleaseAnnouncementReqVo pmReleaseAnnouncementReqVo);
+    boolean insertPmReleaseAnnouncement(PmReleaseAnnouncementReqVo pmReleaseAnnouncementReqVo);
+
+    boolean insertExpertBatch(PmBaseExpertReqVo pmBaseExpertReqVo) throws Exception;
+
 }

+ 14 - 0
purchase-system/src/main/java/com/ozs/pm/service/PmDemandExpertRefService.java

@@ -0,0 +1,14 @@
+package com.ozs.pm.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ozs.pm.doman.PmDemandExpertRef;
+
+/**
+ * 项目专家关联表(PmDemandExpertRef)表服务接口
+ *
+ * @author makejava
+ * @since 2023-02-03 15:37:07
+ */
+public interface PmDemandExpertRefService extends IService<PmDemandExpertRef> {
+
+}

+ 18 - 0
purchase-system/src/main/java/com/ozs/pm/service/impl/PmDemandExpertRefServiceImpl.java

@@ -0,0 +1,18 @@
+package com.ozs.pm.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ozs.pm.mapper.PmDemandExpertRefMapper;
+import com.ozs.pm.doman.PmDemandExpertRef;
+import com.ozs.pm.service.PmDemandExpertRefService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 项目专家关联表(PmDemandExpertRef)表服务实现类
+ *
+ * @author makejava
+ * @since 2023-02-03 15:37:07
+ */
+@Service
+public class PmDemandExpertRefServiceImpl extends ServiceImpl<PmDemandExpertRefMapper, PmDemandExpertRef> implements PmDemandExpertRefService {
+
+}

+ 51 - 1
purchase-system/src/main/java/com/ozs/pm/service/impl/PmDemandServiceImpl.java

@@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ozs.base.domain.BaseExpert;
+import com.ozs.base.service.BaseExpertService;
 import com.ozs.common.enums.*;
 import com.ozs.common.utils.DateUtils;
 import com.ozs.common.utils.StringUtils;
@@ -25,6 +27,7 @@ import com.ozs.system.service.SysFileRefService;
 import com.ozs.system.service.SysFileService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.ObjectUtils;
 
@@ -63,6 +66,10 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
     private IPmFlowChartService iPmFlowChartService;
     @Autowired
     private PmReleaseAnnouncementService pmReleaseAnnouncementService;
+    @Autowired
+    private BaseExpertService baseExpertService;
+    @Autowired
+    private PmDemandExpertRefService pmDemandExpertRefService;
 
     /**
      * 查询采购需求
@@ -770,10 +777,53 @@ public class PmDemandServiceImpl extends ServiceImpl<PmDemandMapper, PmDemand> i
 
     }
 
-    public boolean insertBaseAgency(PmReleaseAnnouncementReqVo pmReleaseAnnouncementReqVo){
+    public boolean insertPmReleaseAnnouncement(PmReleaseAnnouncementReqVo pmReleaseAnnouncementReqVo){
         uploadFile(pmReleaseAnnouncementReqVo.getDemandId(), SysFileRefEnum.PM_BID_FILE.getType(),pmReleaseAnnouncementReqVo.getSysFileRefs(),pmReleaseAnnouncementReqVo.getUpdateBy());
         PmReleaseAnnouncement pmReleaseAnnouncement = new PmReleaseAnnouncement();
         BeanUtils.copyProperties(pmReleaseAnnouncementReqVo,pmReleaseAnnouncement);
         return pmReleaseAnnouncementService.save(pmReleaseAnnouncement);
     }
+
+    @Transactional(rollbackFor = Exception.class)
+    public boolean insertExpertBatch(PmBaseExpertReqVo pmBaseExpertReqVo) throws Exception {
+        PmDemand pmDemand = this.getById(pmBaseExpertReqVo.getDemandId());
+        if(ObjectUtils.isEmpty(pmDemand)){
+            throw new Exception("参数错误");
+        }
+        List<BaseExpert> baseExpertList = pmBaseExpertReqVo.getBaseExpertList();
+        List<PmDemandExpertRef> pmDemandExpertRefList = new ArrayList<>();
+        for (BaseExpert baseExpert : baseExpertList) {
+            if(baseExpert.getStatus().equals(NameListType.WHITE.getCode())){
+                throw new Exception("该专家属于黑名单");
+            }
+            if(pmDemand.getProjectType().equals(baseExpert.getVarietyPurchase())){
+                throw new Exception("该专家所属采购品种和项目类型不匹配");
+            }
+            if(ObjectUtils.isEmpty(pmDemand.getCreateBy())){
+                pmDemand.setCreateBy(pmBaseExpertReqVo.getCreateBy());
+                pmDemand.setCreateTime(new Date());
+            }
+
+            if(ObjectUtils.isEmpty(pmDemand.getUpdateBy())){
+                pmDemand.setUpdateBy(pmBaseExpertReqVo.getUpdateBy());
+                pmDemand.setUpdateTime(new Date());
+            }
+
+            PmDemandExpertRef pmDemandExpertRef = new PmDemandExpertRef();
+            pmDemandExpertRef.setDemandId(pmDemand.getDemandId());
+            pmDemandExpertRef.setExpertId(baseExpert.getId().longValue());
+            pmDemandExpertRef.setCreateBy(pmBaseExpertReqVo.getCreateBy());
+            pmDemandExpertRef.setCreateTime(new Date());
+            pmDemandExpertRef.setUpdateBy(pmBaseExpertReqVo.getCreateBy());
+            pmDemandExpertRef.setUpdateTime(pmDemandExpertRef.getCreateTime());
+            pmDemandExpertRefList.add(pmDemandExpertRef);
+        }
+
+          if (baseExpertService.saveOrUpdateBatch(baseExpertList)){
+              return pmDemandExpertRefService.saveBatch(pmDemandExpertRefList);
+          } else {
+              return false;
+          }
+
+    }
 }

+ 6 - 0
purchase-system/src/main/resources/mapper/pm/PmDemandExpertRefMapper.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ozs.pm.mapper.PmDemandExpertRefMapper">
+
+
+</mapper>