package com.yaochen.boss.job.component; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.yaochen.boss.dao.CfgDao; import com.yaochen.boss.dao.JobDao; import com.yaochen.boss.model.CfgData; import com.ycsoft.beans.config.TBusiCmdSupplier; import com.ycsoft.beans.config.TServer; import com.ycsoft.beans.config.TServerRes; import com.ycsoft.beans.core.acct.CAcctAcctitemChange; import com.ycsoft.beans.core.acct.CAcctAcctitemInactive; import com.ycsoft.beans.core.acct.CAcctAcctitemInactiveHis; import com.ycsoft.beans.core.acct.CAcctPreFee; import com.ycsoft.beans.core.common.CDoneCode; import com.ycsoft.beans.core.common.CDoneCodeDetail; import com.ycsoft.beans.core.job.JCustAcctmodeCal; import com.ycsoft.beans.core.job.JCustInvalidCal; import com.ycsoft.beans.core.job.JCustWriteoffAcct; import com.ycsoft.beans.core.job.JExecResult; import com.ycsoft.beans.core.job.JProdNextTariff; import com.ycsoft.beans.core.job.JProdNextTariffHis; import com.ycsoft.beans.core.job.JProdPreopen; import com.ycsoft.beans.core.job.JUserStop; import com.ycsoft.beans.core.prod.CProd; import com.ycsoft.beans.core.prod.CProdOrder; import com.ycsoft.beans.core.user.CUser; import com.ycsoft.beans.device.RCardModel; import com.ycsoft.beans.prod.PProd; import com.ycsoft.beans.prod.PProdCountyRes; import com.ycsoft.beans.system.SArea; import com.ycsoft.business.dao.config.TAcctitemToProdDao; import com.ycsoft.business.dao.config.TRuleDefineDao; import com.ycsoft.business.dao.config.TTemplateDao; import com.ycsoft.business.dao.core.common.CDoneCodeDao; import com.ycsoft.business.dao.core.job.JExecResultDao; import com.ycsoft.business.dao.core.job.JProdNextTariffHisDao; import com.ycsoft.business.dao.core.prod.CProdDao; import com.ycsoft.business.dao.core.prod.CProdOrderDao; import com.ycsoft.business.dao.core.prod.CProdStatusChangeDao; import com.ycsoft.business.dao.task.WWorkDao; import com.ycsoft.business.dto.config.TaskQueryWorkDto; import com.ycsoft.business.dto.core.prod.CProdDto; import com.ycsoft.business.dto.core.prod.PPromotionDto; import com.ycsoft.commons.constants.SystemConstants; import com.ycsoft.commons.store.AcctItemToProdConfig; import com.ycsoft.commons.store.TemplateConfig; import com.ycsoft.daos.core.DataHandler; import com.ycsoft.daos.core.JDBCException; import com.ycsoft.sysmanager.dto.prod.ProdDto; @Component public class JobComponent { private CfgDao cfgDao; private JExecResultDao jExecResultDao; private JProdNextTariffHisDao jProdNextTariffHisDao; private JobDao jobDao; private TRuleDefineDao tRuleDefineDao; private CProdDao cProdDao; private CDoneCodeDao cDoneCodeDao; private TAcctitemToProdDao tAcctitemToProdDao; private TTemplateDao tTemplateDao; private WWorkDao wWorkDao; @Autowired private CProdOrderDao cProdOrderDao; @Autowired private CProdStatusChangeDao cProdStatusChangeDao; /** * 变更失效订单的状态 * @return * @throws Exception */ public List<CProdOrder> changeHasExpOrderStatusToForStop(Integer doneCode) throws Exception{ //对所有订单失效的宽带用户发清除宽带的授权 List<CProdOrder> orders=cProdOrderDao.queryBandAllOrderExp(); cProdStatusChangeDao.saveOrderExpStatus(doneCode); cProdOrderDao.updateExpOrderStatusToForStop(); return orders; } /** * 查询需要修正带宽的宽带订单 * @return * @throws Exception */ public List<CProdOrder> queryUserNeedChangeBandWidth() throws Exception{ return cProdOrderDao.queryUserNeedChanageBandWidth(); } /** * @param workDao the wWorkDao to set */ public void setWWorkDao(WWorkDao workDao) { wWorkDao = workDao; } public List<TaskQueryWorkDto> queryUnSyncWork() throws JDBCException{ return wWorkDao.queryUnSyncWork(100); } public int syncWork(String workid,String syncStatus) throws JDBCException{ return wWorkDao.syncWork(workid,syncStatus); } public void setTTemplateDao(TTemplateDao templateDao) { tTemplateDao = templateDao; } public void loadBaseConfig()throws Exception{ AcctItemToProdConfig.loadData(tAcctitemToProdDao); TemplateConfig.loadData(tTemplateDao); } /** * 加载授权的基础数据 * @return * @throws Exception */ public com.yaochen.boss.model.CfgData loadCfgData() throws Exception{ CfgData cfg = new CfgData(); /** * 基础数据检查 * 1、促销配置中的产品和资费编号是否都存在 */ // if (this.cfgDao.queryIllegalProd()>0) // throw new ComponentException("促销配置中有非法资费,请检查数据!"); //加载产品数据 Map<String,ProdDto> prodMap = new HashMap<String,ProdDto>(); List<ProdDto> prodList = cfgDao.queryProd(); for (ProdDto prod:prodList){ prod.setResList(cfgDao.queryProdRes(prod.getProd_id())); List<PProdCountyRes> countyResList = cfgDao.queryProdResCounty(prod.getProd_id()); Map<String,List<String>> countyResMap = new HashMap<String,List<String>>(); for (PProdCountyRes countyRes:countyResList){ if (countyResMap.get(countyRes.getCounty_id()) == null){ List<String> resList = new ArrayList<String>(); resList.add(countyRes.getRes_id()); countyResMap.put(countyRes.getCounty_id(), resList); } else { countyResMap.get(countyRes.getCounty_id()).add(countyRes.getRes_id()); } } prod.setCountyResMap(countyResMap); int dynamicResCount = cfgDao.queryProdDynamicResCount(prod.getProd_id()); if (dynamicResCount>0){ prod.setHasDynRes(true); } else { prod.setHasDynRes(false); } prodMap.put(prod.getProd_id(), prod); } cfg.setProdMap(prodMap); //加载促销数据 cfg.setPromotionList(cfgDao.queryPromotion()); for (PPromotionDto promotion:cfg.getPromotionList()){ promotion.setAcctList(cfgDao.queryPromotionAcct(promotion.getPromotion_id())); } //加载卡型号和服务器供应商关系 List<RCardModel> cardModelList = cfgDao.queryCardModel(); cfg.setCardCaMap(new HashMap<String,RCardModel>()); for (RCardModel cardModel:cardModelList){ cfg.getCardCaMap().put(cardModel.getDevice_model(), cardModel); } //加载服务器配置信息 List<TServer> serverList = cfgDao.queryServer(); for(TServer server:serverList){ server.setCountyList(cfgDao.queryServerCounty(server.getServer_id())); } cfg.setServerList(serverList); //加载BOSS资源和外部资源的对应关系 List<TServerRes> resList = cfgDao.queryServerRes(); Map<String,Map<String,TServerRes>> resMap = new HashMap<String,Map<String,TServerRes>>(); for (TServerRes res :resList){ if (resMap.get(res.getBoss_res_id()) == null){ Map<String,TServerRes> servResMap = new HashMap<String,TServerRes>(); servResMap.put(res.getServer_id(), res); resMap.put(res.getBoss_res_id(), servResMap); } else { resMap.get(res.getBoss_res_id()).put(res.getServer_id(), res); } } cfg.setResMap(resMap); //加载业务指令和服务器指令的对应关系 List<TBusiCmdSupplier> cmdList = cfgDao.queryCmdSupplier(); Map<String,Map<String,List<String>>> busiCmdMap = new HashMap<String,Map<String,List<String>>>(); for (TBusiCmdSupplier cmd:cmdList){ if (busiCmdMap.get(cmd.getCmd_id()) == null){ Map<String,List<String>> servCmdMap = new HashMap<String,List<String>>(); List<String> servCmdList = new ArrayList<String>(); servCmdList.add(cmd.getSupplier_cmd_id()); servCmdMap.put(cmd.getSupplier_id(), servCmdList); busiCmdMap.put(cmd.getCmd_id(), servCmdMap); } else { if (busiCmdMap.get(cmd.getCmd_id()).get(cmd.getSupplier_id()) == null){ List<String> servCmdList = new ArrayList<String>(); servCmdList.add(cmd.getSupplier_cmd_id()); busiCmdMap.get(cmd.getCmd_id()).put(cmd.getSupplier_id(), servCmdList); } else { busiCmdMap.get(cmd.getCmd_id()).get(cmd.getSupplier_id()).add(cmd.getSupplier_cmd_id()); } } } cfg.setBusiCmdMap(busiCmdMap); cfg.setRuleList(tRuleDefineDao.findAll()); return cfg; } /** * 保存任务执行结果 * @param jobId * @param areaId * @param countyId * @param success * @param errorInfo */ public void saveJobExecute(int jobId,String areaId,String countyId,String success,String errorInfo) throws Exception{ JExecResult result = new JExecResult(); result.setJob_id(jobId); result.setArea_id(areaId); result.setCounty_id(countyId); result.setSuccess(success); result.setError_info(errorInfo); jExecResultDao.save(result); } /** * 删除账目任务 * @param jobId * @throws Exception */ public void removeAcctJob(int jobId) throws Exception{ jobDao.removeAcctJob(jobId); } public void removeInvalidCalJob(Integer jobId) throws JDBCException { jobDao.removeInvalidCalJob(jobId); } public void removeAcctmodeCalJob(Integer jobId) throws JDBCException { jobDao.removeAcctmodeCalJob(jobId); } public void deleteTariffJobWithHis(JProdNextTariff tariffJob)throws Exception{ JProdNextTariffHis tariffJobHis = new JProdNextTariffHis(); BeanUtils.copyProperties(tariffJob, tariffJobHis); jProdNextTariffHisDao.save(tariffJobHis); jobDao.deleteTariffJob(tariffJob.getJob_id()); } public void deleteUserStopJob(int jobId) throws Exception{ jobDao.deleteUserStopJob(jobId); } /** * 保存处理过来的流水号 * @param doneCode * @throws Exception */ public void updateMaxDoneCode(long doneCode) throws Exception { jobDao.updateMaxDoneCode(doneCode); } public void updateCancelDoneCode(long doneCode) throws Exception { jobDao.updateCancelDoneCode(doneCode); } /** * 保存处理过的最大FeeSn * @param feeSn * @throws Exception */ public void updateFeeAutoPromotion(String userId,String custId,String countyId) throws Exception{ this.jobDao.updateFeeAutoPromotion(userId,custId,countyId); } /** * 查找需要执行的资费变更任务 * @return * @throws Exception */ public List<JProdNextTariff> queryTariffJob() throws Exception{ return jobDao.queryTariffJob(); } /** * 查找资费失效且公用账目使用类型不为NONE的产品 * @return * @throws Exception */ public List<CProd> queryProdWithInvalidTariff() throws Exception{ return jobDao.queryProdWithInvalidTariff(); } /** * 查找武汉直属,副终端基本包资费为24元每月(资费ID为4357),且满3年的产品 * @return * @throws JDBCException */ public List<CProd> queryFzdProdTariff() throws Exception{ return jobDao.queryFzdProdTariff(); } /** * 查找用户下产权为广电的设备编号 * @return * @throws Exception */ public List<String> queryUserGDDevices(String userId) throws Exception{ return jobDao.queryUserGDDevices(userId); } public List<CDoneCode> queryDoneCode()throws Exception{ return jobDao.queryDoneCode(); } public List<JProdNextTariff> queryNextTariffByJobId() throws Exception { return jobDao.queryNextTariffByJobId(); } /** * 根据doneCode 查找业务流水明细 * @param doneCode * @param countyId * @return * @throws Exception */ public List<CDoneCodeDetail> queryDoneCodeDetail (long doneCode) throws Exception { return jobDao.queryDoneCodeDetail(doneCode); } /** * 当天订购的所有流水明细记录 * @return * @throws Exception */ public List<CDoneCodeDetail> queryDoneCodeDetailByOrder () throws Exception { return jobDao.queryDoneCodeDetailByOrder(); } /** * 查询指定业务订购的基本包 * @param doneCode * @return * @throws Exception */ public PProd queryProdByDoneCode (long doneCode) throws Exception { return cProdDao.queryBaseProdByDoneCode(doneCode); } public List<CProd> queryUpkgProd() throws Exception{ return cProdDao.queryUpkgProd(); } /** * 查找需要执行的报停任务 * @return * @throws Exception */ public List<JUserStop> queryUserStopJob() throws Exception{ return jobDao.queryUserStopJob(); } /** * 查找需要自动退订的产品 * @return * @throws Exception */ public List<CProdDto> queryProdStopJob(String prodCancelDays) throws Exception{ List<CProdDto> cpList = jobDao.queryProdStopJob(prodCancelDays); return cpList; } /** * 查找自动加授权 * @return * @throws Exception */ public List<CProdDto> queryAutoBusiCmd() throws Exception{ List<CProdDto> cpList = jobDao.queryAutoBusiCmd(); return cpList; } /** * 查找宽带加授权 * @return * @throws Exception */ public List<CProdDto> queryBandAutoBusiCmd() throws Exception { return jobDao.queryBandAutoBusiCmd(); } /** * 查找到期的客户套餐下,还有钱的子产品 * @return * @throws Exception */ public List<CProdDto> queryPkgProds() throws Exception{ return jobDao.queryPkgProds(); } public List<CDoneCode> queryReversalJob() throws Exception { return jobDao.queryReversalJob(); } public List<CAcctAcctitemInactiveHis> queryInactiveHisByDoneCode(Integer doneCode) throws Exception { return jobDao.queryInactiveHisByDoneCode(doneCode); } /** * 解冻记录 * @param doneCode * @return * @throws Exception */ public CAcctAcctitemChange queryFreezeChangeByDoneCode( Integer doneCode, String acctId, String acctitemId) throws Exception { return jobDao.queryAcctitemChangeByDoneCode(doneCode, acctId, acctitemId, SystemConstants.ACCT_FEETYPE_PRESENT, SystemConstants.ACCT_CHANGE_UNFREEZE); } /** * 解冻对应冲正记录 * @param doneCode * @return * @throws Exception */ public CAcctAcctitemChange queryReversalChangeByDoneCode( Integer doneCode, String acctId, String acctitemId) throws Exception { return jobDao.queryAcctitemChangeByDoneCode(doneCode, acctId, acctitemId, SystemConstants.ACCT_FEETYPE_PRESENT, SystemConstants.ACCT_CHANGE_UNCFEE); } /** * 标示流水已处理过 * @param list * @throws Exception */ public void updateDoneCodeFalg(List<CDoneCode> list) throws Exception { cDoneCodeDao.update(list.toArray(new CDoneCode[list.size()])); } /** * 查找需要执行的资金解冻任务 * @return * @throws Exception */ public void queryAcctUnfreezeJob(DataHandler<CAcctAcctitemInactive> dataHandler) throws Exception{ jobDao.queryAcctUnfreezeJob(dataHandler); } public List<CAcctAcctitemInactive> queryAcctFirstUnfreezeJob() throws Exception{ return jobDao.queryAcctFirstUnfreezeJob(); } public int queryAcctUnfreezeJobCount() throws Exception { return jobDao.queryAcctUnfreezeJobCount(); } public void updateInvoiceByDoneCode(Integer doneCode) throws JDBCException { jobDao.updateInvoiceByDoneCode(doneCode); } /** * 查找需要取消的VOD预扣费记录 * @return * @throws JDBCException */ public List<CAcctPreFee> queryNeedCancelPreFee() throws JDBCException { return jobDao.queryNeedCancelPreFee(); } /** * 查找需要处理促销用户 * @return * @throws Exception */ public List<CUser> queryPromotionUsers() throws Exception{ return jobDao.queryPromotionUsers(); } /** * 查找需要删除账目或者账户的任务 * @return * @throws Exception */ public List<JCustWriteoffAcct> queryWriteOffAcct() throws Exception{ return jobDao.queryWriteOffAcct(); } /** * 查找资费计算任务 * @return */ public List<JCustInvalidCal> queryInvalidCal(int count,int jobId) throws Exception{ return jobDao.queryInvalidCal(count,jobId); } /** * 查找到期日计算任务按起止地区 * (area_id > start and area_id <= end) * @param count * @param start * @param end * @return * @throws Exception */ public List<JCustInvalidCal> queryInvalidCalByAreaid(int count,String start,String end) throws Exception{ return jobDao.queryInvalidCalByAreaid(count, start, end); } /** * 查找账务模式判断任务按起止地区 * (area_id > start and area_id <= end) * @param count * @param start * @param end * @return * @throws Exception */ public List<JCustAcctmodeCal> queryAcctmodeCalByAreaid(int count,String start,String end) throws Exception{ return jobDao.queryAcctmodeCalByAreaid(count, start, end); } /** * 查找预开通计算任务 * @param jobstep * @return * @throws Exception */ public List<JProdPreopen> queryProdPreopen(Integer jobstep)throws Exception{ return jobDao.queryProdPreopen(jobstep); } /** * 更新预开通的执行步骤 * @param jobId * @param jobstep * @throws Exception */ public void updateProdPreopenStep(String jobId,Integer jobstep)throws Exception{ jobDao.updateProdPreopenStep(jobId, jobstep); } /** * 移动预开通到历史表 * @param preopen * @throws Exception */ public void removeProdPreopen(JProdPreopen preopen)throws Exception{ jobDao.removeProdPreopenToHis(preopen); jobDao.deleteProdPreopen(preopen); } public CProdDto queryProdBySn(String prodSn,String countyId)throws Exception{ return jobDao.queryProdBySn(prodSn,countyId); } /** * 查找资费计算任务 * @return */ public List<JCustInvalidCal> queryInvalidCalForPatch(int count,int jobId) throws Exception{ return jobDao.queryInvalidCalForPatch(count, jobId); } public void dealProdStatusError() throws JDBCException { jobDao.dealProdStatusError(); } public String queryMaxFeeSn() throws Exception { return jobDao.queryMaxFeeSn(); } public void setJobDao(JobDao jobDao) { this.jobDao = jobDao; } /** * 获取地区信息 * @param cfgDao */ public List<SArea> queryArea() throws Exception{ return cfgDao.queryArea(); } public void setCfgDao(CfgDao cfgDao) { this.cfgDao = cfgDao; } public void setJExecResultDao(JExecResultDao execResultDao) { jExecResultDao = execResultDao; } /** * @param ruleDefineDao the tRuleDefineDao to set */ public void setTRuleDefineDao(TRuleDefineDao ruleDefineDao) { tRuleDefineDao = ruleDefineDao; } public void setCProdDao(CProdDao prodDao) { cProdDao = prodDao; } public void setJProdNextTariffHisDao(JProdNextTariffHisDao prodNextTariffHisDao) { jProdNextTariffHisDao = prodNextTariffHisDao; } public void setCDoneCodeDao(CDoneCodeDao doneCodeDao) { cDoneCodeDao = doneCodeDao; } public void setTAcctitemToProdDao(TAcctitemToProdDao acctitemToProdDao) { tAcctitemToProdDao = acctitemToProdDao; } }