Browse Source

政策争取

wanghongzhi 1 year ago
parent
commit
7dd4c1f059
30 changed files with 1723 additions and 32 deletions
  1. 116 12
      src/main/java/com/qdport/controller/ImportDataController.java
  2. 211 0
      src/main/java/com/qdport/controller/PolicyCaseController.java
  3. 23 0
      src/main/java/com/qdport/controller/PolicyShareController.java
  4. 247 0
      src/main/java/com/qdport/controller/PolicyStriveController.java
  5. 122 0
      src/main/java/com/qdport/entity/PolicyCase.java
  6. 204 0
      src/main/java/com/qdport/entity/PolicyStrive.java
  7. 15 0
      src/main/java/com/qdport/enums/QDPortEnum.java
  8. 48 0
      src/main/java/com/qdport/listener/PolicyStriveMonthReadListener.java
  9. 48 0
      src/main/java/com/qdport/listener/PolicyStriveReadListener.java
  10. 14 0
      src/main/java/com/qdport/mapper/PolicyCaseMapper.java
  11. 14 0
      src/main/java/com/qdport/mapper/PolicyStriveMapper.java
  12. 37 0
      src/main/java/com/qdport/query/PolicyCaseQuery.java
  13. 53 0
      src/main/java/com/qdport/query/PolicyStriveQuery.java
  14. 4 0
      src/main/java/com/qdport/query/PolicyTodoQuery.java
  15. 24 0
      src/main/java/com/qdport/service/PolicyCaseService.java
  16. 26 0
      src/main/java/com/qdport/service/PolicyStriveService.java
  17. 6 0
      src/main/java/com/qdport/service/PolicyTodoService.java
  18. 106 0
      src/main/java/com/qdport/service/impl/PolicyCaseServiceImpl.java
  19. 5 5
      src/main/java/com/qdport/service/impl/PolicyShareServiceImpl.java
  20. 177 0
      src/main/java/com/qdport/service/impl/PolicyStriveServiceImpl.java
  21. 43 11
      src/main/java/com/qdport/service/impl/PolicyTodoServiceImpl.java
  22. 17 0
      src/main/java/com/qdport/util/ExcelUtil.java
  23. 28 0
      src/main/java/com/qdport/vo/PolicyCaseVO.java
  24. 2 0
      src/main/java/com/qdport/vo/PolicyShareExcelVO.java
  25. 43 0
      src/main/java/com/qdport/vo/PolicyStriveExcelVO.java
  26. 27 0
      src/main/java/com/qdport/vo/PolicyStriveVO.java
  27. 31 0
      src/main/java/com/qdport/wrapper/PolicyCaseWrapper.java
  28. 31 0
      src/main/java/com/qdport/wrapper/PolicyStriveWrapper.java
  29. 1 1
      src/main/resources/application-dev.yml
  30. 0 3
      src/main/resources/application.yml

+ 116 - 12
src/main/java/com/qdport/controller/ImportDataController.java

@@ -1,15 +1,23 @@
 package com.qdport.controller;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.qdport.core.tool.api.R;
+import com.qdport.core.tool.utils.DateUtil;
+import com.qdport.entity.PolicyStrive;
 import com.qdport.enums.QDPortEnum;
 import com.qdport.modules.system.entity.SysUser;
 import com.qdport.modules.system.service.TSysUserService;
 import com.qdport.service.PolicyShareService;
+import com.qdport.service.PolicyStriveService;
 import com.qdport.util.ExcelUtil;
 import com.qdport.util.HttpsUtil;
+import com.qdport.util.StringUtil;
 import com.qdport.vo.PolicyShareExcelVO;
 import com.qdport.vo.PolicyShareVO;
+import com.qdport.vo.PolicyStriveExcelVO;
+import com.qdport.vo.PolicyStriveVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
@@ -19,7 +27,10 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @RestController
 @RequestMapping("qdport-zcgx/import")
@@ -27,6 +38,7 @@ import java.util.List;
 @AllArgsConstructor
 public class ImportDataController {
     private final PolicyShareService policyShareService;
+    private final PolicyStriveService policyStriveService;
     private final TSysUserService sysUserService;
 
 
@@ -39,24 +51,116 @@ public class ImportDataController {
         if (list.isEmpty()) {
             throw new Exception("excel中缺失有效数据");
         }
+        list = list.stream().filter(model -> StringUtil.isNotEmpty(model.getIndex())).collect(Collectors.toList());
+        List<PolicyShareExcelVO> excelVOList = new ArrayList<>();
         for (PolicyShareExcelVO model : list) {
-            PolicyShareVO shareVO = new PolicyShareVO();
-            BeanUtils.copyProperties(model, shareVO);
+            try {
+                PolicyShareVO shareVO = new PolicyShareVO();
+                BeanUtils.copyProperties(model, shareVO);
 
-            shareVO.setStatus(QDPortEnum.POLICY_SHARE_STATUS_ACTIVE.getValue());
+                shareVO.setStatus(QDPortEnum.POLICY_SHARE_STATUS_ACTIVE.getValue());
 
-            QueryWrapper<SysUser> userWrapper = new QueryWrapper<>();
-            userWrapper.eq("MOBILE", model.getContactPhone());
-            userWrapper.eq("NAME", model.getCreateName());
-            SysUser createUser = sysUserService.getOne(userWrapper);
-            shareVO.setCreateId(Long.valueOf(createUser.getId()));
-            shareVO.setUpdateId(Long.valueOf(createUser.getId()));
-            shareVO.setCreateName(createUser.getName());
+                QueryWrapper<SysUser> userWrapper = new QueryWrapper<>();
+                userWrapper.eq("MOBILE", model.getContactPhone());
+                userWrapper.eq("NAME", model.getCreateName());
+                SysUser createUser = sysUserService.getOne(userWrapper);
+                shareVO.setCreateId(Long.valueOf(createUser.getId()));
+                shareVO.setUpdateId(Long.valueOf(createUser.getId()));
+                shareVO.setCreateName(createUser.getName());
 
-            policyShareService.save(shareVO);
+                policyShareService.save(shareVO);
+            } catch (Exception e) {
+                excelVOList.add(model);
+            }
         }
+        return R.data(excelVOList);
+    }
+
+    @PostMapping("/policyStrive")
+    @ApiOperation(value = "导入政策争取")
+    public R policyStrive(@RequestBody PolicyStriveVO vo) throws Exception {
+        byte[] byteFromUrl = HttpsUtil.getByteFromUrl(vo.getExcelUrl());
+        List<PolicyStriveExcelVO> list = ExcelUtil.readPolicyStriveFromXls(byteFromUrl);
+
+        if (list.isEmpty()) {
+            throw new Exception("excel中缺失有效数据");
+        }
+        list = list.stream().filter(model -> StringUtil.isNotEmpty(model.getIndex())).collect(Collectors.toList());
+        List<PolicyStriveExcelVO> excelVOList = new ArrayList<>();
+        for (PolicyStriveExcelVO model : list) {
+            try {
+                PolicyStriveVO striveVO = new PolicyStriveVO();
+                BeanUtils.copyProperties(model, striveVO);
+
+                Date yjFinishTime = DateUtil.parse(model.getYjFinishTime(), DateUtil.PATTERN_DATE);
+                striveVO.setYjFinishTime(yjFinishTime);
+
+                striveVO.setStatus(QDPortEnum.POLICY_SHARE_STATUS_ACTIVE.getValue());
 
+                QueryWrapper<SysUser> userWrapper = new QueryWrapper<>();
+                userWrapper.eq("MOBILE", model.getContactPhone());
+                userWrapper.eq("NAME", model.getCreateName());
+                SysUser createUser = sysUserService.getOne(userWrapper);
+                striveVO.setCreateId(Long.valueOf(createUser.getId()));
+                striveVO.setUpdateId(Long.valueOf(createUser.getId()));
+                striveVO.setCreateName(createUser.getName());
+
+                policyStriveService.save(striveVO);
+            } catch (Exception e) {
+                excelVOList.add(model);
+            }
+        }
+        return R.data(excelVOList);
+    }
+
+    @PostMapping("/policyStriveMonth")
+    @ApiOperation(value = "导入政策争取月度")
+    public R policyStriveMonth(@RequestBody PolicyStriveVO vo) throws Exception {
+        byte[] byteFromUrl = HttpsUtil.getByteFromUrl(vo.getExcelUrl());
+        List<PolicyStriveExcelVO> list = ExcelUtil.readPolicyStriveMonthFromXls(byteFromUrl);
+
+        if (list.isEmpty()) {
+            throw new Exception("excel中缺失有效数据");
+        }
+        list = list.stream().filter(model -> StringUtil.isNotEmpty(model.getIndex())).collect(Collectors.toList());
+        List<PolicyStriveExcelVO> excelVOList = new ArrayList<>();
+        for (PolicyStriveExcelVO model : list) {
+            try {
+                PolicyStriveVO striveVO = new PolicyStriveVO();
+                BeanUtils.copyProperties(model, striveVO);
+
+                QueryWrapper<PolicyStrive> striveWrapper = new QueryWrapper<>();
+                striveWrapper.eq("BUSINESS_NO", model.getBusinessNo());
+                PolicyStrive existStrive = policyStriveService.getOne(striveWrapper);
+                striveVO.setId(existStrive.getId());
+
+                if ("是".equals(model.getIsLand())) {
+                    striveVO.setIsLand(1);
+                } else {
+                    striveVO.setIsLand(0);
+                }
+                String[] partSplit = model.getPartPersonArr().split(",");
+                JSONArray array = new JSONArray();
+                for (String partName : partSplit) {
+                    JSONObject partObj = new JSONObject();
+                    partObj.put("name", partName);
+                    array.add(partObj);
+                }
+                striveVO.setPartPersonArr(array.toJSONString());
+
+                QueryWrapper<SysUser> userWrapper = new QueryWrapper<>();
+                userWrapper.eq("MOBILE", model.getContactPhone());
+                userWrapper.eq("NAME", model.getCreateName());
+                SysUser createUser = sysUserService.getOne(userWrapper);
+                striveVO.setUpdateId(Long.valueOf(createUser.getId()));
+                striveVO.setUpdateTime(new Date());
+
+                policyStriveService.updateById(striveVO);
+            } catch (Exception e) {
+                excelVOList.add(model);
+            }
+        }
 
-        return R.data("导入成功");
+        return R.data(excelVOList);
     }
 }

+ 211 - 0
src/main/java/com/qdport/controller/PolicyCaseController.java

@@ -0,0 +1,211 @@
+package com.qdport.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qdport.entity.PolicyStrive;
+import com.qdport.entity.PolicyTodo;
+import com.qdport.enums.QDPortEnum;
+import com.qdport.modules.system.entity.SysUser;
+import com.qdport.modules.system.service.TSysUserService;
+import com.qdport.service.PolicyFileService;
+import com.qdport.service.PolicyStriveService;
+import com.qdport.service.PolicyTodoService;
+import com.qdport.service.impl.PolicySystemService;
+import com.qdport.util.StringUtil;
+import com.qdport.vo.PolicyFileVO;
+import lombok.AllArgsConstructor;
+import com.qdport.entity.PolicyCase;
+import com.qdport.service.PolicyCaseService;
+import com.qdport.query.PolicyCaseQuery;
+import com.qdport.vo.PolicyCaseVO;
+import com.qdport.wrapper.PolicyCaseWrapper;
+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-10-17
+*/
+@RestController
+@RequestMapping("qdport-zcgx/case")
+@Api(value = "案例分享", tags = "案例分享")
+@AllArgsConstructor
+public class PolicyCaseController extends QdportController {
+    private final PolicyCaseService policyCaseService;
+    private final TSysUserService sysUserService;
+    private final PolicySystemService policySystemService;
+    private final PolicyFileService policyFileService;
+    private final PolicyTodoService policyTodoService;
+    private final PolicyStriveService policyStriveService;
+
+    /**
+    * 分页
+    */
+    @GetMapping("page")
+    @ApiOperation(value = "分页", notes = "分页")
+    public R<IPage<PolicyCaseVO>> page(@Valid PolicyCaseQuery query){
+        IPage<PolicyCaseVO> page = policyCaseService.page(query);
+        List<PolicyCaseVO> records = page.getRecords();
+        for (PolicyCaseVO 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_STRIVE.getValue());
+            model.setFileList(fileList);
+
+            PolicyStrive strive = policyStriveService.getById(model.getStriveId());
+            model.setPolicyStrive(strive);
+        }
+        return R.data(page);
+    }
+
+    /**
+    * 详情
+    */
+    @GetMapping("{id}")
+    @ApiOperation(value = "详情", notes = "id")
+    public R<PolicyCaseVO> get(@PathVariable("id") Long id){
+        PolicyCase entity = policyCaseService.getById(id);
+        PolicyCaseVO vo = PolicyCaseWrapper.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_STRIVE.getValue());
+
+        vo.setFileList(fileList);
+        return R.data(vo);
+    }
+
+    /**
+    * 新增
+    */
+    @PostMapping("/save")
+    @ApiOperation(value = "新增", notes = "传入PolicyCase")
+    public R save(@RequestBody PolicyCaseVO vo){
+        vo.setStatus(QDPortEnum.POLICY_CASE_STATUS_ACTIVE.getValue());
+        policyCaseService.save(vo);
+        return R.success("保存成功");
+    }
+
+    @PostMapping("/saveDone")
+    @ApiOperation(value = "新增", notes = "传入PolicyStrive")
+    @Transactional(rollbackFor = Exception.class)
+    public R saveDone(@RequestBody PolicyCaseVO vo) {
+        vo.setStatus(QDPortEnum.POLICY_CASE_STATUS_DONE.getValue());
+        policyCaseService.save(vo);
+        return R.success("保存成功");
+    }
+
+    @PostMapping("/saveApprove")
+    @ApiOperation(value = "新增并且提交", notes = "传入PolicyStrive")
+    @Transactional(rollbackFor = Exception.class)
+    public R saveApprove(@RequestBody PolicyCaseVO vo) {
+        if (StringUtil.isEmpty(vo.getId())) {
+            vo.setStatus(QDPortEnum.POLICY_CASE_STATUS_APPROVE.getValue());
+            policyCaseService.save(vo);
+        } else {
+            vo.setStatus(QDPortEnum.POLICY_CASE_STATUS_APPROVE.getValue());
+            policyCaseService.update(vo);
+        }
+        PolicyStrive strive = policyStriveService.getById(vo.getStriveId());
+        vo.setPolicyStrive(strive);
+
+        policyTodoService.save(vo);
+        return R.success("新增并且提交成功");
+    }
+
+    /**
+    * 修改
+    */
+    @PostMapping("/update")
+    public R update(@RequestBody @Valid PolicyCaseVO vo){
+        policyCaseService.update(vo);
+        return R.success("更新成功");
+    }
+
+    @PostMapping("/withdraw")
+    @Transactional(rollbackFor = Exception.class)
+    public R withdraw(@RequestBody @Valid PolicyCaseVO vo) {
+        vo.setStatus(QDPortEnum.POLICY_CASE_STATUS_ACTIVE.getValue());
+        vo.setUpdateTime(new Date());
+        policyCaseService.updateById(vo);
+
+        QueryWrapper<PolicyTodo> todoQueryWrapper = new QueryWrapper<>();
+        todoQueryWrapper.eq("REF_ID", vo.getId());
+        todoQueryWrapper.eq("REF_TYPE", QDPortEnum.POLICY_TODO_REFTYPE_POLICY_CASE.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 PolicyCaseVO vo) {
+        vo.setStatus(QDPortEnum.POLICY_CASE_STATUS_DONE.getValue());
+        vo.setUpdateTime(new Date());
+        policyCaseService.updateById(vo);
+
+        QueryWrapper<PolicyTodo> todoQueryWrapper = new QueryWrapper<>();
+        todoQueryWrapper.eq("REF_ID", vo.getId());
+        todoQueryWrapper.eq("REF_TYPE", QDPortEnum.POLICY_TODO_REFTYPE_POLICY_CASE.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("/refuse")
+    @Transactional(rollbackFor = Exception.class)
+    public R refuse(@RequestBody @Valid PolicyCaseVO vo) {
+        vo.setStatus(QDPortEnum.POLICY_CASE_STATUS_INACTIVE.getValue());
+        vo.setUpdateTime(new Date());
+        policyCaseService.updateById(vo);
+
+        QueryWrapper<PolicyTodo> todoQueryWrapper = new QueryWrapper<>();
+        todoQueryWrapper.eq("REF_ID", vo.getId());
+        todoQueryWrapper.eq("REF_TYPE", QDPortEnum.POLICY_TODO_REFTYPE_POLICY_CASE.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")
+    public R delete(@ApiParam(value = "主键集合", required = true) @RequestParam(name = "ids") String ids){
+         List<Long> idList = Func.toLongList(ids);
+        policyCaseService.delete(idList);
+        return R.success("删除成功");
+    }
+}

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

@@ -27,6 +27,7 @@ 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;
 
@@ -138,6 +139,7 @@ public class PolicyShareController extends QdportController {
     @Transactional(rollbackFor = Exception.class)
     public R withdraw(@RequestBody @Valid PolicyShareVO vo) {
         vo.setStatus(QDPortEnum.POLICY_SHARE_STATUS_ACTIVE.getValue());
+        vo.setUpdateTime(new Date());
         policyShareService.updateById(vo);
 
         QueryWrapper<PolicyTodo> todoQueryWrapper = new QueryWrapper<>();
@@ -156,6 +158,27 @@ public class PolicyShareController extends QdportController {
     @Transactional(rollbackFor = Exception.class)
     public R approve(@RequestBody @Valid PolicyShareVO vo) {
         vo.setStatus(QDPortEnum.POLICY_SHARE_STATUS_DONE.getValue());
+        vo.setUpdateTime(new Date());
+        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("/refuse")
+    @Transactional(rollbackFor = Exception.class)
+    public R refuse(@RequestBody @Valid PolicyShareVO vo) {
+        vo.setStatus(QDPortEnum.POLICY_SHARE_STATUS_INACTIVE.getValue());
+        vo.setUpdateTime(new Date());
         policyShareService.updateById(vo);
 
         QueryWrapper<PolicyTodo> todoQueryWrapper = new QueryWrapper<>();

+ 247 - 0
src/main/java/com/qdport/controller/PolicyStriveController.java

@@ -0,0 +1,247 @@
+package com.qdport.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qdport.entity.PolicyTodo;
+import com.qdport.enums.QDPortEnum;
+import com.qdport.modules.system.entity.SysUser;
+import com.qdport.modules.system.service.TSysUserService;
+import com.qdport.service.PolicyFileService;
+import com.qdport.service.PolicyTodoService;
+import com.qdport.service.impl.PolicySystemService;
+import com.qdport.util.StringUtil;
+import com.qdport.vo.PolicyFileVO;
+import lombok.AllArgsConstructor;
+import com.qdport.entity.PolicyStrive;
+import com.qdport.service.PolicyStriveService;
+import com.qdport.query.PolicyStriveQuery;
+import com.qdport.vo.PolicyStriveVO;
+import com.qdport.wrapper.PolicyStriveWrapper;
+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.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 政策争取
+ *
+ * @author yuheng
+ * @since 1.0.0 2024-10-14
+ */
+@RestController
+@RequestMapping("qdport-zcgx/strive")
+@Api(value = "政策争取", tags = "政策争取")
+@AllArgsConstructor
+public class PolicyStriveController extends QdportController {
+    private final PolicyStriveService policyStriveService;
+    private final TSysUserService sysUserService;
+    private final PolicySystemService policySystemService;
+    private final PolicyFileService policyFileService;
+    private final PolicyTodoService policyTodoService;
+
+    /**
+     * 分页
+     */
+    @GetMapping("page")
+    @ApiOperation(value = "分页", notes = "分页")
+    public R<IPage<PolicyStriveVO>> page(@Valid PolicyStriveQuery query) {
+        IPage<PolicyStriveVO> page = policyStriveService.page(query);
+        List<PolicyStriveVO> records = page.getRecords();
+        for (PolicyStriveVO 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_STRIVE.getValue());
+            model.setFileList(fileList);
+        }
+        return R.data(page);
+    }
+
+    /**
+     * 详情
+     */
+    @GetMapping("{id}")
+    @ApiOperation(value = "详情", notes = "id")
+    public R<PolicyStriveVO> get(@PathVariable("id") Long id) {
+        PolicyStrive entity = policyStriveService.getById(id);
+
+        PolicyStriveVO vo = PolicyStriveWrapper.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_STRIVE.getValue());
+
+        vo.setFileList(fileList);
+        return R.data(vo);
+    }
+
+    /**
+     * 新增
+     */
+    @PostMapping("/save")
+    @ApiOperation(value = "新增", notes = "传入PolicyStrive")
+    @Transactional(rollbackFor = Exception.class)
+    public R save(@RequestBody PolicyStriveVO vo) {
+        vo.setStatus(QDPortEnum.POLICY_STRIVE_STATUS_ACTIVE.getValue());
+        policyStriveService.save(vo);
+        return R.success("保存成功");
+    }
+
+    @PostMapping("/saveDone")
+    @ApiOperation(value = "新增", notes = "传入PolicyStrive")
+    @Transactional(rollbackFor = Exception.class)
+    public R saveDone(@RequestBody PolicyStriveVO vo) {
+        vo.setStatus(QDPortEnum.POLICY_STRIVE_STATUS_DONE.getValue());
+        policyStriveService.save(vo);
+        return R.success("保存成功");
+    }
+
+    @PostMapping("/saveApprove")
+    @ApiOperation(value = "新增并且提交", notes = "传入PolicyStrive")
+    @Transactional(rollbackFor = Exception.class)
+    public R saveApprove(@RequestBody PolicyStriveVO vo) {
+        if (StringUtil.isEmpty(vo.getId())) {
+            vo.setStatus(QDPortEnum.POLICY_STRIVE_STATUS_APPROVE.getValue());
+            policyStriveService.save(vo);
+        } else {
+            vo.setStatus(QDPortEnum.POLICY_STRIVE_STATUS_APPROVE.getValue());
+            policyStriveService.update(vo);
+        }
+
+        policyTodoService.save(vo);
+        return R.success("新增并且提交成功");
+    }
+
+    /**
+     * 修改
+     */
+    @PostMapping("/update")
+    public R update(@RequestBody @Valid PolicyStriveVO vo) {
+        policyStriveService.update(vo);
+        return R.success("更新成功");
+    }
+
+    @PostMapping("/updateById")
+    @ApiOperation(value = "月度维护、奖励分配", notes = "传入PolicyStrive")
+    public R updateById(@RequestBody @Valid PolicyStriveVO vo) {
+        if (vo.getIsReward() == 1) {
+            String partPersonArr = vo.getPartPersonArr();
+            JSONArray array = JSON.parseArray(partPersonArr);
+            BigDecimal total = BigDecimal.ZERO;
+            for (Object object : array) {
+                JSONObject obj = (JSONObject) object;
+                BigDecimal reward = obj.getBigDecimal("reward");
+                if (StringUtil.isEmpty(reward)) {
+                    continue;
+                }
+                total = total.add(reward);
+            }
+            if (vo.getRewardScore().compareTo(total) < 0) {
+                return R.fail("分配总金额超出奖励标准");
+            }
+        }
+        policyStriveService.updateById(vo);
+        return R.success("更新成功");
+    }
+
+    @PostMapping("/withdraw")
+    @Transactional(rollbackFor = Exception.class)
+    public R withdraw(@RequestBody @Valid PolicyStriveVO vo) {
+        vo.setStatus(QDPortEnum.POLICY_STRIVE_STATUS_ACTIVE.getValue());
+        vo.setUpdateTime(new Date());
+        policyStriveService.updateById(vo);
+
+        QueryWrapper<PolicyTodo> todoQueryWrapper = new QueryWrapper<>();
+        todoQueryWrapper.eq("REF_ID", vo.getId());
+        todoQueryWrapper.eq("REF_TYPE", QDPortEnum.POLICY_TODO_REFTYPE_POLICY_STRIVE.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 PolicyStriveVO vo) {
+        vo.setStatus(QDPortEnum.POLICY_STRIVE_STATUS_DONE.getValue());
+        vo.setUpdateTime(new Date());
+        policyStriveService.updateById(vo);
+
+        QueryWrapper<PolicyTodo> todoQueryWrapper = new QueryWrapper<>();
+        todoQueryWrapper.eq("REF_ID", vo.getId());
+        todoQueryWrapper.eq("REF_TYPE", QDPortEnum.POLICY_TODO_REFTYPE_POLICY_STRIVE.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("/refuse")
+    @Transactional(rollbackFor = Exception.class)
+    public R refuse(@RequestBody @Valid PolicyStriveVO vo) {
+        vo.setStatus(QDPortEnum.POLICY_STRIVE_STATUS_INACTIVE.getValue());
+        vo.setUpdateTime(new Date());
+        policyStriveService.updateById(vo);
+
+        QueryWrapper<PolicyTodo> todoQueryWrapper = new QueryWrapper<>();
+        todoQueryWrapper.eq("REF_ID", vo.getId());
+        todoQueryWrapper.eq("REF_TYPE", QDPortEnum.POLICY_TODO_REFTYPE_POLICY_STRIVE.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")
+    public R delete(@ApiParam(value = "主键集合", required = true) @RequestParam(name = "ids") String ids) {
+        List<Long> idList = Func.toLongList(ids);
+        policyStriveService.delete(idList);
+        return R.success("删除成功");
+    }
+
+    @PostMapping("/calculate")
+    public R calculate(@RequestBody @Valid PolicyStriveVO vo) {
+        BigDecimal rewardRadix = vo.getRewardRadix();
+        BigDecimal implementScore = vo.getImplementScore();
+        BigDecimal promotionScore = vo.getPromotionScore();
+        BigDecimal striveScore = vo.getStriveScore();
+
+        BigDecimal number = rewardRadix.multiply(implementScore)
+                .multiply(promotionScore).multiply(striveScore).setScale(2, RoundingMode.HALF_UP);
+        return R.data(number);
+    }
+}

+ 122 - 0
src/main/java/com/qdport/entity/PolicyCase.java

@@ -0,0 +1,122 @@
+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-17
+ */
+
+@Data
+@TableName("POLICY_CASE")
+@ApiModel(value = "PolicyCase对象", description = "案例分享")
+public class PolicyCase 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;
+
+	/**
+	* 政策争取id
+	*/
+    @ApiModelProperty(value = "政策争取id")
+	@JsonSerialize(
+			using = ToStringSerializer.class
+	)
+	private Long striveId;
+
+	/**
+	* 案例分享编号
+	*/
+    @ApiModelProperty(value = "案例分享编号")
+	private String businessNo;
+
+	/**
+	* 状态
+	*/
+    @ApiModelProperty(value = "状态")
+	private String status;
+
+	/**
+	* 填报人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 = "修改时间")
+	@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 Long updateId;
+
+	/**
+	* 经验
+	*/
+    @ApiModelProperty(value = "经验")
+	private String expContent;
+
+}

+ 204 - 0
src/main/java/com/qdport/entity/PolicyStrive.java

@@ -0,0 +1,204 @@
+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-10-14
+ */
+
+@Data
+@TableName("POLICY_STRIVE")
+@ApiModel(value = "PolicyStrive对象", description = "政策争取")
+public class PolicyStrive implements Serializable {
+	/**
+	* 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 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 Long updateId;
+
+	/**
+	* 责任人
+	*/
+    @ApiModelProperty(value = "责任人")
+	private String directorName;
+
+	/**
+	* 预计完成时间
+	*/
+    @ApiModelProperty(value = "预计完成时间")
+	@DateTimeFormat(
+			pattern = "yyyy-MM-dd"
+	)
+	@JsonFormat(
+			pattern = "yyyy-MM-dd"
+	)
+	private Date yjFinishTime;
+
+	/**
+	* 预计争取金额
+	*/
+    @ApiModelProperty(value = "预计争取金额")
+	private BigDecimal yjStriveAmount;
+
+	/**
+	* 是否落地
+	*/
+    @ApiModelProperty(value = "是否落地")
+	private Integer isLand;
+
+	/**
+	* 落地金额
+	*/
+    @ApiModelProperty(value = "落地金额")
+	private BigDecimal landAmount;
+
+	/**
+	* 月度争取情况
+	*/
+    @ApiModelProperty(value = "月度争取情况")
+	private String monthSituation;
+
+	@ApiModelProperty(value = "参与人")
+    private String partPersonArr;
+
+	@ApiModelProperty(value = "奖励基数")
+	private BigDecimal rewardRadix;
+	@ApiModelProperty(value = "实施难易程度")
+	private BigDecimal implementScore;
+	@ApiModelProperty(value = "复制推广潜力")
+	private BigDecimal promotionScore;
+	@ApiModelProperty(value = "政策争取效果")
+	private BigDecimal striveScore;
+	@ApiModelProperty(value = "奖励标准")
+	private BigDecimal rewardScore;
+
+	@ApiModelProperty(value = "实际完成时间")
+	@DateTimeFormat(
+			pattern = "yyyy-MM-dd"
+	)
+	@JsonFormat(
+			pattern = "yyyy-MM-dd"
+	)
+	private Date sjFinishTime;
+
+	@ApiModelProperty(value = "考核类别")
+	private Integer rewardType;
+	@ApiModelProperty(value = "是否分配")
+	private Integer isReward;
+}

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

@@ -6,18 +6,33 @@ import java.util.Map;
 public enum QDPortEnum {
     // 自动生成编号的类型
     FLOWNO_TYPE_SHARE("policy_share", "政策分享编号"),
+    FLOWNO_TYPE_STRIVE("policy_strive", "政策争取编号"),
+    FLOWNO_TYPE_CASE("policy_case", "政策案例编号"),
 
     POLICY_SHARE_STATUS_ACTIVE("active", "已保存,待发起审批"),
     POLICY_SHARE_STATUS_APPROVE("approve", "待审批"),
     POLICY_SHARE_STATUS_INACTIVE("inactive", "驳回,待修改"),
     POLICY_SHARE_STATUS_DONE("done", "审批通过"),
 
+    POLICY_STRIVE_STATUS_ACTIVE("active", "已保存,待发起审批"),
+    POLICY_STRIVE_STATUS_APPROVE("approve", "待审批"),
+    POLICY_STRIVE_STATUS_INACTIVE("inactive", "驳回,待修改"),
+    POLICY_STRIVE_STATUS_DONE("done", "审批通过"),
+
+    POLICY_CASE_STATUS_ACTIVE("active", "已保存,待发起审批"),
+    POLICY_CASE_STATUS_APPROVE("approve", "待审批"),
+    POLICY_CASE_STATUS_INACTIVE("inactive", "驳回,待修改"),
+    POLICY_CASE_STATUS_DONE("done", "审批通过"),
+
     SYS_DEPT_TYPE_COMPANY("1", "公司"),
     SYS_DEPT_TYPE_DEPT("0", "部门"),
 
     POLICY_FILE_REFTYPE_POLICY_SHARE("policy_share", "政策分享"),
+    POLICY_FILE_REFTYPE_POLICY_STRIVE("policy_strive", "政策争取"),
 
     POLICY_TODO_REFTYPE_POLICY_SHARE("policy_share", "政策分享"),
+    POLICY_TODO_REFTYPE_POLICY_STRIVE("policy_strive", "政策争取"),
+    POLICY_TODO_REFTYPE_POLICY_CASE("policy_case", "政策案例"),
 
     POLICY_TODO_STATUS_ACTIVE("active", "待办"),
     POLICY_TODO_STATUS_DONE("done", "完成"),

+ 48 - 0
src/main/java/com/qdport/listener/PolicyStriveMonthReadListener.java

@@ -0,0 +1,48 @@
+package com.qdport.listener;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.CellExtra;
+import com.alibaba.excel.read.listener.ReadListener;
+import com.qdport.vo.PolicyStriveExcelVO;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class PolicyStriveMonthReadListener implements ReadListener<PolicyStriveExcelVO> {
+    private List<PolicyStriveExcelVO> list = new ArrayList<>();
+
+    public List<PolicyStriveExcelVO> getList() {
+        return list;
+    }
+
+    @Override
+    public void onException(Exception e, AnalysisContext analysisContext) {
+
+    }
+
+    @Override
+    public void invokeHead(Map<Integer, CellData> map, AnalysisContext analysisContext) {
+    }
+
+    @Override
+    public void invoke(PolicyStriveExcelVO xls, AnalysisContext analysisContext) {
+        list.add(xls);
+    }
+
+    @Override
+    public void extra(CellExtra cellExtra, AnalysisContext analysisContext) {
+
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+
+    }
+
+    @Override
+    public boolean hasNext(AnalysisContext analysisContext) {
+        return true;
+    }
+}

+ 48 - 0
src/main/java/com/qdport/listener/PolicyStriveReadListener.java

@@ -0,0 +1,48 @@
+package com.qdport.listener;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.CellExtra;
+import com.alibaba.excel.read.listener.ReadListener;
+import com.qdport.vo.PolicyStriveExcelVO;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class PolicyStriveReadListener implements ReadListener<PolicyStriveExcelVO> {
+    private List<PolicyStriveExcelVO> list = new ArrayList<>();
+
+    public List<PolicyStriveExcelVO> getList() {
+        return list;
+    }
+
+    @Override
+    public void onException(Exception e, AnalysisContext analysisContext) {
+
+    }
+
+    @Override
+    public void invokeHead(Map<Integer, CellData> map, AnalysisContext analysisContext) {
+    }
+
+    @Override
+    public void invoke(PolicyStriveExcelVO xls, AnalysisContext analysisContext) {
+        list.add(xls);
+    }
+
+    @Override
+    public void extra(CellExtra cellExtra, AnalysisContext analysisContext) {
+
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+
+    }
+
+    @Override
+    public boolean hasNext(AnalysisContext analysisContext) {
+        return true;
+    }
+}

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

@@ -0,0 +1,14 @@
+package com.qdport.mapper;
+
+import com.qdport.entity.PolicyCase;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* 案例分享
+*
+* @author yuheng 
+* @since 1.0.0 2024-10-17
+*/
+public interface PolicyCaseMapper extends BaseMapper<PolicyCase> {
+
+}

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

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

+ 37 - 0
src/main/java/com/qdport/query/PolicyCaseQuery.java

@@ -0,0 +1,37 @@
+package com.qdport.query;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+* 案例分享查询
+*
+* @author yuheng 
+* @since 1.0.0 2024-10-17
+*/
+@Data
+@ApiModel(value = "案例分享查询", description = "案例分享查询")
+public class PolicyCaseQuery implements Serializable {
+    @ApiModelProperty("分页参数当前页")
+    private Integer page=1;
+    @ApiModelProperty("分页参数页码大小")
+    private Integer size=20;
+
+    private String zcName;
+    private String zcLevel;
+    private String zcType;
+    private String docNo;
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd HH:mm:ss"
+    )
+    private Date beginCreateTime;
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd HH:mm:ss"
+    )
+    private Date endCreateTime;
+}

+ 53 - 0
src/main/java/com/qdport/query/PolicyStriveQuery.java

@@ -0,0 +1,53 @@
+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 org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+* 政策争取查询
+*
+* @author yuheng 
+* @since 1.0.0 2024-10-14
+*/
+@Data
+@ApiModel(value = "政策争取查询", description = "政策争取查询")
+public class PolicyStriveQuery 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(value = Comparison.LIKE)
+    private String docNo;
+    @Wrapper
+    private Integer isLand;
+    @Wrapper(value = Comparison.GT, column = "CREATE_TIME")
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd HH:mm:ss"
+    )
+    private Date beginCreateTime;
+    @Wrapper(value = Comparison.LT, column = "CREATE_TIME")
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd HH:mm:ss"
+    )
+    private Date endCreateTime;
+    @Wrapper
+    private Integer rewardType;
+}

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

@@ -1,4 +1,6 @@
 package com.qdport.query;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qdport.annotation.Wrapper;
 import com.qdport.enums.Comparison;
 import io.swagger.annotations.ApiModel;
@@ -24,6 +26,8 @@ public class PolicyTodoQuery implements Serializable {
     @ApiModelProperty("分页参数页码大小")
     private Integer size=20;
 
+    @Wrapper
+    private Long todoUserId;
     @Wrapper(value = Comparison.LIKE)
     private String zcName;
     @Wrapper(value = Comparison.LIKE)

+ 24 - 0
src/main/java/com/qdport/service/PolicyCaseService.java

@@ -0,0 +1,24 @@
+package com.qdport.service;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qdport.vo.PolicyCaseVO;
+import com.qdport.query.PolicyCaseQuery;
+import com.qdport.entity.PolicyCase;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * 案例分享
+ *
+ * @author yuheng 
+ * @since 1.0.0 2024-10-17
+ */
+public interface PolicyCaseService  extends IService<PolicyCase> {
+
+    IPage<PolicyCaseVO> page(PolicyCaseQuery query);
+
+    void save(PolicyCaseVO vo);
+
+    void update(PolicyCaseVO vo);
+
+    void delete(List<Long> idList);
+}

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

@@ -0,0 +1,26 @@
+package com.qdport.service;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qdport.vo.PolicyStriveVO;
+import com.qdport.query.PolicyStriveQuery;
+import com.qdport.entity.PolicyStrive;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * 政策争取
+ *
+ * @author yuheng 
+ * @since 1.0.0 2024-10-14
+ */
+public interface PolicyStriveService  extends IService<PolicyStrive> {
+
+    IPage<PolicyStriveVO> page(PolicyStriveQuery query);
+
+    void save(PolicyStriveVO vo);
+
+    void update(PolicyStriveVO vo);
+
+    void updateById(PolicyStriveVO vo);
+
+    void delete(List<Long> idList);
+}

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

@@ -2,7 +2,9 @@ package com.qdport.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qdport.entity.PolicyFile;
+import com.qdport.vo.PolicyCaseVO;
 import com.qdport.vo.PolicyShareVO;
+import com.qdport.vo.PolicyStriveVO;
 import com.qdport.vo.PolicyTodoVO;
 import com.qdport.query.PolicyTodoQuery;
 import com.qdport.entity.PolicyTodo;
@@ -24,6 +26,10 @@ public interface PolicyTodoService extends IService<PolicyTodo> {
 
     void save(PolicyShareVO vo);
 
+    void save(PolicyStriveVO vo);
+
+    void save(PolicyCaseVO vo);
+
     void update(PolicyTodoVO vo);
 
     void delete(List<Long> idList);

+ 106 - 0
src/main/java/com/qdport/service/impl/PolicyCaseServiceImpl.java

@@ -0,0 +1,106 @@
+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.PolicyStrive;
+import com.qdport.enums.QDPortEnum;
+import com.qdport.query.QueryWrapperBuilder;
+import com.qdport.service.PolicyFlowNoService;
+import com.qdport.service.PolicyStriveService;
+import com.qdport.util.StringUtil;
+import lombok.AllArgsConstructor;
+import com.qdport.entity.PolicyCase;
+import com.qdport.query.PolicyCaseQuery;
+import com.qdport.vo.PolicyCaseVO;
+import com.qdport.mapper.PolicyCaseMapper;
+import com.qdport.service.PolicyCaseService;
+import com.qdport.wrapper.PolicyCaseWrapper;
+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.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 案例分享
+ *
+ * @author yuheng
+ * @since 1.0.0 2024-10-17
+ */
+@Service
+@AllArgsConstructor
+public class PolicyCaseServiceImpl extends ServiceImpl<PolicyCaseMapper, PolicyCase> implements PolicyCaseService {
+    private final PolicyFlowNoService policyFlowNoService;
+    private final PolicyStriveService policyStriveService;
+
+    @Override
+    public IPage<PolicyCaseVO> page(PolicyCaseQuery query) {
+        IPage<PolicyCase> page = new Page<>(query.getPage(), query.getSize());
+        page = baseMapper.selectPage(page, getWrapper(query));
+        return PolicyCaseWrapper.build().pageVO(page);
+    }
+
+    private QueryWrapper<PolicyCase> getWrapper(PolicyCaseQuery query) {
+        QueryWrapper<PolicyCase> wrapper = QueryWrapperBuilder.buildQueryWrapper(query, PolicyCase.class);
+        wrapper.orderByDesc("CREATE_TIME");
+
+        QueryWrapper<PolicyStrive> striveWrapper = new QueryWrapper<>();
+        if (StringUtil.isNotEmpty(query.getZcName())) {
+            striveWrapper.like("NAME", query.getZcName());
+        }
+        if (StringUtil.isNotEmpty(query.getZcLevel())) {
+            striveWrapper.eq("ZC_LEVEL", query.getZcLevel());
+        }
+        if (StringUtil.isNotEmpty(query.getZcType())) {
+            striveWrapper.eq("ZC_TYPE", query.getZcType());
+        }
+        if (StringUtil.isNotEmpty(query.getDocNo())) {
+            striveWrapper.like("DOC_NO", query.getDocNo());
+        }
+        if (StringUtil.isNotEmpty(query.getBeginCreateTime())) {
+            striveWrapper.gt("CREATE_TIME", query.getBeginCreateTime());
+        }
+        if (StringUtil.isNotEmpty(query.getEndCreateTime())) {
+            striveWrapper.lt("CREATE_TIME", query.getEndCreateTime());
+        }
+        if(!striveWrapper.isEmptyOfEntity()){
+            List<PolicyStrive> striveList = policyStriveService.list(striveWrapper);
+            if(!striveList.isEmpty()){
+                List<Long> idList = striveList.stream().map(PolicyStrive::getId).collect(Collectors.toList());
+                wrapper.in("STRIVE_ID", idList);
+            }
+        }
+        return wrapper;
+    }
+
+    @Override
+    public void save(PolicyCaseVO vo) {
+        String flowNo = policyFlowNoService.getFlowNo(QDPortEnum.FLOWNO_TYPE_CASE.getValue());
+        vo.setCreateTime(new Date());
+        vo.setUpdateTime(new Date());
+        vo.setBusinessNo(flowNo);
+        PolicyCase entity = BeanUtil.copy(vo, PolicyCase.class);
+        baseMapper.insert(entity);
+    }
+
+    @Override
+    public void update(PolicyCaseVO vo) {
+        vo.setUpdateTime(new Date());
+        PolicyCase entity = BeanUtil.copy(vo, PolicyCase.class);
+
+        updateById(entity);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void delete(List<Long> idList) {
+        removeByIds(idList);
+    }
+
+}

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

@@ -54,10 +54,10 @@ public class PolicyShareServiceImpl extends ServiceImpl<PolicyShareMapper, Polic
     @Override
     public void save(PolicyShareVO vo) {
         String flowNo = policyFlowNoService.getFlowNo(QDPortEnum.FLOWNO_TYPE_SHARE.getValue());
+        vo.setCreateTime(new Date());
+        vo.setUpdateTime(new Date());
+        vo.setBusinessNo(flowNo);
         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());
 
@@ -77,8 +77,8 @@ public class PolicyShareServiceImpl extends ServiceImpl<PolicyShareMapper, Polic
 
     @Override
     public void update(PolicyShareVO vo) {
+        vo.setUpdateTime(new Date());
         PolicyShare entity = BeanUtil.copy(vo, PolicyShare.class);
-        entity.setUpdateTime(new Date());
         updateById(entity);
 
         QueryWrapper<PolicyFile> fileWrapper = new QueryWrapper<>();
@@ -97,8 +97,8 @@ public class PolicyShareServiceImpl extends ServiceImpl<PolicyShareMapper, Polic
 
     @Override
     public void updateById(PolicyShareVO vo) {
+        vo.setUpdateTime(new Date());
         PolicyShare entity = BeanUtil.copy(vo, PolicyShare.class);
-        entity.setUpdateTime(new Date());
         updateById(entity);
     }
 

+ 177 - 0
src/main/java/com/qdport/service/impl/PolicyStriveServiceImpl.java

@@ -0,0 +1,177 @@
+package com.qdport.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qdport.entity.PolicyFile;
+import com.qdport.enums.QDPortEnum;
+import com.qdport.query.QueryWrapperBuilder;
+import com.qdport.service.PolicyFileService;
+import com.qdport.service.PolicyFlowNoService;
+import com.qdport.util.StringUtil;
+import com.qdport.vo.PolicyFileVO;
+import lombok.AllArgsConstructor;
+import com.qdport.entity.PolicyStrive;
+import com.qdport.query.PolicyStriveQuery;
+import com.qdport.vo.PolicyStriveVO;
+import com.qdport.mapper.PolicyStriveMapper;
+import com.qdport.service.PolicyStriveService;
+import com.qdport.wrapper.PolicyStriveWrapper;
+import com.qdport.core.tool.utils.Func;
+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.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 政策争取
+ *
+ * @author yuheng
+ * @since 1.0.0 2024-10-14
+ */
+@Service
+@AllArgsConstructor
+public class PolicyStriveServiceImpl extends ServiceImpl<PolicyStriveMapper, PolicyStrive> implements PolicyStriveService {
+    private final PolicyFlowNoService policyFlowNoService;
+    private final PolicyFileService policyFileService;
+    private final static BigDecimal decimal_50w = new BigDecimal(500000);
+    private final static BigDecimal decimal_200w = new BigDecimal(2000000);
+    private final static BigDecimal decimal_500w = new BigDecimal(5000000);
+    private final static BigDecimal decimal_1000w = new BigDecimal(10000000);
+    private final static BigDecimal decimal_500 = new BigDecimal(500);
+    private final static BigDecimal decimal_1000 = new BigDecimal(1000);
+    private final static BigDecimal decimal_1500 = new BigDecimal(1500);
+    private final static BigDecimal decimal_2000 = new BigDecimal(2000);
+    private final static BigDecimal decimal_3000 = new BigDecimal(3000);
+    private final static BigDecimal decimal_4000 = new BigDecimal(4000);
+    private final static BigDecimal decimal_5000 = new BigDecimal(5000);
+    private final static BigDecimal decimal_6000 = new BigDecimal(6000);
+    private final static BigDecimal decimal_8000 = new BigDecimal(8000);
+    private final static BigDecimal decimal_10000 = new BigDecimal(10000);
+    private final static BigDecimal decimal_12000 = new BigDecimal(12000);
+    private final static BigDecimal decimal_15000 = new BigDecimal(15000);
+
+    @Override
+    public IPage<PolicyStriveVO> page(PolicyStriveQuery query) {
+        IPage<PolicyStrive> page = new Page<>(query.getPage(), query.getSize());
+        page = baseMapper.selectPage(page, getWrapper(query));
+        return PolicyStriveWrapper.build().pageVO(page);
+    }
+
+    private QueryWrapper<PolicyStrive> getWrapper(PolicyStriveQuery query) {
+        QueryWrapper<PolicyStrive> wrapper = QueryWrapperBuilder.buildQueryWrapper(query, PolicyStrive.class);
+        wrapper.orderByDesc("CREATE_TIME");
+        return wrapper;
+    }
+
+    @Override
+    public void save(PolicyStriveVO vo) {
+        String flowNo = policyFlowNoService.getFlowNo(QDPortEnum.FLOWNO_TYPE_STRIVE.getValue());
+        vo.setCreateTime(new Date());
+        vo.setUpdateTime(new Date());
+        vo.setBusinessNo(flowNo);
+        PolicyStrive entity = BeanUtil.copy(vo, PolicyStrive.class);
+
+        baseMapper.insert(entity);
+        vo.setId(entity.getId());
+
+        QueryWrapper<PolicyFile> fileWrapper = new QueryWrapper<>();
+        fileWrapper.eq("REF_ID", entity.getId());
+        fileWrapper.eq("REF_TYPE", QDPortEnum.POLICY_FILE_REFTYPE_POLICY_STRIVE.getValue());
+        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_STRIVE.getValue());
+            policyFileService.save(model);
+        }
+    }
+
+    @Override
+    public void update(PolicyStriveVO vo) {
+        vo.setUpdateTime(new Date());
+        PolicyStrive entity = BeanUtil.copy(vo, PolicyStrive.class);
+        updateById(entity);
+
+        QueryWrapper<PolicyFile> fileWrapper = new QueryWrapper<>();
+        fileWrapper.eq("REF_ID", entity.getId());
+        fileWrapper.eq("REF_TYPE", QDPortEnum.POLICY_FILE_REFTYPE_POLICY_STRIVE.getValue());
+        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_STRIVE.getValue());
+            policyFileService.save(model);
+        }
+    }
+
+    @Override
+    public void updateById(PolicyStriveVO vo) {
+        vo.setUpdateTime(new Date());
+        updateRewardData(vo);
+        PolicyStrive entity = BeanUtil.copy(vo, PolicyStrive.class);
+        updateById(entity);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void delete(List<Long> idList) {
+        removeByIds(idList);
+    }
+
+    private void updateRewardData(PolicyStriveVO vo) {
+        Integer rewardType = vo.getRewardType();
+        Integer isLand = vo.getIsLand();
+        BigDecimal landAmount = vo.getLandAmount();
+        if (StringUtil.isEmpty(rewardType) || isLand == 0
+                || StringUtil.isEmpty(landAmount)) {
+            return;
+        }
+
+        if (rewardType == 1) {
+            if (landAmount.compareTo(decimal_50w) <= 0) {
+                vo.setRewardRadix(decimal_500);
+            } else if (landAmount.compareTo(decimal_200w) <= 0) {
+                vo.setRewardRadix(decimal_1000);
+            } else if (landAmount.compareTo(decimal_500w) <= 0) {
+                vo.setRewardRadix(decimal_2000);
+            } else if (landAmount.compareTo(decimal_1000w) <= 0) {
+                vo.setRewardRadix(decimal_4000);
+            } else {
+                vo.setRewardRadix(decimal_5000);
+            }
+        } else if (rewardType == 2) {
+            if (landAmount.compareTo(decimal_50w) <= 0) {
+                vo.setRewardRadix(decimal_1000);
+            } else if (landAmount.compareTo(decimal_200w) <= 0) {
+                vo.setRewardRadix(decimal_2000);
+            } else if (landAmount.compareTo(decimal_500w) <= 0) {
+                vo.setRewardRadix(decimal_4000);
+            } else if (landAmount.compareTo(decimal_1000w) <= 0) {
+                vo.setRewardRadix(decimal_8000);
+            } else {
+                vo.setRewardRadix(decimal_10000);
+            }
+        } else if (rewardType == 3 || rewardType == 4) {
+            if (landAmount.compareTo(decimal_50w) <= 0) {
+                vo.setRewardRadix(decimal_1500);
+            } else if (landAmount.compareTo(decimal_200w) <= 0) {
+                vo.setRewardRadix(decimal_3000);
+            } else if (landAmount.compareTo(decimal_500w) <= 0) {
+                vo.setRewardRadix(decimal_6000);
+            } else if (landAmount.compareTo(decimal_1000w) <= 0) {
+                vo.setRewardRadix(decimal_12000);
+            } else {
+                vo.setRewardRadix(decimal_15000);
+            }
+        }
+    }
+}

+ 43 - 11
src/main/java/com/qdport/service/impl/PolicyTodoServiceImpl.java

@@ -1,26 +1,19 @@
 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.entity.PolicyStrive;
 import com.qdport.enums.QDPortEnum;
 import com.qdport.query.QueryWrapperBuilder;
-import com.qdport.vo.PolicyFileVO;
-import com.qdport.vo.PolicyShareVO;
+import com.qdport.vo.*;
 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;
@@ -38,7 +31,6 @@ import java.util.stream.Collectors;
 @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());
@@ -64,7 +56,7 @@ public class PolicyTodoServiceImpl extends ServiceImpl<PolicyTodoMapper, PolicyT
     public void save(PolicyShareVO vo) {
         PolicyTodo todo = new PolicyTodo();
         todo.setRefId(vo.getId());
-        todo.setRefType(QDPortEnum.POLICY_FILE_REFTYPE_POLICY_SHARE.getValue());
+        todo.setRefType(QDPortEnum.POLICY_TODO_REFTYPE_POLICY_SHARE.getValue());
         todo.setCreateTime(new Date());
         todo.setStatus(QDPortEnum.POLICY_TODO_STATUS_ACTIVE.getValue());
         todo.setTodoType(QDPortEnum.POLICY_TODO_TYPE_APPROVE.getValue());
@@ -79,6 +71,46 @@ public class PolicyTodoServiceImpl extends ServiceImpl<PolicyTodoMapper, PolicyT
         baseMapper.insert(todo);
     }
 
+    @Override
+    public void save(PolicyStriveVO vo) {
+        PolicyTodo todo = new PolicyTodo();
+        todo.setRefId(vo.getId());
+        todo.setRefType(QDPortEnum.POLICY_TODO_REFTYPE_POLICY_STRIVE.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 save(PolicyCaseVO vo) {
+        PolicyStrive policyStrive = vo.getPolicyStrive();
+
+        PolicyTodo todo = new PolicyTodo();
+        todo.setRefId(vo.getId());
+        todo.setRefType(QDPortEnum.POLICY_TODO_REFTYPE_POLICY_CASE.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(policyStrive.getAbstractContent());
+        todo.setZcContactPhone(vo.getContactPhone());
+        todo.setZcCreateId(vo.getCreateId());
+        todo.setZcCreateName(vo.getCreateName());
+        todo.setZcCreateTime(vo.getCreateTime());
+        todo.setZcName(policyStrive.getName());
+        todo.setZcType(policyStrive.getZcType());
+        baseMapper.insert(todo);
+    }
+
 
     @Override
     public void update(PolicyTodoVO vo) {

+ 17 - 0
src/main/java/com/qdport/util/ExcelUtil.java

@@ -3,7 +3,10 @@ package com.qdport.util;
 import com.alibaba.excel.EasyExcel;
 import com.qdport.entity.PolicyShare;
 import com.qdport.listener.PolicyShareReadListener;
+import com.qdport.listener.PolicyStriveMonthReadListener;
+import com.qdport.listener.PolicyStriveReadListener;
 import com.qdport.vo.PolicyShareExcelVO;
+import com.qdport.vo.PolicyStriveExcelVO;
 
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
@@ -26,6 +29,20 @@ public class ExcelUtil {
         return list;
     }
 
+    public static List<PolicyStriveExcelVO> readPolicyStriveFromXls(byte[] dataArray) {
+        InputStream is = new ByteArrayInputStream(dataArray);
+        PolicyStriveReadListener readListener = new PolicyStriveReadListener();
+        EasyExcel.read(is, PolicyStriveExcelVO.class, readListener).sheet().headRowNumber(1).doRead();
+        List<PolicyStriveExcelVO> list = readListener.getList();
+        return list;
+    }
 
+    public static List<PolicyStriveExcelVO> readPolicyStriveMonthFromXls(byte[] dataArray) {
+        InputStream is = new ByteArrayInputStream(dataArray);
+        PolicyStriveMonthReadListener readListener = new PolicyStriveMonthReadListener();
+        EasyExcel.read(is, PolicyStriveExcelVO.class, readListener).sheet().headRowNumber(1).doRead();
+        List<PolicyStriveExcelVO> list = readListener.getList();
+        return list;
+    }
 }
   

+ 28 - 0
src/main/java/com/qdport/vo/PolicyCaseVO.java

@@ -0,0 +1,28 @@
+package com.qdport.vo;
+import com.qdport.entity.PolicyStrive;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.qdport.entity.PolicyCase;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+* 案例分享
+*
+* @author yuheng 
+* @since 1.0.0 2024-10-17
+*/
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PolicyCaseVO extends PolicyCase {
+	private static final long serialVersionUID = 1L;
+
+	private String deptName;
+
+	private String companyName;
+
+	private List<PolicyFileVO> fileList = new ArrayList<>();
+
+	private PolicyStrive policyStrive;
+}

+ 2 - 0
src/main/java/com/qdport/vo/PolicyShareExcelVO.java

@@ -19,4 +19,6 @@ public class PolicyShareExcelVO {
     private String docNo;
     @ExcelProperty("联系方式")
     private String contactPhone;
+    @ExcelProperty("序号")
+    private Integer index;
 }

+ 43 - 0
src/main/java/com/qdport/vo/PolicyStriveExcelVO.java

@@ -0,0 +1,43 @@
+package com.qdport.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class PolicyStriveExcelVO {
+    @ExcelProperty("填报人")
+    private String createName;
+    @ExcelProperty("项目名称")
+    private String name;
+    @ExcelProperty("项目概要")
+    private String abstractContent;
+    @ExcelProperty("项目等级")
+    private String zcLevel;
+    @ExcelProperty("项目类别")
+    private String zcType;
+    @ExcelProperty("政策文号")
+    private String docNo;
+    @ExcelProperty("联系方式")
+    private String contactPhone;
+    @ExcelProperty("预计争取金额")
+    private BigDecimal yjStriveAmount;
+    @ExcelProperty("预计完成时间")
+    private String yjFinishTime;
+    @ExcelProperty("月度情况说明")
+    private String monthSituation;
+    @ExcelProperty("是否已落地")
+    private String isLand;
+    @ExcelProperty("落地金额")
+    private BigDecimal landAmount;
+    @ExcelProperty("参与人")
+    private String partPersonArr;
+    @ExcelProperty("政策编号")
+    private String businessNo;
+    @ExcelProperty("序号")
+    private Integer index;
+    @ExcelProperty("政策考核类别")
+    private Integer rewardType;
+}

+ 27 - 0
src/main/java/com/qdport/vo/PolicyStriveVO.java

@@ -0,0 +1,27 @@
+package com.qdport.vo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.qdport.entity.PolicyStrive;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+* 政策争取
+*
+* @author yuheng 
+* @since 1.0.0 2024-10-14
+*/
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PolicyStriveVO extends PolicyStrive {
+	private static final long serialVersionUID = 1L;
+
+	private String deptName;
+
+	private String companyName;
+
+	private List<PolicyFileVO> fileList = new ArrayList<>();
+
+	private String excelUrl;
+}

+ 31 - 0
src/main/java/com/qdport/wrapper/PolicyCaseWrapper.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.PolicyCaseVO;
+import com.qdport.entity.PolicyCase;
+import lombok.Data;
+/**
+* 案例分享Wrapper
+*
+* @author yuheng 
+* @since 1.0.0 2024-10-17
+*/
+@Data
+public class PolicyCaseWrapper extends BaseEntityWrapper<PolicyCase, PolicyCaseVO> {
+
+    public static PolicyCaseWrapper build() {
+        return new PolicyCaseWrapper();
+    }
+
+    @Override
+    public PolicyCaseVO entityVO(PolicyCase entity) {
+        PolicyCaseVO vo = Objects.requireNonNull(BeanUtil.copy(entity, PolicyCaseVO.class));
+        //User createUser = UserCache.getUser(entity.getCreateUser());
+        //User updateUser = UserCache.getUser(entity.getUpdateUser());
+        //vo.setCreateUserName(createUser.getName());
+        //vo.setUpdateUserName(updateUser.getName());
+        return vo;
+    }
+
+}

+ 31 - 0
src/main/java/com/qdport/wrapper/PolicyStriveWrapper.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.PolicyStriveVO;
+import com.qdport.entity.PolicyStrive;
+import lombok.Data;
+/**
+* 政策争取Wrapper
+*
+* @author yuheng 
+* @since 1.0.0 2024-10-14
+*/
+@Data
+public class PolicyStriveWrapper extends BaseEntityWrapper<PolicyStrive, PolicyStriveVO> {
+
+    public static PolicyStriveWrapper build() {
+        return new PolicyStriveWrapper();
+    }
+
+    @Override
+    public PolicyStriveVO entityVO(PolicyStrive entity) {
+        PolicyStriveVO vo = Objects.requireNonNull(BeanUtil.copy(entity, PolicyStriveVO.class));
+        //User createUser = UserCache.getUser(entity.getCreateUser());
+        //User updateUser = UserCache.getUser(entity.getUpdateUser());
+        //vo.setCreateUserName(createUser.getName());
+        //vo.setUpdateUserName(updateUser.getName());
+        return vo;
+    }
+
+}

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

@@ -7,7 +7,7 @@ spring:
     password: ZCGX!2409
   redis:
     # redis 单机环境配置
-    host: localhost
+    host: 127.0.0.1
     port: 6379
     password:
     database: 0

+ 0 - 3
src/main/resources/application.yml

@@ -1,6 +1,3 @@
-#spring:
-#  profiles:
-#    active: dev
 #服务器配置
 server:
   port: 8000