package quartz; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import jbo.app.tenwa.calc.VI_NORMALSETTLE_CONTRACT; import jbo.awe.USER_INFO; import jbo.com.tenwa.lease.comm.LB_CONTRACT_INFO; import jbo.com.tenwa.lease.comm.VI_AUTODISTRIBUTE; import jbo.com.tenwa.lease.comm.VI_NORMALEND_CONTRACT; import jbo.sys.OVERDUE_DUNNING_INFO; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import com.amarsoft.are.jbo.BizObject; import com.amarsoft.are.jbo.BizObjectManager; import com.amarsoft.are.jbo.JBOFactory; import com.amarsoft.are.jbo.JBOTransaction; import com.amarsoft.are.util.StringFunction; import com.amarsoft.awe.util.ASResultSet; import com.amarsoft.awe.util.SqlObject; import com.amarsoft.awe.util.Transaction; import com.amarsoft.context.ASUser; import com.base.util.QuartzUtil; //import com.tenwa.action.channelportal.ContractSignAction; //import com.tenwa.action.channelportal.comm.ContractTransferRightForEnd; import com.tenwa.comm.util.jboutil.DataOperatorUtil; import com.tenwa.comm.util.jboutil.SaveBusinessStatus; import com.tenwa.lease.app.quartzmession.JobInitUserName; import com.tenwa.officetempalte.action.CreateOfficeAction; //import com.tenwa.quartz.BeforeSerialTimingTask; //import com.tenwa.quartz.service.BeforeSerialTimingTaskService; //import com.tenwa.quartz.serviceImpl.BeforeSerialTimingTaskServiceImpl; import com.tenwa.reckon.util.UUIDUtil; import org.apache.log4j.Logger; public class AutoDistribute implements Job{ private JobInitUserName jboName; @Override public void execute(JobExecutionContext arg0) throws JobExecutionException { String startime = StringFunction.getTodayNow(); Object userId = arg0.getTrigger().getJobDataMap().get("CurUserId"); String curUserId = userId == null? "system" : userId.toString(); try { JBOTransaction tx = JBOFactory.createJBOTransaction(); ownershipTransferSign(tx,arg0); tx.commit(); QuartzUtil.insertLog(startime, "quartz.ContractInfoForNomalSettle", "success", "成功", curUserId); } catch (Exception e) { QuartzUtil.insertLog(startime, "quartz.ContractInfoForNomalSettle", "error", "失败", curUserId); e.printStackTrace(); } } @SuppressWarnings("unused") public void ownershipTransferSign(JBOTransaction tx ,JobExecutionContext arg0) throws Exception{ Transaction Sqlca = null; Sqlca = Transaction.createTransaction(tx); //轻催组下的用户 String Sql1="SELECT ur.roleid,O.userid AS userid,O.loginid,O.username FROM USER_INFO O LEFT JOIN USER_ROLE AS ur ON ur.USERID = O.USERID LEFT JOIN USER_TASK_INFO uti ON uti.userid=O.userid AND uti.roleid=ur.roleid WHERE O.status='1' AND ur.roleid='800R00000041'"; List> dataListA = DataOperatorUtil.getDataBySql(Sqlca, Sql1, null); String userA = new String(); for (Map map : dataListA) { String userid = map.get("userid"); userA += userid+"@"; } String[] A =null; A = userA.split("@"); //中催组下的用户 String Sql2="SELECT ur.roleid,O.userid AS userid,O.loginid,O.username FROM USER_INFO O LEFT JOIN USER_ROLE AS ur ON ur.USERID = O.USERID LEFT JOIN USER_TASK_INFO uti ON uti.userid=O.userid AND uti.roleid=ur.roleid WHERE O.status='1' AND ur.roleid='800R00000042'"; List> dataListB = DataOperatorUtil.getDataBySql(Sqlca, Sql2, null); String userB = new String(); for (Map map : dataListB) { String userid = map.get("userid"); userB += userid+"@"; } String[] B =null; B = userB.split("@"); //重催组下的用户 String Sql3="SELECT ur.roleid,O.userid,O.loginid,O.username FROM USER_INFO O LEFT JOIN USER_ROLE AS ur ON ur.USERID = O.USERID LEFT JOIN USER_TASK_INFO uti ON uti.userid=O.userid AND uti.roleid=ur.roleid WHERE O.status='1' AND ur.roleid='800R00000043'"; List> dataListC = DataOperatorUtil.getDataBySql(Sqlca, Sql3, null); String userC = new String(); for (Map map : dataListC) { String userid = map.get("userid"); userC += userid+"@"; } String[] C =null; C = userC.split("@"); //获取所有逾期的需要催收的合同信息 String conInfo1 = getContractId(tx); String overDays = ""; BizObjectManager overdueManager = JBOFactory.getBizObjectManager(OVERDUE_DUNNING_INFO.CLASS_NAME, tx); if(!(conInfo1 == null || conInfo1.length() <= 0)){ String[] conInfos = conInfo1.split(","); for(String conInfo:conInfos){ String contract_id = conInfo.split("@")[0]; overDays = conInfo.split("@")[1]; int overDay = Integer.valueOf(overDays); BizObject overdue = overdueManager.createQuery("contract_id=:contract_id").setParameter("contract_id", contract_id).getSingleResult(false); if(overdue!=null){//修改 //催款员 String partDept = overdue.getAttribute("part_dept").toString(); if(overDay>3 && overDay<=15){ if(Arrays.asList(B).contains(partDept)){ //此催款员是中催组的人员,不做任何操作 }else{ //此催款员不是中催组的人员,则修改为中催组的人员 //中催组下未分配且上岗的催款员 String sqlN = "SELECT MAX(O.userid) AS userid" +" FROM USER_INFO O LEFT JOIN USER_ROLE AS ur ON ur.USERID = O.USERID" +" LEFT JOIN USER_TASK_INFO uti ON uti.userid=O.userid AND uti.roleid=ur.roleid" + " WHERE O.status='1' AND uti.induction_state='induction_state01' AND ur.roleid='800R00000042'" + " AND O.userid NOT IN (SELECT o.part_dept FROM (SELECT COUNT(*) number,part_dept FROM OVERDUE_DUNNING_INFO GROUP BY part_dept) o WHERE o.number IN (SELECT MIN(t.number) FROM (SELECT COUNT(*) number,part_dept FROM OVERDUE_DUNNING_INFO GROUP BY part_dept) t) )"; //虽然只让查出一条数据 List> dataListAN = DataOperatorUtil.getDataBySql(Sqlca, sqlN, null); //此时中催组的所有人员都已分配,选出目前任务最少的人,且上岗 String sqlY = "SELECT MAX(o.part_dept) AS userid FROM (SELECT COUNT(*) number,part_dept FROM OVERDUE_DUNNING_INFO GROUP BY part_dept) o"+ " WHERE o.number IN (SELECT MIN(t.number) FROM (SELECT COUNT(*) number,part_dept FROM OVERDUE_DUNNING_INFO GROUP BY part_dept) t)"+ " AND o.part_dept IN"+ " (SELECT O.userid FROM USER_INFO O"+ " LEFT JOIN USER_ROLE AS ur ON ur.USERID = O.USERID "+ " LEFT JOIN USER_TASK_INFO uti ON uti.userid=O.userid AND uti.roleid=ur.roleid"+ " WHERE O.status='1' AND uti.induction_state='induction_state01' AND ur.roleid='800R00000042')"; //虽然只能查出一条数据 List> dataListAY = DataOperatorUtil.getDataBySql(Sqlca, sqlY, null); //判断条件 if(dataListAN !=null){ String useridAN = new String(); for (Map map : dataListAN) { String userid = map.get("userid"); useridAN += userid+"@"; } String[] AN =null; AN = useridAN.split("@"); String ANN = AN[0]; if(ANN==null || "".equals(ANN) || "null".equals(ANN)){ String useridAY = new String(); for (Map map : dataListAY) { String userid = map.get("userid"); useridAY += userid+"@"; } String[] AY =null; AY = useridAY.split("@"); String AYY = AY[0]; //修改 overdueManager.createQuery("UPDATE O SET O.part_dept='"+AYY+"' WHERE contract_id='"+contract_id+"'").executeUpdate(); }else{ //修改 overdueManager.createQuery("UPDATE O SET O.part_dept='"+ANN+"' WHERE contract_id='"+contract_id+"'").executeUpdate(); } }else{ String useridAY = new String(); for (Map map : dataListAY) { String userid = map.get("userid"); useridAY += userid+"@"; } String[] AY =null; AY = useridAY.split("@"); String AYY = AY[0]; //修改 overdueManager.createQuery("UPDATE O SET O.part_dept='"+AYY+"' WHERE contract_id='"+contract_id+"'").executeUpdate(); } } }else{ if(Arrays.asList(C).contains(partDept)){ //此催款员是重催组的人员,不做任何操作 }else{ //此催款员不是重催组的人员,则修改为重催组的人员 //重催组下未分配的用户,且上岗 String sqlN = "SELECT MAX(O.userid) AS userid" +" FROM USER_INFO O LEFT JOIN USER_ROLE AS ur ON ur.USERID = O.USERID" +" LEFT JOIN USER_TASK_INFO uti ON uti.userid=O.userid AND uti.roleid=ur.roleid" + " WHERE O.status='1' AND uti.induction_state='induction_state01' AND ur.roleid='800R00000043'" + " AND O.userid NOT IN (SELECT o.part_dept FROM (SELECT COUNT(*) number,part_dept FROM OVERDUE_DUNNING_INFO GROUP BY part_dept) o WHERE o.number IN (SELECT MIN(t.number) FROM (SELECT COUNT(*) number,part_dept FROM OVERDUE_DUNNING_INFO GROUP BY part_dept) t) )"; //虽然只让查出一条数据 List> dataListAN = DataOperatorUtil.getDataBySql(Sqlca, sqlN, null); //此时重催组的所有人员都已分配,选出目前任务最少的人,且上岗 String sqlY = "SELECT MAX(o.part_dept) AS userid FROM (SELECT COUNT(*) number,part_dept FROM OVERDUE_DUNNING_INFO GROUP BY part_dept) o"+ " WHERE o.number IN (SELECT MIN(t.number) FROM (SELECT COUNT(*) number,part_dept FROM OVERDUE_DUNNING_INFO GROUP BY part_dept) t)"+ " AND o.part_dept IN"+ " (SELECT O.userid FROM USER_INFO O"+ " LEFT JOIN USER_ROLE AS ur ON ur.USERID = O.USERID "+ " LEFT JOIN USER_TASK_INFO uti ON uti.userid=O.userid AND uti.roleid=ur.roleid"+ " WHERE O.status='1' AND uti.induction_state='induction_state01' AND ur.roleid='800R00000043')"; //虽然只能查出一条数据 List> dataListAY = DataOperatorUtil.getDataBySql(Sqlca, sqlY, null); //判断条件 if(dataListAN !=null){ String useridAN = new String(); for (Map map : dataListAN) { String userid = map.get("userid"); useridAN += userid+"@"; } String[] AN =null; AN = useridAN.split("@"); String ANN = AN[0]; if(ANN==null || "".equals(ANN) || "null".equals(ANN)){ String useridAY = new String(); for (Map map : dataListAY) { String userid = map.get("userid"); useridAY += userid+"@"; } String[] AY =null; AY = useridAY.split("@"); String AYY = AY[0]; //修改 overdueManager.createQuery("UPDATE O SET O.part_dept='"+AYY+"' WHERE contract_id='"+contract_id+"'").executeUpdate(); }else{ //修改 overdueManager.createQuery("UPDATE O SET O.part_dept='"+ANN+"' WHERE contract_id='"+contract_id+"'").executeUpdate(); } }else{ String useridAY = new String(); for (Map map : dataListAY) { String userid = map.get("userid"); useridAY += userid+"@"; } String[] AY =null; AY = useridAY.split("@"); String AYY = AY[0]; //修改 overdueManager.createQuery("UPDATE O SET O.part_dept='"+AYY+"' WHERE contract_id='"+contract_id+"'").executeUpdate(); } } } }else{//新增 //轻催组下未分配的用户且上岗 String sqlN = "SELECT MAX(O.userid) AS userid" +" FROM USER_INFO O LEFT JOIN USER_ROLE AS ur ON ur.USERID = O.USERID" +" LEFT JOIN USER_TASK_INFO uti ON uti.userid=O.userid AND uti.roleid=ur.roleid" + " WHERE O.status='1' AND uti.induction_state='induction_state01' AND ur.roleid='800R00000041'" + " AND O.userid NOT IN (SELECT o.part_dept FROM (SELECT COUNT(*) number,part_dept FROM OVERDUE_DUNNING_INFO GROUP BY part_dept) o WHERE o.number IN (SELECT MIN(t.number) FROM (SELECT COUNT(*) number,part_dept FROM OVERDUE_DUNNING_INFO GROUP BY part_dept) t) )"; //虽然只让查出一条数据 List> dataListAN = DataOperatorUtil.getDataBySql(Sqlca, sqlN, null); //轻催组下已分配 但最少 的人,且上岗 String sqlY = "SELECT MAX(o.part_dept) AS userid FROM (SELECT COUNT(*) number,part_dept FROM OVERDUE_DUNNING_INFO GROUP BY part_dept) o"+ " WHERE o.number IN (SELECT MIN(t.number) FROM (SELECT COUNT(*) number,part_dept FROM OVERDUE_DUNNING_INFO GROUP BY part_dept) t)"+ " AND o.part_dept IN"+ " (SELECT O.userid FROM USER_INFO O"+ " LEFT JOIN USER_ROLE AS ur ON ur.USERID = O.USERID "+ " LEFT JOIN USER_TASK_INFO uti ON uti.userid=O.userid AND uti.roleid=ur.roleid"+ " WHERE O.status='1' AND uti.induction_state='induction_state01' AND ur.roleid='800R00000041')"; //虽然只能查出一条数据 List> dataListAY = DataOperatorUtil.getDataBySql(Sqlca, sqlY, null); //新建对象 BizObject overdueBizObject = overdueManager.newObject(); String uuid = UUID.randomUUID().toString().replace("-", ""); //判断条件 if(dataListAN !=null){ String useridAN = new String(); for (Map map : dataListAN) { String userid = map.get("userid"); useridAN += userid+"@"; } String[] AN =null; AN = useridAN.split("@"); String ANN = AN[0]; if(ANN==null || "".equals(ANN) || "null".equals(ANN)){ String useridAY = new String(); for (Map map : dataListAY) { String userid = map.get("userid"); useridAY += userid+"@"; } String[] AY =null; AY = useridAY.split("@"); String AYY = AY[0]; //新增 overdueBizObject.setAttributeValue("id", uuid); overdueBizObject.setAttributeValue("part_dept", AYY); overdueBizObject.setAttributeValue("contract_id", contract_id); overdueManager.saveObject(overdueBizObject); }else{ overdueBizObject.setAttributeValue("id", uuid); overdueBizObject.setAttributeValue("part_dept", ANN); overdueBizObject.setAttributeValue("contract_id", contract_id); overdueManager.saveObject(overdueBizObject); } //System.out.println(ANN); //新增 }else{ String useridAY = new String(); for (Map map : dataListAY) { String userid = map.get("userid"); useridAY += userid+"@"; } String[] AY =null; AY = useridAY.split("@"); String AYY = AY[0]; //新增 overdueBizObject.setAttributeValue("id", uuid); overdueBizObject.setAttributeValue("part_dept", AYY); overdueBizObject.setAttributeValue("contract_id", contract_id); overdueManager.saveObject(overdueBizObject); } } } } } /** * 获取所有逾期的需要催收的合同信息 * @param tx * @return * @throws Exception */ public String getContractId(JBOTransaction tx ) throws Exception{ /*BizObjectManager bom=JBOFactory.getBizObjectManager(LB_CONTRACT_INFO.CLASS_NAME,tx); List boList = bom.createQuery("SELECT O.id,vo.over_days FROM O LEFT JOIN jbo.com.tenwa.lease.comm.LB_UNION_LESSEE lul ON lul.contract_id = O.id LEFT JOIN jbo.sys.OVERDUE_DUNNING_INFO odi ON odi.contract_id = O.id LEFT JOIN jbo.sys.USER_INFO ui ON ui.userid = odi.part_dept LEFT JOIN jbo.app.tenwa.calc.VI_OVERDUE_RENT_PLAN_SUM vo ON vo.contract_id=O.id WHERE lul.is_main='Y' AND O.contract_status='31' AND vo.over_money>0").getResultList(true); */ //获取所有逾期的需要催收的合同信息 BizObjectManager bom=JBOFactory.getBizObjectManager(VI_AUTODISTRIBUTE.CLASS_NAME,tx); List boList = bom.createQuery("SELECT O.id,O.over_days FROM O ").getResultList(true); String conInfos = new String(); for(BizObject bo : boList){ conInfos += bo.getAttribute("id")+"@"; conInfos += bo.getAttribute("over_days")+","; } return conInfos; } }