这个bug是由于进入页面时候加载多个接口线程不同步导致的,使用
synchronized关键字来解决
/**
* 会员数据-统计列表
*
* @param programToken
* @param shopId
* @param staffId
* @param queryShopId
* @param startDate
* @param endDate
* @return
*/
public ApiResult findUserCountList(String programToken, Long shopId, Long staffId, int queryShopId, String startDate, String endDate, int pageNum, int pageSize) {
ApiResult apiResult = new ApiResult();
Map<String, Object> result = new HashMap<>();
if (StringUtils.isBlank(programToken)) {
apiResult.fail(ErrCode.OPENID_NULL.getIndex(), ErrCode.OPENID_NULL.getName());
return apiResult;
}
Optional.ofNullable(shopId).orElseThrow(() -> new MiniException(ErrCode.SHOPID_NOT_NULL));
Optional.ofNullable(staffId).orElseThrow(() -> new MiniException(ErrCode.STAFFID_NOT_NULL));
//验证权限
apiResult = validAuthorityBo.validUserAuthority(programToken, shopId, staffId, 1);
if (!apiResult.isSuccess()) {
return apiResult;
}
Date date1 = null;
Date date2 = null;
if (StringUtils.isEmpty(startDate) && !StringUtils.isEmpty(endDate)) {
apiResult.fail("请补全查询时间区间!");
return apiResult;
} else if (!StringUtils.isEmpty(startDate) && StringUtils.isEmpty(endDate)) {
apiResult.fail("请补全查询时间区间!");
return apiResult;
} else {
synchronized (this) {
try {
if (!com.miniapps.micro.utility.StringUtils.isEmpty(startDate)) {
date1 = SDF.parse(startDate + " 00:00:00");
}
if (!com.miniapps.micro.utility.StringUtils.isEmpty(endDate)) {
date2 = SDF.parse(endDate + " 23:59:59");
}
if (date1 != null && date1.after(date2)) {
apiResult.fail("开始时间不能在结束时间之后!");
return apiResult;
}
} catch (Exception var19) {
apiResult.fail("时间格式有误!");
return apiResult;
}
}
}
//判断是总部还是分店
if (shopId != 0) {//分店
queryShopId = shopId.intValue();
}
//获取所有的日期
List<String> dateList = null;
try {
dateList = DateUtil.findDates(startDate, endDate);
} catch (ParseException e) {
apiResult.fail("日期格式有误");
return apiResult;
}
List<DataUserResponse> list = new ArrayList<>();
DataUserResponse response = null;
Map<String, Object> dateMap = new HashMap<>();
for (String str : dateList) {
response = new DataUserResponse();
response.setCreateTime(str);
response.setUserTotal(0);
response.setNewUserTotal(0);
response.setBuyCardTotal(0);
response.setNewBuyCardTotal(0);
response.setConsumerTotal(0);
list.add(response);
dateMap.put(str, str);
}
List<DataUserCountResponse> list1 = userInfoService.countUserCountByShopId(programToken, queryShopId, date1, date2);
for (DataUserCountResponse response1 : list1) {
for (DataUserResponse dataUserResponse : list) {
if (response1.getCreateTime().equals(dataUserResponse.getCreateTime())) {
dataUserResponse.setUserTotal(dataUserResponse.getUserTotal() + response1.getCount());
dataUserResponse.setNewUserTotal(dataUserResponse.getNewUserTotal() + response1.getCount());
break;
}
}
}
List<DataUserCountResponse> list2 = officialOrderService.countUserCardCountByShopId(programToken, queryShopId, date1, date2);
for (DataUserCountResponse response2 : list2) {
for (DataUserResponse dataUserResponse : list) {
if (response2.getCreateTime().equals(dataUserResponse.getCreateTime())) {
dataUserResponse.setBuyCardTotal(dataUserResponse.getBuyCardTotal() + response2.getCount());
dataUserResponse.setNewBuyCardTotal(dataUserResponse.getNewBuyCardTotal() + response2.getCount());
break;
}
}
}
List<DataUserCountResponse> list3 = officialOrderService.countUserConsumerCountByShopId(programToken, queryShopId, date1, date2);
for (DataUserCountResponse response3 : list3) {
for (DataUserResponse dataUserResponse : list) {
if (response3.getCreateTime().equals(dataUserResponse.getCreateTime())) {
dataUserResponse.setConsumerTotal(dataUserResponse.getConsumerTotal() + response3.getCount());
break;
}
}
}
List<DataUserResponse> list4 = PageUtil.startPage(list, pageNum + 1, pageSize);
result.put("list", list4);
result.put("count", list.size());
apiResult.succ(result);
return apiResult;
}