| | |
| | | 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)表服务实现类 |
| | |
| | | @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.intValue()); |
| | | comActWarehouseOperation.setUserId(donate.getSigningBy().intValue()); |
| | | 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().intValue()); |
| | | comActWarehouseOperation.setUserId(comActWarehouseDonates.getSigningBy().intValue()); |
| | | 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().intValue()); |
| | | comActWarehouseOperation.setUserId(comActWarehouseDonates.getSigningBy().intValue()); |
| | | 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().intValue()); |
| | | comActWarehouseOperation.setUserId(currentUser.intValue()); |
| | | 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 -> { |
| | | Integer 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("领取成功,部分物品可能因剩余数量不足领取失败,请以实际领取记录为准"); |
| | | } |
| | | } |