ソースを参照

合同二级类型

QuYueTing 8 ヶ月 前
コミット
a0e6b1eeae

+ 55 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ContractTypeSecController.java

@@ -0,0 +1,55 @@
+package com.management.platform.controller;
+
+
+import com.management.platform.entity.ContractType;
+import com.management.platform.entity.ContractTypeSec;
+import com.management.platform.service.ContractTypeSecService;
+import com.management.platform.service.ContractTypeService;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-09-14
+ */
+@RestController
+@RequestMapping("/contract-type-sec")
+public class ContractTypeSecController {
+    @Resource
+    private ContractTypeSecService contractTypeSecService;
+
+    /**
+     * 返回公司自定义合同类型
+     */
+    @RequestMapping("/getContractType")
+    public HttpRespMsg getContractType (HttpServletRequest request){
+
+        return contractTypeSecService.getContractType(request);
+    }
+
+    /**
+     * 新增、修改合同类型
+     */
+    @RequestMapping("/changeContractType")
+    public HttpRespMsg changeContractType (HttpServletRequest request, ContractTypeSec contractType){
+        return contractTypeSecService.changeContractType(request,contractType);
+    }
+
+    /**
+     * 删除合同类型
+     */
+    @RequestMapping("/deleteContractType")
+    public HttpRespMsg deleteContractType (HttpServletRequest request, Integer deleteId){
+        return contractTypeSecService.deleteContractType(request,deleteId);
+    }
+}
+

+ 15 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Contract.java

@@ -20,7 +20,7 @@ import org.springframework.format.annotation.DateTimeFormat;
  * </p>
  *
  * @author Seyason
- * @since 2023-05-24
+ * @since 2024-09-14
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -162,6 +162,20 @@ public class Contract extends Model<Contract> {
 
     @TableField(exist = false)
     public ContractCustom customData;
+
+    /**
+     * 二级分类id
+     */
+    @TableField("sec_type_id")
+    private Integer secTypeId;
+
+    /**
+     * 二级分类名称
+     */
+    @TableField(exist = false)
+    private String secTypeName;
+
+
     @Override
     protected Serializable pkVal() {
         return this.id;

+ 62 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ContractTypeSec.java

@@ -0,0 +1,62 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-09-14
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class ContractTypeSec extends Model<ContractTypeSec> {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 合同类型id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 公司id
+     */
+    @TableField("company_id")
+    private Integer companyId;
+
+    /**
+     * 合同类型
+     */
+    @TableField("sec_type_name")
+    private String secTypeName;
+
+    /**
+     * 主类型id
+     */
+    @TableField("main_type_id")
+    private Integer mainTypeId;
+
+
+    @TableField(exist = false)
+    private String mainTypeName;
+
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ContractTypeSecMapper.java

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.ContractTypeSec;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-09-14
+ */
+public interface ContractTypeSecMapper extends BaseMapper<ContractTypeSec> {
+
+}

+ 25 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ContractTypeSecService.java

@@ -0,0 +1,25 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.ContractType;
+import com.management.platform.entity.ContractTypeSec;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.management.platform.util.HttpRespMsg;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-09-14
+ */
+public interface ContractTypeSecService extends IService<ContractTypeSec> {
+
+    HttpRespMsg getContractType(HttpServletRequest request);
+
+    HttpRespMsg changeContractType(HttpServletRequest request, ContractTypeSec contractTypeSec);
+
+    HttpRespMsg deleteContractType(HttpServletRequest request, Integer deleteId);
+}

+ 9 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ContractServiceImpl.java

@@ -20,6 +20,7 @@ import org.apache.ibatis.annotations.Select;
 import org.apache.poi.EncryptedDocumentException;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.ss.usermodel.*;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -80,6 +81,8 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> i
     private CompanyDingdingMapper companyDingdingMapper;
     @Value(value = "${upload.path}")
     private String path;
+    @Autowired
+    private ContractTypeSecMapper contractTypeSecMapper;
 
     /**
      * 分页查询合同
@@ -157,7 +160,7 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> i
             ArrayList<ContractPageVO> contractPageVOS = new ArrayList<>();
             List<Map<String, Object>> contractLogs = contractLogMapper.selectMsg(user.getCompanyId());
             List<ContractCustom> customList = contractCustomMapper.selectList(new QueryWrapper<ContractCustom>().in("contract_id", contractCollect));
-
+            List<ContractTypeSec> secTypeList = contractTypeSecMapper.selectList(new QueryWrapper<ContractTypeSec>().eq("company_id", user.getCompanyId()));
             for (Contract contract : contracts) {
                 ContractPageVO contractPageVO = new ContractPageVO();
                 List<ContractDocument> files = new ArrayList<>();
@@ -174,6 +177,11 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> i
                 contractPageVO.setStatus(contract.getStatus());
                 contractPageVO.setTypeId(contract.getTypeId());
                 contractPageVO.setTypeName(contract.getTypeName());
+                contractPageVO.setSecTypeId(contract.getSecTypeId());
+                if (contract.getSecTypeId() != null) {
+                    String secTypeName = secTypeList.stream().filter(c -> c.getId().equals(contract.getSecTypeId())).findFirst().get().getSecTypeName();
+                    contractPageVO.setSecTypeName(secTypeName);
+                }
                 contractPageVO.setCheckerId(contract.getCheckerId());
                 contractPageVO.setRemarks(contract.getRemarks());
                 contractPageVO.setAmounts(contract.getAmounts());

+ 135 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ContractTypeSecServiceImpl.java

@@ -0,0 +1,135 @@
+package com.management.platform.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.Contract;
+import com.management.platform.entity.ContractType;
+import com.management.platform.entity.ContractTypeSec;
+import com.management.platform.entity.User;
+import com.management.platform.entity.vo.SysRichFunction;
+import com.management.platform.mapper.*;
+import com.management.platform.service.ContractTypeSecService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.management.platform.service.ExcelExportService;
+import com.management.platform.util.HttpRespMsg;
+import com.management.platform.util.MessageUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2024-09-14
+ */
+@Service
+public class ContractTypeSecServiceImpl extends ServiceImpl<ContractTypeSecMapper, ContractTypeSec> implements ContractTypeSecService {
+    @Resource
+    private ContractTypeSecMapper contractTypeSecMapper;
+    @Resource
+    private ContractTypeMapper contractTypeMapper;
+    @Resource
+    private ContractMapper contractMapper;
+    @Resource
+    private UserMapper userMapper;
+    @Resource
+    private SysFunctionMapper sysFunctionMapper;
+
+    /**
+     * 返回公司自定义合同类型
+     * @param request
+     * @return
+     */
+    @Override
+    public HttpRespMsg getContractType(HttpServletRequest request) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        String token = request.getHeader("token");
+        User user = userMapper.selectById(token);
+        List<SysRichFunction> functionContractList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全部合同");
+        if(functionContractList.size() <= 0){
+            return httpRespMsg;
+        }
+        List<ContractTypeSec> types = contractTypeSecMapper.selectList(new QueryWrapper<ContractTypeSec>().eq("company_id", user.getCompanyId()));
+        List<ContractType> mainList = contractTypeMapper.selectList(new QueryWrapper<ContractType>().eq("company_id", user.getCompanyId()));
+        for (ContractTypeSec secType : types) {
+            secType.setMainTypeName(mainList.stream().filter(mainType -> mainType.getId().equals(secType.getMainTypeId())).findFirst().get().getTypeName());
+        }
+        httpRespMsg.data = types;
+        return httpRespMsg;
+    }
+
+    /**
+     * 新增、修改合同类型
+     * @param request
+     * @param contractType
+     * @return
+     */
+    @Override
+    public HttpRespMsg changeContractType(HttpServletRequest request, ContractTypeSec contractType) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        String token = request.getHeader("token");
+        User user = userMapper.selectById(token);
+        List<SysRichFunction> functionContractList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "合同类型管理");
+        if(functionContractList.size() <= 0){
+            httpRespMsg.setError(MessageUtils.message("access.operationError"));
+            return httpRespMsg;
+        }
+        if (StringUtils.isBlank(contractType.getSecTypeName())){
+            //合同类型名不可为空
+            httpRespMsg.setError(MessageUtils.message("contract.typeNameEmpty"));
+            return httpRespMsg;
+        }
+        List<ContractTypeSec> types = contractTypeSecMapper.selectList(new QueryWrapper<ContractTypeSec>().eq("company_id", user.getCompanyId()));
+        //新增或修改自定义类型
+        for (ContractTypeSec type : types) {
+            if (type.getSecTypeName().equals(contractType.getSecTypeName()) && type.getMainTypeId().equals(contractType.getMainTypeId()) && !type.getId().equals(contractType.getId())){
+                //类型名不可重复
+                httpRespMsg.setError("[" + type.getSecTypeName() + "]" + MessageUtils.message("contract.typeNameRepeat"));
+                return httpRespMsg;
+            }
+        }
+        if (contractType.getId() == null){
+            contractType.setCompanyId(user.getCompanyId());
+            contractTypeSecMapper.insert(contractType);
+        }else {
+            contractType.setCompanyId(null);
+            contractTypeSecMapper.updateById(contractType);
+        }
+        //操作成功
+        httpRespMsg.msg = MessageUtils.message("contract.operationSuc");
+        return httpRespMsg;
+    }
+
+    /**
+     * 删除合同类型
+     * @param request
+     * @param deleteId
+     * @return
+     */
+    @Override
+    public HttpRespMsg deleteContractType(HttpServletRequest request, Integer deleteId) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        String token = request.getHeader("token");
+        User user = userMapper.selectById(token);
+        List<SysRichFunction> functionContractList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "合同类型管理");
+        if(functionContractList.size() <= 0){
+            httpRespMsg.setError(MessageUtils.message("access.deleteError"));
+            return httpRespMsg;
+        }
+        List<Contract> types = contractMapper.selectList(new QueryWrapper<Contract>().eq("sec_type_id", deleteId));
+        if (types.size() > 0){
+            //该类型尚有合同在使用,无法删除!
+            httpRespMsg.setError(MessageUtils.message("Contract.typeDelError"));
+        }else {
+            contractTypeSecMapper.deleteById(deleteId);
+            httpRespMsg.setError(MessageUtils.message("file.deleteSuc"));
+        }
+        return httpRespMsg;
+    }
+
+}

+ 2 - 62
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ContractMapper.xml

@@ -19,72 +19,12 @@
         <result column="indate" property="indate" />
         <result column="remarks" property="remarks" />
         <result column="payment" property="payment" />
+        <result column="sec_type_id" property="secTypeId" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, company_id, creator_id, start_date, end_date, number, project_id, name, amounts, type_id, checkerId, status, indate, remarks, payment
+        id, company_id, creator_id, start_date, end_date, number, project_id, name, amounts, type_id, checkerId, status, indate, remarks, payment, sec_type_id
     </sql>
-    <select id="selectContract" resultType="com.management.platform.entity.Contract">
-        select contract.id,contract.company_id,contract.creator_id,contract.number,contract.name,contract.amounts,contract.type_id,contract_type.type_name,contract.status,contract.indate,contract.remarks,
-        contract.start_date as startDate,contract.end_date as endDate,
-        user.name as creatorName,user.corpwx_userid as creatorWxCorpId, contract.project_id, contract.payment, cp.pay_date AS next_payment_date, cp.amount AS next_payment_amount
-        from contract
-        left join contract_type
-        on contract.type_id = contract_type.id
-        LEFT JOIN (SELECT contract_id, pay_date, amount FROM contract_payment WHERE is_payed = 0 GROUP BY contract_id) cp ON cp.contract_id=contract.id
-        left join user
-        on contract.creator_id = user.id
-        where contract.company_id = #{companyId}
-        <if test="number!=null">
-            and number like #{number}
-        </if>
-        <if test="name!=null">
-            and contract.name like #{name}
-        </if>
-        <if test="typeName!=null">
-            and contract_type.id = #{typeName}
-        </if>
-        <if test="status!=null">
-            and status = #{status}
-        </if>
-        <if test="startDate!=null and endDate !=null">
-            and indate between #{startDate} and #{endDate}
-        </if>
-        <if test="paymentStartDate != null and paymentEndDate != null">
-            and cp.pay_date between #{paymentStartDate} and #{paymentEndDate}
-        </if>
-        order by contract.id desc
-        <if test="pageStart!=null and pageSize!=null">
-            limit #{pageStart},#{pageSize}
-        </if>
-    </select>
 
-    <select id="selectContractCnt" resultType="java.lang.Long">
-        select count(1) from contract
-        left join contract_type
-        on contract.type_id = contract_type.id
-        LEFT JOIN (SELECT contract_id, pay_date, amount FROM contract_payment WHERE is_payed = 0 GROUP BY contract_id) cp ON cp.contract_id=contract.id
-        left join user
-        on contract.creator_id = user.id
-        where contract.company_id = #{companyId}
-        <if test="number!=null">
-            and number like #{number}
-        </if>
-        <if test="name!=null">
-            and contract.name like #{name}
-        </if>
-        <if test="typeName!=null">
-            and contract_type.id = #{typeName}
-        </if>
-        <if test="status!=null">
-            and status = #{status}
-        </if>
-        <if test="startDate!=null and endDate !=null">
-            and indate between #{startDate} and #{endDate}
-        </if>
-        <if test="paymentStartDate != null and paymentEndDate != null">
-            and cp.pay_date between #{paymentStartDate} and #{paymentEndDate}
-        </if>
-    </select>
 </mapper>

+ 18 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ContractTypeSecMapper.xml

@@ -0,0 +1,18 @@
+<?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.management.platform.mapper.ContractTypeSecMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.ContractTypeSec">
+        <id column="id" property="id" />
+        <result column="company_id" property="companyId" />
+        <result column="sec_type_name" property="secTypeName" />
+        <result column="main_type_id" property="mainTypeId" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, company_id, sec_type_name, main_type_id
+    </sql>
+
+</mapper>

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/plan/planComponent.vue

@@ -19,7 +19,7 @@
               @change="getTableData(hasChooseDept)" placeholder="请输入内容" clearable="true"></el-input>
           </div>
           <div class="OutSide" style="padding-bottom: 0;">
-              <el-input placeholder="请输入内容"  v-model="searchValue" class="input-with-select">
+              <el-input placeholder="请输入内容"  v-model="searchValue" class="input-with-select" size="small">
               <el-select v-model="searchType" slot="prepend" placeholder="请选择">
                 <el-option label="排产工单号" value="1"></el-option>
                 <el-option label="项目名称" value="2"></el-option>