浏览代码

管控相关

liuyc 2 年之前
父节点
当前提交
6d592a450b

+ 35 - 21
blade-service/blade-control/src/main/java/org/springblade/control/controller/ExpenseManagerController.java

@@ -67,9 +67,9 @@ public class ExpenseManagerController extends BladeController {
 
     @PostMapping("/financial/remove")
     @ApiOperationSupport(order = 5)
-    @ApiOperation(value = "财务报销记录物理删除", notes = "传入财务报销信息id")
-    public R<Object> financialRemove(@RequestParam Long id) {
-        return R.status(financialReimbursementService.financialRemove(id));
+    @ApiOperation(value = "财务报销记录物理删除", notes = "传入groupId")
+    public R<Object> financialRemove(@RequestParam Long groupId) {
+        return R.status(financialReimbursementService.financialRemove(groupId));
     }
 
     @PostMapping("/financial/cancel")
@@ -137,7 +137,7 @@ public class ExpenseManagerController extends BladeController {
 
     @GetMapping("/loan/detail")
     @ApiOperationSupport(order = 15)
-    @ApiOperation(value = "借款申请信息详情", notes = "传入支付申请信息id")
+    @ApiOperation(value = "借款申请信息详情", notes = "传入借款申请信息id")
     public R<EMLoanInfoVO> loanDetail(@RequestParam Long id) {
         return R.data(loanService.loanDetail(id));
     }
@@ -151,14 +151,14 @@ public class ExpenseManagerController extends BladeController {
 
     @PostMapping("/loan/remove")
     @ApiOperationSupport(order = 17)
-    @ApiOperation(value = "借款申请记录物理删除", notes = "传入支付申请信息id")
+    @ApiOperation(value = "借款申请记录物理删除", notes = "传入借款申请信息id")
     public R<Object> loanRemove(@RequestParam Long id) {
         return R.status(loanService.loanRemove(id));
     }
 
     @PostMapping("/loan/cancel")
     @ApiOperationSupport(order = 18)
-    @ApiOperation(value = "借款申请记录上报撤销", notes = "传入支付申请信息id")
+    @ApiOperation(value = "借款申请记录上报撤销", notes = "传入借款申请信息id")
     public R<Object> loanCancel(@RequestParam Long id) {
         return R.status(loanService.loanCancel(id));
     }
@@ -173,17 +173,24 @@ public class ExpenseManagerController extends BladeController {
     @GetMapping("/purchase/draft/list")
     @ApiOperationSupport(order = 20)
     @ApiOperation(value = "采购申请草稿箱列表")
-    public R<List<EMDraftVO>> purchaseDraftList() {
+    public R<List<EMDraftGroupVO>> purchaseDraftList() {
         return R.data(purchaseService.purchaseDraftList());
     }
 
     @GetMapping("/purchase/detail")
     @ApiOperationSupport(order = 21)
-    @ApiOperation(value = "采购申请信息详情", notes = "传入支付申请信息id")
+    @ApiOperation(value = "采购申请信息详情", notes = "传入采购申请信息id")
     public R<EMPurchaseInfoVO> purchaseDetail(@RequestParam Long id) {
         return R.data(purchaseService.purchaseDetail(id));
     }
 
+    @GetMapping("/purchase/draft/detail")
+    @ApiOperationSupport(order = 21)
+    @ApiOperation(value = "采购申请草稿箱编辑详情", notes = "传入当前草稿的eMDraftIds")
+    public R<List<EMPurchaseInfoVO>> purchaseDraftDetail(@RequestParam String eMDraftIds) {
+        return R.data(purchaseService.purchaseDraftDetail(eMDraftIds));
+    }
+
     @PostMapping("/purchase/submit")
     @ApiOperationSupport(order = 22)
     @ApiOperation(value = "采购申请提交", notes = "传入List<EMPurchaseInfoDTO>集合")
@@ -193,14 +200,14 @@ public class ExpenseManagerController extends BladeController {
 
     @PostMapping("/purchase/remove")
     @ApiOperationSupport(order = 23)
-    @ApiOperation(value = "采购申请记录物理删除", notes = "传入支付申请信息id")
-    public R<Object> purchaseRemove(@RequestParam Long id) {
-        return R.status(purchaseService.purchaseRemove(id));
+    @ApiOperation(value = "采购申请记录物理删除", notes = "传入groupId")
+    public R<Object> purchaseRemove(@RequestParam Long groupId) {
+        return R.status(purchaseService.purchaseRemove(groupId));
     }
 
     @PostMapping("/purchase/cancel")
     @ApiOperationSupport(order = 24)
-    @ApiOperation(value = "采购申请记录上报撤销", notes = "传入支付申请信息id")
+    @ApiOperation(value = "采购申请记录上报撤销", notes = "传入采购申请信息id")
     public R<Object> purchaseCancel(@RequestParam Long id) {
         return R.status(purchaseService.purchaseCancel(id));
     }
@@ -215,34 +222,41 @@ public class ExpenseManagerController extends BladeController {
     @GetMapping("/car/draft/list")
     @ApiOperationSupport(order = 26)
     @ApiOperation(value = "用车申请草稿箱列表")
-    public R<List<EMDraftVO>> carDraftList() {
+    public R<List<EMDraftGroupVO>> carDraftList() {
         return R.data(useCarService.carDraftList());
     }
 
     @GetMapping("/car/detail")
     @ApiOperationSupport(order = 27)
-    @ApiOperation(value = "用车申请信息详情", notes = "传入支付申请信息id")
+    @ApiOperation(value = "用车申请信息详情", notes = "传入用车申请信息id")
     public R<EMUseCarInfoVO> carDetail(@RequestParam Long id) {
         return R.data(useCarService.carDetail(id));
     }
 
+    @GetMapping("/car/draft/detail")
+    @ApiOperationSupport(order = 27)
+    @ApiOperation(value = "用车申请草稿箱编辑详情", notes = "传入当前草稿的eMDraftIds")
+    public R<List<EMUseCarInfoVO>> carDraftDetail(@RequestParam String eMDraftIds) {
+        return R.data(useCarService.carDraftDetail(eMDraftIds));
+    }
+
     @PostMapping("/car/submit")
     @ApiOperationSupport(order = 28)
-    @ApiOperation(value = "用车申请提交", notes = "传入EMUseCarInfoDTO")
-    public R<Object> carSubmit(@RequestBody EMUseCarInfoDTO dto) {
-        return R.status(useCarService.carSubmit(dto));
+    @ApiOperation(value = "用车申请提交", notes = "传入List<EMUseCarInfoDTO>集合")
+    public R<Object> carSubmit(@RequestBody List<EMUseCarInfoDTO> dtoList) {
+        return R.status(useCarService.carSubmit(dtoList));
     }
 
     @PostMapping("/car/remove")
     @ApiOperationSupport(order = 29)
-    @ApiOperation(value = "用车申请记录物理删除", notes = "传入支付申请信息id")
-    public R<Object> carRemove(@RequestParam Long id) {
-        return R.status(useCarService.carRemove(id));
+    @ApiOperation(value = "用车申请记录物理删除", notes = "传入groupId")
+    public R<Object> carRemove(@RequestParam Long groupId) {
+        return R.status(useCarService.carRemove(groupId));
     }
 
     @PostMapping("/car/cancel")
     @ApiOperationSupport(order = 30)
-    @ApiOperation(value = "用车申请记录上报撤销", notes = "传入支付申请信息id")
+    @ApiOperation(value = "用车申请记录上报撤销", notes = "传入用车申请信息id")
     public R<Object> carCancel(@RequestParam Long id) {
         return R.status(useCarService.carCancel(id));
     }

+ 1 - 1
blade-service/blade-control/src/main/java/org/springblade/control/service/EMFinancialReimbursementService.java

@@ -21,7 +21,7 @@ public interface EMFinancialReimbursementService extends BaseService<EMFinancial
 
     boolean financialSubmit(List<EMFinancialReimbursementInfoDTO> dtoList);
 
-    boolean financialRemove(Long id);
+    boolean financialRemove(Long groupId);
 
     boolean financialCancel(Long id);
 

+ 5 - 2
blade-service/blade-control/src/main/java/org/springblade/control/service/EMPurchaseService.java

@@ -3,6 +3,7 @@ package org.springblade.control.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.control.dto.EMPurchaseInfoDTO;
 import org.springblade.control.entity.EMPurchaseInfo;
+import org.springblade.control.vo.EMDraftGroupVO;
 import org.springblade.control.vo.EMDraftVO;
 import org.springblade.control.vo.EMPurchaseInfoVO;
 import org.springblade.core.mp.base.BaseService;
@@ -13,14 +14,16 @@ public interface EMPurchaseService extends BaseService<EMPurchaseInfo> {
 
     IPage<EMPurchaseInfoVO> purchasePage(IPage<EMPurchaseInfo> page, EMPurchaseInfoDTO dto);
 
-    List<EMDraftVO> purchaseDraftList();
+    List<EMDraftGroupVO> purchaseDraftList();
 
     EMPurchaseInfoVO purchaseDetail(Long id);
 
     boolean purchaseSubmit(List<EMPurchaseInfoDTO> dtoList);
 
-    boolean purchaseRemove(Long id);
+    boolean purchaseRemove(Long groupId);
 
     boolean purchaseCancel(Long id);
 
+    List<EMPurchaseInfoVO> purchaseDraftDetail(String eMDraftIds);
+
 }

+ 6 - 3
blade-service/blade-control/src/main/java/org/springblade/control/service/EMUseCarService.java

@@ -3,6 +3,7 @@ package org.springblade.control.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.control.dto.EMUseCarInfoDTO;
 import org.springblade.control.entity.EMUseCarInfo;
+import org.springblade.control.vo.EMDraftGroupVO;
 import org.springblade.control.vo.EMDraftVO;
 import org.springblade.control.vo.EMUseCarInfoVO;
 import org.springblade.core.mp.base.BaseService;
@@ -13,14 +14,16 @@ public interface EMUseCarService extends BaseService<EMUseCarInfo> {
 
     IPage<EMUseCarInfoVO> carPage(IPage<EMUseCarInfo> page, EMUseCarInfoDTO dto);
 
-    List<EMDraftVO> carDraftList();
+    List<EMDraftGroupVO> carDraftList();
 
     EMUseCarInfoVO carDetail(Long id);
 
-    boolean carSubmit(EMUseCarInfoDTO dto);
+    boolean carSubmit(List<EMUseCarInfoDTO> dtoList);
 
-    boolean carRemove(Long id);
+    boolean carRemove(Long groupId);
 
     boolean carCancel(Long id);
 
+    List<EMUseCarInfoVO> carDraftDetail(String eMDraftIds);
+
 }

+ 2 - 2
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/AttendanceTripServiceImpl.java

@@ -66,13 +66,13 @@ public class AttendanceTripServiceImpl extends BaseServiceImpl<AttendanceTripMap
 
     @Override
     public List<EMDraftVO> tripDraftList() {
-        if (ObjectUtil.isEmpty(SecureUtil.getUserId())) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
             throw new ServiceException("获取当前用户信息失败,请联系管理员");
         }
         LambdaQueryWrapper<AttendanceTripInfo> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(AttendanceTripInfo::getCreateUser, SecureUtil.getUserId()); //获取当前用户草稿信息
         //获取当前时间
-        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime now = LocalDateTime.now().plusDays(1);
         //计算三个月前的时间
         LocalDateTime threeMonthsAgo = now.minusMonths(3);
         queryWrapper.between(AttendanceTripInfo::getCreateTime, threeMonthsAgo, now);

+ 28 - 18
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMFinancialReimbursementServiceImpl.java

@@ -79,13 +79,13 @@ public class EMFinancialReimbursementServiceImpl extends BaseServiceImpl<ExMFina
 
     @Override
     public List<EMDraftGroupVO> financialDraftList() {
-        if (ObjectUtil.isEmpty(SecureUtil.getUserId())) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
             throw new ServiceException("获取当前用户信息失败,请联系管理员");
         }
         LambdaQueryWrapper<EMFinancialReimbursementInfo> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(EMFinancialReimbursementInfo::getCreateUser, SecureUtil.getUserId()); //获取当前用户草稿信息
         //获取当前时间
-        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime now = LocalDateTime.now().plusDays(1);
         //计算三个月前的时间
         LocalDateTime threeMonthsAgo = now.minusMonths(3);
         queryWrapper.between(EMFinancialReimbursementInfo::getCreateTime, threeMonthsAgo, now);
@@ -96,7 +96,7 @@ public class EMFinancialReimbursementServiceImpl extends BaseServiceImpl<ExMFina
         List<String> dataIds = list.stream().map(EMFinancialReimbursementInfo::getId).map(String::valueOf).collect(Collectors.toList());
         List<EMDraftGroupVO> resultList = new LinkedList<>();
         if (dataIds.size() > 0) {
-            List<ExDraftRecord> query = jdbcTemplate.query("select * from c_ex_draft_record where data_id in(" + StringUtils.join(dataIds, ",") + ")", new BeanPropertyRowMapper<>(ExDraftRecord.class));
+            List<ExDraftRecord> query = jdbcTemplate.query("select * from c_ex_draft_record where data_type = 1 and data_id in(" + StringUtils.join(dataIds, ",") + ")", new BeanPropertyRowMapper<>(ExDraftRecord.class));
             Map<Long, List<ExDraftRecord>> groupMaps = query.stream().collect(Collectors.groupingBy(ExDraftRecord::getGroupId));
             for (Map.Entry<Long, List<ExDraftRecord>> listEntry : groupMaps.entrySet()) {
                 Long groupId = listEntry.getKey();
@@ -147,13 +147,16 @@ public class EMFinancialReimbursementServiceImpl extends BaseServiceImpl<ExMFina
                 dto.setIsTemp(0); //暂存
                 dto.setStatus(0); //未上报
                 if (var) {
-                    //绑定关系
-                    jdbcTemplate.execute("insert into c_ex_draft_record(id,group_id,data_id,data_type) values(" + SnowFlakeUtil.getId() + "," + draftGroupId + "," + dto.getId() + ",1)");
                     this.save(dto);
                 } else {
                     this.saveOrUpdate(dto);
                 }
-                return true;
+
+                Long aLong = jdbcTemplate.queryForObject("select count(1) from c_ex_draft_record where data_type = 1 and data_id = " + dto.getId(), Long.class);
+                if (aLong == null || aLong == 0L) {
+                    //绑定关系
+                    jdbcTemplate.execute("insert into c_ex_draft_record(id,group_id,data_id,data_type) values(" + SnowFlakeUtil.getId() + "," + draftGroupId + "," + dto.getId() + ",1)");
+                }
 
             } else if (("2").equals(dto.getSubmitStatus())) { //提交审批
                 if (ObjectUtil.isNotEmpty(dto.getId())) {
@@ -216,24 +219,28 @@ public class EMFinancialReimbursementServiceImpl extends BaseServiceImpl<ExMFina
                     jdbcTemplate.execute("delete from c_expense_task_record where task_id = " + taskProcessInfo.getId() + " and expense_info_id = " + dto.getId() + " ; insert into c_expense_task_record(id,task_id,expense_info_id,expense_info_type) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + dto.getId() + ",2)");
 
                     //关联项目预算budgetPlanIds目前只做存储,在审批完成后闭环时再进行计算推送
-                    return true;
 
                 } else {
                     throw new ServiceException("获取当前审批流程人员信息失败,请联系管理员");
                 }
             }
         }
-        return false;
+        return true;
     }
 
     @Override
-    public boolean financialRemove(Long id) {
-        EMFinancialReimbursementInfo emFinancialReimbursementInfo = baseMapper.selectById(id);
-        if (emFinancialReimbursementInfo.getIsTemp().equals(0)) {
-            return this.removeById(id);
-        } else {
-            throw new ServiceException("当前记录信息不是草稿数据,无法删除");
+    public boolean financialRemove(Long groupId) {
+        List<ExDraftRecord> query = jdbcTemplate.query("select * from c_ex_draft_record where group_id = " + groupId, new BeanPropertyRowMapper<>(ExDraftRecord.class));
+        if (query.size() > 0) {
+            List<String> ids = query.stream().map(ExDraftRecord::getDataId).map(String::valueOf).collect(Collectors.toList());
+            if (ids.size() > 0) {
+                jdbcTemplate.execute("delete from c_ex_draft_record where group_id = " + groupId);
+                jdbcTemplate.execute("delete from c_expense_financial_reimbursement_info where id in(" + StringUtils.join(ids, ",") + ")");
+                return true;
+            }
+            return false;
         }
+        return false;
     }
 
     @Override
@@ -280,10 +287,13 @@ public class EMFinancialReimbursementServiceImpl extends BaseServiceImpl<ExMFina
             numberSet.add(Integer.parseInt(number));
         }
 
-        int maxValue = Integer.MIN_VALUE;
-        for (int value : numberSet) {
-            if (value > maxValue) {
-                maxValue = value;
+        int maxValue = 0;
+        if (numberSet.size() > 0) {
+            maxValue = Integer.MIN_VALUE;
+            for (int value : numberSet) {
+                if (value > maxValue) {
+                    maxValue = value;
+                }
             }
         }
         return "BX-" + BuildSerialUtils.buildSerial(maxValue + 1, 4);

+ 9 - 7
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMInvoiceServiceImpl.java

@@ -75,13 +75,13 @@ public class EMInvoiceServiceImpl extends BaseServiceImpl<ExMInvoiceMapper, EMIn
 
     @Override
     public List<EMDraftVO> invoiceDraftList() {
-        if (ObjectUtil.isEmpty(SecureUtil.getUserId())) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
             throw new ServiceException("获取当前用户信息失败,请联系管理员");
         }
         LambdaQueryWrapper<EMInvoiceInfo> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(EMInvoiceInfo::getCreateUser, SecureUtil.getUserId()); //获取当前用户草稿信息
         //获取当前时间
-        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime now = LocalDateTime.now().plusDays(1);
         //计算三个月前的时间
         LocalDateTime threeMonthsAgo = now.minusMonths(3);
         queryWrapper.between(EMInvoiceInfo::getCreateTime, threeMonthsAgo, now);
@@ -274,11 +274,13 @@ public class EMInvoiceServiceImpl extends BaseServiceImpl<ExMInvoiceMapper, EMIn
             String number = obj.getInvoiceNumber().split("-")[1];
             numberSet.add(Integer.parseInt(number));
         }
-
-        int maxValue = Integer.MIN_VALUE;
-        for (int value : numberSet) {
-            if (value > maxValue) {
-                maxValue = value;
+        int maxValue = 0;
+        if (numberSet.size() > 0) {
+            maxValue = Integer.MIN_VALUE;
+            for (int value : numberSet) {
+                if (value > maxValue) {
+                    maxValue = value;
+                }
             }
         }
         return "FP-" + BuildSerialUtils.buildSerial((maxValue + 1), 4);

+ 9 - 6
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMLoanServiceImpl.java

@@ -63,13 +63,13 @@ public class EMLoanServiceImpl extends BaseServiceImpl<ExMLoanMapper, EMLoanInfo
 
     @Override
     public List<EMDraftVO> loanDraftList() {
-        if (ObjectUtil.isEmpty(SecureUtil.getUserId())) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
             throw new ServiceException("获取当前用户信息失败,请联系管理员");
         }
         LambdaQueryWrapper<EMLoanInfo> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(EMLoanInfo::getCreateUser, SecureUtil.getUserId()); //获取当前用户草稿信息
         //获取当前时间
-        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime now = LocalDateTime.now().plusDays(1);
         //计算三个月前的时间
         LocalDateTime threeMonthsAgo = now.minusMonths(3);
         queryWrapper.between(EMLoanInfo::getCreateTime, threeMonthsAgo, now);
@@ -246,10 +246,13 @@ public class EMLoanServiceImpl extends BaseServiceImpl<ExMLoanMapper, EMLoanInfo
             numberSet.add(Integer.parseInt(number));
         }
 
-        int maxValue = Integer.MIN_VALUE;
-        for (int value : numberSet) {
-            if (value > maxValue) {
-                maxValue = value;
+        int maxValue = 0;
+        if (numberSet.size() > 0) {
+            maxValue = Integer.MIN_VALUE;
+            for (int value : numberSet) {
+                if (value > maxValue) {
+                    maxValue = value;
+                }
             }
         }
         return "JK-" + BuildSerialUtils.buildSerial((maxValue + 1), 4);

+ 2 - 2
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMOutsourcingPayServiceImpl.java

@@ -75,13 +75,13 @@ public class EMOutsourcingPayServiceImpl extends BaseServiceImpl<ExMOutsourcingP
 
     @Override
     public List<EMDraftVO> outsourcingDraftList() {
-        if (ObjectUtil.isEmpty(SecureUtil.getUserId())) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
             throw new ServiceException("获取当前用户信息失败,请联系管理员");
         }
         LambdaQueryWrapper<EMOutsourcingPayInfo> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(EMOutsourcingPayInfo::getCreateUser, SecureUtil.getUserId()); //获取当前用户草稿信息
         //获取当前时间
-        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime now = LocalDateTime.now().plusDays(1);
         //计算三个月前的时间
         LocalDateTime threeMonthsAgo = now.minusMonths(3);
         queryWrapper.between(EMOutsourcingPayInfo::getCreateTime, threeMonthsAgo, now);

+ 2 - 2
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMPayServiceImpl.java

@@ -57,13 +57,13 @@ public class EMPayServiceImpl extends BaseServiceImpl<ExMPayMapper, EMPayInfo> i
 
     @Override
     public List<EMDraftVO> payDraftList() {
-        if (ObjectUtil.isEmpty(SecureUtil.getUserId())) {
+        if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
             throw new ServiceException("获取当前用户信息失败,请联系管理员");
         }
         LambdaQueryWrapper<EMPayInfo> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(EMPayInfo::getCreateUser, SecureUtil.getUserId()); //获取当前用户草稿信息
         //获取当前时间
-        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime now = LocalDateTime.now().plusDays(1);
         //计算三个月前的时间
         LocalDateTime threeMonthsAgo = now.minusMonths(3);
         queryWrapper.between(EMPayInfo::getCreateTime, threeMonthsAgo, now);

+ 52 - 23
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMPurchaseServiceImpl.java

@@ -11,13 +11,16 @@ import org.springblade.control.dto.EMPurchaseInfoDTO;
 import org.springblade.control.entity.*;
 import org.springblade.control.mapper.ExMPurchaseMapper;
 import org.springblade.control.service.EMPurchaseService;
+import org.springblade.control.vo.EMDraftGroupVO;
 import org.springblade.control.vo.EMDraftVO;
+import org.springblade.control.vo.EMFinancialReimbursementInfoVO;
 import org.springblade.control.vo.EMPurchaseInfoVO;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
@@ -62,31 +65,41 @@ public class EMPurchaseServiceImpl extends BaseServiceImpl<ExMPurchaseMapper, EM
     }
 
     @Override
-    public List<EMDraftVO> purchaseDraftList() {
-        if (ObjectUtil.isEmpty(SecureUtil.getUserId())) {
+    public List<EMDraftGroupVO> purchaseDraftList() {
+        if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
             throw new ServiceException("获取当前用户信息失败,请联系管理员");
         }
         LambdaQueryWrapper<EMPurchaseInfo> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(EMPurchaseInfo::getCreateUser, SecureUtil.getUserId()); //获取当前用户草稿信息
         //获取当前时间
-        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime now = LocalDateTime.now().plusDays(1);
         //计算三个月前的时间
         LocalDateTime threeMonthsAgo = now.minusMonths(3);
         queryWrapper.between(EMPurchaseInfo::getCreateTime, threeMonthsAgo, now);
         queryWrapper.eq(EMPurchaseInfo::getIsTemp, 0); //暂存
         List<EMPurchaseInfo> list = baseMapper.selectList(queryWrapper);
         Map<Long, List<User>> userMaps = iUserClient.selectUserAll().stream().collect(Collectors.groupingBy(User::getId));
-        List<EMDraftVO> resultVOS = new ArrayList<>();
-        for (EMPurchaseInfo obj : list) {
-            EMDraftVO vo = new EMDraftVO();
-            vo.setId(obj.getId());
-            userMaps.get(obj.getCreateUser()).stream().findAny().ifPresent(user -> vo.setTitle((ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getRealName())) ? user.getRealName() + "提交的采购申请" : ""));
-            vo.setUpdateTime(obj.getUpdateTime());
-            resultVOS.add(vo);
+
+        List<String> dataIds = list.stream().map(EMPurchaseInfo::getId).map(String::valueOf).collect(Collectors.toList());
+        List<EMDraftGroupVO> resultList = new LinkedList<>();
+        if (dataIds.size() > 0) {
+            List<ExDraftRecord> query = jdbcTemplate.query("select * from c_ex_draft_record where data_type = 5 and data_id in(" + StringUtils.join(dataIds, ",") + ")", new BeanPropertyRowMapper<>(ExDraftRecord.class));
+            Map<Long, List<ExDraftRecord>> groupMaps = query.stream().collect(Collectors.groupingBy(ExDraftRecord::getGroupId));
+            for (Map.Entry<Long, List<ExDraftRecord>> listEntry : groupMaps.entrySet()) {
+                Long groupId = listEntry.getKey();
+                List<Long> ids = listEntry.getValue().stream().map(ExDraftRecord::getDataId).collect(Collectors.toList());
+                EMPurchaseInfo obj = baseMapper.selectById(ids.get(0));
+                EMDraftGroupVO vo = new EMDraftGroupVO();
+                if (obj != null) {
+                    userMaps.get(obj.getCreateUser()).stream().findAny().ifPresent(user -> vo.setTitle((ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getRealName())) ? user.getRealName() + "提交的日常报销" : ""));
+                    vo.setUpdateTime(obj.getUpdateTime());
+                }
+                vo.setGroupId(groupId);
+                vo.setEMDraftIds(StringUtils.join(ids, ","));
+                resultList.add(vo);
+            }
         }
-        return resultVOS.stream()
-                .sorted(Comparator.comparing(EMDraftVO::getUpdateTime).reversed())
-                .collect(Collectors.toList());
+        return resultList;
     }
 
     @Override
@@ -102,6 +115,7 @@ public class EMPurchaseServiceImpl extends BaseServiceImpl<ExMPurchaseMapper, EM
         if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
             throw new ServiceException("获取当前用户信息失败,请联系管理员");
         }
+        Long draftGroupId = SnowFlakeUtil.getId(); //草稿draftGroupId
         for (EMPurchaseInfoDTO dto : dtoList) {
             boolean var = false;
             dto.setCreateUser(SecureUtil.getUserId());
@@ -122,7 +136,12 @@ public class EMPurchaseServiceImpl extends BaseServiceImpl<ExMPurchaseMapper, EM
                 } else {
                     this.saveOrUpdate(dto);
                 }
-                return true;
+
+                Long aLong = jdbcTemplate.queryForObject("select count(1) from c_ex_draft_record where data_type = 5 and data_id = " + dto.getId(), Long.class);
+                if (aLong == null || aLong == 0L) {
+                    //绑定关系
+                    jdbcTemplate.execute("insert into c_ex_draft_record(id,group_id,data_id,data_type) values(" + SnowFlakeUtil.getId() + "," + draftGroupId + "," + dto.getId() + ",5)");
+                }
 
             } else if (("2").equals(dto.getSubmitStatus())) { //提交审批
                 if (ObjectUtil.isNotEmpty(dto.getId())) {
@@ -179,24 +198,27 @@ public class EMPurchaseServiceImpl extends BaseServiceImpl<ExMPurchaseMapper, EM
                     //新增审批任务关联信息
                     jdbcTemplate.execute("delete from c_expense_task_record where task_id = " + taskProcessInfo.getId() + " and expense_info_id = " + dto.getId() + " ; insert into c_expense_task_record(id,task_id,expense_info_id,expense_info_type) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + dto.getId() + ",5)");
 
-                    return true;
-
                 } else {
                     throw new ServiceException("获取当前审批流程人员信息失败,请联系管理员");
                 }
             }
         }
-        return false;
+        return true;
     }
 
     @Override
-    public boolean purchaseRemove(Long id) {
-        EMPurchaseInfo emPurchaseInfo = baseMapper.selectById(id);
-        if (emPurchaseInfo.getIsTemp().equals(0)) {
-            return this.removeById(id);
-        } else {
-            throw new ServiceException("当前记录信息不是草稿数据,无法删除");
+    public boolean purchaseRemove(Long groupId) {
+        List<ExDraftRecord> query = jdbcTemplate.query("select * from c_ex_draft_record where group_id = " + groupId, new BeanPropertyRowMapper<>(ExDraftRecord.class));
+        if (query.size() > 0) {
+            List<String> ids = query.stream().map(ExDraftRecord::getDataId).map(String::valueOf).collect(Collectors.toList());
+            if (ids.size() > 0) {
+                jdbcTemplate.execute("delete from c_ex_draft_record where group_id = " + groupId);
+                jdbcTemplate.execute("delete from c_expense_purchase_info where id in(" + StringUtils.join(ids, ",") + ")");
+                return true;
+            }
+            return false;
         }
+        return false;
     }
 
     @Override
@@ -222,4 +244,11 @@ public class EMPurchaseServiceImpl extends BaseServiceImpl<ExMPurchaseMapper, EM
         }
         return false;
     }
+
+    @Override
+    public List<EMPurchaseInfoVO> purchaseDraftDetail(String eMDraftIds) {
+        List<EMPurchaseInfo> emPurchaseInfos = baseMapper.selectBatchIds(Func.toStrList(eMDraftIds));
+        List<EMPurchaseInfoVO> vos = BeanUtil.copyProperties(emPurchaseInfos, EMPurchaseInfoVO.class);
+        return vos;
+    }
 }

+ 117 - 86
blade-service/blade-control/src/main/java/org/springblade/control/service/impl/EMUseCarServiceImpl.java

@@ -11,13 +11,16 @@ import org.springblade.control.dto.EMUseCarInfoDTO;
 import org.springblade.control.entity.*;
 import org.springblade.control.mapper.ExMUseCarMapper;
 import org.springblade.control.service.EMUseCarService;
+import org.springblade.control.vo.EMDraftGroupVO;
 import org.springblade.control.vo.EMDraftVO;
+import org.springblade.control.vo.EMPurchaseInfoVO;
 import org.springblade.control.vo.EMUseCarInfoVO;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
@@ -57,31 +60,41 @@ public class EMUseCarServiceImpl extends BaseServiceImpl<ExMUseCarMapper, EMUseC
     }
 
     @Override
-    public List<EMDraftVO> carDraftList() {
-        if (ObjectUtil.isEmpty(SecureUtil.getUserId())) {
+    public List<EMDraftGroupVO> carDraftList() {
+        if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
             throw new ServiceException("获取当前用户信息失败,请联系管理员");
         }
         LambdaQueryWrapper<EMUseCarInfo> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(EMUseCarInfo::getCreateUser, SecureUtil.getUserId()); //获取当前用户草稿信息
         //获取当前时间
-        LocalDateTime now = LocalDateTime.now();
+        LocalDateTime now = LocalDateTime.now().plusDays(1);
         //计算三个月前的时间
         LocalDateTime threeMonthsAgo = now.minusMonths(3);
         queryWrapper.between(EMUseCarInfo::getCreateTime, threeMonthsAgo, now);
         queryWrapper.eq(EMUseCarInfo::getIsTemp, 0); //暂存
         List<EMUseCarInfo> list = baseMapper.selectList(queryWrapper);
         Map<Long, List<User>> userMaps = iUserClient.selectUserAll().stream().collect(Collectors.groupingBy(User::getId));
-        List<EMDraftVO> resultVOS = new ArrayList<>();
-        for (EMUseCarInfo obj : list) {
-            EMDraftVO vo = new EMDraftVO();
-            vo.setId(obj.getId());
-            userMaps.get(obj.getCreateUser()).stream().findAny().ifPresent(user -> vo.setTitle((ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getRealName())) ? user.getRealName() + "提交的用车申请" : ""));
-            vo.setUpdateTime(obj.getUpdateTime());
-            resultVOS.add(vo);
+
+        List<String> dataIds = list.stream().map(EMUseCarInfo::getId).map(String::valueOf).collect(Collectors.toList());
+        List<EMDraftGroupVO> resultList = new LinkedList<>();
+        if (dataIds.size() > 0) {
+            List<ExDraftRecord> query = jdbcTemplate.query("select * from c_ex_draft_record where data_type = 6 and data_id in(" + StringUtils.join(dataIds, ",") + ")", new BeanPropertyRowMapper<>(ExDraftRecord.class));
+            Map<Long, List<ExDraftRecord>> groupMaps = query.stream().collect(Collectors.groupingBy(ExDraftRecord::getGroupId));
+            for (Map.Entry<Long, List<ExDraftRecord>> listEntry : groupMaps.entrySet()) {
+                Long groupId = listEntry.getKey();
+                List<Long> ids = listEntry.getValue().stream().map(ExDraftRecord::getDataId).collect(Collectors.toList());
+                EMUseCarInfo obj = baseMapper.selectById(ids.get(0));
+                EMDraftGroupVO vo = new EMDraftGroupVO();
+                if (obj != null) {
+                    userMaps.get(obj.getCreateUser()).stream().findAny().ifPresent(user -> vo.setTitle((ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getRealName())) ? user.getRealName() + "提交的日常报销" : ""));
+                    vo.setUpdateTime(obj.getUpdateTime());
+                }
+                vo.setGroupId(groupId);
+                vo.setEMDraftIds(StringUtils.join(ids, ","));
+                resultList.add(vo);
+            }
         }
-        return resultVOS.stream()
-                .sorted(Comparator.comparing(EMDraftVO::getUpdateTime).reversed())
-                .collect(Collectors.toList());
+        return resultList;
     }
 
     @Override
@@ -93,97 +106,108 @@ public class EMUseCarServiceImpl extends BaseServiceImpl<ExMUseCarMapper, EMUseC
     }
 
     @Override
-    public boolean carSubmit(EMUseCarInfoDTO dto) {
+    public boolean carSubmit(List<EMUseCarInfoDTO> dtoList) {
         if (ObjectUtil.isEmpty(SecureUtil.getUser())) {
             throw new ServiceException("获取当前用户信息失败,请联系管理员");
         }
-        boolean var = false;
-        dto.setCreateUser(SecureUtil.getUserId());
-
-        if (("1").equals(dto.getSubmitStatus())) {
-            if (ObjectUtil.isNotEmpty(dto.getId())) {
-                EMUseCarInfo obj = baseMapper.selectById(dto.getId());
-                if (obj != null && obj.getStatus() == 3) {
-                    //如果是已驳回任务,那么重新生成新的记录信息
-                    dto.setId(SnowFlakeUtil.getId());
-                    var = true;
+        Long draftGroupId = SnowFlakeUtil.getId();
+        for (EMUseCarInfoDTO dto : dtoList) {
+            boolean var = false;
+            dto.setCreateUser(SecureUtil.getUserId());
+
+            if (("1").equals(dto.getSubmitStatus())) {
+                if (ObjectUtil.isNotEmpty(dto.getId())) {
+                    EMUseCarInfo obj = baseMapper.selectById(dto.getId());
+                    if (obj != null && obj.getStatus() == 3) {
+                        //如果是已驳回任务,那么重新生成新的记录信息
+                        dto.setId(SnowFlakeUtil.getId());
+                        var = true;
+                    }
                 }
-            }
-            dto.setIsTemp(0); //暂存
-            dto.setStatus(0); //未上报
-            if (var) {
-                this.save(dto);
-            } else {
-                this.saveOrUpdate(dto);
-            }
-            return true;
-
-        } else if (("2").equals(dto.getSubmitStatus())) { //提交审批
-            if (ObjectUtil.isNotEmpty(dto.getId())) {
-                EMUseCarInfo obj = baseMapper.selectById(dto.getId());
-                if (obj != null && (obj.getStatus() != 0 && obj.getStatus() != 3)) {
-                    throw new ServiceException("当前填报的信息不是未上报、已驳回状态,不允许操作!");
-                } else if (obj != null && obj.getStatus() == 3) {
-                    //如果是已驳回任务,那么重新生成新的记录信息
-                    dto.setId(SnowFlakeUtil.getId());
-                    var = true;
-                }
-            }
-            if (ObjectUtil.isNotEmpty(dto.getResponsibleUser()) && ObjectUtil.isNotEmpty(dto.getPersonnelUser())) {
-                //新增审批任务
-                TaskProcessInfo taskProcessInfo = new TaskProcessInfo();
-                taskProcessInfo.setId(SnowFlakeUtil.getId());
-                taskProcessInfo.setStatus(1); //待审批
-                taskProcessInfo.setReportDate(new Date());
-                taskProcessInfo.setTaskType(6); //用车审批
-                taskProcessInfo.setTaskName("【" + SecureUtil.getUserName() + "】向您发起【用车审批】审批");
-                //上报人
-                taskProcessInfo.setReportUserId(SecureUtil.getUserId());
-
-                //审批人
-                List<String> auditUserIds = new LinkedList<>();
-                EMProcessTaskUser responsibleObj = dto.getResponsibleUser(); //部门负责人
-                auditUserIds.add(responsibleObj.getUserId());
-                EMProcessTaskUser personnelUser = dto.getPersonnelUser(); //人事
-                auditUserIds.add(personnelUser.getUserId());
-                taskProcessInfo.setAuditUserIds(StringUtils.join(auditUserIds, ","));
-
-                //抄送人
-                if (ObjectUtil.isNotEmpty(dto.getCcUserList())) {
-                    List<String> ccUserObjList = dto.getCcUserList().stream().map(EMProcessTaskUser::getUserId).collect(Collectors.toList());
-                    taskProcessInfo.setCcUserIds(StringUtils.join(ccUserObjList, ","));
-                }
-                taskProcessService.save(taskProcessInfo);
-
-                //新增信息
-                dto.setIsTemp(1); //提交
-                dto.setStatus(1); //待审批
+                dto.setIsTemp(0); //暂存
+                dto.setStatus(0); //未上报
                 if (var) {
                     this.save(dto);
                 } else {
                     this.saveOrUpdate(dto);
                 }
 
-                //新增审批任务关联信息
-                jdbcTemplate.execute("delete from c_expense_task_record where task_id = " + taskProcessInfo.getId() + " and expense_info_id = " + dto.getId() + " ; insert into c_expense_task_record(id,task_id,expense_info_id,expense_info_type) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + dto.getId() + ",6)");
+                Long aLong = jdbcTemplate.queryForObject("select count(1) from c_ex_draft_record where data_type = 6 and data_id = " + dto.getId(), Long.class);
+                if (aLong == null || aLong == 0L) {
+                    //绑定关系
+                    jdbcTemplate.execute("insert into c_ex_draft_record(id,group_id,data_id,data_type) values(" + SnowFlakeUtil.getId() + "," + draftGroupId + "," + dto.getId() + ",6)");
+                }
 
-                return true;
+            } else if (("2").equals(dto.getSubmitStatus())) { //提交审批
+                if (ObjectUtil.isNotEmpty(dto.getId())) {
+                    EMUseCarInfo obj = baseMapper.selectById(dto.getId());
+                    if (obj != null && (obj.getStatus() != 0 && obj.getStatus() != 3)) {
+                        throw new ServiceException("当前填报的信息不是未上报、已驳回状态,不允许操作!");
+                    } else if (obj != null && obj.getStatus() == 3) {
+                        //如果是已驳回任务,那么重新生成新的记录信息
+                        dto.setId(SnowFlakeUtil.getId());
+                        var = true;
+                    }
+                }
+                if (ObjectUtil.isNotEmpty(dto.getResponsibleUser()) && ObjectUtil.isNotEmpty(dto.getPersonnelUser())) {
+                    //新增审批任务
+                    TaskProcessInfo taskProcessInfo = new TaskProcessInfo();
+                    taskProcessInfo.setId(SnowFlakeUtil.getId());
+                    taskProcessInfo.setStatus(1); //待审批
+                    taskProcessInfo.setReportDate(new Date());
+                    taskProcessInfo.setTaskType(6); //用车审批
+                    taskProcessInfo.setTaskName("【" + SecureUtil.getUserName() + "】向您发起【用车审批】审批");
+                    //上报人
+                    taskProcessInfo.setReportUserId(SecureUtil.getUserId());
+
+                    //审批人
+                    List<String> auditUserIds = new LinkedList<>();
+                    EMProcessTaskUser responsibleObj = dto.getResponsibleUser(); //部门负责人
+                    auditUserIds.add(responsibleObj.getUserId());
+                    EMProcessTaskUser personnelUser = dto.getPersonnelUser(); //人事
+                    auditUserIds.add(personnelUser.getUserId());
+                    taskProcessInfo.setAuditUserIds(StringUtils.join(auditUserIds, ","));
+
+                    //抄送人
+                    if (ObjectUtil.isNotEmpty(dto.getCcUserList())) {
+                        List<String> ccUserObjList = dto.getCcUserList().stream().map(EMProcessTaskUser::getUserId).collect(Collectors.toList());
+                        taskProcessInfo.setCcUserIds(StringUtils.join(ccUserObjList, ","));
+                    }
+                    taskProcessService.save(taskProcessInfo);
+
+                    //新增信息
+                    dto.setIsTemp(1); //提交
+                    dto.setStatus(1); //待审批
+                    if (var) {
+                        this.save(dto);
+                    } else {
+                        this.saveOrUpdate(dto);
+                    }
+
+                    //新增审批任务关联信息
+                    jdbcTemplate.execute("delete from c_expense_task_record where task_id = " + taskProcessInfo.getId() + " and expense_info_id = " + dto.getId() + " ; insert into c_expense_task_record(id,task_id,expense_info_id,expense_info_type) values (" + SnowFlakeUtil.getId() + "," + taskProcessInfo.getId() + "," + dto.getId() + ",6)");
 
-            } else {
-                throw new ServiceException("获取当前审批流程人员信息失败,请联系管理员");
+                } else {
+                    throw new ServiceException("获取当前审批流程人员信息失败,请联系管理员");
+                }
             }
         }
-        return false;
+        return true;
     }
 
     @Override
-    public boolean carRemove(Long id) {
-        EMUseCarInfo emUseCarInfo = baseMapper.selectById(id);
-        if (emUseCarInfo.getIsTemp().equals(0)) {
-            return this.removeById(id);
-        } else {
-            throw new ServiceException("当前记录信息不是草稿数据,无法删除");
+    public boolean carRemove(Long groupId) {
+        List<ExDraftRecord> query = jdbcTemplate.query("select * from c_ex_draft_record where group_id = " + groupId, new BeanPropertyRowMapper<>(ExDraftRecord.class));
+        if (query.size() > 0) {
+            List<String> ids = query.stream().map(ExDraftRecord::getDataId).map(String::valueOf).collect(Collectors.toList());
+            if (ids.size() > 0) {
+                jdbcTemplate.execute("delete from c_ex_draft_record where group_id = " + groupId);
+                jdbcTemplate.execute("delete from c_expense_use_car_info where id in(" + StringUtils.join(ids, ",") + ")");
+                return true;
+            }
+            return false;
         }
+        return false;
     }
 
     @Override
@@ -209,4 +233,11 @@ public class EMUseCarServiceImpl extends BaseServiceImpl<ExMUseCarMapper, EMUseC
         }
         return false;
     }
+
+    @Override
+    public List<EMUseCarInfoVO> carDraftDetail(String eMDraftIds) {
+        List<EMUseCarInfo> useCarInfos = baseMapper.selectBatchIds(Func.toStrList(eMDraftIds));
+        List<EMUseCarInfoVO> vos = BeanUtil.copyProperties(useCarInfos, EMUseCarInfoVO.class);
+        return vos;
+    }
 }