package com.nuvole.four.service.impl; import com.nuvole.base.domain.SysUser; import com.nuvole.four.contants.Contants; import com.nuvole.four.domain.ActivityShopRecord; import com.nuvole.four.domain.dto.ActivityShopRecordDto; import com.nuvole.four.domain.params.ActivityShopRecordParam; import com.nuvole.four.domain.query.ActivityShopRecordQuery; import com.nuvole.four.mapper.ActivityFeeMapper; import com.nuvole.four.mapper.ActivityShopRecordMapper; import com.nuvole.four.service.ActivityShopRecordService; import com.nuvole.four.util.SystemUtil; import com.nuvole.util.IdGenerator; import com.walker.infrastructure.utils.CollectionUtils; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @Description 活动补贴—上报商户Service实现类 * @Author dqh * @Date 2024-04-13 21:39:14 */ @Service @RequiredArgsConstructor public class ActivityShopRecordServiceImpl implements ActivityShopRecordService { private final ActivityShopRecordMapper activityShopRecordMapper; // private final ShopServiceClient shopServiceClient; private final ActivityFeeMapper activityFeeMapper; @Override public int addSelective(ActivityShopRecord entity) { return activityShopRecordMapper.insertSelective(entity); } @Override public int editSelective(ActivityShopRecord entity) { return activityShopRecordMapper.updateByPrimaryKeySelective(entity); } @Override public ActivityShopRecord get(Long id) { return activityShopRecordMapper.selectByPrimaryKey(id); } @Override public int del(Long id) { return activityShopRecordMapper.deleteByPrimaryKey(id); } @Override public List getList(ActivityShopRecordQuery query) { return activityShopRecordMapper.selectList(query); } @Override public Map getActRateByShopIdAndChannelId(Long shopId, Long channelId) { return activityShopRecordMapper.getActRateByShopId(shopId, channelId); } @Override public int updShopSurplusFee(Long activityId, Long merchantShopId, Long channelId, Integer useFee) { return activityShopRecordMapper.updShopSurplusFee(activityId, merchantShopId, channelId, useFee); } /** * 方法描述:查询已上报商户列表 * * @date 2024-04-14 21:08 **/ @Override public List getAlreadyMerchantList(ActivityShopRecordParam param) { //已上报的商户列表 List dtoList = activityShopRecordMapper.getAlreadyMerchantList(param); if(CollectionUtils.isEmpty(dtoList)){ return dtoList; } //关联shop库查询商户、店铺等字段信息 List shopIds = dtoList.stream().map(ActivityShopRecord::getMerchantShopId).collect(Collectors.toList()); String ids = shopIds.stream().map(String::valueOf).collect(Collectors.joining(",")); // List mapList = shopServiceClient.selectShopMsgByIds(ids); List mapList = new ArrayList<>(); if(!CollectionUtils.isEmpty(mapList)){ // 将 mapList 中的数据合并到 dtoList 中 dtoList.forEach( d -> { ActivityShopRecordDto dto = d; Map map = mapList.get(dtoList.indexOf(d)); // 合并 mergeMapToDto(dto, map); }); } return dtoList; } /** * 方法描述:批量添加上报 * * @date 2024-04-15 9:46 **/ @Override public Integer batchInsert(List recordList) { if(CollectionUtils.isEmpty(recordList)){ return 0; } SysUser user = SystemUtil.getLoginUser(Contants.LOGIN_TYPE_PC); Long totalFee = activityFeeMapper.selectByPrimaryKey(recordList.get(0).getActivityId()).getTotalFee(); recordList.forEach( r -> { if (r.getId() == null) { //新增自动生成id r.setId(IdGenerator.getId()); r.setCreateBy(user.getId()); r.setCreateTime(new Date()); //上报时只存活动的总额度;待触发活动开始,才开始分配额度 r.setTotalFee(totalFee); r.setUseFee(0L); r.setSurplusFee(totalFee); //默认状态均=0(未开始) r.setStatus(0); r.setDeleted(0); }else{ //额度自动分配,不允许更新操作; String errMsg = String.format("第 {%s} 条不允许重复上报", recordList.indexOf(r) + 1); throw new IllegalArgumentException(errMsg); } }); return activityShopRecordMapper.batchInsert(recordList); } /** * 方法描述:根据shopIds查询所有记录 * * @date 2024-04-15 11:23 **/ @Override public List selectByCondition(String[] ids,Long activityId) { return activityShopRecordMapper.selectByCondition(ids,activityId); } /** * 方法描述: 将 mapList 中的数据合并到 dtoList 中 * * @date 2024-04-14 22:56 **/ private void mergeMapToDto(ActivityShopRecordDto dto, Map map) { dto.setManagerName((String)map.get("managerName")); dto.setShopCode((String)map.get("shopCode")); dto.setShopName((String)map.get("shopName")); dto.setShopId((String)map.get("id")); dto.setMerchantName((String) map.get("merchantName")); dto.setContactName((String) map.get("contactName")); dto.setContactMobile((String) map.get("contactMobile")); dto.setOfflineWxRate((Double) map.get("wxRate")); dto.setOfflineZfbRate((Double) map.get("zfbRate")); dto.setOfflineUnionpayRate((Double) map.get("unionpayRate")); } }