synchronized 使用场景(1)

 

这个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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值