1.优化
Showing
7 changed files
with
122 additions
and
82 deletions
... | @@ -25,9 +25,6 @@ public class DataSyncMsg implements Serializable { | ... | @@ -25,9 +25,6 @@ public class DataSyncMsg implements Serializable { |
25 | // 其他属性 | 25 | // 其他属性 |
26 | private String extraData; | 26 | private String extraData; |
27 | 27 | ||
28 | /** 模板参数 */ | ||
29 | private TaskTemplateParam param; | ||
30 | |||
31 | /** | 28 | /** |
32 | * 消息体 | 29 | * 消息体 |
33 | */ | 30 | */ |
... | @@ -55,14 +52,4 @@ public class DataSyncMsg implements Serializable { | ... | @@ -55,14 +52,4 @@ public class DataSyncMsg implements Serializable { |
55 | private String description; | 52 | private String description; |
56 | } | 53 | } |
57 | 54 | ||
58 | @Data | ||
59 | @AllArgsConstructor | ||
60 | @NoArgsConstructor | ||
61 | public static class TaskTemplateParam { | ||
62 | /** 类别 */ | ||
63 | private String category; | ||
64 | /** 编码 */ | ||
65 | private String code; | ||
66 | } | ||
67 | |||
68 | } | 55 | } | ... | ... |
... | @@ -53,14 +53,4 @@ public class MemberProfileController { | ... | @@ -53,14 +53,4 @@ public class MemberProfileController { |
53 | MemberProfileDTO memberProfileDTO = this.memberProfileOperationService.updateMemberProfileAndMember(resources); | 53 | MemberProfileDTO memberProfileDTO = this.memberProfileOperationService.updateMemberProfileAndMember(resources); |
54 | return ResultInfo.success(memberProfileDTO); | 54 | return ResultInfo.success(memberProfileDTO); |
55 | } | 55 | } |
56 | |||
57 | @Log("修改会员属性并同步会员信息") | ||
58 | @PutMapping | ||
59 | @ApiOperation("修改会员属性并同步会员信息") | ||
60 | @AnonymousAccess | ||
61 | public ResultInfo updateMemberProfileAndMember_(@Validated @RequestBody MemberProfile resources) { | ||
62 | log.info("MemberProfileServiceImpl ==>> update ==>> resources ===>> [{}]",resources); | ||
63 | MemberProfileDTO memberProfileDTO = this.memberProfileOperationService.updateMemberProfileAndMember(resources); | ||
64 | return ResultInfo.success(memberProfileDTO); | ||
65 | } | ||
66 | } | 56 | } | ... | ... |
... | @@ -118,10 +118,10 @@ public class MemberProfileServiceImpl implements MemberProfileService { | ... | @@ -118,10 +118,10 @@ public class MemberProfileServiceImpl implements MemberProfileService { |
118 | // 检查会员是否存在 | 118 | // 检查会员是否存在 |
119 | this.checkMember(resources); | 119 | this.checkMember(resources); |
120 | // 真实姓名(加密) | 120 | // 真实姓名(加密) |
121 | String realName = resources.getRealname(); | 121 | /*String realName = resources.getRealname(); |
122 | if (StringUtils.isNotBlank(realName)) { | 122 | if (StringUtils.isNotBlank(realName)) { |
123 | resources.setRealname(Base64Util.encode(realName)); | 123 | resources.setRealname(Base64Util.encode(realName)); |
124 | } | 124 | }*/ |
125 | 125 | ||
126 | MemberProfile memberProfile = new MemberProfile(); | 126 | MemberProfile memberProfile = new MemberProfile(); |
127 | BeanUtils.copyProperties(resources,memberProfile); | 127 | BeanUtils.copyProperties(resources,memberProfile); | ... | ... |
1 | package com.topdraw.business.process.service.impl; | 1 | package com.topdraw.business.process.service.impl; |
2 | 2 | ||
3 | import com.alibaba.fastjson.JSON; | ||
4 | import com.alibaba.fastjson.JSONArray; | 3 | import com.alibaba.fastjson.JSONArray; |
5 | import com.alibaba.fastjson.JSONObject; | 4 | import com.alibaba.fastjson.JSONObject; |
6 | import com.topdraw.business.module.coupon.service.CouponService; | 5 | import com.topdraw.business.module.coupon.service.CouponService; |
... | @@ -32,11 +31,9 @@ import com.topdraw.business.module.task.template.domain.TaskTemplate; | ... | @@ -32,11 +31,9 @@ import com.topdraw.business.module.task.template.domain.TaskTemplate; |
32 | import com.topdraw.business.module.task.template.service.TaskTemplateService; | 31 | import com.topdraw.business.module.task.template.service.TaskTemplateService; |
33 | import com.topdraw.business.process.domian.*; | 32 | import com.topdraw.business.process.domian.*; |
34 | import com.topdraw.business.process.service.UserOperationService; | 33 | import com.topdraw.business.process.service.UserOperationService; |
35 | import com.topdraw.business.process.service.dto.TaskOperationQueryCriteria; | ||
36 | import com.topdraw.common.ResultInfo; | 34 | import com.topdraw.common.ResultInfo; |
37 | import com.topdraw.exception.BadRequestException; | 35 | import com.topdraw.exception.BadRequestException; |
38 | import com.topdraw.module.mq.DataSyncMsg; | 36 | import com.topdraw.module.mq.DataSyncMsg; |
39 | import com.topdraw.module.mq.EventType; | ||
40 | import com.topdraw.util.*; | 37 | import com.topdraw.util.*; |
41 | import lombok.extern.slf4j.Slf4j; | 38 | import lombok.extern.slf4j.Slf4j; |
42 | import org.springframework.beans.BeanUtils; | 39 | import org.springframework.beans.BeanUtils; |
... | @@ -96,35 +93,6 @@ public class TaskOperationServiceImpl implements TaskOperationService { | ... | @@ -96,35 +93,6 @@ public class TaskOperationServiceImpl implements TaskOperationService { |
96 | private static final Integer POINTS_MIN = 1; | 93 | private static final Integer POINTS_MIN = 1; |
97 | 94 | ||
98 | 95 | ||
99 | public static void main(String[] args) { | ||
100 | /*String s = "{\\\"eventType\\\":\\\"PLAY\\\",\\\"msg\\\":{\\\"description\\\":\\\"{\\\\\\\"playDuration\\\\\\\":60,\\\\\\\"time\\\\\\\":\\\\\\\"2022-04-01 00:10:09\\\\\\\",\\\\\\\"mediaId\\\\\\\":3433,\\\\\\\"mediaCode\\\\\\\":\\\\\\\"media_123\\\\\\\",\\\\\\\"mediaName\\\\\\\":\\\\\\\"白宫陷落\\\\\\\"}\\\",\\\"deviceType\\\":1,\\\"event\\\":8,\\\"memberCode\\\":\\\"1511275342935937024\\\",\\\"param\\\":\\\"{\\\\\\\"playDuration\\\\\\\":60}\\\"}}"; | ||
101 | TaskOperationQueryCriteria pointsQueryCriteria = new TaskOperationQueryCriteria(); | ||
102 | pointsQueryCriteria.setContent(s); | ||
103 | String s1 = JSON.toJSONString(pointsQueryCriteria); | ||
104 | DataSyncMsg dataSyncMsg = JSONUtil.parseMsg2Object(s1, DataSyncMsg.class); | ||
105 | System.out.println(dataSyncMsg);*/ | ||
106 | |||
107 | DataSyncMsg dataSyncMsg = new DataSyncMsg(); | ||
108 | dataSyncMsg.setEventType(EventType.PLAY.name()); | ||
109 | DataSyncMsg.MsgData msgData = new DataSyncMsg.MsgData(); | ||
110 | msgData.setEvent(8); // 类型 1-登录 2-观影 3-参加活动 4-订购 5-优享会员 6-签到 | ||
111 | msgData.setMemberCode("1511275342935937024"); | ||
112 | // 1:大屏;2:小屏(微信)3.小屏(xx) | ||
113 | msgData.setDeviceType(1); | ||
114 | String param = "{\"playDuration\":60}"; | ||
115 | msgData.setParam(param); | ||
116 | String des = "{\"playDuration\":60,\"time\":\"2022-04-01 00:10:09\",\"mediaId\":3433,\"mediaCode\":\"media_123\",\"mediaName\":\"白宫陷落\"}"; | ||
117 | msgData.setDescription(des); | ||
118 | dataSyncMsg.setMsg(msgData); | ||
119 | String a = JSON.toJSONString(dataSyncMsg); | ||
120 | TaskOperationQueryCriteria pointsQueryCriteria = new TaskOperationQueryCriteria(); | ||
121 | pointsQueryCriteria.setContent(a); | ||
122 | String s1 = JSON.toJSONString(pointsQueryCriteria); | ||
123 | System.out.println(s1); | ||
124 | DataSyncMsg dataSyncMsg1 = JSONUtil.parseMsg2Object(s1, DataSyncMsg.class); | ||
125 | System.out.println(dataSyncMsg1); | ||
126 | } | ||
127 | |||
128 | @Override | 96 | @Override |
129 | public ResultInfo dealTask(String content) { | 97 | public ResultInfo dealTask(String content) { |
130 | 98 | ||
... | @@ -490,7 +458,7 @@ public class TaskOperationServiceImpl implements TaskOperationService { | ... | @@ -490,7 +458,7 @@ public class TaskOperationServiceImpl implements TaskOperationService { |
490 | TempExp tempExp = new TempExp(); | 458 | TempExp tempExp = new TempExp(); |
491 | tempExp.setMemberId(memberId); | 459 | tempExp.setMemberId(memberId); |
492 | tempExp.setAppCode(msgData.getAppCode()); | 460 | tempExp.setAppCode(msgData.getAppCode()); |
493 | tempExp.setMemberId(msgData.getMemberId()); | 461 | tempExp.setMemberId(memberId); |
494 | tempExp.setMemberCode(msgData.getMemberCode()); | 462 | tempExp.setMemberCode(msgData.getMemberCode()); |
495 | tempExp.setItemId(msgData.getItemId()); | 463 | tempExp.setItemId(msgData.getItemId()); |
496 | tempExp.setAccountId(msgData.getAccountId()); | 464 | tempExp.setAccountId(msgData.getAccountId()); |
... | @@ -747,6 +715,15 @@ public class TaskOperationServiceImpl implements TaskOperationService { | ... | @@ -747,6 +715,15 @@ public class TaskOperationServiceImpl implements TaskOperationService { |
747 | Objects.nonNull(completionTime1) && | 715 | Objects.nonNull(completionTime1) && |
748 | completionTime1.toLocalDateTime().toLocalDate().compareTo(LocalDate.now()) == 0) { | 716 | completionTime1.toLocalDateTime().toLocalDate().compareTo(LocalDate.now()) == 0) { |
749 | 717 | ||
718 | // 任务重复类型 | ||
719 | Integer taskDailyReset = task.getTaskDailyReset(); | ||
720 | if (taskDailyReset == -1) { | ||
721 | return true; | ||
722 | } else if (currentActionAmount_ < taskDailyReset){ | ||
723 | return true; | ||
724 | } | ||
725 | |||
726 | |||
750 | return false; | 727 | return false; |
751 | 728 | ||
752 | // 未做,成功 | 729 | // 未做,成功 |
... | @@ -806,10 +783,7 @@ public class TaskOperationServiceImpl implements TaskOperationService { | ... | @@ -806,10 +783,7 @@ public class TaskOperationServiceImpl implements TaskOperationService { |
806 | // 更新任务完成情况 | 783 | // 更新任务完成情况 |
807 | this.doRefreshTrTaskProcess(trTaskProgress); | 784 | this.doRefreshTrTaskProcess(trTaskProgress); |
808 | 785 | ||
809 | // 行为量达标 | 786 | return true; |
810 | if (currentActionAmount.compareTo(actionAmount) == 0) { | ||
811 | return true; | ||
812 | } | ||
813 | } | 787 | } |
814 | 788 | ||
815 | return false; | 789 | return false; |
... | @@ -853,7 +827,7 @@ public class TaskOperationServiceImpl implements TaskOperationService { | ... | @@ -853,7 +827,7 @@ public class TaskOperationServiceImpl implements TaskOperationService { |
853 | if (Objects.nonNull(msgData.getParam())) { | 827 | if (Objects.nonNull(msgData.getParam())) { |
854 | 828 | ||
855 | String param = msgData.getParam(); | 829 | String param = msgData.getParam(); |
856 | Map<String,String> jsonObjectMap = JSONObject.parseObject(param,Map.class); | 830 | Map<String,String> jsonObjectMap = JSONObject.parseObject(param, Map.class); |
857 | Collection<String> values = jsonObjectMap.values(); | 831 | Collection<String> values = jsonObjectMap.values(); |
858 | 832 | ||
859 | for (Task task : taskList) { | 833 | for (Task task : taskList) { |
... | @@ -882,12 +856,45 @@ public class TaskOperationServiceImpl implements TaskOperationService { | ... | @@ -882,12 +856,45 @@ public class TaskOperationServiceImpl implements TaskOperationService { |
882 | taskList1.add(task); | 856 | taskList1.add(task); |
883 | break; | 857 | break; |
884 | 858 | ||
859 | // 参加活动 | ||
860 | case TaskTemplateType.TYPE_3: | ||
861 | String activityCode = values_0.get(0).toString(); | ||
862 | String activityCode_ = values.toArray()[0].toString(); | ||
863 | if (activityCode_.equalsIgnoreCase(activityCode)) { | ||
864 | taskList1.add(task); | ||
865 | } | ||
866 | break; | ||
867 | |||
885 | // 订购 | 868 | // 订购 |
886 | case TaskTemplateType.TYPE_4: | 869 | case TaskTemplateType.TYPE_4: |
887 | if (values_0.containsAll(values)) | 870 | if (values_0.containsAll(values)) |
888 | taskList1.add(task); | 871 | taskList1.add(task); |
889 | break; | 872 | break; |
890 | 873 | ||
874 | // 签到 | ||
875 | case TaskTemplateType.TYPE_6: | ||
876 | Integer sign0 = (Integer)values_0.get(0); | ||
877 | Integer sign1 = (Integer)values_0.get(1); | ||
878 | List<Integer> signi0List = Arrays.asList(sign0, sign1); | ||
879 | String signs0 = values.toArray()[0].toString(); | ||
880 | Integer signi0 = Integer.valueOf(signs0); | ||
881 | boolean signb0 = UcListUtils.compareIntegerList(signi0, signi0List); | ||
882 | if (signb0) | ||
883 | taskList1.add(task); | ||
884 | break; | ||
885 | |||
886 | // 播放记录 | ||
887 | case TaskTemplateType.TYPE_8: | ||
888 | Integer play0 = (Integer)values_0.get(0); | ||
889 | Integer play1 = (Integer)values_0.get(1); | ||
890 | List<Integer> playList = Arrays.asList(play0, play1); | ||
891 | String s0 = values.toArray()[0].toString(); | ||
892 | Integer i0 = Integer.valueOf(s0); | ||
893 | boolean b0 = UcListUtils.compareIntegerList(i0, playList); | ||
894 | if (b0) | ||
895 | taskList1.add(task); | ||
896 | break; | ||
897 | |||
891 | default: | 898 | default: |
892 | break; | 899 | break; |
893 | } | 900 | } |
... | @@ -969,11 +976,17 @@ public class TaskOperationServiceImpl implements TaskOperationService { | ... | @@ -969,11 +976,17 @@ public class TaskOperationServiceImpl implements TaskOperationService { |
969 | String templateParams = taskTemplate.getParams(); | 976 | String templateParams = taskTemplate.getParams(); |
970 | if(StringUtils.hasText(templateParams)) { | 977 | if(StringUtils.hasText(templateParams)) { |
971 | String templateParamsUpperCase = templateParams.toUpperCase(); | 978 | String templateParamsUpperCase = templateParams.toUpperCase(); |
972 | boolean b = jsonObject.containsKey(templateParamsUpperCase); | 979 | Set<String> keySet = jsonObject.keySet(); |
973 | if (b) | 980 | for (String key : keySet) { |
974 | return taskTemplate; | 981 | String s = key.toUpperCase(); |
982 | if (s.equals(templateParamsUpperCase)) { | ||
983 | return taskTemplate; | ||
984 | } | ||
985 | continue; | ||
986 | } | ||
975 | } | 987 | } |
976 | } | 988 | |
989 | } | ||
977 | 990 | ||
978 | } | 991 | } |
979 | 992 | ... | ... |
... | @@ -146,19 +146,19 @@ public class MemberOperationServiceImpl implements MemberOperationService { | ... | @@ -146,19 +146,19 @@ public class MemberOperationServiceImpl implements MemberOperationService { |
146 | return Objects.nonNull(memberId) ? memberDTO : null; | 146 | return Objects.nonNull(memberId) ? memberDTO : null; |
147 | } | 147 | } |
148 | 148 | ||
149 | @CachePut(key = "#resources.id") | 149 | // @CachePut(key = "#resources.id") |
150 | @Override | 150 | @Override |
151 | public MemberDTO doUpdateMemberExp(Member resources) { | 151 | public MemberDTO doUpdateMemberExp(Member resources) { |
152 | return this.update(resources); | 152 | return this.update(resources); |
153 | } | 153 | } |
154 | 154 | ||
155 | @CachePut(key = "#resources.id") | 155 | // @CachePut(key = "#resources.id") |
156 | @Override | 156 | @Override |
157 | public MemberDTO doUpdateMemberPoints(Member resources) { | 157 | public MemberDTO doUpdateMemberPoints(Member resources) { |
158 | return this.memberService.doUpdateMemberPoints(resources); | 158 | return this.memberService.doUpdateMemberPoints(resources); |
159 | } | 159 | } |
160 | 160 | ||
161 | @CachePut(key = "#resources.id") | 161 | // @CachePut(key = "#resources.id") |
162 | @Override | 162 | @Override |
163 | public MemberDTO doUpdateMemberCoupon(Member member) { | 163 | public MemberDTO doUpdateMemberCoupon(Member member) { |
164 | return this.update(member); | 164 | return this.update(member); | ... | ... |
... | @@ -18,7 +18,7 @@ public class TaskOperationControllerTest extends BaseTest { | ... | @@ -18,7 +18,7 @@ public class TaskOperationControllerTest extends BaseTest { |
18 | TaskOperationController taskOperationController; | 18 | TaskOperationController taskOperationController; |
19 | 19 | ||
20 | @Test | 20 | @Test |
21 | public void dealTask() { | 21 | public void activity() { |
22 | try { | 22 | try { |
23 | /* DataSyncMsg dataSyncMsg = new DataSyncMsg(); | 23 | /* DataSyncMsg dataSyncMsg = new DataSyncMsg(); |
24 | dataSyncMsg.setEventType(EventType.VIEWING.name()); | 24 | dataSyncMsg.setEventType(EventType.VIEWING.name()); |
... | @@ -35,17 +35,63 @@ public class TaskOperationControllerTest extends BaseTest { | ... | @@ -35,17 +35,63 @@ public class TaskOperationControllerTest extends BaseTest { |
35 | pointsQueryCriteria.setContent(s); | 35 | pointsQueryCriteria.setContent(s); |
36 | String s1 = JSON.toJSONString(pointsQueryCriteria); | 36 | String s1 = JSON.toJSONString(pointsQueryCriteria); |
37 | System.out.println(s1);*/ | 37 | System.out.println(s1);*/ |
38 | String s = "{\n" + | 38 | String s = "{\"eventType\":\"ACTIVITY\",\"msg\":{\"deviceType\":1,\"event\":3,\"memberCode\":\"1511275342935937024\",\"param\":\"{\\\"ACTIVITY_CODE\\\":3}\"}}"; |
39 | " \"eventType\": \"play\",\n" + | 39 | TaskOperationQueryCriteria pointsQueryCriteria = new TaskOperationQueryCriteria(); |
40 | " \"msg\": {\n" + | 40 | pointsQueryCriteria.setContent(s); |
41 | " \"description\": \"{\\\"playDuration\\\":60,\\\"time\\\":\\\"2022-04-01 00:10:09\\\",\\\"mediaId\\\":3433,\\\"mediaCode\\\":\\\"media_123\\\",\\\"mediaName\\\":\\\"白宫陷落\\\"}\",\n" + | 41 | String s1 = JSON.toJSONString(pointsQueryCriteria); |
42 | " \"deviceType\": 1,\n" + | 42 | this.taskOperationController.dealTask(pointsQueryCriteria); |
43 | " \"event\": 8,\n" + | 43 | } catch (Exception e) { |
44 | " \"mediaId\": 3433,\n" + | 44 | e.printStackTrace(); |
45 | " \"memberCode\": \"1511275342935937024\",\n" + | 45 | } |
46 | " \"param\":\\\"{\\\"playDuration\\\":60}\\\"\n" + | 46 | } |
47 | " }\n" + | 47 | |
48 | "}"; | 48 | @Test |
49 | public void sign() { | ||
50 | try { | ||
51 | /* DataSyncMsg dataSyncMsg = new DataSyncMsg(); | ||
52 | dataSyncMsg.setEventType(EventType.VIEWING.name()); | ||
53 | DataSyncMsg.MsgData msgData = new DataSyncMsg.MsgData(); | ||
54 | msgData.setEvent(2); // 类型 1-登录 2-观影 3-参加活动 4-订购 5-优享会员 6-签到 | ||
55 | msgData.setRemarks("remark"); | ||
56 | msgData.setMemberId(20592L); | ||
57 | // 1:大屏;2:小屏(微信)3.小屏(xx) | ||
58 | msgData.setDeviceType(1); | ||
59 | msgData.setAppCode("WEI_XIN_GOLD_PANDA"); | ||
60 | dataSyncMsg.setMsg(msgData); | ||
61 | String s = JSON.toJSONString(dataSyncMsg); | ||
62 | TaskOperationQueryCriteria pointsQueryCriteria = new TaskOperationQueryCriteria(); | ||
63 | pointsQueryCriteria.setContent(s); | ||
64 | String s1 = JSON.toJSONString(pointsQueryCriteria); | ||
65 | System.out.println(s1);*/ | ||
66 | String s = "{\"eventType\":\"SIGN\",\"msg\":{\"deviceType\":1,\"event\":6,\"memberCode\":\"1511275342935937024\",\"param\":\"{\\\"SIGN\\\":3}\"}}"; | ||
67 | TaskOperationQueryCriteria pointsQueryCriteria = new TaskOperationQueryCriteria(); | ||
68 | pointsQueryCriteria.setContent(s); | ||
69 | String s1 = JSON.toJSONString(pointsQueryCriteria); | ||
70 | this.taskOperationController.dealTask(pointsQueryCriteria); | ||
71 | } catch (Exception e) { | ||
72 | e.printStackTrace(); | ||
73 | } | ||
74 | } | ||
75 | |||
76 | @Test | ||
77 | public void play() { | ||
78 | try { | ||
79 | /* DataSyncMsg dataSyncMsg = new DataSyncMsg(); | ||
80 | dataSyncMsg.setEventType(EventType.VIEWING.name()); | ||
81 | DataSyncMsg.MsgData msgData = new DataSyncMsg.MsgData(); | ||
82 | msgData.setEvent(2); // 类型 1-登录 2-观影 3-参加活动 4-订购 5-优享会员 6-签到 | ||
83 | msgData.setRemarks("remark"); | ||
84 | msgData.setMemberId(20592L); | ||
85 | // 1:大屏;2:小屏(微信)3.小屏(xx) | ||
86 | msgData.setDeviceType(1); | ||
87 | msgData.setAppCode("WEI_XIN_GOLD_PANDA"); | ||
88 | dataSyncMsg.setMsg(msgData); | ||
89 | String s = JSON.toJSONString(dataSyncMsg); | ||
90 | TaskOperationQueryCriteria pointsQueryCriteria = new TaskOperationQueryCriteria(); | ||
91 | pointsQueryCriteria.setContent(s); | ||
92 | String s1 = JSON.toJSONString(pointsQueryCriteria); | ||
93 | System.out.println(s1);*/ | ||
94 | String s = "{\"eventType\":\"PLAY\",\"msg\":{\"description\":\"{\\\"playDuration\\\":60,\\\"time\\\":\\\"2022-04-01 00:10:09\\\",\\\"mediaId\\\":3433,\\\"mediaCode\\\":\\\"media_123\\\",\\\"mediaName\\\":\\\"白宫陷落\\\"}\",\"deviceType\":1,\"event\":8,\"memberCode\":\"1511275342935937024\",\"param\":\"{\\\"playDuration\\\":60}\"}}"; | ||
49 | TaskOperationQueryCriteria pointsQueryCriteria = new TaskOperationQueryCriteria(); | 95 | TaskOperationQueryCriteria pointsQueryCriteria = new TaskOperationQueryCriteria(); |
50 | pointsQueryCriteria.setContent(s); | 96 | pointsQueryCriteria.setContent(s); |
51 | String s1 = JSON.toJSONString(pointsQueryCriteria); | 97 | String s1 = JSON.toJSONString(pointsQueryCriteria); | ... | ... |
-
Please register or sign in to post a comment