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.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;
|
|
/**
|
* 爱心义仓/物品捐赠表(ComActWarehouseDonates)表服务实现类
|
*
|
* @author makejava
|
* @since 2021-10-09 17:14:16
|
*/
|
@Slf4j
|
@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("领取成功,部分物品可能因剩余数量不足领取失败,请以实际领取记录为准");
|
}
|
}
|