jyy
2021-03-19 382794b20c47d0f74317b2ac5bb7b6849986166f
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
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
package com.matrix.system.shopXcx.api.action;
 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.matrix.biz.bean.BizUser;
import com.matrix.biz.dao.BizUserDao;
import com.matrix.component.redis.RedisUserLoginUtils;
import com.matrix.component.tools.ImageUtil;
import com.matrix.component.tools.WxacodeUtil;
import com.matrix.core.pojo.AjaxResult;
import com.matrix.core.pojo.BasePageQueryDto;
import com.matrix.core.pojo.VerificationResult;
import com.matrix.core.tools.LogUtil;
import com.matrix.core.tools.MD5Util;
import com.matrix.core.tools.PropertiesUtil;
import com.matrix.core.tools.StringUtils;
import com.matrix.system.common.bean.BusParameterSettings;
import com.matrix.system.common.constance.AppConstance;
import com.matrix.system.common.dao.BusParameterSettingsDao;
import com.matrix.system.common.interceptor.HostInterceptor;
import com.matrix.system.fenxiao.constant.FenxiaoSettingConstant;
import com.matrix.system.fenxiao.dao.ShopSalesmanApplyDao;
import com.matrix.system.fenxiao.entity.ShopSalesmanApply;
import com.matrix.system.fenxiao.service.ShopSalesmanApplyService;
import com.matrix.system.hive.plugin.util.CollectionUtils;
import com.matrix.system.shopXcx.api.WeChatApiTools;
import com.matrix.system.shopXcx.dao.ShopProductDao;
import com.matrix.system.shopXcx.vo.SalesmanApplyCondition;
import com.matrix.system.shopXcx.vo.SalesmanCenterInfo;
import com.matrix.system.shopXcx.vo.SalesmanVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
 
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
 
/**
 * @author wzy
 * @date 2021-03-10
 **/
@Api(tags = "推广员接口类")
@RestController
@RequestMapping(value = "/wxapi/salesman")
public class WxSalesmanAction {
 
    @Autowired
    BusParameterSettingsDao busParameterSettingsDao;
 
    @Autowired
    ShopSalesmanApplyDao salesmanApplyDao;
 
 
    @Autowired
    ShopSalesmanApplyService shopSalesmanApplyService;
 
    @Autowired
    private RedisUserLoginUtils redisUserLoginUtils;
 
    @Autowired
    private BizUserDao bizUserDao;
    @Autowired
    WeChatApiTools weChatApiTools;
 
    @Autowired
    ShopProductDao shopProductDao;
 
 
    @ApiOperation(value = "查询推广计划", notes = "")
    @GetMapping(value = "/getTgPlan")
    public AjaxResult getTgPlan() {
        BusParameterSettings busParameterSettings = busParameterSettingsDao.selectCompanyParamByCode(FenxiaoSettingConstant.FX_TG_PLAN, HostInterceptor.getCompanyId());
        AjaxResult ajaxResult = AjaxResult.buildSuccessInstance("");
        ajaxResult.setData(busParameterSettings.getParamValue3());
        return ajaxResult;
    }
 
    @ApiOperation(value = "查询分销商城开关", notes = "1开启分销,2关闭分销")
    @GetMapping(value = "/getSalesMallSetting")
    public AjaxResult getSalesMallSwith() {
        BusParameterSettings fxSwith = busParameterSettingsDao.selectCompanyParamByCode(FenxiaoSettingConstant.FX_SWITCH, HostInterceptor.getCompanyId());
        BusParameterSettings fxModel = busParameterSettingsDao.selectCompanyParamByCode(FenxiaoSettingConstant.FX_MODEL, HostInterceptor.getCompanyId());
        AjaxResult ajaxResult = AjaxResult.buildSuccessInstance("查询成功");
        ajaxResult.putInMap("fxSwith",fxSwith.getParamValue());
        ajaxResult.putInMap("fxModel",fxModel.getParamValue());
        return ajaxResult;
    }
 
 
 
 
 
    @ApiOperation(value = "申请成为推广员", notes = "传入参数invitationId 邀请人openId ,非必填 例: {invitationId:openId}")
    @ApiResponses({
            @ApiResponse(code = 200, message = "ok", response = ShopSalesmanApply.class)
    })
    @PostMapping(value = "/applyToBeAnSalesman")
    @Transactional
    public AjaxResult applyToBeAnSalesman(@RequestBody Map<String,String> param) {
        BizUser loginUser = redisUserLoginUtils.getLoginUser(BizUser.class);
        String invitationId = param.get("invitationId");
        if(StringUtils.isNotBlank(invitationId)){
            BizUser invitationUser = bizUserDao.findByOpenId(invitationId);
            if(invitationUser!=null && invitationUser.getOpenId().equals(loginUser.getOpenId())) {
                return AjaxResult.buildFailInstance("不能邀请自己成为推广员");
            }
        }
 
        ShopSalesmanApply shopSalesmanApply= shopSalesmanApplyService.applyToBeAnSalesman(loginUser.getOpenId(),"",invitationId,ShopSalesmanApply.APPLY_WAY_SELF);
        loginUser=bizUserDao.selectById(loginUser.getUserId());
        redisUserLoginUtils.updateUserInfo(loginUser);
        return AjaxResult.buildSuccessInstance(shopSalesmanApply);
 
 
 
    }
 
 
    @ApiOperation(value = "查询审核进度", notes = "")
    @ApiResponses({
            @ApiResponse(code = 200, message = "ok", response = ShopSalesmanApply.class)
    })
    @GetMapping(value = "/queryApplyProgress")
    public AjaxResult queryApplyProgress() {
        BizUser loginUser = redisUserLoginUtils.getLoginUser(BizUser.class);
        QueryWrapper<ShopSalesmanApply> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("user_id",loginUser.getOpenId());
        queryWrapper.eq("apply_status",ShopSalesmanApply.APPLY_STATUS_DSH);
        ShopSalesmanApply shopSalesmanApply = salesmanApplyDao.selectOne(queryWrapper);
        return AjaxResult.buildSuccessInstance(shopSalesmanApply);
    }
 
 
    @ApiOperation(value = "绑定下级客户,当客户点击分销员分销的产品时调用", notes = "传入参数invitationId 必须 分销员userId例: {invitationId:userId}")
    @ApiResponses({
            @ApiResponse(code = 200, message = "ok", response = Map.class)
    })
    @PostMapping(value = "/bindingParentSalesman")
    public AjaxResult bindingParentSalesman(@RequestBody Map<String,String> param) {
        String invitationId = param.get("invitationId");
 
 
        if (StringUtils.isBlank(invitationId)) {
            return AjaxResult.buildFailInstance("请求参数错误");
        }
        BizUser invitationUser = bizUserDao.selectById(Long.parseLong(invitationId));
        if (invitationUser==null) {
            return AjaxResult.buildFailInstance("请求参数错误");
        }
 
        BizUser loginUser = redisUserLoginUtils.getLoginUser(BizUser.class);
        if(invitationId.equals(loginUser.getUserId())){
            return AjaxResult.buildSuccessInstance("不能绑定自己");
        }
 
        loginUser = bizUserDao.selectById(loginUser.getUserId());
        if(loginUser.getIsSales()==1){
            return AjaxResult.buildSuccessInstance("只有非分销员才能被绑定成客户");
        }else{
            if (StringUtils.isBlank(loginUser.getParentOpenId())) {
                Map<String, Object> updateParam = new HashMap<>();
                updateParam.put("userId", loginUser.getUserId());
                updateParam.put("parentOpenId", invitationUser.getOpenId());
                updateParam.put("bindingParentTime",new Date());
                bizUserDao.updateByMap(updateParam);
                return AjaxResult.buildSuccessInstance("绑定成功");
            } else {
                return AjaxResult.buildSuccessInstance("已经存在上级");
            }
        }
 
 
 
 
    }
 
 
    @ApiOperation(value = "生成邀请下级海报", notes = "")
    @PostMapping(value = "/getInvitationPoster")
    AjaxResult getInvitationPoster() {
        try {
            BizUser loginUser = redisUserLoginUtils.getLoginUser(BizUser.class);
 
            String baseSavePath = PropertiesUtil.getString(AppConstance.FILES_TORAGE_PATH);
            // 图片访问URL
            String baseSaveUrl = PropertiesUtil.getString(AppConstance.NGINX_URL);
 
            //目标海报物理存储路径
            String targetImg=MD5Util.strToMD5(loginUser.getOpenId()) +"haibao.png";
            String targetImgPath=baseSavePath+"wxacode" + File.separatorChar+targetImg ;
 
            String urlPath = baseSaveUrl + "/" + "wxacode" + "/" + targetImg;
 
            String qrcodeSavePath = WxacodeUtil.getWxacode(loginUser.getOpenId() + "", "pages/distributorCenter/applyFor/applyFor", MD5Util.strToMD5(loginUser.getOpenId())+"qrcode"
                    ,weChatApiTools.getAppid(loginUser.getCompanyId()),weChatApiTools.getSecret(loginUser.getCompanyId()));
 
            BufferedImage qrcordImgBuf = ImageIO.read(new File(qrcodeSavePath));
 
            //获取海报
            BusParameterSettings posterSetting = busParameterSettingsDao.selectCompanyParamByCode(FenxiaoSettingConstant.FX_TG_POSTER, loginUser.getCompanyId());
            String posterPath=baseSavePath+"wxacode" + File.separatorChar+MD5Util.strToMD5(loginUser.getOpenId())+"poster.png";
            ImageUtil.downloadPicture(posterSetting.getParamValue(),posterPath);
            BufferedImage posterImgBuf = ImageIO.read(new File(posterPath));
 
            //获取用户头像
            String userPhotoPath=baseSavePath+"wxacode" + File.separatorChar+MD5Util.strToMD5(loginUser.getOpenId())+"userPhoto.png";
            ImageUtil.downloadPicture(loginUser.getAvatarUrl(),userPhotoPath);
            BufferedImage userPhotoImgBuf = ImageIO.read(new File(userPhotoPath));
 
 
            BufferedImage backgroundImgBuf = new BufferedImage(700, 900, BufferedImage.TYPE_4BYTE_ABGR);
            //绘制背景+产品
            Graphics2D g = backgroundImgBuf.createGraphics();
            g.setColor(Color.WHITE);
            g.fillRect(0,0,700,900);
            g.drawImage(posterImgBuf,0,0,700, 700,null);
 
            g.drawImage(userPhotoImgBuf,20,720,80,80,null);
 
            g.drawImage(qrcordImgBuf,500,720,150,150,null);
 
            g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);
 
            g.setFont(new Font("WenQuanYi Micro Hei", Font.BOLD, 24));
            g.setColor(Color.BLACK);
            g.drawString(loginUser.getNickName()+"邀请你一起推广赚佣金",120,750);
 
            g.dispose();
            ImageIO.write(backgroundImgBuf, "png", new File(targetImgPath));
 
            return AjaxResult.buildSuccessInstance(urlPath);
        } catch (Exception e) {
            LogUtil.error("推广二维码生成错误:{}", e, "");
            return  AjaxResult.buildFailInstance("二维码生成失败");
        }
 
    }
 
 
    @ApiOperation(value = "获取下级列表", notes = "keywords=1 表示下级,keywords=2表示顾客")
    @PostMapping(value = "/getInvitationuserList")
    @ApiResponses({
            @ApiResponse(code = 200, message = "ok", response = SalesmanVo.class)
    })
    AjaxResult getInvitationuserList(@RequestBody BasePageQueryDto pageDto) {
        BizUser loginUser = redisUserLoginUtils.getLoginUser(BizUser.class);
        Page<SalesmanVo> page=new Page<>(pageDto.getPageNum(),pageDto.getPageSize());
        IPage<SalesmanVo> shopSalesmanApplyIPage = salesmanApplyDao.selectInvitationuserInPage(page, loginUser.getOpenId(),pageDto.getKeywords());
        AjaxResult result=AjaxResult.buildSuccessInstance(shopSalesmanApplyIPage.getRecords());
        return result;
    }
 
 
    @ApiOperation(value = "查询分销员中心信息", notes = "")
    @PostMapping(value = "/getSalesmanCenterInfo")
    @ApiResponses({
            @ApiResponse(code = 200, message = "ok", response = SalesmanCenterInfo.class)
    })
    AjaxResult getSalesmanCenterInfo() {
        BizUser loginUser = redisUserLoginUtils.getLoginUser(BizUser.class);
        SalesmanCenterInfo salesmanCenterInfo= salesmanApplyDao.selectSalesmanCenterInfo(loginUser.getOpenId());
        return AjaxResult.buildSuccessInstance(salesmanCenterInfo);
    }
 
    @ApiOperation(value = "查询分销员申请条件", notes = "")
    @PostMapping(value = "/getSalesmanApplyCondition")
    @ApiResponses({
            @ApiResponse(code = 200, message = "ok", response = SalesmanApplyCondition.class)
    })
    AjaxResult getSalesmanApplyCondition() {
        BizUser loginUser = redisUserLoginUtils.getLoginUser(BizUser.class);
        VerificationResult ableToBeAnSalesman = shopSalesmanApplyService.isAbleToBeAnSalesman(loginUser.getOpenId(),loginUser.getCompanyId());
        SalesmanApplyCondition applyConditionInfo=new SalesmanApplyCondition();
        applyConditionInfo.setIsAbleApply(ableToBeAnSalesman.isJudgeResult());
        applyConditionInfo.setMsg(ableToBeAnSalesman.getMsg());
 
        //申请条件
        BusParameterSettings applyCondition = busParameterSettingsDao.selectCompanyParamByCode(FenxiaoSettingConstant.FX_APPLY_CONDITION, loginUser.getCompanyId());
        switch (applyCondition.getParamValue()){
            case FenxiaoSettingConstant.FX_APPLY_CONDITION_WTJ:
                applyConditionInfo.setCondition("您已满足申请条件");
                break;
            case FenxiaoSettingConstant.FX_APPLY_CONDITION_XFZDCP:
                applyConditionInfo.setCondition("消费指定产品并确认收货");
                List<String> strings = StringUtils.strToColl(applyCondition.getParamValue1(), ",");
                List<Integer> ids = strings.stream().filter(i -> StringUtils.isNotBlank(i)).map(i -> Integer.parseInt(i + "")).distinct().collect(Collectors.toList());
                if(CollectionUtils.isNotEmpty(ids)){
                    applyConditionInfo.setProductList(shopProductDao.selectByIds(ids));
                }else{
                    return AjaxResult.buildFailInstance("未配置消费产品,请联系管理员");
                }
 
                break;
            case FenxiaoSettingConstant.FX_APPLY_CONDITION_XFRYCP:
                //判断用户是否有确认收货的产品
                applyConditionInfo.setCondition("消费任意产品并确认收货");
                break;
            case FenxiaoSettingConstant.FX_APPLY_CONDITION_XCZDJE:
                Double zdje=Double.parseDouble(applyCondition.getParamValue2());
                applyConditionInfo.setCondition("消费满"+zdje+"元确认收货");
                applyConditionInfo.setMinAmount(zdje);
        }
 
        return AjaxResult.buildSuccessInstance(applyConditionInfo);
    }
 
 
 
 
 
 
 
 
}