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