From 349c95e1b640fa9ab4be12428ae217d8e45ea287 Mon Sep 17 00:00:00 2001 From: liuzhao Date: Fri, 12 Oct 2018 11:40:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=82=AC=E6=AC=BE=E5=91=98=E5=88=86=E6=B4=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src_tenwa/quartz/AutoDistribute.java | 351 +++++++++++++++++++++++++++ 1 file changed, 351 insertions(+) create mode 100644 src_tenwa/quartz/AutoDistribute.java diff --git a/src_tenwa/quartz/AutoDistribute.java b/src_tenwa/quartz/AutoDistribute.java new file mode 100644 index 000000000..887d860bf --- /dev/null +++ b/src_tenwa/quartz/AutoDistribute.java @@ -0,0 +1,351 @@ +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; + } + +}