apzl_leasing/src_tenwa/quartz/AutoDistribute.java
2018-10-18 19:51:04 +08:00

484 lines
18 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package quartz;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import jbo.com.tenwa.lease.comm.DAY_DISTRIBUTE;
import jbo.com.tenwa.lease.comm.VI_AUTODISTRIBUTE;
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.JBOException;
import com.amarsoft.are.jbo.JBOFactory;
import com.amarsoft.are.jbo.JBOTransaction;
import com.amarsoft.are.util.StringFunction;
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.lease.app.quartzmession.JobInitUserName;
//import com.tenwa.quartz.BeforeSerialTimingTask;
//import com.tenwa.quartz.service.BeforeSerialTimingTaskService;
//import com.tenwa.quartz.serviceImpl.BeforeSerialTimingTaskServiceImpl;
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.AutoDistribute", "success","³É¹¦", curUserId);
} catch (Exception e) {
QuartzUtil.insertLog(startime, "quartz.AutoDistribute", "error","ʧ°Ü", curUserId);
e.printStackTrace();
}
}
public void ownershipTransferSign(JBOTransaction tx,JobExecutionContext arg0) throws Exception{
//»ñÈ¡ÌìÊý
Map<String,Integer> dayMap = getDay(tx);
int beginDay1 = dayMap.get("beginDay1");
int endDay1 = dayMap.get("endDay1");
int beginDay2 = dayMap.get("beginDay2");
int endDay2 = dayMap.get("endDay2");
int beginDay3 = dayMap.get("beginDay3");
//»ñÈ¡´ß¿îÔ±½ÇɫϵÄÓû§
Map<String,String[]> userMap = getUser(tx);
String[] A = userMap.get("A");//Çá´ß×â
String[] B = userMap.get("B");//Öдß×é
String[] C = userMap.get("C");//ÖØ´ß×é
BizObjectManager overdueManager = JBOFactory.getBizObjectManager(OVERDUE_DUNNING_INFO.CLASS_NAME, tx);
//»ñÈ¡ËùÓÐÓâÆÚµÄÐèÒª´ßÊյĺÏͬÐÅÏ¢
String conInfo1 = getContractId(tx);
if(!(conInfo1 == null || conInfo1.length() <= 0)){
String[] conInfos = conInfo1.split(",");
for(String conInfo:conInfos){
String contract_id = conInfo.split("@")[0];//ºÏͬid
String overDays = conInfo.split("@")[1];//ÓâÆÚÌìÊý
int overDay = Integer.valueOf(overDays);
//¸ù¾ÝºÏͬid²éѯ±íÖÐÊý¾Ý£¬ÓÐÔòÐ޸ģ¬ÎÞÔòÐÂÔö
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>=beginDay2 && overDay<=endDay2){
if(Arrays.asList(B).contains(partDept)){
//´Ë´ß¿îÔ±ÊÇÖдß×éµÄÈËÔ±£¬²»×öÈκβÙ×÷
}else{//´Ë´ß¿îÔ±²»ÊÇÖдß×éµÄÈËÔ±£¬ÔòÐÞ¸ÄΪÖдß×éµÄÈËÔ±
String person = getBPerson(tx);
updatePartDept(overdueManager, contract_id, person);
}
}else if(overDay>=beginDay3){
if(Arrays.asList(C).contains(partDept)){
//´Ë´ß¿îÔ±ÊÇÖØ´ß×éµÄÈËÔ±£¬²»×öÈκβÙ×÷
}else{
//´Ë´ß¿îÔ±²»ÊÇÖØ´ß×éµÄÈËÔ±£¬ÔòÐÞ¸ÄÎªÖØ´ß×éµÄÈËÔ±
String person = getCPerson(tx);
updatePartDept(overdueManager, contract_id, person);
}
}else if(overDay>=beginDay1 && overDay<=endDay1){
if(Arrays.asList(A).contains(partDept)){
//´Ë´ß¿îÔ±ÊÇÇá´ß×éµÄÈËÔ±£¬²»×öÈκβÙ×÷
}else{
//´Ë´ß¿îÔ±²»ÊÇÖдß×éµÄÈËÔ±£¬ÔòÐÞ¸ÄΪÇá´ß×éµÄÈËÔ±
String person = getAPerson(tx);
updatePartDept(overdueManager, contract_id, person);
}//´Ë´ß¿îÔ±²»ÊÇÖдß×éµÄÈËÔ±£¬ÔòÐÞ¸ÄΪÇá´ß×éµÄÈËÔ±
}
}else{//ÐÂÔö
if(overDay>=beginDay1 && overDay<=endDay1){
String person = getAPerson(tx);
savePartDept(overdueManager, contract_id,person);
}else if(overDay>=beginDay2 && overDay<=endDay2){
String person = getBPerson(tx);
savePartDept(overdueManager, contract_id ,person);
}else if(overDay>=beginDay3){
String person = getCPerson(tx);
savePartDept(overdueManager, contract_id, person);
}
}
}
}
}
/**
* Ð޸ķ½·¨
* @param overdueManager
* @param contract_id
* @param person
* @throws JBOException
*/
private void updatePartDept(BizObjectManager overdueManager, String contract_id,
String person) throws JBOException {
overdueManager.createQuery("UPDATE O SET O.part_dept='"+person+"' WHERE contract_id='"+contract_id+"'").executeUpdate();
}
/**
* ±£´æ·½·¨
* @param overdueManager
* @param contract_id
* @param overdueBizObject
* @param person
* @throws JBOException
*/
private void savePartDept(BizObjectManager overdueManager, String contract_id, String person)
throws JBOException {
BizObject overdueBizObject = overdueManager.newObject();
String uuid = UUID.randomUUID().toString().replace("-", "");
overdueBizObject.setAttributeValue("id", uuid);
overdueBizObject.setAttributeValue("part_dept", person);
overdueBizObject.setAttributeValue("contract_id", contract_id);
overdueManager.saveObject(overdueBizObject);
}
/**
* »ñÈ¡´ß¿îÔ±µÄÌìÊýÅäÖÃ
* @param tx
* @return
* @throws JBOException
*/
public Map<String, Integer> getDay(JBOTransaction tx) throws JBOException {
Map<String, Integer> map = new HashMap<String, Integer>();
int beginDay1 = 0;
int endDay1 = 0;
int beginDay2 = 0;
int endDay2 = 0;
int beginDay3 = 0;
// »ñÈ¡ÌìÊý
@SuppressWarnings("unchecked")
List<BizObject> dayDistribute = JBOFactory.createBizObjectQuery(DAY_DISTRIBUTE.CLASS_NAME, "select * from O").getResultList(false);
for (BizObject bizObject : dayDistribute) {
String role = bizObject.getAttribute("role").toString();
int beginDay = bizObject.getAttribute("begin_day").getInt();
int endDay = bizObject.getAttribute("end_day") == null ? 0 : bizObject.getAttribute("end_day").getInt();
if ("Çá´ß×é".equals(role)) {
beginDay1 = beginDay;
endDay1 = endDay;
} else if ("Öдß×é".equals(role)) {
beginDay2 = beginDay;
endDay2 = endDay;
} else {
beginDay3 = beginDay;
}
}
map.put("beginDay1", beginDay1);
map.put("endDay1", endDay1);
map.put("beginDay2", beginDay2);
map.put("endDay2", endDay2);
map.put("beginDay3", beginDay3);
return map;
}
/**
* »ñÈ¡´ß¿îÔ±½ÇɫϵÄÓû§
* @param tx
* @return
*/
public Map<String,String[]> getUser(JBOTransaction tx){
Map<String,String[]> usermap = new HashMap<String, String[]>();
try {
//Çá´ß×éϵÄÓû§
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(tx, 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("@");
usermap.put("A", A);
//Öдß×éϵÄÓû§
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(tx, 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("@");
usermap.put("B", B);
//ÖØ´ß×éϵÄÓû§
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(tx, 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("@");
usermap.put("C", C);
} catch (Exception e) {
e.printStackTrace();
}
return usermap;
}
/**
* »ñÈ¡ËùÓÐÓâÆÚµÄÐèÒª´ßÊյĺÏͬÐÅÏ¢
*
* @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;
}
/**
* »ñÈ¡Öдß×éµÄÈËÔ±
* @param tx
* @return
*/
public String getBPerson(JBOTransaction tx){
String person = "";
try {
//Öдß×éÏÂδ·ÖÅäÇÒÉϸڵĴ߿îÔ±
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 part_dept FROM OVERDUE_DUNNING_INFO)";
//ËäȻֻÈòé³öÒ»ÌõÊý¾Ý
List<Map<String, String>> dataListAN = DataOperatorUtil.getDataBySql(tx, 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"+
" LEFT JOIN USER_INFO ui ON ui.userid=o.part_dept"+
" LEFT JOIN USER_ROLE AS ur ON ur.USERID = ui.USERID"+
" LEFT JOIN USER_TASK_INFO uti ON uti.userid=ui.userid AND uti.roleid=ur.roleid"+
" WHERE uti.roleid='800R00000042' AND "+
" o.number IN (SELECT MIN(t.number) FROM"+
" (SELECT COUNT(*) number,part_dept FROM OVERDUE_DUNNING_INFO GROUP BY part_dept) t"+
" LEFT JOIN USER_INFO ui ON ui.userid=t.part_dept"+
" LEFT JOIN USER_ROLE AS ur ON ur.USERID = ui.USERID"+
" LEFT JOIN USER_TASK_INFO uti ON uti.userid=ui.userid AND uti.roleid=ur.roleid"+
" WHERE uti.roleid='800R00000042' AND ui.status='1' AND uti.induction_state='induction_state01')";
//ËäȻֻÄܲé³öÒ»ÌõÊý¾Ý
List<Map<String, String>> dataListAY = DataOperatorUtil.getDataBySql(tx, sqlY, null);
if(dataListAN.size()>0){
String useridAN = new String();
for (Map<String, String> map : dataListAN) {
String userid = map.get("userid");
useridAN += userid+"@";
}
String[] AN =null;
AN = useridAN.split("@");
person = AN[0];
if(person==null || "".equals(person) || "null".equals(person)){
String useridAY = new String();
for (Map<String, String> map : dataListAY) {
String userid = map.get("userid");
useridAY += userid+"@";
}
String[] AY =null;
AY = useridAY.split("@");
person = AY[0];
}
}else{
String useridAY = new String();
for (Map<String, String> map : dataListAY) {
String userid = map.get("userid");
useridAY += userid+"@";
}
String[] AY =null;
AY = useridAY.split("@");
person = AY[0];
}
} catch (Exception e) {
e.printStackTrace();
}
return person;
}
/**
* »ñÈ¡ÖØ´ß×éϵÄÈËÔ±
* @param tx
* @return
*/
public String getCPerson(JBOTransaction tx){
String person = "";
try {
//ÖØ´ß×éÏÂδ·ÖÅäµÄÓû§£¬ÇÒÉϸÚ
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 part_dept FROM OVERDUE_DUNNING_INFO)";
//ËäȻֻÈòé³öÒ»ÌõÊý¾Ý
List<Map<String, String>> dataListAN = DataOperatorUtil.getDataBySql(tx, 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"+
" LEFT JOIN USER_INFO ui ON ui.userid=o.part_dept"+
" LEFT JOIN USER_ROLE AS ur ON ur.USERID = ui.USERID"+
" LEFT JOIN USER_TASK_INFO uti ON uti.userid=ui.userid AND uti.roleid=ur.roleid"+
" WHERE uti.roleid='800R00000043' AND "+
" o.number IN (SELECT MIN(t.number) FROM"+
" (SELECT COUNT(*) number,part_dept FROM OVERDUE_DUNNING_INFO GROUP BY part_dept) t"+
" LEFT JOIN USER_INFO ui ON ui.userid=t.part_dept"+
" LEFT JOIN USER_ROLE AS ur ON ur.USERID = ui.USERID"+
" LEFT JOIN USER_TASK_INFO uti ON uti.userid=ui.userid AND uti.roleid=ur.roleid"+
" WHERE uti.roleid='800R00000043' AND ui.status='1' AND uti.induction_state='induction_state01')";
//ËäȻֻÄܲé³öÒ»ÌõÊý¾Ý
List<Map<String, String>> dataListAY = DataOperatorUtil.getDataBySql(tx, sqlY, null);
if(dataListAN.size()>0){
String useridAN = new String();
for (Map<String, String> map : dataListAN) {
String userid = map.get("userid");
useridAN += userid+"@";
}
String[] AN =null;
AN = useridAN.split("@");
person = AN[0];
if(person==null || "".equals(person) || "null".equals(person)){
String useridAY = new String();
for (Map<String, String> map : dataListAY) {
String userid = map.get("userid");
useridAY += userid+"@";
}
String[] AY =null;
AY = useridAY.split("@");
person = AY[0];
}
}else{
String useridAY = new String();
for (Map<String, String> map : dataListAY) {
String userid = map.get("userid");
useridAY += userid+"@";
}
String[] AY =null;
AY = useridAY.split("@");
person = AY[0];
}
} catch (Exception e) {
e.printStackTrace();
}
return person;
}
/**
* »ñÈ¡Çá´ß×éÈËÔ±
* @return
*/
public String getAPerson(JBOTransaction tx){
String person = "";
try {
//Çá´ß×éÏÂδ·ÖÅäÇÒÉϸڵĴ߿îÔ±
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 part_dept FROM OVERDUE_DUNNING_INFO)";
//ËäȻֻÈòé³öÒ»ÌõÊý¾Ý
List<Map<String, String>> dataListAN = DataOperatorUtil.getDataBySql(tx, 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"+
" LEFT JOIN USER_INFO ui ON ui.userid=o.part_dept"+
" LEFT JOIN USER_ROLE AS ur ON ur.USERID = ui.USERID"+
" LEFT JOIN USER_TASK_INFO uti ON uti.userid=ui.userid AND uti.roleid=ur.roleid"+
" WHERE uti.roleid='800R00000041' AND "+
" o.number IN (SELECT MIN(t.number) FROM"+
" (SELECT COUNT(*) number,part_dept FROM OVERDUE_DUNNING_INFO GROUP BY part_dept) t"+
" LEFT JOIN USER_INFO ui ON ui.userid=t.part_dept"+
" LEFT JOIN USER_ROLE AS ur ON ur.USERID = ui.USERID"+
" LEFT JOIN USER_TASK_INFO uti ON uti.userid=ui.userid AND uti.roleid=ur.roleid"+
" WHERE uti.roleid='800R00000041' AND ui.status='1' AND uti.induction_state='induction_state01')";
//ËäȻֻÄܲé³öÒ»ÌõÊý¾Ý
List<Map<String, String>> dataListAY = DataOperatorUtil.getDataBySql(tx, sqlY, null);;
if(dataListAN.size()>0){
String useridAN = new String();
for (Map<String, String> map : dataListAN) {
String userid = map.get("userid");
useridAN += userid+"@";
}
String[] AN =null;
AN = useridAN.split("@");
person = AN[0];
if(person==null || "".equals(person) || "null".equals(person)){
String useridAY = new String();
for (Map<String, String> map : dataListAY) {
String userid = map.get("userid");
useridAY += userid+"@";
}
String[] AY =null;
AY = useridAY.split("@");
person = AY[0];
}
}else{
String useridAY = new String();
for (Map<String, String> map : dataListAY) {
String userid = map.get("userid");
useridAY += userid+"@";
}
String[] AY =null;
AY = useridAY.split("@");
person = AY[0];
}
} catch (Exception e) {
e.printStackTrace();
}
return person;
}
}