wanghongzhi 1 年之前
父節點
當前提交
35d645a123
共有 43 個文件被更改,包括 3524 次插入1077 次删除
  1. 10 5
      pom.xml
  2. 1251 1066
      script/db/boot/oracle/BOOT_ORACLE_TABLE.sql
  3. 26 0
      src/main/java/com/qdport/RedisEventListener.java
  4. 19 0
      src/main/java/com/qdport/annotation/Wrapper.java
  5. 83 0
      src/main/java/com/qdport/controller/PolicyFileController.java
  6. 177 0
      src/main/java/com/qdport/controller/PolicyShareController.java
  7. 28 0
      src/main/java/com/qdport/controller/PolicySystemController.java
  8. 96 0
      src/main/java/com/qdport/controller/PolicyTodoController.java
  9. 63 0
      src/main/java/com/qdport/entity/PolicyFile.java
  10. 31 0
      src/main/java/com/qdport/entity/PolicyFlowNo.java
  11. 156 0
      src/main/java/com/qdport/entity/PolicyShare.java
  12. 139 0
      src/main/java/com/qdport/entity/PolicyTodo.java
  13. 8 0
      src/main/java/com/qdport/enums/Comparison.java
  14. 64 0
      src/main/java/com/qdport/enums/QDPortEnum.java
  15. 14 0
      src/main/java/com/qdport/mapper/PolicyFileMapper.java
  16. 14 0
      src/main/java/com/qdport/mapper/PolicyFlowNoMapper.java
  17. 14 0
      src/main/java/com/qdport/mapper/PolicyShareMapper.java
  18. 14 0
      src/main/java/com/qdport/mapper/PolicyTodoMapper.java
  19. 21 0
      src/main/java/com/qdport/query/PolicyFileQuery.java
  20. 21 0
      src/main/java/com/qdport/query/PolicyFlowNoQuery.java
  21. 40 0
      src/main/java/com/qdport/query/PolicyShareQuery.java
  22. 34 0
      src/main/java/com/qdport/query/PolicyTodoQuery.java
  23. 81 0
      src/main/java/com/qdport/query/QueryWrapperBuilder.java
  24. 26 0
      src/main/java/com/qdport/service/PolicyFileService.java
  25. 26 0
      src/main/java/com/qdport/service/PolicyFlowNoService.java
  26. 28 0
      src/main/java/com/qdport/service/PolicyShareService.java
  27. 31 0
      src/main/java/com/qdport/service/PolicyTodoService.java
  28. 79 0
      src/main/java/com/qdport/service/impl/PolicyFileServiceImpl.java
  29. 89 0
      src/main/java/com/qdport/service/impl/PolicyFlowNoServiceImpl.java
  30. 112 0
      src/main/java/com/qdport/service/impl/PolicyShareServiceImpl.java
  31. 36 0
      src/main/java/com/qdport/service/impl/PolicySystemService.java
  32. 97 0
      src/main/java/com/qdport/service/impl/PolicyTodoServiceImpl.java
  33. 356 0
      src/main/java/com/qdport/util/StringUtil.java
  34. 18 0
      src/main/java/com/qdport/vo/PolicyFileVO.java
  35. 18 0
      src/main/java/com/qdport/vo/PolicyFlowNoVO.java
  36. 25 0
      src/main/java/com/qdport/vo/PolicyShareVO.java
  37. 20 0
      src/main/java/com/qdport/vo/PolicyTodoVO.java
  38. 32 0
      src/main/java/com/qdport/wrapper/PolicyFileWrapper.java
  39. 32 0
      src/main/java/com/qdport/wrapper/PolicyFlowNoWrapper.java
  40. 32 0
      src/main/java/com/qdport/wrapper/PolicyShareWrapper.java
  41. 31 0
      src/main/java/com/qdport/wrapper/PolicyTodoWrapper.java
  42. 6 6
      src/main/resources/application-dev.yml
  43. 26 0
      src/main/resources/mapper/PolicyShareMapper.xml

+ 10 - 5
pom.xml

@@ -42,17 +42,22 @@
 			<artifactId>qdport-module-system</artifactId>
 			<version>${qdport-boot.project.version}</version>
 		</dependency>
-<!--		<dependency>-->
-<!--			<groupId>com.qdport</groupId>-->
-<!--			<artifactId>qdport-module-workflow</artifactId>-->
-<!--			<version>${qdport-boot.project.version}</version>-->
-<!--		</dependency>-->
+		<dependency>
+			<groupId>com.qdport</groupId>
+			<artifactId>qdport-module-workflow</artifactId>
+			<version>${qdport-boot.project.version}</version>
+		</dependency>
 
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-test</artifactId>
 			<scope>test</scope>
 		</dependency>
+		<!--lombok插件-->
+		<dependency>
+			<groupId>org.projectlombok</groupId>
+			<artifactId>lombok</artifactId>
+		</dependency>
 	</dependencies>
 	<dependencyManagement>
 		<dependencies>

File diff suppressed because it is too large
+ 1251 - 1066
script/db/boot/oracle/BOOT_ORACLE_TABLE.sql


+ 26 - 0
src/main/java/com/qdport/RedisEventListener.java

@@ -0,0 +1,26 @@
+package com.qdport;
+
+import com.qdport.core.cache.utils.CacheUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.web.context.WebServerInitializedEvent;
+import org.springframework.context.event.EventListener;
+import org.springframework.core.annotation.Order;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+import static com.qdport.core.cache.constant.CacheConstant.RESOURCE_CACHE;
+import static com.qdport.core.cache.constant.CacheConstant.SYS_CACHE;
+
+
+@Slf4j
+@Component
+public class RedisEventListener {
+
+	@Async
+	@Order
+	@EventListener(WebServerInitializedEvent.class)
+	public void deleteRedisCache(WebServerInitializedEvent event){
+		log.info("----------------开始清除数据权限redis缓存: " + SYS_CACHE);
+		CacheUtil.clear(RESOURCE_CACHE, Boolean.FALSE);
+	}
+}

+ 19 - 0
src/main/java/com/qdport/annotation/Wrapper.java

@@ -0,0 +1,19 @@
+package com.qdport.annotation;
+
+import com.qdport.enums.Comparison;
+
+import java.lang.annotation.*;
+
+
+@Target(ElementType.FIELD)
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Wrapper {
+
+    //默认使用eq,一个字段上只能使用一个Wrapper注解
+    Comparison value() default Comparison.EQ;
+
+    //设置该字段对应的列名
+    String column() default "";
+
+}

+ 83 - 0
src/main/java/com/qdport/controller/PolicyFileController.java

@@ -0,0 +1,83 @@
+package com.qdport.controller;
+
+import com.qdport.entity.PolicyFile;
+import com.qdport.query.PolicyFileQuery;
+import com.qdport.service.PolicyFileService;
+import com.qdport.vo.PolicyFileVO;
+import lombok.AllArgsConstructor;
+import com.qdport.wrapper.PolicyFileWrapper;
+import org.springframework.web.bind.annotation.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import com.qdport.core.tool.api.R;
+import com.qdport.core.tool.utils.Func;
+import com.qdport.core.boot.ctrl.QdportController;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+* 文件存储
+*
+* @author yuheng 
+* @since 1.0.0 2024-10-10
+*/
+@RestController
+@RequestMapping("qdport-zcgx/file")
+@Api(value = "文件存储", tags = "文件存储")
+@AllArgsConstructor
+public class PolicyFileController extends QdportController {
+    private final PolicyFileService policyFileService;
+
+    /**
+    * 分页
+    */
+    @GetMapping("page")
+    @ApiOperation(value = "分页", notes = "分页")
+    public R<IPage<PolicyFileVO>> page(@Valid PolicyFileQuery query){
+        IPage<PolicyFileVO> page = policyFileService.page(query);
+
+        return R.data(page);
+    }
+
+    /**
+    * 详情
+    */
+    @GetMapping("{id}")
+    @ApiOperation(value = "详情", notes = "id")
+    public R<PolicyFileVO> get(@PathVariable("id") Long id){
+        PolicyFile entity = policyFileService.getById(id);
+        return R.data(PolicyFileWrapper.build().entityVO(entity));
+    }
+
+    /**
+    * 新增
+    */
+    @PostMapping("/save")
+    @ApiOperation(value = "新增", notes = "传入PolicyFile")
+    public R save(@RequestBody PolicyFileVO vo){
+        policyFileService.save(vo);
+        return R.success("保存成功");
+    }
+
+    /**
+    * 修改
+    */
+    @PostMapping("/update")
+    public R update(@RequestBody @Valid PolicyFileVO vo){
+        policyFileService.update(vo);
+        return R.success("更新成功");
+    }
+
+    /**
+    * 删除
+    */
+    @PostMapping("/remove")
+    @ApiOperation(value = "逻辑删除", notes = "传入ids")
+    public R delete(@ApiParam(value = "主键集合", required = true) @RequestParam(name = "ids") String ids){
+         List<Long> idList = Func.toLongList(ids);
+        policyFileService.delete(idList);
+        return R.success("删除成功");
+    }
+}

+ 177 - 0
src/main/java/com/qdport/controller/PolicyShareController.java

@@ -0,0 +1,177 @@
+package com.qdport.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qdport.entity.PolicyShare;
+import com.qdport.entity.PolicyTodo;
+import com.qdport.enums.QDPortEnum;
+import com.qdport.query.PolicyShareQuery;
+import com.qdport.service.PolicyFileService;
+import com.qdport.service.PolicyShareService;
+import com.qdport.service.PolicyTodoService;
+import com.qdport.service.impl.PolicySystemService;
+import com.qdport.util.StringUtil;
+import com.qdport.vo.PolicyFileVO;
+import com.qdport.vo.PolicyShareVO;
+import com.qdport.wrapper.PolicyShareWrapper;
+import com.qdport.modules.system.entity.SysUser;
+import com.qdport.modules.system.service.TSysUserService;
+import lombok.AllArgsConstructor;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import com.qdport.core.tool.api.R;
+import com.qdport.core.tool.utils.Func;
+import com.qdport.core.boot.ctrl.QdportController;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import javax.validation.Valid;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 政策共享
+ *
+ * @author yuheng
+ * @since 1.0.0 2024-09-30
+ */
+@RestController
+@RequestMapping("qdport-zcgx/share")
+@Api(value = "政策共享", tags = "政策共享")
+@AllArgsConstructor
+public class PolicyShareController extends QdportController {
+    private final PolicyShareService policyShareService;
+    private final TSysUserService sysUserService;
+    private final PolicySystemService policySystemService;
+    private final PolicyFileService policyFileService;
+    private final PolicyTodoService policyTodoService;
+
+    /**
+     * 分页
+     */
+    @GetMapping("page")
+    @ApiOperation(value = "分页", notes = "分页")
+    public R<IPage<PolicyShareVO>> page(@Valid PolicyShareQuery query) {
+        IPage<PolicyShareVO> page = policyShareService.page(query);
+        List<PolicyShareVO> records = page.getRecords();
+        for (PolicyShareVO model : records) {
+            SysUser createUser = sysUserService.getById(model.getCreateId());
+            Map<String, String> resultMap = policySystemService.getDeptNameAndCompanyName(createUser.getDeptId());
+            model.setDeptName(resultMap.get("deptName"));
+            model.setCompanyName(resultMap.get("companyName"));
+
+            List<PolicyFileVO> fileList = policyFileService.getFileList(model.getId().toString(), QDPortEnum.POLICY_FILE_REFTYPE_POLICY_SHARE.getValue());
+            model.setFileList(fileList);
+        }
+        return R.data(page);
+    }
+
+    /**
+     * 详情
+     */
+    @GetMapping("{id}")
+    @ApiOperation(value = "详情", notes = "id")
+    public R<PolicyShareVO> get(@PathVariable("id") Long id) {
+        PolicyShare entity = policyShareService.getById(id);
+        PolicyShareVO vo = PolicyShareWrapper.build().entityVO(entity);
+
+        SysUser createUser = sysUserService.getById(entity.getCreateId());
+        Map<String, String> resultMap = policySystemService.getDeptNameAndCompanyName(createUser.getDeptId());
+        vo.setDeptName(resultMap.get("deptName"));
+        vo.setCompanyName(resultMap.get("companyName"));
+
+        List<PolicyFileVO> fileList = policyFileService.getFileList(entity.getId().toString(), QDPortEnum.POLICY_FILE_REFTYPE_POLICY_SHARE.getValue());
+
+        vo.setFileList(fileList);
+        return R.data(vo);
+    }
+
+    /**
+     * 新增
+     */
+    @PostMapping("/save")
+    @ApiOperation(value = "新增", notes = "传入PolicyShare")
+    @Transactional(rollbackFor = Exception.class)
+    public R save(@RequestBody PolicyShareVO vo) {
+        vo.setStatus(QDPortEnum.POLICY_SHARE_STATUS_ACTIVE.getValue());
+        policyShareService.save(vo);
+        return R.success("保存成功");
+    }
+
+    @PostMapping("/saveApprove")
+    @ApiOperation(value = "新增并且提交", notes = "传入PolicyShare")
+    @Transactional(rollbackFor = Exception.class)
+    public R saveApprove(@RequestBody PolicyShareVO vo) {
+        if (StringUtil.isEmpty(vo.getId())) {
+            vo.setStatus(QDPortEnum.POLICY_SHARE_STATUS_APPROVE.getValue());
+            policyShareService.save(vo);
+        } else {
+            vo.setStatus(QDPortEnum.POLICY_SHARE_STATUS_APPROVE.getValue());
+            policyShareService.update(vo);
+        }
+
+        policyTodoService.save(vo);
+        return R.success("新增并且提交成功");
+    }
+
+    /**
+     * 修改
+     */
+    @PostMapping("/update")
+    @Transactional(rollbackFor = Exception.class)
+    public R update(@RequestBody @Valid PolicyShareVO vo) {
+        policyShareService.update(vo);
+        return R.success("更新成功");
+    }
+
+    @PostMapping("/withdraw")
+    @Transactional(rollbackFor = Exception.class)
+    public R withdraw(@RequestBody @Valid PolicyShareVO vo) {
+        vo.setStatus(QDPortEnum.POLICY_SHARE_STATUS_ACTIVE.getValue());
+        policyShareService.updateById(vo);
+
+        QueryWrapper<PolicyTodo> todoQueryWrapper = new QueryWrapper<>();
+        todoQueryWrapper.eq("REF_ID", vo.getId());
+        todoQueryWrapper.eq("REF_TYPE", QDPortEnum.POLICY_TODO_REFTYPE_POLICY_SHARE.getValue());
+        todoQueryWrapper.eq("TODO_USER_ID",1 );
+        todoQueryWrapper.eq("TODO_TYPE",QDPortEnum.POLICY_TODO_TYPE_APPROVE.getValue() );
+        todoQueryWrapper.eq("STATUS",QDPortEnum.POLICY_TODO_STATUS_ACTIVE.getValue() );
+        PolicyTodo todo = new PolicyTodo();
+        todo.setStatus(QDPortEnum.POLICY_TODO_STATUS_CANCEL.getValue());
+        policyTodoService.update(todo, todoQueryWrapper);
+        return R.success("撤回成功");
+    }
+
+    @PostMapping("/approve")
+    @Transactional(rollbackFor = Exception.class)
+    public R approve(@RequestBody @Valid PolicyShareVO vo) {
+        vo.setStatus(QDPortEnum.POLICY_SHARE_STATUS_DONE.getValue());
+        policyShareService.updateById(vo);
+
+        QueryWrapper<PolicyTodo> todoQueryWrapper = new QueryWrapper<>();
+        todoQueryWrapper.eq("REF_ID", vo.getId());
+        todoQueryWrapper.eq("REF_TYPE", QDPortEnum.POLICY_TODO_REFTYPE_POLICY_SHARE.getValue());
+        todoQueryWrapper.eq("TODO_USER_ID", 1);
+        todoQueryWrapper.eq("TODO_TYPE", QDPortEnum.POLICY_TODO_TYPE_APPROVE.getValue());
+        todoQueryWrapper.eq("STATUS", QDPortEnum.POLICY_TODO_STATUS_ACTIVE.getValue());
+        PolicyTodo todo = new PolicyTodo();
+        todo.setStatus(QDPortEnum.POLICY_TODO_STATUS_DONE.getValue());
+        policyTodoService.update(todo, todoQueryWrapper);
+
+        return R.success("更新成功");
+    }
+
+    /**
+     * 删除
+     */
+    @PostMapping("/remove")
+    @ApiOperation(value = "逻辑删除", notes = "传入ids")
+    @Transactional(rollbackFor = Exception.class)
+    public R delete(@ApiParam(value = "主键集合", required = true) @RequestParam(name = "ids") String ids) {
+        List<Long> idList = Func.toLongList(ids);
+        policyShareService.delete(idList);
+        return R.success("删除成功");
+    }
+}

+ 28 - 0
src/main/java/com/qdport/controller/PolicySystemController.java

@@ -0,0 +1,28 @@
+package com.qdport.controller;
+
+import com.qdport.core.tool.api.R;
+import com.qdport.service.impl.PolicySystemService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+@RestController
+@RequestMapping("qdport-zcgx/system")
+@Api(value = "系统", tags = "系统")
+@AllArgsConstructor
+public class PolicySystemController {
+    private final PolicySystemService policySystemService;
+
+    @GetMapping("{deptId}")
+    @ApiOperation(value = "查询用户所属部门", notes = "deptId")
+    public R get(@PathVariable("deptId") String deptId) {
+        Map<String, String> result = policySystemService.getDeptNameAndCompanyName(deptId);
+        return R.data(result);
+    }
+}

+ 96 - 0
src/main/java/com/qdport/controller/PolicyTodoController.java

@@ -0,0 +1,96 @@
+package com.qdport.controller;
+
+import com.qdport.modules.system.entity.SysUser;
+import com.qdport.modules.system.service.TSysUserService;
+import com.qdport.service.impl.PolicySystemService;
+import com.qdport.vo.PolicyShareVO;
+import lombok.AllArgsConstructor;
+import com.qdport.entity.PolicyTodo;
+import com.qdport.service.PolicyTodoService;
+import com.qdport.query.PolicyTodoQuery;
+import com.qdport.vo.PolicyTodoVO;
+import com.qdport.wrapper.PolicyTodoWrapper;
+import org.springframework.web.bind.annotation.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import com.qdport.core.tool.api.R;
+import com.qdport.core.tool.utils.Func;
+import com.qdport.core.boot.ctrl.QdportController;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+
+/**
+* 政策待办
+*
+* @author yuheng 
+* @since 1.0.0 2024-10-11
+*/
+@RestController
+@RequestMapping("qdport-zcgx/todo")
+@Api(value = "政策待办", tags = "政策待办")
+@AllArgsConstructor
+public class PolicyTodoController extends QdportController {
+    private final PolicyTodoService policyTodoService;
+    private final TSysUserService sysUserService;
+    private final PolicySystemService policySystemService;
+
+    /**
+    * 分页
+    */
+    @GetMapping("page")
+    @ApiOperation(value = "分页", notes = "分页")
+    public R<IPage<PolicyTodoVO>> page(@Valid PolicyTodoQuery query){
+        IPage<PolicyTodoVO> page = policyTodoService.page(query);
+        List<PolicyTodoVO> records = page.getRecords();
+        for (PolicyTodoVO model : records) {
+            SysUser createUser = sysUserService.getById(model.getZcCreateId());
+            Map<String, String> resultMap = policySystemService.getDeptNameAndCompanyName(createUser.getDeptId());
+            model.setZcDeptName(resultMap.get("deptName"));
+            model.setZcCompanyName(resultMap.get("companyName"));
+        }
+        return R.data(page);
+    }
+
+    /**
+    * 详情
+    */
+    @GetMapping("{id}")
+    @ApiOperation(value = "详情", notes = "id")
+    public R<PolicyTodoVO> get(@PathVariable("id") Long id){
+        PolicyTodo entity = policyTodoService.getById(id);
+        return R.data(PolicyTodoWrapper.build().entityVO(entity));
+    }
+
+    /**
+    * 新增
+    */
+    @PostMapping("/save")
+    @ApiOperation(value = "新增", notes = "传入PolicyTodo")
+    public R save(@RequestBody PolicyTodoVO vo){
+        policyTodoService.save(vo);
+        return R.success("保存成功");
+    }
+
+    /**
+    * 修改
+    */
+    @PostMapping("/update")
+    public R update(@RequestBody @Valid PolicyTodoVO vo){
+        policyTodoService.update(vo);
+        return R.success("更新成功");
+    }
+
+    /**
+    * 删除
+    */
+    @PostMapping("/remove")
+    @ApiOperation(value = "逻辑删除", notes = "传入ids")
+    public R delete(@ApiParam(value = "主键集合", required = true) @RequestParam(name = "ids") String ids){
+         List<Long> idList = Func.toLongList(ids);
+        policyTodoService.delete(idList);
+        return R.success("删除成功");
+    }
+}

+ 63 - 0
src/main/java/com/qdport/entity/PolicyFile.java

@@ -0,0 +1,63 @@
+package com.qdport.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.*;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 文件存储
+ *
+ * @author yuheng 
+ * @since 1.0.0 2024-10-10
+ */
+
+@Data
+@TableName("POLICY_FILE")
+@ApiModel(value = "PolicyFile对象", description = "PolicyFile")
+public class PolicyFile implements Serializable {
+	/**
+	* id
+	*/
+	@JsonSerialize(
+			using = ToStringSerializer.class
+	)
+    @ApiModelProperty(value = "id")
+	@TableId(
+			value = "id",
+			type = IdType.ASSIGN_ID
+	)
+	private Long id;
+
+	private String fileName;
+
+	private String fileType;
+
+	private String fileDomain;
+
+	private String originalName;
+
+	@DateTimeFormat(
+			pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	@JsonFormat(
+			pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	private Date createTime;
+
+	@JsonSerialize(
+			using = ToStringSerializer.class
+	)
+	private Long refId;
+
+	private String refType;
+
+}

+ 31 - 0
src/main/java/com/qdport/entity/PolicyFlowNo.java

@@ -0,0 +1,31 @@
+package com.qdport.entity;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.*;
+import java.io.Serializable;
+
+/**
+ * 编号生成
+ *
+ * @author yuheng 
+ * @since 1.0.0 2024-10-09
+ */
+
+@Data
+@TableName("POLICY_FLOW_NO")
+@ApiModel(value = "PolicyFlowNo对象", description = "PolicyFlowNo")
+public class PolicyFlowNo implements Serializable {
+	private String type;
+
+	private String prefix;
+
+	private String currDate;
+
+	private String currNo;
+
+	private Integer currSeq;
+
+}

+ 156 - 0
src/main/java/com/qdport/entity/PolicyShare.java

@@ -0,0 +1,156 @@
+package com.qdport.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.*;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 政策共享
+ *
+ * @author yuheng
+ * @since 1.0.0 2024-09-30
+ */
+
+@Data
+@TableName("POLICY_SHARE")
+@ApiModel(value = "PolicyShare对象", description = "政策共享")
+public class PolicyShare implements Serializable {
+	private static final long serialVersionUID = 1L;
+	/**
+	* id
+	*/
+	@JsonSerialize(
+			using = ToStringSerializer.class
+	)
+    @ApiModelProperty(value = "id")
+	@TableId(
+			value = "id",
+			type = IdType.ASSIGN_ID
+	)
+	private Long id;
+
+	/**
+	* 政策分享编号
+	*/
+    @ApiModelProperty(value = "政策分享编号")
+	private String businessNo;
+
+	/**
+	* 状态
+	*/
+    @ApiModelProperty(value = "状态")
+	private String status;
+
+	/**
+	* 政策名称
+	*/
+    @ApiModelProperty(value = "政策名称")
+	private String name;
+
+	/**
+	* 政策概要
+	*/
+    @ApiModelProperty(value = "政策概要")
+	private String abstractContent;
+
+	/**
+	* 政策等级
+	*/
+    @ApiModelProperty(value = "政策等级")
+	private String zcLevel;
+
+	/**
+	* 政策类别
+	*/
+    @ApiModelProperty(value = "政策类别")
+	private String zcType;
+
+	/**
+	* 填报人id
+	*/
+    @ApiModelProperty(value = "填报人id")
+	@JsonSerialize(
+			using = ToStringSerializer.class
+	)
+	private Long createId;
+
+	/**
+	* 填报人
+	*/
+    @ApiModelProperty(value = "填报人")
+	private String createName;
+
+	/**
+	* 联系方式
+	*/
+    @ApiModelProperty(value = "联系方式")
+	private String contactPhone;
+
+	/**
+	* 创建时间
+	*/
+    @ApiModelProperty(value = "创建时间")
+	@DateTimeFormat(
+			pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	@JsonFormat(
+			pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	private Date createTime;
+
+	/**
+	* 考核得分
+	*/
+    @ApiModelProperty(value = "考核得分")
+	private BigDecimal score;
+
+	/**
+	* 是否入库(0:否,1:是)
+	*/
+    @ApiModelProperty(value = "是否入库(0:否,1:是)")
+	private Integer isInWh;
+
+	/**
+	* 入库类别
+	*/
+    @ApiModelProperty(value = "入库类别")
+	private String inWhType;
+
+	/**
+	* 政策文号
+	*/
+    @ApiModelProperty(value = "政策文号")
+	private String docNo;
+
+	/**
+	* 修改时间
+	*/
+    @ApiModelProperty(value = "修改时间")
+	@DateTimeFormat(
+			pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	@JsonFormat(
+			pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	private Date updateTime;
+
+	/**
+	* 修改人id
+	*/
+    @ApiModelProperty(value = "修改人id")
+	@JsonSerialize(
+			using = ToStringSerializer.class
+	)
+	private String updateId;
+
+}

+ 139 - 0
src/main/java/com/qdport/entity/PolicyTodo.java

@@ -0,0 +1,139 @@
+package com.qdport.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.*;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 政策待办
+ *
+ * @author yuheng 
+ * @since 1.0.0 2024-10-11
+ */
+
+@Data
+@TableName("POLICY_TODO")
+@ApiModel(value = "PolicyTodo对象", description = "PolicyTodo")
+public class PolicyTodo implements Serializable {
+	/**
+	* id
+	*/
+	@JsonSerialize(
+			using = ToStringSerializer.class
+	)
+    @ApiModelProperty(value = "id")
+	@TableId(
+			value = "id",
+			type = IdType.ASSIGN_ID
+	)
+	private Long id;
+
+	/**
+	* 关联id
+	*/
+	@JsonSerialize(
+			using = ToStringSerializer.class
+	)
+    @ApiModelProperty(value = "关联id")
+	private Long refId;
+
+	/**
+	* 关联类型
+	*/
+    @ApiModelProperty(value = "关联类型")
+	private String refType;
+
+	/**
+	* 创建时间
+	*/
+    @ApiModelProperty(value = "创建时间")
+	@DateTimeFormat(
+			pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	@JsonFormat(
+			pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	private Date createTime;
+
+	/**
+	* 待办处理人id
+	*/
+    @ApiModelProperty(value = "待办处理人id")
+	@JsonSerialize(
+			using = ToStringSerializer.class
+	)
+	private Long todoUserId;
+
+	/**
+	* 状态
+	*/
+    @ApiModelProperty(value = "状态")
+	private String status;
+
+	/**
+	* 待办类型
+	*/
+    @ApiModelProperty(value = "待办类型")
+	private String todoType;
+
+	/**
+	* 政策名称
+	*/
+    @ApiModelProperty(value = "政策名称")
+	private String zcName;
+
+	/**
+	* 政策概要
+	*/
+    @ApiModelProperty(value = "政策概要")
+	private String zcAbstractContent;
+
+	/**
+	* 政策类别
+	*/
+    @ApiModelProperty(value = "政策类别")
+	private String zcType;
+
+	/**
+	* 填报人id
+	*/
+    @ApiModelProperty(value = "填报人id")
+	@JsonSerialize(
+			using = ToStringSerializer.class
+	)
+	private Long zcCreateId;
+
+	/**
+	* 填报人
+	*/
+    @ApiModelProperty(value = "填报人")
+	private String zcCreateName;
+
+	/**
+	* 联系方式
+	*/
+    @ApiModelProperty(value = "联系方式")
+	private String zcContactPhone;
+
+	/**
+	* 创建时间
+	*/
+    @ApiModelProperty(value = "创建时间")
+	@DateTimeFormat(
+			pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	@JsonFormat(
+			pattern = "yyyy-MM-dd HH:mm:ss"
+	)
+	private Date zcCreateTime;
+
+}

+ 8 - 0
src/main/java/com/qdport/enums/Comparison.java

@@ -0,0 +1,8 @@
+package com.qdport.enums;
+
+public enum Comparison {
+    EQ,
+    LT,
+    GT,
+    LIKE
+}

+ 64 - 0
src/main/java/com/qdport/enums/QDPortEnum.java

@@ -0,0 +1,64 @@
+package com.qdport.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public enum QDPortEnum {
+    // 自动生成编号的类型
+    FLOWNO_TYPE_SHARE("policy_share", "政策分享编号"),
+
+    POLICY_SHARE_STATUS_ACTIVE("active", "已保存,待发起审批"),
+    POLICY_SHARE_STATUS_APPROVE("approve", "待审批"),
+    POLICY_SHARE_STATUS_INACTIVE("inactive", "驳回,待修改"),
+    POLICY_SHARE_STATUS_DONE("done", "审批通过"),
+
+    SYS_DEPT_TYPE_COMPANY("1", "公司"),
+    SYS_DEPT_TYPE_DEPT("0", "部门"),
+
+    POLICY_FILE_REFTYPE_POLICY_SHARE("policy_share", "政策分享"),
+
+    POLICY_TODO_REFTYPE_POLICY_SHARE("policy_share", "政策分享"),
+
+    POLICY_TODO_STATUS_ACTIVE("active", "待办"),
+    POLICY_TODO_STATUS_DONE("done", "完成"),
+    POLICY_TODO_STATUS_CANCEL("cancel", "取消"),
+
+    POLICY_TODO_TYPE_APPROVE("approve", "审核"),
+
+
+
+    ;
+
+    QDPortEnum(String value, String comment) {
+        this.value = value;
+        this.comment = comment;
+    }
+
+    private static Map<String, QDPortEnum> typelookup = new HashMap<>();
+
+    static {
+        for (QDPortEnum mspEnum : QDPortEnum.values()) {
+            typelookup.put(mspEnum.value, mspEnum);
+        }
+    }
+
+    public static boolean isContainsValue(String type) {
+        return typelookup.containsKey(type);
+    }
+
+    public static QDPortEnum forType(String type) {
+        return typelookup.get(type);
+    }
+
+    private String value;
+    private String comment;
+
+    public String getValue() {
+        return value;
+    }
+
+    public String getComment() {
+        return comment;
+    }
+
+}

+ 14 - 0
src/main/java/com/qdport/mapper/PolicyFileMapper.java

@@ -0,0 +1,14 @@
+package com.qdport.mapper;
+
+import com.qdport.entity.PolicyFile;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* 文件存储
+*
+* @author yuheng 
+* @since 1.0.0 2024-10-10
+*/
+public interface PolicyFileMapper extends BaseMapper<PolicyFile> {
+
+}

+ 14 - 0
src/main/java/com/qdport/mapper/PolicyFlowNoMapper.java

@@ -0,0 +1,14 @@
+package com.qdport.mapper;
+
+import com.qdport.entity.PolicyFlowNo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* 编号生成
+*
+* @author yuheng 
+* @since 1.0.0 2024-10-09
+*/
+public interface PolicyFlowNoMapper extends BaseMapper<PolicyFlowNo> {
+
+}

+ 14 - 0
src/main/java/com/qdport/mapper/PolicyShareMapper.java

@@ -0,0 +1,14 @@
+package com.qdport.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qdport.entity.PolicyShare;
+
+/**
+* 政策共享
+*
+* @author yuheng
+* @since 1.0.0 2024-09-30
+*/
+public interface PolicyShareMapper extends BaseMapper<PolicyShare> {
+
+}

+ 14 - 0
src/main/java/com/qdport/mapper/PolicyTodoMapper.java

@@ -0,0 +1,14 @@
+package com.qdport.mapper;
+
+import com.qdport.entity.PolicyTodo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* 政策待办
+*
+* @author yuheng 
+* @since 1.0.0 2024-10-11
+*/
+public interface PolicyTodoMapper extends BaseMapper<PolicyTodo> {
+
+}

+ 21 - 0
src/main/java/com/qdport/query/PolicyFileQuery.java

@@ -0,0 +1,21 @@
+package com.qdport.query;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+
+
+/**
+* 文件存储查询
+*
+* @author yuheng 
+* @since 1.0.0 2024-10-10
+*/
+@Data
+@ApiModel(value = "文件存储查询", description = "文件存储查询")
+public class PolicyFileQuery implements Serializable {
+    @ApiModelProperty("分页参数当前页")
+    private Integer page=1;
+    @ApiModelProperty("分页参数页码大小")
+    private Integer size=20;
+}

+ 21 - 0
src/main/java/com/qdport/query/PolicyFlowNoQuery.java

@@ -0,0 +1,21 @@
+package com.qdport.query;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+
+
+/**
+* 编号生成查询
+*
+* @author yuheng 
+* @since 1.0.0 2024-10-09
+*/
+@Data
+@ApiModel(value = "编号生成查询", description = "编号生成查询")
+public class PolicyFlowNoQuery implements Serializable {
+    @ApiModelProperty("分页参数当前页")
+    private Integer page=1;
+    @ApiModelProperty("分页参数页码大小")
+    private Integer size=20;
+}

+ 40 - 0
src/main/java/com/qdport/query/PolicyShareQuery.java

@@ -0,0 +1,40 @@
+package com.qdport.query;
+import com.qdport.annotation.Wrapper;
+import com.qdport.enums.Comparison;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+
+
+/**
+* 政策共享查询
+*
+* @author yuheng
+* @since 1.0.0 2024-09-30
+*/
+@Data
+@ApiModel(value = "政策共享查询", description = "政策共享查询")
+public class PolicyShareQuery implements Serializable {
+    @ApiModelProperty("分页参数当前页")
+    private Integer page=1;
+    @ApiModelProperty("分页参数页码大小")
+    private Integer size=20;
+
+    @Wrapper(value = Comparison.LIKE)
+    private String businessNo;
+    @Wrapper
+    private String status;
+    @Wrapper(value = Comparison.LIKE)
+    private String name;
+    @Wrapper
+    private String zcLevel;
+    @Wrapper
+    private String zcType;
+    @Wrapper
+    private String inWhType;
+    @Wrapper(value = Comparison.LIKE)
+    private String docNo;
+    @Wrapper
+    private Integer isInWh;
+}

+ 34 - 0
src/main/java/com/qdport/query/PolicyTodoQuery.java

@@ -0,0 +1,34 @@
+package com.qdport.query;
+import com.qdport.annotation.Wrapper;
+import com.qdport.enums.Comparison;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+
+
+/**
+* 政策待办查询
+*
+* @author yuheng 
+* @since 1.0.0 2024-10-11
+*/
+@Data
+@ApiModel(value = "政策待办查询", description = "政策待办查询")
+public class PolicyTodoQuery implements Serializable {
+    @ApiModelProperty("分页参数当前页")
+    private Integer page=1;
+    @ApiModelProperty("分页参数页码大小")
+    private Integer size=20;
+
+    @Wrapper(value = Comparison.LIKE)
+    private String zcName;
+    @Wrapper(value = Comparison.LIKE)
+    private String zcAbstractContent;
+    @Wrapper
+    private String zcType;
+    @Wrapper(value = Comparison.LIKE)
+    private String zcCreateName;
+    @Wrapper(value = Comparison.LIKE)
+    private String zcContactPhone;
+}

+ 81 - 0
src/main/java/com/qdport/query/QueryWrapperBuilder.java

@@ -0,0 +1,81 @@
+package com.qdport.query;
+
+import cn.hutool.core.util.ReflectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qdport.annotation.Wrapper;
+
+import java.lang.reflect.Field;
+import java.util.Arrays;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @author hsh
+ * @date 2023/7/27 19:58
+ */
+public class QueryWrapperBuilder {
+    private static Pattern humpPattern = Pattern.compile("[A-Z]");
+
+    public static <T,U> QueryWrapper<U> buildQueryWrapper(T t,Class<U> uClass) {
+        QueryWrapper<U> wrapper = new QueryWrapper<U>();
+        if (t == null) {
+            return wrapper;
+        }
+        //hutool包装的方法,获得一个类中所有字段列表,包括其父类中的字段和私有字段
+        //相当于getDeclaredFields()和getFields()的结合体
+        Field[] fields = ReflectUtil.getFields(t.getClass());
+        List<Field> list = Arrays.asList(fields);
+        if (list.isEmpty()) {
+            return wrapper;
+        }
+        for (Field field : list) {
+            //hutool包装的方法,与field.get(t)类似,但不需要try/catch
+            Object value = ReflectUtil.getFieldValue(t, field.getName());
+            //字段值为空时不参与条件查询
+            if (value == null || "".equals(value)) {
+                continue;
+            }
+            //允许访问私有字段
+            field.setAccessible(true);
+            //获取Wrapper注解
+            Wrapper wrapperAnno = field.getAnnotation(Wrapper.class);
+            if (wrapperAnno == null) {
+                continue;
+            }
+            //设置该字段对应数据库的列名,默认字段名=列名
+            String name = wrapperAnno.column().isEmpty()
+                    ? humpToLine(field.getName())
+                    : wrapperAnno.column();
+            //根据注解的值添加对应的wrapper操作
+            switch (wrapperAnno.value()) {
+                case EQ:
+                    wrapper.eq(name, value);
+                    break;
+                case LT:
+                    wrapper.lt(name, value);
+                    break;
+                case GT:
+                    wrapper.gt(name, value);
+                    break;
+                case LIKE:
+                    wrapper.like(name, value);
+                    break;
+            }
+        }
+        return wrapper;
+    }
+
+    public static String humpToLine(String str) {
+        Matcher matcher = humpPattern.matcher(str);
+        StringBuffer sb = new StringBuffer();
+        while (matcher.find()) {
+            matcher.appendReplacement(sb, "_" + matcher.group(0).toLowerCase());
+        }
+        matcher.appendTail(sb);
+        if (sb.toString().startsWith("_")) {
+            sb.deleteCharAt(0);
+        }
+        return sb.toString().toUpperCase();
+    }
+}

+ 26 - 0
src/main/java/com/qdport/service/PolicyFileService.java

@@ -0,0 +1,26 @@
+package com.qdport.service;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qdport.vo.PolicyFileVO;
+import com.qdport.query.PolicyFileQuery;
+import com.qdport.entity.PolicyFile;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * 文件存储
+ *
+ * @author yuheng 
+ * @since 1.0.0 2024-10-10
+ */
+public interface PolicyFileService  extends IService<PolicyFile> {
+
+    IPage<PolicyFileVO> page(PolicyFileQuery query);
+
+    void save(PolicyFileVO vo);
+
+    void update(PolicyFileVO vo);
+
+    void delete(List<Long> idList);
+
+    List<PolicyFileVO> getFileList(String refId, String refType);
+}

+ 26 - 0
src/main/java/com/qdport/service/PolicyFlowNoService.java

@@ -0,0 +1,26 @@
+package com.qdport.service;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qdport.vo.PolicyFlowNoVO;
+import com.qdport.query.PolicyFlowNoQuery;
+import com.qdport.entity.PolicyFlowNo;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * 编号生成
+ *
+ * @author yuheng 
+ * @since 1.0.0 2024-10-09
+ */
+public interface PolicyFlowNoService  extends IService<PolicyFlowNo> {
+
+    IPage<PolicyFlowNoVO> page(PolicyFlowNoQuery query);
+
+    void save(PolicyFlowNoVO vo);
+
+    void update(PolicyFlowNoVO vo);
+
+    void delete(List<Long> idList);
+
+    String getFlowNo(String type);
+}

+ 28 - 0
src/main/java/com/qdport/service/PolicyShareService.java

@@ -0,0 +1,28 @@
+package com.qdport.service;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.qdport.entity.PolicyShare;
+import com.qdport.query.PolicyShareQuery;
+import com.qdport.vo.PolicyShareVO;
+
+import java.util.List;
+
+/**
+ * 政策共享
+ *
+ * @author yuheng
+ * @since 1.0.0 2024-09-30
+ */
+public interface PolicyShareService  extends IService<PolicyShare> {
+
+    IPage<PolicyShareVO> page(PolicyShareQuery query);
+
+    void save(PolicyShareVO vo);
+
+    void update(PolicyShareVO vo);
+
+    void updateById(PolicyShareVO vo);
+
+    void delete(List<Long> idList);
+
+}

+ 31 - 0
src/main/java/com/qdport/service/PolicyTodoService.java

@@ -0,0 +1,31 @@
+package com.qdport.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qdport.entity.PolicyFile;
+import com.qdport.vo.PolicyShareVO;
+import com.qdport.vo.PolicyTodoVO;
+import com.qdport.query.PolicyTodoQuery;
+import com.qdport.entity.PolicyTodo;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import java.util.List;
+
+/**
+ * 政策待办
+ *
+ * @author yuheng
+ * @since 1.0.0 2024-10-11
+ */
+public interface PolicyTodoService extends IService<PolicyTodo> {
+
+    IPage<PolicyTodoVO> page(PolicyTodoQuery query);
+
+    void save(PolicyTodoVO vo);
+
+    void save(PolicyShareVO vo);
+
+    void update(PolicyTodoVO vo);
+
+    void delete(List<Long> idList);
+
+}

+ 79 - 0
src/main/java/com/qdport/service/impl/PolicyFileServiceImpl.java

@@ -0,0 +1,79 @@
+package com.qdport.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+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.qdport.mapper.PolicyFileMapper;
+import com.qdport.query.PolicyFileQuery;
+import com.qdport.service.PolicyFileService;
+import lombok.AllArgsConstructor;
+import com.qdport.entity.PolicyFile;
+import com.qdport.vo.PolicyFileVO;
+import com.qdport.wrapper.PolicyFileWrapper;
+import com.qdport.core.tool.utils.BeanUtil;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 文件存储
+ *
+ * @author yuheng 
+ * @since 1.0.0 2024-10-10
+ */
+@Service
+@AllArgsConstructor
+public class PolicyFileServiceImpl extends ServiceImpl<PolicyFileMapper, PolicyFile> implements PolicyFileService {
+
+    @Override
+    public IPage<PolicyFileVO> page(PolicyFileQuery query) {
+        IPage<PolicyFile> page = new Page<>(query.getPage(), query.getSize());
+        page = baseMapper.selectPage(page, getWrapper(query));
+        return PolicyFileWrapper.build().pageVO(page);
+    }
+
+    private LambdaQueryWrapper<PolicyFile> getWrapper(PolicyFileQuery query){
+        LambdaQueryWrapper<PolicyFile> wrapper = Wrappers.lambdaQuery();
+        return wrapper;
+    }
+
+    @Override
+    public void save(PolicyFileVO vo) {
+        PolicyFile entity = BeanUtil.copy(vo,PolicyFile.class);
+
+        baseMapper.insert(entity);
+    }
+
+    @Override
+    public void update(PolicyFileVO vo) {
+        PolicyFile entity = BeanUtil.copy(vo,PolicyFile.class);
+
+        updateById(entity);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void delete(List<Long> idList) {
+        removeByIds(idList);
+    }
+
+    @Override
+    public List<PolicyFileVO> getFileList(String refId, String refType) {
+        QueryWrapper<PolicyFile> fileWrapper = new QueryWrapper<>();
+        fileWrapper.eq("REF_ID", refId);
+        fileWrapper.eq("REF_TYPE", refType);
+        List<PolicyFile> fileList = this.list(fileWrapper);
+        List<PolicyFileVO> voList = fileList.stream().map(file -> {
+            PolicyFileVO fileVO = new PolicyFileVO();
+            BeanUtils.copyProperties(file, fileVO);
+            return fileVO;
+        }).collect(Collectors.toList());
+        return voList;
+    }
+}

+ 89 - 0
src/main/java/com/qdport/service/impl/PolicyFlowNoServiceImpl.java

@@ -0,0 +1,89 @@
+package com.qdport.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+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.qdport.mapper.PolicyFlowNoMapper;
+import com.qdport.service.PolicyFlowNoService;
+import lombok.AllArgsConstructor;
+import com.qdport.entity.PolicyFlowNo;
+import com.qdport.query.PolicyFlowNoQuery;
+import com.qdport.vo.PolicyFlowNoVO;
+import com.qdport.wrapper.PolicyFlowNoWrapper;
+import com.qdport.core.tool.utils.BeanUtil;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+
+/**
+ * 编号生成
+ *
+ * @author yuheng 
+ * @since 1.0.0 2024-10-09
+ */
+@Service
+@AllArgsConstructor
+public class PolicyFlowNoServiceImpl extends ServiceImpl<PolicyFlowNoMapper, PolicyFlowNo> implements PolicyFlowNoService {
+    private static final DateTimeFormatter DFY_MD = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+    private static final DateTimeFormatter DFY_MD_2 = DateTimeFormatter.ofPattern("yyyyMMdd");
+
+    @Override
+    public IPage<PolicyFlowNoVO> page(PolicyFlowNoQuery query) {
+        IPage<PolicyFlowNo> page = new Page<>(query.getPage(), query.getSize());
+        page = baseMapper.selectPage(page, getWrapper(query));
+        return PolicyFlowNoWrapper.build().pageVO(page);
+    }
+
+    private LambdaQueryWrapper<PolicyFlowNo> getWrapper(PolicyFlowNoQuery query){
+        LambdaQueryWrapper<PolicyFlowNo> wrapper = Wrappers.lambdaQuery();
+        return wrapper;
+    }
+
+    @Override
+    public void save(PolicyFlowNoVO vo) {
+        PolicyFlowNo entity = BeanUtil.copy(vo,PolicyFlowNo.class);
+
+        baseMapper.insert(entity);
+    }
+
+    @Override
+    public void update(PolicyFlowNoVO vo) {
+        PolicyFlowNo entity = BeanUtil.copy(vo,PolicyFlowNo.class);
+
+        updateById(entity);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void delete(List<Long> idList) {
+        removeByIds(idList);
+    }
+
+    @Override
+    public String getFlowNo(String type) {
+        QueryWrapper<PolicyFlowNo> wrapper = new QueryWrapper<>();
+        wrapper.eq("TYPE", type);
+        PolicyFlowNo flowNo = this.getOne(wrapper);
+        String currDate = DFY_MD.format(LocalDateTime.now());
+        String currDate2 = DFY_MD_2.format(LocalDateTime.now());
+
+        if (flowNo.getCurrDate() == null || !flowNo.getCurrDate().equals(currDate)) {
+            flowNo.setCurrDate(currDate);
+            flowNo.setCurrSeq(1);
+        } else {
+            flowNo.setCurrSeq(flowNo.getCurrSeq() + 1);
+        }
+        String currSeq = String.format("%05d", flowNo.getCurrSeq());
+        String no = flowNo.getPrefix() + currDate2 + currSeq;
+        flowNo.setCurrNo(no);
+        this.update(flowNo, wrapper);
+        return no;
+    }
+
+}

+ 112 - 0
src/main/java/com/qdport/service/impl/PolicyShareServiceImpl.java

@@ -0,0 +1,112 @@
+package com.qdport.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+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.qdport.entity.PolicyFile;
+import com.qdport.query.QueryWrapperBuilder;
+import com.qdport.service.PolicyFileService;
+import com.qdport.service.PolicyFlowNoService;
+import com.qdport.service.PolicyShareService;
+import com.qdport.enums.QDPortEnum;
+import com.qdport.vo.PolicyFileVO;
+import lombok.AllArgsConstructor;
+import com.qdport.entity.PolicyShare;
+import com.qdport.query.PolicyShareQuery;
+import com.qdport.vo.PolicyShareVO;
+import com.qdport.mapper.PolicyShareMapper;
+import com.qdport.wrapper.PolicyShareWrapper;
+import com.qdport.core.tool.utils.BeanUtil;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 政策共享
+ *
+ * @author yuheng
+ * @since 1.0.0 2024-09-30
+ */
+@Service
+@AllArgsConstructor
+public class PolicyShareServiceImpl extends ServiceImpl<PolicyShareMapper, PolicyShare> implements PolicyShareService {
+
+    private final PolicyFlowNoService policyFlowNoService;
+    private final PolicyFileService policyFileService;
+
+    @Override
+    public IPage<PolicyShareVO> page(PolicyShareQuery query) {
+        IPage<PolicyShare> page = new Page<>(query.getPage(), query.getSize());
+        page = baseMapper.selectPage(page, getWrapper(query));
+        return PolicyShareWrapper.build().pageVO(page);
+    }
+
+    private QueryWrapper<PolicyShare> getWrapper(PolicyShareQuery query) {
+        QueryWrapper<PolicyShare> wrapper = QueryWrapperBuilder.buildQueryWrapper(query, PolicyShare.class);
+        wrapper.orderByDesc("CREATE_TIME");
+        return wrapper;
+    }
+
+    @Override
+    public void save(PolicyShareVO vo) {
+        String flowNo = policyFlowNoService.getFlowNo(QDPortEnum.FLOWNO_TYPE_SHARE.getValue());
+        PolicyShare entity = BeanUtil.copy(vo, PolicyShare.class);
+        entity.setCreateTime(new Date());
+        entity.setUpdateTime(new Date());
+        entity.setBusinessNo(flowNo);
+        baseMapper.insert(entity);
+        vo.setId(entity.getId());
+
+        QueryWrapper<PolicyFile> fileWrapper = new QueryWrapper<>();
+        fileWrapper.eq("REF_ID", entity.getId());
+        policyFileService.remove(fileWrapper);
+
+        List<PolicyFileVO> fileList = vo.getFileList();
+        for (PolicyFileVO model : fileList) {
+            model.setCreateTime(new Date());
+            model.setRefId(entity.getId());
+            model.setRefType(QDPortEnum.POLICY_FILE_REFTYPE_POLICY_SHARE.getValue());
+            policyFileService.save(model);
+        }
+    }
+
+    @Override
+    public void update(PolicyShareVO vo) {
+        PolicyShare entity = BeanUtil.copy(vo, PolicyShare.class);
+        entity.setUpdateTime(new Date());
+        updateById(entity);
+
+        QueryWrapper<PolicyFile> fileWrapper = new QueryWrapper<>();
+        fileWrapper.eq("REF_ID", entity.getId());
+        policyFileService.remove(fileWrapper);
+
+        List<PolicyFileVO> fileList = vo.getFileList();
+        for (PolicyFileVO model : fileList) {
+            model.setCreateTime(new Date());
+            model.setRefId(entity.getId());
+            model.setRefType(QDPortEnum.POLICY_FILE_REFTYPE_POLICY_SHARE.getValue());
+            policyFileService.save(model);
+        }
+    }
+
+    @Override
+    public void updateById(PolicyShareVO vo) {
+        PolicyShare entity = BeanUtil.copy(vo, PolicyShare.class);
+        entity.setUpdateTime(new Date());
+        updateById(entity);
+    }
+
+    @Override
+    public void delete(List<Long> idList) {
+        removeByIds(idList);
+
+        QueryWrapper<PolicyFile> fileWrapper = new QueryWrapper<>();
+        fileWrapper.in("REF_ID", idList);
+        policyFileService.remove(fileWrapper);
+    }
+
+}

+ 36 - 0
src/main/java/com/qdport/service/impl/PolicySystemService.java

@@ -0,0 +1,36 @@
+package com.qdport.service.impl;
+
+import com.qdport.enums.QDPortEnum;
+import com.qdport.modules.system.entity.SysDept;
+import com.qdport.modules.system.service.SysDeptService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Component
+@AllArgsConstructor
+public class PolicySystemService {
+    private final SysDeptService deptService;
+
+    public Map<String, String> getDeptNameAndCompanyName(String deptId){
+        Map<String, String> result = new HashMap<>();
+        SysDept dept = deptService.getById(deptId);
+        result.put("deptName", dept.getName());
+        if (QDPortEnum.SYS_DEPT_TYPE_DEPT.getValue().equals(dept.getDeptType().toString())) {
+            Long pid = dept.getParentId();
+            while (true){
+                SysDept pDept = deptService.getById(pid);
+                if (QDPortEnum.SYS_DEPT_TYPE_COMPANY.getValue().equals(pDept.getDeptType().toString())) {
+                    result.put("companyName", pDept.getName());
+                    break;
+                }
+                pid = pDept.getParentId();
+            }
+        } else {
+            result.put("companyName", dept.getName());
+        }
+        return result;
+    }
+}

+ 97 - 0
src/main/java/com/qdport/service/impl/PolicyTodoServiceImpl.java

@@ -0,0 +1,97 @@
+package com.qdport.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+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.qdport.entity.PolicyFile;
+import com.qdport.entity.PolicyShare;
+import com.qdport.enums.QDPortEnum;
+import com.qdport.query.QueryWrapperBuilder;
+import com.qdport.vo.PolicyFileVO;
+import com.qdport.vo.PolicyShareVO;
+import lombok.AllArgsConstructor;
+import com.qdport.entity.PolicyTodo;
+import com.qdport.query.PolicyTodoQuery;
+import com.qdport.vo.PolicyTodoVO;
+import com.qdport.mapper.PolicyTodoMapper;
+import com.qdport.service.PolicyTodoService;
+import com.qdport.wrapper.PolicyTodoWrapper;
+import com.qdport.core.tool.utils.Func;
+import com.qdport.core.tool.utils.BeanUtil;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 政策待办
+ *
+ * @author yuheng 
+ * @since 1.0.0 2024-10-11
+ */
+@Service
+@AllArgsConstructor
+public class PolicyTodoServiceImpl extends ServiceImpl<PolicyTodoMapper, PolicyTodo> implements PolicyTodoService {
+
+    @Override
+    public IPage<PolicyTodoVO> page(PolicyTodoQuery query) {
+        IPage<PolicyTodo> page = new Page<>(query.getPage(), query.getSize());
+        page = baseMapper.selectPage(page, getWrapper(query));
+        return PolicyTodoWrapper.build().pageVO(page);
+    }
+
+    private QueryWrapper<PolicyTodo> getWrapper(PolicyTodoQuery query){
+        QueryWrapper<PolicyTodo> wrapper = QueryWrapperBuilder.buildQueryWrapper(query, PolicyTodo.class);
+        wrapper.eq("STATUS",QDPortEnum.POLICY_TODO_STATUS_ACTIVE.getValue());
+        wrapper.orderByDesc("CREATE_TIME");
+        return wrapper;
+    }
+
+    @Override
+    public void save(PolicyTodoVO vo) {
+        PolicyTodo entity = BeanUtil.copy(vo,PolicyTodo.class);
+
+        baseMapper.insert(entity);
+    }
+
+    @Override
+    public void save(PolicyShareVO vo) {
+        PolicyTodo todo = new PolicyTodo();
+        todo.setRefId(vo.getId());
+        todo.setRefType(QDPortEnum.POLICY_FILE_REFTYPE_POLICY_SHARE.getValue());
+        todo.setCreateTime(new Date());
+        todo.setStatus(QDPortEnum.POLICY_TODO_STATUS_ACTIVE.getValue());
+        todo.setTodoType(QDPortEnum.POLICY_TODO_TYPE_APPROVE.getValue());
+        todo.setTodoUserId((long) 1);
+        todo.setZcAbstractContent(vo.getAbstractContent());
+        todo.setZcContactPhone(vo.getContactPhone());
+        todo.setZcCreateId(vo.getCreateId());
+        todo.setZcCreateName(vo.getCreateName());
+        todo.setZcCreateTime(vo.getCreateTime());
+        todo.setZcName(vo.getName());
+        todo.setZcType(vo.getZcType());
+        baseMapper.insert(todo);
+    }
+
+
+    @Override
+    public void update(PolicyTodoVO vo) {
+        PolicyTodo entity = BeanUtil.copy(vo,PolicyTodo.class);
+
+        updateById(entity);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void delete(List<Long> idList) {
+        removeByIds(idList);
+    }
+
+
+}

+ 356 - 0
src/main/java/com/qdport/util/StringUtil.java

@@ -0,0 +1,356 @@
+package com.qdport.util;
+
+import java.util.*;
+
+/**
+ * 字符串工具类
+ * 
+ * @author Ready 2012-10-17
+ */
+public class StringUtil {
+
+    /**
+     * 如果字符串为空,则返回空字符""
+     * 
+     * @param str
+     * @return
+     */
+    public static String stringNullToEmpty(String str) {
+        return str == null ? "" : str;
+    }
+
+    /**
+     * 如果字符串为空,则返回null
+     * 
+     * @param str
+     * @return
+     */
+    public static String stringEmptyToNull(String str) {
+        if (str == null)
+            return null;
+        return "".equals(str.trim()) ? null : str.trim();
+    }
+
+    public static String getPre(int count, String c) {
+        StringBuilder result = new StringBuilder("");
+        for (int i = 0; i < count; i++) {
+            result.append(c);
+        }
+        return result.toString();
+    }
+
+    public static String disponseStr(String str) {
+        if (str != null) {
+            return str.trim();
+        }
+        return str;
+    }
+
+    /**
+     * 是否为空,如果为null或者"",返回false,不为空返回true
+     * 
+     * @param target
+     * @return
+     */
+    public static boolean isNotEmpty(Object target) {
+        if (target == null || "".equals(target.toString().trim())
+                || "null".equals(target.toString().toLowerCase().trim())) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * 判断字符串是否为空,如果为空返回true
+     * 
+     * @param target
+     * @return
+     */
+    public static boolean isEmpty(Object target) {
+        return !isNotEmpty(target);
+    }
+
+    /**
+     * @author jchen.Kevin
+     * @date 2015年04月04日
+     * @description 生成长度为length的随机数
+     * @return String
+     * @version 1.0.0
+     */
+    public static String getRandom(int length) {
+        if (length < 1) {
+            return null;
+        }
+        StringBuffer str = new StringBuffer();
+        Random random = new Random();
+        for (int i = 0; i < length; i++) {
+            str.append(String.valueOf(random.nextInt(10)));
+        }
+        return str.toString();
+    }
+
+    /**
+     * @author lkang
+     * @date 2014年5月27日
+     * @description 生成长度为length的16进制字符串验证码
+     * @return String
+     * @version 1.0.0
+     */
+    public static String getValidateString(int length) {
+        /*
+         * 以时间为随机种子
+         */
+        Date d = new Date();
+        long lseed = d.getTime();
+        StringBuffer ramdomCode = new StringBuffer();
+        Random r = new Random(lseed);
+
+        /*
+         * 产生16进制验证码字符串
+         */
+        for (int i = 0; i < length; i++) {
+            ramdomCode.append(Integer.toHexString(r.nextInt(15)));
+        }
+        return ramdomCode.toString();
+    }
+
+    /**
+     * @author lkang
+     * @date 2014年5月27日
+     * @description 生成长度为length的16进制数字验证码
+     * @return String
+     * @version 1.0.0
+     */
+    public static String getValidateNumber(int length) {
+        /*
+         * 以时间为随机种子
+         */
+        Date d = new Date();
+        long lseed = d.getTime();
+        StringBuffer ramdomCode = new StringBuffer();
+        Random r = new Random(lseed);
+
+        /*
+         * 产生数字验证码
+         */
+        for (int i = 0; i < length; i++) {
+            ramdomCode.append(Integer.toString(r.nextInt(9)));
+        }
+        return ramdomCode.toString();
+    }
+
+    /**
+     * @author yldong.water
+     * @date 2014年8月25日
+     * @description 填充特定字符串以满足指定长度
+     * @exception
+     * @param source
+     *            要填充的字符串
+     * @param length
+     *            字符串填充后满足的长度
+     * @param fillString
+     *            填充物
+     * @return 填充后的字符串
+     * @version 1.0.0
+     */
+    public static String fill(String source, int length, String fillString) {
+        if (isNotEmpty(source)) {
+            int sourceLength = source.length();
+            if (sourceLength < length) {
+                source = getPre(length - sourceLength, fillString) + source;
+            }
+        }
+        else {
+            source = getPre(length, fillString);
+        }
+        return source;
+    }
+
+    /**
+     * 格式化文件大小
+     * 
+     * @return
+     */
+    public static String formatFileSize(double size) {
+        size /= 1024;
+        if (size >= 1024) {
+            size /= 1024;
+            double a = Math.round(size * 100);
+            return a / 100 + "MB";
+        }
+        else {
+            double a = Math.round(size * 100);
+            return a / 100 + "KB";
+        }
+    }
+
+    /**
+     * 校验中英文的长度
+     * 
+     * @return
+     */
+    public static int lenString(String str) {
+        if (isNotEmpty(str)) {
+            int l = 0;
+            for (int i = 0; i < str.length(); i++) {
+                if (str.charAt(i) < 255) {
+                    l++;
+                }
+                else {
+                    l += 2;
+                }
+            }
+            return l;
+        }
+        else {
+            return 0;
+        }
+    }
+
+    /**
+     * 截取字符串
+     * 
+     * @return
+     */
+    public static String splitString(String str, int len, boolean flag) {
+        if (isNotEmpty(str)) {
+            if (lenString(str) > len) {
+                int l = 0;
+                int splitLen = 0;
+                for (int i = 0; i < str.length(); i++) {
+                    if (str.charAt(i) < 255) {
+                        l++;
+                    }
+                    else {
+                        l += 2;
+                    }
+                    if (l >= len) {
+                        splitLen = i;
+                        break;
+                    }
+                }
+                if (flag) {
+                    return str.substring(0, splitLen + 1);
+                }
+                else {
+                    return str.substring(0, splitLen + 1) + "...";
+                }
+            }
+            else {
+                return str;
+            }
+        }
+        else {
+            return null;
+        }
+    }
+
+    /**
+     * @author jchen.Kevin
+     * @date 2015年01月28日
+     * @description 判断是否是固定电话
+     * @return boolean
+     * @version 1.0.0
+     */
+    public static boolean isTel(String str) {
+        return str
+                .matches("(^(\\d{3,4}-)?\\d{7,8})$|(13[0-9]{9})|(1[0-9]{10})");
+    }
+
+    /**
+     * @author jchen.Kevin
+     * @date 2015年01月28日
+     * @description 判断是否是手机号码
+     * @return boolean
+     * @version 1.0.0
+     */
+    public static boolean isPhone(String str) {
+        return str.matches("^1[0-9][0-9]\\d{8}$");
+    }
+
+    /**
+     * @author jchen.Kevin
+     * @date 2015年01月28日
+     * @description 判断是否是邮箱
+     * @return boolean
+     * @version 1.0.0
+     */
+    public static boolean isEmail(String str) {
+        return str
+                .matches("^[A-Za-z\\d]+([-_.][A-Za-z\\d]+)*@([A-Za-z\\d]+[-.])+[A-Za-z\\d]{2,5}$");
+    }
+
+    /**
+     * @author jchen.Kevin
+     * @date 2015年01月28日
+     * @description 判断是否是中国邮政编码(6位)
+     * @return boolean
+     * @version 1.0.0
+     */
+    public static boolean isZipCode(String str) {
+        return str.matches("^[1-9][0-9]{5}$");
+    }
+
+    /**
+     * @author jchen.Kevin
+     * @date 2015年01月28日
+     * @description 判断是否是腾讯QQ号
+     * @return boolean
+     * @version 1.0.0
+     */
+    public static boolean isQQ(String str) {
+        return str.matches("[1-9][0-9]{4,}");
+    }
+
+    /**
+     * @author jchen.Kevin
+     * @date 2015年01月28日
+     * @description 判断是否是身份证(15位或18位)
+     * @return boolean
+     * @version 1.0.0
+     */
+    public static boolean isIdcard(String str) {
+        return str.matches("\\d{15}|\\d{18}");
+    }
+
+
+    /*
+     * 得到两个数组中相同元素
+     */
+    public static Set<Integer> getSames(Integer[] a, Integer[] b) {
+        Set<Integer> sames = new HashSet<Integer>();
+        Set<Integer> set = new HashSet<Integer>(Arrays.asList(a));
+
+        for (Integer i : b) {
+            if (!set.add(i))
+                sames.add(i);
+        }
+
+        return sames;
+    }
+    /*
+    * 得到两个数组中相同元素
+    */
+    public static Set<Integer> getDefferent(Integer[] a, Integer[] b) {
+        Set<Integer> defferents = new HashSet<Integer>();
+        Set<Integer> set = new HashSet<Integer>(Arrays.asList(a));
+
+        for (Integer i : b) {
+            if (set.add(i))
+                defferents.add(i);
+        }
+
+        return defferents;
+    }
+
+    /*
+     * String数组转int数组
+    */
+    public static Integer[] StringToInt(String[] stringArr){
+        Integer [] intArr = new Integer[stringArr.length];
+        for(int i = 0; i < stringArr.length; i++){
+            intArr[i] = Integer.parseInt(stringArr[i]);
+        }
+        return intArr;
+    }
+}

+ 18 - 0
src/main/java/com/qdport/vo/PolicyFileVO.java

@@ -0,0 +1,18 @@
+package com.qdport.vo;
+import com.qdport.entity.PolicyFile;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+* 文件存储
+*
+* @author yuheng 
+* @since 1.0.0 2024-10-10
+*/
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PolicyFileVO extends PolicyFile {
+	private static final long serialVersionUID = 1L;
+
+
+}

+ 18 - 0
src/main/java/com/qdport/vo/PolicyFlowNoVO.java

@@ -0,0 +1,18 @@
+package com.qdport.vo;
+import com.qdport.entity.PolicyFlowNo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+* 编号生成
+*
+* @author yuheng 
+* @since 1.0.0 2024-10-09
+*/
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PolicyFlowNoVO extends PolicyFlowNo {
+	private static final long serialVersionUID = 1L;
+
+
+}

+ 25 - 0
src/main/java/com/qdport/vo/PolicyShareVO.java

@@ -0,0 +1,25 @@
+package com.qdport.vo;
+
+import com.qdport.entity.PolicyShare;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+/**
+ * 政策共享
+ *
+ * @author yuheng
+ * @since 1.0.0 2024-09-30
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PolicyShareVO extends PolicyShare {
+    private static final long serialVersionUID = 1L;
+
+    private String deptName;
+
+    private String companyName;
+
+    private List<PolicyFileVO> fileList;
+}

+ 20 - 0
src/main/java/com/qdport/vo/PolicyTodoVO.java

@@ -0,0 +1,20 @@
+package com.qdport.vo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.qdport.entity.PolicyTodo;
+/**
+* 政策待办
+*
+* @author yuheng 
+* @since 1.0.0 2024-10-11
+*/
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PolicyTodoVO extends PolicyTodo {
+	private static final long serialVersionUID = 1L;
+
+	private String zcDeptName;
+
+	private String zcCompanyName;
+
+}

+ 32 - 0
src/main/java/com/qdport/wrapper/PolicyFileWrapper.java

@@ -0,0 +1,32 @@
+package com.qdport.wrapper;
+import com.qdport.entity.PolicyFile;
+import com.qdport.vo.PolicyFileVO;
+import com.qdport.core.mp.support.BaseEntityWrapper;
+import com.qdport.core.tool.utils.BeanUtil;
+import java.util.Objects;
+
+import lombok.Data;
+/**
+* 文件存储Wrapper
+*
+* @author yuheng 
+* @since 1.0.0 2024-10-10
+*/
+@Data
+public class PolicyFileWrapper extends BaseEntityWrapper<PolicyFile, PolicyFileVO> {
+
+    public static PolicyFileWrapper build() {
+        return new PolicyFileWrapper();
+    }
+
+    @Override
+    public PolicyFileVO entityVO(PolicyFile entity) {
+        PolicyFileVO vo = Objects.requireNonNull(BeanUtil.copy(entity, PolicyFileVO.class));
+        //User createUser = UserCache.getUser(entity.getCreateUser());
+        //User updateUser = UserCache.getUser(entity.getUpdateUser());
+        //vo.setCreateUserName(createUser.getName());
+        //vo.setUpdateUserName(updateUser.getName());
+        return vo;
+    }
+
+}

+ 32 - 0
src/main/java/com/qdport/wrapper/PolicyFlowNoWrapper.java

@@ -0,0 +1,32 @@
+package com.qdport.wrapper;
+import com.qdport.entity.PolicyFlowNo;
+import com.qdport.vo.PolicyFlowNoVO;
+import com.qdport.core.mp.support.BaseEntityWrapper;
+import com.qdport.core.tool.utils.BeanUtil;
+import java.util.Objects;
+
+import lombok.Data;
+/**
+* 编号生成Wrapper
+*
+* @author yuheng 
+* @since 1.0.0 2024-10-09
+*/
+@Data
+public class PolicyFlowNoWrapper extends BaseEntityWrapper<PolicyFlowNo, PolicyFlowNoVO> {
+
+    public static PolicyFlowNoWrapper build() {
+        return new PolicyFlowNoWrapper();
+    }
+
+    @Override
+    public PolicyFlowNoVO entityVO(PolicyFlowNo entity) {
+        PolicyFlowNoVO vo = Objects.requireNonNull(BeanUtil.copy(entity, PolicyFlowNoVO.class));
+        //User createUser = UserCache.getUser(entity.getCreateUser());
+        //User updateUser = UserCache.getUser(entity.getUpdateUser());
+        //vo.setCreateUserName(createUser.getName());
+        //vo.setUpdateUserName(updateUser.getName());
+        return vo;
+    }
+
+}

+ 32 - 0
src/main/java/com/qdport/wrapper/PolicyShareWrapper.java

@@ -0,0 +1,32 @@
+package com.qdport.wrapper;
+import com.qdport.entity.PolicyShare;
+import com.qdport.vo.PolicyShareVO;
+import com.qdport.core.mp.support.BaseEntityWrapper;
+import com.qdport.core.tool.utils.BeanUtil;
+import java.util.Objects;
+
+import lombok.Data;
+/**
+* 政策共享Wrapper
+*
+* @author yuheng
+* @since 1.0.0 2024-09-30
+*/
+@Data
+public class PolicyShareWrapper extends BaseEntityWrapper<PolicyShare, PolicyShareVO> {
+
+    public static PolicyShareWrapper build() {
+        return new PolicyShareWrapper();
+    }
+
+    @Override
+    public PolicyShareVO entityVO(PolicyShare entity) {
+        PolicyShareVO vo = Objects.requireNonNull(BeanUtil.copy(entity, PolicyShareVO.class));
+//        SysUser createUser = UserCache.getUser(entity.getCreateId());
+        //User updateUser = UserCache.getUser(entity.getUpdateUser());
+        //vo.setCreateUserName(createUser.getName());
+        //vo.setUpdateUserName(updateUser.getName());
+        return vo;
+    }
+
+}

+ 31 - 0
src/main/java/com/qdport/wrapper/PolicyTodoWrapper.java

@@ -0,0 +1,31 @@
+package com.qdport.wrapper;
+import com.qdport.core.mp.support.BaseEntityWrapper;
+import com.qdport.core.tool.utils.BeanUtil;
+import java.util.Objects;
+import com.qdport.vo.PolicyTodoVO;
+import com.qdport.entity.PolicyTodo;
+import lombok.Data;
+/**
+* 政策待办Wrapper
+*
+* @author yuheng 
+* @since 1.0.0 2024-10-11
+*/
+@Data
+public class PolicyTodoWrapper extends BaseEntityWrapper<PolicyTodo, PolicyTodoVO> {
+
+    public static PolicyTodoWrapper build() {
+        return new PolicyTodoWrapper();
+    }
+
+    @Override
+    public PolicyTodoVO entityVO(PolicyTodo entity) {
+        PolicyTodoVO vo = Objects.requireNonNull(BeanUtil.copy(entity, PolicyTodoVO.class));
+        //User createUser = UserCache.getUser(entity.getCreateUser());
+        //User updateUser = UserCache.getUser(entity.getUpdateUser());
+        //vo.setCreateUserName(createUser.getName());
+        //vo.setUpdateUserName(updateUser.getName());
+        return vo;
+    }
+
+}

+ 6 - 6
src/main/resources/application-dev.yml

@@ -59,20 +59,20 @@ qdport:
       - /gen/**
 
 oss:
-  enabled: false
+  enabled: true
   name: minio
   tenant-mode: false
-  endpoint: 127.0.0.0
-  access-key: 你的项目配置
-  secret-key: 你的项目配置
-  bucketName: 你的项目配置
+  endpoint: http://8.142.210.43:9000
+  access-key: R765A7R2UCSF0VNH1EEQ
+  secret-key: +O76+jRxIOLqiO8yKdpm8dZ5+mUStxAniQjKaZNo
+  bucketName: qdg
 
 flowable:
   activity-font-name: \u5B8B\u4F53
   label-font-name: \u5B8B\u4F53
   annotation-font-name: \u5B8B\u4F53
   check-process-definitions: false
-  database-schema-update: true # 升级flowable 表自动更新
+  database-schema-update: false # 升级flowable 表自动更新
   async-executor-activate: false # 定时任务
   app:
     enabled: false

+ 26 - 0
src/main/resources/mapper/PolicyShareMapper.xml

@@ -0,0 +1,26 @@
+<?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.qdport.mapper.PolicyShareMapper">
+
+    <resultMap type="com.qdport.entity.PolicyShare" id="policyShareMap">
+        <result property="id" column="ID"/>
+        <result property="businessNo" column="BUSINESS_NO"/>
+        <result property="status" column="STATUS"/>
+        <result property="name" column="NAME"/>
+        <result property="abstractContent" column="ABSTRACT_CONTENT"/>
+        <result property="level" column="LEVEL"/>
+        <result property="type" column="TYPE"/>
+        <result property="createId" column="CREATE_ID"/>
+        <result property="createName" column="CREATE_NAME"/>
+        <result property="contactPhone" column="CONTACT_PHONE"/>
+        <result property="createTime" column="CREATE_TIME"/>
+        <result property="score" column="SCORE"/>
+        <result property="isInWh" column="IS_IN_WH"/>
+        <result property="inWhType" column="IN_WH_TYPE"/>
+        <result property="docNo" column="DOC_NO"/>
+        <result property="updateTime" column="UPDATE_TIME"/>
+        <result property="updateId" column="UPDATE_ID"/>
+    </resultMap>
+
+</mapper>