package com.yaochen.boss.job.unuse;
import java.util.List;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import com.yaochen.boss.job.component.BusiComponent;
import com.yaochen.boss.job.component.JobComponent;
import com.yaochen.myquartz.Job2;
import com.yaochen.myquartz.Job2ExecutionContext;
import com.ycsoft.beans.core.common.CDoneCode;
import com.ycsoft.beans.core.common.CDoneCodeDetail;
import com.ycsoft.beans.prod.PProd;
import com.ycsoft.commons.constants.BusiCodeConstants;
import com.ycsoft.commons.constants.StatusConstants;
import com.ycsoft.commons.constants.SystemConstants;
import com.ycsoft.commons.helper.LoggerHelper;
import com.ycsoft.commons.helper.StringHelper;
/**
* 流水记录实时处理:
* 1、包含产品包含计算
* 2、发送冲正和退款后的自动促销回退
* 3、无缴费的促销自动执行判断
* 4、客户基础信息发送变更,修改基本包自动赠送的资源(重置产品资源)
* 5、9005补入非公用账目充值的账目异动数据
*/
@Service
@Scope("prototype")
public class DealDoneCodeJob implements Job2 {
private final Logger logger = LoggerFactory.getLogger(getClass());
private BusiComponent busiComponent;
private JobComponent jobComponent;
@Override
public void execute(Job2ExecutionContext context)
throws JobExecutionException {
try {
List<CDoneCode> doneCodeList = jobComponent.queryDoneCode();
if(doneCodeList.size() > 0){
dealDoneCode(doneCodeList);
}
} catch (Exception e){
LoggerHelper.error(this.getClass(), "系统错误", e);
}
}
/**
* * 1、包含产品包含计算
* 2、发送冲正和退款后的自动促销回退
* 3、无缴费的促销自动执行判断
* 4、客户基础信息发送变更,修改基本包自动赠送的资源(重置产品资源)
* 5、9005补入非公用账目充值的账目异动数据
* @param doneCodeList
* @throws Exception
*/
public void dealDoneCode(List<CDoneCode> doneCodeList)throws Exception{
long maxDoneCode =0;
logger.info("处理业务流水","启动first_donecode: " + doneCodeList.get(0).getDone_code());
for (CDoneCode cDoneCode:doneCodeList){
List<CDoneCodeDetail> detailList = jobComponent.queryDoneCodeDetail(cDoneCode.getDone_code());
String busiCode = cDoneCode.getBusi_code();
if (busiCode.equals(BusiCodeConstants.PROD_PACKAGE_ORDER) ||
busiCode.equals(BusiCodeConstants.PROD_TERMINATE) ||
busiCode.equals(BusiCodeConstants.JOB_PROD_STOP) ||
busiCode.equals(BusiCodeConstants.PROMOTION_AUTO) ||
busiCode.equals(BusiCodeConstants.PROMOTION_CANCEL) ||
busiCode.equals(BusiCodeConstants.USER_PROMOTION) ||
busiCode.equals(BusiCodeConstants.BATCH_PROD_ORDER) ||
busiCode.equals(BusiCodeConstants.CHANGE_PROD_DYN_RES) ||
busiCode.equals(BusiCodeConstants.SYNC_ZZD_PROD) ||
busiCode.equals(BusiCodeConstants.PROM_ACCT_PAY)){
//产品订购或者是产品退订,自动退订,产品批量订购,更换产品动态资源,主机产品同步
//获取流水明细
for (CDoneCodeDetail detail:detailList){
if (StringHelper.isNotEmpty(detail.getUser_id())){
//设置用户产品之间的关系
try{
int size = busiComponent.setProdInclude(detail.getDone_code(),detail.getCust_id(),detail.getUser_id(), detail.getCounty_id(), detail.getArea_id());
if(size>0)
busiComponent.saveProdIncludeRecord(detail.getDone_code(),detail.getCust_id(), detail.getUser_id(), detail.getCounty_id(),SystemConstants.BOOLEAN_TRUE,null);
}catch(Exception e){
e.printStackTrace();
busiComponent.saveProdIncludeRecord(detail.getDone_code(),detail.getCust_id(), detail.getUser_id(), detail.getCounty_id(),SystemConstants.BOOLEAN_FALSE,e.getMessage().substring(0, 99));
logger.error("设置产品包含关系","用户【"+detail.getUser_id()+"】"+e.getMessage());
}
if (busiCode.equals(BusiCodeConstants.PROD_PACKAGE_ORDER)){
//判断订购是否是基本产品,如果是,执行自动促销
PProd prod = jobComponent.queryProdByDoneCode(cDoneCode.getDone_code());
if (prod != null && SystemConstants.BOOLEAN_TRUE.equals(prod.getIs_base())){
try{
busiComponent.promotion(detail.getUser_id());
} catch(Exception e){
logger.error("基础产品自动促销", e.getMessage());
}
}
}
}
}
}
if (busiCode.equals(BusiCodeConstants.FEE_CANCEL) ||
busiCode.equals(BusiCodeConstants.ACCT_REFUND) ||
busiCode.equals(BusiCodeConstants.PROD_TERMINATE) ||
cDoneCode.getStatus().equals(StatusConstants.INVALID)){
//如果发生了冲正和退款,判断客户今天参加的促销是否需要回退
if (detailList !=null && detailList.size()>0){
int i=0;
while (i<20){
if (busiComponent.canCancelPromotion(detailList.get(0).getCust_id())){
try{
busiComponent.cancelPromotion(detailList.get(0).getCust_id());
} catch(Exception e){
logger.error("促销自动回退", e);
}
break;
}
else
Thread.sleep(1000);
i++;
}
}
}
if (busiCode.equals(BusiCodeConstants.USER_PROMOTION)){
if (detailList !=null && detailList.size()>0){
try{
busiComponent.promotion(detailList.get(0).getUser_id());
} catch(Exception e){
logger.error("自动促销",e.getMessage());
}
}
}
if (busiCode.equals(BusiCodeConstants.CUST_JOIN_UNIT) ||
busiCode.equals(BusiCodeConstants.CUST_QUIT_UNIT)||
busiCode.equals(BusiCodeConstants.CUST_EDIT)||
busiCode.equals(BusiCodeConstants.CUST_TRANS)||
busiCode.equals(BusiCodeConstants.CUST_CHANGE_ADDR)){
if (detailList !=null && detailList.size()>0){
for (CDoneCodeDetail detail:detailList){
try{
busiComponent.resetUserProdRes(detail.getCust_id());
} catch(Exception e){
logger.error("重置产品资源",e.getMessage());
};
}
}
}
if(BusiCodeConstants.ACCT_PAY.equals(busiCode) && SystemConstants.COUNTY_9005.equals(cDoneCode.getCounty_id())){//如果是缴费
//补入非公用账目充值的账目异动数据
busiComponent.adjustSpecAcctPay(cDoneCode.getDone_code());
}
if (cDoneCode.getStatus().equals(StatusConstants.ACTIVE)){
maxDoneCode = cDoneCode.getDone_code();
} else {
jobComponent.updateCancelDoneCode(cDoneCode.getDone_code());
}
}
if (maxDoneCode>0)
jobComponent.updateMaxDoneCode(maxDoneCode);
logger.info("处理业务流水","共处理"+doneCodeList.size()+"条流水,结束流水:"+maxDoneCode);
}
public void setBusiComponent(BusiComponent busiComponent) {
this.busiComponent = busiComponent;
}
public void setJobComponent(JobComponent jobComponent) {
this.jobComponent = jobComponent;
}
}