duhuizhe
2024-05-15 aa2c3d4deba76ade0958ff3ced88396e226a4964
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
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<ActivityShopRecord> 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<ActivityShopRecordDto> getAlreadyMerchantList(ActivityShopRecordParam param) {
        //已上报的商户列表
        List<ActivityShopRecordDto> dtoList = activityShopRecordMapper.getAlreadyMerchantList(param);
        if(CollectionUtils.isEmpty(dtoList)){
            return dtoList;
        }
        //关联shop库查询商户、店铺等字段信息
        List<Long> shopIds = dtoList.stream().map(ActivityShopRecord::getMerchantShopId).collect(Collectors.toList());
        String ids = shopIds.stream().map(String::valueOf).collect(Collectors.joining(","));
//        List<Map> mapList = shopServiceClient.selectShopMsgByIds(ids);
        List<Map> mapList = new ArrayList<>();
        if(!CollectionUtils.isEmpty(mapList)){
            // 将 mapList 中的数据合并到 dtoList 中
            dtoList.forEach( d -> {
                ActivityShopRecordDto dto = d;
                Map<String, Object> map = mapList.get(dtoList.indexOf(d));
                // 合并
                mergeMapToDto(dto, map);
            });
        }
        return dtoList;
    }
 
    /**
     * 方法描述:批量添加上报
     *
     * @date  2024-04-15 9:46
     **/
    @Override
    public Integer batchInsert(List<ActivityShopRecord> 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<ActivityShopRecord> selectByCondition(String[] ids,Long activityId) {
        return activityShopRecordMapper.selectByCondition(ids,activityId);
    }
 
    /**
     * 方法描述: 将 mapList 中的数据合并到 dtoList 中
     *
     * @date  2024-04-14 22:56
     **/
    private void mergeMapToDto(ActivityShopRecordDto dto, Map<String, Object> 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"));
 
    }
 
 
}