wangqiang 2 лет назад
Родитель
Сommit
4c8a59fd9c
15 измененных файлов с 792 добавлено и 7 удалено
  1. 1 1
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/cw/contractRegistration/domain/ContractInfo.java
  2. 24 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/cw/reimbursementApproval/approvalType/controller/CwReimbursementTypeController.java
  3. 5 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/cw/reimbursementApproval/approvalType/domain/CwReimbursementTypeInfo.java
  4. 11 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/cw/reimbursementApproval/approvalType/mapper/CwReimbursementTypeMapper.java
  5. 7 1
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/cw/reimbursementApproval/approvalType/mapper/xml/CwReimbursementTypeMapper.xml
  6. 49 5
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/cw/reimbursementApproval/approvalType/service/CwReimbursementTypeService.java
  7. 86 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/materialManagement/controller/MaterialController.java
  8. 69 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/materialManagement/domain/MaterialBasic.java
  9. 69 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/materialManagement/domain/MaterialDetailed.java
  10. 25 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/materialManagement/mapper/MaterialBasicMapper.java
  11. 20 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/materialManagement/mapper/MaterialDetailedMapper.java
  12. 36 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/materialManagement/mapper/xml/MaterialBasicMapper.xml
  13. 20 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/materialManagement/mapper/xml/MaterialDetailedMapper.xml
  14. 253 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/materialManagement/service/MaterialService.java
  15. 117 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/materialManagement/service/dto/MaterialInfoDto.java

+ 1 - 1
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/cw/contractRegistration/domain/ContractInfo.java

@@ -42,7 +42,7 @@ public class ContractInfo extends BaseEntity {
     private String paymentAgreement;        //付款约定
     @TableField(fill = FieldFill.UPDATE)
     private String changeNum;               //修改次数
-    @Query(tableColumn = "a.department")
+//    @Query(tableColumn = "a.department")
     private String department;              //所属部门
     private String clientContacts;          //委托方联系人
     private String clientContactsPhone;     //委托方联系人电话

+ 24 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/cw/reimbursementApproval/approvalType/controller/CwReimbursementTypeController.java

@@ -43,6 +43,30 @@ public class CwReimbursementTypeController {
     }
 
     /**
+     * 列表查询
+     * @param info
+     * @return
+     */
+    @ApiOperation(value = "列表查询")
+    @GetMapping("/bxList")
+    public ResponseEntity<List<CwReimbursementTypeInfo>> bxList(CwReimbursementTypeInfo info) {
+        List<CwReimbursementTypeInfo> list = service.bxList(info);
+        return ResponseEntity.ok(list);
+    }
+
+    /**
+     * 采购类型列表查询
+     * @param info
+     * @return
+     */
+    @ApiOperation(value = "采购类型列表查询")
+    @GetMapping("/cgList")
+    public ResponseEntity<List<CwReimbursementTypeInfo>> cgList(CwReimbursementTypeInfo info) {
+        List<CwReimbursementTypeInfo> list = service.cgList(info);
+        return ResponseEntity.ok(list);
+    }
+
+    /**
      * 新增/修改
      * @param info
      * @return

+ 5 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/cw/reimbursementApproval/approvalType/domain/CwReimbursementTypeInfo.java

@@ -82,4 +82,9 @@ public class CwReimbursementTypeInfo extends TreeEntity<CwReimbursementTypeInfo>
 
     @TableField(exist = false)
     private Boolean disabled = false;
+
+    /**
+     * 业务类型
+     */
+    private String businessType;
 }

+ 11 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/cw/reimbursementApproval/approvalType/mapper/CwReimbursementTypeMapper.java

@@ -5,6 +5,8 @@ import com.jeeplus.core.domain.TreeMapper;
 import com.jeeplus.test.cw.reimbursementApproval.approvalType.domain.CwReimbursementTypeInfo;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * @author: 王强
  * @create: 2022-11-25 09:02
@@ -22,4 +24,13 @@ public interface CwReimbursementTypeMapper extends BaseMapper<CwReimbursementTyp
     Integer getNo(@Param("parentId") String parentId);
 
     Integer getLevel(@Param("parentId") String parentId);
+
+    /**
+     * 修改子级业务类型
+     * @param id
+     * @param businessType
+     */
+    void updateChildBusType(@Param("id") String id, @Param("businessType") String businessType);
+
+    List<String> getChildId(String id);
 }

+ 7 - 1
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/cw/reimbursementApproval/approvalType/mapper/xml/CwReimbursementTypeMapper.xml

@@ -1,7 +1,10 @@
 <?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.jeeplus.test.cw.reimbursementApproval.approvalType.mapper.CwReimbursementTypeMapper">
-    <select id="checkNameIsExist" resultType="java.lang.Integer">
+	<update id="updateChildBusType">
+		update cw_reimbursement_type_info set business_type = #{businessType} where parent_id = #{id}
+	</update>
+	<select id="checkNameIsExist" resultType="java.lang.Integer">
         SELECT
 			COUNT( 0 )
 		FROM
@@ -29,4 +32,7 @@
 			del_flag = 0
 			AND id = #{parentId}
     </select>
+	<select id="getChildId" resultType="java.lang.String">
+		select id from cw_reimbursement_type_info where parent_id = #{id}
+	</select>
 </mapper>

+ 49 - 5
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/cw/reimbursementApproval/approvalType/service/CwReimbursementTypeService.java

@@ -32,6 +32,38 @@ public class CwReimbursementTypeService {
         if (info.getSort() != null) {
             wrapper.like(CwReimbursementTypeInfo::getSort, info.getSort());
         }
+//        wrapper.eq(CwReimbursementTypeInfo::getBusinessType, "1");
+
+        wrapper.eq(BaseEntity::getDelFlag, 0);
+        wrapper.orderByAsc(CwReimbursementTypeInfo::getSort);
+        return mapper.selectList(wrapper);
+    }
+
+    public List<CwReimbursementTypeInfo> bxList(CwReimbursementTypeInfo info) {
+        LambdaQueryWrapper<CwReimbursementTypeInfo> wrapper = new LambdaQueryWrapper<>();
+        if (StringUtils.isNotEmpty(info.getName())) {
+            wrapper.like(CwReimbursementTypeInfo::getName, info.getName());
+        }
+        if (info.getSort() != null) {
+            wrapper.like(CwReimbursementTypeInfo::getSort, info.getSort());
+        }
+        wrapper.eq(CwReimbursementTypeInfo::getBusinessType, "1");
+
+        wrapper.eq(BaseEntity::getDelFlag, 0);
+        wrapper.orderByAsc(CwReimbursementTypeInfo::getSort);
+        return mapper.selectList(wrapper);
+    }
+
+    public List<CwReimbursementTypeInfo> cgList(CwReimbursementTypeInfo info) {
+        LambdaQueryWrapper<CwReimbursementTypeInfo> wrapper = new LambdaQueryWrapper<>();
+        if (StringUtils.isNotEmpty(info.getName())) {
+            wrapper.like(CwReimbursementTypeInfo::getName, info.getName());
+        }
+        if (info.getSort() != null) {
+            wrapper.like(CwReimbursementTypeInfo::getSort, info.getSort());
+        }
+        wrapper.eq(CwReimbursementTypeInfo::getBusinessType, "2");
+
         wrapper.eq(BaseEntity::getDelFlag, 0);
         wrapper.orderByAsc(CwReimbursementTypeInfo::getSort);
         return mapper.selectList(wrapper);
@@ -42,11 +74,6 @@ public class CwReimbursementTypeService {
         if(StringUtils.isEmpty(info.getParentId())) {
             info.setParentId("0");
         }
-        // 判断名称是否已存在
-        Integer isExist = mapper.checkNameIsExist(info.getName(), info.getParentId());
-        if (isExist > 0) {
-            return "false";
-        }
         // 保存数据
         if (StringUtils.isNotEmpty(info.getId())) {
             return update(info);
@@ -60,6 +87,11 @@ public class CwReimbursementTypeService {
      * @return
      */
     public String add(CwReimbursementTypeInfo info) {
+        // 判断名称是否已存在
+        Integer isExist = mapper.checkNameIsExist(info.getName(), info.getParentId());
+        if (isExist > 0) {
+            return "false";
+        }
         // 获取当前登录人信息
         UserDTO userDto = UserUtils.getCurrentUserDTO();
         // 生成id值
@@ -86,6 +118,18 @@ public class CwReimbursementTypeService {
         UserDTO userDto = UserUtils.getCurrentUserDTO();
         info.setUpdateBy(userDto.getId());
         info.setUpdateDate(new Date());
+        //父级
+        if (info.getParentId().equals("0")){
+            //修改所有子集的业务类型
+            List<String> childId = mapper.getChildId(info.getId());
+            childId.forEach(chidId->{
+                //修改子级的子级
+                mapper.updateChildBusType(chidId,info.getBusinessType());
+            });
+            //修改子级
+            mapper.updateChildBusType(info.getId(),info.getBusinessType());
+        }
+
         mapper.updateById(info);
         return "操作完成";
     }

+ 86 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/materialManagement/controller/MaterialController.java

@@ -0,0 +1,86 @@
+package com.jeeplus.test.materialManagement.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jeeplus.aop.logging.annotation.ApiLog;
+import com.jeeplus.common.utils.ResponseUtil;
+import com.jeeplus.sys.constant.enums.LogTypeEnum;
+import com.jeeplus.test.materialManagement.service.MaterialService;
+import com.jeeplus.test.materialManagement.service.dto.MaterialInfoDto;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+/**
+ * @author: 王强
+ * @create: 2022-12-02 16:25
+ **/
+@RestController
+@Api(tags ="物资管理-采购申请")
+@RequestMapping(value = "/material/management")
+public class MaterialController {
+
+    @Resource
+    private MaterialService service;
+
+    /**
+     * 列表查询
+     * @param dto
+     * @return
+     */
+    @ApiOperation(value = "列表查询")
+    @GetMapping("/list")
+    public ResponseEntity<IPage<MaterialInfoDto>> list(Page<MaterialInfoDto> page, MaterialInfoDto dto) throws Exception{
+        IPage<MaterialInfoDto> iPage = service.list(page, dto);
+        return ResponseEntity.ok(iPage);
+    }
+
+    /**
+     * 新增/修改
+     * @param dto
+     * @return
+     */
+    @ApiOperation(value = "新增、修改")
+    @PostMapping("/save")
+    public ResponseEntity<String> save(@RequestBody MaterialInfoDto dto) throws Exception{
+        String s = service.save(dto);
+        return ResponseUtil.newInstance().add("businessTable", "material_management_pruchase_request_basics").add("businessId", s).ok ("操作成功");
+    }
+
+    /**
+     * 查询
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "查询")
+    @GetMapping("/findById")
+    public ResponseEntity<MaterialInfoDto> findById(@RequestParam String id) throws Exception{
+        MaterialInfoDto dto = service.findById(id);
+        return ResponseEntity.ok(dto);
+    }
+
+    /**
+     * 删除
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "删除")
+    @GetMapping("/remove")
+    public ResponseEntity<String> remove(@RequestParam String id){
+        String s = service.remove(id);
+        return ResponseEntity.ok(s);
+    }
+
+    /**
+     * 根据id修改状态status
+     */
+    @ApiOperation(value = "根据id修改状态status")
+    @PostMapping(value = "updateStatusById")
+    public void updateStatusById(@RequestBody MaterialInfoDto dto) {
+        service.updateStatusById(dto);
+    }
+}

+ 69 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/materialManagement/domain/MaterialBasic.java

@@ -0,0 +1,69 @@
+package com.jeeplus.test.materialManagement.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.jeeplus.core.domain.BaseEntity;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 物资管理-采购基础表
+ * @author: 王强
+ * @create: 2022-12-02 16:40
+ **/
+@Data
+@TableName("material_management_pruchase_request_basics")
+public class MaterialBasic extends BaseEntity {
+
+    //采购编号(字典值)
+    public static final String BIZ_CODE = "16";
+
+    /**
+     * 流程id
+     */
+    private String procInsId;
+
+    /**
+     * 状态
+     */
+    private String status;
+
+    private String processDefinitionId;
+
+    /**
+     * 采购编号
+     */
+    private String purchaseNo;
+
+    /**
+     * 采购简述
+     */
+    private String purchaseSketch;
+
+    /**
+     * 经办人
+     */
+    private String handledBy;
+
+    /**
+     * 经办人部门
+     */
+    private String handledByOffice;
+
+    /**
+     * 经办人部门
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date purchaseDate;
+
+    /**
+     * 采购方式
+     */
+    private String purchaseMode;
+
+    @TableField(exist = false)
+    List<MaterialDetailed> detailInfos;
+}

+ 69 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/materialManagement/domain/MaterialDetailed.java

@@ -0,0 +1,69 @@
+package com.jeeplus.test.materialManagement.domain;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.jeeplus.core.domain.BaseEntity;
+import com.jeeplus.test.oss.domain.WorkAttachment;
+import com.jeeplus.test.workContract.service.dto.WorkAttachmentDto;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 采购明细表
+ * @author: 王强
+ * @create: 2022-12-02 16:46
+ **/
+@Data
+@TableName("material_management_pruchase_request_detailed")
+public class MaterialDetailed extends BaseEntity {
+
+    /**
+     * 采购基础表id
+     */
+    private String basicId;
+
+    /**
+     * 采购人
+     */
+    private String purchaser;
+
+    /**
+     * 采购部门
+     */
+    private String procurementOffice;
+
+    /**
+     * 采购类型
+     */
+    private String procurementType;
+
+    /**
+     * 商品名称
+     */
+    private String tradeName;
+
+    /**
+     * 商品单价
+     */
+    private String tradePrice;
+
+    /**
+     * 商品数量
+     */
+    private String tradeNumber;
+
+    /**
+     * 单位
+     */
+    private String company;
+
+    /**
+     * 商品总价
+     */
+    private String tradeTotalPrice;
+
+    //附件信息
+    @TableField(exist = false)
+    List<WorkAttachmentDto> fileInfoLost;
+}

+ 25 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/materialManagement/mapper/MaterialBasicMapper.java

@@ -0,0 +1,25 @@
+package com.jeeplus.test.materialManagement.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jeeplus.test.materialManagement.domain.MaterialBasic;
+import com.jeeplus.test.materialManagement.service.dto.MaterialInfoDto;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author: 王强
+ * @create: 2022-12-02 16:57
+ **/
+public interface MaterialBasicMapper extends BaseMapper<MaterialBasic> {
+
+    List<String> findChildIds(String department);
+
+    IPage<MaterialInfoDto> findList(Page<MaterialInfoDto> page,@Param(Constants.WRAPPER) QueryWrapper<MaterialInfoDto> queryWrapper);
+
+    void updateStatusById(@Param("id") String id, @Param("type") String type);
+}

+ 20 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/materialManagement/mapper/MaterialDetailedMapper.java

@@ -0,0 +1,20 @@
+package com.jeeplus.test.materialManagement.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jeeplus.test.materialManagement.domain.MaterialDetailed;
+import com.jeeplus.test.oss.domain.WorkAttachment;
+import com.jeeplus.test.workContract.service.dto.WorkAttachmentDto;
+
+import java.util.List;
+
+/**
+ * @author: 王强
+ * @create: 2022-12-02 17:26
+ **/
+public interface MaterialDetailedMapper extends BaseMapper<MaterialDetailed> {
+    //根据基础表id查出详情数据
+    List<MaterialDetailed> getByBasicId(String basicId);
+
+    //查出附件信息
+    List<WorkAttachmentDto> getByAttachmentId(String id);
+}

+ 36 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/materialManagement/mapper/xml/MaterialBasicMapper.xml

@@ -0,0 +1,36 @@
+<?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.jeeplus.test.materialManagement.mapper.MaterialBasicMapper">
+    <update id="updateStatusById">
+		UPDATE material_management_pruchase_request_basics SET status = #{type}
+		WHERE id = #{id}
+	</update>
+    <select id="findList" resultType="com.jeeplus.test.materialManagement.service.dto.MaterialInfoDto">
+        SELECT
+			a.id,
+			a.create_by,
+			a.create_date,
+			a.purchase_no,
+			a.purchase_sketch,
+			a.handled_by,
+			a.handled_by_office,
+			a.purchase_date,
+			a.purchase_mode,
+			a.status,
+			a.proc_ins_id,
+			a.process_definition_id,
+			b.procurement_type,
+			b.trade_total_price
+		FROM
+-- 		,off.name as handledByOfficeName
+			material_management_pruchase_request_basics a
+-- 			left join sys_office off on a.handled_by_office = off.id
+			left join material_management_pruchase_request_detailed b
+			on a.id = b.basic_id and b.del_flag = 0
+			${ew.customSqlSegment}
+		ORDER BY a.update_date DESC
+    </select>
+	<select id="findChildIds" resultType="java.lang.String">
+		select id from sys_office where parent_id = #{department}
+	</select>
+</mapper>

+ 20 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/materialManagement/mapper/xml/MaterialDetailedMapper.xml

@@ -0,0 +1,20 @@
+<?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.jeeplus.test.materialManagement.mapper.MaterialDetailedMapper">
+    <select id="getByBasicId" resultType="com.jeeplus.test.materialManagement.domain.MaterialDetailed">
+        select * from material_management_pruchase_request_detailed where basic_id = #{basicId} and del_flag = '0'
+    </select>
+    <select id="getByAttachmentId" resultType="com.jeeplus.test.workContract.service.dto.WorkAttachmentDto">
+        SELECT
+			id,
+			url,
+			attachment_name AS `name`,
+			create_by AS `by`,
+			create_date
+		FROM
+			work_attachment
+		WHERE
+			del_flag = 0
+			AND attachment_id = #{id}
+    </select>
+</mapper>

+ 253 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/materialManagement/service/MaterialService.java

@@ -0,0 +1,253 @@
+package com.jeeplus.test.materialManagement.service;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.google.common.collect.Lists;
+import com.jeeplus.core.query.QueryWrapperGenerator;
+import com.jeeplus.sys.service.dto.UserDTO;
+import com.jeeplus.sys.utils.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.jeeplus.sys.utils.UserUtils;
+import com.jeeplus.test.cw.contractRegistration.service.ContractInfoService;
+import com.jeeplus.test.materialManagement.domain.MaterialBasic;
+import com.jeeplus.test.materialManagement.domain.MaterialDetailed;
+import com.jeeplus.test.materialManagement.mapper.MaterialBasicMapper;
+import com.jeeplus.test.materialManagement.mapper.MaterialDetailedMapper;
+import com.jeeplus.test.materialManagement.service.dto.MaterialInfoDto;
+import com.jeeplus.test.mould.service.SerialnumTplService;
+import com.jeeplus.test.oss.domain.WorkAttachment;
+import com.jeeplus.test.oss.mapper.OssServiceMapper;
+import com.jeeplus.test.workContract.service.dto.WorkAttachmentDto;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+
+import org.springframework.beans.BeanUtils;
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * @author: 王强
+ * @create: 2022-12-02 16:26
+ **/
+@Service
+public class MaterialService {
+
+    @Resource
+    private MaterialBasicMapper basicMapper;
+
+    @Resource
+    private ContractInfoService infoService;
+
+    @Resource
+    private SerialnumTplService serialnumTplService;
+
+    @Resource
+    private MaterialDetailedMapper detailedMapper;
+
+    @Resource
+    private OssServiceMapper ossServiceMapper;
+
+    /**
+     * 列表查询
+     */
+    public IPage<MaterialInfoDto> list(Page<MaterialInfoDto> page , MaterialInfoDto dto) throws Exception{
+        QueryWrapper<MaterialInfoDto> queryWrapper = QueryWrapperGenerator.buildQueryCondition(dto, MaterialInfoDto.class);
+
+        queryWrapper.eq("a.del_flag", 0);
+        if (StringUtils.isNotEmpty(dto.getPurchaseSketch())) {
+            queryWrapper.like("a.purchase_sketch", dto.getPurchaseSketch());
+        }
+        if (StringUtils.isNotEmpty(dto.getHandledBy())) {
+            queryWrapper.eq("a.handled_by", dto.getHandledBy());
+        }
+        if (StringUtils.isNotEmpty(dto.getHandledByOfficeName())) {
+            //先根据id查出是否是父节点,是父节点则查出所有的子节点信息
+            List<String> childIds = basicMapper.findChildIds(dto.getHandledByOfficeName());
+            if ( null != childIds & childIds.size()>0){
+                childIds.add(dto.getHandledByOfficeName());
+                queryWrapper.in("a.handled_by_office",childIds);
+            }else {
+                queryWrapper.eq("a.handled_by_office", dto.getHandledByOfficeName());
+            }
+        }
+        if (StringUtils.isNotEmpty(dto.getStatus())) {
+            queryWrapper.like("a.status", dto.getStatus());
+        }
+        //采购类别
+        //合同金额
+        //3、合同金额(区间)
+        String[] contractAmounts = dto.getContractAmounts();
+        if (contractAmounts != null) {
+            if (StringUtils.isNotEmpty(contractAmounts[0])) {
+                queryWrapper.ge("b.trade_total_price",contractAmounts[0]);
+            }
+            if (StringUtils.isNotEmpty(contractAmounts[1])) {
+                queryWrapper.le("b.trade_total_price", contractAmounts[1]);
+            }
+        }
+        String[] contractDates = dto.getContractDates();
+        if (contractDates != null) {
+
+            queryWrapper.between("a.create_date", contractDates[0], contractDates[1]);
+        }
+
+        return basicMapper.findList(page, queryWrapper);
+    }
+
+    public String save(MaterialInfoDto dto) throws Exception{
+        // 获取当前登录人信息
+        UserDTO userDTO = UserUtils.getCurrentUserDTO();
+        if (StringUtils.isNotEmpty(dto.getId())) {
+            return update(dto, userDTO);
+        } else {
+            return add(dto, userDTO);
+        }
+    }
+
+    public String add(MaterialInfoDto dto, UserDTO userDTO) throws Exception{
+        // 生成id
+        String id = UUID.randomUUID().toString().replace("-", "");
+        // 生成编号
+        String no = serialnumTplService.genSerialNum(userDTO.getCompanyDTO().getId(), dto.BIZ_CODE);
+        // 保存基础信息表信息
+        MaterialBasic info = new MaterialBasic();
+        BeanUtils.copyProperties(dto, info);
+        info.setId(id);
+//        info.setNo(no);
+        info.setPurchaseNo(no);
+        info.setCreateBy(userDTO.getId());
+        info.setCreateDate(new Date());
+        info.setUpdateBy(userDTO.getId());
+        info.setUpdateDate(new Date());
+        info.setDelFlag(0);
+        basicMapper.insert(info);
+        // 保存详情列表信息
+        if (CollectionUtils.isNotEmpty(dto.getDetailInfos())) {
+            for (MaterialDetailed detailed : dto.getDetailInfos()) {
+                // 生成id
+                String detailId = UUID.randomUUID().toString().replace("-", "");
+                detailed.setId(detailId);
+                detailed.setCreateBy(userDTO.getId());
+                detailed.setCreateDate(new Date());
+                detailed.setUpdateBy(userDTO.getId());
+                detailed.setUpdateDate(new Date());
+                detailed.setDelFlag(0);
+                // 保存基础表信息主键值
+                detailed.setBasicId(id);
+                detailedMapper.insert(detailed);
+                //保存详情列表附件信息
+                if (CollectionUtils.isNotEmpty(detailed.getFileInfoLost())){
+                    infoService.saveFiles(detailed.getFileInfoLost(), userDTO, detailId);
+                }
+
+            }
+        }
+        // 保存附件列表信息
+        if (CollectionUtils.isNotEmpty(dto.getFiles())) {
+            infoService.saveFiles(dto.getFiles(), userDTO, id);
+        }
+        return id;
+    }
+
+    public String update(MaterialInfoDto dto, UserDTO userDTO) {
+        // 修改基础信息
+        MaterialBasic info = new MaterialBasic();
+        BeanUtils.copyProperties(dto, info);
+        info.setUpdateBy(userDTO.getId());
+        info.setUpdateDate(new Date());
+        basicMapper.updateById(info);
+        // 修改报销详情列表信息
+        // 删除原有数据
+        LambdaQueryWrapper<MaterialDetailed> detailWrapper = new LambdaQueryWrapper<>();
+        detailWrapper.eq(MaterialDetailed::getBasicId, dto.getId());
+        detailedMapper.delete(detailWrapper);
+        if (CollectionUtils.isNotEmpty(dto.getDetailInfos())) {
+            for (MaterialDetailed detailInfo : dto.getDetailInfos()) {
+                // 生成id
+                String detailId = UUID.randomUUID().toString().replace("-", "");
+                detailInfo.setId(detailId);
+                detailInfo.setCreateBy(userDTO.getId());
+                detailInfo.setCreateDate(new Date());
+                detailInfo.setUpdateBy(userDTO.getId());
+                detailInfo.setUpdateDate(new Date());
+                detailInfo.setDelFlag(0);
+                // 保存基础表信息主键值
+                detailInfo.setBasicId(dto.getId());
+                detailedMapper.insert(detailInfo);
+                // 修改附件信息列表
+                if (CollectionUtils.isNotEmpty(detailInfo.getFileInfoLost())) {
+                    infoService.updateFiles(detailInfo.getFileInfoLost(), userDTO, detailInfo.getId());
+                }
+            }
+        }
+        // 修改附件信息列表
+        if (CollectionUtils.isNotEmpty(dto.getFiles())) {
+            infoService.updateFiles(dto.getFiles(), userDTO, dto.getId());
+        }
+        return dto.getId();
+    }
+
+    public MaterialInfoDto findById(String id) {
+        MaterialInfoDto dto = new MaterialInfoDto();
+        // 查询基础信息表
+        MaterialBasic info = basicMapper.selectById(id);
+        BeanUtils.copyProperties(info, dto);
+        //将采购详情数据查出
+        List<MaterialDetailed> detailedList = detailedMapper.getByBasicId(id);
+        if (CollectionUtils.isNotEmpty(detailedList)){
+            detailedList.forEach(detailed->{
+                //附件信息
+                List<WorkAttachmentDto> acList = detailedMapper.getByAttachmentId(detailed.getId());
+                if (CollectionUtils.isNotEmpty(acList)) {
+                    for (WorkAttachmentDto i : acList) {
+                        i.setCreateBy(UserUtils.get(i.getBy()));
+                    }
+                }
+                detailed.setFileInfoLost(acList);
+            });
+        }
+        dto.setDetailInfos(detailedList);
+        //附件信息
+        List<WorkAttachmentDto> files = detailedMapper.getByAttachmentId(info.getId());
+        if (CollectionUtils.isNotEmpty(files)) {
+            for (WorkAttachmentDto i : files) {
+                i.setCreateBy(UserUtils.get(i.getBy()));
+            }
+        }
+        dto.setFiles(files);
+        return dto;
+    }
+
+    public String remove(String id) {
+        // 删除基础信息表
+        basicMapper.deleteById(id);
+        // 删除详情列表 及对应附件信息
+        List<MaterialDetailed> detailedList = detailedMapper.getByBasicId(id);
+        if (null != detailedList){
+            detailedList.forEach(de->{
+                //附件
+                List<WorkAttachmentDto> fileList = detailedMapper.getByAttachmentId(de.getId());
+                if ( null != fileList ){
+                    fileList.forEach(f->{
+                        ossServiceMapper.deleteById(f.getId());
+                    });
+                }
+                detailedMapper.deleteById(de.getId());
+            });
+        }
+        // 删除附件信息
+        LambdaQueryWrapper<WorkAttachment> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(WorkAttachment::getAttachmentId, id);
+        ossServiceMapper.delete(wrapper);
+        return "操作成功";
+    }
+
+    public void updateStatusById(MaterialInfoDto dto) {
+        basicMapper.updateStatusById(dto.getId(), dto.getStatus());
+    }
+}

+ 117 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/materialManagement/service/dto/MaterialInfoDto.java

@@ -0,0 +1,117 @@
+package com.jeeplus.test.materialManagement.service.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.jeeplus.test.materialManagement.domain.MaterialDetailed;
+import com.jeeplus.test.oss.domain.WorkAttachment;
+import com.jeeplus.test.workContract.service.dto.WorkAttachmentDto;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author: 王强
+ * @create: 2022-12-02 16:29
+ **/
+@Data
+public class MaterialInfoDto {
+
+    private String createBy;
+
+    //采购编号(字典值)
+    public static final String BIZ_CODE = "16";
+
+    /**
+     * 基础表主键值
+     */
+    private String id;
+
+    /**
+     * 采购编号
+     */
+    private String purchaseNo;
+
+    /**
+     * 采购简述
+     */
+    private String purchaseSketch;
+
+    /**
+     *采购类型
+     */
+    private String procurementType;
+
+    /**
+     *采购方式
+     */
+    private String purchaseMode;
+
+    /**
+     *采购金额(元)
+     */
+    private String tradeTotalPrice;
+
+    /**
+     *经办人
+     */
+    private String handledBy;
+
+    /**
+     *经办人部门
+     */
+    private String handledByOfficeName;
+
+    @TableField(exist = false)
+    private String[] contractAmounts;
+
+    @TableField(exist = false)
+    private String[] contractDates;
+
+    /**
+     *经办人部门
+     */
+    private String handledByOffice;
+
+    /**
+     *申请时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createDate;
+
+    /**
+     * 状态
+     */
+    private String status;
+
+    /**
+     *采购时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date purchaseDate;
+
+    /**
+     * 备注
+     */
+    private String remarks;
+
+    //新增信息
+    List<MaterialDetailed> detailInfos;
+
+    //附件信息
+    List<WorkAttachment> fileInfoLost;
+
+    /**
+     * 流程id
+     */
+    private String procInsId;
+
+    /**
+     *
+     */
+    private String processInstanceId;
+
+    private String processDefinitionId;
+
+    private List<WorkAttachmentDto> files;
+}