ソースを参照

Merge remote-tracking branch 'origin/master'

chenyuesheng 2 年 前
コミット
b94939e3b2
22 ファイル変更3001 行追加13 行削除
  1. 0 1
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/controller/ReimbursementSysController.java
  2. 135 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/controller/WuHanReimbursementBusinessController.java
  3. 217 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/controller/WuHanReimbursementSysController.java
  4. 1 1
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/domain/dto/ReimbursementBusinessDTO.java
  5. 91 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/domain/dto/WuHanReimbursementDTO.java
  6. 23 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/mapper/ReimbursementBusinessMapper.java
  7. 7 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/mapper/ReimbursementUserMapper.java
  8. 142 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/mapper/WuHanReimbursementBusinessMapper.java
  9. 196 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/mapper/WuHanReimbursementSysMapper.java
  10. 40 3
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/mapper/xml/ReimbursementBusinessMapper.xml
  11. 13 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/mapper/xml/ReimbursementUserMapper.xml
  12. 286 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/mapper/xml/WuHanReimbursementBusinessMapper.xml
  13. 475 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/mapper/xml/WuHanReimbursementSysMapper.xml
  14. 15 4
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/service/ReimbursementBusinessService.java
  15. 1 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/service/ReimbursementSysService.java
  16. 13 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/service/ReimbursementUserService.java
  17. 92 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/service/WuHanReimbursementBusinessService.java
  18. 87 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/service/WuHanReimbursementSysService.java
  19. 150 4
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/service/impl/ReimbursementBusinessServiceImpl.java
  20. 80 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/service/impl/ReimbursementUserServiceImpl.java
  21. 434 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/service/impl/WuHanReimbursementBusinessServiceImpl.java
  22. 503 0
      jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/service/impl/WuHanReimbursementSysServiceImpl.java

+ 0 - 1
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/controller/ReimbursementSysController.java

@@ -95,7 +95,6 @@ public class ReimbursementSysController {
         }
     }
 
-
     /**
      * 保存业务报销编码
      * @return

+ 135 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/controller/WuHanReimbursementBusinessController.java

@@ -0,0 +1,135 @@
+package com.jeeplus.test.reimbursementsys.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.collect.Lists;
+import com.jeeplus.aop.demo.annotation.DemoMode;
+import com.jeeplus.aop.logging.annotation.ApiLog;
+import com.jeeplus.sys.utils.StringUtils;
+import com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementBusinessDTO;
+import com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementBusinessReturnDTO;
+import com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementDTO;
+import com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementUserDTO;
+import com.jeeplus.test.reimbursementsys.service.ReimbursementBusinessService;
+import com.jeeplus.test.reimbursementsys.service.WuHanReimbursementBusinessService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+/**
+ * @author 徐滕
+ * @version 1.0.0
+ * @ClassName ReimbursementUserController.java
+ * @Description TODO 报销人员年份金额信息
+ * @createTime 2022年05月16日 10:35:21
+ */
+@RestController
+@RequestMapping("/wuHanReimbursementBusiness")
+public class WuHanReimbursementBusinessController {
+
+    @Autowired
+    private WuHanReimbursementBusinessService service;
+
+    /**
+     * 根据id报销人员信息
+     * @param id
+     * @return
+     */
+    @ApiLog("根据id报销人员信息")
+    @GetMapping("queryById")
+    public ResponseEntity queryById(@RequestParam String id) {
+        ReimbursementBusinessDTO reimbursementDTO = service.queryById (id);
+        return ResponseEntity.ok (reimbursementDTO);
+    }
+
+    /**
+     * 根据id报销人员信息
+     * @param id
+     * @return
+     */
+    @ApiLog("根据id报销人员信息")
+    @PreAuthorize("hasAnyAuthority('wuHanReimbursementBusiness:add')")
+    @GetMapping("getBusinessById")
+    public ResponseEntity getBusinessById(@RequestParam String id) {
+        ReimbursementDTO reimbursementDTO = service.getBusinessById (id);
+        return ResponseEntity.ok (reimbursementDTO);
+    }
+
+    /**
+     * 根据人员id查询报销年份信息
+     * @param reimbursementUser
+     * @param page
+     * @return
+     */
+    @ApiLog("查询角色列表")
+    @GetMapping("getYearList")
+    public ResponseEntity<IPage<ReimbursementUserDTO>> getYearList(ReimbursementUserDTO reimbursementUser, Page<ReimbursementUserDTO> page) {
+        IPage<ReimbursementUserDTO> list = service.getYearList(page,reimbursementUser);
+        return ResponseEntity.ok (list);
+    }
+
+
+    /**
+     * 查询报销信息
+     * @return
+     */
+    @ApiLog("查询报销人员信息列表")
+    @GetMapping("findList")
+    public ResponseEntity findList(ReimbursementUserDTO reimbursementUser, Page<ReimbursementUserDTO> page) {
+        IPage<ReimbursementUserDTO> list = service.findList(page,reimbursementUser);
+        return ResponseEntity.ok(list);
+    }
+
+    /**
+     * 保存业务报销编码
+     * @return
+     */
+    @ApiLog("保存报销人员信息")
+    @PostMapping("save")
+    public ResponseEntity save(@RequestBody ReimbursementBusinessDTO reimbursementUser) {
+        Map<String, Object> result = service.save(reimbursementUser);
+        Boolean success = (Boolean) result.get("success");
+        if(success){
+            return ResponseEntity.ok(result.get("message"));
+        }
+        return ResponseEntity.badRequest ().body (result.get("message"));
+    }
+
+    /**
+     * 批量删除
+     * @param ids
+     * @return
+     */
+    @DemoMode
+    @ApiLog("批量删除")
+    @PreAuthorize("hasAuthority('wuHanReimbursementBusiness:del')")
+    @DeleteMapping("delete")
+    public ResponseEntity delete(String ids) {
+        String idArray[] =ids.split(",");
+        service.delete ( Lists.newArrayList (idArray) );
+        return ResponseEntity.ok ("删除成功!");
+    }
+
+
+
+
+    /**
+     * 查询报销信息
+     * @return
+     */
+    @ApiLog("查询业务报销信息列表")
+    @PreAuthorize("hasAuthority('wuHanReimbursementBusiness:view')")
+    @GetMapping("findListByBusinessCodeId")
+    public ResponseEntity findListByBusinessCodeId(String id) {
+        if(StringUtils.isBlank(id)){
+            return ResponseEntity.badRequest ().body ("请先选择业务信息");
+        }
+        ReimbursementBusinessDTO reimbursementBusiness = new ReimbursementBusinessDTO();
+        reimbursementBusiness.setBusinessCodeId(id);
+        ReimbursementBusinessReturnDTO info = service.findListByBusinessCodeId(reimbursementBusiness);
+        return ResponseEntity.ok(info);
+    }
+}

+ 217 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/controller/WuHanReimbursementSysController.java

@@ -0,0 +1,217 @@
+package com.jeeplus.test.reimbursementsys.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.collect.Lists;
+import com.jeeplus.aop.demo.annotation.DemoMode;
+import com.jeeplus.aop.logging.annotation.ApiLog;
+import com.jeeplus.core.excel.utils.EasyPoiUtil;
+import com.jeeplus.sys.utils.StringUtils;
+import com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementDTO;
+import com.jeeplus.test.reimbursementsys.domain.dto.WuHanReimbursementDTO;
+import com.jeeplus.test.reimbursementsys.service.ReimbursementSysService;
+import com.jeeplus.test.reimbursementsys.service.WuHanReimbursementSysService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author li-peike
+ * @version 1.0.0
+ * @ClassName ReimbursementSysController.java
+ * @Description TODO 发票信息
+ * @createTime 2022年05月05日 20:41:00
+ */
+@RestController
+@RequestMapping("/wuHanReimbursement")
+public class WuHanReimbursementSysController {
+
+    @Autowired
+    private WuHanReimbursementSysService service;
+
+    /**
+     * 根据id查询部门
+     * @param id
+     * @return
+     */
+    @ApiLog("查询业务具体信息")
+    @PreAuthorize("hasAnyAuthority('wuHanReimbursement:view','wuHanReimbursement:add','wuHanReimbursement:edit')")
+    @GetMapping("queryBusinessById")
+    public ResponseEntity queryBusinessById(@RequestParam String id) {
+        WuHanReimbursementDTO reimbursementDTO = service.queryBusinessById (id);
+        return ResponseEntity.ok (reimbursementDTO);
+    }
+    /**
+     * 根据id查询部门
+     * @param id
+     * @return
+     */
+    @ApiLog("查询发票具体信息")
+    @PreAuthorize("hasAnyAuthority('wuHanReimbursement:view','wuHanReimbursement:add','wuHanReimbursement:edit')")
+    @GetMapping("queryInvoiceById")
+    public ResponseEntity queryInvoiceById(@RequestParam String id) {
+        WuHanReimbursementDTO reimbursementDTO = service.queryInvoiceById (id);
+        return ResponseEntity.ok (reimbursementDTO);
+    }
+
+
+    /**
+     * 查询报销信息
+     * @return
+     */
+    @ApiLog("查询业务报销信息")
+    @GetMapping("treeData")
+    public ResponseEntity treeData(WuHanReimbursementDTO reimbursementDTO,  Page<WuHanReimbursementDTO> page) {
+        IPage<WuHanReimbursementDTO> list = service.treeData(page,reimbursementDTO);
+        return ResponseEntity.ok(list);
+    }
+
+    /**
+     * 上传文件
+     * @return
+     * @throws IOException
+     */
+    @ApiLog("上传文件")
+    @RequestMapping("uploadFile")
+    public Map<String,Object> uploadFile(HttpServletRequest request, MultipartFile file) {
+        Map<String,Object> map = new HashMap<>();
+        try {
+            List <WuHanReimbursementDTO> list = EasyPoiUtil.importExcel ( file, 0, 1, WuHanReimbursementDTO.class );
+            /*ImportExcel ei = new ImportExcel(file, 0, 0);
+            List<ReimbursementDTO> list = ei.getDataList(ReimbursementDTO.class);*/
+            map = service.save(list);
+            return map;
+        } catch (Exception e) {
+            map.put("message", "文件上传失败。失败原因:"+ e.getMessage());
+            map.put("success", false);
+            return map;
+        }
+    }
+
+
+    /**
+     * 保存业务报销编码
+     * @return
+     */
+    @ApiLog("保存业务报销编码")
+    @PostMapping("saveBusiness")
+    public ResponseEntity saveBusiness(@Valid @RequestBody WuHanReimbursementDTO reimbursementDTO) {
+        if(!"1".equals(reimbursementDTO.getRandomType()) && StringUtils.isBlank(reimbursementDTO.getBusinessCode())){
+            return ResponseEntity.badRequest ().body ("业务编码不可为空,请重新填写!");
+        }
+        service.saveBusiness(reimbursementDTO);
+        return ResponseEntity.ok("保存业务编码" + reimbursementDTO.getBusinessCode() + "成功");
+    }
+    /**
+     * 保存业务报销编码
+     * @return
+     */
+    @ApiLog("保存业务报销比例")
+    @PostMapping("updateReimbursementRatio")
+    public ResponseEntity updateReimbursementRatio(@Valid @RequestBody WuHanReimbursementDTO reimbursementDTO) {
+        if(StringUtils.isBlank(reimbursementDTO.getReimbursementRatio())){
+            return ResponseEntity.badRequest ().body ("报销比例不可为空,请重新填写!");
+        }
+        service.updateReimbursementRatio(reimbursementDTO);
+        return ResponseEntity.ok("保存业务编码" + reimbursementDTO.getBusinessCode() + "成功");
+    }
+
+
+    /**
+     * 保存发票收款时间
+     * @return
+     */
+    @ApiLog("保存发票收款时间")
+    @PostMapping("saveInvoice")
+    public ResponseEntity saveInvoice(@Valid @RequestBody WuHanReimbursementDTO reimbursementDTO) {
+        service.saveInvoice(reimbursementDTO);
+        return ResponseEntity.ok("保存发票收款时间成功");
+    }
+
+
+    /**
+     * 保存发票收款时间
+     * @return
+     */
+    @ApiLog("修改发票信息")
+    @PostMapping("modifyInvoice")
+    public ResponseEntity modifyInvoice(@Valid @RequestBody WuHanReimbursementDTO reimbursementDTO) {
+        service.modifyInvoice(reimbursementDTO);
+        return ResponseEntity.ok("修改发票信息成功");
+    }
+
+    /**
+     * 批量删除
+     * @param ids
+     * @return
+     */
+    @DemoMode
+    @ApiLog("批量删除")
+    @PreAuthorize("hasAuthority('wuHanReimbursement:del')")
+    @DeleteMapping("delete")
+    public ResponseEntity delete(String ids) {
+        String idArray[] =ids.split(",");
+        service.removeBusinessByIds ( Lists.newArrayList (idArray) );
+        return ResponseEntity.ok ("删除成功!");
+    }
+
+    /**
+     * 保存业务报销编码
+     * @return
+     */
+    @ApiLog("保存收款时间信息")
+    @PostMapping("saveGatheringTime")
+    public ResponseEntity saveGatheringTime(@Valid @RequestBody WuHanReimbursementDTO reimbursementDTO) {
+        if(StringUtils.isBlank(reimbursementDTO.getId())){
+            return ResponseEntity.badRequest ().body ("未选择发票信息!");
+        }
+        if(null == reimbursementDTO.getGatheringTime()){
+            return ResponseEntity.badRequest ().body ("未选择收款时间!");
+        }
+        Map<String, Object> map = service.saveGatheringTime(reimbursementDTO);
+        Boolean success = (Boolean) map.get("success");
+        if(success){
+            return ResponseEntity.ok("保存业务编码" + reimbursementDTO.getBusinessCode() + "成功");
+        }
+        return ResponseEntity.badRequest().body ( map.get("message"));
+    }
+
+    /**
+     * 删除业务信息
+     * @param ids
+     * @return
+     */
+    @DemoMode
+    @ApiLog("删除业务信息")
+    @PreAuthorize("hasAuthority('wuHanReimbursement:del')")
+    @DeleteMapping("deleteBusiness")
+    public ResponseEntity deleteBusiness(String ids) {
+        String idArray[] =ids.split(",");
+        service.removeBusinessByIds ( Lists.newArrayList (idArray) );
+        return ResponseEntity.ok ("删除成功!");
+    }
+
+    /**
+     * 删除发票信息
+     * @param ids
+     * @return
+     */
+    @DemoMode
+    @ApiLog("删除发票信息")
+    @PreAuthorize("hasAuthority('wuHanReimbursement:del')")
+    @DeleteMapping("deleteInvoice")
+    public ResponseEntity deleteInvoice(String ids) {
+        String idArray[] =ids.split(",");
+        service.removeInvoiceByIds ( Lists.newArrayList (idArray) );
+        return ResponseEntity.ok ("删除成功!");
+    }
+}

+ 1 - 1
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/domain/dto/ReimbursementBusinessDTO.java

@@ -30,6 +30,6 @@ public class ReimbursementBusinessDTO extends BaseEntity {
     private String reimbursementAmount;  //报销额度
     private String remainReimbursementAmount;  //剩余报销额度
     private String remarks; //备注
-
+    private int reimbursementAddress;  //地区类型(1:正常报销;2:武汉)
 
 }

+ 91 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/domain/dto/WuHanReimbursementDTO.java

@@ -0,0 +1,91 @@
+package com.jeeplus.test.reimbursementsys.domain.dto;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.jeeplus.core.domain.TreeEntity;
+import com.jeeplus.sys.utils.StringUtils;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author: 王强
+ * @create: 2022-06-24 08:59
+ **/
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("zs_wuhan_reimbursement_info")
+public class WuHanReimbursementDTO extends TreeEntity<WuHanReimbursementDTO> {
+    private static final long serialVersionUID = 1L;
+    @Excel(name = "业务编号")
+    private String businessCode;    //业务编号
+    private String businessCodeId;    //业务编号id
+    @Excel(name = "发票代码")
+    private String invoiceCode;     //发票代码
+    @Excel(name = "发票号码")
+    private String invoiceNumber;   //发票号码
+    @Excel(name = "购方企业名称")
+    private String firmName;        //购方企业名称
+
+    @Excel(name = "开票日期",importFormat = "yyyy-MM-dd",exportFormat = "yyyy-MM-dd")
+    private String makeTime;          //开票日期
+    @Excel(name = "商品名称")
+    private String name;     //商品名称
+    @Excel(name = "金额")
+    private String money;       //金额
+    @Excel(name = "税额")
+    private String tax;         //税额
+    @Excel(name = "收入")
+    private String income;      //收入
+    @Excel(name = "申请人")
+    private String proposer;        //申请人
+    @Excel(name = "合伙人")
+    private String partner;         //合伙人
+    @Excel(name = "业务类型")
+    private String businessType;    //业务类型
+    private String remarks;    //备注
+    private Integer type;    //状态
+    private String reimbursementRatio;    //报销比例
+    private String allAlreadyReimbursementQuota;    //总报销额度(已报金额)
+    private String canReimbursementAmount;    //可报销额度
+    private String surplusReimbursementAmount;    //剩余报销额度
+    private String reimbursementType;    //报销比例
+    private String gatheringStatus;    //收款状态
+    private String reimbursementStatus;    //报销状态
+    private String randomType;    //随机状态(1:随机业务编码,2:指定业务编码)(默认为指定业务编码仅业务表中使用)
+    private String year;    //业务编码年份(相同的业务编码根据年份不同生成不同的数据列)(仅业务表中使用)
+    private String batchFlag;    //批量报销状态(1:批量报销)(仅业务表中使用)
+    private String randomBusinessCodeIndex;    //随即业务编码序号
+    private List<String> idList;
+
+    @Excel(name = "收款日期",importFormat = "yyyy-MM-dd",exportFormat = "yyyy-MM-dd")
+    private String gatheringTime;     //收款日期
+
+
+    /**
+     * 开票开始日期
+     */
+    private Date beginDate;
+    /**
+     * 开票结束日期
+     */
+    private Date endDate;
+    /**
+     * 收入前区间
+     */
+    private String beginIncome;
+    /**
+     * 收入后区间
+     */
+    private String endIncome;
+
+
+    public String getReimbursementType() {
+        if(StringUtils.isBlank(this.reimbursementType)){
+            this.reimbursementType = "1";
+        }
+        return reimbursementType;
+    }
+}

+ 23 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/mapper/ReimbursementBusinessMapper.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementBusinessDTO;
 import com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementDTO;
 import com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementUserDTO;
+import com.jeeplus.test.reimbursementsys.domain.dto.WuHanReimbursementDTO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -31,12 +32,21 @@ public interface ReimbursementBusinessMapper extends BaseMapper<ReimbursementUse
      * @return
      */
     List<ReimbursementBusinessDTO> findListByBusinessCodeId(ReimbursementBusinessDTO reimbursementBusiness);
+
     /**
      * 根据条件查询数据信息
      * @param reimbursementBusiness
      * @return
      */
     List<ReimbursementBusinessDTO> findListByUserIdAndYear(ReimbursementBusinessDTO reimbursementBusiness);
+
+    /**
+     * 根据条件查询武汉数据信息
+     * @param reimbursementBusiness
+     * @return
+     */
+    List<ReimbursementBusinessDTO> findWuHanListByUserIdAndYear(ReimbursementBusinessDTO reimbursementBusiness);
+
     /**
      * 根据条件查询数据信息
      * @param page
@@ -112,8 +122,21 @@ public interface ReimbursementBusinessMapper extends BaseMapper<ReimbursementUse
     String getGatheringStatusById(ReimbursementBusinessDTO reimbursementUser);
 
     /**
+     * 根据武汉业务id查询收款状态
+     * @param reimbursementUser
+     * @return
+     */
+    String getWuHanGatheringStatusById(ReimbursementBusinessDTO reimbursementUser);
+
+    /**
      * 修改业务报销是否完成状态
      * @param reimbursementDTO
      */
     void updateReimbursementInfo(ReimbursementDTO reimbursementDTO);
+
+    /**
+     * 修改武汉业务报销是否完成状态
+     * @param wuHanReimbursementDTO
+     */
+    void updateWuHanReimbursementInfo(WuHanReimbursementDTO wuHanReimbursementDTO);
 }

+ 7 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/mapper/ReimbursementUserMapper.java

@@ -65,6 +65,13 @@ public interface ReimbursementUserMapper extends BaseMapper<ReimbursementUserDTO
     ReimbursementUserDTO queryByUserIdAndYear(ReimbursementUserDTO reimbursementUser);
 
     /**
+     * 查询武汉报销信息(根据人员id和年份)
+     * @param reimbursementUser
+     * @return
+     */
+    ReimbursementUserDTO wuHanQueryByUserIdAndYear(ReimbursementUserDTO reimbursementUser);
+
+    /**
      * 根据id删除人员报销信息(物理删除)
      * @param idList
      */

+ 142 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/mapper/WuHanReimbursementBusinessMapper.java

@@ -0,0 +1,142 @@
+package com.jeeplus.test.reimbursementsys.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementBusinessDTO;
+import com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementDTO;
+import com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementUserDTO;
+import com.jeeplus.test.reimbursementsys.domain.dto.WuHanReimbursementDTO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author li-peike
+ * @version 1.0.0
+ * @ClassName ReimbursementSysMapper.java
+ * @Description TODO
+ * @createTime 2022年05月06日 10:40:00
+ */
+public interface WuHanReimbursementBusinessMapper extends BaseMapper<ReimbursementUserDTO> {
+    /**
+     * 根据条件查询数据信息
+     * @param page
+     * @param reimbursementUser
+     * @return
+     */
+    IPage<ReimbursementUserDTO> findList(Page<ReimbursementUserDTO> page, @Param("reimbursementUser")ReimbursementUserDTO reimbursementUser);
+    /**
+     * 根据条件查询数据信息
+     * @param reimbursementBusiness
+     * @return
+     */
+    List<ReimbursementBusinessDTO> findListByBusinessCodeId(ReimbursementBusinessDTO reimbursementBusiness);
+
+    /**
+     * 根据条件查询数据信息
+     * @param reimbursementBusiness
+     * @return
+     */
+    List<ReimbursementBusinessDTO> findListByUserIdAndYear(ReimbursementBusinessDTO reimbursementBusiness);
+
+    /**
+     * 根据条件查询武汉数据信息
+     * @param reimbursementBusiness
+     * @return
+     */
+    List<ReimbursementBusinessDTO> findWuHanListByUserIdAndYear(ReimbursementBusinessDTO reimbursementBusiness);
+
+    /**
+     * 根据条件查询数据信息
+     * @param page
+     * @param reimbursementUser
+     * @return
+     */
+    IPage<ReimbursementUserDTO> getYearList(Page<ReimbursementUserDTO> page, @Param("reimbursementUser")ReimbursementUserDTO reimbursementUser);
+    /**
+     * 根据条件查询数据信息
+     * @param reimbursementUser
+     * @return
+     */
+    List<ReimbursementUserDTO> getReimbursementMoneyByYear(ReimbursementUserDTO reimbursementUser);
+
+    /**
+     * 保存人员报销信息
+     * @param reimbursementUser
+     */
+    void save(ReimbursementBusinessDTO reimbursementUser);
+
+    /**
+     * 修改人员报销信息
+     * @param reimbursementUser
+     */
+    void update(ReimbursementBusinessDTO reimbursementUser);
+
+    /**
+     * 查询业务信息
+     * @param id
+     * @return
+     */
+    ReimbursementBusinessDTO queryById(String id);
+
+    /**
+     * 查询业务信息
+     * @param reimbursementUser
+     * @return
+     */
+    ReimbursementUserDTO reimbursementUserByUserIdAndYear(ReimbursementBusinessDTO reimbursementUser);
+
+    /**
+     * 查询报销信息(根据人员id和年份)
+     * @param reimbursementUser
+     * @return
+     */
+    ReimbursementUserDTO queryByUserIdAndYear(ReimbursementBusinessDTO reimbursementUser);
+
+    /**
+     * 根据id删除人员报销信息(物理删除)
+     * @param idList
+     */
+    void delete(@Param("idList") List<String> idList);
+
+    /**
+     * 根据人员id和年份查询该员工当年报销额度总额
+     * @param reimbursementUser
+     * @return
+     */
+    String getAlreadyReimbursementQuotaByUserIdAndYear(ReimbursementBusinessDTO reimbursementUser);
+
+    /**
+     * 根据人员id和年份查询该员工当年报销额度总额
+     * @param reimbursementUser
+     * @return
+     */
+    String getAlreadyReimbursementQuotaByBusinessCodeId(ReimbursementBusinessDTO reimbursementUser);
+
+    /**
+     * 根据业务id查询收款状态
+     * @param reimbursementUser
+     * @return
+     */
+    String getGatheringStatusById(ReimbursementBusinessDTO reimbursementUser);
+
+    /**
+     * 根据武汉业务id查询收款状态
+     * @param reimbursementUser
+     * @return
+     */
+    String getWuHanGatheringStatusById(ReimbursementBusinessDTO reimbursementUser);
+
+    /**
+     * 修改业务报销是否完成状态
+     * @param reimbursementDTO
+     */
+    void updateReimbursementInfo(ReimbursementDTO reimbursementDTO);
+
+    /**
+     * 修改武汉业务报销是否完成状态
+     * @param wuHanReimbursementDTO
+     */
+    void updateWuHanReimbursementInfo(WuHanReimbursementDTO wuHanReimbursementDTO);
+}

+ 196 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/mapper/WuHanReimbursementSysMapper.java

@@ -0,0 +1,196 @@
+package com.jeeplus.test.reimbursementsys.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jeeplus.test.reimbursementsys.domain.dto.WuHanReimbursementDTO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * @author li-peike
+ * @version 1.0.0
+ * @ClassName ReimbursementSysMapper.java
+ * @Description TODO
+ * @createTime 2022年05月06日 10:40:00
+ */
+public interface WuHanReimbursementSysMapper extends BaseMapper<WuHanReimbursementDTO> {
+    /**
+     * 根据条件查询数据信息
+     * @param page
+     * @param reimbursement
+     * @return
+     */
+    IPage<WuHanReimbursementDTO> queryAllList(Page<WuHanReimbursementDTO> page, @Param("reimbursement")WuHanReimbursementDTO reimbursement);
+
+
+    List<WuHanReimbursementDTO> getInvoiceList(WuHanReimbursementDTO reimbursement);
+
+    /**
+     * 根据父id查询已收款的发票信息的首款额度总和
+     * @param parentId
+     * @return
+     */
+    String getReceiptInvoiceIncomeByReimbursementId(String parentId);
+
+    /**
+     * 根据业务id查询报销比例
+     * @param id
+     * @return
+     */
+    String getReimbursementRatioByReimbursementId(String id);
+
+    /**
+     * 根据父节点id查询发票信息
+     * @param parentIdList
+     * @return
+     */
+    List<WuHanReimbursementDTO> getInvoiceByParentIdList(@Param("parentIdList")List<String> parentIdList);
+
+    /**
+     * 查询是否存在需要保存的发票信息
+     * @param invoiceNumberList
+     * @return
+     */
+    List<String> selectOldInvoiceNumber(@Param("invoiceNumberList") List<String> invoiceNumberList);
+
+    /**
+     * 查询是否存在已有的业务编号信息
+     * @param businessCodeList
+     * @return
+     */
+    List<String> selectOldBusinessCode(@Param("businessCodeList") List<String> businessCodeList);
+
+    /**
+     * 查询是否存在已有的业务编号信息(业务编码和年份)
+     * @param businessCodeList
+     * @return
+     */
+    List<WuHanReimbursementDTO> selectOldBusinessCodeByInfo(@Param("businessCodeList") List<String> businessCodeList,@Param("year") String year);
+
+    /**
+     * 保存业务编号信息
+     * @param businessCodeList
+     */
+    void insertBusinessCodeList(@Param("businessCodeList")List<WuHanReimbursementDTO> businessCodeList);
+
+    /**
+     * 保存发票编号数据信息
+     * @param invoiceInfoList
+     */
+    void insertInvoiceList(@Param("invoiceInfoList")List<WuHanReimbursementDTO> invoiceInfoList);
+
+    /**
+     * 查询业务信息
+     * @param id
+     * @return
+     */
+    WuHanReimbursementDTO queryBusinessById(String id);
+
+    /**
+     * 查询发票信息
+     * @param id
+     * @return
+     */
+    WuHanReimbursementDTO queryInvoiceById(String id);
+
+    /**
+     * 保存业务编码
+     * @param reimbursement
+     * @return
+     */
+    Integer saveBusiness(WuHanReimbursementDTO reimbursement);
+
+    /**
+     * 保存发票收款时间
+     * @param reimbursement
+     * @return
+     */
+    Integer saveInvoice(WuHanReimbursementDTO reimbursement);
+
+    /**
+     * 修改发票信息
+     * @param reimbursement
+     * @return
+     */
+    Integer modifyInvoice(WuHanReimbursementDTO reimbursement);
+
+    /**
+     * 根据业务编码查询业务信息
+     * @param reimbursement
+     * @return
+     */
+    WuHanReimbursementDTO getInfoByBusinessCode(WuHanReimbursementDTO reimbursement);
+
+    /**
+     * 批量修改发票信息
+     * @param invoiceInfoList
+     */
+    void updateInvoiceList(@Param("invoiceInfoList")List<WuHanReimbursementDTO> invoiceInfoList);
+
+    /**
+     * 根据id删除对应业务信息(物理删除)
+     * @param id
+     */
+    void deleteBusinessById(String id);
+
+    /**
+     * 删除业务信息(逻辑删除)
+     * @param idList
+     */
+    void removeBusinessByIds(@Param("idList")List<String> idList);
+
+    /**
+     * 删除发票信息(逻辑删除)
+     * @param idList
+     */
+    void removeBusinessByParentIds(@Param("idList")List<String> idList);
+
+    /**
+     * 删除发票信息(逻辑删除)
+     * @param idList
+     */
+    void removeInvoiceByIds(@Param("idList")List<String> idList);
+
+    /**
+     * 修改业务报销比例
+     * @param reimbursement
+     */
+    void updateReimbursementRatio(WuHanReimbursementDTO reimbursement);
+
+    /**
+     * 根据发票id查询是否已经填写收款时间
+     * @param idList
+     * @return
+     */
+    List<WuHanReimbursementDTO> getGatheringTimeInvoiceList(@Param("idList") List<String> idList);
+
+    /**
+     * 根据该条发票信息查询同业务编号下的没有收款的发票信息
+     * @param reimbursement
+     * @return
+     */
+    List<WuHanReimbursementDTO> getNotGatheringTimeInvoice(WuHanReimbursementDTO reimbursement);
+
+    /**
+     * 根据该条发票信息查询同业务编号下的没有收款的发票信息
+     * @param reimbursement
+     * @return
+     */
+    List<WuHanReimbursementDTO> getNotGatheringTimeInvoiceBybusinessCodeId(WuHanReimbursementDTO reimbursement);
+
+    void updateGatheringTime(@Param("idList") List<String> idList, @Param("reimbursement") WuHanReimbursementDTO reimbursement);
+
+    /**
+     * 根据id修改业务信息的收款状态
+     * @param id
+     */
+    void updateGatheringStatusById(String id);
+
+    /**
+     * 查询最后一个随机业务编码的编码序号
+     * @return
+     */
+    String getLastRandomBusinessCodeIndex(String year);
+}

+ 40 - 3
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/mapper/xml/ReimbursementBusinessMapper.xml

@@ -32,6 +32,7 @@
         a.year AS "year",
         a.reimbursement_day as "reimbursementDay",
         a.reimbursement_type AS "reimbursementType",
+        a.reimbursement_address AS "reimbursementAddress",
         a.reimbursement_amount as "reimbursementAmount"
     </sql>
 
@@ -81,6 +82,7 @@
             and a.user_id = #{userId}
             and a.year in (${year})
             and a.reimbursement_type = 1
+            and a.reimbursement_address = 0
         </where>
         group by a.year
         order by a.year desc
@@ -95,6 +97,7 @@
             a.del_flag = 0
             and a.user_id = #{userId}
             and a.year = #{year}
+
         </where>
     </select>
 
@@ -114,6 +117,7 @@
                 reimbursement_day,
             </if>
             reimbursement_type,
+            reimbursement_address,
             reimbursement_amount
         )
         values
@@ -132,6 +136,7 @@
                 #{reimbursementDay},
             </if>
             #{reimbursementType},
+            0,
             #{reimbursementAmount}
         )
     </insert>
@@ -197,6 +202,7 @@
         and a.user_id= #{userId}
         and a.year = #{year}
         and a.reimbursement_type = 1
+        and a.reimbursement_address = 0
     </select>
 
     <select id="getAlreadyReimbursementQuotaByBusinessCodeId" resultType="java.lang.String">
@@ -204,6 +210,7 @@
         from zs_reimbursement_business_info a
         where a.del_flag = 0
         and a.business_code_id= #{businessCodeId}
+        and a.reimbursement_address = 0
     </select>
 
     <select id="getGatheringStatusById" resultType="java.lang.String">
@@ -212,8 +219,13 @@
         where a.del_flag = 0
         and a.id= #{businessCodeId}
     </select>
-
-
+<!--武汉-->
+    <select id="getWuHanGatheringStatusById" resultType="java.lang.String">
+        select a.gathering_status
+        from zs_wuhan_reimbursement_info a
+        where a.del_flag = 0
+        and a.id= #{businessCodeId}
+    </select>
 
     <select id="findListByBusinessCodeId" resultType="com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementBusinessDTO">
         SELECT
@@ -223,6 +235,7 @@
         <where>
             a.del_flag = 0
             and a.business_code_id = #{businessCodeId}
+            and a.reimbursement_address = 0
         </where>
         order by a.update_date desc,a.year desc, a.user_id asc
     </select>
@@ -231,7 +244,7 @@
     <select id="findListByUserIdAndYear" resultType="com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementBusinessDTO">
         SELECT
         <include refid="reimbursementBusinessColumns"/>
-        ,zri.business_code as "businessCode"
+        ,ifnull(zri.business_code,(select business_code from zs_wuhan_reimbursement_info where id = a.business_code_id)) as "businessCode"
         FROM zs_reimbursement_business_info a
         <include refid="reimbursementUserJoinColumns"/>
         left join zs_reimbursement_info zri on zri.id = a.business_code_id
@@ -242,10 +255,34 @@
         </where>
         order by a.update_date desc,a.year desc, a.user_id asc
     </select>
+<!--武汉-->
+    <select id="findWuHanListByUserIdAndYear" resultType="com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementBusinessDTO">
+        SELECT
+        <include refid="reimbursementBusinessColumns"/>
+        ,zri.business_code as "businessCode"
+        FROM zs_reimbursement_business_info a
+        <include refid="reimbursementUserJoinColumns"/>
+        left join zs_wuhan_reimbursement_info zri on zri.id = a.business_code_id
+        <where>
+            a.del_flag = 0
+            and a.user_id = #{userId}
+            and a.year = #{year}
+            <if test="reimbursementAddress != null">
+                and a.reimbursement_address = #{reimbursementAddress}
+            </if>
+        </where>
+        order by a.update_date desc,a.year desc, a.user_id asc
+    </select>
 
     <update id="updateReimbursementInfo">
         update zs_reimbursement_info
         set reimbursement_status = #{reimbursementStatus}
         where id = #{id}
     </update>
+
+    <update id="updateWuHanReimbursementInfo">
+        update zs_wuhan_reimbursement_info
+        set reimbursement_status = #{reimbursementStatus}
+        where id = #{id}
+    </update>
 </mapper>

+ 13 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/mapper/xml/ReimbursementUserMapper.xml

@@ -209,6 +209,19 @@
         order by id limit 1
     </select>
 
+    <select id="wuHanQueryByUserIdAndYear" resultType="com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementUserDTO">
+        SELECT
+        <include refid="reimbursementUserColumns"/>
+        FROM zs_reimbursement_user_info a
+        <include refid="reimbursementUserJoinColumns"/>
+        <where>
+            a.del_flag = 0
+            and a.user_id = #{userId}
+            and a.year = #{year}
+        </where>
+        order by id limit 1
+    </select>
+
     <delete id="delete">
         delete from zs_reimbursement_user_info
         <where>

+ 286 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/mapper/xml/WuHanReimbursementBusinessMapper.xml

@@ -0,0 +1,286 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jeeplus.test.reimbursementsys.mapper.WuHanReimbursementBusinessMapper">
+    <sql id="reimbursementUserColumns">
+        a.id AS "id",
+		a.create_by AS "createBy.id",
+		a.create_date AS "createDate",
+		a.update_by AS "updateBy.id",
+		a.update_date AS "updateDate",
+		a.remarks AS "remarks",
+		a.del_flag AS "delFlag",
+		a.user_id AS "userId",
+        a.year AS "year",
+        a.reimbursement_quota AS "reimbursementQuota",
+        a.reimbursement_all_day AS "reimbursementAllDay",
+        a.reimbursement_quota_day AS "reimbursementQuotaDay",
+        su.id as "user.id",
+        su.name as "user.name"
+    </sql>
+
+    <sql id="reimbursementBusinessColumns">
+        a.id AS "id",
+		a.create_by AS "createBy.id",
+		a.create_date AS "createDate",
+		a.update_by AS "updateBy.id",
+		a.update_date AS "updateDate",
+		a.remarks AS "remarks",
+		a.del_flag AS "delFlag",
+		a.business_code_id as "businessCodeId",
+		a.user_id AS "userId",
+        su.name as "userName",
+        a.year AS "year",
+        a.reimbursement_day as "reimbursementDay",
+        a.reimbursement_type AS "reimbursementType",
+        a.reimbursement_amount as "reimbursementAmount",
+        a.reimbursement_address as "reimbursementAddress"
+    </sql>
+
+    <sql id="reimbursementUserJoinColumns">
+        left join sys_user su on su.id = a.user_id
+    </sql>
+
+    <select id="findList" resultType="com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementUserDTO">
+        SELECT
+            <include refid="reimbursementUserColumns"/>
+        FROM zs_reimbursement_user_info a
+        <include refid="reimbursementUserJoinColumns"/>
+        <where>
+            a.del_flag = 0
+            <if test="reimbursementUser.year != null and reimbursementUser.year != ''">
+                and a.year like concat('%',#{reimbursementUser.year},'%')
+            </if>
+            <if test="reimbursementUser.userId != null and reimbursementUser.userId != ''">
+                and a.user_id = #{reimbursementUser.userId}
+            </if>
+        </where>
+        order by a.update_date desc,a.year desc, a.user_id asc
+    </select>
+
+    <select id="getYearList" resultType="com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementUserDTO">
+        SELECT
+            <include refid="reimbursementUserColumns"/>
+        FROM zs_reimbursement_user_info a
+        <include refid="reimbursementUserJoinColumns"/>
+        <where>
+            a.del_flag = 0
+            <if test="reimbursementUser.userId != null and reimbursementUser.userId != ''">
+                and a.user_id = #{reimbursementUser.userId}
+            </if>
+        </where>
+        order by a.year desc
+    </select>
+
+    <select id="getReimbursementMoneyByYear" resultType="com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementUserDTO">
+        SELECT
+            a.year as year,
+            ifnull(sum(a.reimbursement_amount),0) as alreadyReimbursementAmount,
+            ifnull(sum(a.reimbursement_day),0) as alreadyReimbursementDay
+        FROM zs_reimbursement_business_info a
+        <where>
+            a.del_flag = 0
+            and a.user_id = #{userId}
+            and a.year in (${year})
+            and a.reimbursement_type = 1
+            and a.reimbursement_address = 1
+        </where>
+        group by a.year
+        order by a.year desc
+    </select>
+
+    <select id="reimbursementUserByUserIdAndYear" resultType="com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementUserDTO">
+        SELECT
+            <include refid="reimbursementUserColumns"/>
+        FROM zs_reimbursement_user_info a
+        <include refid="reimbursementUserJoinColumns"/>
+        <where>
+            a.del_flag = 0
+            and a.user_id = #{userId}
+            and a.year = #{year}
+        </where>
+    </select>
+
+    <insert id="save">
+        insert into zs_reimbursement_business_info (
+            id,
+            create_by,
+            create_date,
+            update_by,
+            update_date,
+            remarks,
+            del_flag,
+            business_code_id,
+            user_id,
+            year,
+            <if test="reimbursementDay != null and reimbursementDay != ''">
+                reimbursement_day,
+            </if>
+            reimbursement_type,
+            reimbursement_address,
+            reimbursement_amount
+        )
+        values
+        (
+            #{id},
+            #{createBy},
+            #{createDate},
+            #{updateBy},
+            #{updateDate},
+            #{remarks},
+            #{delFlag},
+            #{businessCodeId},
+            #{userId},
+            #{year},
+            <if test="reimbursementDay != null and reimbursementDay != ''">
+                #{reimbursementDay},
+            </if>
+            #{reimbursementType},
+            1,
+            #{reimbursementAmount}
+        )
+    </insert>
+
+    <update id="update">
+        update zs_reimbursement_user_info
+        set
+            update_by = #{updateBy}
+            ,update_date = #{updateDate}
+            <if test="year != null and year != ''">
+                ,year = #{year}
+            </if>
+            <if test="reimbursementQuota != null and reimbursementQuota != ''">
+                ,reimbursement_quota = #{reimbursementQuota}
+            </if>
+            <if test="reimbursementQuotaDay != null and reimbursementQuotaDay != ''">
+                ,reimbursement_quota_day = #{reimbursementQuotaDay}
+            </if>
+        <where>
+            id = #{id}
+        </where>
+    </update>
+
+    <select id="queryById" resultType="com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementBusinessDTO">
+        SELECT
+        <include refid="reimbursementUserColumns"/>
+            FROM zs_reimbursement_user_info a
+        <include refid="reimbursementUserJoinColumns"/>
+        <where>
+            a.del_flag = 0
+            and a.id = #{id}
+        </where>
+    </select>
+
+    <select id="queryByUserIdAndYear" resultType="com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementUserDTO">
+        SELECT
+        <include refid="reimbursementUserColumns"/>
+            FROM zs_reimbursement_user_info a
+        <include refid="reimbursementUserJoinColumns"/>
+        <where>
+            a.del_flag = 0
+            and a.user_id = #{userId}
+            and a.year = #{year}
+        </where>
+    </select>
+
+    <delete id="delete">
+        delete from zs_reimbursement_user_info
+        <where>
+            <if test="idList != null and idList.size>0">
+                and id in
+                <foreach collection="idList" item="id" separator="," open="(" close=")">
+                    #{id}
+                </foreach>
+            </if>
+        </where>
+    </delete>
+
+    <select id="getAlreadyReimbursementQuotaByUserIdAndYear" resultType="java.lang.String">
+        select ifnull(sum(a.reimbursement_amount),0)
+        from zs_reimbursement_business_info a
+        where a.del_flag = 0
+        and a.user_id= #{userId}
+        and a.year = #{year}
+        and a.reimbursement_type = 1
+        and a.reimbursement_address = 1
+    </select>
+
+    <select id="getAlreadyReimbursementQuotaByBusinessCodeId" resultType="java.lang.String">
+        select ifnull(sum(a.reimbursement_amount),0)
+        from zs_reimbursement_business_info a
+        where a.del_flag = 0
+        and a.business_code_id= #{businessCodeId}
+        and a.reimbursement_address = 1
+    </select>
+
+    <select id="getGatheringStatusById" resultType="java.lang.String">
+        select a.gathering_status
+        from zs_reimbursement_info a
+        where a.del_flag = 0
+        and a.id= #{businessCodeId}
+    </select>
+<!--武汉-->
+    <select id="getWuHanGatheringStatusById" resultType="java.lang.String">
+        select a.gathering_status
+        from zs_wuhan_reimbursement_info a
+        where a.del_flag = 0
+        and a.id= #{businessCodeId}
+    </select>
+
+    <select id="findListByBusinessCodeId" resultType="com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementBusinessDTO">
+        SELECT
+        <include refid="reimbursementBusinessColumns"/>
+        FROM zs_reimbursement_business_info a
+        <include refid="reimbursementUserJoinColumns"/>
+        <where>
+            a.del_flag = 0
+            and a.business_code_id = #{businessCodeId}
+            and a.reimbursement_address = 1
+        </where>
+        order by a.update_date desc,a.year desc, a.user_id asc
+    </select>
+
+
+    <select id="findListByUserIdAndYear" resultType="com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementBusinessDTO">
+        SELECT
+        <include refid="reimbursementBusinessColumns"/>
+        ,zri.business_code as "businessCode"
+        FROM zs_reimbursement_business_info a
+        <include refid="reimbursementUserJoinColumns"/>
+        left join zs_reimbursement_info zri on zri.id = a.business_code_id
+        <where>
+            a.del_flag = 0
+            and a.user_id = #{userId}
+            and a.year = #{year}
+            and a.reimbursement_address = 1
+        </where>
+        order by a.update_date desc,a.year desc, a.user_id asc
+    </select>
+<!--武汉-->
+    <select id="findWuHanListByUserIdAndYear" resultType="com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementBusinessDTO">
+        SELECT
+        <include refid="reimbursementBusinessColumns"/>
+        ,zri.business_code as "businessCode"
+        FROM zs_reimbursement_business_info a
+        <include refid="reimbursementUserJoinColumns"/>
+        left join zs_wuhan_reimbursement_info zri on zri.id = a.business_code_id
+        <where>
+            a.del_flag = 0
+            and a.user_id = #{userId}
+            and a.year = #{year}
+            and a.reimbursement_address = 1
+        </where>
+        order by a.update_date desc,a.year desc, a.user_id asc
+    </select>
+
+    <update id="updateReimbursementInfo">
+        update zs_reimbursement_info
+        set reimbursement_status = #{reimbursementStatus}
+        where id = #{id}
+    </update>
+
+    <update id="updateWuHanReimbursementInfo">
+        update zs_wuhan_reimbursement_info
+        set reimbursement_status = #{reimbursementStatus}
+        where id = #{id}
+    </update>
+</mapper>

+ 475 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/mapper/xml/WuHanReimbursementSysMapper.xml

@@ -0,0 +1,475 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jeeplus.test.reimbursementsys.mapper.WuHanReimbursementSysMapper">
+    <sql id="reimbursementColumns">
+        a.id AS "id",
+		a.create_by AS "createBy.id",
+		a.create_date AS "createDate",
+		a.update_by AS "updateBy.id",
+		a.update_date AS "updateDate",
+		a.remarks AS "remarks",
+		a.del_flag AS "delFlag",
+		a.parent_id AS "parent.id",
+		a.parent_id AS "parentId",
+		a.parent_ids AS "parentIds",
+        a.invoice_code AS "invoiceCode",
+        a.invoice_number AS "invoiceNumber",
+        a.firm_name AS "firmName",
+        a.make_time AS "makeTime",
+		a.name AS "name",
+        a.money AS "money",
+        a.tax AS "tax",
+        a.income AS "income",
+        a.business_code AS "businessCode",
+        a.gathering_time AS "gatheringTime",
+        a.proposer AS "proposer",
+        a.partner AS "partner",
+        a.business_type AS "businessType",
+        a.reimbursement_ratio AS "reimbursementRatio",
+        a.reimbursement_status AS "reimbursementStatus",
+        a.batch_flag AS "batchFlag",
+        a.year AS "year",
+        a.random_type AS "randomType"
+    </sql>
+
+    <select id="queryAllList" resultType="com.jeeplus.test.reimbursementsys.domain.dto.WuHanReimbursementDTO">
+        SELECT
+            <include refid="reimbursementColumns"/>
+        FROM zs_wuhan_reimbursement_info a
+        <where>
+            a.del_flag = 0
+            <if test="reimbursement.businessCode != null and reimbursement.businessCode != ''">
+            and a.business_code like concat('%',#{reimbursement.businessCode},'%')
+            </if>
+            <if test="reimbursement.idList != null and reimbursement.idList.size>0">
+                and a.id in
+                <foreach collection="reimbursement.idList" item="id" separator="," open="(" close=")">
+                    #{id}
+                </foreach>
+            </if>
+        </where>
+        order by a.business_code
+    </select>
+
+    <select id="getInvoiceList" resultType="com.jeeplus.test.reimbursementsys.domain.dto.WuHanReimbursementDTO">
+        SELECT
+            <include refid="reimbursementColumns"/>
+        FROM zs_wuhan_reimbursement_invoice_info a
+        <where>
+            a.del_flag = 0
+            <if test="invoiceNumber != null and invoiceNumber != ''">
+                and a.invoice_number like concat('%',#{invoiceNumber},'%')
+            </if>
+            <if test="proposer != null and proposer != ''">
+                and a.proposer like concat('%',#{proposer},'%')
+            </if>
+            <if test="partner != null and partner != ''">
+                and a.partner like concat('%',#{partner},'%')
+            </if>
+            <if test="firmName != null and firmName != ''">
+                and a.firm_name like concat('%',#{firmName},'%')
+            </if>
+            <if test="beginIncome != null and beginIncome != ''">
+                and a.income >= #{beginIncome}
+            </if>
+            <if test="endIncome != null and endIncome != ''">
+                and a.income &lt;= #{endIncome}
+            </if>
+            <if test="beginDate != null">
+                and a.make_time >= #{beginDate}
+            </if>
+            <if test="endDate != null">
+                and a.make_time &lt;= #{endDate}
+            </if>
+        </where>
+        order by a.invoice_number
+    </select>
+
+    <select id="getReceiptInvoiceIncomeByReimbursementId" resultType="java.lang.String">
+        SELECT
+            ifnull(sum(a.income),0) as "income"
+        FROM zs_wuhan_reimbursement_invoice_info a
+        <where>
+            a.del_flag = 0
+            and a.parent_id =#{parentId}
+            and a.gathering_time is not null
+        </where>
+        order by a.invoice_number
+    </select>
+
+    <select id="getReimbursementRatioByReimbursementId" resultType="java.lang.String">
+        SELECT
+            a.reimbursement_ratio as "reimbursementRatio"
+        FROM zs_wuhan_reimbursement_info a
+        <where>
+            a.del_flag = 0
+            and a.id =#{id}
+        </where>
+        order by a.invoice_number
+    </select>
+
+    <select id="getInvoiceByParentIdList" resultType="com.jeeplus.test.reimbursementsys.domain.dto.WuHanReimbursementDTO">
+        SELECT
+            <include refid="reimbursementColumns"/>
+        FROM zs_wuhan_reimbursement_invoice_info a
+        <where>
+            a.del_flag = 0
+            <if test="parentIdList.size>0">
+                and a.parent_id in
+                <foreach collection="parentIdList" item="parentId" separator="," open="(" close=")">
+                    #{parentId}
+                </foreach>
+            </if>
+        </where>
+        order by a.invoice_number
+    </select>
+
+    <select id="selectOldInvoiceNumber" resultType="java.lang.String">
+        SELECT
+            a.invoice_number as "invoiceNumber"
+        FROM zs_wuhan_reimbursement_invoice_info a
+        <where>
+            a.del_flag = 0
+            <if test="invoiceNumberList.size>0">
+                and a.invoice_number in
+                <foreach collection="invoiceNumberList" item="invoiceNumber" separator="," open="(" close=")">
+                    #{invoiceNumber}
+                </foreach>
+            </if>
+        </where>
+    </select>
+
+    <select id="selectOldBusinessCode" resultType="java.lang.String">
+        SELECT
+            a.business_code
+        FROM zs_wuhan_reimbursement_invoice_info a
+        <where>
+            a.del_flag = 0
+            <if test="businessCodeList.size>0">
+                and a.business_code in
+                <foreach collection="businessCodeList" item="businessCode" separator="," open="(" close=")">
+                    #{businessCode}
+                </foreach>
+            </if>
+        </where>
+    </select>
+
+    <select id="selectOldBusinessCodeByInfo" resultType="com.jeeplus.test.reimbursementsys.domain.dto.WuHanReimbursementDTO">
+        SELECT
+        a.id,a.business_code
+        FROM zs_wuhan_reimbursement_info a
+        <where>
+            a.del_flag = 0
+            <if test="businessCodeList.size>0">
+                and a.business_code in
+                <foreach collection="businessCodeList" item="businessCode" separator="," open="(" close=")">
+                    #{businessCode}
+                </foreach>
+            </if>
+            and a.year = #{year}
+        </where>
+    </select>
+
+    <insert id="insertBusinessCodeList">
+        insert into zs_wuhan_reimbursement_info (
+          id,
+          create_by,
+          create_date,
+          update_by,
+          update_date,
+          remarks,
+          del_flag,
+          parent_id,
+          parent_ids,
+          business_code,
+          year
+        )
+        values
+        <foreach collection="businessCodeList" item="item" separator=",">
+            ( #{item.id},
+            #{item.createBy},
+            #{item.createDate},
+            #{item.updateBy},
+            #{item.updateDate},
+            #{item.remarks},
+            #{item.delFlag},
+            #{item.parentId},
+            #{item.parentIds},
+            #{item.businessCode},
+            #{item.year}
+            )
+        </foreach>
+    </insert>
+
+    <insert id="insertInvoiceList">
+        insert into zs_wuhan_reimbursement_invoice_info (
+            id,
+            create_by,
+            create_date,
+            update_by,
+            update_date,
+            remarks,
+            del_flag,
+            parent_id,
+            parent_ids,
+            invoice_code,
+            invoice_number,
+            firm_name,
+            make_time,
+            name,
+            money,
+            tax,
+            income,
+            business_code,
+            gathering_time,
+            proposer,
+            partner,
+            business_type
+        )
+        values
+        <foreach collection="invoiceInfoList" item="item" separator=",">
+            ( #{item.id},
+            #{item.createBy},
+            #{item.createDate},
+            #{item.updateBy},
+            #{item.updateDate},
+            #{item.remarks},
+            #{item.delFlag},
+            #{item.parentId},
+            #{item.parentIds},
+            #{item.invoiceCode},
+            #{item.invoiceNumber},
+            #{item.firmName},
+            #{item.makeTime},
+            #{item.name},
+            #{item.money},
+            #{item.tax},
+            #{item.income},
+            #{item.businessCode},
+            #{item.gatheringTime},
+            #{item.proposer},
+            #{item.partner},
+            #{item.businessType}
+            )
+        </foreach>
+    </insert>
+
+    <select id="queryBusinessById" resultType="com.jeeplus.test.reimbursementsys.domain.dto.WuHanReimbursementDTO">
+        SELECT
+        <include refid="reimbursementColumns"/>
+        FROM zs_wuhan_reimbursement_info a
+        <where>
+            a.del_flag = 0
+            and a.id = #{id}
+        </where>
+    </select>
+
+    <select id="queryInvoiceById" resultType="com.jeeplus.test.reimbursementsys.domain.dto.WuHanReimbursementDTO">
+        SELECT
+        <include refid="reimbursementColumns"/>
+        FROM zs_wuhan_reimbursement_invoice_info a
+        <where>
+            a.del_flag = 0
+            and a.id = #{id}
+        </where>
+    </select>
+
+    <update id="saveBusiness">
+        update zs_wuhan_reimbursement_info
+        set
+            update_by = #{updateBy},
+            update_date = #{updateDate},
+            business_code = #{businessCode}
+            <if test="randomBusinessCodeIndex != null and randomBusinessCodeIndex != ''">
+                ,random_business_code_index = #{randomBusinessCodeIndex}
+            </if>
+            <if test="randomType != null and randomType != ''">
+                ,random_type = #{randomType}
+            </if>
+        where
+            id = #{id} and del_flag = 0
+    </update>
+
+    <update id="saveInvoice">
+        update zs_wuhan_reimbursement_invoice_info
+        set
+            update_by = #{updateBy},
+            update_date = #{updateDate},
+            gathering_time = #{gatheringTime}
+        where
+            id = #{id} and del_flag = 0
+    </update>
+
+    <update id="modifyInvoice">
+        update zs_wuhan_reimbursement_invoice_info
+        set
+            update_by = #{updateBy},
+            update_date = #{updateDate}
+        <if test="proposer != null and proposer != ''">
+            ,proposer = #{proposer}
+        </if>
+        <if test="partner != null and partner != ''">
+            ,partner = #{partner}
+        </if>
+        where
+            id = #{id} and del_flag = 0
+    </update>
+
+    <select id="getInfoByBusinessCode" resultType="com.jeeplus.test.reimbursementsys.domain.dto.WuHanReimbursementDTO">
+        SELECT
+        <include refid="reimbursementColumns"/>
+        FROM zs_wuhan_reimbursement_info a
+        <where>
+            a.del_flag = 0
+            and a.business_code = #{businessCode}
+            and year = #{year}
+            and a.random_type = 0
+        </where>
+        limit 1;
+    </select>
+
+    <update id="updateInvoiceList">
+        <foreach collection="invoiceInfoList" item="item" index="index" open="" close="" separator=";">
+            update zs_wuhan_reimbursement_invoice_info
+            <set >
+                    update_by = #{item.updateBy}
+                    ,update_date = #{item.updateDate}
+                <if test="item.businessCode != null and item.businessCode != ''">
+                    ,business_code = #{item.businessCode}
+                </if>
+                <if test="item.parentId != null and item.parentId != ''">
+                    ,parent_id = #{item.parentId}
+                </if>
+                <if test="item.parentIds != null and item.parentIds != ''">
+                    ,parent_ids = #{item.parentIds}
+                </if>
+            </set>
+            where id = #{item.id} and del_flag = 0
+        </foreach>
+    </update>
+
+    <delete id="deleteBusinessById">
+        delete from zs_wuhan_reimbursement_info
+        where
+            id = #{id}
+    </delete>
+
+    <update id="removeBusinessByIds">
+        update zs_wuhan_reimbursement_info
+        set
+            del_flag = 1
+        <where>
+            <if test="idList != null and idList.size>0">
+                and id in
+                <foreach collection="idList" item="id" separator="," open="(" close=")">
+                    #{id}
+                </foreach>
+            </if>
+        </where>
+    </update>
+
+    <update id="removeBusinessByParentIds">
+        update zs_wuhan_reimbursement_invoice_info
+        set
+        del_flag = 1
+        <where>
+            <if test="idList != null and idList.size>0">
+                and parent_id in
+                <foreach collection="idList" item="id" separator="," open="(" close=")">
+                    #{id}
+                </foreach>
+            </if>
+        </where>
+    </update>
+
+    <update id="removeInvoiceByIds">
+        update zs_wuhan_reimbursement_invoice_info
+        set
+        del_flag = 1
+        <where>
+            <if test="idList != null and idList.size>0">
+                and id in
+                <foreach collection="idList" item="id" separator="," open="(" close=")">
+                    #{id}
+                </foreach>
+            </if>
+        </where>
+    </update>
+
+    <update id="updateReimbursementRatio">
+        update zs_wuhan_reimbursement_info
+        set
+        reimbursement_ratio = #{reimbursementRatio}
+        <where>
+            id = #{id}
+        </where>
+    </update>
+
+    <select id="getGatheringTimeInvoiceList" resultType="com.jeeplus.test.reimbursementsys.domain.dto.WuHanReimbursementDTO">
+        SELECT
+        <include refid="reimbursementColumns"/>
+        FROM zs_wuhan_reimbursement_invoice_info a
+        <where>
+            a.del_flag = 0
+            <if test="idList != null and idList.size>0">
+                and a.id in
+                <foreach collection="idList" item="id" separator="," open="(" close=")">
+                    #{id}
+                </foreach>
+            </if>
+            and gathering_time is not null
+        </where>
+        order by a.invoice_number
+    </select>
+
+    <select id="getNotGatheringTimeInvoice" resultType="com.jeeplus.test.reimbursementsys.domain.dto.WuHanReimbursementDTO">
+        SELECT
+        <include refid="reimbursementColumns"/>
+        FROM zs_wuhan_reimbursement_invoice_info a
+        <where>
+            a.del_flag = 0
+            and parent_id = (
+            select parent_id from zs_wuhan_reimbursement_invoice_info where id = #{id}
+            ) and gathering_time is null
+        </where>
+        order by a.invoice_number
+    </select>
+
+    <select id="getNotGatheringTimeInvoiceBybusinessCodeId" resultType="com.jeeplus.test.reimbursementsys.domain.dto.WuHanReimbursementDTO">
+        SELECT
+        <include refid="reimbursementColumns"/>
+        FROM zs_wuhan_reimbursement_invoice_info a
+        <where>
+            a.del_flag = 0
+            and parent_id = #{businessCodeId}
+            and gathering_time is null
+        </where>
+        order by a.invoice_number
+    </select>
+
+    <update id="updateGatheringTime">
+        <foreach collection="idList" item="id" index="index" open="" close="" separator=";">
+            update zs_wuhan_reimbursement_invoice_info
+            <set >
+                update_by = #{reimbursement.updateBy}
+                ,update_date = #{reimbursement.updateDate}
+                ,gathering_time = #{reimbursement.gatheringTime}
+            </set>
+            where id = #{id}
+        </foreach>
+    </update>
+
+    <update id="updateGatheringStatusById">
+        update zs_wuhan_reimbursement_info
+        set gathering_status = 1
+        where id = #{id}
+    </update>
+
+    <select id="getLastRandomBusinessCodeIndex" resultType="java.lang.String">
+        select ifnull(max(random_business_code_index),0) as randomBusinessCodeIndex
+        from zs_wuhan_reimbursement_info
+        <where>
+            year = #{year}
+        </where>
+    </select>
+</mapper>

+ 15 - 4
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/service/ReimbursementBusinessService.java

@@ -2,10 +2,7 @@ package com.jeeplus.test.reimbursementsys.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementBusinessDTO;
-import com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementBusinessReturnDTO;
-import com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementDTO;
-import com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementUserDTO;
+import com.jeeplus.test.reimbursementsys.domain.dto.*;
 
 import java.util.List;
 import java.util.Map;
@@ -31,6 +28,14 @@ public interface ReimbursementBusinessService {
      * @return
      */
     ReimbursementDTO getBusinessById(String id);
+
+    /**
+     * 查询武汉业务报销额度相关信息
+     * @param id
+     * @return
+     */
+    WuHanReimbursementDTO getWuHanBusinessById(String id);
+
     /**
      * 查询报销信息(根据人员id和年份)
      * @param reimbursementUser
@@ -61,6 +66,12 @@ public interface ReimbursementBusinessService {
     Map<String,Object> save(ReimbursementBusinessDTO reimbursementUser);
 
     /**
+     * 保存武汉报销数据信息
+     * @param reimbursementUser
+     */
+    Map<String,Object> wuHanSave(ReimbursementBusinessDTO reimbursementUser);
+
+    /**
      * 修改报销人员信息
      * @param reimbursementUser
      */

+ 1 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/service/ReimbursementSysService.java

@@ -3,6 +3,7 @@ package com.jeeplus.test.reimbursementsys.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementDTO;
+import com.jeeplus.test.reimbursementsys.domain.dto.WuHanReimbursementDTO;
 
 import java.util.List;
 import java.util.Map;

+ 13 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/service/ReimbursementUserService.java

@@ -58,6 +58,12 @@ public interface ReimbursementUserService {
     Map<String,Object> delete(List<String> idList);
 
     /**
+     * 根据id删除人员报销信息(物理删除)
+     * @param idList
+     */
+    Map<String,Object> deleteWuHan(List<String> idList);
+
+    /**
      * 查询人员报销信息列表
      * @param reimbursementUserDTO
      * @return
@@ -65,6 +71,13 @@ public interface ReimbursementUserService {
     ReimbursementBusinessReturnDTO findListByUserId(ReimbursementUserDTO reimbursementUserDTO);
 
     /**
+     * 查询武汉人员报销信息列表
+     * @param reimbursementUserDTO
+     * @return
+     */
+    ReimbursementBusinessReturnDTO findWuHanListByUserId(ReimbursementUserDTO reimbursementUserDTO);
+
+    /**
      * 根据部门和人员名称查询人员信息
      * @param reimbursementUserDTO
      * @return

+ 92 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/service/WuHanReimbursementBusinessService.java

@@ -0,0 +1,92 @@
+package com.jeeplus.test.reimbursementsys.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jeeplus.test.reimbursementsys.domain.dto.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author li-peike
+ * @version 1.0.0
+ * @ClassName ReimbursementSysService.java
+ * @Description TODO
+ * @createTime 2022年05月06日 10:25:00
+ */
+
+public interface WuHanReimbursementBusinessService {
+    /**
+     * 查询报销人员信息
+     * @param id
+     * @return
+     */
+    ReimbursementBusinessDTO queryById(String id);
+    /**
+     * 查询业务报销额度相关信息
+     * @param id
+     * @return
+     */
+    ReimbursementDTO getBusinessById(String id);
+
+    /**
+     * 查询武汉业务报销额度相关信息
+     * @param id
+     * @return
+     */
+    WuHanReimbursementDTO getWuHanBusinessById(String id);
+
+    /**
+     * 查询报销信息(根据人员id和年份)
+     * @param reimbursementUser
+     * @return
+     */
+    ReimbursementUserDTO queryByUserIdAndYear(ReimbursementBusinessDTO reimbursementUser);
+
+    /**
+     * 查询列表信息
+     * @param page
+     * @param reimbursementUser
+     * @return
+     */
+    IPage<ReimbursementUserDTO> findList(Page<ReimbursementUserDTO> page, ReimbursementUserDTO reimbursementUser);
+
+    /**
+     * 根据人员信息查询报销年份信息
+     * @param page
+     * @param reimbursementUser
+     * @return
+     */
+    IPage<ReimbursementUserDTO> getYearList(Page<ReimbursementUserDTO> page, ReimbursementUserDTO reimbursementUser);
+
+    /**
+     * 保存报销数据信息
+     * @param reimbursementUser
+     */
+    Map<String,Object> save(ReimbursementBusinessDTO reimbursementUser);
+
+    /**
+     * 保存武汉报销数据信息
+     * @param reimbursementUser
+     */
+    Map<String,Object> wuHanSave(ReimbursementBusinessDTO reimbursementUser);
+
+    /**
+     * 修改报销人员信息
+     * @param reimbursementUser
+     */
+    void update(ReimbursementBusinessDTO reimbursementUser);
+
+    /**
+     * 根据id删除人员报销信息(物理删除)
+     * @param idList
+     */
+    void delete(List<String> idList);
+
+    /**
+     * 查询列表信息
+     * @param reimbursementBusiness
+     * @return
+     */
+    ReimbursementBusinessReturnDTO findListByBusinessCodeId(ReimbursementBusinessDTO reimbursementBusiness);
+}

+ 87 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/service/WuHanReimbursementSysService.java

@@ -0,0 +1,87 @@
+package com.jeeplus.test.reimbursementsys.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jeeplus.test.reimbursementsys.domain.dto.WuHanReimbursementDTO;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author li-peike
+ * @version 1.0.0
+ * @ClassName ReimbursementSysService.java
+ * @Description TODO
+ * @createTime 2022年05月06日 10:25:00
+ */
+
+public interface WuHanReimbursementSysService {
+    /**
+     * 查询业务具体信息
+     * @param id
+     * @return
+     */
+    WuHanReimbursementDTO queryBusinessById(String id);
+    /**
+     * 查询业务具体信息
+     * @param id
+     * @return
+     */
+    WuHanReimbursementDTO queryInvoiceById(String id);
+
+    IPage<WuHanReimbursementDTO> treeData(Page<WuHanReimbursementDTO> page, WuHanReimbursementDTO reimbursement);
+
+    /**
+     * 保存方法
+     * @param reimbursementList
+     */
+    Map<String,Object> save(List<WuHanReimbursementDTO> reimbursementList);
+
+    /**
+     * 保存业务编码
+     * @param reimbursement
+     */
+    void saveBusiness(WuHanReimbursementDTO reimbursement);
+
+    /**
+     * 保存收款时间信息
+     * @param reimbursement
+     */
+    Map<String,Object> saveGatheringTime(WuHanReimbursementDTO reimbursement);
+
+    /**
+     * 保存发票收款时间
+     * @param reimbursement
+     */
+    void saveInvoice(WuHanReimbursementDTO reimbursement);
+
+    /**
+     * 修改发票信息
+     * @param reimbursement
+     */
+    void modifyInvoice(WuHanReimbursementDTO reimbursement);
+
+    /**
+     * 批量删除(逻辑删除)
+     * @param idList
+     */
+    void removeByIds(List <String> idList);
+
+    /**
+     * 根据业务id删除对应的业务信息以及发票信息(逻辑删除)
+     * @param idList
+     */
+    void removeBusinessByIds(List <String> idList);
+
+    /**
+     * 根据发票id删除发票信息(逻辑删除)
+     * @param idList
+     */
+    void removeInvoiceByIds(List <String> idList);
+
+    /**
+     * 修改业务报销比例
+     * @param reimbursement
+     */
+    void updateReimbursementRatio(WuHanReimbursementDTO reimbursement);
+}

+ 150 - 4
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/service/impl/ReimbursementBusinessServiceImpl.java

@@ -7,13 +7,11 @@ import com.jeeplus.sys.service.dto.UserDTO;
 import com.jeeplus.sys.utils.DictUtils;
 import com.jeeplus.sys.utils.StringUtils;
 import com.jeeplus.sys.utils.UserUtils;
-import com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementBusinessDTO;
-import com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementBusinessReturnDTO;
-import com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementDTO;
-import com.jeeplus.test.reimbursementsys.domain.dto.ReimbursementUserDTO;
+import com.jeeplus.test.reimbursementsys.domain.dto.*;
 import com.jeeplus.test.reimbursementsys.mapper.ReimbursementBusinessMapper;
 import com.jeeplus.test.reimbursementsys.mapper.ReimbursementSysMapper;
 import com.jeeplus.test.reimbursementsys.mapper.ReimbursementUserMapper;
+import com.jeeplus.test.reimbursementsys.mapper.WuHanReimbursementSysMapper;
 import com.jeeplus.test.reimbursementsys.service.ReimbursementBusinessService;
 import org.springframework.stereotype.Service;
 
@@ -38,6 +36,8 @@ public class ReimbursementBusinessServiceImpl implements ReimbursementBusinessSe
     @Resource
     private ReimbursementSysMapper reimbursementSysMapper;
     @Resource
+    private WuHanReimbursementSysMapper wuHanReimbursementSysMapper;
+    @Resource
     private ReimbursementUserMapper reimbursementUserMapper;
 
 
@@ -71,6 +71,32 @@ public class ReimbursementBusinessServiceImpl implements ReimbursementBusinessSe
         reimbursement.setSurplusReimbursementAmount(canReimbursementAmount.subtract(allAlreadyReimbursementQuota).toString());
         return reimbursement;
     }
+    //武汉
+    @Override
+    public WuHanReimbursementDTO getWuHanBusinessById(String id) {
+        WuHanReimbursementDTO reimbursement = new WuHanReimbursementDTO();
+        reimbursement.setBusinessCodeId(id);
+        ReimbursementBusinessDTO reimbursementBusiness = new ReimbursementBusinessDTO();
+        reimbursementBusiness.setBusinessCodeId(id);
+        //根据业务id查询已收款的发票信息收款总额
+        String getReceiptInvoiceByReimbursementId = wuHanReimbursementSysMapper.getReceiptInvoiceIncomeByReimbursementId(id);
+        BigDecimal income = new BigDecimal(getReceiptInvoiceByReimbursementId);    //发票收入
+        //根据业务id查询报销比例
+        String getReimbursementRatioByReimbursementId = wuHanReimbursementSysMapper.getReimbursementRatioByReimbursementId(id);
+        if(StringUtils.isBlank(getReimbursementRatioByReimbursementId)){
+            getReimbursementRatioByReimbursementId = "0";
+            reimbursement.setReimbursementRatio("0");
+        }
+        BigDecimal reimbursementRatio = new BigDecimal(getReimbursementRatioByReimbursementId);    //报销比例
+        BigDecimal canReimbursementAmount = income.multiply(reimbursementRatio).divide(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);    //该项目可报销额度计算
+        //查询该业务总报销额度
+        String alreadyReimbursementQuotaByBusinessCodeId = mapper.getAlreadyReimbursementQuotaByBusinessCodeId(reimbursementBusiness);
+        BigDecimal allAlreadyReimbursementQuota = new BigDecimal(alreadyReimbursementQuotaByBusinessCodeId);    //总报销额度
+        reimbursement.setAllAlreadyReimbursementQuota(allAlreadyReimbursementQuota.toString());
+        reimbursement.setCanReimbursementAmount(canReimbursementAmount.toString());
+        reimbursement.setSurplusReimbursementAmount(canReimbursementAmount.subtract(allAlreadyReimbursementQuota).toString());
+        return reimbursement;
+    }
 
     @Override
     public ReimbursementUserDTO queryByUserIdAndYear(ReimbursementBusinessDTO reimbursementUser) {
@@ -255,6 +281,126 @@ public class ReimbursementBusinessServiceImpl implements ReimbursementBusinessSe
         return map;
     }
 
+    /**
+     * 武汉保存
+     * @param reimbursementUser
+     */
+    @Override
+    public Map<String,Object> wuHanSave(ReimbursementBusinessDTO reimbursementUser) {
+        Map<String,Object> map = new HashMap<>();
+
+        if(StringUtils.isBlank(reimbursementUser.getUserId())){
+            map.put("success", false);
+            map.put("message", "报销人员为空,无法进行添加报销信息!");
+            return map;
+        }
+        if(StringUtils.isBlank(reimbursementUser.getYear())){
+            map.put("success", false);
+            map.put("message", "报销年份不正确,请重新填写!");
+            return map;
+        }
+        if(StringUtils.isBlank(reimbursementUser.getReimbursementType())){
+            map.put("success", false);
+            map.put("message", "请选择报销类型!");
+            return map;
+        }else{
+            if("1".equals(reimbursementUser.getReimbursementType()) && (StringUtils.isBlank(reimbursementUser.getReimbursementDay()) || !StringUtils.isNumeric(reimbursementUser.getReimbursementDay()))){
+                map.put("success", false);
+                map.put("message", "报销天数不正确,请重新填写!");
+                return map;
+            }
+        }
+        //根据人员id和报销年份查询该年度的报销信息
+        ReimbursementUserDTO reimbursementUserByUserIdAndYear = mapper.reimbursementUserByUserIdAndYear(reimbursementUser);
+        if(null == reimbursementUserByUserIdAndYear){
+            map.put("success", false);
+            map.put("message", "该员工" + reimbursementUser.getYear() + "年度未添加报销信息,无法进行报销");
+            return map;
+        }
+        //查询该人员该年度已报销额度(正常报销额度)
+        String alreadyReimbursementQuota = mapper.getAlreadyReimbursementQuotaByUserIdAndYear(reimbursementUser);
+        //判断本地报销额度是否超过该年度所剩余报销额度,如果超过,则不允许报销,并抛出。否则进行报销并保存报销数据
+        BigDecimal alreadyReimbursementQuotaB = new BigDecimal(alreadyReimbursementQuota);    //已报销额度
+        BigDecimal reimbursementAmount = null;
+        if("1".equals(reimbursementUser.getReimbursementType())){
+            BigDecimal reimbursementQuotaDay = new BigDecimal(reimbursementUser.getReimbursementQuotaDay());    //日报销额度
+            BigDecimal reimbursementDay = new BigDecimal(reimbursementUser.getReimbursementDay());  //报销天数
+            reimbursementAmount = reimbursementQuotaDay.multiply(reimbursementDay).setScale(2, BigDecimal.ROUND_HALF_UP);    //报销额度
+
+            //往期加这次的总报销额度和当年的总报销额度进行比较,小于当年报销额度 则个人可以进行报销,否则,无法进行报销
+            if(alreadyReimbursementQuotaB.add(reimbursementAmount).compareTo(new BigDecimal(reimbursementUser.getReimbursementQuota())) == 1){
+                map.put("success", false);
+                map.put("message", "本次报销金额已超出当年报销额度所剩余额,无法进行报销");
+                return map;
+            }
+        }else{
+            reimbursementAmount = new BigDecimal(reimbursementUser.getReimbursementAmount());
+        }
+
+
+        //根据业务id查询已收款的发票信息收款总额
+        String getReceiptInvoiceByReimbursementId = wuHanReimbursementSysMapper.getReceiptInvoiceIncomeByReimbursementId(reimbursementUser.getBusinessCodeId());
+        BigDecimal income = new BigDecimal(getReceiptInvoiceByReimbursementId);    //发票收入
+        if(new BigDecimal("0").compareTo(income) == 0){
+            map.put("success", false);
+            map.put("message", "该业务可报销额度为0,无法进行报销");
+            return map;
+        }
+        //根据业务id查询报销比例
+        String getReimbursementRatioByReimbursementId = wuHanReimbursementSysMapper.getReimbursementRatioByReimbursementId(reimbursementUser.getBusinessCodeId());
+        if(StringUtils.isBlank(getReimbursementRatioByReimbursementId)){
+            map.put("success", false);
+            map.put("message", "该业务报销比例为0,无法进行报销");
+            return map;
+        }
+        BigDecimal reimbursementRatio = new BigDecimal(getReimbursementRatioByReimbursementId);    //报销比例
+        BigDecimal canReimbursementAmount = income.multiply(reimbursementRatio).divide(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);    //该项目可报销额度计算
+        //查询该业务总报销额度
+        String alreadyReimbursementQuotaByBusinessCodeId = mapper.getAlreadyReimbursementQuotaByBusinessCodeId(reimbursementUser);
+        String gatheringStatus = mapper.getWuHanGatheringStatusById(reimbursementUser);
+        BigDecimal allAlreadyReimbursementQuota = new BigDecimal(alreadyReimbursementQuotaByBusinessCodeId);    //总报销额度
+        //往期加这次的总报销额度和当年的总报销额度进行比较,小于当年报销额度 则个人可以进行报销,否则,无法进行报销
+        if(allAlreadyReimbursementQuota.add(reimbursementAmount).compareTo(canReimbursementAmount) == 1 && "1".equals(reimbursementUser.getReimbursementType())){
+            map.put("success", false);
+            map.put("message", "本次报销金额已超出该业务可报销额度所剩余额,无法进行报销");
+            return map;
+        } else if (allAlreadyReimbursementQuota.add(reimbursementAmount).compareTo(canReimbursementAmount) == 0 && "1".equals(gatheringStatus)){
+            //如果报销额度和剩余报销额度相同
+            WuHanReimbursementDTO reimbursementDTO = new WuHanReimbursementDTO();
+            reimbursementDTO.setId(reimbursementUser.getBusinessCodeId());
+            reimbursementDTO.setReimbursementStatus("1");
+
+            mapper.updateWuHanReimbursementInfo(reimbursementDTO);
+        }
+
+        WuHanReimbursementDTO reimbursement = new WuHanReimbursementDTO();
+        reimbursement.setBusinessCodeId(reimbursementUser.getBusinessCodeId());
+        //根据该条发票信息查询同业务编号下的没有收款的发票信息
+        List<WuHanReimbursementDTO> notGatheringTimeInvoice = wuHanReimbursementSysMapper.getNotGatheringTimeInvoiceBybusinessCodeId(reimbursement);
+        if(notGatheringTimeInvoice.size() == 0){
+            //查询该发票信息
+            //如果所有的发票均已收款,则将业务信息添加全部收款状态
+            wuHanReimbursementSysMapper.updateGatheringStatusById(reimbursementUser.getBusinessCodeId());
+        }
+
+
+        UserDTO user = UserUtils.get(reimbursementUser.getUserId());
+
+        reimbursementUser.setReimbursementAmount(reimbursementAmount.toString());
+        if(StringUtils.isNotBlank(reimbursementUser.getId())){
+            reimbursementUser.preUpdate();
+            //新增
+            mapper.update(reimbursementUser);
+        }else{
+            reimbursementUser.preInsert();
+            //新增
+            mapper.save(reimbursementUser);
+        }
+
+        map.put("success", true);
+        map.put("message", user.getName() + "报销" + reimbursementUser.getReimbursementAmount() + "金额成功");
+        return map;
+    }
 
     @Override
     public void update(ReimbursementBusinessDTO reimbursementUser) {

+ 80 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/service/impl/ReimbursementUserServiceImpl.java

@@ -155,6 +155,35 @@ public class ReimbursementUserServiceImpl implements ReimbursementUserService {
     }
 
     @Override
+    public Map<String,Object> deleteWuHan(List<String> idList) {
+        Map<String,Object> map = new HashMap<>();
+        List<String> userName = Lists.newArrayList();
+        //删除发票信息
+        //判断该人员该年度是否已经存在报销情况,如存在则不可以删除
+        //根据id集合查询人员信息
+        for (String id: idList) {
+            ReimbursementUserDTO reimbursementUserDTO = mapper.queryById(id);
+            ReimbursementBusinessDTO reimbursementBusiness = new ReimbursementBusinessDTO();
+            reimbursementBusiness.setUserId(reimbursementUserDTO.getUserId());
+            reimbursementBusiness.setYear(reimbursementUserDTO.getYear());
+            List<ReimbursementBusinessDTO> list = businessMapper.findWuHanListByUserIdAndYear(reimbursementBusiness);
+            if(list.size()>0){
+                userName.add(reimbursementUserDTO.getUser().getName());
+            }
+        }
+        if(userName.size()>0){
+            map.put("success",false);
+            String userNames = StringUtils.join(userName, "、");
+            map.put("message", "员工 " + userNames + " 存在已报销情况,本次删除失败");
+        }else{
+            mapper.delete(idList);
+            map.put("success",true);
+            map.put("message", "删除成功");
+        }
+        return map;
+    }
+
+    @Override
     public ReimbursementBusinessReturnDTO findListByUserId(ReimbursementUserDTO reimbursementUserDTO) {
         ReimbursementBusinessDTO reimbursementBusiness = new ReimbursementBusinessDTO();
         reimbursementBusiness.setUserId(reimbursementUserDTO.getUserId());
@@ -205,6 +234,57 @@ public class ReimbursementUserServiceImpl implements ReimbursementUserService {
     }
 
     @Override
+    public ReimbursementBusinessReturnDTO findWuHanListByUserId(ReimbursementUserDTO reimbursementUserDTO) {
+        ReimbursementBusinessDTO reimbursementBusiness = new ReimbursementBusinessDTO();
+        reimbursementBusiness.setUserId(reimbursementUserDTO.getUserId());
+        reimbursementBusiness.setYear(reimbursementUserDTO.getYear());
+        ReimbursementBusinessReturnDTO reimbursementBusinessReturnDTO = new ReimbursementBusinessReturnDTO();
+        reimbursementBusiness.setReimbursementAddress(1);
+        List<ReimbursementBusinessDTO> list = businessMapper.findWuHanListByUserIdAndYear(reimbursementBusiness);
+
+        //获取武汉人员年度报销详情
+        ReimbursementUserDTO reimbursementUserInfo = mapper.wuHanQueryByUserIdAndYear(reimbursementUserDTO);
+        reimbursementBusinessReturnDTO.setList(list);
+        reimbursementBusinessReturnDTO.setReimbursementQuota(reimbursementUserInfo.getReimbursementQuota());
+
+        //已报销额度
+        BigDecimal alreadyReimbursementAmount = new BigDecimal("0");
+        //已报销天数
+        BigDecimal alreadyReimbursementDay = new BigDecimal("0");
+
+        for (ReimbursementBusinessDTO info : list) {
+            BigDecimal bigDecimal = new BigDecimal(info.getReimbursementAmount());
+            alreadyReimbursementAmount = alreadyReimbursementAmount.add(bigDecimal);
+            if("1".equals(info.getReimbursementType())){
+                alreadyReimbursementDay = alreadyReimbursementDay.add(new BigDecimal(info.getReimbursementDay()));
+            }
+            info.setReimbursementType(DictUtils.getDictLabel(info.getReimbursementType(), "reimbursement_type", null));
+        }
+        //剩余报销额度
+        reimbursementBusinessReturnDTO.setSurplusReimbursementAmount(new BigDecimal(reimbursementBusinessReturnDTO.getReimbursementQuota()).subtract(alreadyReimbursementAmount).toString());
+        //计算出可报销总天数
+        BigDecimal reimbursementDay = new BigDecimal("0");
+        if(null == reimbursementUserInfo.getReimbursementAllDay()){
+            reimbursementDay = new BigDecimal(reimbursementBusinessReturnDTO.getReimbursementQuota()).divide(new BigDecimal(reimbursementUserInfo.getReimbursementQuotaDay()),2, BigDecimal.ROUND_HALF_UP);
+        }else{
+            reimbursementDay = new BigDecimal(reimbursementUserInfo.getReimbursementAllDay());
+        }
+
+        //剩余报销天数
+        reimbursementBusinessReturnDTO.setSurplusReimbursementDay(reimbursementDay.subtract(alreadyReimbursementDay).toString());
+        //报销天数
+        reimbursementBusinessReturnDTO.setReimbursementDay(reimbursementDay.toString());
+        //已报销天数
+        reimbursementBusinessReturnDTO.setAlreadyReimbursementDay(alreadyReimbursementDay.toString());
+        //已报销额度
+        reimbursementBusinessReturnDTO.setAlreadyReimbursementAmount(alreadyReimbursementAmount.toString());
+        //日报销额度
+        reimbursementBusinessReturnDTO.setReimbursementQuotaDay(reimbursementUserInfo.getReimbursementQuotaDay());
+
+        return reimbursementBusinessReturnDTO;
+    }
+
+    @Override
     public List<UserDTO> getUserByNameAndOfficeName(ReimbursementUserDTO reimbursementUserDTO) {
         return mapper.getUserByNameAndOfficeName(reimbursementUserDTO);
     }

+ 434 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/service/impl/WuHanReimbursementBusinessServiceImpl.java

@@ -0,0 +1,434 @@
+package com.jeeplus.test.reimbursementsys.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.collect.Lists;
+import com.jeeplus.sys.service.dto.UserDTO;
+import com.jeeplus.sys.utils.DictUtils;
+import com.jeeplus.sys.utils.StringUtils;
+import com.jeeplus.sys.utils.UserUtils;
+import com.jeeplus.test.reimbursementsys.domain.dto.*;
+import com.jeeplus.test.reimbursementsys.mapper.*;
+import com.jeeplus.test.reimbursementsys.service.ReimbursementBusinessService;
+import com.jeeplus.test.reimbursementsys.service.WuHanReimbursementBusinessService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author li-peike
+ * @version 1.0.0
+ * @ClassName ReimbursementSysServiceImpl.java
+ * @Description TODO
+ * @createTime 2022年05月06日 10:38:00
+ */
+@Service
+public class WuHanReimbursementBusinessServiceImpl implements WuHanReimbursementBusinessService {
+
+    @Resource
+    private WuHanReimbursementBusinessMapper mapper;
+    @Resource
+    private ReimbursementSysMapper reimbursementSysMapper;
+    @Resource
+    private WuHanReimbursementSysMapper wuHanReimbursementSysMapper;
+    @Resource
+    private ReimbursementUserMapper reimbursementUserMapper;
+
+
+    @Override
+    public ReimbursementBusinessDTO queryById(String id) {
+        return mapper.queryById(id);
+    }
+
+    @Override
+    public ReimbursementDTO getBusinessById(String id) {
+        ReimbursementDTO reimbursement = new ReimbursementDTO();
+        reimbursement.setBusinessCodeId(id);
+        ReimbursementBusinessDTO reimbursementBusiness = new ReimbursementBusinessDTO();
+        reimbursementBusiness.setBusinessCodeId(id);
+        //根据业务id查询已收款的发票信息收款总额
+        String getReceiptInvoiceByReimbursementId = wuHanReimbursementSysMapper.getReceiptInvoiceIncomeByReimbursementId(id);
+        BigDecimal income = new BigDecimal(getReceiptInvoiceByReimbursementId);    //发票收入
+        //根据业务id查询报销比例
+        String getReimbursementRatioByReimbursementId = wuHanReimbursementSysMapper.getReimbursementRatioByReimbursementId(id);
+        if(StringUtils.isBlank(getReimbursementRatioByReimbursementId)){
+            getReimbursementRatioByReimbursementId = "0";
+            reimbursement.setReimbursementRatio("0");
+        }
+        BigDecimal reimbursementRatio = new BigDecimal(getReimbursementRatioByReimbursementId);    //报销比例
+        BigDecimal canReimbursementAmount = income.multiply(reimbursementRatio).divide(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);    //该项目可报销额度计算
+        //查询该业务总报销额度
+        String alreadyReimbursementQuotaByBusinessCodeId = mapper.getAlreadyReimbursementQuotaByBusinessCodeId(reimbursementBusiness);
+        BigDecimal allAlreadyReimbursementQuota = new BigDecimal(alreadyReimbursementQuotaByBusinessCodeId);    //总报销额度
+        reimbursement.setAllAlreadyReimbursementQuota(allAlreadyReimbursementQuota.toString());
+        reimbursement.setCanReimbursementAmount(canReimbursementAmount.toString());
+        reimbursement.setSurplusReimbursementAmount(canReimbursementAmount.subtract(allAlreadyReimbursementQuota).toString());
+        return reimbursement;
+    }
+    //武汉
+    @Override
+    public WuHanReimbursementDTO getWuHanBusinessById(String id) {
+        WuHanReimbursementDTO reimbursement = new WuHanReimbursementDTO();
+        reimbursement.setBusinessCodeId(id);
+        ReimbursementBusinessDTO reimbursementBusiness = new ReimbursementBusinessDTO();
+        reimbursementBusiness.setBusinessCodeId(id);
+        //根据业务id查询已收款的发票信息收款总额
+        String getReceiptInvoiceByReimbursementId = wuHanReimbursementSysMapper.getReceiptInvoiceIncomeByReimbursementId(id);
+        BigDecimal income = new BigDecimal(getReceiptInvoiceByReimbursementId);    //发票收入
+        //根据业务id查询报销比例
+        String getReimbursementRatioByReimbursementId = wuHanReimbursementSysMapper.getReimbursementRatioByReimbursementId(id);
+        if(StringUtils.isBlank(getReimbursementRatioByReimbursementId)){
+            getReimbursementRatioByReimbursementId = "0";
+            reimbursement.setReimbursementRatio("0");
+        }
+        BigDecimal reimbursementRatio = new BigDecimal(getReimbursementRatioByReimbursementId);    //报销比例
+        BigDecimal canReimbursementAmount = income.multiply(reimbursementRatio).divide(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);    //该项目可报销额度计算
+        //查询该业务总报销额度
+        String alreadyReimbursementQuotaByBusinessCodeId = mapper.getAlreadyReimbursementQuotaByBusinessCodeId(reimbursementBusiness);
+        BigDecimal allAlreadyReimbursementQuota = new BigDecimal(alreadyReimbursementQuotaByBusinessCodeId);    //总报销额度
+        reimbursement.setAllAlreadyReimbursementQuota(allAlreadyReimbursementQuota.toString());
+        reimbursement.setCanReimbursementAmount(canReimbursementAmount.toString());
+        reimbursement.setSurplusReimbursementAmount(canReimbursementAmount.subtract(allAlreadyReimbursementQuota).toString());
+        return reimbursement;
+    }
+
+    @Override
+    public ReimbursementUserDTO queryByUserIdAndYear(ReimbursementBusinessDTO reimbursementUser) {
+        return mapper.queryByUserIdAndYear(reimbursementUser);
+    }
+
+
+    @Override
+    public IPage<ReimbursementUserDTO> findList(Page<ReimbursementUserDTO> page, ReimbursementUserDTO reimbursementUser) {
+        return mapper.findList (page, reimbursementUser);
+    }
+
+    @Override
+    public IPage<ReimbursementUserDTO> getYearList(Page<ReimbursementUserDTO> page, ReimbursementUserDTO reimbursementUser) {
+        IPage<ReimbursementUserDTO> yearList = mapper.getYearList(page, reimbursementUser);
+        List<ReimbursementUserDTO> list = yearList.getRecords();
+        if(list.size()>0){
+            List<String> yearStrList = Lists.newArrayList();
+            for (ReimbursementUserDTO info : list) {
+                yearStrList.add(info.getYear());
+            }
+            String years = StringUtils.join(yearStrList, ',');
+            reimbursementUser.setYear(years);
+            //根据人员和年份查询他的已报金额
+            List<ReimbursementUserDTO> reimbursementMoneyByYear = mapper.getReimbursementMoneyByYear(reimbursementUser);
+            for (ReimbursementUserDTO info : list) {
+                for (ReimbursementUserDTO yearInfo : reimbursementMoneyByYear) {
+                    if(info.getYear().equals(yearInfo.getYear())){
+                        //根据人员和年份查询报销人年度报销天数信息
+                        ReimbursementUserDTO reimbursementUserDTO = new ReimbursementUserDTO();
+                        reimbursementUserDTO.setUserId(reimbursementUser.getUserId());
+                        reimbursementUserDTO.setYear(info.getYear());
+                        ReimbursementUserDTO userInfo = reimbursementUserMapper.queryByUserIdAndYear(reimbursementUserDTO);
+                        if(null != userInfo.getReimbursementAllDay()){
+                            //计算剩余天数
+                            if(StringUtils.isBlank(yearInfo.getAlreadyReimbursementDay())){
+                                yearInfo.setAlreadyReimbursementDay("0");
+                            }
+                            Integer surplusReimbursementDay = userInfo.getReimbursementAllDay() - Integer.parseInt(yearInfo.getAlreadyReimbursementDay());
+                            info.setSurplusReimbursementDay(surplusReimbursementDay.toString());
+                        }else{
+                            info.setSurplusReimbursementDay("");
+                        }
+                        //获取当年总报销额度
+                        BigDecimal allAlreadyReimbursementQuota = new BigDecimal(info.getReimbursementQuota());
+                        //获取当年已报销额度
+                        BigDecimal alreadyReimbursementQuota = new BigDecimal(yearInfo.getAlreadyReimbursementAmount());
+                        info.setAlreadyReimbursementAmount(alreadyReimbursementQuota.toString());
+                        //计算出当年所剩报销额度
+                        info.setRemainReimbursementAmount(allAlreadyReimbursementQuota.subtract(alreadyReimbursementQuota).toString());
+                        break;
+                    }
+                }
+                //如果没有剩余报销天数 则将年报销天数添加到剩余报销天数中
+                if(StringUtils.isBlank(info.getSurplusReimbursementDay())){
+                    info.setSurplusReimbursementDay(info.getReimbursementAllDay().toString());
+                }
+            }
+
+        }
+        return yearList;
+    }
+
+    /**
+     * 保存
+     * @param reimbursementUser
+     */
+    @Override
+    public Map<String,Object> save(ReimbursementBusinessDTO reimbursementUser) {
+        Map<String,Object> map = new HashMap<>();
+
+        if(StringUtils.isBlank(reimbursementUser.getUserId())){
+            map.put("success", false);
+            map.put("message", "报销人员为空,无法进行添加报销信息!");
+            return map;
+        }
+        if(StringUtils.isBlank(reimbursementUser.getYear())){
+            map.put("success", false);
+            map.put("message", "报销年份不正确,请重新填写!");
+            return map;
+        }
+        if(StringUtils.isBlank(reimbursementUser.getReimbursementType())){
+            map.put("success", false);
+            map.put("message", "请选择报销类型!");
+            return map;
+        }else{
+            if("1".equals(reimbursementUser.getReimbursementType()) && (StringUtils.isBlank(reimbursementUser.getReimbursementDay()) || !StringUtils.isNumeric(reimbursementUser.getReimbursementDay()))){
+                map.put("success", false);
+                map.put("message", "报销天数不正确,请重新填写!");
+                return map;
+            }
+        }
+        //根据人员id和报销年份查询该年度的报销信息
+        ReimbursementUserDTO reimbursementUserByUserIdAndYear = mapper.reimbursementUserByUserIdAndYear(reimbursementUser);
+        if(null == reimbursementUserByUserIdAndYear){
+            map.put("success", false);
+            map.put("message", "该员工" + reimbursementUser.getYear() + "年度未添加报销信息,无法进行报销");
+            return map;
+        }
+        //查询该人员该年度已报销额度(正常报销额度)
+        String alreadyReimbursementQuota = mapper.getAlreadyReimbursementQuotaByUserIdAndYear(reimbursementUser);
+        //判断本地报销额度是否超过该年度所剩余报销额度,如果超过,则不允许报销,并抛出。否则进行报销并保存报销数据
+        BigDecimal alreadyReimbursementQuotaB = new BigDecimal(alreadyReimbursementQuota);    //已报销额度
+        BigDecimal reimbursementAmount = null;
+        if("1".equals(reimbursementUser.getReimbursementType())){
+            BigDecimal reimbursementQuotaDay = new BigDecimal(reimbursementUser.getReimbursementQuotaDay());    //日报销额度
+            BigDecimal reimbursementDay = new BigDecimal(reimbursementUser.getReimbursementDay());  //报销天数
+            reimbursementAmount = reimbursementQuotaDay.multiply(reimbursementDay).setScale(2, BigDecimal.ROUND_HALF_UP);    //报销额度
+
+            //往期加这次的总报销额度和当年的总报销额度进行比较,小于当年报销额度 则个人可以进行报销,否则,无法进行报销
+            if(alreadyReimbursementQuotaB.add(reimbursementAmount).compareTo(new BigDecimal(reimbursementUser.getReimbursementQuota())) == 1){
+                map.put("success", false);
+                map.put("message", "本次报销金额已超出当年报销额度所剩余额,无法进行报销");
+                return map;
+            }
+        }else{
+            reimbursementAmount = new BigDecimal(reimbursementUser.getReimbursementAmount());
+        }
+
+
+        //根据业务id查询已收款的发票信息收款总额
+        String getReceiptInvoiceByReimbursementId = wuHanReimbursementSysMapper.getReceiptInvoiceIncomeByReimbursementId(reimbursementUser.getBusinessCodeId());
+        BigDecimal income = new BigDecimal(getReceiptInvoiceByReimbursementId);    //发票收入
+        if(new BigDecimal("0").compareTo(income) == 0){
+            map.put("success", false);
+            map.put("message", "该业务可报销额度为0,无法进行报销");
+            return map;
+        }
+        //根据业务id查询报销比例
+        String getReimbursementRatioByReimbursementId = wuHanReimbursementSysMapper.getReimbursementRatioByReimbursementId(reimbursementUser.getBusinessCodeId());
+        if(StringUtils.isBlank(getReimbursementRatioByReimbursementId)){
+            map.put("success", false);
+            map.put("message", "该业务报销比例为0,无法进行报销");
+            return map;
+        }
+        BigDecimal reimbursementRatio = new BigDecimal(getReimbursementRatioByReimbursementId);    //报销比例
+        BigDecimal canReimbursementAmount = income.multiply(reimbursementRatio).divide(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);    //该项目可报销额度计算
+        //查询该业务总报销额度
+        String alreadyReimbursementQuotaByBusinessCodeId = mapper.getAlreadyReimbursementQuotaByBusinessCodeId(reimbursementUser);
+        String gatheringStatus = mapper.getGatheringStatusById(reimbursementUser);
+        BigDecimal allAlreadyReimbursementQuota = new BigDecimal(alreadyReimbursementQuotaByBusinessCodeId);    //总报销额度
+        //往期加这次的总报销额度和当年的总报销额度进行比较,小于当年报销额度 则个人可以进行报销,否则,无法进行报销
+        if(allAlreadyReimbursementQuota.add(reimbursementAmount).compareTo(canReimbursementAmount) == 1 && "1".equals(reimbursementUser.getReimbursementType())){
+            map.put("success", false);
+            map.put("message", "本次报销金额已超出该业务可报销额度所剩余额,无法进行报销");
+            return map;
+        } else if (allAlreadyReimbursementQuota.add(reimbursementAmount).compareTo(canReimbursementAmount) == 0 && "1".equals(gatheringStatus)){
+            //如果报销额度和剩余报销额度相同
+            ReimbursementDTO reimbursementDTO = new ReimbursementDTO();
+            reimbursementDTO.setId(reimbursementUser.getBusinessCodeId());
+            reimbursementDTO.setReimbursementStatus("1");
+
+            mapper.updateReimbursementInfo(reimbursementDTO);
+        }
+
+        WuHanReimbursementDTO reimbursement = new WuHanReimbursementDTO();
+        reimbursement.setBusinessCodeId(reimbursementUser.getBusinessCodeId());
+        //根据该条发票信息查询同业务编号下的没有收款的发票信息
+        List<WuHanReimbursementDTO> notGatheringTimeInvoice = wuHanReimbursementSysMapper.getNotGatheringTimeInvoiceBybusinessCodeId(reimbursement);
+        if(notGatheringTimeInvoice.size() == 0){
+            //查询该发票信息
+            //如果所有的发票均已收款,则将业务信息添加全部收款状态
+            wuHanReimbursementSysMapper.updateGatheringStatusById(reimbursementUser.getBusinessCodeId());
+        }
+
+
+        UserDTO user = UserUtils.get(reimbursementUser.getUserId());
+
+        reimbursementUser.setReimbursementAmount(reimbursementAmount.toString());
+        if(StringUtils.isNotBlank(reimbursementUser.getId())){
+            reimbursementUser.preUpdate();
+            //新增
+            mapper.update(reimbursementUser);
+        }else{
+            reimbursementUser.preInsert();
+            //新增
+            mapper.save(reimbursementUser);
+        }
+
+        map.put("success", true);
+        map.put("message", user.getName() + "报销" + reimbursementUser.getReimbursementAmount() + "金额成功");
+        return map;
+    }
+
+    /**
+     * 武汉保存
+     * @param reimbursementUser
+     */
+    @Override
+    public Map<String,Object> wuHanSave(ReimbursementBusinessDTO reimbursementUser) {
+        Map<String,Object> map = new HashMap<>();
+
+        if(StringUtils.isBlank(reimbursementUser.getUserId())){
+            map.put("success", false);
+            map.put("message", "报销人员为空,无法进行添加报销信息!");
+            return map;
+        }
+        if(StringUtils.isBlank(reimbursementUser.getYear())){
+            map.put("success", false);
+            map.put("message", "报销年份不正确,请重新填写!");
+            return map;
+        }
+        if(StringUtils.isBlank(reimbursementUser.getReimbursementType())){
+            map.put("success", false);
+            map.put("message", "请选择报销类型!");
+            return map;
+        }else{
+            if("1".equals(reimbursementUser.getReimbursementType()) && (StringUtils.isBlank(reimbursementUser.getReimbursementDay()) || !StringUtils.isNumeric(reimbursementUser.getReimbursementDay()))){
+                map.put("success", false);
+                map.put("message", "报销天数不正确,请重新填写!");
+                return map;
+            }
+        }
+        //根据人员id和报销年份查询该年度的报销信息
+        ReimbursementUserDTO reimbursementUserByUserIdAndYear = mapper.reimbursementUserByUserIdAndYear(reimbursementUser);
+        if(null == reimbursementUserByUserIdAndYear){
+            map.put("success", false);
+            map.put("message", "该员工" + reimbursementUser.getYear() + "年度未添加报销信息,无法进行报销");
+            return map;
+        }
+        //查询该人员该年度已报销额度(正常报销额度)
+        String alreadyReimbursementQuota = mapper.getAlreadyReimbursementQuotaByUserIdAndYear(reimbursementUser);
+        //判断本地报销额度是否超过该年度所剩余报销额度,如果超过,则不允许报销,并抛出。否则进行报销并保存报销数据
+        BigDecimal alreadyReimbursementQuotaB = new BigDecimal(alreadyReimbursementQuota);    //已报销额度
+        BigDecimal reimbursementAmount = null;
+        if("1".equals(reimbursementUser.getReimbursementType())){
+            BigDecimal reimbursementQuotaDay = new BigDecimal(reimbursementUser.getReimbursementQuotaDay());    //日报销额度
+            BigDecimal reimbursementDay = new BigDecimal(reimbursementUser.getReimbursementDay());  //报销天数
+            reimbursementAmount = reimbursementQuotaDay.multiply(reimbursementDay).setScale(2, BigDecimal.ROUND_HALF_UP);    //报销额度
+
+            //往期加这次的总报销额度和当年的总报销额度进行比较,小于当年报销额度 则个人可以进行报销,否则,无法进行报销
+            if(alreadyReimbursementQuotaB.add(reimbursementAmount).compareTo(new BigDecimal(reimbursementUser.getReimbursementQuota())) == 1){
+                map.put("success", false);
+                map.put("message", "本次报销金额已超出当年报销额度所剩余额,无法进行报销");
+                return map;
+            }
+        }else{
+            reimbursementAmount = new BigDecimal(reimbursementUser.getReimbursementAmount());
+        }
+
+
+        //根据业务id查询已收款的发票信息收款总额
+        String getReceiptInvoiceByReimbursementId = wuHanReimbursementSysMapper.getReceiptInvoiceIncomeByReimbursementId(reimbursementUser.getBusinessCodeId());
+        BigDecimal income = new BigDecimal(getReceiptInvoiceByReimbursementId);    //发票收入
+        if(new BigDecimal("0").compareTo(income) == 0){
+            map.put("success", false);
+            map.put("message", "该业务可报销额度为0,无法进行报销");
+            return map;
+        }
+        //根据业务id查询报销比例
+        String getReimbursementRatioByReimbursementId = wuHanReimbursementSysMapper.getReimbursementRatioByReimbursementId(reimbursementUser.getBusinessCodeId());
+        if(StringUtils.isBlank(getReimbursementRatioByReimbursementId)){
+            map.put("success", false);
+            map.put("message", "该业务报销比例为0,无法进行报销");
+            return map;
+        }
+        BigDecimal reimbursementRatio = new BigDecimal(getReimbursementRatioByReimbursementId);    //报销比例
+        BigDecimal canReimbursementAmount = income.multiply(reimbursementRatio).divide(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);    //该项目可报销额度计算
+        //查询该业务总报销额度
+        String alreadyReimbursementQuotaByBusinessCodeId = mapper.getAlreadyReimbursementQuotaByBusinessCodeId(reimbursementUser);
+        String gatheringStatus = mapper.getWuHanGatheringStatusById(reimbursementUser);
+        BigDecimal allAlreadyReimbursementQuota = new BigDecimal(alreadyReimbursementQuotaByBusinessCodeId);    //总报销额度
+        //往期加这次的总报销额度和当年的总报销额度进行比较,小于当年报销额度 则个人可以进行报销,否则,无法进行报销
+        if(allAlreadyReimbursementQuota.add(reimbursementAmount).compareTo(canReimbursementAmount) == 1 && "1".equals(reimbursementUser.getReimbursementType())){
+            map.put("success", false);
+            map.put("message", "本次报销金额已超出该业务可报销额度所剩余额,无法进行报销");
+            return map;
+        } else if (allAlreadyReimbursementQuota.add(reimbursementAmount).compareTo(canReimbursementAmount) == 0 && "1".equals(gatheringStatus)){
+            //如果报销额度和剩余报销额度相同
+            WuHanReimbursementDTO reimbursementDTO = new WuHanReimbursementDTO();
+            reimbursementDTO.setId(reimbursementUser.getBusinessCodeId());
+            reimbursementDTO.setReimbursementStatus("1");
+
+            mapper.updateWuHanReimbursementInfo(reimbursementDTO);
+        }
+
+        WuHanReimbursementDTO reimbursement = new WuHanReimbursementDTO();
+        reimbursement.setBusinessCodeId(reimbursementUser.getBusinessCodeId());
+        //根据该条发票信息查询同业务编号下的没有收款的发票信息
+        List<WuHanReimbursementDTO> notGatheringTimeInvoice = wuHanReimbursementSysMapper.getNotGatheringTimeInvoiceBybusinessCodeId(reimbursement);
+        if(notGatheringTimeInvoice.size() == 0){
+            //查询该发票信息
+            //如果所有的发票均已收款,则将业务信息添加全部收款状态
+            wuHanReimbursementSysMapper.updateGatheringStatusById(reimbursementUser.getBusinessCodeId());
+        }
+
+
+        UserDTO user = UserUtils.get(reimbursementUser.getUserId());
+
+        reimbursementUser.setReimbursementAmount(reimbursementAmount.toString());
+        if(StringUtils.isNotBlank(reimbursementUser.getId())){
+            reimbursementUser.preUpdate();
+            //新增
+            mapper.update(reimbursementUser);
+        }else{
+            reimbursementUser.preInsert();
+            //新增
+            mapper.save(reimbursementUser);
+        }
+
+        map.put("success", true);
+        map.put("message", user.getName() + "报销" + reimbursementUser.getReimbursementAmount() + "金额成功");
+        return map;
+    }
+
+    @Override
+    public void update(ReimbursementBusinessDTO reimbursementUser) {
+        mapper.update(reimbursementUser);
+    }
+
+    @Override
+    public void delete(List<String> idList) {
+        //删除发票信息
+        mapper.delete(idList);
+    }
+
+
+    @Override
+    public ReimbursementBusinessReturnDTO findListByBusinessCodeId(ReimbursementBusinessDTO reimbursementBusiness) {
+        List<ReimbursementBusinessDTO> list = mapper.findListByBusinessCodeId(reimbursementBusiness);
+        for (ReimbursementBusinessDTO info : list) {
+            info.setReimbursementType(DictUtils.getDictLabel(info.getReimbursementType(), "reimbursement_type", null));
+        }
+        ReimbursementBusinessReturnDTO reimbursementBusinessReturnDTO = new ReimbursementBusinessReturnDTO();
+        //获取业务报销信息
+        ReimbursementDTO business = this.getBusinessById(reimbursementBusiness.getBusinessCodeId());
+        reimbursementBusinessReturnDTO.setList(list);
+        //剩余报销额度
+        reimbursementBusinessReturnDTO.setSurplusReimbursementAmount(business.getSurplusReimbursementAmount());
+        //已报销额度
+        reimbursementBusinessReturnDTO.setAlreadyReimbursementAmount(business.getAllAlreadyReimbursementQuota());
+        //总报销额度
+        reimbursementBusinessReturnDTO.setReimbursementQuota(business.getCanReimbursementAmount());
+        return reimbursementBusinessReturnDTO;
+    }
+
+}

+ 503 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/reimbursementsys/service/impl/WuHanReimbursementSysServiceImpl.java

@@ -0,0 +1,503 @@
+package com.jeeplus.test.reimbursementsys.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.google.common.collect.Lists;
+import com.jeeplus.sys.utils.StringUtils;
+import com.jeeplus.test.reimbursementsys.domain.dto.WuHanReimbursementDTO;
+import com.jeeplus.test.reimbursementsys.mapper.WuHanReimbursementSysMapper;
+import com.jeeplus.test.reimbursementsys.service.ReimbursementBusinessService;
+import com.jeeplus.test.reimbursementsys.service.WuHanReimbursementSysService;
+import com.jeeplus.test.reimbursementsys.utils.PublicUtil;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.*;
+
+/**
+ * @author li-peike
+ * @version 1.0.0
+ * @ClassName ReimbursementSysServiceImpl.java
+ * @Description TODO
+ * @createTime 2022年05月06日 10:38:00
+ */
+@Service
+public class WuHanReimbursementSysServiceImpl implements WuHanReimbursementSysService {
+
+    @Resource
+    private WuHanReimbursementSysMapper mapper;
+    @Resource
+    private ReimbursementBusinessService reimbursementBusinessService;
+
+
+    @Override
+    public WuHanReimbursementDTO queryBusinessById(String id) {
+        WuHanReimbursementDTO reimbursementDTO = mapper.queryBusinessById(id);
+        //如果没有随即类型,则将随即类型默认为非随机(即指定业务编码)
+        if(StringUtils.isBlank(reimbursementDTO.getRandomType())){
+            reimbursementDTO.setRandomType("0");
+        }
+        return reimbursementDTO;
+    }
+
+    @Override
+    public WuHanReimbursementDTO queryInvoiceById(String id) {
+        return mapper.queryInvoiceById(id);
+    }
+
+
+    @Override
+    public IPage<WuHanReimbursementDTO> treeData(Page<WuHanReimbursementDTO> page, WuHanReimbursementDTO reimbursement) {
+        IPage<WuHanReimbursementDTO> pageList = new Page();
+        //如果筛选项含有发票号码,则需先查询对应的发票信息
+        if(StringUtils.isNotBlank(reimbursement.getInvoiceNumber()) ||
+                StringUtils.isNotBlank(reimbursement.getProposer()) ||
+                StringUtils.isNotBlank(reimbursement.getPartner()) ||
+                null != reimbursement.getBeginDate() ||
+                null != reimbursement.getEndDate() ||
+                StringUtils.isNotBlank(reimbursement.getBeginIncome()) ||
+                StringUtils.isNotBlank(reimbursement.getEndIncome()) ||
+                StringUtils.isNotBlank(reimbursement.getFirmName())){
+            List<WuHanReimbursementDTO> invoiceList =  mapper.getInvoiceList(reimbursement);
+            //如果存在发票信息,则根据发票的父节点查询对应的业务信息
+            if(invoiceList.size()>0){
+                Set<String> idSet = new HashSet<String>();
+                for (WuHanReimbursementDTO  info : invoiceList) {
+                    idSet.add(info.getParentId());
+                }
+                reimbursement.setIdList(new ArrayList<>(idSet));
+                pageList = mapper.queryAllList(page,reimbursement);
+
+                List<WuHanReimbursementDTO> list =  pageList.getRecords();
+                if(list.size()>0){
+                    //将子节点信息进行分组
+                    Map<String, List<WuHanReimbursementDTO>> invoiceListMap = dataMessageDispose(invoiceList);
+                    //将分组后的子节点信息通过遍历的方式添加到父节点中的children中
+                    for (WuHanReimbursementDTO info:list) {
+                        for (String key : invoiceListMap.keySet()) {
+                            if (info.getId().equals(key)) {
+                                List<WuHanReimbursementDTO> children = invoiceListMap.get(key);
+                                info.setChildren(children);
+                            }
+                        }
+                        WuHanReimbursementDTO businessById = reimbursementBusinessService.getWuHanBusinessById(info.getId());
+                        if(null != businessById){
+                            info.setAllAlreadyReimbursementQuota(businessById.getAllAlreadyReimbursementQuota());
+                            info.setCanReimbursementAmount(businessById.getCanReimbursementAmount());
+                            info.setSurplusReimbursementAmount(businessById.getSurplusReimbursementAmount());
+                        }
+                    }
+                }
+            }else{
+                return page;
+            }
+        }else{
+            pageList = mapper.queryAllList(page,reimbursement);
+            List<WuHanReimbursementDTO> list =  pageList.getRecords();
+            if(list.size()>0){
+                //获取所有发票信息表中的数据
+                List<String> parentIdList = Lists.newArrayList();
+                for (WuHanReimbursementDTO info:list) {
+                    parentIdList.add(info.getId());
+                }
+                //根据查询的父节点信息查询对应的子节点信息
+                List<WuHanReimbursementDTO> invoiceList =  mapper.getInvoiceByParentIdList(parentIdList);
+                if(invoiceList.size()>0){
+                    //将子节点信息进行分组
+                    Map<String, List<WuHanReimbursementDTO>> invoiceListMap = dataMessageDispose(invoiceList);
+                    //将分组后的子节点信息通过遍历的方式添加到父节点中的children中
+                    for (WuHanReimbursementDTO info:list) {
+                        for (String key : invoiceListMap.keySet()) {
+                            if (info.getId().equals(key)) {
+                                List<WuHanReimbursementDTO> children = invoiceListMap.get(key);
+                                info.setChildren(children);
+                            }
+                        }
+                        WuHanReimbursementDTO businessById = reimbursementBusinessService.getWuHanBusinessById(info.getId());
+                        if(null != businessById){
+                            info.setAllAlreadyReimbursementQuota(businessById.getAllAlreadyReimbursementQuota());
+                            info.setCanReimbursementAmount(businessById.getCanReimbursementAmount());
+                            info.setSurplusReimbursementAmount(businessById.getSurplusReimbursementAmount());
+                        }
+                    }
+                }
+            }
+        }
+
+        return pageList;
+    }
+
+    /**
+     * 文件数据分组
+     * @param dataList
+     * @return
+     */
+    public Map<String, List<WuHanReimbursementDTO>> dataMessageDispose(List<WuHanReimbursementDTO> dataList) {
+        //所有有效数据均添加到list中,下边将list中的数据根据店号和收银员的id进行分割处理
+        Map<String, List<WuHanReimbursementDTO>> result = listGroup2Map(dataList);
+        return result;
+    }
+
+    private Map<String, List<WuHanReimbursementDTO>> listGroup2Map(List<WuHanReimbursementDTO> list) {
+        Map<String, List<WuHanReimbursementDTO>> userSignSerialMap = new HashMap<>();
+        if (CollectionUtils.isNotEmpty(list)) {
+            // 分组
+            for (WuHanReimbursementDTO vo : list) {
+                List<WuHanReimbursementDTO> tempList = userSignSerialMap.get(vo.getParentId());
+                /*如果取不到数据,那么直接new一个空的ArrayList**/
+                if (tempList == null) {
+                    tempList = new ArrayList<>();
+                    tempList.add(vo);
+                    userSignSerialMap.put(vo.getParentId(), tempList);
+                }
+                else {
+                    /*某个vo之前已经存放过了,则直接追加数据到原来的List里**/
+                    tempList.add(vo);
+                }
+            }
+        }
+        return userSignSerialMap;
+    }
+
+    /**
+     * 保存
+     * @param reimbursementList
+     */
+    @Override
+    public Map<String,Object> save(List<WuHanReimbursementDTO> reimbursementList) {
+        Map<String,Object> map = new HashMap<>();
+        Set<String> invoiceNumberSet = new HashSet<String>();
+        for (WuHanReimbursementDTO info : reimbursementList) {
+            if(StringUtils.isBlank(info.getBusinessCode())){
+                info.setBusinessCode("");
+            }
+            invoiceNumberSet.add(info.getInvoiceNumber());
+        }
+        //如果发票编号数量不等于总数量,则表示所传数据中存在重复的发票编号,则进行抛出
+        if(invoiceNumberSet.size() != reimbursementList.size()){
+            map.put("success", false);
+            map.put("message", "数据中存在相同的发票号,请重新验证上传");
+            return map;
+        }
+        //set转list
+        List<String> invoiceNumberList = new ArrayList<String>(invoiceNumberSet);
+        //查询发票号是否存在,若含有已存在发票号,则直接进行抛出
+        List<String> oldInvoiceNumberList = mapper.selectOldInvoiceNumber(invoiceNumberList);
+        if(oldInvoiceNumberList.size()>0){
+            String oldInvoiceNumber = String.join(",", oldInvoiceNumberList);
+            map.put("success", false);
+            map.put("message", "发票号码:" + oldInvoiceNumber + " 已存在。无法再次上传");
+            return map;
+        }
+
+        //业务编号对应的数据集合
+        List<WuHanReimbursementDTO> businessCodeInfoList = Lists.newArrayList();
+        List<WuHanReimbursementDTO> businessCodeNullList = Lists.newArrayList();
+        List<String> businessCodeList = Lists.newArrayList();
+        //循环遍历reimbursementList 整理出相同的业务编号(null或者空字符串除外),并将这些业务编号进行去重,保存到数据库
+        Map<String, List<WuHanReimbursementDTO>> businessCodeListMap = dataDisposeOnSaveByBusinessCode(reimbursementList);
+        for (String key : businessCodeListMap.keySet()) {
+            if("".equals(key)){
+                List<WuHanReimbursementDTO> infoList = businessCodeListMap.get(key);
+                businessCodeNullList.addAll(infoList);
+            }else{
+                List<WuHanReimbursementDTO> infoList = businessCodeListMap.get(key);
+                businessCodeInfoList.add(infoList.get(0));
+                businessCodeList.add(key);
+            }
+        }
+
+        //获取当前年份
+        Calendar date = Calendar.getInstance();
+        String year = String.valueOf(date.get(Calendar.YEAR));
+
+        //查询非空的业务编号数据在数据库中是否存在,若存在,返回已存在的业务编号集合
+        List<WuHanReimbursementDTO> oldBusinessCodeList = mapper.selectOldBusinessCodeByInfo(businessCodeList,year);
+        if (oldBusinessCodeList.size()>0){
+            //如果数据库已存在部分业务编号信息,则去除该部分的业务编号信息
+            for (WuHanReimbursementDTO oldBusinessCode: oldBusinessCodeList) {
+                Iterator iterator = businessCodeInfoList.iterator();
+                while (iterator.hasNext()) {
+                    WuHanReimbursementDTO data = (WuHanReimbursementDTO) iterator.next();
+                    if (oldBusinessCode.getBusinessCode().equals(data.getBusinessCode())){
+                        data.setId(oldBusinessCode.getId());
+                    }
+                }
+            }
+
+        }
+
+        //将空的业务编号 的信息添加到集合中
+        businessCodeInfoList.addAll(businessCodeNullList);
+        List<WuHanReimbursementDTO> newBusinessCodeInfoList = Lists.newArrayList();
+        newBusinessCodeInfoList.addAll(businessCodeInfoList);
+
+        //对业务编号的数据进行新增保存
+        Iterator iterator = businessCodeInfoList.iterator();
+        while (iterator.hasNext()) {
+            WuHanReimbursementDTO data = (WuHanReimbursementDTO) iterator.next();
+            if (StringUtils.isBlank(data.getId())){
+                data.preInsert();
+                data.setParentId("0");
+                data.setParentIds("0,");
+                data.setYear(year);
+                data.setRandomType("0");
+            }else{
+                iterator.remove();
+            }
+        }
+        if(businessCodeInfoList.size()>0){
+            mapper.insertBusinessCodeList(businessCodeInfoList);
+        }
+
+
+        //业务编号对应的数据集合
+        List<WuHanReimbursementDTO> invoiceInfoList = Lists.newArrayList();
+
+        for (WuHanReimbursementDTO info : newBusinessCodeInfoList) {
+            if(StringUtils.isNotBlank(info.getBusinessCode())){
+                //处理业务编号不为空的数据
+                for (String key : businessCodeListMap.keySet()) {
+                    if(info.getBusinessCode().equals(key)){
+                        List<WuHanReimbursementDTO> infoList = businessCodeListMap.get(key);
+                        for (WuHanReimbursementDTO childrenInfo : infoList) {
+                            childrenInfo.setParentId(info.getId());
+                            String parentIds = "0," + info.getId() + ",";
+                            childrenInfo.setParentIds(parentIds);
+                            //childrenInfo.preInsert();
+                            invoiceInfoList.add(childrenInfo);
+                        }
+                    }
+                }
+
+            }else{
+                //处理业务编号为空的数据
+                info.setParentId(info.getId());
+                String parentIds = "0," + info.getId() + ",";
+                info.setParentIds(parentIds);
+                //info.preInsert();
+                invoiceInfoList.add(info);
+            }
+        }
+        for (WuHanReimbursementDTO childrenInfo : invoiceInfoList) {
+            childrenInfo.preInsert();
+        }
+        //新增
+        mapper.insertInvoiceList(invoiceInfoList);
+
+        map.put("success", true);
+        map.put("message", "数据上传成功");
+        return map;
+    }
+
+    @Override
+    public void saveBusiness(WuHanReimbursementDTO reimbursement) {
+        //获取当前年份
+        Calendar date = Calendar.getInstance();
+        String year = String.valueOf(date.get(Calendar.YEAR));
+        reimbursement.setYear(year);
+
+        if("1".equals(reimbursement.getRandomType())){
+            //根据id查询业务信息是否已经是随机生成的业务编码
+            WuHanReimbursementDTO reimbursementInfo = mapper.queryBusinessById(reimbursement.getId());
+            if("1".equals(reimbursementInfo.getRandomType()) || StringUtils.isNotBlank(reimbursementInfo.getBusinessCode())){
+                return;
+            }
+
+            //根据id查询对应发票信息
+            List<String> parentIdList = Lists.newArrayList();
+            parentIdList.add(reimbursement.getId());
+            List<WuHanReimbursementDTO> invoiceByParentIdList = mapper.getInvoiceByParentIdList(parentIdList);
+            if(invoiceByParentIdList.size()>0){
+                List<WuHanReimbursementDTO> updateInvoiceData = Lists.newArrayList();
+                for (WuHanReimbursementDTO invoiceInfo: invoiceByParentIdList) {
+                    synchronized (this){
+                        //生成随机业务编号
+                        //查询最后一个业务编号信息
+                        String lastRandomBusinessCodeIndex = mapper.getLastRandomBusinessCodeIndex(year);
+                        if(StringUtils.isBlank(lastRandomBusinessCodeIndex)){
+                            lastRandomBusinessCodeIndex = "0";
+                        }
+                        Integer randomBusinessCodeIndex = Integer.parseInt(lastRandomBusinessCodeIndex) + 1;
+                        reimbursement.setRandomBusinessCodeIndex(randomBusinessCodeIndex.toString());
+                        //将新的序列号进行向左补齐4位
+                        String padLeft = PublicUtil.padLeft(randomBusinessCodeIndex.toString(), 4, '0');
+                        //生成新的随机业务编号
+                        StringBuilder sbCode = new StringBuilder().append(year).append("-whsj-").append(padLeft);
+                        reimbursement.setBusinessCode(sbCode.toString());
+                    }
+
+                    invoiceInfo.setBusinessCode(reimbursement.getBusinessCode());
+                    invoiceInfo.preUpdate();
+                    updateInvoiceData.add(invoiceInfo);
+                }
+                mapper.updateInvoiceList(updateInvoiceData);
+            }
+            reimbursement.preUpdate();
+            mapper.saveBusiness(reimbursement);
+
+        }else{
+            //查询该业务编码在数据库中是否存在
+            WuHanReimbursementDTO infoByBusinessCode = mapper.getInfoByBusinessCode(reimbursement);
+            if(null != infoByBusinessCode){
+                //如果存在该业务编码 则将该业务编码对应的发票数据的父节点变更为已存在的业务编码的id信息
+                //根据id 查询对应的发票信息
+                List<String> parentIdList = Lists.newArrayList();
+                parentIdList.add(reimbursement.getId());
+                List<WuHanReimbursementDTO> invoiceByParentIdList = mapper.getInvoiceByParentIdList(parentIdList);
+                if(invoiceByParentIdList.size()>0){
+                    List<WuHanReimbursementDTO> updateInvoiceData = Lists.newArrayList();
+                    for (WuHanReimbursementDTO invoiceInfo: invoiceByParentIdList) {
+                        invoiceInfo.setBusinessCode(infoByBusinessCode.getBusinessCode());
+                        invoiceInfo.setParentId(infoByBusinessCode.getId());
+                        invoiceInfo.setParentIds("0," + infoByBusinessCode.getId() + ",");
+                        invoiceInfo.preUpdate();
+                        updateInvoiceData.add(invoiceInfo);
+                    }
+                    mapper.updateInvoiceList(updateInvoiceData);
+                }
+                //删除该业务编码信息
+                mapper.deleteBusinessById(reimbursement.getId());
+            }else{
+                //根据id查询对应发票信息
+                List<String> parentIdList = Lists.newArrayList();
+                parentIdList.add(reimbursement.getId());
+                List<WuHanReimbursementDTO> invoiceByParentIdList = mapper.getInvoiceByParentIdList(parentIdList);
+                if(invoiceByParentIdList.size()>0){
+                    List<WuHanReimbursementDTO> updateInvoiceData = Lists.newArrayList();
+                    for (WuHanReimbursementDTO invoiceInfo: invoiceByParentIdList) {
+                        invoiceInfo.setBusinessCode(reimbursement.getBusinessCode());
+                        invoiceInfo.preUpdate();
+                        updateInvoiceData.add(invoiceInfo);
+                    }
+                    mapper.updateInvoiceList(updateInvoiceData);
+                }
+                reimbursement.preUpdate();
+                mapper.saveBusiness(reimbursement);
+            }
+        }
+
+    }
+    @Override
+    public Map<String,Object> saveGatheringTime(WuHanReimbursementDTO reimbursement) {
+        Map<String,Object> map = new HashMap<String,Object>();
+        String[] idArray =reimbursement.getId().split(",");
+        ArrayList<String> idList = Lists.newArrayList(idArray);
+        //根据id查询发票是否已经填写过收款时间信息
+        List<WuHanReimbursementDTO> invoiceList =  mapper.getGatheringTimeInvoiceList(idList);
+        if(invoiceList.size()>0){
+            List<String> invoiceNumber = Lists.newArrayList();
+            for (WuHanReimbursementDTO invoice : invoiceList) {
+                invoiceNumber.add(invoice.getInvoiceNumber());
+            }
+            String invoiceNumberStr = StringUtils.join(invoiceNumber, ",");
+            map.put("message","发票号:" + invoiceNumberStr + " 已经填写过收款日期,无法重复填写。<br/> 本次收款操作失败");
+            map.put("success",false);
+            return map;
+        }
+        //修改发票收款时间
+        reimbursement.preUpdate();
+        mapper.updateGatheringTime(idList,reimbursement);
+
+        for (String id : idList) {
+            reimbursement.setBusinessCode(id);
+
+            //根据该条发票信息查询同业务编号下的没有收款的发票信息
+            List<WuHanReimbursementDTO> notGatheringTimeInvoice = mapper.getNotGatheringTimeInvoice(reimbursement);
+            if(notGatheringTimeInvoice.size() == 0){
+                //查询该发票信息
+                WuHanReimbursementDTO reimbursementDTO = mapper.queryInvoiceById(id);
+                //如果所有的发票均已收款,则将业务信息添加全部收款状态
+                if(null != reimbursementDTO){
+                    mapper.updateGatheringStatusById(reimbursementDTO.getParentId());
+                }
+            }
+        }
+
+
+        map.put("success",true);
+        map.put("message","收款成功");
+        return map;
+    }
+
+    @Override
+    public void saveInvoice(WuHanReimbursementDTO reimbursement) {
+        reimbursement.preUpdate();
+        mapper.saveInvoice(reimbursement);
+        //根据该条发票信息查询同业务编号下的没有收款的发票信息
+        List<WuHanReimbursementDTO> notGatheringTimeInvoice = mapper.getNotGatheringTimeInvoice(reimbursement);
+        if(notGatheringTimeInvoice.size() == 0){
+            //查询该发票信息
+            WuHanReimbursementDTO reimbursementDTO = mapper.queryInvoiceById(reimbursement.getId());
+            //如果所有的发票均已收款,则将业务信息添加全部收款状态
+            mapper.updateGatheringStatusById(reimbursementDTO.getParentId());
+        }
+    }
+
+    @Override
+    public void modifyInvoice(WuHanReimbursementDTO reimbursement) {
+        reimbursement.preUpdate();
+        mapper.modifyInvoice(reimbursement);
+    }
+
+    @Override
+    public void removeByIds(List<String> idList) {
+        //删除业务信息
+        mapper.removeBusinessByIds(idList);
+        //删除发票信息
+        mapper.removeInvoiceByIds(idList);
+    }
+
+    @Override
+    public void removeBusinessByIds(List<String> idList) {
+        //删除业务信息
+        mapper.removeBusinessByIds(idList);
+        //删除发票信息
+        mapper.removeBusinessByParentIds(idList);
+
+    }
+
+    @Override
+    public void removeInvoiceByIds(List<String> idList) {
+        //删除发票信息
+        mapper.removeInvoiceByIds(idList);
+    }
+
+    @Override
+    public void updateReimbursementRatio(WuHanReimbursementDTO reimbursement) {
+        mapper.updateReimbursementRatio(reimbursement);
+    }
+
+    /**
+     * 文件数据分组
+     * @param dataList
+     * @return
+     */
+    public Map<String, List<WuHanReimbursementDTO>> dataDisposeOnSaveByBusinessCode(List<WuHanReimbursementDTO> dataList) {
+        Map<String, List<WuHanReimbursementDTO>> result = listMapOnSaveByBusinessCode(dataList);
+        return result;
+    }
+
+    private Map<String, List<WuHanReimbursementDTO>> listMapOnSaveByBusinessCode(List<WuHanReimbursementDTO> list) {
+        Map<String, List<WuHanReimbursementDTO>> userSignSerialMap = new HashMap<>();
+        if (CollectionUtils.isNotEmpty(list)) {
+            // 分组
+            for (WuHanReimbursementDTO vo : list) {
+                List<WuHanReimbursementDTO> tempList = userSignSerialMap.get(vo.getBusinessCode());
+                /*如果取不到数据,那么直接new一个空的ArrayList**/
+                if (tempList == null) {
+                    tempList = new ArrayList<>();
+                    tempList.add(vo);
+                    userSignSerialMap.put(vo.getBusinessCode(), tempList);
+                }
+                else {
+                    /*某个vo之前已经存放过了,则直接追加数据到原来的List里**/
+                    tempList.add(vo);
+                }
+            }
+        }
+        return userSignSerialMap;
+    }
+
+}