Просмотр исходного кода

Merge branch 'dev' of http://git.ycjcjy.com/zhiyuxing/estateagents into dev

魏超 4 лет назад
Родитель
Сommit
2b5a5a9e94

+ 27
- 0
src/main/java/com/huiju/estateagents/third/controller/WxRedpackController.java Просмотреть файл

@@ -86,4 +86,31 @@ public class WxRedpackController {
86 86
             return ResponseBean.error("程序出错请联系运营人员",ResponseBean.ERROR_ILLEGAL_PARAMS);
87 87
         }
88 88
     }
89
+
90
+    /**
91
+     * 帮他助力 接口
92
+     * @param mpAppid
93
+     * @param mpPersonId
94
+     * @param request
95
+     * @return
96
+     */
97
+    @PostMapping("/third/activity/{mpAppid}/help")
98
+    public ResponseBean helpActivity(@PathVariable String mpAppid, @RequestParam String mpPersonId, @RequestParam String parentMpPersonId ,HttpServletRequest request) {
99
+        //获取H5项目相关信息
100
+        String xAppid = request.getHeader("x-appid");
101
+        QueryWrapper<TaThirdPartyMiniappConfig> taThirdPartyMiniappConfigQueryWrapper = new QueryWrapper<>();
102
+
103
+        taThirdPartyMiniappConfigQueryWrapper.eq("appid", xAppid);
104
+        TaThirdPartyMiniappConfig taThirdPartyMiniappConfig = iTaThirdPartyMiniappConfigService.getOne(taThirdPartyMiniappConfigQueryWrapper);
105
+        if (null == taThirdPartyMiniappConfig){
106
+            return ResponseBean.error("不存在的H5活动",ResponseBean.ERROR_UNAVAILABLE);
107
+        }
108
+        try {
109
+            ResponseBean res = iTaThirdPartyMiniappConfigService.helpActivity(mpAppid, mpPersonId, parentMpPersonId, taThirdPartyMiniappConfig.getTargetId(),taThirdPartyMiniappConfig.getOrgId());
110
+            return res;
111
+        }catch (Exception e){
112
+            e.printStackTrace();
113
+            return ResponseBean.error("程序出错请联系运营人员",ResponseBean.ERROR_ILLEGAL_PARAMS);
114
+        }
115
+    }
89 116
 }

+ 11
- 0
src/main/java/com/huiju/estateagents/third/service/ITaThirdPartyMiniappConfigService.java Просмотреть файл

@@ -42,4 +42,15 @@ public interface ITaThirdPartyMiniappConfigService extends IService<TaThirdParty
42 42
 	 * @param orgId
43 43
 	 */
44 44
 	ResponseBean participateActivity(String mpAppid, String mpPersonId, String targetId, Integer orgId);
45
+
46
+	/**
47
+	 * 助力活动接口
48
+	 * @param mpAppid
49
+	 * @param mpPersonId
50
+	 * @param parentMpPersonId
51
+	 * @param targetId
52
+	 * @param orgId
53
+	 * @return
54
+	 */
55
+	ResponseBean helpActivity(String mpAppid, String mpPersonId, String parentMpPersonId, String targetId, Integer orgId);
45 56
 }

+ 132
- 10
src/main/java/com/huiju/estateagents/third/service/impl/TaThirdPartyMiniappConfigServiceImpl.java Просмотреть файл

@@ -7,14 +7,8 @@ import com.huiju.estateagents.common.CommConstant;
7 7
 import com.huiju.estateagents.common.MD5Utils;
8 8
 import com.huiju.estateagents.drainage.entity.TaDrainage;
9 9
 import com.huiju.estateagents.drainage.mapper.TaDrainageMapper;
10
-import com.huiju.estateagents.redpack.entity.TaMpMiniapp;
11
-import com.huiju.estateagents.redpack.entity.TaMpPerson;
12
-import com.huiju.estateagents.redpack.entity.TaRedPacket;
13
-import com.huiju.estateagents.redpack.entity.TaRedPacketPerson;
14
-import com.huiju.estateagents.redpack.mapper.TaMpMiniappMapper;
15
-import com.huiju.estateagents.redpack.mapper.TaMpPersonMapper;
16
-import com.huiju.estateagents.redpack.mapper.TaRedPacketMapper;
17
-import com.huiju.estateagents.redpack.mapper.TaRedPacketPersonMapper;
10
+import com.huiju.estateagents.redpack.entity.*;
11
+import com.huiju.estateagents.redpack.mapper.*;
18 12
 import com.huiju.estateagents.third.entity.TaThirdPartyMiniappConfig;
19 13
 import com.huiju.estateagents.third.mapper.TaThirdPartyMiniappConfigMapper;
20 14
 import com.huiju.estateagents.third.service.ITaThirdPartyMiniappConfigService;
@@ -23,6 +17,8 @@ import org.springframework.beans.factory.annotation.Autowired;
23 17
 import org.springframework.stereotype.Service;
24 18
 
25 19
 import java.time.LocalDateTime;
20
+import java.util.List;
21
+import java.util.stream.Collectors;
26 22
 
27 23
 /**
28 24
  * <p>
@@ -53,6 +49,15 @@ public class TaThirdPartyMiniappConfigServiceImpl extends ServiceImpl<TaThirdPar
53 49
 	@Autowired
54 50
 	private TaRedPacketPersonMapper taRedPacketPersonMapper;
55 51
 
52
+	@Autowired
53
+	private TaRedPacketHelpMapper taRedPacketHelpMapper;
54
+
55
+	@Autowired
56
+	private TaRedPacketHistoryMapper taRedPacketHistoryMapper;
57
+
58
+	@Autowired
59
+	private TaRedPacketMoneyMapper taRedPacketmonetMapper;
60
+
56 61
 	/**
57 62
 	 * 校验是否合法第三方接口调用
58 63
 	 *
@@ -152,6 +157,19 @@ public class TaThirdPartyMiniappConfigServiceImpl extends ServiceImpl<TaThirdPar
152 157
 			return ResponseBean.error("此活动未开始",ResponseBean.ERROR_ILLEGAL_PARAMS);
153 158
 		}
154 159
 
160
+		//参与活动
161
+		TaRedPacketPerson taRedPacketPerson = saveRedPacketPerson(mpPersonId,taRedPacket,orgId);
162
+
163
+		return ResponseBean.success(taRedPacketPerson);
164
+	}
165
+
166
+	/**
167
+	 * 参与活动方法--悲观锁
168
+	 * @param mpPersonId
169
+	 * @param taRedPacket
170
+	 * @param orgId
171
+	 */
172
+	private synchronized TaRedPacketPerson saveRedPacketPerson(String mpPersonId, TaRedPacket taRedPacket, Integer orgId) {
155 173
 		//查看这个人绑定的小程序用户
156 174
 		TaMpMiniapp taMpMiniapp = taMpMiniappMapper.selectOne(new QueryWrapper<TaMpMiniapp>().eq("mp_person_id", mpPersonId));
157 175
 
@@ -163,7 +181,7 @@ public class TaThirdPartyMiniappConfigServiceImpl extends ServiceImpl<TaThirdPar
163 181
 		queryWrapper.eq("miniapp_person_id",taMpMiniapp.getMiniappPersonId());
164 182
 		TaRedPacketPerson redPacketPerson = taRedPacketPersonMapper.selectOne(queryWrapper);
165 183
 		if (null != redPacketPerson){
166
-			return ResponseBean.success(redPacketPerson);
184
+			return redPacketPerson;
167 185
 		}
168 186
 
169 187
 		//参与活动
@@ -175,6 +193,110 @@ public class TaThirdPartyMiniappConfigServiceImpl extends ServiceImpl<TaThirdPar
175 193
 		taRedPacketPerson.setMpPersonId(mpPersonId);
176 194
 		taRedPacketPerson.setOrgId(orgId);
177 195
 		taRedPacketPersonMapper.insert(taRedPacketPerson);
178
-		return ResponseBean.success(taRedPacketPerson);
196
+		return taRedPacketPerson;
197
+	}
198
+
199
+	/**
200
+	 * 助力活动接口
201
+	 *
202
+	 * @param mpAppid 公众号appid
203
+	 * @param mpPersonId 公众号personId
204
+	 * @param parentMpPersonId 公众号被助力者的peisonId
205
+	 * @param drainageId H5活动id
206
+	 * @param orgId 小程序id
207
+	 * @return
208
+	 */
209
+	@Override
210
+	public ResponseBean helpActivity(String mpAppid, String mpPersonId, String parentMpPersonId, String drainageId, Integer orgId) {
211
+		//第一步根据drainggeid查询出红包表对应的记录
212
+		TaDrainage taDrainage = taDrainageMapper.selectById(drainageId);
213
+		//第二步查询出这个H5对应的活动
214
+		TaRedPacket taRedPacket = taRedPacketMapper.selectById(taDrainage.getActivityId());
215
+		//判断这个活动的过期时间
216
+		if (LocalDateTime.now().isAfter(taRedPacket.getEndDate())){
217
+			return ResponseBean.error(taRedPacket.getActivityEndTip(),ResponseBean.ERROR_ILLEGAL_PARAMS);
218
+		}
219
+		if (LocalDateTime.now().isBefore(taRedPacket.getStartDate())){
220
+			return ResponseBean.error("此活动未开始",ResponseBean.ERROR_ILLEGAL_PARAMS);
221
+		}
222
+
223
+		//查看这个人绑定的小程序用户
224
+		TaMpMiniapp taMpMiniapp = taMpMiniappMapper.selectOne(new QueryWrapper<TaMpMiniapp>().eq("mp_person_id", mpPersonId));
225
+
226
+		//查询被助力者的绑定的小程序用户
227
+		TaMpMiniapp parentMpMiniapp = taMpMiniappMapper.selectOne(new QueryWrapper<TaMpMiniapp>().eq("mp_person_id", parentMpPersonId));
228
+
229
+		//根据活动id查询这个活动的助力规则
230
+		TaRedPacketHelp taRedPacketHelp = taRedPacketHelpMapper.selectById(taDrainage.getActivityId());
231
+		
232
+		//助力
233
+		String result = saveRedPacketHistory(taMpMiniapp, parentMpMiniapp, taRedPacketHelp, orgId);
234
+		if (result.equals("success")){
235
+			ResponseBean.error(result,ResponseBean.ERROR_ILLEGAL_PARAMS);
236
+		}
237
+
238
+		return ResponseBean.success(taRedPacketHelp.getSuccessTip());
239
+	}
240
+
241
+	private synchronized String saveRedPacketHistory(TaMpMiniapp taMpMiniapp, TaMpMiniapp parentMpMiniapp, TaRedPacketHelp taRedPacketHelp, Integer orgId) {
242
+		//查看我是否助力过
243
+		QueryWrapper<TaRedPacketHistory> queryWrapper = new QueryWrapper();
244
+		queryWrapper.eq("activity_id",taRedPacketHelp.getActivityId());
245
+		queryWrapper.eq("org_id",orgId);
246
+		queryWrapper.eq("from_mp_person",taMpMiniapp.getMpPersonId());
247
+		queryWrapper.eq("from_miniapp_person",taMpMiniapp.getMiniappPersonId());
248
+		List<TaRedPacketHistory> taRedPacketHistories = taRedPacketHistoryMapper.selectList(queryWrapper);
249
+		//校验总助力次数
250
+		if (taRedPacketHistories.size() >= taRedPacketHelp.getLimitNumPerPerson()){
251
+			return taRedPacketHelp.getLimitPerPersonIllegalTip();
252
+		}
253
+		//校验单人每日助力次数限制
254
+		List<TaRedPacketHistory> dayHelpList = taRedPacketHistories.stream().filter(e -> e.getCreateDate().toLocalDate().equals(LocalDateTime.now().toLocalDate())).collect(Collectors.toList());
255
+		if (dayHelpList.size() >= taRedPacketHelp.getLimitNumPerDay()){
256
+			return taRedPacketHelp.getLimitPerDayIllegalTip();
257
+		}
258
+		//校验为同一人助力次数限制
259
+		List<TaRedPacketHistory> eachHelpList = taRedPacketHistories.stream().filter(e -> e.getTargetMiniappPerson().equals(parentMpMiniapp.getMiniappPersonId())).collect(Collectors.toList());
260
+		if (eachHelpList.size() >= taRedPacketHelp.getLimitNumForEachPerson()){
261
+			return taRedPacketHelp.getLimitForEachPersonIllegalTip();
262
+		}
263
+
264
+		//校验还有此次助力成功后是否需要发送红包
265
+		QueryWrapper<TaRedPacketHistory> parentRedPacketHistory = new QueryWrapper();
266
+		parentRedPacketHistory.eq("activity_id",taRedPacketHelp.getActivityId());
267
+		parentRedPacketHistory.eq("org_id",orgId);
268
+		parentRedPacketHistory.eq("target_mp_person",parentMpMiniapp.getMpPersonId());
269
+		parentRedPacketHistory.eq("target_miniapp_person",parentMpMiniapp.getMiniappPersonId());
270
+		List<TaRedPacketHistory> parentRedPacketHistories = taRedPacketHistoryMapper.selectList(parentRedPacketHistory);
271
+		Boolean redPackageState = parentRedPacketHistories.size() + 1 <= taRedPacketHelp.getHelpSuccesPersons();
272
+
273
+
274
+		//助力
275
+		TaRedPacketHistory taRedPacketHistory = new TaRedPacketHistory();
276
+		taRedPacketHistory.setActivityId(taRedPacketHelp.getActivityId());
277
+		taRedPacketHistory.setCreateDate(LocalDateTime.now());
278
+		taRedPacketHistory.setFromMiniappPerson(taMpMiniapp.getMiniappPersonId());
279
+		taRedPacketHistory.setFromMpPerson(taMpMiniapp.getMpPersonId());
280
+		taRedPacketHistory.setOrgId(orgId);
281
+		taRedPacketHistory.setTargetMiniappPerson(parentMpMiniapp.getMiniappPersonId());
282
+		taRedPacketHistory.setTargetMpPerson(parentMpMiniapp.getMpPersonId());
283
+		taRedPacketHistoryMapper.insert(taRedPacketHistory);
284
+		if (redPackageState){
285
+			//发送红包
286
+			sendRedPackage(taMpMiniapp, parentMpMiniapp, taRedPacketHelp, orgId);
287
+		}
288
+		return "success";
289
+	}
290
+
291
+	/**
292
+	 * 发送红包
293
+	 * @param taMpMiniapp
294
+	 * @param parentMpMiniapp
295
+	 * @param taRedPacketHelp
296
+	 * @param orgId
297
+	 */
298
+	private synchronized void sendRedPackage(TaMpMiniapp taMpMiniapp, TaMpMiniapp parentMpMiniapp, TaRedPacketHelp taRedPacketHelp, Integer orgId) {
299
+		TaRedPacketMoney taRedPacketMoney = taRedPacketmonetMapper.selectById(taRedPacketHelp.getActivityId());
300
+		
179 301
 	}
180 302
 }

+ 3
- 6
src/test/java/com/huiju/estateagents/WxPayTest.java Просмотреть файл

@@ -1,17 +1,12 @@
1 1
 package com.huiju.estateagents;
2 2
 
3
-import com.huiju.estateagents.common.wxpay.WXPayUtil;
4
-import org.apache.commons.codec.digest.DigestUtils;
5 3
 import org.junit.Test;
6 4
 import org.junit.runner.RunWith;
7 5
 import org.springframework.boot.test.context.SpringBootTest;
8 6
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
9 7
 import org.springframework.transaction.annotation.Transactional;
10
-import sun.misc.BASE64Decoder;
11 8
 
12
-import javax.crypto.Cipher;
13
-import javax.crypto.spec.SecretKeySpec;
14
-import java.util.Map;
9
+import java.time.LocalDateTime;
15 10
 
16 11
 @RunWith(SpringJUnit4ClassRunner.class)
17 12
 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@@ -34,5 +29,7 @@ public class WxPayTest {
34 29
 //            e.printStackTrace();
35 30
 //        }
36 31
 
32
+        System.out.println(LocalDateTime.now().toLocalDate().equals(LocalDateTime.now().toLocalDate()));
33
+
37 34
     }
38 35
 }