From 70d2a5d0f9c6951b2d4cac954041ed73582ff7eb Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期一, 09 六月 2025 11:54:00 +0800
Subject: [PATCH] 6.9新增登录失败冻结逻辑

---
 springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActWarehouseDonatesServiceImpl.java |  332 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 330 insertions(+), 2 deletions(-)

diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActWarehouseDonatesServiceImpl.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActWarehouseDonatesServiceImpl.java
index 56ed2a4..297b301 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActWarehouseDonatesServiceImpl.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActWarehouseDonatesServiceImpl.java
@@ -1,13 +1,45 @@
 package com.panzhihua.service_community.service.impl;
 
+import static java.util.Objects.isNull;
+import static java.util.Objects.nonNull;
+import static org.apache.commons.lang3.StringUtils.isBlank;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import javax.annotation.Resource;
+
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.panzhihua.common.exceptions.ServiceException;
+import com.panzhihua.common.model.dtos.community.warehouse.ComActWarehouseApplyDTO;
+import com.panzhihua.common.model.dtos.community.warehouse.ComActWarehouseDonatesDTO;
+import com.panzhihua.common.model.dtos.community.warehouse.ExportDonatesDTO;
+import com.panzhihua.common.model.dtos.community.warehouse.PageDonatesDTO;
 import com.panzhihua.common.model.dtos.property.CommonPage;
 import com.panzhihua.common.model.vos.R;
-import com.panzhihua.service_community.entity.ComActWarehouseDonates;
+import com.panzhihua.common.model.vos.community.warehouse.ComActWarehouseApplyVO;
+import com.panzhihua.common.model.vos.community.warehouse.ComActWarehouseDonatesVO;
+import com.panzhihua.common.model.vos.community.warehouse.ComActWarehouseOperationVO;
+import com.panzhihua.common.model.vos.community.warehouse.DonatesStatisticsVO;
+import com.panzhihua.common.model.vos.community.warehouse.WarehouseDonatesExcelVO;
+import com.panzhihua.service_community.dao.ComActWarehouseApplyDao;
 import com.panzhihua.service_community.dao.ComActWarehouseDonatesDao;
+import com.panzhihua.service_community.dao.ComActWarehouseOperationDao;
+import com.panzhihua.service_community.entity.ComActWarehouseApply;
+import com.panzhihua.service_community.entity.ComActWarehouseDonates;
+import com.panzhihua.service_community.entity.ComActWarehouseOperation;
 import com.panzhihua.service_community.service.ComActWarehouseDonatesService;
+
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
 
 /**
  * 爱心义仓/物品捐赠表(ComActWarehouseDonates)表服务实现类
@@ -19,8 +51,304 @@
 @Service
 public class ComActWarehouseDonatesServiceImpl extends ServiceImpl<ComActWarehouseDonatesDao, ComActWarehouseDonates> implements ComActWarehouseDonatesService {
 
+    @Resource
+    private ComActWarehouseOperationDao comActWarehouseOperationDao;
+    @Resource
+    private ComActWarehouseApplyDao comActWarehouseApplyDao;
+
     @Override
     public R pageList(CommonPage commonPage) {
         return null;
     }
+
+    /**
+     * 后台导入捐赠物品
+     * @param list
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R batchImportWarehouseDonates(List<WarehouseDonatesExcelVO> list) {
+        try {
+            if (!list.isEmpty()) {
+                List<ComActWarehouseDonates> donateList = list.stream().map(excelVO -> {
+                    ComActWarehouseDonates donates = new ComActWarehouseDonates();
+                    BeanUtils.copyProperties(excelVO, donates);
+                    if (excelVO.getIsAnonymous().equals("是")) {
+                        donates.setIsAnonymous(1);
+                    } else {
+                        donates.setIsAnonymous(2);
+                    }
+                    return donates;
+                }).collect(Collectors.toList());
+                this.baseMapper.batchInsertDonates(donateList);
+                List<ComActWarehouseOperation> operationList = new ArrayList<>();
+                Date nowDate = new Date();
+                donateList.forEach(donate -> {
+                    Long donateId = donate.getId();
+                    if (nonNull(donateId)) {
+                        ComActWarehouseOperation comActWarehouseOperation = new ComActWarehouseOperation();
+                        comActWarehouseOperation.setGoodsId(donateId);
+                        comActWarehouseOperation.setUserId(donate.getSigningBy());
+                        comActWarehouseOperation.setContent("工作人员完成了物品签收");
+                        comActWarehouseOperation.setCreateTime(nowDate);
+                        comActWarehouseOperation.setType(ComActWarehouseOperation.type.bxs);
+                        operationList.add(comActWarehouseOperation);
+                    }
+                });
+                if (!operationList.isEmpty()) {
+                    comActWarehouseOperationDao.batchInsertOperation(operationList);
+                }
+            }
+        } catch (Exception e) {
+            log.error("导入捐赠物品失败【{}】", e.getMessage());
+            return R.fail("导入捐赠物品失败");
+        }
+        return R.ok();
+    }
+
+    /**
+     * 后台导出捐赠物品表格
+     * @param exportDonatesDTO
+     * @return
+     */
+    @Override
+    public R exportDonates(ExportDonatesDTO exportDonatesDTO) {
+        List<Long> needExportIds = exportDonatesDTO.getIds();
+        if (nonNull(needExportIds) && !needExportIds.isEmpty()) {
+            //根据id导出
+            return R.ok(this.baseMapper.exportDonatesByIds(needExportIds));
+        }
+        return R.ok(this.baseMapper.exportDonatesBySearch(exportDonatesDTO));
+    }
+
+    /**
+     * 分页查询捐赠物品
+     * @param pageDonatesDTO
+     * @return
+     */
+    @Override
+    public R pageDonates(PageDonatesDTO pageDonatesDTO) {
+        Page page = new Page<>();
+        page.setCurrent(pageDonatesDTO.getPageNum());
+        page.setSize(pageDonatesDTO.getPageSize());
+        IPage<ComActWarehouseDonatesVO> donatesVOIPage = this.baseMapper.pageDonates(page, pageDonatesDTO);
+        Integer isWhich = pageDonatesDTO.getIsWhich();
+        if (nonNull(isWhich) && isWhich.intValue() == 3) {
+            List<ComActWarehouseDonatesVO> records = donatesVOIPage.getRecords();
+            if (!records.isEmpty()) {
+                records.forEach(record -> {
+                    String name = record.getName();
+                    if (record.getIsAnonymous().equals(ComActWarehouseDonatesVO.isAnonymous.yes) || isBlank(name)) {
+                        record.setName("匿名用户");
+                    } else {
+                        record.setName(name.substring(0, 1).concat(name.substring(1).replaceAll("\\S", "*")));
+                    }
+                    record.setPhone(null);
+                });
+            }
+        }
+        return R.ok(donatesVOIPage);
+    }
+
+    /**
+     * 新增物品捐赠
+     * @param comActWarehouseDonatesDTO
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R addDonates(ComActWarehouseDonatesDTO comActWarehouseDonatesDTO) {
+        ComActWarehouseDonates comActWarehouseDonates = new ComActWarehouseDonates();
+        BeanUtils.copyProperties(comActWarehouseDonatesDTO, comActWarehouseDonates);
+        Date nowDate = new Date();
+        comActWarehouseDonates.setRegisterAt(nowDate);
+        comActWarehouseDonates.setSurplusQuantity(comActWarehouseDonatesDTO.getQuantity());
+        if (isNull(comActWarehouseDonatesDTO.getUserId())) {
+            //userId为空代表后台新增
+            comActWarehouseDonates.setSigningAt(nowDate);
+            comActWarehouseDonates.setStatus(2);
+        } else {
+            comActWarehouseDonates.setStatus(1);
+        }
+        int result = this.baseMapper.insert(comActWarehouseDonates);
+        if (result > 0) {
+            if (comActWarehouseDonates.getStatus().intValue() == 2) {
+                ComActWarehouseOperation comActWarehouseOperation = new ComActWarehouseOperation();
+                comActWarehouseOperation.setGoodsId(comActWarehouseDonates.getId());
+                comActWarehouseOperation.setUserId(comActWarehouseDonates.getSigningBy());
+                comActWarehouseOperation.setContent("工作人员完成了物品签收");
+                comActWarehouseOperation.setCreateTime(nowDate);
+                comActWarehouseOperation.setType(ComActWarehouseOperation.type.bxs);
+                comActWarehouseOperationDao.insert(comActWarehouseOperation);
+            }
+            return R.ok();
+        }
+        return R.fail("添加失败,请重试");
+    }
+
+    /**
+     * 查看物品捐赠详情
+     * @param donatesId
+     * @param isWhich
+     * @param userId
+     * @return
+     */
+    @Override
+    public R getDonates(Long donatesId, Integer isWhich, Long userId) {
+        ComActWarehouseDonatesVO comActWarehouseDonatesVO = this.baseMapper.selectDetailById(donatesId);
+        if (isNull(comActWarehouseDonatesVO)) {
+            return R.fail("捐赠物品记录不存在");
+        }
+        if (nonNull(isWhich) && isWhich.intValue() != 0) {
+            if (isWhich.intValue() == 3) {
+                String name = comActWarehouseDonatesVO.getName();
+                if (comActWarehouseDonatesVO.getIsAnonymous().equals(ComActWarehouseDonatesVO.isAnonymous.yes) || isBlank(name)) {
+                    comActWarehouseDonatesVO.setName("匿名用户");
+                } else {
+                    comActWarehouseDonatesVO.setName(name.substring(0, 1).concat(name.substring(1).replaceAll("\\S", "*")));
+                }
+                comActWarehouseDonatesVO.setPhone(null);
+            }
+            if (isWhich.intValue() == 1 && !userId.equals(comActWarehouseDonatesVO.getUserId())) {
+                return R.fail("无法获取他人捐赠记录");
+            }
+            List<ComActWarehouseOperationVO> operationList = comActWarehouseOperationDao.selectList(donatesId);
+            comActWarehouseDonatesVO.setOperationList(operationList);
+        }
+        return R.ok(comActWarehouseDonatesVO);
+    }
+
+    /**
+     * 捐赠物品后台签收
+     * @param comActWarehouseDonatesDTO
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R signingDonates(ComActWarehouseDonatesDTO comActWarehouseDonatesDTO) {
+        ComActWarehouseDonates comActWarehouseDonates = this.baseMapper.selectById(comActWarehouseDonatesDTO.getId());
+        if (isNull(comActWarehouseDonates)) {
+            return R.fail("捐赠物品记录不存在");
+        }
+        if (comActWarehouseDonates.getStatus().intValue() != 1) {
+            return R.fail("捐赠物品已被签收或已被取消");
+        }
+        BeanUtils.copyProperties(comActWarehouseDonatesDTO, comActWarehouseDonates);
+        Date nowDate = new Date();
+        if (nonNull(comActWarehouseDonatesDTO.getQuantity())) {
+            comActWarehouseDonates.setSurplusQuantity(comActWarehouseDonatesDTO.getQuantity());
+        }
+        comActWarehouseDonates.setSigningAt(nowDate);
+        comActWarehouseDonates.setStatus(2);
+        int result = this.baseMapper.updateById(comActWarehouseDonates);
+        if (result > 0) {
+            ComActWarehouseOperation comActWarehouseOperation = new ComActWarehouseOperation();
+            comActWarehouseOperation.setGoodsId(comActWarehouseDonates.getId());
+            comActWarehouseOperation.setUserId(comActWarehouseDonates.getSigningBy());
+            comActWarehouseOperation.setContent("工作人员完成了物品签收");
+            comActWarehouseOperation.setCreateTime(nowDate);
+            comActWarehouseOperation.setType(ComActWarehouseOperation.type.bxs);
+            comActWarehouseOperationDao.insert(comActWarehouseOperation);
+            return R.ok();
+        }
+        return R.fail("签收失败");
+    }
+
+    /**
+     * 用户取消捐赠
+     * @param donatesId
+     * @param currentUser
+     * @return
+     */
+    @Override
+    public R cancelDonates(Long donatesId, Long currentUser) {
+        ComActWarehouseDonates comActWarehouseDonates = this.baseMapper.selectById(donatesId);
+        if (isNull(comActWarehouseDonates)) {
+            return R.fail("没有你的捐赠记录");
+        }
+        if (!currentUser.equals(comActWarehouseDonates.getUserId())) {
+            return R.fail("不能取消他人的捐赠记录");
+        }
+        if (comActWarehouseDonates.getStatus().equals(ComActWarehouseDonates.status.yqx)) {
+            return R.ok();
+        }
+        comActWarehouseDonates.setStatus(ComActWarehouseDonates.status.yqx);
+        int result = this.baseMapper.updateById(comActWarehouseDonates);
+        if (result > 0) {
+            ComActWarehouseOperation comActWarehouseOperation = new ComActWarehouseOperation();
+            comActWarehouseOperation.setGoodsId(comActWarehouseDonates.getId());
+            comActWarehouseOperation.setUserId(currentUser);
+            comActWarehouseOperation.setContent("已取消捐赠");
+            comActWarehouseOperation.setCreateTime(new Date());
+            comActWarehouseOperation.setType(ComActWarehouseOperation.type.bxs);
+            comActWarehouseOperationDao.insert(comActWarehouseOperation);
+        }
+        return R.ok();
+    }
+
+    /**
+     * 捐赠物品统计查询
+     * @param communityId
+     * @return
+     */
+    @Override
+    public R getDonatesStatistics(Long communityId) {
+        Date nowDate = new Date();
+        SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy");
+        SimpleDateFormat monthFormat = new SimpleDateFormat("yyyy-MM");
+        SimpleDateFormat dayFormat = new SimpleDateFormat("yyyy-MM-dd");
+        String currentYear = yearFormat.format(nowDate).concat("%");
+        String currentMonth = monthFormat.format(nowDate).concat("%");
+        String today = dayFormat.format(nowDate).concat("%");
+        DonatesStatisticsVO donatesStatisticsVO = this.baseMapper.selectDonatesStatistics(communityId, currentYear, currentMonth, today);
+        donatesStatisticsVO.setTotalDec(donatesStatisticsVO.getTotalInc().intValue() - donatesStatisticsVO.getSurplus().intValue());
+        return R.ok(donatesStatisticsVO);
+    }
+
+    /**
+     * 社区后台物品领用
+     * @param comActWarehouseApplyDTO
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R applyDonates(ComActWarehouseApplyDTO comActWarehouseApplyDTO) {
+        List<ComActWarehouseApplyVO> applyItems = comActWarehouseApplyDTO.getApplyItems();
+        if (!applyItems.isEmpty()) {
+            Date nowDate = new Date();
+            applyItems.forEach(item -> {
+                Long goodsId = item.getGoodsId();
+                Integer goodsNum = item.getGoodsNum();
+                if (isNull(goodsId) || isNull(goodsNum)) {
+                    throw new ServiceException("请求参数有误");
+                }
+                ComActWarehouseDonates warehouseDonates = this.baseMapper.selectById(goodsId);
+                if (nonNull(warehouseDonates) && warehouseDonates.getSurplusQuantity() - goodsNum >= 0) {
+                    warehouseDonates.setSurplusQuantity(warehouseDonates.getSurplusQuantity() - goodsNum);
+                    this.baseMapper.updateById(warehouseDonates);
+
+                    ComActWarehouseApply apply = new ComActWarehouseApply();
+                    BeanUtils.copyProperties(comActWarehouseApplyDTO, apply);
+                    apply.setActualTime(nowDate);
+                    apply.setCreateTime(nowDate);
+                    apply.setGoodsId(goodsId);
+                    apply.setGoodsNum(goodsNum);
+                    apply.setReserveTime(nowDate);
+                    apply.setStatus(ComActWarehouseApplyVO.status.ylq);
+                    apply.setWriteOffUserId(comActWarehouseApplyDTO.getOperateUserId());
+                    comActWarehouseApplyDao.insert(apply);
+
+                    ComActWarehouseOperation comActWarehouseOperation=new ComActWarehouseOperation();
+                    comActWarehouseOperation.setGoodsId(goodsId);
+                    comActWarehouseOperation.setCreateTime(nowDate);
+                    comActWarehouseOperation.setContent("爱心传递给了"+comActWarehouseApplyDTO.getApplyName().charAt(0)+"**,"+"减少了"+comActWarehouseApplyDTO.getReason()+"的困难,谢谢你的帮助");
+                    comActWarehouseOperation.setType(ComActWarehouseOperation.type.xs);
+                    comActWarehouseOperation.setApplyId(apply.getId());
+                    comActWarehouseOperationDao.insert(comActWarehouseOperation);
+                }
+            });
+        }
+        return R.ok("领取成功,部分物品可能因剩余数量不足领取失败,请以实际领取记录为准");
+    }
 }

--
Gitblit v1.7.1