催款员分派

This commit is contained in:
liuzhao 2018-10-12 11:40:38 +08:00
parent 340b61b0cd
commit 349c95e1b6

View File

@ -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<Map<String, String>> dataListA = DataOperatorUtil.getDataBySql(Sqlca, Sql1, null);
String userA = new String();
for (Map<String, String> 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<Map<String, String>> dataListB = DataOperatorUtil.getDataBySql(Sqlca, Sql2, null);
String userB = new String();
for (Map<String, String> 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<Map<String, String>> dataListC = DataOperatorUtil.getDataBySql(Sqlca, Sql3, null);
String userC = new String();
for (Map<String, String> 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<Map<String, String>> 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<Map<String, String>> dataListAY = DataOperatorUtil.getDataBySql(Sqlca, sqlY, null);
//判断条件
if(dataListAN !=null){
String useridAN = new String();
for (Map<String, String> 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<String, String> 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<String, String> 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<Map<String, String>> 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<Map<String, String>> dataListAY = DataOperatorUtil.getDataBySql(Sqlca, sqlY, null);
//判断条件
if(dataListAN !=null){
String useridAN = new String();
for (Map<String, String> 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<String, String> 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<String, String> 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<Map<String, String>> 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<Map<String, String>> 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<String, String> 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<String, String> 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<String, String> 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<BizObject> 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<BizObject> 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;
}
}