Ver a proveniência

[系统][修复]:定时统计交易额任务执行的问题

release_toaliyun_real
hupeng há 7 anos
ascendente
cometimento
c597dfbcce
2 ficheiros alterados com 88 adições e 83 eliminações
  1. +80
    -75
      mallinkSchedule/src/main/java/com/iformall/schedule/DaliyAmountSchedule.java
  2. +8
    -8
      mallinkService/src/main/resources/mapper/WxOrderMapper.xml

+ 80
- 75
mallinkSchedule/src/main/java/com/iformall/schedule/DaliyAmountSchedule.java Ver ficheiro

@@ -23,18 +23,15 @@ import java.util.*;
public class DaliyAmountSchedule { public class DaliyAmountSchedule {
private final Logger logger = LoggerFactory.getLogger(this.getClass()); private final Logger logger = LoggerFactory.getLogger(this.getClass());



@Autowired @Autowired
private WxMallMapper wxMallMapper; private WxMallMapper wxMallMapper;


@Autowired @Autowired
private WxMerchantMapper wxMerchantMapper; private WxMerchantMapper wxMerchantMapper;



@Autowired @Autowired
private WxCouponOrderMapper wxCouponOrderMapper; private WxCouponOrderMapper wxCouponOrderMapper;



@Autowired @Autowired
private WxDateAmountRecordService wxDateAmountRecordService; private WxDateAmountRecordService wxDateAmountRecordService;


@@ -42,13 +39,64 @@ public class DaliyAmountSchedule {
private WxOrderMapper wxOrderMapper; private WxOrderMapper wxOrderMapper;





@Scheduled(cron = "0 0 1 * * ?") // 每天凌晨1点盘点前一天的数据
// @Scheduled(cron = "*/30 * * * * ?") // 测试10秒中一次
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class})
public void daliyAmountSchedule() {
public void daliyAmountMerchant(Date startDate,Date endDate,Calendar cal,WxMerchant merchant){
Map dateMap = new HashMap();
dateMap.put("startDate", startDate);
dateMap.put("endDate", endDate);
dateMap.put("merchantId", merchant.getId());

List<WxCouponOrder> list = wxCouponOrderMapper.findListOfOrderedByDate(dateMap);
logger.info("find " + list.size() + " coupon order from " + startDate + " to " + endDate);
int total_price = list.stream().mapToInt(p -> p.getCouponPrice()).sum();

logger.info("\nFound " + list.size() + " coupon orders \n" +
"for merchantId:" + merchant.getId() + "\n" +
"from " + startDate + " to " + endDate + "\n" +
"TOTAL ORDER=" + total_price);

WxDateAmountRecord dateAmountRecord = new WxDateAmountRecord();
dateAmountRecord.setPayPrice(total_price);
dateAmountRecord.setMerchantId(merchant.getId());
dateAmountRecord.setTenantId(merchant.getTenantId());
dateAmountRecord.setType(EnumDateAmtType.PAY_RECORD.getCode());
dateAmountRecord.setDate(startDate);
dateAmountRecord.setDayOfWeek(cal.get(Calendar.DAY_OF_WEEK));
dateAmountRecord.setMonth(cal.get(Calendar.MONTH));
dateAmountRecord.setWeekOfYear(cal.get(Calendar.WEEK_OF_YEAR));

wxDateAmountRecordService.saveAmount(dateAmountRecord);

list = wxCouponOrderMapper.findListOfVerifiedByDate(dateMap);
logger.info("\nfind " + list.size() + " coupon order from " + startDate + " to " + endDate);
total_price = list.stream().mapToInt(p -> p.getCouponPrice()).sum();
logger.info("\nFound " + list.size() + " coupon orders \n" +
"for merchantId:" + merchant.getId() + "\n" +
"from " + startDate + " to " + endDate + "\n" +
"TOTAL VERIFIED=" + total_price);

dateAmountRecord.setPayPrice(total_price);
dateAmountRecord.setType(EnumDateAmtType.VERIFY_RECORD.getCode());
wxDateAmountRecordService.saveAmount(dateAmountRecord);

Map microPayMap = wxOrderMapper.dayMicroPayAmountList(dateMap);
Long countMic = (Long) microPayMap.get("count");
BigDecimal totalPriceMic = (BigDecimal) microPayMap.get("total_price");
logger.info("\nFound " + countMic + " order " + "\n" +
"for merchantId:" + merchant.getId() + "\n" +
"from " + startDate + " to " + endDate + "\n" +
"TOTAL Payment=" + totalPriceMic);

dateAmountRecord.setPayPrice(totalPriceMic.intValue());
dateAmountRecord.setType(EnumDateAmtType.MICROPAY_RECORD.getCode());
wxDateAmountRecordService.saveAmount(dateAmountRecord);

}




@Scheduled(cron = "0 0 1 * * ?") // 每天凌晨1点盘点前一天的数据
//@Scheduled(cron = "*/30 * * * * ?") // 测试10秒中一次
public void daliyAmountSchedule() {
List<WxMall> mallList = wxMallMapper.findList(new WxMall()); List<WxMall> mallList = wxMallMapper.findList(new WxMall());


if (mallList.size()==0) { if (mallList.size()==0) {
@@ -56,16 +104,15 @@ public class DaliyAmountSchedule {
return; return;
} }


for (int i=0; i < mallList.size(); i++) {

WxMerchant merchant = new WxMerchant();
merchant.setTenantId(mallList.get(i).getTenantId());
merchant.setStatus(EnumMerchantStatus.VALID.getCode());
List<WxMerchant> merchantList = wxMerchantMapper.findList(merchant);
mallList.stream().forEach(mall->{
WxMerchant merchantQ = new WxMerchant();
merchantQ.setTenantId(mall.getTenantId());
merchantQ.setStatus(EnumMerchantStatus.VALID.getCode());
List<WxMerchant> merchantList = wxMerchantMapper.findList(merchantQ);


if (merchantList.size()==0) { if (merchantList.size()==0) {
logger.info("No merchant info found in mall" + mallList.get(i).getName());
continue;
logger.info("No merchant info found in mall" + mall.getName());
return;
} }


// 时间选择 // 时间选择
@@ -76,65 +123,23 @@ public class DaliyAmountSchedule {
cal.set(Calendar.SECOND, 0); cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0); cal.set(Calendar.MILLISECOND, 0);


cal.add(Calendar.DAY_OF_YEAR, 0);
Date endDate = cal.getTime();
cal.add(Calendar.DAY_OF_YEAR, -1);
Date startDate = cal.getTime();

for (int j=0; j < merchantList.size(); j++) {
merchant = merchantList.get(j);

Map dateMap = new HashMap();
dateMap.put("startDate", startDate);
dateMap.put("endDate", endDate);
dateMap.put("merchantId",merchant.getId());

List<WxCouponOrder> list = wxCouponOrderMapper.findListOfOrderedByDate(dateMap);
logger.info("find " + list.size() + " coupon order from " + startDate + " to " + endDate);
int total_price = list.stream().mapToInt(p->p.getCouponPrice()).sum();

logger.info("\nFound " + list.size() + " coupon orders \n" +
"for merchantId:" + merchant.getId() + "\n" +
"from " + startDate + " to " + endDate +"\n" +
"TOTAL ORDER=" + total_price);

WxDateAmountRecord dateAmountRecord = new WxDateAmountRecord();
dateAmountRecord.setPayPrice(total_price);
dateAmountRecord.setMerchantId(merchant.getId());
dateAmountRecord.setTenantId(merchant.getTenantId());
dateAmountRecord.setType(EnumDateAmtType.PAY_RECORD.getCode());
dateAmountRecord.setDate(startDate);
dateAmountRecord.setDayOfWeek(cal.get(Calendar.DAY_OF_WEEK));
dateAmountRecord.setMonth(cal.get(Calendar.MONTH));
dateAmountRecord.setWeekOfYear(cal.get(Calendar.WEEK_OF_YEAR));

wxDateAmountRecordService.saveAmount(dateAmountRecord);

list= wxCouponOrderMapper.findListOfVerifiedByDate(dateMap);
logger.info("\nfind " + list.size() + " coupon order from " + startDate + " to " + endDate);
total_price = list.stream().mapToInt(p->p.getCouponPrice()).sum();
logger.info("\nFound " + list.size() + " coupon orders \n" +
"for merchantId:" + merchant.getId() + "\n" +
"from " + startDate + " to " + endDate +"\n" +
"TOTAL VERIFIED=" + total_price);

dateAmountRecord.setPayPrice(total_price);
dateAmountRecord.setType(EnumDateAmtType.VERIFY_RECORD.getCode());
wxDateAmountRecordService.saveAmount(dateAmountRecord);

Map microPayMap = wxOrderMapper.dayMicroPayAmountList(dateMap);
Long countMic = (Long) microPayMap.get("count");
BigDecimal totalPriceMic = (BigDecimal) microPayMap.get("total_price");
logger.info("\nFound " + countMic + " order " + "\n" +
"for merchantId:" + merchant.getId() + "\n" +
"from " + startDate + " to " + endDate + "\n" +
"TOTAL Payment=" + totalPriceMic);

dateAmountRecord.setPayPrice(totalPriceMic.intValue());
dateAmountRecord.setType(EnumDateAmtType.MICROPAY_RECORD.getCode());
wxDateAmountRecordService.saveAmount(dateAmountRecord);

}
}
int day = 0; //查找过去30天是否有漏记
do {

cal.add(Calendar.DAY_OF_YEAR, 0);
Date endDate = cal.getTime();
cal.add(Calendar.DAY_OF_YEAR, -1);
Date startDate = cal.getTime();

merchantList.stream().filter(merchant->{
WxDateAmountRecord dateAmountRecordQ = new WxDateAmountRecord();
dateAmountRecordQ.setDate(startDate);
dateAmountRecordQ.setMerchantId(merchant.getId());
return (wxDateAmountRecordService.listAsPage(dateAmountRecordQ,1,1).getList().size()==0);
}).forEach(merchant -> {
daliyAmountMerchant(startDate, endDate, cal, merchant);
});
} while (day-- > -7); //补全最近7天的数据
});
} }
} }

+ 8
- 8
mallinkService/src/main/resources/mapper/WxOrderMapper.xml Ver ficheiro

@@ -220,13 +220,13 @@




<select id="dayMicroPayAmountList" parameterType="map" resultType="map"> <select id="dayMicroPayAmountList" parameterType="map" resultType="map">
select count(*) as count, IFNULL(sum(payment), 0) as total_price
from wx_order
select count(*) as count, IFNULL(sum(o.payment), 0) as total_price
from wx_order o
inner join wx_merchant_b_user bu on bu.id = product_id inner join wx_merchant_b_user bu on bu.id = product_id
inner join wx_merchant m on m.id = bu.merchant_id inner join wx_merchant m on m.id = bu.merchant_id
where `type` = 1 and `order_status` = 1
where o.`type` = 1 and o.`order_status` = 1
<if test=" null != tenantId "> <if test=" null != tenantId ">
and `tenant_id` = #{tenantId}
and o.`tenant_id` = #{tenantId}
</if> </if>


<if test=" null != merchantId "> <if test=" null != merchantId ">
@@ -234,7 +234,7 @@
</if> </if>


<if test=" null != cUserId "> <if test=" null != cUserId ">
and `c_user_id` = #{cUserId}
and o.`c_user_id` = #{cUserId}
</if> </if>


<if test=" null != bUserId "> <if test=" null != bUserId ">
@@ -242,15 +242,15 @@
</if> </if>


<if test=" null != productId "> <if test=" null != productId ">
and `product_id` = #{productId}
and o.`product_id` = #{productId}
</if> </if>


<if test="startDate != null"> <if test="startDate != null">
AND create_date &gt; #{startDate,jdbcType=TIMESTAMP}
AND o.create_date &gt; #{startDate,jdbcType=TIMESTAMP}
</if> </if>


<if test="endDate != null"> <if test="endDate != null">
AND create_date &lt; #{endDate,jdbcType=TIMESTAMP}
AND o.create_date &lt; #{endDate,jdbcType=TIMESTAMP}
</if> </if>
</select> </select>




Carregando…
Cancelar
Guardar