diff --git a/src/main/java/com/engine/htsc/Signet/GetImagefileid.java b/src/main/java/com/engine/htsc/Signet/GetImagefileid.java new file mode 100644 index 0000000..66602ee --- /dev/null +++ b/src/main/java/com/engine/htsc/Signet/GetImagefileid.java @@ -0,0 +1,55 @@ +package com.engine.htsc.Signet; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import org.apache.tools.ant.taskdefs.WaitFor; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +public class GetImagefileid { + + @POST + @Path("/GetImagefileid") + @Produces({MediaType.TEXT_PLAIN}) + public String GetImagefileid(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = new HashMap<>(); + try { + String docid=request.getParameter("docid"); + String imagefileid=""; + RecordSet rs=new RecordSet(); + String sql=" select imagefileid from (select imagefileid from docimagefile where docid in (?) order by versionid desc) t\n" + + " where rownum<=1"; + rs.executeQuery(sql,docid); + if(rs.next()){ + imagefileid= rs.getString("imagefileid"); + } + if(!"".equals(imagefileid)){ + apidatas.put("data", imagefileid); + apidatas.put("status", true); + }else{ + apidatas.put("data", false); + apidatas.put("status", "error"); + } + + } catch (Exception e) { + e.printStackTrace(); + apidatas.put("status", false); + apidatas.put("errormsg", "catch exception : " + e.getMessage()); + } + return JSONObject.toJSONString(apidatas); + } + + } diff --git a/src/main/java/com/engine/htsc/TrealReimTools/TrealReimToolsWeb.java b/src/main/java/com/engine/htsc/TrealReimTools/TrealReimToolsWeb.java new file mode 100644 index 0000000..9ff6622 --- /dev/null +++ b/src/main/java/com/engine/htsc/TrealReimTools/TrealReimToolsWeb.java @@ -0,0 +1,60 @@ +package com.engine.htsc.TrealReimTools; + +import weaver.general.Util; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.GlobatTools.trealReimTools; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; + +public class TrealReimToolsWeb { + + @POST + @Path("/getregionStringtoId") + @Produces({MediaType.TEXT_PLAIN}) + public String getregionStringtoId(@Context HttpServletRequest request, @Context HttpServletResponse response) { + String value= Util.null2String(request.getParameter("value")); + String returnvalue=""; + if("".equals(value)){ + return JAVATools.Apiretrun("400","数据为空"); + } + + returnvalue= trealReimTools.getregionStringtoId(value); + return JAVATools.Apiretrun("200",returnvalue); + } + + @POST + @Path("/gethrmtodeptid") + @Produces({MediaType.TEXT_PLAIN}) + public String gethrmtodeptid(@Context HttpServletRequest request, @Context HttpServletResponse response) { + String value= Util.null2String(request.getParameter("userids")); + String returnvalue=""; + if("".equals(value)){ + return JAVATools.Apiretrun("400","数据为空"); + } + + + return JAVATools.Apiretrun("200",trealReimTools.Gethrmdeptid(value)); + } + + @POST + @Path("/gethrmsupdepid") + @Produces({MediaType.TEXT_PLAIN}) + public String gethrmsupdepid(@Context HttpServletRequest request, @Context HttpServletResponse response) { + String value= Util.null2String(request.getParameter("userids")); + String returnvalue=""; + if("".equals(value)){ + return JAVATools.Apiretrun("400","数据为空"); + } + + + return JAVATools.Apiretrun("200",trealReimTools.Gethrmsupdepid(value)); + } + +} diff --git a/src/main/java/com/engine/htsc/announcement/service/HeadquartersAnncService.java b/src/main/java/com/engine/htsc/announcement/service/HeadquartersAnncService.java new file mode 100644 index 0000000..7bfe48d --- /dev/null +++ b/src/main/java/com/engine/htsc/announcement/service/HeadquartersAnncService.java @@ -0,0 +1,13 @@ +package com.engine.htsc.announcement.service; + +import java.util.Map; + +public interface HeadquartersAnncService { + Map isPostion(String userid); + + Map afterLeadSign(String jobs,Integer requestid); + + Map signDepartment(String formid, Integer requestid, String workflowid); + + Map createHeadAnnouncementWorkflow(Map params); +} diff --git a/src/main/java/com/engine/htsc/announcement/service/impl/HeadquartersAnncServiceImpl.java b/src/main/java/com/engine/htsc/announcement/service/impl/HeadquartersAnncServiceImpl.java new file mode 100644 index 0000000..4d2595f --- /dev/null +++ b/src/main/java/com/engine/htsc/announcement/service/impl/HeadquartersAnncServiceImpl.java @@ -0,0 +1,155 @@ +package com.engine.htsc.announcement.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.announcement.service.HeadquartersAnncService; +import com.engine.htsc.announcement.util.WeaToolsUtil; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.conn.RecordSet; +import weaver.formmode.virtualform.VirtualFormHandler; +import weaver.general.BaseBean; +import weaver.general.GCONST; +import weaver.general.TimeUtil; +import weaver.general.Util; +import weaver.hrm.company.DepartmentComInfo; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.workflow.workflow.WorkflowBillComInfo; + +import java.util.*; + +public class HeadquartersAnncServiceImpl extends Service implements HeadquartersAnncService { + + private Log log = LogFactory.getLog(this.getClass()); + BaseBean bb = new BaseBean(); + + @Override + public Map isPostion(String userid) { + Map datas = new HashMap<>(); + try { + RecordSet rs = new RecordSet(); + String field12 = ""; + rs.executeQuery("select field12 from cus_fielddata where id = ?",userid); + if (rs.next()){ + field12 = Util.null2String(rs.getString("field12")); + } + if ("营业部正职".equals(field12)){ + datas.put("isPostion",true); + }else { + datas.put("isPostion",false); + } + }catch (Exception e){ + e.printStackTrace(); + } + return datas; + } + + @Override + public Map afterLeadSign(String jobs,Integer requestid) { + Map datas = new HashMap<>(); + try { + boolean sendOut = true;//是否全部送完领导会签 true已送完 + log.info("岗位信息==="+jobs); + PropBean pb = new PropBean(); + RecordSet rs = new RecordSet(); + //1.根据岗位获取对应人员 + if (!"".equals(jobs)) { + String[] jobsarray = jobs.split(","); + for (String job : jobsarray) { + String nodeunnumber = ""; + //2.根据岗位类型不同获取nodeunnumber值 + if ("1".equals(job)) {//合规总监 + nodeunnumber = "zbggfb_hgzj"; + } else if ("2".equals(job)) { //首席风险官 + nodeunnumber = "zbggfb_sxfxg"; + } else if ("3".equals(job)) { //工会主席 + nodeunnumber = "zbggfb_gwhz"; + } else if ("4".equals(job)) { //首席财务官 + nodeunnumber = "zbggfb_sxcwg"; + } + String nodeid = pb.getActionNodeIdByUnNumber(nodeunnumber); + log.info("nodeid=="+nodeid+"=="+nodeunnumber); + //判断是否已经经过领导会签节点 + rs.executeQuery("select DISTINCT userid from workflow_currentoperator " + + " where requestid = ? and nodeid = ? and isremark <> 0 ", requestid, nodeid); + if (rs.next()) { + log.info(nodeunnumber + "该节点已经经过"); + } else { + log.info(nodeunnumber+"该节点未经过"); + sendOut = false; + break;//结束循环 + } + } + } + datas.put("sendAllOut",sendOut); + + }catch (Exception e){ + e.printStackTrace(); + } + return datas; + } + + @Override + public Map signDepartment(String formid, Integer requestid, String workflowid) { + Map datas = new HashMap<>(); + RecordSet rs = new RecordSet(); + try { + log.info("===signDepartment===执行开始"); + WorkflowBillComInfo workflowBillComInfo = new WorkflowBillComInfo(); + DepartmentComInfo departmentComInfo = new DepartmentComInfo(); + String tableName = VirtualFormHandler.getRealFromName(Util.null2String(workflowBillComInfo.getTablename(formid))); + //1.获取明细表2的值 + List dataList = new ArrayList<>(); + rs.executeQuery("select b.hqbm,b.bmzz from "+tableName+" a, "+tableName+"_dt2 b " + + " where a.id = b.mainid and a.requestid = ? and b.yhq = 1",requestid); + while (rs.next()){ + Map specialMap = new HashMap<>(); + String hqbm = Util.null2String(rs.getString("hqbm")); + String departmentName = departmentComInfo.getDepartmentName(hqbm); + Integer bmzz = Util.getIntValue(rs.getString("bmzz")); + specialMap.put("departmentId",hqbm); + specialMap.put("departmentName",departmentName); + specialMap.put("bmzz",bmzz); + dataList.add(specialMap); + } + log.info("==明细表2数据=="+dataList.toString()); + datas.put("datas",dataList); + + }catch (Exception e){ + e.printStackTrace(); + } + return datas; + } + + @Override + public Map createHeadAnnouncementWorkflow(Map params) { + Map datas = new HashMap<>(); + RecordSet rs = new RecordSet(); + try{ + String ecologyContentPath = GCONST.getContextPath(); + String userid = (String)params.get("ngr");//拟稿人工号 + String workflowid = (String)params.get("workflowid"); + String requestName = (String)params.get("requestName"); + String IsNextFlow = (String)params.get("IsNextFlow");//1提交到下一节点,0不提交 + Map requestMainMap = new HashMap<>(); + requestMainMap.put("lcbt",requestName); + requestMainMap.put("ngr",userid); + int requestid = Util.getIntValue(new WeaToolsUtil().workflowCreateByRequestMap(userid, workflowid, requestName, + IsNextFlow, requestMainMap)); + bb.infoLog("requestid:",requestid); + long timestamp = System.currentTimeMillis(); + if (requestid > 0){ + datas.put("url",ecologyContentPath+"/spa/workflow/static4form/index.html?" + + "_rdm="+timestamp+"#/main/workflow/req?requestid="+requestid+"&_workflowid="+workflowid+"&_workflowtype=&isovertime=0"); + datas.put("info","create workflow success"); + }else { + datas.put("url",""); + datas.put("info","create workflow fail"); + + } + + }catch (Exception e){ + e.printStackTrace(); + } + return datas; + } +} diff --git a/src/main/java/com/engine/htsc/announcement/util/WeaToolsUtil.java b/src/main/java/com/engine/htsc/announcement/util/WeaToolsUtil.java new file mode 100644 index 0000000..2f00e5f --- /dev/null +++ b/src/main/java/com/engine/htsc/announcement/util/WeaToolsUtil.java @@ -0,0 +1,88 @@ +package com.engine.htsc.announcement.util; + +import com.weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.resource.ResourceComInfo; +import weaver.soa.workflow.request.MainTableInfo; +import weaver.soa.workflow.request.Property; +import weaver.soa.workflow.request.RequestInfo; +import weaver.soa.workflow.request.RequestService; +import weaver.workflow.request.RequestComInfo; +import weaver.workflow.workflow.WorkflowComInfo; + +import java.util.Map; + +public class WeaToolsUtil { + + + /** + * + * @Title: 自动创建流程 + * @param @param creatorId 创建人Id + * @param @param workflowId 流程Id + * @param @param requestName 请求标题 + * @param @param IsNextFlow 是否提交到下一节点 + * @param @param requestMap Map格式的主表数据=<字段名称,字段值> + * @param @return 设定文件 + * @return String 返回类型 + * @throws + */ + public String workflowCreateByRequestMap(String creatorId,String workflowId, + String requestName,String IsNextFlow, + Map requestMainMap) { + BaseBean bs = new BaseBean(); + String requestid = ""; + RequestInfo requestInfo = new RequestInfo(); + requestInfo.setCreatorid(creatorId);//创建人Id + requestInfo.setWorkflowid(workflowId);//工作流Id + requestInfo.setDescription(requestName);//请求标题 + if(!"".equals(IsNextFlow)) + { + requestInfo.setIsNextFlow(IsNextFlow); + } + //主表字段 + MainTableInfo mainTableInfo = new MainTableInfo(); + Property[] propertyArray = new Property[requestMainMap.size()]; + int p = 0; + for (Map.Entry entry : requestMainMap.entrySet()) + { + propertyArray[p] = new Property(); + propertyArray[p].setName(Util.null2String(entry.getKey())); + propertyArray[p].setValue(Util.null2String(entry.getValue())); + bs.writeLog("\r\n---p="+p+"---Key="+entry.getKey()+"---Value="+entry.getValue()); + p++; + } + bs.writeLog("-----创建流程传递的参数个数p="+p); + mainTableInfo.setProperty(propertyArray); + requestInfo.setMainTableInfo(mainTableInfo); + RequestService service = new RequestService(); + try { + //流程 + try { + requestid = service.createRequest(requestInfo);//创建请求id + } catch (Exception e) { + bs.writeLog("预付款流程触发异常"+e.getMessage()); + } + //String userId = requestInfo.getLastoperator();//请求最后的操作者 + //记录日志 + StringBuffer sbf = new StringBuffer("\r\n-----xwd创建工作流记录日志开始"); + WorkflowComInfo wfcif =new WorkflowComInfo(); + RequestComInfo rcif = new RequestComInfo(); + ResourceComInfo rscif = new ResourceComInfo(); + sbf.append("\r\n-----姓名:"+rscif.getLastname(rcif.getRequestCreater(requestid))); + sbf.append("\r\n-----时间:"+rcif.getRequestCreateTime(requestid)); + sbf.append("\r\n-----创建流程:"+wfcif.getWorkflowname(workflowId)); + sbf.append("\r\n-----请求:"+rcif.getRequestname(requestid)); + sbf.append("\r\n-----请求:"+requestid); + sbf.append("\r\n-----创建工作流记录日志结束"); + bs.writeLog(sbf.toString()); + System.out.println(""+sbf.toString()); + } catch (Exception e) { + bs.writeLog("错误:" + e); + System.out.println("错误:" + e); + } + return requestid; + } + + +} diff --git a/src/main/java/com/engine/htsc/announcement/web/HeadquartersAnncAction.java b/src/main/java/com/engine/htsc/announcement/web/HeadquartersAnncAction.java new file mode 100644 index 0000000..3c1895e --- /dev/null +++ b/src/main/java/com/engine/htsc/announcement/web/HeadquartersAnncAction.java @@ -0,0 +1,142 @@ +package com.engine.htsc.announcement.web; + +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.announcement.service.HeadquartersAnncService; +import com.engine.htsc.announcement.service.impl.HeadquartersAnncServiceImpl; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.*; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +public class HeadquartersAnncAction { + private Log log = LogFactory.getLog(this.getClass()); + private HeadquartersAnncService getService(User user){ + return ServiceUtil.getService(HeadquartersAnncServiceImpl.class,user); + } + + /** + * 总部公告判断是否是营业部 + * @param request + * @param response + * @param userid + * @return + */ + @GET + @Path("/ispostion") + @Produces({MediaType.APPLICATION_JSON}) + public Map isPostion(@Context HttpServletRequest request, + @Context HttpServletResponse response, + @QueryParam("userid") String userid) { + Map apidatas = new HashMap<>(); + try { + User user = HrmUserVarify.getUser(request, response); + apidatas = this.getService(user).isPostion(userid); + apidatas.put("api_status", 1); + }catch (Exception e){ + e.printStackTrace(); + apidatas.put("api_status",-1); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + log.error("isPostion catch exception"); + } + return apidatas; + } + + /** + * 总部公告流程是否已经过所有领导会签 + * @param request + * @param response + * @param jobs + * @return + */ + @GET + @Path("/afterLeaderSign") + @Produces({MediaType.APPLICATION_JSON}) + public Map afterLeaderSign(@Context HttpServletRequest request, + @Context HttpServletResponse response, + @QueryParam("jobs") String jobs, + @QueryParam("requestid") Integer requestid) { + Map apidatas = new HashMap<>(); + try { + User user = HrmUserVarify.getUser(request, response); + apidatas = this.getService(user).afterLeadSign(jobs,requestid); + apidatas.put("api_status", 1); + }catch (Exception e){ + e.printStackTrace(); + apidatas.put("api_status",-1); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + log.error("afterLeaderSign catch exception"); + } + return apidatas; + } + + /** + * 总部公告会签部门(命名格式 部门名称+部门职责) + * @param request + * @param response + * @param formid + * @param requestid + * @param workflowid + * @return + */ + @GET + @Path("/signDepartment") + @Produces({MediaType.APPLICATION_JSON}) + public Map signDepartment(@Context HttpServletRequest request, + @Context HttpServletResponse response, + @QueryParam("formid") String formid, + @QueryParam("requestid") Integer requestid, + @QueryParam("workflowid") String workflowid) { + Map apidatas = new HashMap<>(); + try { + User user = HrmUserVarify.getUser(request, response); + apidatas = this.getService(user).signDepartment(formid,requestid,workflowid); + apidatas.put("api_status", 1); + }catch (Exception e){ + e.printStackTrace(); + apidatas.put("api_status",-1); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + log.error("afterLeaderSign catch exception"); + } + return apidatas; + } + + /** + * 总部公告自动构建OA流程 + * @param request + * @param response + * @return + */ + @POST + @Path("/creatWorkflow") + @Produces({MediaType.APPLICATION_JSON}) + public Map createHeadAnnouncementWorkflow(@Context HttpServletRequest request, + @Context HttpServletResponse response){ + Map apidatas = new HashMap<>(); + try { + User user = HrmUserVarify.getUser(request, response); + apidatas = this.getService(user).createHeadAnnouncementWorkflow(ParamUtil.request2Map(request)); + apidatas.put("code", 200); + apidatas.put("message","接口调用成功"); + }catch (Exception e){ + e.printStackTrace(); + apidatas.put("code",-1); + apidatas.put("message","接口调用失败"); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + log.error("isPostion catch exception"); + } + return apidatas; + } + + + + +} diff --git a/src/main/java/com/engine/htsc/capitalbusinessPayment/Constants/Constant.java b/src/main/java/com/engine/htsc/capitalbusinessPayment/Constants/Constant.java new file mode 100644 index 0000000..31d4829 --- /dev/null +++ b/src/main/java/com/engine/htsc/capitalbusinessPayment/Constants/Constant.java @@ -0,0 +1,13 @@ +package com.engine.htsc.capitalbusinessPayment.Constants; + +/** + * 资金业务付款Constant + */ +public class Constant { + //付款类型 + public enum PAYTYPE{ + AUTO,MANUAL + } + + +} diff --git a/src/main/java/com/engine/htsc/capitalbusinessPayment/dao/OperateLiquidationDataDao.java b/src/main/java/com/engine/htsc/capitalbusinessPayment/dao/OperateLiquidationDataDao.java new file mode 100644 index 0000000..f20222f --- /dev/null +++ b/src/main/java/com/engine/htsc/capitalbusinessPayment/dao/OperateLiquidationDataDao.java @@ -0,0 +1,483 @@ +package com.engine.htsc.capitalbusinessPayment.dao; + +import com.engine.htsc.convertor.EcologyValueConvertor; +import com.engine.htsc.doc.model.UserInfoModel; +import com.engine.htsc.doc.util.ConvertUtil; + +import org.apache.commons.lang.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; + +import java.math.BigDecimal; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 数据中心支付 资金业务付款&内部资金调拨 + */ +public class OperateLiquidationDataDao extends BaseBean { + private SimpleDateFormat sdfTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + private SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd"); + //数据中心库 + private final String dataBase_DB = "dataSourceCenter"; + //数据中心表名 + private final String tableName_DC = "T_OperateLiquidationData"; + //数据中心表字段 + private final String tableField_DC = "id,type,source," + + "sourceRef,relatedRef,businessBrief,ccy,payment_date,amount,sender_bankcode," + + "sender_name,sender_acc_number,receiver_bankcode,receiver_name,receiver_acc_number," + + "CNAPS_BANKCODE,initiator,initiator_id,initiator_contact,remark,priority,createTime," + + "createUser,lastUpdateTime,lastUpdateUser,receiver_provinceOrCity,receiver_city,drafter_dept_name,sender_seat,receiver_seat"; + //数据中心表字段值占位符 + private final String tableVaule_DC = "OPERATELIQUIDATIONDATA_SEQ.nextval,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?"; + + public void saveToDC(String requestId, UserInfoModel currentUser) { + String mainTableName = EcologyValueConvertor.getMainTableNameByRequestId(requestId); + String unnumber = ConvertUtil.getUnNumber(requestId);//获取流程英文名 + boolean flag = findDCExist(requestId,mainTableName); + writeLog("requestId:" + requestId + " 判断是否要写入数据中心表, 流程主表名:" + mainTableName+ " 流程图英文名:"+unnumber+" 当前处理人:"+currentUser.getWorkCode() + +" flag:"+flag); + if(!flag) { + writeLog("requestId:" + requestId + " 开始写入数据中心表, 流程主表名:" + mainTableName+ " 流程图英文名:"+unnumber+" 当前处理人:"+currentUser.getWorkCode()); + if(StringUtils.isNotEmpty(unnumber)&&"zjywfk".equals(unnumber)) {//资金业务付款 + List> insertList = getLiquidDetailData_CapitalBusinessPayment(requestId, mainTableName, currentUser); + insertList(tableField_DC, tableVaule_DC, insertList, dataBase_DB, tableName_DC); + writeLog("requestId:" + requestId + " 资金业务付款 写入数据中心表 T_OperateLiquidationData 完成"); + }else if (StringUtils.isNotEmpty(unnumber)&&"zbzjnbdb".equals(unnumber)) {//内部资金调拨 + List> insertList = getLiquidDetailData_HTSelfMoney(requestId, mainTableName, currentUser); + insertList(tableField_DC, tableVaule_DC, insertList, dataBase_DB, tableName_DC); + writeLog("requestId:" + requestId + " 内部资金调拨 写入数据中心表 T_OperateLiquidationData 完成"); + } else if (StringUtils.isNotEmpty(unnumber)&&"xgtyfk".equals(unnumber)) { + List> insertList = getLiquidDetailData_HKPayment(requestId, mainTableName, currentUser); + insertList(tableField_DC, tableVaule_DC, insertList, dataBase_DB, tableName_DC); + writeLog("requestId:" + requestId + " 香港付款 写入数据中心表 T_OperateLiquidationData 完成"); + } + } + } + + /** + * 获取支付明细表数据[香港付款] + * @param requestId + * @param mainTableName + * @return + */ + List> getLiquidDetailData_HKPayment(String requestId, String mainTableName, UserInfoModel currentUser) { + RecordSet rs = new RecordSet(); + List> insertList = new ArrayList<>(); + String dtTableName = mainTableName + "_dt11"; + String sqlDetail = " select t0.requestid,t1.lastname,d.yxzh,t1.lastname,d.khxmc,d.ss,t1.workcode,d.yxzfje,d.xjzfje,d.zpzfje,t0.lcbh,t0.htxx,t2.requestname," + + "t0.biz,d.khx,d.skdw,d.yxzh,t0.ngr,t0.bz,t0.jjcd,t0.ngsj,d.ss "+ + " from "+dtTableName+" d, "+ mainTableName +" t0,hrmresource t1,workflow_requestbase t2 where t0.id = d.mainid and t0.requestid = t2.requestid and t0.ngr = t1.id and t0.requestid = '"+requestId+"'"; + writeLog("requestId:"+requestId+" 香港通用付款 关联查询查询明细表sql:"+sqlDetail); + rs.execute(sqlDetail); + while(rs.next()) { + List list = new ArrayList<>(); + //type + list.add("香港通用付款"); + //source + list.add("OA"); + //sourceRef + list.add(Util.null2String(rs.getString("lcbh"))); + //relatedRef 合同编号 + list.add(Util.null2String(rs.getString("htxx"))); + //businessBrief 流程标题 + list.add(Util.null2String(rs.getString("requestname"))); + //ccy 币种 + String bizId = Util.null2String(rs.getString("biz")); + list.add(EcologyValueConvertor.getSelectNameByRequestIdAndFieldValue(requestId,"biz",bizId)); + //payment_date 空或待定 置成当前系统日期,否则置成主表单的应付款日期 + list.add(((DateFormat)sdfTime).format(new Date())); + //amount 银行支付金额 + 现金支付金额 + 支票支付金额 + BigDecimal bankAmount = StringUtils.isEmpty(rs.getString("yxzfje"))?new BigDecimal("0.00"):new BigDecimal(rs.getString("yxzfje")); + BigDecimal cashAmount = StringUtils.isEmpty(rs.getString("xjzfje"))?new BigDecimal("0.00"):new BigDecimal(rs.getString("xjzfje")); + BigDecimal chequeAmount = StringUtils.isEmpty(rs.getString("zpzfje"))?new BigDecimal("0.00"):new BigDecimal(rs.getString("zpzfje")); + list.add(bankAmount.add(cashAmount).add(chequeAmount).toString()); + //sender_bankcode 指定付款账户-开户行 + AssignPaymentAccount account = getAssignPaymentAccountByRequestId(requestId, mainTableName); + list.add(account.getDepositBank()); + //sender_name 指定付款账户-户名 + list.add(account.getUserName()); + //sender_acc_number 指定付款账户-银行账号 + list.add(account.getBankAccount()); + //receiver_bankcode 收款方-开户行 + String khx = rs.getString("khx").replaceAll(" "," ").replaceAll("
",""); //直接存文本 不要查14w条记录!!! 泛微多行文本有bug 手动转义 + list.add(Util.null2String(khx)); + //receiver_name 收款方-收款单位 + list.add(Util.null2String(rs.getString("skdw")).replaceAll(" "," ").replaceAll("
",""));//泛微多行文本有bug 手动转义 + //receiver_acc_number 收款方-银行账号 + list.add(Util.null2String(rs.getString("yxzh")).replaceAll(" "," ").replaceAll("
",""));//泛微多行文本有bug 手动转义 + //CNAPS_BANKCODE 大额支付号 + list.add(""); + //initiator 拟稿人姓名 + UserInfoModel userInfo = EcologyValueConvertor.getUserInfoModelById(Util.null2String(rs.getString("ngr"))); + list.add(userInfo.getName()); + //initiator_id 拟稿人工号 + list.add(userInfo.getWorkCode()); + //initiator_contact 拟稿人联系方式 + list.add(userInfo.getMobile()); + //remark 备注 + String remark = Util.null2String(rs.getString("bz")); + if(StringUtils.isNotEmpty(remark)) { + remark = remark.replaceAll(" "," ").replaceAll("
",""); + } + list.add(remark); + //priority 缓急程度 + String jjcd = Util.null2String(rs.getString("jjcd")); + list.add(EcologyValueConvertor.getSelectNameByRequestIdAndFieldValue(requestId,"jjcd",jjcd)); + //createTime 拟稿时间 + list.add(Util.null2String(rs.getString("ngsj"))+":00"); + //createUser 拟稿人工号 + list.add(userInfo.getWorkCode()); + //lastUpdateTime + list.add(((DateFormat)sdfTime).format(new Date())); + //lastUpdateUser 当前处理人工号 + list.add(currentUser.getWorkCode()); + //receiver_provinceOrCity receiver_city 支付省市 + String area = Util.null2String(rs.getString("ss")); + List areaArray = cityCodeToName(area); + if (null!=areaArray&&areaArray.size()>0) { + list.add(areaArray.get(0)); + if (areaArray.size()>1){ + list.add(areaArray.get(1)); + }else { + list.add(""); + } + }else { + list.add(""); + list.add(""); + } + //drafter_dept_name 拟稿人部门名称 + list.add(userInfo.getDepartmentName()); + //sender_seat 付款席位号 + list.add(""); + //receiver_seat 收款席位号 + list.add(""); + insertList.add(list); + } + return insertList; + } + + /** + * 获取支付明细表数据[资金业务付款] + * @param requestId + * @param mainTableName + * @return + */ + List> getLiquidDetailData_CapitalBusinessPayment(String requestId, String mainTableName, UserInfoModel currentUser) { + RecordSet rs = new RecordSet(); + List> insertList = new ArrayList<>(); + String dtTableName = mainTableName + "_dt11"; + String sqlDetail = " select t0.requestid,t1.lastname,d.yxzh,t1.lastname,d.khxmc,d.ss,t1.workcode,d.yxzfje,d.xjzfje,d.zpzfje,t0.lcbh,t0.htxx,t2.requestname," + + "t0.biz,t0.yfkrq,d.khx,d.skdw,d.yxzh,d.dezfh,t0.ngr,t0.bz,t0.jjcd,t0.ngsj,d.ss "+ + " from "+dtTableName+" d, "+ mainTableName +" t0,hrmresource t1,workflow_requestbase t2 where t0.id = d.mainid and t0.requestid = t2.requestid and t0.ngr = t1.id and t0.requestid = '"+requestId+"'"; + writeLog("requestId:"+requestId+" 资金业务付款 关联查询查询明细表sql:"+sqlDetail); + rs.execute(sqlDetail); + while(rs.next()) { + List list = new ArrayList<>(); + //type + list.add("资金业务付款"); + //source + list.add("OA"); + //sourceRef + list.add(Util.null2String(rs.getString("lcbh"))); + //relatedRef 合同编号 + list.add(Util.null2String(rs.getString("htxx"))); + //businessBrief 流程标题 + list.add(Util.null2String(rs.getString("requestname"))); + //ccy 币种 + String bizId = Util.null2String(rs.getString("biz")); + list.add(EcologyValueConvertor.getSelectNameByRequestIdAndFieldValue(requestId,"biz",bizId)); + //payment_date 空或待定 置成当前系统日期,否则置成主表单的应付款日期 + if(StringUtils.isEmpty(rs.getString("yfkrq"))||"待定".equals(rs.getString("yfkrq"))) { + list.add(((DateFormat)sdfDate).format(new Date())); + }else { + list.add(Util.null2String(rs.getString("yfkrq"))); + } + //amount 银行支付金额 + 现金支付金额 + 支票支付金额 + BigDecimal bankAmount = StringUtils.isEmpty(rs.getString("yxzfje"))?new BigDecimal("0.00"):new BigDecimal(rs.getString("yxzfje")); + BigDecimal cashAmount = StringUtils.isEmpty(rs.getString("xjzfje"))?new BigDecimal("0.00"):new BigDecimal(rs.getString("xjzfje")); + BigDecimal chequeAmount = StringUtils.isEmpty(rs.getString("zpzfje"))?new BigDecimal("0.00"):new BigDecimal(rs.getString("zpzfje")); + list.add(bankAmount.add(cashAmount).add(chequeAmount).toString()); + //sender_bankcode 指定付款账户-开户行 + AssignPaymentAccount account = getAssignPaymentAccountByRequestId(requestId, mainTableName); + list.add(account.getDepositBank()); + //sender_name 指定付款账户-户名 + list.add(account.getUserName()); + //sender_acc_number 指定付款账户-银行账号 + list.add(account.getBankAccount()); + //receiver_bankcode 收款方-开户行 + String khx = rs.getString("khx").replaceAll(" "," ").replaceAll("
",""); //直接存文本 不要查14w条记录!!! 泛微多行文本有bug 手动转义 + list.add(Util.null2String(khx)); + //receiver_name 收款方-收款单位 + list.add(Util.null2String(rs.getString("skdw")).replaceAll(" "," ").replaceAll("
",""));//泛微多行文本有bug 手动转义 + //receiver_acc_number 收款方-银行账号 + list.add(Util.null2String(rs.getString("yxzh")).replaceAll(" "," ").replaceAll("
",""));//泛微多行文本有bug 手动转义 + //CNAPS_BANKCODE 大额支付号 + list.add(Util.null2String(rs.getString("dezfh"))); + //initiator 拟稿人姓名 + UserInfoModel userInfo = EcologyValueConvertor.getUserInfoModelById(Util.null2String(rs.getString("ngr"))); + list.add(userInfo.getName()); + //initiator_id 拟稿人工号 + list.add(userInfo.getWorkCode()); + //initiator_contact 拟稿人联系方式 + list.add(userInfo.getMobile()); + //remark 备注 + String remark = Util.null2String(rs.getString("bz")); + if(StringUtils.isNotEmpty(remark)) { + remark = remark.replaceAll(" "," ").replaceAll("
",""); + } + list.add(remark); + //priority 缓急程度 + String jjcd = Util.null2String(rs.getString("jjcd")); + list.add(EcologyValueConvertor.getSelectNameByRequestIdAndFieldValue(requestId,"jjcd",jjcd)); + //createTime 拟稿时间 + list.add(Util.null2String(rs.getString("ngsj"))+":00"); + //createUser 拟稿人工号 + list.add(userInfo.getWorkCode()); + //lastUpdateTime + list.add(((DateFormat)sdfTime).format(new Date())); + //lastUpdateUser 当前处理人工号 + list.add(currentUser.getWorkCode()); + //receiver_provinceOrCity receiver_city 支付省市 + String area = Util.null2String(rs.getString("ss")); + List areaArray = cityCodeToName(area); + if (null!=areaArray&&areaArray.size()>0) { + list.add(areaArray.get(0)); + if (areaArray.size()>1){ + list.add(areaArray.get(1)); + }else { + list.add(""); + } + }else { + list.add(""); + list.add(""); + } + //drafter_dept_name 拟稿人部门名称 + list.add(userInfo.getDepartmentName()); + //sender_seat 付款席位号 + list.add(""); + //receiver_seat 收款席位号 + list.add(""); + insertList.add(list); + } + return insertList; + } + + + + /** + * 获取支付明细表数据[内部资金调拨] + * @param requestId + * @param mainTableName + * @return + */ + List> getLiquidDetailData_HTSelfMoney(String requestId, String mainTableName, UserInfoModel currentUser) { + RecordSet rs = new RecordSet(); + List> insertList = new ArrayList<>(); + String dtTableName = mainTableName + "_dt2"; + String sqlDetail = " select t0.requestid,t1.lastname,t1.workcode,d.zhlx,d.zh,d.hm,d.khx,d.xwh,d.dbje,t0.lcbh,t2.requestname,"+ + " t0.zhbz,t0.fkrq,dd.khx as khx_pay,dd.hm as hm_pay,dd.zh as zh_pay,dd.xwh as xwh_pay,'',t0.ngr,t0.sqyy,t0.fksm,t0.jjcd,t0.ngsj,d.label "+ + " from "+dtTableName+" d,"+ mainTableName+" t0,hrmresource t1,workflow_requestbase t2,"+dtTableName+" dd where t0.id = d.mainid and t0.requestid = t2.requestid and t0.ngr = t1.id and "+ + " d.zhlx = '收款账户' and dd.zhlx = '付款账户' and dd.mainid = d.mainid and dd.label = d.label "+ + " and t0.requestid = '"+requestId+"'"; + + writeLog("requestId:"+requestId+" 内部资金调拨 关联查询查询明细表sql:"+sqlDetail); + rs.execute(sqlDetail); + while(rs.next()) { + List list = new ArrayList<>(); + //type + list.add("内部资金调拨"); + //source + list.add("OA"); + //sourceRef + list.add(Util.null2String(rs.getString("lcbh"))); + //relatedRef 合同编号 + list.add(""); + //businessBrief 流程标题 + list.add(Util.null2String(rs.getString("requestname"))); + //ccy 币种 + String zhbzId = Util.null2String(rs.getString("zhbz")); + list.add(EcologyValueConvertor.getSelectNameByRequestIdAndFieldValue(requestId,"zhbz",zhbzId)); + //payment_date 空或待定 置成当前系统日期,否则置成主表单的应付款日期 + if(StringUtils.isEmpty(rs.getString("fkrq"))||"待定".equals(rs.getString("fkrq"))) { + list.add(((DateFormat)sdfDate).format(new Date())); + }else { + list.add(Util.null2String(rs.getString("fkrq"))); + } + //amount 调拨金额 + list.add(Util.null2String(rs.getString("dbje"))); + //sender_bankcode 付款账户-开户行 + list.add(Util.null2String(rs.getString("khx_pay")).replaceAll(" "," ").replaceAll("
","")); + //sender_name 付款账户-户名 + list.add(Util.null2String(rs.getString("hm_pay")).replaceAll(" "," ").replaceAll("
","")); + //sender_acc_number 付款账户-银行账号 + list.add(Util.null2String(rs.getString("zh_pay")).replaceAll(" "," ").replaceAll("
","")); + //receiver_bankcode 收款方-开户行 + String khx = rs.getString("khx").replaceAll(" "," ").replaceAll("
",""); //直接存文本 不要查14w条记录!!! 泛微多行文本有bug 手动转义 + list.add(Util.null2String(khx)); + //receiver_name 收款方-收款单位 + list.add(Util.null2String(rs.getString("hm")).replaceAll(" "," ").replaceAll("
",""));//泛微多行文本有bug 手动转义 + //receiver_acc_number 收款方-银行账号 + list.add(Util.null2String(rs.getString("zh")).replaceAll(" "," ").replaceAll("
",""));//泛微多行文本有bug 手动转义 + //CNAPS_BANKCODE 大额支付号 + list.add(Util.null2String(rs.getString(""))); + //initiator 拟稿人姓名 + UserInfoModel userInfo = EcologyValueConvertor.getUserInfoModelById(Util.null2String(rs.getString("ngr"))); + list.add(userInfo.getName()); + //initiator_id 拟稿人工号 + list.add(userInfo.getWorkCode()); + //initiator_contact 拟稿人联系方式 + list.add(userInfo.getMobile()); + //remark 备注 + String remark = Util.null2String(rs.getString("sqyy"))+Util.null2String(rs.getString("fksm")); + if(StringUtils.isNotEmpty(remark)) { + remark = remark.replaceAll(" "," ").replaceAll("
",""); + } + list.add(remark); + //priority 缓急程度 + String jjcd = Util.null2String(rs.getString("jjcd")); + list.add(EcologyValueConvertor.getSelectNameByRequestIdAndFieldValue(requestId,"jjcd",jjcd)); + //createTime 拟稿时间 + list.add(Util.null2String(rs.getString("ngsj"))+":00"); + //createUser 拟稿人工号 + list.add(userInfo.getWorkCode()); + //lastUpdateTime + list.add(((DateFormat)sdfTime).format(new Date())); + //lastUpdateUser 当前处理人工号 + list.add(currentUser.getWorkCode()); + //receiver_provinceOrCity receiver_city 支付省市 + list.add(""); + list.add(""); + //drafter_dept_name 拟稿人部门名称 + list.add(userInfo.getDepartmentName()); + //sender_seat 付款席位号 + list.add(Util.null2String(rs.getString("xwh_pay"))); + //receiver_seat 收款席位号 + list.add(Util.null2String(rs.getString("xwh"))); + insertList.add(list); + } + return insertList; + } + + + /** + * 获取流程指定付款账户中的第一条信息 + * @param requestId + * @return + */ + private AssignPaymentAccount getAssignPaymentAccountByRequestId(String requestId, String mainTableName) { + RecordSet rs = new RecordSet(); + AssignPaymentAccount account = new AssignPaymentAccount(); + String sql = " select t9.* from "+mainTableName+" t0, "+mainTableName+"_dt9 t9,workflow_requestbase t2 "+ + " where t0.id = t9.mainid and t0.requestid = t2.requestid and t0.requestid = '"+ requestId + "' "; + rs.executeQuery(sql); + if(rs.next()) { + account.setUserName(Util.null2String(rs.getString("hm"))); + account.setDepositBank(Util.null2String(rs.getString("khx"))); + account.setBankAccount(Util.null2String(rs.getString("yxzh"))); + } + return account; + } + + /** + * 指定账户信息 + */ + public class AssignPaymentAccount { + private String userName = ""; //户名 + private String depositBank = ""; //开户行 + private String bankAccount = ""; //银行账户 + + public String getUserName() { + return userName; + } + public void setUserName(String userName) { + this.userName = userName; + } + public String getDepositBank() { + return depositBank; + } + public void setDepositBank(String depositBank) { + this.depositBank = depositBank; + } + public String getBankAccount() { + return bankAccount; + } + public void setBankAccount(String bankAccount) { + this.bankAccount = bankAccount; + } + } + + public static List cityCodeToName(String code){ + RecordSet rs = new RecordSet(); + List resultList = new ArrayList<>(); + if (StringUtils.isBlank(code)){ + return resultList; + } + String[] desInfo = code.split(","); + String ids = Arrays.stream(desInfo).map(s -> "\'" + s +"\'").collect(Collectors.joining(",")); + String sql = "select name from uf_city where code in (" + ids + ") order by instr('" + code + "',code)"; + rs.executeQuery(sql); + while (rs.next()){ + resultList.add(rs.getString("name")); + } + return resultList; + } + + //批量插入表单,切换数据源 + public boolean insertList(String sqlTableS,String sqlTableE,List> insertList,String sqlData,String tablename){ + boolean flag = true; + try { + RecordSet rs = new RecordSet(); + //批量插入并切换数据源 + flag = rs.executeBatchSql(String.format("insert into %s (" + sqlTableS + ") values(" + sqlTableE + ") ", tablename), insertList, sqlData); + String exceptionMsg = rs.getExceptionMsg(); + writeLog("exceptionMsg = " + exceptionMsg); + writeLog("rs.getMsg() = " + rs.getMsg()); + writeLog("flag = " + flag); + }catch (Exception exo){ + flag=false; + exo.printStackTrace(); + new BaseBean().writeLog("插入明细表失败:"+exo.getMessage()); + } + return flag; + } + + /** + * 查询数据中心是否存在已经写入的数据 + * @param requestId + * @param mainTableName + * @return 数据中心已存在true 数据中心不存在 false + */ + public boolean findDCExist(String requestId, String mainTableName) { + boolean flag = false; + try { + RecordSet rs = new RecordSet(); + String sql = " select lcbh from "+mainTableName+" t where t.requestid = '"+requestId+"' "; + rs.executeQuery(sql); + if(rs.next()) { + RecordSet rs_DC = new RecordSet(); + String workflownum = rs.getString("lcbh"); + String findSQL = " select * from t_operateliquidationdata t where t.sourceref = '"+workflownum+"' "; + new BaseBean().writeLog("requestId:"+requestId+" workflowNum:"+workflownum+" 查询数据中心是否存在:"+findSQL); + rs_DC.executeSqlWithDataSource(findSQL,dataBase_DB); + if(rs_DC.next()) { + flag = true; + new BaseBean().writeLog("requestId:"+requestId+" workflowNum:"+workflownum+" 数据存在 flag:"+flag); + return flag; + } + } + }catch(Exception e) { + e.printStackTrace(); + new BaseBean().writeLog("requestId:"+requestId+" 查询数据中心 t_operateliquidationdata 是否存在失败"+e.getStackTrace()); + return flag; + } + return flag; + } + +} diff --git a/src/main/java/com/engine/htsc/capitalbusinessPayment/service/CapitalBusinessPaymentService.java b/src/main/java/com/engine/htsc/capitalbusinessPayment/service/CapitalBusinessPaymentService.java new file mode 100644 index 0000000..47631bd --- /dev/null +++ b/src/main/java/com/engine/htsc/capitalbusinessPayment/service/CapitalBusinessPaymentService.java @@ -0,0 +1,346 @@ +package com.engine.htsc.capitalbusinessPayment.service; + + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.core.impl.Service; +import com.engine.htsc.capitalbusinessPayment.Constants.Constant; +import com.engine.htsc.capitalbusinessPayment.dao.OperateLiquidationDataDao; +import com.engine.htsc.convertor.EcologyValueConvertor; +import com.engine.htsc.doc.model.UserInfoModel; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import weaver.common.StringUtil; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.GCONST; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.interfaces.htsc.cus.HTUtil; +import weaver.workflow.workflow.WfForceOver; + +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 资金业务付款服务类 + */ +public class CapitalBusinessPaymentService extends Service { + + private final Log log = LogFactory.getLog(CapitalBusinessPaymentService.class); + + private BaseBean bb = new BaseBean(); + + + /** + * 自动付款 + * @param ids 前端requestids + * @param userId + * @return + * @throws Exception + */ + public String doAutoPay(String ids, String userId) throws Exception { + Constant.PAYTYPE paytype = Constant.PAYTYPE.AUTO; + log.info("====自动付款开始===="); + if(!checkValidPay(paytype,ids)) { + log.info("====包含已付款数据,不能修改!===="); + throw new Exception("包含已付款数据,不能修改!"); + } + synPaydetail(paytype, ids, userId); + return "数据已开始修改,请刷新列表查看状态"; + } + + /** + * 手动付款 + * @param ids + * @param userId + * @return + * @throws Exception + */ + public String doManualPay(String ids, String userId) throws Exception { + Constant.PAYTYPE paytype = Constant.PAYTYPE.MANUAL; + log.info("====手动付款开始===="); + if(!checkValidPay(paytype,ids)) { + log.info("====包含已付款数据,不能修改!===="); + throw new Exception("包含已付款数据,不能修改!"); + } + synPaydetail(paytype, ids, userId); + return "数据已开始修改,请刷新列表查看状态"; + } + + /** + * 自动付款+手动付款 通用处理步骤 + * @param ids + * @param userId + * @throws Exception + */ + public void synPaydetail(Constant.PAYTYPE payType, String ids, String userId) throws Exception { + bb.writeLog("ids:"+ids+" 开始付款 synPaydetail payType:"+payType+" userId:"+userId); + OperateLiquidationDataDao dao = new OperateLiquidationDataDao(); + UserInfoModel user = EcologyValueConvertor.getUserInfoModelById(userId); + String result = ""; + List idArray = Arrays.stream(ids.split(",")).collect(Collectors.toList()); + for(String id : idArray) { + String requestid = ""; + String workflownum = ""; + RecordSet rs = new RecordSet(); + String sql = " select t.reqid,t.WORKFLOW_NUM from uf_paydetal t where t.id = (" + id + ") "; + log.info("查询requestid和workflow_num" + sql); + rs.execute(sql); + if(rs.next()) { + requestid = rs.getString("reqid"); + workflownum = rs.getString("WORKFLOW_NUM"); + } + + //修改数据库支付记录状态 + updatePayStatus(payType, id); + + //保存数据到数据中心 + dao.saveToDC(requestid,user); + + // 调用泛微接口强制归档办结 + forceArchive(userId,id); + + // 更新付款表的办结时间 + String sqlUpdate = " update uf_paydetal t set t.endtime = to_char(SYSDATE,'YYYY-MM-DD HH24:MI:SS') where t.id = '"+id+"' "; + log.info("更新付款表的办结时间sql" + sql); + rs.execute(sqlUpdate); + + // 如果是衡泰触发的 调用xquantServiceInvoke + sendXquant(workflownum,requestid); + } + + } + + /** + * 检查是否有存在已付款记录 + * @param payType + * @param ids + * @return + * @throws Exception + */ + public boolean checkValidPay(Constant.PAYTYPE payType, String ids) throws Exception { + RecordSet rs =new RecordSet(); + if(Constant.PAYTYPE.AUTO.equals(payType)) { + String sql = " select t.payflag from uf_paydetal t where t.payflag in ('1','9') and t.id in (" + ids + ") "; + log.info("检查是否有存在已付款记录Sql" + sql); + rs.executeQuery(sql); + if(rs.next()) { + return false; + } + }else if(Constant.PAYTYPE.MANUAL.equals(payType)){ + String sql = " select t.payflag from uf_paydetal t where t.payflag = '1' and t.id in (" + ids + ") "; + log.info("检查是否有存在已付款记录Sql" + sql); + rs.executeQuery(sql); + if(rs.next()) { + return false; + } + } + return true; + } + + /** + * 更新付款状态和时间 + * @param payType + * @param id + */ + public void updatePayStatus(Constant.PAYTYPE payType, String id) { + RecordSet rs =new RecordSet(); + bb.writeLog("更新付款状态和时间 id:"+id+" payType:"+payType); + if(Constant.PAYTYPE.AUTO.equals(payType)) { + String sql = " update uf_paydetal t set t.payflag = '9',t.paytype = 'AUTO' ,t.set_auto_time = to_char(SYSDATE,'YYYY-MM-DD HH24:MI:SS') where t.id = '"+id+"' "; + log.info("更新付款状态和时间sql" + sql); + rs.execute(sql); + }else if(Constant.PAYTYPE.MANUAL.equals(payType)) { + String sql = " update uf_paydetal t set t.payflag = '1',t.paytype = 'MANUAL' where t.id = '"+id+"' "; + log.info("更新付款状态和时间sql" + sql); + rs.execute(sql); + } + } + + //调用衡泰接口 + public void sendXquant(String workflownum,String requestid){ + bb.writeLog("requestId:"+requestid+" sendXquant workflownum:"+workflownum+" 调用衡泰接口"); + RecordSet rs = new RecordSet(); + String mainTableName = EcologyValueConvertor.getMainTableNameByRequestId(requestid); + String sql = " select t.autoLaunchPlatformId from "+mainTableName+" t where t.requestid = '"+requestid+"'"; + log.info("查询是否调用衡泰接口:" + sql); + rs.execute(sql); + if(rs.next()) { + String autoLaunchPlatformId = rs.getString("autoLaunchPlatformId"); + if(null!=autoLaunchPlatformId&&"衡泰".equals(autoLaunchPlatformId)){ + PropBean pb = new PropBean(); + String url = pb.getPropName("XQuantUrl");; + Map headers = new HashMap<>(); + JSONObject jsonObject = new JSONObject(); + //流程业务编号 + jsonObject.put("workflownum",workflownum); + //流程业务唯一编码 + jsonObject.put("workflownumber",requestid); + //是否终止 + jsonObject.put("isZZ","否"); + bb.writeLog("sendPost url:"+url+" params:" + jsonObject.toJSONString()+" sendPost发送请求到衡泰"); + sendPost(url,jsonObject.toJSONString(),headers); + } + } + } + + //强制归档 + public void forceArchive(String userId,String ids){ + bb.writeLog("forceArchive userId:"+userId+" ids:" + ids+ " 强制归档"); + User user = new User(); + user.setUid(Integer.valueOf(userId).intValue()); + user.setLogintype("1"); + WfForceOver wfo = new WfForceOver(); + ArrayList requestidlist = new ArrayList(); + RecordSet rs =new RecordSet(); + String sql = " select t.reqid from uf_paydetal t where t.id in (" + ids + ") "; + log.info("强制归档获取requestid" + sql); + rs.execute(sql); + while (rs.next()){ + requestidlist.add(Util.null2String(rs.getString("reqid"))); + } + String remark = "流程强制归档"; + wfo.setRemark(remark); + wfo.doForceOver(requestidlist, null, null, user); + } + + /*** + * + * @param url + * @param params + * @param headsMap + * @return + */ + public String sendPost(String url, String params, Map headsMap) + { + //BaseBean bb = new BaseBean(); + String body = ""; + String encoding = "UTF-8"; + //创建httpclient对象 + CloseableHttpClient client = HttpClients.createDefault(); + //创建post方式请求对象 + HttpPost httpPost = new HttpPost(url); + + + //设置参数到请求对象中 + StringEntity strEntity = new StringEntity(params,encoding);//解决中文乱码问题 + strEntity.setContentEncoding(encoding); + strEntity.setContentType("application/json"); + httpPost.setEntity(strEntity); + + //设置header信息 + //指定报文头【Content-type】、【User-Agent】 + httpPost.setHeader("Content-type", "application/json"); + httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); + + if (headsMap != null && !headsMap.isEmpty()) { + headsMap.forEach((key, value) -> { + //bb.writeLog("key:"+key+" value:"+value); + httpPost.addHeader(key, value); + }); + } + //执行请求操作,并拿到结果(同步阻塞) + CloseableHttpResponse response = null; + try { + response = client.execute(httpPost); + //获取结果实体 + HttpEntity entity = response.getEntity(); + if (entity != null) { + //按指定编码转换结果实体为String类型 + body = EntityUtils.toString(entity, "UTF-8"); + } + EntityUtils.consume(entity); + //释放链接 + response.close(); + } catch (IOException e) { + System.out.println("OrganizationSyn-e:"+e); + e.printStackTrace(); + } + return body; + } + + //流程终止,强制归档 + public String doEndProcess(String requestid, String userId) throws Exception { + // 调用泛微接口强制归档办结 + log.info("====流程终止,强制归档开始,requestid:"+requestid+"===="); + User user = new User(); + user.setUid(Integer.valueOf(userId).intValue()); + user.setLogintype("1"); + WfForceOver wfo = new WfForceOver(); + ArrayList requestidlist = new ArrayList(); + requestidlist.add(requestid); + String remark = "流程强制归档"; + wfo.setRemark(remark); + wfo.doForceOver(requestidlist, null, null, user); + sendXquantByRequestIdEnd(requestid); + return "success"; + + } + + //Action调用衡泰接口 + public void sendXquantByRequestId(String requestid) { + bb.writeLog("requestid:"+requestid+" sendXquantByRequestId Action调用衡泰接口"); + RecordSet rs = new RecordSet(); + String mainTableName = EcologyValueConvertor.getMainTableNameByRequestId(requestid); + String sql = "select t.autoLaunchPlatformId,t.lcbh from "+mainTableName+" t where t.requestid = '"+requestid+"'"; + log.info("查询是否调用衡泰接口:" + sql); + rs.execute(sql); + if(rs.next()) { + String autoLaunchPlatformId = Util.null2String(rs.getString("autoLaunchPlatformId")); + String workflownum = Util.null2String(rs.getString("lcbh")); + if("衡泰".equals(autoLaunchPlatformId)){ + PropBean pb = new PropBean(); + String url = pb.getPropName("XQuantUrl");; + Map headers = new HashMap<>(); + JSONObject jsonObject = new JSONObject(); + //流程业务编号 + jsonObject.put("workflownum",workflownum); + //流程业务唯一编码 + jsonObject.put("workflownumber",requestid); + //是否终止 + jsonObject.put("isZZ","否"); + bb.writeLog("sendPost url:"+url+" params:" + jsonObject.toJSONString()+" sendPost发送请求到衡泰"); + sendPost(url,jsonObject.toJSONString(),headers); + } + } + } + + public void sendXquantByRequestIdEnd(String requestid) { + bb.writeLog("requestid:"+requestid+" sendXquantByRequestIdEnd 流程终止调用衡泰接口"); + RecordSet rs = new RecordSet(); + String mainTableName = EcologyValueConvertor.getMainTableNameByRequestId(requestid); + String sql = "select t.autoLaunchPlatformId,t.lcbh from "+mainTableName+" t where t.requestid = '"+requestid+"'"; + log.info("查询是否调用衡泰接口:" + sql); + rs.execute(sql); + if(rs.next()) { + String autoLaunchPlatformId = Util.null2String(rs.getString("autoLaunchPlatformId")); + String workflownum = Util.null2String(rs.getString("lcbh")); + if("衡泰".equals(autoLaunchPlatformId)){ + PropBean pb = new PropBean(); + String url = pb.getPropName("XQuantUrl");; + Map headers = new HashMap<>(); + JSONObject jsonObject = new JSONObject(); + //流程业务编号 + jsonObject.put("workflownum",workflownum); + //流程业务唯一编码 + jsonObject.put("workflownumber",requestid); + //是否终止 + jsonObject.put("isZZ","是"); + bb.writeLog("sendPost url:"+url+" params:" + jsonObject.toJSONString()+" sendPost发送请求到衡泰"); + sendPost(url,jsonObject.toJSONString(),headers); + } + } + } + +} diff --git a/src/main/java/com/engine/htsc/capitalbusinessPayment/web/CapitalBusinessPaymentAction.java b/src/main/java/com/engine/htsc/capitalbusinessPayment/web/CapitalBusinessPaymentAction.java new file mode 100644 index 0000000..e6af6a8 --- /dev/null +++ b/src/main/java/com/engine/htsc/capitalbusinessPayment/web/CapitalBusinessPaymentAction.java @@ -0,0 +1,138 @@ +package com.engine.htsc.capitalbusinessPayment.web; + +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.capitalbusinessPayment.service.CapitalBusinessPaymentService; +import com.engine.htsc.trip.util.AjaxResult; +import com.engine.workflow.service.RequestMonitorListService; +import com.engine.workflow.service.impl.RequestMonitorListServiceImpl; +import org.apache.commons.lang3.StringUtils; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.Consumes; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.Map; + +/** + * 资金业务付款 + * 出纳支付明细操作Action + */ +public class CapitalBusinessPaymentAction { + + private BaseBean bb = new BaseBean(); + + public CapitalBusinessPaymentAction() { + } + + private CapitalBusinessPaymentService getService() { + return ServiceUtil.getService(CapitalBusinessPaymentService.class); + } + + private RequestMonitorListService getArchiveService (User user) { + return (RequestMonitorListServiceImpl) ServiceUtil.getService(RequestMonitorListServiceImpl.class, user); + } + + /** + * 出纳点击-自动付款 + * @param request + * @return + */ + @POST + @Path("/doAutoPay") + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult doAutoPay(@Context HttpServletRequest request, @Context HttpServletResponse response) { + String result; + try { + Map request2Map = ParamUtil.request2Map(request); + String ids = Util.null2String(request2Map.get("ids"));//勾选明细ids + String userId = String.valueOf(HrmUserVarify.getUser(request,response).getUID());//获取当前处理人 + if (StringUtils.isNotBlank(ids)) { + result = getService().doAutoPay(ids,userId); + } else { + result = "请选择需要自动付款的流程!"; + } + return AjaxResult.ok(result, "修改状态为自动付款成功!"); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 出纳点击-手动付款 + * @param request + * @return + */ + @POST + @Path("/doManualPay") + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult doManualPay(@Context HttpServletRequest request, @Context HttpServletResponse response) { + String result; + try { + Map request2Map = ParamUtil.request2Map(request); + String ids = Util.null2String(request2Map.get("ids")); //勾选明细ids + String userId = String.valueOf(HrmUserVarify.getUser(request,response).getUID());//获取当前处理人 + if (StringUtils.isNotBlank(ids)) { + result = getService().doManualPay(ids,userId); + } else { + result = "请选择需要付款的流程!"; + } + return AjaxResult.ok(result, "修改状态为付款成功!"); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 资金业务付款-流程终止 + * @param request + * @return + */ + @POST + @Path("/doEndProcess") + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult doEndProcess(@Context HttpServletRequest request, @Context HttpServletResponse response) { + String result; + try { + Map request2Map = ParamUtil.request2Map(request); + String requestid = Util.null2String(request2Map.get("requestid")); //获取requestid + String userId = String.valueOf(HrmUserVarify.getUser(request,response).getUID());//获取当前处理人 + if (StringUtils.isNotBlank(requestid)) { + result = getService().doEndProcess(requestid,userId); + } else { + result = "fail"; + } + return AjaxResult.ok(result); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error(e.getMessage()); + } + } + + //TODO 强制归档 + public void forceArchiving(HttpServletRequest request, HttpServletResponse response, User user) { + bb.writeLog("资金业务付款 强制归档请求 request"+request.toString()); + RequestMonitorListService archivingService = getArchiveService(user); + bb.writeLog("资金业务付款获取泛微归档服务 archivingService:"+archivingService); + //TODO 根据支付明细Ids获取requestId + String multiRequestIds = request.getParameter("multiRequestIds"); + archivingService.archivingRequestById(request,response,user); + } + + + + +} diff --git a/src/main/java/com/engine/htsc/ccwg/service/Upload2StorageGatewayService.java b/src/main/java/com/engine/htsc/ccwg/service/Upload2StorageGatewayService.java new file mode 100644 index 0000000..3d8dc47 --- /dev/null +++ b/src/main/java/com/engine/htsc/ccwg/service/Upload2StorageGatewayService.java @@ -0,0 +1,17 @@ +package com.engine.htsc.ccwg.service; + +import java.util.Map; + +public interface Upload2StorageGatewayService { + + /** + * + * @param params + * @return + */ + Map uploaddoc(Map params); + + + + +} diff --git a/src/main/java/com/engine/htsc/ccwg/service/impl/Upload2StorageGatewayServiceImpl.java b/src/main/java/com/engine/htsc/ccwg/service/impl/Upload2StorageGatewayServiceImpl.java new file mode 100644 index 0000000..179ddb7 --- /dev/null +++ b/src/main/java/com/engine/htsc/ccwg/service/impl/Upload2StorageGatewayServiceImpl.java @@ -0,0 +1,118 @@ +package com.engine.htsc.ccwg.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.ccwg.service.Upload2StorageGatewayService; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.util.EntityUtils; +import weaver.conn.RecordSet; +import weaver.docs.qc969424.util.QC969424RequestBaseUtil; +import weaver.docs.qc969424.util.QC969424Util; +import weaver.general.BaseBean; +import weaver.general.Util; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.zip.ZipInputStream; + +public class Upload2StorageGatewayServiceImpl extends Service implements Upload2StorageGatewayService { + @Override + public Map uploaddoc(Map params) { + BaseBean bb = new BaseBean(); + + Map apidate = new HashMap(); + bb.writeLog("Upload2StorageGatewayServiceImpl"); + RecordSet rs = new RecordSet(); + BufferedInputStream inputStream = null; + CloseableHttpResponse clresponse = null; + try{ + String imagefileid = Util.null2String(params.get("imagefileid")); + String iszip = ""; + String imagefilename = ""; + String fileRealPath = ""; + String sql = " select t1.imageFileId,t1.imageFileName,t1.imageFileType,t1.imageFileUsed,t1.fileRealPath,t1.isZip,t1.isencrypt,t1.filesize,t1.downloads,t1.miniimgpath,t1.imgsize,t1.isFTP,t1.FTPConfigId,t1.isaesencrypt,t1.aescode,t1.tokenKey,t1.storageStatus,t1.comefrom,t2.imagefilename as realname from ImageFile t1 left join DocImageFile t2 on t1.imagefileid = t2.imagefileid where t1.imagefileid = " + imagefileid; + bb.writeLog("sql:"+sql); + rs.execute(sql); + if (rs.next()) + { + imagefilename = Util.null2String(rs.getString("realname")); + if (imagefilename.equals("")) { + imagefilename = Util.null2String(rs.getString("imageFileName")); + } + fileRealPath = Util.null2String(rs.getString("fileRealPath")); + iszip = Util.null2String(rs.getString("isZip")); + } + if (fileRealPath != null && !fileRealPath.equals("")) + { + File file = new File(fileRealPath); + if (iszip.equals("1")) { + ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(file)); + if (zipInputStream.getNextEntry() != null) { + inputStream = new BufferedInputStream(zipInputStream); + } + } else { + inputStream = new BufferedInputStream(new FileInputStream(file)); + } + } + + String upload = QC969424Util.getPV("upload"); + String systemNo = QC969424Util.getPV("systemNo"); + String url = upload+"/"+systemNo; + bb.writeLog("url:"+url); + bb.writeLog("imagefilename:"+imagefilename); + QC969424RequestBaseUtil qc = new QC969424RequestBaseUtil(); + clresponse= qc.doUpload(url,imagefilename,inputStream); + bb.writeLog("clresponse:"+clresponse); + + int statusCode = clresponse.getStatusLine().getStatusCode(); + bb.writeLog("statusCode:"+statusCode); + if(statusCode == 200) + { + String res = EntityUtils.toString(clresponse.getEntity()); + bb.writeLog("res:"+res); + if(!"".equals(res)){ + sql = " update imagefile set fileid=? where imagefileid=?"; + bb.writeLog(" sql:"+sql+" imagefileid:"+imagefileid); + boolean flag = rs.executeUpdate(sql,new Object[]{res,imagefileid}); + if(flag){ + apidate.put("flag","1"); + } + }else{ + apidate.put("flag","-1"); + } + }else{ + apidate.put("flag","-2"); + } + + inputStream.close(); + //释放链接 + clresponse.close(); + + }catch (Exception ex){ + ex.printStackTrace(); + bb.writeLog("ex:"+ex); + }finally { + if(inputStream !=null) + { + try { + inputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + if(clresponse !=null) + { + try { + clresponse.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return apidate; + } +} diff --git a/src/main/java/com/engine/htsc/ccwg/web/Upload2StorageGatewayAction.java b/src/main/java/com/engine/htsc/ccwg/web/Upload2StorageGatewayAction.java new file mode 100644 index 0000000..1adac2f --- /dev/null +++ b/src/main/java/com/engine/htsc/ccwg/web/Upload2StorageGatewayAction.java @@ -0,0 +1,67 @@ +package com.engine.htsc.ccwg.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.ccwg.service.Upload2StorageGatewayService; +import com.engine.htsc.ccwg.service.impl.Upload2StorageGatewayServiceImpl; + +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; +import weaver.hrm.resource.ResourceComInfo; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +/** + * + */ + + +public class Upload2StorageGatewayAction { + + public Upload2StorageGatewayService getService(){ + return ServiceUtil.getService(Upload2StorageGatewayServiceImpl.class); + } + + /** + * 看阅新门户集成接口,列表数据 + * @param request + * @param response + * @return + */ + @GET + @Path("/uploaddoc") + @Produces({MediaType.TEXT_PLAIN}) + public String getkanyuelist(@Context HttpServletRequest request, @Context HttpServletResponse response){ + + BaseBean bb = new BaseBean(); + String htuserid = request.getHeader("iv-user"); + bb.writeLog("htuserid:"+htuserid); + + Map apidatas = new HashMap(); + try { + Map param = ParamUtil.request2Map(request); + apidatas = getService().uploaddoc(param); + } catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return JSONObject.toJSONString(apidatas); + } + + + + + +} diff --git a/src/main/java/com/engine/htsc/cgrwd/cmd/CgrwdProjectInfoCmd.java b/src/main/java/com/engine/htsc/cgrwd/cmd/CgrwdProjectInfoCmd.java new file mode 100644 index 0000000..69bfcd1 --- /dev/null +++ b/src/main/java/com/engine/htsc/cgrwd/cmd/CgrwdProjectInfoCmd.java @@ -0,0 +1,607 @@ +package com.engine.htsc.cgrwd.cmd; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import com.engine.htsc.itlxlc.util.RequestShareUtil; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.dom4j.Document; +import org.dom4j.DocumentException; +import org.dom4j.DocumentHelper; +import org.dom4j.Element; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.GCONST; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.interfaces.htsc.cus.HTUtil; + +import java.io.IOException; +import java.util.*; + +public class CgrwdProjectInfoCmd extends AbstractCommonCommand> { + + public CgrwdProjectInfoCmd(User user, Map params) { + this.params = params; + this.user = user; + } + + + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + + RecordSet rs = new RecordSet(); + BaseBean bb = new BaseBean(); + String formid = Util.null2String(params.get("formid")); + String cglxfieldis = ""; + String cglxsql = " select id from workflow_billfield where billid="+formid+" and fieldname='cglx' " ; + rs.execute(cglxsql); + if(rs.next()){ + cglxfieldis = Util.null2String(rs.getString("id")); + } + + bb.writeLog("cglxfieldis:"+cglxfieldis); + String cgfsfieldis = ""; + String cgfssql = " select id from workflow_billfield where billid="+formid+" and fieldname='cgfs' " ; + rs.execute(cgfssql); + if(rs.next()){ + cgfsfieldis = Util.null2String(rs.getString("id")); + } + bb.writeLog("cgfsfieldis:"+cgfsfieldis); + + System.out.println( "in=================ItcglcProjectInfoCmd" ); + Map apimap = new HashMap(); + + String projCode = Util.null2String(params.get("projectCode")); + int nf = Util.getIntValue(Util.null2String(params.get("nf"))); + String userid = Util.null2String(user.getUID()); + System.out.println("userid:"+userid); + + PropBean pb = new PropBean(); + String url = pb.getPropName("ItcglcProjectDetailUrl") ; + bb.writeLog("url:"+url); + + Map headers = new HashMap(); + + HTUtil htutil = new HTUtil(); + String token = htutil.getAppToken(); + headers.put("JTXT-AUTH-TOKEN", token); + headers.put("JTXT-AUTH-TYPE", "APP"); + + JSONObject jsonObject = new JSONObject(); + String workcode = ""; + String sql = " select workcode from hrmresource where id= "+userid; + rs.execute(sql); + if(rs.next()){ + workcode = Util.null2String(rs.getString("workcode")); + } + + List> nlist = new ArrayList>(); + List> n1list = new ArrayList>(); + List> n2list = new ArrayList>(); + + List> itlxsqlist = new ArrayList>(); + List> xgcglclist = new ArrayList>(); + List> cgxxlist = new ArrayList>(); + + String hrmids = "" ; + List> hrmList = new ArrayList>(); + String xcgwyhsy = "1"; + String projectNumber = ""; + String xmmczw = "" ; + + String requestids = ""; + try{ + //011516 + jsonObject.put("badge",workcode); + jsonObject.put("projectCode",projCode); + String response = sendPost(url,jsonObject.toJSONString(),headers); + bb.writeLog("response:"+response); + System.out.println("response:"+response); + if(!"".equals(response)) + { + JSONObject retJson = JSONObject.parseObject(response); + String projectMasterPracticebadge = retJson.getString("projectMasterPracticebadge"); + Map hrmMap = null; + if(!"".equals(projectMasterPracticebadge)) + { + sql = " select id,lastname from hrmresource where workcode='"+projectMasterPracticebadge+"' and belongto is null "; + rs.execute(sql); + while (rs.next()){ + String hrmid = Util.null2String(rs.getString("id")); + String lastname = Util.null2String(rs.getString("lastname")); + hrmids += hrmids=="" ? hrmid : ","+hrmid ; + hrmMap = new HashMap(); + hrmMap.put("id",hrmid); + hrmMap.put("name",lastname); + hrmList.add(hrmMap); + } + } + + projectNumber = retJson.getString("projectNumber"); + System.out.println("projectNumber:"+projectNumber); + xmmczw = retJson.getString("projectName"); + + System.out.println("xmmczw:"+xmmczw); + + if(retJson.containsKey("otherWorkflowList1")){ + JSONArray itlxsqArray = retJson.getJSONArray("otherWorkflowList1"); + Map itlxsqMap = null; + for(int i=0;i-1){ + String requsturl = itlxsqurl.substring(itlxsqurl.indexOf("requestid")); + if(requsturl.indexOf("&") > -1){ + String itlx_requetsid = requsturl.substring(10,requsturl.indexOf("&")); + if(!"".equals(itlx_requetsid) && !"1".equals(itlx_requetsid)){ + int num = getWorkflowStoped(itlx_requetsid); + if(num == 0){ + requestids += requestids=="" ? itlx_requetsid : ","+itlx_requetsid ; + + itlxsqMap = new HashMap(); + itlxsqMap.put("title",title); + itlxsqMap.put("workflownum",workFlowNum); + itlxsqMap.put("workflownumber",workFlowNumber); + itlxsqMap.put("url",itlxsqurl); + itlxsqlist.add(itlxsqMap); + + } + } + }else{ + String itlx_requetsid = requsturl.substring(10); + if(!"".equals(itlx_requetsid) && !"1".equals(itlx_requetsid)){ + int num = getWorkflowStoped(itlx_requetsid); + if(num == 0){ + requestids += requestids=="" ? itlx_requetsid : ","+itlx_requetsid ; + + itlxsqMap = new HashMap(); + itlxsqMap.put("title",title); + itlxsqMap.put("workflownum",workFlowNum); + itlxsqMap.put("workflownumber",workFlowNumber); + itlxsqMap.put("url",itlxsqurl); + itlxsqlist.add(itlxsqMap); + + } + } + } + } + } + + } + } + + if(retJson.containsKey("purchaseList")) + { + JSONArray xgcglcArray = retJson.getJSONArray("purchaseList"); + Map xgcglcMap = null; + for(int i=0;i-1){ + String requsturl = cgxglcurl.substring(cgxglcurl.indexOf("requestid")); + if(requsturl.indexOf("&") > -1){ + String cgxglc_requetsid = requsturl.substring(10,requsturl.indexOf("&")); + if(!"".equals(cgxglc_requetsid) && !"1".equals(cgxglc_requetsid)){ + int num = getWorkflowStoped(cgxglc_requetsid); + if(num == 0){ + requestids += requestids=="" ? cgxglc_requetsid : ","+cgxglc_requetsid ; + + xgcglcMap = new HashMap(); + xgcglcMap.put("title",title); + xgcglcMap.put("workflownum",workFlowNum); + xgcglcMap.put("url",cgxglcurl); + xgcglclist.add(xgcglcMap); + + } + } + }else{ + String cgxglc_requetsid = requsturl.substring(10); + if(!"".equals(cgxglc_requetsid) && !"1".equals(cgxglc_requetsid)){ + int num = getWorkflowStoped(cgxglc_requetsid); + if(num == 0){ + requestids += requestids=="" ? cgxglc_requetsid : ","+cgxglc_requetsid ; + + xgcglcMap = new HashMap(); + xgcglcMap.put("title",title); + xgcglcMap.put("workflownum",workFlowNum); + xgcglcMap.put("url",cgxglcurl); + xgcglclist.add(xgcglcMap); + + } + } + } + } + } + + } + } + + if(retJson.containsKey("itsystemPurchaseData")){ + JSONObject cgxxObject = retJson.getJSONObject("itsystemPurchaseData"); + System.out.println("cgxxObject:"+cgxxObject); + if(cgxxObject !=null){ + JSONArray cgxxArray = cgxxObject.getJSONArray("item"); + System.out.println("cgxxArray:"+cgxxArray.size()); + Map cgxxMap = null; + + int d_xcgwyhsy = 0; + for(int i=0;i=2000000) + { + if("0".equals(cgfs) || "1".equals(cgfs) || "4".equals(cgfs) || "5".equals(cgfs)){ + + d_xcgwyhsy++; + } + } + } + + //String y_department = Util.null2String(cgxxObj.get("y_department")); + String y_department_id = Util.null2String(cgxxObj.get("y_department_id")); + List> ysbmList = new ArrayList>(); + String ysbm = "" ; + if(!"".equals(y_department_id)) + { + Map ysbmMap = null; + y_department_id = "'"+y_department_id.replaceAll(",","','")+"'"; + sql = " select id,departmentname from hrmdepartment l where l.departmentcode in("+y_department_id+")"; + rs.execute(sql); + while (rs.next()){ + String deptid = Util.null2String(rs.getString("id")); + String departmentname = Util.null2String(rs.getString("departmentname")); + ysbm += ysbm=="" ? deptid : ","+deptid ; + + ysbmMap = new HashMap(); + ysbmMap.put("id",deptid); + ysbmMap.put("name",departmentname); + ysbmList.add(ysbmMap); + } + } + String c_content = Util.null2String(cgxxObj.get("c_content")); + String cgzd = Util.null2String(cgxxObj.get("purchase_system")); +// String cgzd = "" ; +// if (!"".equals(purchase_system)) { +// sql = " select selectvalue from workflow_selectitem where fieldid="+cgzdfieldis+" and selectname = '"+purchase_system+"'" ; +// rs.execute(sql); +// if (rs.next()){ +// cgzd = Util.null2String(rs.getString("selectvalue")); +// } +// } + String purchase_terms = Util.null2String(cgxxObj.get("purchase_terms")); + String team_id = Util.null2String(cgxxObj.get("team_id")); + String c_remark = Util.null2String(cgxxObj.get("c_remark")); + //String purchaseNum = Util.null2String(cgxxObj.get("purchaseNum")); + + String cgfzr = "" ; + List> cgfzrList = new ArrayList>(); + String caigoufuzerenid = Util.null2String(cgxxObj.get("caigoufuzerenid")); + if(!"".equals(caigoufuzerenid)) + { + Map cgfzrMap = null; + sql = " select id,lastname from hrmresource where workcode='"+caigoufuzerenid+"' and belongto is null "; + rs.execute(sql); + while (rs.next()){ + String hrmid = Util.null2String(rs.getString("id")); + String lastname = Util.null2String(rs.getString("lastname")); + cgfzr += cgfzr=="" ? hrmid : ","+hrmid ; + cgfzrMap = new HashMap(); + cgfzrMap.put("id",hrmid); + cgfzrMap.put("name",lastname); + cgfzrList.add(cgfzrMap); + } + } + +// String caigoufuzeren = Util.null2String(cgxxObj.get("caigoufuzeren")); + String project_name = Util.null2String(cgxxObj.get("project_name")); +// String it_project_num = Util.null2String(cgxxObj.get("it_project_num")); +// String beforehandPublicity = Util.null2String(cgxxObj.get("beforehandPublicity")); + + cgxxMap = new HashMap(); + cgxxMap.put("appid",app_id); + cgxxMap.put("cglx",cglx); + cgxxMap.put("cgfs",cgfs); + cgxxMap.put("ysbm",ysbm); + cgxxMap.put("ysbmObj",ysbmList); + cgxxMap.put("ysje",c_money); + cgxxMap.put("sl",number_units); + cgxxMap.put("cgfzr",cgfzr); + cgxxMap.put("cgfzrObj",cgfzrList); + cgxxMap.put("cgnr",c_content); + cgxxMap.put("cgzd",cgzd); + cgxxMap.put("ejcgzd",purchase_terms); + cgxxMap.put("gys",team_id); + cgxxMap.put("bz",c_remark); + cgxxMap.put("xmmczw",project_name); + cgxxlist.add(cgxxMap); + + System.out.println("4444444"); + } + + if(d_xcgwyhsy > 0) + { + xcgwyhsy = "0"; + } + } + } + + if(retJson.containsKey("projectDetail")){ + JSONObject projDetailObj = retJson.getJSONObject("projectDetail"); + if(projDetailObj !=null) + { + String budgetData = projDetailObj.getString("budgetData").replaceAll("\n",""); + System.out.println("budgetData:"+budgetData); + if(!"".equals(budgetData) && budgetData.startsWith(" nodes = topEle.elements("Item"); + Map dataMap = null; + for (Iterator it = nodes.iterator(); it.hasNext();) + { + Element elm = (Element) it.next(); + + String BudgetYear = elm.elementTextTrim("BudgetYear"); + System.out.println("BudgetYear:" + BudgetYear); + + String BudgetNoAmt = elm.elementTextTrim("BudgetNoAmt"); + System.out.println("BudgetNoAmt:" + BudgetNoAmt); + + String BudgetId = elm.elementTextTrim("BudgetId"); + System.out.println("BudgetId:" + BudgetId); + + + + String BudgetDep = elm.elementTextTrim("BudgetDep"); + System.out.println("BudgetDep:" + BudgetDep); + String deptid = "" ; + String deptname = "" ; + + + String BudgetAmt = elm.elementTextTrim("BudgetAmt"); + System.out.println("BudgetAmt:" + BudgetAmt); + + String BudgetAcct = elm.elementTextTrim("BudgetAcct"); + System.out.println("BudgetAcct:" + BudgetAcct); + + if(!"".equals(BudgetDep)) + { + + sql = " select id,departmentname from hrmdepartment where departmentcode='"+BudgetDep+"' "; + rs.execute(sql); + if(rs.next()){ + deptid = Util.null2String(rs.getString("id")); + deptname = Util.null2String(rs.getString("departmentname")); + } + } + + String yskmmc = ""; + if(!"".equals(BudgetAcct)){ + sql = " select yskmmc from uf_kmpz where yskmbm='"+BudgetAcct+"' "; + rs.execute(sql); + if(rs.next()){ + yskmmc = Util.null2String(rs.getString("yskmmc")); + } + } + + dataMap = new HashMap(); + dataMap.put("BudgetAcct",BudgetAcct); + dataMap.put("BudgetYear",BudgetYear); + dataMap.put("BudgetId",BudgetId); + dataMap.put("yskmmc",yskmmc); + dataMap.put("yskmbm",BudgetAcct); + dataMap.put("BudgetAmt",BudgetAmt); + dataMap.put("BudgetDep",BudgetDep); + dataMap.put("deptid",deptid); + dataMap.put("deptname",deptname); + + if(BudgetYear.equals(Util.null2String(nf))) + { + nlist.add(dataMap); + } + + if(BudgetYear.equals(Util.null2String(nf+1))) + { + n1list.add(dataMap); + } + + if(BudgetYear.equals(Util.null2String(nf+2))) + { + n2list.add(dataMap); + } + } + } + } + } + } + }catch (Exception e){ + System.out.println("e---"+e); + bb.writeLog("e--:"+e); + } + + + if(!"".equals(requestids)){ + try{ + RequestShareUtil RequestShareUtil = new RequestShareUtil(); + bb.writeLog("ItcglcProjectInfoCmd--RequestShareUtil--"+requestids); + RequestShareUtil.addShare(Util.null2String(userid),requestids); + }catch (Exception e){ + bb.writeLog("e---"+e); + } + } + + System.out.println("cgxxlist:"+cgxxlist.size()); + apimap.put("value",hrmids); + apimap.put("specialobj",hrmList); + apimap.put("xmbh",projectNumber); + apimap.put("xcgwyhsy",xcgwyhsy); + apimap.put("xmmczw",xmmczw); + + apimap.put("xglcoa",requestids); + + apimap.put("nlist",nlist); + apimap.put("n1list",n1list); + apimap.put("n2list",n2list); + + apimap.put("itlxsqlist",itlxsqlist); + apimap.put("xgcglclist",xgcglclist); + apimap.put("cgxxlist",cgxxlist); + return apimap; + } + /*** + * + * @param url + * @param params + * @param headsMap + * @return + */ + public String sendPost(String url, String params, Map headsMap) + { + //BaseBean bb = new BaseBean(); + String body = ""; + String encoding = "UTF-8"; + //创建httpclient对象 + CloseableHttpClient client = HttpClients.createDefault(); + //创建post方式请求对象 + HttpPost httpPost = new HttpPost(url); + + + //设置参数到请求对象中 + StringEntity strEntity = new StringEntity(params,encoding);//解决中文乱码问题 + strEntity.setContentEncoding(encoding); + strEntity.setContentType("application/json"); + httpPost.setEntity(strEntity); + + //设置header信息 + //指定报文头【Content-type】、【User-Agent】 + httpPost.setHeader("Content-type", "application/json"); + httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); + + if (headsMap != null && !headsMap.isEmpty()) { + headsMap.forEach((key, value) -> { + //bb.writeLog("key:"+key+" value:"+value); + httpPost.addHeader(key, value); + }); + } + //执行请求操作,并拿到结果(同步阻塞) + CloseableHttpResponse response = null; + try { + response = client.execute(httpPost); + //获取结果实体 + HttpEntity entity = response.getEntity(); + if (entity != null) { + //按指定编码转换结果实体为String类型 + body = EntityUtils.toString(entity, encoding); + } + EntityUtils.consume(entity); + //释放链接 + response.close(); + } catch (IOException e) { + System.out.println("OrganizationSyn-e:"+e); + e.printStackTrace(); + } + return body; + } + + + public int getWorkflowStoped(String requestid){ + BaseBean bb = new BaseBean(); + RecordSet rs = new RecordSet(); + int i = 0; + try{ + String sql = " select requestid from workflow_requestbase t\n" + + " where t.requestid="+requestid+" and (t.isstopped=1 or t.currentnodeid in(select id from workflow_nodebase k where k.unnumber in('itcgsq_zz','itlxsq_zz') )) " ; + rs.execute(sql); + if (rs.next()){ + i++; + } + bb.writeLog("requestid:"+requestid); + bb.writeLog("sql:"+sql); + bb.writeLog("i:"+i); + + }catch (Exception e){ + } + return i; + } + + public static void main(String[] args) { + GCONST.setRootPath("WEB-INF/"); + GCONST.setServerName("ecology"); + Map params=new HashMap<>(); + params.put("usercode","011516"); + params.put("projectCode","621041"); + params.put("nf","2021"); + + User user = new User(5620); + CgrwdProjectInfoCmd ItcglcProjectInfoCmd = new CgrwdProjectInfoCmd(user,params); + CommandContext ceshi = new CommandContext(null,null); + ItcglcProjectInfoCmd.execute(ceshi); + } + + + + +} diff --git a/src/main/java/com/engine/htsc/cgrwd/service/CgrwdService.java b/src/main/java/com/engine/htsc/cgrwd/service/CgrwdService.java new file mode 100644 index 0000000..4fba27c --- /dev/null +++ b/src/main/java/com/engine/htsc/cgrwd/service/CgrwdService.java @@ -0,0 +1,15 @@ +package com.engine.htsc.cgrwd.service; + +import weaver.hrm.User; +import java.util.Map; + +public interface CgrwdService { + + /*** + * + * @param user + * @param params + * @return + */ + Map getCgrwdProjectInfo(User user, Map params); +} diff --git a/src/main/java/com/engine/htsc/cgrwd/service/impl/CgrwdServiceImpl.java b/src/main/java/com/engine/htsc/cgrwd/service/impl/CgrwdServiceImpl.java new file mode 100644 index 0000000..c9e9c68 --- /dev/null +++ b/src/main/java/com/engine/htsc/cgrwd/service/impl/CgrwdServiceImpl.java @@ -0,0 +1,17 @@ +package com.engine.htsc.cgrwd.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.cgrwd.service.CgrwdService; +import com.engine.htsc.itcglc.cmd.*; +import weaver.hrm.User; + +import java.util.Map; + +public class CgrwdServiceImpl extends Service implements CgrwdService { + + @Override + public Map getCgrwdProjectInfo(User user, Map params) { + return commandExecutor.execute(new ItcglcProjectInfoCmd(user,params)); + } + +} diff --git a/src/main/java/com/engine/htsc/cgrwd/web/CgrwdAction.java b/src/main/java/com/engine/htsc/cgrwd/web/CgrwdAction.java new file mode 100644 index 0000000..b0e0a7f --- /dev/null +++ b/src/main/java/com/engine/htsc/cgrwd/web/CgrwdAction.java @@ -0,0 +1,163 @@ +package com.engine.htsc.cgrwd.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.cgrwd.service.CgrwdService; +import com.engine.htsc.cgrwd.service.impl.CgrwdServiceImpl; +import com.engine.htsc.payment.util.PayUtil; +import weaver.conn.RecordSet; +import weaver.formmode.setup.ModeRightInfo; +import weaver.general.Util; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class CgrwdAction { + + public CgrwdService getService(HttpServletRequest request, HttpServletResponse response){ + return (CgrwdService) ServiceUtil.getService(CgrwdServiceImpl.class); + } + + @GET + @Path("/getimagefileid") + @Produces({MediaType.TEXT_PLAIN}) + public String getImageFileid(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = new HashMap(); + try { + Map param = ParamUtil.request2Map(request); + RecordSet rs = new RecordSet(); + String docids = Util.null2String(param.get("docids")); + String imagefileids = "" ; + if(!"".equals(docids)){ + String sql = " select imagefileid from docimagefile where docid in("+docids+") "; + rs.execute(sql); + while(rs.next()){ + String imagefileid = Util.null2String(rs.getString("imagefileid")) ; + imagefileids += imagefileids==""? imagefileid : ","+imagefileid ; + } + } + apidatas.put("imagefileids", imagefileids); + apidatas.put("api_status", true); + apidatas.put("api_errormsg", ""); + } catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return JSONObject.toJSONString(apidatas); + } + + + + @GET + @Path("/getCgrwdProjectInfo") + @Produces({MediaType.TEXT_PLAIN}) + public String getCgrwdProjectInfo(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = new HashMap(); + try { + User user = HrmUserVarify.getUser( request, response ); + Map param = ParamUtil.request2Map(request); + apidatas = getService(request,response).getCgrwdProjectInfo(user,param); + apidatas.put("api_status", true); + apidatas.put("api_errormsg", ""); + } catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return JSONObject.toJSONString(apidatas); + } + + + @GET + @Path("/createRequestMark") + @Produces({MediaType.TEXT_PLAIN}) + public String createRequestMark(@Context HttpServletRequest request, @Context HttpServletResponse response){ + + Map apidatas = new HashMap(); + + ModeRightInfo modeRightInfo = new ModeRightInfo(); + RecordSet rs = new RecordSet(); + int workFlowId = Util.getIntValue(request.getParameter("workflowid")); + int formModeId = PayUtil.getFormModeIdByCubeName("uf_fklcbh"); + + try{ + String sql = "select WORKFLOWNAME,UNNUMBER from workflow_base where ID=?"; + rs.executeQuery(sql, workFlowId); + String name = ""; + if (rs.next()) { + name = rs.getString("WORKFLOWNAME"); + } + if (!"".equals(name)) { + String unNumber = PayUtil.getUnNumberByWorkFlowId(workFlowId); + LocalDateTime now = LocalDateTime.now(); + String yM = now.format(DateTimeFormatter.ofPattern("yyyyMM")); + + synchronized (this) { + + StringBuilder mark = new StringBuilder(); //流程编码 + rs.executeQuery(" select id,lsh,MODEUUID from uf_fklcbh where ny = '" + yM + "' and LCLX='" + unNumber + "'"); + if (rs.next()) { + //更新 + int num = Util.getIntValue(rs.getString("lsh")) + 1; + int id = Util.getIntValue(rs.getString("id")); + String updateSql = "update uf_fklcbh set lsh=? where id=?"; + rs.executeUpdate(updateSql, num, id); + mark = new StringBuilder(num + ""); + while (mark.length() < 6) { + mark.insert(0, "0"); + } + mark = new StringBuilder(name + now.format(DateTimeFormatter.ofPattern("yyyyMM")) + mark); + } else { + String modeUuid = UUID.randomUUID().toString(); + String userId = Util.null2String(request.getParameter("f_weaver_belongto_userid")); + String userType = Util.null2String(request.getParameter("f_weaver_belongto_usertype")); + String createDate = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + String createTime = now.format(DateTimeFormatter.ofPattern("HH:mm:ss")); + //插入 + String insertSql = " insert into uf_fklcbh" + + " (FORMMODEID,MODEDATACREATER,MODEDATACREATERTYPE,MODEDATACREATEDATE,MODEDATACREATETIME,MODEUUID,LSH,NY,LCLX) \n" + + " values(?,?,?,?,?,?,?,?,?)"; + + rs.executeUpdate(insertSql, formModeId, userId, userType, createDate, createTime, modeUuid, "1", yM, unNumber); + mark = new StringBuilder(name + now.format(DateTimeFormatter.ofPattern("yyyyMM")) + "000001"); + + //权限重构 + int dataId = PayUtil.getDataIdByUUID(modeUuid); + modeRightInfo.editModeDataShare(1, formModeId, dataId); + } + + apidatas.put("value",mark.toString()); + apidatas.put("api_status", true); + apidatas.put("api_errormsg", ""); + } + }else{ + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "流程名称为空"); + } + }catch (Exception e){ + e.printStackTrace(); + + apidatas.put("api_status", false); + apidatas.put("api_errormsg", e.getMessage()); + } + + return JSONObject.toJSONString(apidatas); + } + +} + + diff --git a/src/main/java/com/engine/htsc/changeCloudTicket/web/NewCTAction.java b/src/main/java/com/engine/htsc/changeCloudTicket/web/NewCTAction.java new file mode 100644 index 0000000..9bcd326 --- /dev/null +++ b/src/main/java/com/engine/htsc/changeCloudTicket/web/NewCTAction.java @@ -0,0 +1,29 @@ +package com.engine.htsc.changeCloudTicket.web; + +import com.api.htsc.browser.ESBBrowser; +import weaver.hrm.resource.ResourceComInfo; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; + +public class NewCTAction { + + @GET + @Path("/getAllTicket") + @Produces({MediaType.APPLICATION_JSON}) + public String getAllTicket(@QueryParam("UserCode") String UserCode, + @QueryParam("InvoiceType") String InvoiceType, @QueryParam("pageNo") String pageNo, + @QueryParam("pagesize") String pagesize){ + String workcode = ""; + try { + ResourceComInfo resourceComInfo = new ResourceComInfo(); + workcode = resourceComInfo.getWorkcode(UserCode); + } catch (Exception e) { + e.printStackTrace(); + } + return new ESBBrowser().getInvoiceInfo(workcode,InvoiceType,pageNo,pagesize,"","","",""); + } +} diff --git a/src/main/java/com/engine/htsc/contacts/service/ContactsService.java b/src/main/java/com/engine/htsc/contacts/service/ContactsService.java new file mode 100644 index 0000000..b26f57e --- /dev/null +++ b/src/main/java/com/engine/htsc/contacts/service/ContactsService.java @@ -0,0 +1,178 @@ +package com.engine.htsc.contacts.service; + + +import com.engine.core.impl.Service; +import org.apache.commons.lang.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.resource.ResourceComInfo; + +import java.text.SimpleDateFormat; +import java.util.*; + +public class ContactsService extends Service { + + /** + * 根据userid获取常用联系人的id + * @param userid + * @return + */ + public List getTopContactsIdsByUserid(String userid){ + BaseBean bs = new BaseBean(); + RecordSet rs = new RecordSet(); + List contactList = new ArrayList<>(); + + try{ + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.MONTH,-6); + String beginDate = new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime()); + + //内审签字意见类型为a + Map contactsMap = new HashMap<>(); + String sql = "select receivedpersonids from workflow_requestlog where operator = '"+userid+"' and operatedate >= '"+beginDate+"' and logtype = 'a'"; + bs.writeLog(sql); + rs.executeQuery(sql); + while(rs.next()){ + String receivedIds = Util.null2String(rs.getString("receivedpersonids")); + for(String receivedId:receivedIds.split(",")){ + if(StringUtils.isNotBlank(receivedId)){ + Integer count = contactsMap.get(receivedId); + if(count!=null){ + contactsMap.put(receivedId,++count); + }else{ + contactsMap.put(receivedId,1); + } + } + } + } + + //降序添加 + Set contactSet = new LinkedHashSet<>(); + List> sortList = sortByValue(contactsMap); + if(sortList.size()>0){ + for(int i=0;i> sortByValue(Map map){ + List> list = new ArrayList>(map.entrySet()); + Collections.sort(list,new Comparator>() { + @Override + public int compare(Map.Entry o1, Map.Entry o2) { + return o2.getValue().compareTo(o1.getValue()); + } + }); + return list; + } + + /** + * 获得常用联系人 + * @param userid + * @return + */ + public Map getTopContacts(String userid){ + BaseBean bs = new BaseBean(); + RecordSet rs = new RecordSet(); + Map resultMap = new HashMap<>(); + + try{ + ResourceComInfo resourceComInfo = new ResourceComInfo(); + + String cylxr = ""; + String sql = "select cylxr from uf_hqbmfzrcylxr where bmfzr = '"+userid+"'"; + bs.writeLog(sql); + rs.executeQuery(sql); + if(rs.next()){ + cylxr = Util.null2String(rs.getString("cylxr")); + } + + List contactsList; + if(StringUtils.isNotBlank(cylxr)){ + contactsList = Arrays.asList(cylxr.split(",")); + }else{ + contactsList = getTopContactsIdsByUserid(userid); + } + + List> contactsMapList = new ArrayList<>(); + for(String id:contactsList){ + if(StringUtils.isNotEmpty(id)){ + Map userMap = new HashMap<>(); + userMap.put("id",id); + userMap.put("name",resourceComInfo.getLastname(id)); + contactsMapList.add(userMap); + } + } + resultMap.put("contacts",contactsMapList); + }catch (Exception e){ + e.printStackTrace(); + } + + return resultMap; + } + + /** + * 判断自由节点是否满足查询条件 + * 以后可能会拓展规则 + * @param nodeid + * @return + */ + public Map checkoutFreeNode(String nodeid){ + BaseBean bs = new BaseBean(); + RecordSet rs = new RecordSet(); + Map resultMap = new HashMap<>(); + + boolean flag = false; + String sql = "select nodename from workflow_freenode where id = '"+nodeid+"'"; + bs.writeLog(sql); + rs.executeQuery(sql); + if(rs.next()){ + String nodename = Util.null2String(rs.getString("nodename")); + if("会签部门负责人".equals(nodename)){ + flag = true; + } + } + resultMap.put("result",flag); + + return resultMap; + } + + +} diff --git a/src/main/java/com/engine/htsc/contacts/web/ContactsAction.java b/src/main/java/com/engine/htsc/contacts/web/ContactsAction.java new file mode 100644 index 0000000..411bedc --- /dev/null +++ b/src/main/java/com/engine/htsc/contacts/web/ContactsAction.java @@ -0,0 +1,66 @@ +package com.engine.htsc.contacts.web; + + +import com.alibaba.fastjson.JSON; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.contacts.service.ContactsService; +import weaver.general.BaseBean; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +public class ContactsAction { + + ContactsService getService(){ + return ServiceUtil.getService(ContactsService.class); + } + + @POST + @Path("/getTopContacts") + @Produces({MediaType.TEXT_PLAIN}) + public String getTopContacts(@Context HttpServletRequest request, @Context HttpServletResponse response){ + BaseBean bs = new BaseBean(); + Map apidatas = new HashMap(); + bs.writeLog("----ContactsAction-----"); + try{ + String userid = request.getParameter("userid"); + + ContactsService contactsService = getService(); + apidatas = contactsService.getTopContacts(userid); + }catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + + return JSON.toJSONString(apidatas); + } + + @POST + @Path("/checkoutFreeNode") + @Produces({MediaType.TEXT_PLAIN}) + public String checkoutFreeNode(@Context HttpServletRequest request, @Context HttpServletResponse response){ + BaseBean bs = new BaseBean(); + Map apidatas = new HashMap(); + bs.writeLog("----ContactsAction-----"); + try{ + String nodeid = request.getParameter("nodeid"); + + ContactsService contactsService = getService(); + apidatas = contactsService.checkoutFreeNode(nodeid); + }catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + + return JSON.toJSONString(apidatas); + } +} diff --git a/src/main/java/com/engine/htsc/convertor/EcologyValueConvertor.java b/src/main/java/com/engine/htsc/convertor/EcologyValueConvertor.java new file mode 100644 index 0000000..c4c60ad --- /dev/null +++ b/src/main/java/com/engine/htsc/convertor/EcologyValueConvertor.java @@ -0,0 +1,87 @@ +package com.engine.htsc.convertor; + +import com.engine.htsc.doc.model.UserInfoModel; +import weaver.conn.RecordSet; +import weaver.general.Util; + +/** + * 泛微流程表单字段转换服务 + * selectvalue <------> selectname + */ +public class EcologyValueConvertor { + + /** + * 根据requestId获取主表表名 + * @param requestId + * @return + */ + public static String getMainTableNameByRequestId(String requestId) { + RecordSet rs = new RecordSet(); + rs.executeQuery("select t2.tablename from workflow_requestbase t0,workflow_base t1,workflow_bill t2 where t0.workflowid = t1.id " + + " and t1.formid = t2.id and t0.requestid = ?",new Object[]{requestId}); + String tablename = ""; + if(rs.next()){ + tablename = rs.getString("tablename"); + } + return tablename; + } + + /** + * 获取展示的字段名 + * @param requestId 流程实例号 + * @param filedName 表单字段 + * @param selectValue 数据库存的字段值 + * @return 展示的字段名 + */ + public static String getSelectNameByRequestIdAndFieldValue(String requestId, String filedName, String selectValue) { + RecordSet rs = new RecordSet(); + String reuslt = ""; + String sql = " select t4.selectname from workflow_requestbase t0,workflow_base t1,workflow_bill t2,workflow_billfield t3,workflow_selectitem t4 where t0.workflowid = t1.id "+ + " and t1.formid = t2.id and t3.billid = t2.id and t4.fieldid = t3.id and t0.requestid = '"+requestId+"' "+ + " and t3.fieldname = '"+filedName+"' "+ + " and t4.selectvalue = '"+selectValue+"' "; + rs.execute(sql); + if(rs.next()) { + reuslt = Util.null2String(rs.getString("selectname")); + } + return reuslt; + } + + /** + * 根据泛微人员Id获取人员DTO + * @param id + * @return + */ + public static UserInfoModel getUserInfoModelById(String id) { + RecordSet rs = new RecordSet(); + UserInfoModel user = new UserInfoModel(); + String sql = " select t0.id,t0.loginid,t0.workcode,t0.lastname,t3.jobtitlecode,t3.jobtitlename,t5.deptid,t4.departmentcode,t4.departmentname,t5.depttypecode,t5.depttypename, "+ + " t5.deptscalelevelcode,t5.deptscalelevelname,t5.deptcodepath,t5.deptnamepath,t0.seclevel,t0.email,t0.telephone,t0.mobile "+ + " from hrmresource t0 ,hrmjobtitles t3, HRMDEPARTMENT t4, hrmdepartmentdefined t5 "+ + " where t0.jobtitle = T3.id and T3.jobdepartmentid = T4.id and t4.id = t5.deptid and t0.id = '"+id+"' "; + rs.executeQuery(sql); + if(rs.next()) { + user.setUserId(Util.null2String(rs.getString("id"))); + user.setLoginId(Util.null2String(rs.getString("loginid"))); + user.setWorkCode(Util.null2String(rs.getString("workcode"))); + user.setName(Util.null2String(rs.getString("lastname"))); + user.setJobCode(Util.null2String(rs.getString("jobtitlecode"))); + user.setJobName(Util.null2String(rs.getString("jobtitlename"))); + user.setDepartmentId(Util.null2String(rs.getString("deptid"))); + user.setDepartmentCode(Util.null2String(rs.getString("departmentcode"))); + user.setDepartmentName(Util.null2String(rs.getString("departmentname"))); + user.setDeptTypeCode(Util.null2String(rs.getString("depttypecode"))); + user.setDeptTypeName(Util.null2String(rs.getString("depttypename"))); + user.setDeptClassCode(Util.null2String(rs.getString("deptscalelevelcode"))); + user.setDeptClassName(Util.null2String(rs.getString("deptscalelevelname"))); + user.setDeptCodePath(Util.null2String(rs.getString("deptcodepath"))); + user.setDeptNamePath(Util.null2String(rs.getString("deptnamepath"))); + user.setSeclLevel(Integer.valueOf(rs.getString("seclevel"))); + user.setEmail(Util.null2String(rs.getString("email"))); + user.setTelephone(Util.null2String(rs.getString("telephone"))); + user.setMobile(Util.null2String(rs.getString("mobile"))); + } + return user; + } + +} diff --git a/src/main/java/com/engine/htsc/cooperation/ReloadXzUser.java b/src/main/java/com/engine/htsc/cooperation/ReloadXzUser.java new file mode 100644 index 0000000..c2a547f --- /dev/null +++ b/src/main/java/com/engine/htsc/cooperation/ReloadXzUser.java @@ -0,0 +1,85 @@ +package com.engine.htsc.cooperation; + +import com.alibaba.fastjson.JSON; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.interfaces.htsc.cooperation.task.TaskTools; +import weaver.soa.workflow.request.RequestInfo; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class ReloadXzUser { + + + @POST + @Path("/reloadzUser") + @Produces({MediaType.TEXT_PLAIN}) + public String reloadzUser(@Context HttpServletRequest request, @Context HttpServletResponse response){ + PropBean pb = new PropBean(); + + Map apidatas = new HashMap(); + try{ + String xzbillid = Util.null2String(request.getParameter("billid")); + if( xzbillid==""||Util.getIntValue(xzbillid)<0){ + apidatas.put("flag", "false"); + return JSON.toJSONString(apidatas); + } + Map map=new HashMap<>(); + RequestInfo requestinfo=new RequestInfo(); + requestinfo.setRequestid(xzbillid); + map.put("RequestInfo",requestinfo); + RecordSet rs = new RecordSet(); + BaseBean beanBean = new BaseBean(); + beanBean.writeLog("开始做协作任务人员同步!!!!"); + String jbr=""; + String tzydr=""; + String distinctjbr=""; + String distincttzydr=""; + TaskTools tasktools=new TaskTools(); + String sqlvalue=" select wm_concat_old(jbr) as jbr,wm_concat_old(gzr) as gzr from uf_rw where xzsy='"+xzbillid+"'"; + beanBean.writeLog("协作查询所有jbr和gzr的sql:"+sqlvalue); + rs.execute(sqlvalue); + if(rs.next()){ + jbr=rs.getString("jbr").toString(); + tzydr=rs.getString("gzr").toString(); + } + distinctjbr=disinctry(jbr.split(",")); + distincttzydr=disinctry(tzydr.split(",")); + // " jbr,tzydr" + String sqlupdatevalue="update uf_xzsy set jbr=?,tzydr=? where id='"+xzbillid+"'"; + beanBean.writeLog("协作跟新语句:"+sqlupdatevalue+" jbr:"+distinctjbr+"tzydr:"+distincttzydr); + rs.executeUpdate(sqlupdatevalue, distinctjbr,distincttzydr); + apidatas.put("flag", "true"); + + + }catch (Exception e) { + apidatas.put("flag", "false"); + apidatas.put("error", e.getMessage()); + } + return JSON.toJSONString(apidatas); + } + public String disinctry(String[] array){ + + if(array==null||array.length<0){ + return ""; + } + String ryvalue=""; + List listarray= java.util.Arrays.asList(array); + List list=(List) listarray.stream().distinct().collect(Collectors.toList()); + ryvalue=String.join(",", list); + + return ryvalue; + } +} diff --git a/src/main/java/com/engine/htsc/cooperation/TaskShareUser.java b/src/main/java/com/engine/htsc/cooperation/TaskShareUser.java new file mode 100644 index 0000000..433e6fb --- /dev/null +++ b/src/main/java/com/engine/htsc/cooperation/TaskShareUser.java @@ -0,0 +1,208 @@ +package com.engine.htsc.cooperation; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang.StringUtils; +import weaver.conn.RecordSet; +import weaver.formmode.setup.ModeRightInfo; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.GlobatTools.MessageDetailLog; +import weaver.interfaces.htsc.comInfo.PropBean; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.text.SimpleDateFormat; +import java.util.*; + +public class TaskShareUser { + + @POST + @Path("/TaskShareUser") + @Produces({MediaType.TEXT_PLAIN}) + public String TaskShareUser(@Context HttpServletRequest request, @Context HttpServletResponse response){ + PropBean propBean = new PropBean(); + BaseBean bb = new BaseBean(); + RecordSet rs = new RecordSet(); + ModeRightInfo mode=new ModeRightInfo(); + Map apidatas = new HashMap(); + SimpleDateFormat sd= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + MessageDetailLog meslog=new MessageDetailLog("uf_rw_dt2"); + String datetime=sd.format(new Date()); + String rwbillid=""; + try{ + User user = HrmUserVarify.getUser(request, response); + rwbillid = Util.null2String(request.getParameter("billid")); + String bgxr = Util.null2String(request.getParameter("bgxr")); + if(rwbillid==""||bgxr==""){ + apidatas.put("status", false); + apidatas.put("errormsg", "传递参数为空"); + } + + List gzrList = new ArrayList<>(); + String sql = "select gzr from uf_rw where id = '"+rwbillid+"'"; + rs.executeQuery(sql); + if(rs.next()){ + String gzr = Util.null2String(rs.getString("gzr")); + if(StringUtils.isNotEmpty(gzr)){ + gzrList.addAll(Arrays.asList(gzr.split(","))); + } + } + + String userarray= JAVATools.disinctrlist(bgxr.split(",")); + String[] userlist = userarray.split(","); + bb.writeLog("userarray:"+userarray); + for (int i=0;i apidatas = new HashMap(); + SimpleDateFormat sd= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + MessageDetailLog meslog=new MessageDetailLog("uf_xzsy_dt1"); + String datetime=sd.format(new Date()); + String rwbillid=""; + try{ + User user = HrmUserVarify.getUser(request, response); + rwbillid = Util.null2String(request.getParameter("billid")); + String bgxr = Util.null2String(request.getParameter("bgxr")); + if(rwbillid==""||bgxr==""){ + apidatas.put("status", false); + apidatas.put("errormsg", "传递参数为空"); + } + + String modedatacreater = "" ; + List tzydrList = new ArrayList<>(); + String sql = " select modedatacreater,tzydr from uf_xzsy where id="+rwbillid ; + rs.execute(sql); + if(rs.next()){ + modedatacreater = Util.null2String(rs.getString("modedatacreater")); + String tzydr = Util.null2String(rs.getString("tzydr")); + if(StringUtils.isNotEmpty(tzydr)){ + tzydrList.addAll(Arrays.asList(tzydr.split(","))); + } + } + + + String userarray = JAVATools.disinctrlist(bgxr.split(",")); + for (String userid:userarray.split(",")) { + if(!"".equals(userid)) { + try { + String usernewid = JAVATools.getmainhrmid(userid); + + //共享人添加到参与人,去重 + boolean flag = false; + for(String tzydrid:tzydrList){ + String tzydrmainid = JAVATools.getmainhrmid(tzydrid); + if(usernewid.equals(tzydrmainid)){ + flag = true; + break; + } + } + if(!flag){ + tzydrList.add(userid); + } + + String sqlvalue = "insert into uf_xzsy_dt1(mainid,czr,bgxr,gxsj) values(?,?,?,?)"; + rs.executeQuery(sqlvalue, new Object[]{rwbillid, user.getUID(), usernewid, datetime}); + }catch (Exception exo){ + String mes="czr:"+ user.getUID()+"bgxr:"+userid+"gxsj:"+datetime+" "+meslog.error; + meslog.writLogsnotretrun(rwbillid,mes,"0",meslog.error); + } + } + } + + String newtzydr = String.join(",",tzydrList); + String tzydzzhyc = "" ; + if(!"".equals(newtzydr)){ + tzydzzhyc= JAVATools.GetZctogid(newtzydr); + } + String updateSql = "update uf_xzsy set tzydr = '"+newtzydr+"', tzydzzhyc = '"+tzydzzhyc+"' where id = '"+rwbillid+"'"; + bb.writeLog(updateSql); + rs.executeUpdate(updateSql); + + JSONObject jsonObject = propBean.getModeInfoByUUID(propBean.getPropName("UF_XZSY_CUBEUUIUD")); + int modeid = Integer.parseInt(jsonObject.get("modeid").toString()); + mode.rebuildModeDataShareByEdit(Util.getIntValue(modedatacreater),modeid,Integer.parseInt(rwbillid)); + + apidatas.put("status", true); + }catch (Exception e) { + e.printStackTrace(); + apidatas.put("status", false); + apidatas.put("errormsg", "catch exception : " + e.getMessage()); + meslog.writLogsnotretrun(rwbillid,e.getMessage(),"0",meslog.error); + + } + + return JSON.toJSONString(apidatas); + } + +} diff --git a/src/main/java/com/engine/htsc/cooperation/TaskSmsToUser.java b/src/main/java/com/engine/htsc/cooperation/TaskSmsToUser.java new file mode 100644 index 0000000..2a90bd4 --- /dev/null +++ b/src/main/java/com/engine/htsc/cooperation/TaskSmsToUser.java @@ -0,0 +1,100 @@ +package com.engine.htsc.cooperation; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import weaver.conn.RecordSet; +import weaver.formmode.setup.ModeRightInfo; +import weaver.general.Util; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.GlobatTools.MessageDetailLog; +import weaver.interfaces.htsc.GlobatTools.Smstools; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.interfaces.htsc.cooperation.task.TaskTools; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.text.SimpleDateFormat; +import java.util.*; + +public class TaskSmsToUser { + + @POST + @Path("/TaskSmsToUser") + @Produces({MediaType.TEXT_PLAIN}) + public String TaskSmsToUser(@Context HttpServletRequest request, @Context HttpServletResponse response){ + PropBean propBean = new PropBean(); + Smstools smstools=new Smstools(); + RecordSet rs = new RecordSet(); + ModeRightInfo mode = new ModeRightInfo(); + Map apidatas = new HashMap(); + SimpleDateFormat sd= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + MessageDetailLog meslog = new MessageDetailLog("uf_xzsy_dt1"); + String datetime = sd.format(new Date()); + String billid=""; + try{ + User user = HrmUserVarify.getUser(request, response); + billid = Util.null2String(request.getParameter("billid")); + String smsuser = Util.null2String(request.getParameter("smsuser")); + String bt= Util.null2String(request.getParameter("bt")); + String context = Util.null2String(request.getParameter("context")); + String type= Util.null2String(request.getParameter("type")); + if(billid==""||smsuser==""||bt==""){ + apidatas.put("status", false); + apidatas.put("errormsg", "传递参数为空"); + } + int smstypeid=Integer.parseInt(Util.null2String(propBean.getPropName("uf_ry_sms"))); + JSONObject jsonObject=null; + //如果type==0为是任务 + + + String link =""; + if("0".equals(type)){ + jsonObject=propBean.getModeInfoByUUID(propBean.getPropName("UF_RW_CUBEUUIUD")); + String url = propBean.getPropName("rw_mobile_url"); + link = url+"&billid="+billid; + }else { + jsonObject=propBean.getModeInfoByUUID(propBean.getPropName("UF_XZSY_CUBEUUIUD")); + String url = propBean.getPropName("xz_mobile_url"); + link = url+"&billid="+billid; + } + + if(jsonObject.size()<=0){ + apidatas.put("errmsg","消息失败"+type); + apidatas.put("status", "false"); + return JSON.toJSONString(apidatas); + } + +// String rwmodeid=jsonObject.get("modeid").toString(); +// String formid=jsonObject.get("formid").toString(); + + //String link="/spa/cube/index.html#/main/cube/card?type=0&modeId="+rwmodeid+"&formId="+formid+"&billid="+billid; + Set setuseridvalue=new HashSet<>(); + setuseridvalue = new HashSet(Arrays.asList(smsuser.split(","))); + if(setuseridvalue.size()>0){ + boolean flag=smstools.sendMessage(smstypeid,setuseridvalue,bt,context,link,link); + + if(flag==false){ + apidatas.put("errmsg","消息发送失败"); + apidatas.put("status", "false"); + } + } + + apidatas.put("status", "true"); + + }catch (Exception e) { + e.printStackTrace(); + apidatas.put("status", false); + apidatas.put("errormsg", "catch exception : " + e.getMessage()); + // meslog.writLogsnotretrun(billid,e.getMessage(),"0",meslog.error); + + } + return JSON.toJSONString(apidatas); + } +} diff --git a/src/main/java/com/engine/htsc/cooperation/TaskToLog.java b/src/main/java/com/engine/htsc/cooperation/TaskToLog.java new file mode 100644 index 0000000..4550b72 --- /dev/null +++ b/src/main/java/com/engine/htsc/cooperation/TaskToLog.java @@ -0,0 +1,72 @@ +package com.engine.htsc.cooperation; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.engine.htsc.collaboration.service.TaskLogService; +import weaver.conn.RecordSet; +import weaver.formmode.setup.ModeRightInfo; +import weaver.general.Util; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; +import weaver.interfaces.htsc.GlobatTools.MessageDetailLog; +import weaver.interfaces.htsc.GlobatTools.Smstools; +import weaver.interfaces.htsc.comInfo.PropBean; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.text.SimpleDateFormat; +import java.util.*; + +public class TaskToLog { + + @POST + @Path("/TaskToUser") + @Produces({MediaType.TEXT_PLAIN}) + public String TaskToUser(@Context HttpServletRequest request, @Context HttpServletResponse response){ + PropBean propBean = new PropBean(); + Smstools smstools=new Smstools(); + RecordSet rs = new RecordSet(); + ModeRightInfo mode=new ModeRightInfo(); + Map apidatas = new HashMap(); + SimpleDateFormat sd= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + MessageDetailLog meslog=new MessageDetailLog("uf_xzsy_dt1"); + String datetime=sd.format(new Date()); + String billid=""; + // String sjlx="0";//1是评论,0是反馈 + // String jllx="1";//1是任务,0是协作 + try{ + User user = HrmUserVarify.getUser(request, response); + billid = Util.null2String(request.getParameter("billid")); + String title= Util.null2String(request.getParameter("title")); + String context = Util.null2String(request.getParameter("context")); + String sjlx= Util.null2String(request.getParameter("sjlx")); + String jllx= Util.null2String(request.getParameter("jllx")); + if("".equals(sjlx)){ + sjlx="0"; + } + if("".equals(jllx)){ + jllx="1"; + } + if("".equals(billid)||"".equals(title)||"".equals(context)){ + apidatas.put("status", false); + apidatas.put("errormsg", "传递参数为空"); + } + TaskLogService taskLogService=new TaskLogService(); + taskLogService.createTaskLog(user,billid,"",jllx,sjlx,context,title); + apidatas.put("status", "true"); + + }catch (Exception e) { + e.printStackTrace(); + apidatas.put("status", false); + apidatas.put("errormsg", "catch exception : " + e.getMessage()); + // meslog.writLogsnotretrun(billid,e.getMessage(),"0",meslog.error); + + } + return JSON.toJSONString(apidatas); + } +} diff --git a/src/main/java/com/engine/htsc/cowork/cmd/CoWorkCmd.java b/src/main/java/com/engine/htsc/cowork/cmd/CoWorkCmd.java new file mode 100644 index 0000000..bb0ce25 --- /dev/null +++ b/src/main/java/com/engine/htsc/cowork/cmd/CoWorkCmd.java @@ -0,0 +1,63 @@ +package com.engine.htsc.cowork.cmd; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.User; + +import java.util.HashMap; +import java.util.Map; + +public class CoWorkCmd extends AbstractCommonCommand> { + @Override + public BizLogContext getLogContext() { + return null; + } + + public CoWorkCmd(Map params, User user) { + this.params = params; + this.user = user; + } + + @Override + public Map execute(CommandContext commandContext) { + Map appdate = new HashMap(); + BaseBean bb = new BaseBean(); + RecordSet rs = new RecordSet(); + try{ + String billid = Util.null2String(params.get("billid")); + String userid = user.getUID()+""; + + if(!"1".equals(userid)){ + String sql = " select id from hrmresource where workcode in(select workcode from hrmresource where id="+userid+") and belongto is null"; + rs.execute(sql); + if(rs.next()){ + userid = Util.null2String(rs.getString("id")); + } + } + + int flag = 0; + String sql = " select * from uf_rw_dt3 where ry="+userid+" and mainid="+billid ; + rs.execute(sql); + if(rs.next()){ + flag++; + } + + String jbrs = "" ; + sql = " select id from hrmresource where workcode in(select workcode from hrmresource where id in(select ry from uf_rw_dt3 where mainid="+billid+"))" ; + rs.execute(sql); + while (rs.next()){ + String jbr = Util.null2String(rs.getString("id")); + jbrs += jbrs == "" ? jbr : ","+jbr ; + } + appdate.put("flag",flag); + appdate.put("jbrs",jbrs); + }catch (Exception e){ + bb.writeLog("e:"+e); + } + return appdate; + } +} diff --git a/src/main/java/com/engine/htsc/cowork/cmd/CoWorkTopButtonCmd.java b/src/main/java/com/engine/htsc/cowork/cmd/CoWorkTopButtonCmd.java new file mode 100644 index 0000000..c84454a --- /dev/null +++ b/src/main/java/com/engine/htsc/cowork/cmd/CoWorkTopButtonCmd.java @@ -0,0 +1,251 @@ +package com.engine.htsc.cowork.cmd; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.GCONST; +import weaver.general.Util; +import weaver.hrm.User; + +import java.util.*; + +public class CoWorkTopButtonCmd extends AbstractCommonCommand> { + + + @Override + public BizLogContext getLogContext() { + return null; + } + + public CoWorkTopButtonCmd(Map params, User user) { + this.params = params; + this.user = user; + } + + @Override + public Map execute(CommandContext commandContext) { + Map appdate = new HashMap(); + BaseBean bb = new BaseBean(); + RecordSet rs = new RecordSet(); + RecordSet stopOrComRs = new RecordSet(); + + Set set = new HashSet<>(); + try{ + String billid = Util.null2String(params.get("billid")); + String xzzt = Util.null2String(params.get("zt")); + String userid = user.getUID()+""; + String mainuserid = "" ; + String sql =" select id\n" + + " from hrmresource\n" + + " where workcode in (select workcode from hrmresource where id = "+userid+")\n" + + " and belongto is null " ; + rs.execute(sql); + if(rs.next()){ + mainuserid = Util.null2String(rs.getString("id")); + } + + Map userMap = queryUserRoleByBillid(mainuserid,billid); + //2022-01-25 + String stopOrCompleteSql = "select * from uf_xzsy where instr(','||cjrzczhyc||',',',"+mainuserid+",') >0 and id = "+billid + " and (xzzt = 5 or xzzt = 6) "; + bb.writeLog("stopOrCompleteSql:"+stopOrCompleteSql); + stopOrComRs.execute(stopOrCompleteSql); +// System.out.println(stopOrCompleteSql); +// System.out.println(stopOrComRs.execute(stopOrCompleteSql)); +// System.out.println(stopOrComRs.next()); + if(stopOrComRs.next()){ + set.add("share"); + }else{ + set.add("share"); + if("0".equals(xzzt)){ + if(userMap.get("cjr") == 1) + { + set.add("edit"); + set.add("publish"); + set.add("auditing"); + //2022-01-25 +// set.add("complete");//完成 + set.add("stop");//终止 + } + + if(userMap.get("shr") == 1 && userMap.get("shrshzt")==0 ){ + set.add("edit"); + set.add("read"); + set.add("shrTransfer"); + } + }else if("2".equals(xzzt)){ + if(userMap.get("cjr") == 1){ + set.add("stop");//终止 + //审核中 + if(userMap.get("ssr")==1 && userMap.get("ssrshzt")==0){ + set.add("edit"); + set.add("publish"); + set.add("auditing"); + } + } + if(userMap.get("zxr") == 1) + { + if(userMap.get("ywc") == 1){ + set.add("reopen"); + }else{ + set.add("edit"); + set.add("complete"); + set.add("auditing"); + set.add("transfer"); + } + } + + if(userMap.get("shr") == 1) + { + //审核人 审核进行中 + if(userMap.get("shrshzt") != 1){ + set.add("edit"); + set.add("read"); + //2022-02-25 + set.add("shrTransfer"); + } + } + }else if("3".equals(xzzt)){ + if(userMap.get("zxr") == 1) + { + set.add("reopen"); + } + + + } + + + } + + /*** + * 草稿 进行中 已完成 + * 创建人、执行人、参与人、审核人、共享人 + * + * 1、草稿 + * 创建人:编辑、共享、发布 + * 执行人、参与人、审核人:无权限 + * 共享人:可以查看,无按钮 + * + * 2、进行中 + * 创建人:共享 + * 执行人:编辑、共享、完成 + * 参与人:共享 + * 审核人:共享 + * 共享人:无 + * + * 3、已完成 + * 创建人:共享 + * 执行人:共享、重新打开 + * 参与人:共享 + * 审核人:共享 + * 共享人:无 + * + */ + }catch (Exception e){ + bb.writeLog("e:"+e); + set.add("share"); + } + appdate.put("data",set); + return appdate; + } + + + /*** + * + * @param userid + * @param billid + * @return + */ + public Map queryUserRoleByBillid(String userid,String billid){ + RecordSet rs = new RecordSet(); + + Map userMap = new HashMap(); + int cjrcount = 0; + String sql = " select id from uf_xzsy where (instr(','||cjrzczhyc||',',',"+userid+",') >0 or cjr="+userid+")and id="+billid ; + rs.execute(sql); + if(rs.next()){ + cjrcount++; + } + userMap.put("cjr",cjrcount); + + int zxrcount = 0; + sql = " select id from uf_xzsy where (instr(','||jbrzzhyc||',',',"+userid+",') >0 or instr(','||jbr||',',',"+userid+",')>0) and id="+billid ; + rs.execute(sql); + if(rs.next()){ + zxrcount++; + } + userMap.put("zxr",zxrcount); + + int cyrcount = 0; + sql = " select id from uf_xzsy where (instr(','||tzydzzhyc||',',',"+userid+",') >0 or instr(','||tzydr||',',',"+userid+",') >0) and id="+billid ; + rs.execute(sql); + if(rs.next()){ + cyrcount++; + } + userMap.put("cyr",cyrcount); + + + int gxrcount = 0 ; + sql = " select id from uf_xzsy_dt1 where mainid="+billid +" and bgxr="+userid; + rs.execute(sql); + if(rs.next()){ + gxrcount++; + } + userMap.put("gxr",gxrcount); + + int completecount = 0; + sql = " select id from uf_xzsy_dt2 where mainid="+billid+" and ry="+userid ; + rs.execute(sql); + if(rs.next()){ + completecount++; + } + userMap.put("ywc",completecount); + + + //审核人 + int shrcount = 0 ; + int shrshzt = 0; + sql = " select sfsh from uf_xzsy_dt3 where mainid="+billid +" and instr(','||shr||',',',"+userid+",') >0 order by id desc"; + rs.execute(sql); + if(rs.next()){ + shrcount++; + //审核人对应的审核状态 + shrshzt = rs.getInt("sfsh"); + + } + userMap.put("shrshzt",shrshzt); + userMap.put("shr",shrcount); + + //判断是否是送审人 + int ssrcount = 0; + int ssrshzt = 0; + sql = " select sfsh from uf_xzsy_dt3 where mainid="+billid +" and ry="+userid+" order by id desc"; + rs.execute(sql); + if(rs.next()){ + ssrcount++; + //送审人对应的审核状态 + ssrshzt = rs.getInt("sfsh"); + } + userMap.put("ssrshzt",ssrshzt); + userMap.put("ssr",ssrcount); + + return userMap; + } + + + public static void main(String[] args) { + GCONST.setRootPath("WEB-INF/"); + GCONST.setServerName("ecology"); + Map params=new HashMap<>(); + params.put("billid","4732"); + params.put("zt","1"); + params.put("userid","011413"); + User user = new User(11260); + CoWorkTopButtonCmd coWorkTopButtonCmd = new CoWorkTopButtonCmd(params,user); + CommandContext ceshi= new CommandContext(null,null); + coWorkTopButtonCmd.execute(ceshi); + + } + +} diff --git a/src/main/java/com/engine/htsc/cowork/cmd/CoXzWorkCmd.java b/src/main/java/com/engine/htsc/cowork/cmd/CoXzWorkCmd.java new file mode 100644 index 0000000..fb5dbe6 --- /dev/null +++ b/src/main/java/com/engine/htsc/cowork/cmd/CoXzWorkCmd.java @@ -0,0 +1,64 @@ +package com.engine.htsc.cowork.cmd; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.User; + +import java.util.HashMap; +import java.util.Map; + +public class CoXzWorkCmd extends AbstractCommonCommand> { + + @Override + public BizLogContext getLogContext() { + return null; + } + + public CoXzWorkCmd(Map params, User user) { + this.params = params; + this.user = user; + } + + @Override + public Map execute(CommandContext commandContext) { + Map appdate = new HashMap(); + BaseBean bb = new BaseBean(); + RecordSet rs = new RecordSet(); + try{ + String billid = Util.null2String(params.get("billid")); + String userid = user.getUID()+""; + + if(!"1".equals(userid)){ + String sql = " select id from hrmresource where workcode in(select workcode from hrmresource where id="+userid+") and belongto is null"; + rs.execute(sql); + if(rs.next()){ + userid = Util.null2String(rs.getString("id")); + } + } + + int flag = 0; + String sql = " select * from uf_xzsy_dt2 where ry="+userid+" and mainid="+billid ; + rs.execute(sql); + if(rs.next()){ + flag++; + } + + String jbrs = "" ; + sql = " select id from hrmresource where workcode in(select workcode from hrmresource where id in(select ry from uf_xzsy_dt2 where mainid="+billid+"))" ; + rs.execute(sql); + while (rs.next()){ + String jbr = Util.null2String(rs.getString("id")); + jbrs += jbrs == "" ? jbr : ","+jbr ; + } + appdate.put("flag",flag); + appdate.put("jbrs",jbrs); + }catch (Exception e){ + bb.writeLog("e:"+e); + } + return appdate; + } +} diff --git a/src/main/java/com/engine/htsc/cowork/service/CoWorkService.java b/src/main/java/com/engine/htsc/cowork/service/CoWorkService.java new file mode 100644 index 0000000..9e29e7b --- /dev/null +++ b/src/main/java/com/engine/htsc/cowork/service/CoWorkService.java @@ -0,0 +1,27 @@ +package com.engine.htsc.cowork.service; + +import weaver.hrm.User; + +import java.util.Map; + +public interface CoWorkService { + + /** + * + * @param user + * @return + */ + Map doGetIsComplete(Map params, User user); + + /** + * + * @param user + * @return + */ + Map doGetXzComplete(Map params, User user); + + + + Map doGetTopButton(Map params, User user); + +} diff --git a/src/main/java/com/engine/htsc/cowork/service/impl/CoWorkServiceImpl.java b/src/main/java/com/engine/htsc/cowork/service/impl/CoWorkServiceImpl.java new file mode 100644 index 0000000..f8cc041 --- /dev/null +++ b/src/main/java/com/engine/htsc/cowork/service/impl/CoWorkServiceImpl.java @@ -0,0 +1,30 @@ +package com.engine.htsc.cowork.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.cowork.cmd.CoWorkCmd; +import com.engine.htsc.cowork.cmd.CoWorkTopButtonCmd; +import com.engine.htsc.cowork.cmd.CoXzWorkCmd; +import com.engine.htsc.cowork.service.CoWorkService; +import weaver.hrm.User; + +import java.util.Map; + +public class CoWorkServiceImpl extends Service implements CoWorkService { + + @Override + public Map doGetIsComplete(Map params, User user) { + return commandExecutor.execute(new CoWorkCmd(params,user)); + } + + @Override + public Map doGetXzComplete(Map params, User user) { + return commandExecutor.execute(new CoXzWorkCmd(params,user)); + } + + @Override + public Map doGetTopButton(Map params, User user) { + return commandExecutor.execute(new CoWorkTopButtonCmd(params,user)); + } + + +} diff --git a/src/main/java/com/engine/htsc/cowork/web/CoWorkAction.java b/src/main/java/com/engine/htsc/cowork/web/CoWorkAction.java new file mode 100644 index 0000000..ce15d87 --- /dev/null +++ b/src/main/java/com/engine/htsc/cowork/web/CoWorkAction.java @@ -0,0 +1,88 @@ +package com.engine.htsc.cowork.web; + +import com.alibaba.fastjson.JSON; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.cowork.service.CoWorkService; +import com.engine.htsc.cowork.service.impl.CoWorkServiceImpl; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +/*** + * + */ +public class CoWorkAction { + + + public CoWorkService getService(){ + return ServiceUtil.getService(CoWorkServiceImpl.class); + } + + @GET + @Path("/doGetIsComplete") + @Produces({MediaType.TEXT_PLAIN}) + public String doGetIsComplete(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = new HashMap(); + try{ + User user = HrmUserVarify.getUser(request, response); + Map param = ParamUtil.request2Map(request); + apidatas = getService().doGetIsComplete(param,user); + }catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return JSON.toJSONString(apidatas); + } + + @GET + @Path("/doGetXzComplete") + @Produces({MediaType.TEXT_PLAIN}) + public String doGetXzComplete(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = new HashMap(); + try{ + User user = HrmUserVarify.getUser(request, response); + Map param = ParamUtil.request2Map(request); + apidatas = getService().doGetXzComplete(param,user); + }catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return JSON.toJSONString(apidatas); + } + + + + @GET + @Path("/doGetTopButton") + @Produces({MediaType.TEXT_PLAIN}) + public String doGetTopButton(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = new HashMap(); + try{ + User user = HrmUserVarify.getUser(request, response); + Map param = ParamUtil.request2Map(request); + apidatas = getService().doGetTopButton(param,user); + }catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return JSON.toJSONString(apidatas); + } + + + + + +} diff --git a/src/main/java/com/engine/htsc/financialadjustment/excel/ExcelDataListener.java b/src/main/java/com/engine/htsc/financialadjustment/excel/ExcelDataListener.java new file mode 100644 index 0000000..e1cf736 --- /dev/null +++ b/src/main/java/com/engine/htsc/financialadjustment/excel/ExcelDataListener.java @@ -0,0 +1,43 @@ +package com.engine.htsc.financialadjustment.excel; + +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; +import weaver.workflow.logging.Logger; +import weaver.workflow.logging.LoggerFactory; + +import java.util.ArrayList; +import java.util.List; + +/** + * + */ +public class ExcelDataListener extends AnalysisEventListener { + + private final Logger logger = LoggerFactory.getLogger(); + List list = new ArrayList<>(); + + /** + * read line2 + */ + @Override + public void invoke(T t, AnalysisContext analysisContext) { + logger.info("excel data :" + t); + list.add(t); + } + + /** + * finish reading all line, after do + */ + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + logger.info("Finish extracting excel data, list: " + list); + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } +} diff --git a/src/main/java/com/engine/htsc/financialadjustment/pojo/FinancialAjExcelData.java b/src/main/java/com/engine/htsc/financialadjustment/pojo/FinancialAjExcelData.java new file mode 100644 index 0000000..ffdec95 --- /dev/null +++ b/src/main/java/com/engine/htsc/financialadjustment/pojo/FinancialAjExcelData.java @@ -0,0 +1,127 @@ +package com.engine.htsc.financialadjustment.pojo; + +import com.alibaba.excel.annotation.ExcelProperty; + +/** + * excel template, biz support + */ +public class FinancialAjExcelData { + + @ExcelProperty("是否入会计账") + private String credit; + @ExcelProperty("费用承担人") + private String expensePerson; + @ExcelProperty("费用承担部门") + private String expenseDept; +// @ExcelProperty("预算项目(预算类型-控制项目-明细项目)* ") + @ExcelProperty(index = 3) + private String budgetCode; + @ExcelProperty("金额") + private String amount; + @ExcelProperty("是否超预算") + private String overBudget; + @ExcelProperty("会计科目") + private String accountCode; + @ExcelProperty("借贷方向") + private String debtSide; + @ExcelProperty("公司项目") + private String projectCode; + @ExcelProperty("项目部门") + private String projectDept; + + public String getCredit() { + return credit; + } + + public void setCredit(String credit) { + this.credit = credit; + } + + public String getExpensePerson() { + return expensePerson; + } + + public void setExpensePerson(String expensePerson) { + this.expensePerson = expensePerson; + } + + public String getExpenseDept() { + return expenseDept; + } + + public void setExpenseDept(String expenseDept) { + this.expenseDept = expenseDept; + } + + public String getBudgetCode() { + return budgetCode; + } + + public void setBudgetCode(String budgetCode) { + this.budgetCode = budgetCode; + } + + public String getAmount() { + return amount; + } + + public void setAmount(String amount) { + this.amount = amount; + } + + public String getOverBudget() { + return overBudget; + } + + public void setOverBudget(String overBudget) { + this.overBudget = overBudget; + } + + public String getAccountCode() { + return accountCode; + } + + public void setAccountCode(String accountCode) { + this.accountCode = accountCode; + } + + public String getDebtSide() { + return debtSide; + } + + public void setDebtSide(String debtSide) { + this.debtSide = debtSide; + } + + public String getProjectCode() { + return projectCode; + } + + public void setProjectCode(String projectCode) { + this.projectCode = projectCode; + } + + public String getProjectDept() { + return projectDept; + } + + public void setProjectDept(String projectDept) { + this.projectDept = projectDept; + } + + @Override + public String toString() { + return "FinancialAjExcelData{" + + "credit='" + credit + '\'' + + ", expensePerson='" + expensePerson + '\'' + + ", expenseDept='" + expenseDept + '\'' + + ", budgetCode='" + budgetCode + '\'' + + ", amount='" + amount + '\'' + + ", overBudget='" + overBudget + '\'' + + ", accountCode='" + accountCode + '\'' + + ", debtSide='" + debtSide + '\'' + + ", projectCode='" + projectCode + '\'' + + ", projectDept='" + projectDept + '\'' + + '}'; + } +} diff --git a/src/main/java/com/engine/htsc/financialadjustment/service/FinService.java b/src/main/java/com/engine/htsc/financialadjustment/service/FinService.java new file mode 100644 index 0000000..5bf4cb5 --- /dev/null +++ b/src/main/java/com/engine/htsc/financialadjustment/service/FinService.java @@ -0,0 +1,19 @@ +package com.engine.htsc.financialadjustment.service; + + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +public interface FinService { + + /** + * 解析excel内容 + * @param imageId excel文档id + * @param zbOrLh 总部流程or联合 + * @return json + * @throws Exception ep + */ + JSONArray readByImageId(int imageId, String zbOrLh) throws Exception; + + JSONObject getDeptBrowserByProjectId(String userCode, String projectId) throws Exception; +} diff --git a/src/main/java/com/engine/htsc/financialadjustment/service/impl/FinServiceImpl.java b/src/main/java/com/engine/htsc/financialadjustment/service/impl/FinServiceImpl.java new file mode 100644 index 0000000..071abae --- /dev/null +++ b/src/main/java/com/engine/htsc/financialadjustment/service/impl/FinServiceImpl.java @@ -0,0 +1,81 @@ +package com.engine.htsc.financialadjustment.service.impl; + +import cn.hutool.core.lang.Assert; +import com.alibaba.excel.EasyExcel; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.engine.core.impl.Service; +import com.engine.htsc.financialadjustment.excel.ExcelDataListener; +import com.engine.htsc.financialadjustment.pojo.FinancialAjExcelData; +import com.engine.htsc.financialadjustment.service.FinService; +import com.engine.htsc.financialadjustment.util.BizUtil; +import org.apache.commons.lang.StringUtils; +import weaver.file.ImageFileManager; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.company.DepartmentComInfo; +import weaver.interfaces.htsc.cus.DepartmentUtils; +import weaver.interfaces.htsc.cus.HTUtil; +import weaver.workflow.logging.Logger; +import weaver.workflow.logging.LoggerFactory; + +import java.io.InputStream; +import java.util.List; +import java.util.Map; + +public class FinServiceImpl extends Service implements FinService { + + private final Logger logger = LoggerFactory.getLogger(); + + @Override + public JSONArray readByImageId(int imageId, String zbOrLh) throws Exception { + List source = read2List(imageId); + logger.info(String.format("parse image id: %s, and type: %s", imageId, zbOrLh)); + JSONArray jsa = new JSONArray(); + for (FinancialAjExcelData d : source) { + JSONObject jso = new JSONObject(); + jso.put("entryCredit", d.getCredit()); + jso.put("expenseUid", BizUtil.getUidByWc(d.getExpensePerson())); + jso.put("expenseDeptId", BizUtil.getDidByCode(d.getExpenseDept())); + jso.put("budgetCode", BizUtil.getBudgetObj(d.getBudgetCode(), zbOrLh)); + jso.put("amount", d.getAmount()); + jso.put("overBudget", d.getOverBudget()); + jso.put("accountCode", BizUtil.getAccountObj(d.getAccountCode(), zbOrLh)); + jso.put("debtSide", d.getDebtSide()); + jso.put("projectId", StringUtils.isNotBlank(d.getProjectCode()) ? BizUtil.getProjectBrowserByCode(d.getExpensePerson(), d.getProjectCode()) : ""); + jso.put("projectDeptId", StringUtils.isNotBlank(d.getProjectDept()) ? BizUtil.getDidByCode(d.getProjectDept()) : ""); + jsa.add(jso); + } + return jsa; + } + + @Override + public JSONObject getDeptBrowserByProjectId(String userCode, String projectId) throws Exception { + HTUtil htUtil = new HTUtil(); + JSONObject res = new JSONObject(); + Assert.notBlank(projectId, "公司项目id不能为空"); + Map info = htUtil.getProjectInfoById(userCode, projectId); + if (info.containsKey("id")) { + String deptCode = Util.null2String(info.get("deptCode")); + res.put("value", DepartmentUtils.getDeptId(deptCode)); + res.put("name", Util.null2String(info.get("deptName"))); + res.put("shortName", Util.null2String(info.get("name"))); + res.put("code",Util.null2String(info.get("code"))); + } else { + res.put("value", ""); + res.put("name", ""); + } + htUtil.writeLog(String.format("userCode:%s; project id:%s; json content:%s", userCode, + projectId, res)); + return res; + } + + + private List read2List(int imageFileId) throws Exception { + InputStream fis = ImageFileManager.getInputStreamById(imageFileId); + ExcelDataListener listener = new ExcelDataListener<>(); + // 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭 + EasyExcel.read(fis, FinancialAjExcelData.class, listener).sheet().doRead(); + return listener.getList(); + } +} diff --git a/src/main/java/com/engine/htsc/financialadjustment/web/FinAjAction.java b/src/main/java/com/engine/htsc/financialadjustment/web/FinAjAction.java new file mode 100644 index 0000000..5580230 --- /dev/null +++ b/src/main/java/com/engine/htsc/financialadjustment/web/FinAjAction.java @@ -0,0 +1,66 @@ +package com.engine.htsc.financialadjustment.web; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.financialadjustment.service.FinService; +import com.engine.htsc.financialadjustment.service.impl.FinServiceImpl; +import weaver.general.BaseBean; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.util.Map; + +public class FinAjAction { + + private FinService getFinService() { + return ServiceUtil.getService(FinServiceImpl.class); + } + + @GET + @Path("/getProjectDeptBrowser") + @Produces({MediaType.APPLICATION_JSON}) + public Response getProjectDeptBrowser(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map map = ParamUtil.request2Map(request); + try { + String projectId = (String) map.get("projectId"); + String userCode = (String) map.get("userCode"); + JSONObject json = getFinService().getDeptBrowserByProjectId(userCode, projectId); + return Response.ok(json) + .build(); + } catch (Exception e) { + new BaseBean().writeLog(e.getMessage()); + e.printStackTrace(); + return Response.status(Response.Status.BAD_REQUEST).entity(e.getMessage()).build(); + } + + } + + @POST + @Path("/extractExcel") + @Produces({MediaType.APPLICATION_JSON}) + public Response extractExcel(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map map = ParamUtil.request2Map(request); + try { + int imageId = Integer.parseInt((String) map.get("imageId")); + String type = (String) map.get("type"); + JSONArray jsonArray = getFinService().readByImageId(imageId, type); + return Response.ok(jsonArray) + .build(); + } catch (Exception e) { + new BaseBean().writeLog(e.getMessage()); + e.printStackTrace(); + return Response.status(Response.Status.BAD_REQUEST).entity(e.getMessage()).build(); + } + + } + +} diff --git a/src/main/java/com/engine/htsc/fkxnbm/cmd/FkxnbmCmd.java b/src/main/java/com/engine/htsc/fkxnbm/cmd/FkxnbmCmd.java new file mode 100644 index 0000000..3b15e1b --- /dev/null +++ b/src/main/java/com/engine/htsc/fkxnbm/cmd/FkxnbmCmd.java @@ -0,0 +1,72 @@ +package com.engine.htsc.fkxnbm.cmd; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.GCONST; +import weaver.general.Util; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class FkxnbmCmd extends AbstractCommonCommand> { + @Override + public BizLogContext getLogContext() { + return null; + } + + public FkxnbmCmd(Map params) { + this.params = params; + } + + @Override + public Map execute(CommandContext commandContext) { + Map appdate = new HashMap(); + BaseBean bb = new BaseBean(); + RecordSet rs = new RecordSet(); + try{ + List> list = new ArrayList>(); + Map map = null; + String sql = "select dept_code,dept_name,parent_dept_code,parent_dept_name,director_code,director_name from uf_fkxnbmpzb "; + rs.execute(sql); + while (rs.next()){ + map = new HashMap(); + String dept_code = Util.null2String(rs.getString("dept_code")); + String dept_name = Util.null2String(rs.getString("dept_name")); + String parent_dept_code = Util.null2String(rs.getString("parent_dept_code")); + String parent_dept_name = Util.null2String(rs.getString("parent_dept_name")); + String director_code = Util.null2String(rs.getString("director_code")); + String director_name = Util.null2String(rs.getString("director_name")); + + map.put("dept_code",dept_code); + map.put("dept_name",dept_name); + map.put("parent_dept_code",parent_dept_code); + map.put("parent_dept_name",parent_dept_name); + map.put("parent_dept_name",parent_dept_name); + map.put("director_code",director_code); + map.put("director_name",director_name); + list.add(map); + } + + System.out.println("list:"+list.size()); + appdate.put("data",list); + }catch (Exception e){ + bb.writeLog("e:"+e); + } + return appdate; + } + + public static void main(String[] args) { + GCONST.setRootPath("WEB-INF/"); + GCONST.setServerName("ecology"); + Map params=new HashMap<>(); + + FkxnbmCmd htscMhjcCmd=new FkxnbmCmd(params); + CommandContext ceshi = new CommandContext(null,null); + htscMhjcCmd.execute(ceshi); + } +} diff --git a/src/main/java/com/engine/htsc/fkxnbm/service/FkxnbmService.java b/src/main/java/com/engine/htsc/fkxnbm/service/FkxnbmService.java new file mode 100644 index 0000000..8de8307 --- /dev/null +++ b/src/main/java/com/engine/htsc/fkxnbm/service/FkxnbmService.java @@ -0,0 +1,14 @@ +package com.engine.htsc.fkxnbm.service; + +import java.util.Map; + +public interface FkxnbmService { + + /** + * + * @param params + * @return + */ + Map getAllList(Map params); + +} diff --git a/src/main/java/com/engine/htsc/fkxnbm/service/impl/FkxnbmServiceImpl.java b/src/main/java/com/engine/htsc/fkxnbm/service/impl/FkxnbmServiceImpl.java new file mode 100644 index 0000000..77a9445 --- /dev/null +++ b/src/main/java/com/engine/htsc/fkxnbm/service/impl/FkxnbmServiceImpl.java @@ -0,0 +1,14 @@ +package com.engine.htsc.fkxnbm.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.fkxnbm.cmd.FkxnbmCmd; +import com.engine.htsc.fkxnbm.service.FkxnbmService; +import java.util.Map; + +public class FkxnbmServiceImpl extends Service implements FkxnbmService { + + @Override + public Map getAllList(Map params) { + return commandExecutor.execute(new FkxnbmCmd(params)); + } +} diff --git a/src/main/java/com/engine/htsc/fkxnbm/web/FkxnbmAction.java b/src/main/java/com/engine/htsc/fkxnbm/web/FkxnbmAction.java new file mode 100644 index 0000000..825913f --- /dev/null +++ b/src/main/java/com/engine/htsc/fkxnbm/web/FkxnbmAction.java @@ -0,0 +1,59 @@ +package com.engine.htsc.fkxnbm.web; + +import com.alibaba.fastjson.JSON; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.fkxnbm.service.FkxnbmService; +import com.engine.htsc.fkxnbm.service.impl.FkxnbmServiceImpl; +import com.engine.integration.gconst.IntegrationConstant; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +public class FkxnbmAction { + + public FkxnbmService getService(){ + return ServiceUtil.getService(FkxnbmServiceImpl.class); + } + + /** + * + * @param request + * @param response + * @return + */ + @GET + @Path("/getAllList") + @Produces({MediaType.TEXT_PLAIN}) + public String getAllList(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = new HashMap(); + try{ + User user = HrmUserVarify.checkUser(request, response); + if (user == null) { + apidatas.put("msg", "登录信息超时"); + apidatas.put("errorCode", "002"); + apidatas.put("api_status", false); + apidatas.put(IntegrationConstant.INTEGRATION_RESULT_STATUS, IntegrationConstant.INTEGRATION_RESULT_STATUS_FALSE); + }else{ + Map param = ParamUtil.request2Map(request); + FkxnbmService fkxnbmService = getService(); + apidatas = fkxnbmService.getAllList(param); + apidatas.put("api_status", true); + } + }catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return JSON.toJSONString(apidatas); + } +} diff --git a/src/main/java/com/engine/htsc/fundbusinesspay/package-info.java b/src/main/java/com/engine/htsc/fundbusinesspay/package-info.java new file mode 100644 index 0000000..1fdb346 --- /dev/null +++ b/src/main/java/com/engine/htsc/fundbusinesspay/package-info.java @@ -0,0 +1,12 @@ +/** + * author: k1810012 + * 资金业务付款流程 + * + * 配置项: + * + * fbp-formId,表id + * + * + * + */ +package com.engine.htsc.fundbusinesspay; \ No newline at end of file diff --git a/src/main/java/com/engine/htsc/fundbusinesspay/service/FundBusinessService.java b/src/main/java/com/engine/htsc/fundbusinesspay/service/FundBusinessService.java new file mode 100644 index 0000000..ede2de6 --- /dev/null +++ b/src/main/java/com/engine/htsc/fundbusinesspay/service/FundBusinessService.java @@ -0,0 +1,26 @@ +package com.engine.htsc.fundbusinesspay.service; + + +import java.util.Map; + +public interface FundBusinessService { + + + /** + * 预算科目对应会计科目信息 + * 资金业务付款:会计节点 + * 付款明细预算科目带出会计科目会计科目 + * @param budgetCode 付款明细预算科目code + * @return ec浏览按钮 + */ + String getKjBrowserValue(String budgetCode) throws Exception; + + /** + * @param startDate 开始日期 + * + * @return 可选时间段 + */ + Map getPaymentDateRange(String startDate) throws Exception; + + +} diff --git a/src/main/java/com/engine/htsc/fundbusinesspay/service/impl/FundBusinessServiceImpl.java b/src/main/java/com/engine/htsc/fundbusinesspay/service/impl/FundBusinessServiceImpl.java new file mode 100644 index 0000000..a5e759e --- /dev/null +++ b/src/main/java/com/engine/htsc/fundbusinesspay/service/impl/FundBusinessServiceImpl.java @@ -0,0 +1,72 @@ +package com.engine.htsc.fundbusinesspay.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.fundbusinesspay.service.FundBusinessService; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.interfaces.htsc.comInfo.PropBean; + +import java.util.HashMap; +import java.util.Map; + +public class FundBusinessServiceImpl extends Service implements FundBusinessService { + + private final Log log = LogFactory.getLog(FundBusinessServiceImpl.class); + + @Override + public String getKjBrowserValue(String budgetCode) throws Exception { + PropBean pp = new PropBean(); + RecordSet rs = new RecordSet(); + String accountTreeId = pp.getPropName("KBP_KJ_PRE"); + if (StringUtils.isBlank(accountTreeId)) { + throw new Exception("资金业务付款会计科目前缀未维护"); + } + String sql = "SELECT t1.HJKMBM,t1.HJKMMC\n" + + "FROM uf_zjywhjkm t1\n" + + "LEFT OUTER JOIN uf_zjywhjkm_DT1 t2 on t1.id=t2.mainid\n" + + "WHERE (t2.yskm='" + budgetCode + "')"; + log.info("资金业务付款查询sql:" + budgetCode); + rs.executeQuery(sql); + String value = ""; + String name = ""; + if (rs.next()) { + value = Util.null2String(rs.getString("HJKMBM")); + name = Util.null2String(rs.getString("HJKMMC")); + } + if (StringUtils.isEmpty(value)) { + throw new Exception("资金业务付款未查询到对应会计科目:" + budgetCode); + } else { + return accountTreeId + "_" + value + "@" + name; + } + } + + @Override + public Map getPaymentDateRange(String startDate) throws Exception { + + if (StringUtils.isBlank(startDate)) { + throw new Exception("起始日期格式错误"); + } + + String sql = "select JYR from (\n" + + " select JYR\n" + + " from UF_JYRB order by JYR)\n" + + "where jyr > '" + startDate + "' and rownum < 5"; + + RecordSet rs = new RecordSet(); + rs.executeQuery(sql); + String endDate = ""; + while (rs.next()) { + endDate = rs.getString("JYR"); + } + + Map resp = new HashMap<>(); + resp.put("start", startDate); + resp.put("end", endDate); + + return resp; + } + +} diff --git a/src/main/java/com/engine/htsc/fundbusinesspay/utils/FundBizUtil.java b/src/main/java/com/engine/htsc/fundbusinesspay/utils/FundBizUtil.java new file mode 100644 index 0000000..405d665 --- /dev/null +++ b/src/main/java/com/engine/htsc/fundbusinesspay/utils/FundBizUtil.java @@ -0,0 +1,96 @@ +package com.engine.htsc.fundbusinesspay.utils; + + +import com.engine.htsc.payment.util.PayUtil; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.conn.RecordSet; +import weaver.formmode.setup.ModeRightInfo; +import weaver.general.Util; +import weaver.interfaces.htsc.comInfo.PropBean; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.UUID; + +/** + * k1810012 + * 资金业务付款工具类 + */ +public class FundBizUtil { + private final Log log = LogFactory.getLog(FundBizUtil.class); + + /** + * 生成资金业务付款流程编号 + * + * @return string + */ + public synchronized String createFundBusinessPayRequestMark() { + try { + PropBean pp = new PropBean(); + String workFlowId = pp.getPropName("FundBusinessPayRequestMark"); //流程编号 + if (StringUtils.isBlank(workFlowId)) { + log.info("配置文件,FundBusinessPayRequestMark没有维护"); + return ""; + } + + RecordSet rs = new RecordSet(); + int formModeId = PayUtil.getFormModeIdByCubeName("uf_fklcbh"); + String sql = "select WORKFLOWNAME,UNNUMBER from workflow_base where isvalid=1 and ID=?"; + rs.executeQuery(sql, workFlowId); + String name = ""; //流程中文名称 + String unNumber = ""; //流程唯一字符标识 + if (rs.next()) { + name = rs.getString("WORKFLOWNAME"); + unNumber = rs.getString("UNNUMBER"); + } + + StringBuilder mark = new StringBuilder(); //流程编码 + String modeUuid = ""; //建模同步uuid + + LocalDateTime now = LocalDateTime.now(); + String yM = now.format(DateTimeFormatter.ofPattern("yyyyMM")); + rs.executeQuery("select id,lsh,MODEUUID from uf_fklcbh where ny = '" + yM + "' and LCLX='" + unNumber + "'"); + if (rs.next()) { + //更新 + int num = Util.getIntValue(rs.getString("lsh")) + 1; + int id = Util.getIntValue(rs.getString("id")); + modeUuid = Util.null2String(rs.getString("MODEUUID")); + String updateSql = "update uf_fklcbh set lsh=? where id=?"; + rs.executeUpdate(updateSql, num, id); + mark = new StringBuilder(num + ""); + while (mark.length() < 6) { + mark.insert(0, "0"); + } + mark = new StringBuilder(name + now.format(DateTimeFormatter.ofPattern("yyyyMM")) + mark); + } else { + String userId = ""; + String userType = "0"; + String createDate = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + String createTime = now.format(DateTimeFormatter.ofPattern("HH:mm:ss")); + String insertSql = "insert into uf_fklcbh" + + "(FORMMODEID,MODEDATACREATER,MODEDATACREATERTYPE,MODEDATACREATEDATE,MODEDATACREATETIME,MODEUUID,LSH,NY,LCLX) \n" + + "values(?,?,?,?,?,?,?,?,?)"; + String uuid = UUID.randomUUID().toString(); + modeUuid = uuid; + rs.executeUpdate(insertSql, formModeId, userId, userType, createDate, createTime, uuid, "1", yM, unNumber); + mark = new StringBuilder(name + now.format(DateTimeFormatter.ofPattern("yyyyMM")) + "000001"); + } + + //建模权限重构 + int dataId = PayUtil.getDataIdByUUID(modeUuid); + ModeRightInfo modeRightInfo = new ModeRightInfo(); + modeRightInfo.editModeDataShare(1, formModeId, dataId); + + return mark.toString(); + } catch (Exception e) { + log.error("生成资金业务付款流程编号失败,catch:" + e.getMessage()); + e.printStackTrace(); + return ""; + } + + } + + +} diff --git a/src/main/java/com/engine/htsc/fundbusinesspay/web/FundBusinessCubeAction.java b/src/main/java/com/engine/htsc/fundbusinesspay/web/FundBusinessCubeAction.java new file mode 100644 index 0000000..833ce63 --- /dev/null +++ b/src/main/java/com/engine/htsc/fundbusinesspay/web/FundBusinessCubeAction.java @@ -0,0 +1,107 @@ +package com.engine.htsc.fundbusinesspay.web; + +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.fundbusinesspay.service.FundBusinessService; +import com.engine.htsc.fundbusinesspay.service.impl.FundBusinessServiceImpl; +import com.engine.htsc.fundbusinesspay.utils.FundBizUtil; +import com.engine.htsc.trip.util.AjaxResult; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.*; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +public class FundBusinessCubeAction { + + /** + * 建模资金付款更新数据导出状态01 + * @param request + * @param response + * @return + */ + @POST + @Path("/updateReadStatus") + @Produces({MediaType.APPLICATION_JSON}) + public Map updateReadStatus(@Context HttpServletRequest request,@Context HttpServletResponse response){ + Map apidatas = new HashMap<>(); + try { + String reqid = Util.null2String(request.getParameter("reqid")); + if(!"".equals(reqid)){ + RecordSet rs = new RecordSet(); + String updateSql = " update uf_paydetal set isread=1 where reqid=? "; + rs.executeUpdate(updateSql,reqid); + } + apidatas.put("success", true); + }catch (Exception e){ + e.printStackTrace(); + apidatas.put("success",false); + apidatas.put("errormsg",e.getMessage()); + } + return apidatas; + } + + /** + * 建模资金付款更新数据导出状态01 + * @param request + * @param response + * @return + */ + @POST + @Path("/updateExportStatus") + @Produces({MediaType.APPLICATION_JSON}) + public Map updateExportStatus(@Context HttpServletRequest request,@Context HttpServletResponse response){ + Map apidatas = new HashMap<>(); + try { + String ids = Util.null2String(request.getParameter("ids")); + if(!"".equals(ids)){ + RecordSet rs = new RecordSet(); + String updateSql = " update uf_paydetal set isexport=1 where id in ("+ids+") "; + rs.executeUpdate(updateSql); + } + apidatas.put("success", true); + }catch (Exception e){ + e.printStackTrace(); + apidatas.put("success",false); + apidatas.put("errormsg",e.getMessage()); + } + return apidatas; + } + + + + /** + * 建模资金付款更新流程打印日期和状态01 + * @param request + * @param response + * @return + */ + @POST + @Path("/updatePrintStatus") + @Produces({MediaType.APPLICATION_JSON}) + public Map updatePrintStatus(@Context HttpServletRequest request,@Context HttpServletResponse response){ + Map apidatas = new HashMap<>(); + try { + String ids = Util.null2String(request.getParameter("ids")); + if(!"".equals(ids)){ + RecordSet rs = new RecordSet(); + String updateSql = " update uf_paydetal set isprint =1,printdate=to_char(sysdate,'YYYY-MM-DD HH24:MI') where id in ("+ids+") "; + rs.executeUpdate(updateSql); + } + apidatas.put("success", true); + }catch (Exception e){ + e.printStackTrace(); + apidatas.put("success",false); + apidatas.put("errormsg",e.getMessage()); + } + return apidatas; + } + + +} diff --git a/src/main/java/com/engine/htsc/fundbusinesspay/web/FundBusinessPayAction.java b/src/main/java/com/engine/htsc/fundbusinesspay/web/FundBusinessPayAction.java new file mode 100644 index 0000000..ddcf152 --- /dev/null +++ b/src/main/java/com/engine/htsc/fundbusinesspay/web/FundBusinessPayAction.java @@ -0,0 +1,74 @@ +package com.engine.htsc.fundbusinesspay.web; + +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.fundbusinesspay.service.FundBusinessService; +import com.engine.htsc.fundbusinesspay.service.impl.FundBusinessServiceImpl; +import com.engine.htsc.fundbusinesspay.utils.FundBizUtil; +import com.engine.htsc.trip.util.AjaxResult; + +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; +import java.util.Map; + +public class FundBusinessPayAction { + + public FundBusinessService getService() { + return ServiceUtil.getService(FundBusinessServiceImpl.class); + } + + /** + * 付款明细预算科目带出会计明细会计科目 + * + * @param budgetCode 预算code + * @return aja + */ + @GET + @Path("/getKjBrowser") + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult getBrowserValue(@QueryParam("budgetCode") String budgetCode) { + try { + String browserValue = this.getService().getKjBrowserValue(budgetCode); + return AjaxResult.ok(browserValue); + } catch (Exception e) { + return AjaxResult.error(e.getMessage()); + } + + } + + /** + * 资金业务付款生成流程编号 + * + * @return 字符串 + */ + @POST + @Path("/createRequestMark") + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult createFundBusinessPayRequestMark() { + try { + FundBizUtil fbu = new FundBizUtil(); + String fundBusinessPayRequestMark = fbu.createFundBusinessPayRequestMark(); + return AjaxResult.ok(fundBusinessPayRequestMark); + } catch (Exception e) { + return AjaxResult.error(e.getMessage()); + } + + } + + /** + * 付款日期范围 + * + * @return 拟稿日期 +5个工作日 + */ + @GET + @Path("/getPayDateRange") + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult> getPaymentDateRange(@QueryParam("startDate") String startDate) { + try { + Map dateRange = this.getService().getPaymentDateRange(startDate); + return AjaxResult.ok(dateRange); + } catch (Exception e) { + return AjaxResult.error(e.getMessage()); + } + + } +} diff --git a/src/main/java/com/engine/htsc/fwnrTokmbh/service/GetkmbhService.java b/src/main/java/com/engine/htsc/fwnrTokmbh/service/GetkmbhService.java new file mode 100644 index 0000000..37bb2a7 --- /dev/null +++ b/src/main/java/com/engine/htsc/fwnrTokmbh/service/GetkmbhService.java @@ -0,0 +1,7 @@ +package com.engine.htsc.fwnrTokmbh.service; + +import java.util.Map; + +public interface GetkmbhService { + Map getKmbh(String fwmc); +} diff --git a/src/main/java/com/engine/htsc/fwnrTokmbh/service/impl/GetkmbhServiceImpl.java b/src/main/java/com/engine/htsc/fwnrTokmbh/service/impl/GetkmbhServiceImpl.java new file mode 100644 index 0000000..146ff56 --- /dev/null +++ b/src/main/java/com/engine/htsc/fwnrTokmbh/service/impl/GetkmbhServiceImpl.java @@ -0,0 +1,81 @@ +package com.engine.htsc.fwnrTokmbh.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.engine.core.impl.Service; +import com.engine.htsc.fwnrTokmbh.service.GetkmbhService; +import com.engine.htsc.payment.util.HttpUtil; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.interfaces.htsc.comInfo.PropBean; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class GetkmbhServiceImpl extends Service implements GetkmbhService { + @Override + public Map getKmbh(String fwmc) { + BaseBean bb = new BaseBean(); + + PropBean pp = new PropBean(); + String requestUrl = pp.getPropName("getKmbhByFwnr");//interface_Url + String appSysId = pp.getPropName("yskmAiActionsysid");//appSysId + String token = pp.getPropName("yskmAiActiontoken");//token + + + Map paramsMap = new HashMap<>(); + List list = new ArrayList<>(); + list.add(fwmc); + Map data = new HashMap<>(); + data.put("NAME", list); + + paramsMap.put("systemId", "1"); + paramsMap.put("user", "2"); + paramsMap.put("functionId", "3"); + paramsMap.put("traceId", "4"); + paramsMap.put("data", data); + + Map appHeader = new HashMap<>(); + appHeader.put("appSysId", appSysId); + appHeader.put("token", token); + appHeader.put("Content-Type", "application/json"); + bb.writeLog("======"+JSONObject.toJSONString(appHeader)); + + Map returnBack = new HashMap<>(); + try { + bb.writeLog("=======传给接口的参数是:"+JSON.toJSONString(paramsMap)); + String backData = HttpUtil.postApplicationJson(requestUrl, JSON.toJSONString(paramsMap), appHeader); + bb.writeLog("接口返回的参数是:"+backData); + JSONObject object = JSON.parseObject(backData); + if (object.getString("code").equals("200")) { + String kmmc = ""; + String kmcodeList = JSON.parseObject(object.getString("data")).getString("label"); + String[] codeList = kmcodeList.split("\""); + bb.writeLog("========接口返回的科目编码是" + codeList[1]); + String code = codeList[1]; + RecordSet rs = new RecordSet(); + String sql = "select yskmmc from uf_kmpz k where k.yskmbm = '" + code + "'"; + bb.writeLog("=====即将执行根据科目编码获取科目名称:" + sql); + rs.executeQuery(sql); + if (rs.next()) { + kmmc = Util.null2String(rs.getString("yskmmc")); + } + bb.writeLog("=========获取的科目名称是:" + kmmc); + returnBack.put("code", "200"); + Map datatxt = new HashMap<>(); + datatxt.put("kmbm", code); + datatxt.put("kmmc", kmmc); + returnBack.put("data", datatxt); + } + } catch (Exception e) { + e.printStackTrace(); + bb.writeLog("=========" + e.getMessage()); + returnBack.put("code", "500"); + returnBack.put("data", "获取时发生错误"); + } + return returnBack; + } +} diff --git a/src/main/java/com/engine/htsc/fwnrTokmbh/web/FwnrToKmbhAction.java b/src/main/java/com/engine/htsc/fwnrTokmbh/web/FwnrToKmbhAction.java new file mode 100644 index 0000000..5f67eea --- /dev/null +++ b/src/main/java/com/engine/htsc/fwnrTokmbh/web/FwnrToKmbhAction.java @@ -0,0 +1,35 @@ +package com.engine.htsc.fwnrTokmbh.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.fwnrTokmbh.service.GetkmbhService; +import com.engine.htsc.fwnrTokmbh.service.impl.GetkmbhServiceImpl; +import weaver.general.BaseBean; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.Map; + +public class FwnrToKmbhAction { + + private GetkmbhService getService() { + return ServiceUtil.getService(GetkmbhServiceImpl.class); + } + + + @GET + @Path("/getkmbhbyfwnr") + @Produces({MediaType.APPLICATION_JSON}) + public String getkmbhByfwnr(@Context HttpServletRequest request, @Context HttpServletResponse response) { +// *住宿服务*房费 + BaseBean bb = new BaseBean(); + bb.writeLog("===========getkmbhByfwnr=============="); + String fwmc = request.getParameter("fwmc");//服务名称 + return JSONObject.toJSONString(getService().getKmbh(fwmc)); + } +} diff --git a/src/main/java/com/engine/htsc/fwnrTokmbh/web/GetKmbhTempAction.java b/src/main/java/com/engine/htsc/fwnrTokmbh/web/GetKmbhTempAction.java new file mode 100644 index 0000000..585f8e9 --- /dev/null +++ b/src/main/java/com/engine/htsc/fwnrTokmbh/web/GetKmbhTempAction.java @@ -0,0 +1,30 @@ +package com.engine.htsc.fwnrTokmbh.web; + +import com.alibaba.fastjson.JSONObject; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class GetKmbhTempAction { + @GET + @Path("/GetKmbhTemp") + @Produces({MediaType.APPLICATION_JSON}) + public String getKmbhTemp(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map code = new HashMap<>(); + code.put("code","200"); + Map kmxx = new HashMap<>(); + kmxx.put("kmmc","其他业务招待费"); + kmxx.put("kmbm","40018601050203"); + code.put("data",kmxx); + return JSONObject.toJSONString(code); + } +} diff --git a/src/main/java/com/engine/htsc/fzjgtravel/Dao/SubsidyDao.java b/src/main/java/com/engine/htsc/fzjgtravel/Dao/SubsidyDao.java new file mode 100644 index 0000000..572b788 --- /dev/null +++ b/src/main/java/com/engine/htsc/fzjgtravel/Dao/SubsidyDao.java @@ -0,0 +1,159 @@ +package com.engine.htsc.fzjgtravel.Dao; + +import weaver.general.Util; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.comInfo.PropBean; + +import java.text.MessageFormat; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class SubsidyDao { + public List> getWorkflowInfo_old(Map map){ + + String startdate=Util.null2String(map.get("startdate")); + String enddate=Util.null2String(map.get("enddate")); + String type=Util.null2String(map.get("type")); + String numbertable = new PropBean().getPropName("travelsubsidy_"+type); + String tablename= JAVATools.GetUnumbertotable(numbertable); + if(tablename==null||tablename.equals("")){ + return null; + } + + String sql="select distinct t1.requestid," + + " t1.ngr," + + " t1.lcbh," + + " t2.requestname," + + " t1.glcclc," + + " t2.LASTOPERATEDATE," + + " (select wm_concat_old(dt12.id) from {3}_dt12 dt12 where dt12.mainid=t1.id) as detailidsum, "+ + " t3.ccr, (select workcode from hrmresource hr where hr.id= t3.ccr ) as workcode" + + " from {0} t1" + + " left join workflow_requestbase t2" + + " on t1.requestid = t2.requestid" + + " left join {1}_dt12 t3" + + " on t1.id = t3.mainid" + + " where t1.sfzf=1 and t1.ngr != 1 and t1.sfldbx=0 and t2.currentnodetype = 3 "; + sql= MessageFormat.format(sql,tablename,tablename,tablename,tablename); + + if(startdate!=null && !"".equals(startdate)){ + sql += " and to_date(LASTOPERATEDATE,'yyyy-MM-dd')>=to_date('"+startdate+"','yyyy-MM-dd') "; + } + if(enddate!=null && !"".equals(enddate)){ + sql += " and to_date(LASTOPERATEDATE,'yyyy-MM-dd')<=to_date('"+enddate+"','yyyy-MM-dd') "; + } + JAVATools.SetCmdwritelog("分支机构差旅报销",sql); + return JAVATools.GetTableToListMap(sql,null); + } + + public List> getWorkflowInfo(Map map){ + + String startdate=JAVATools.getpreventsql(Util.null2String(map.get("startdate"))); + String enddate=JAVATools.getpreventsql(Util.null2String(map.get("enddate"))); + String type=Util.null2String(map.get("type")); + String numbertable = new PropBean().getPropName("travelsubsidy_"+type); + String tablename=JAVATools.GetUnumbertotable(numbertable); + + + String sql="select distinct t1.requestid," + + " t1.ngr," + + " t1.lcbh," + + " t2.requestname," + + " t1.glcclc," + + " t2.LASTOPERATEDATE," + + " t3.ccr as bxr, (select workcode from hrmresource hr where hr.id= t3.ccr ) as workcode, " + + " t3.yxzh," + + " t3.khxmc," + + " t3.yxzfje," + + " (select mt.departmentcode from HRMDEPARTMENT mt where mt.id=t3.bm) as departmentcode ," + + " (select mt.departmentname from HRMDEPARTMENT mt where mt.id=t3.bm) as departmentname " + + " from " + + " {0} t1 " + + " left join workflow_requestbase t2 " + + " on t1.requestid = t2.requestid " + + " left join {1}_dt10 t3 " + + " on t1.id = t3.mainid " + + " where t1.sfzf=1 and t1.ngr != 1 and t1.sfldbx=0 and t2.currentnodetype = 3 " + + " and t3.yxzfje is not null and t3.yxzfje >0 "; + sql= MessageFormat.format(sql,tablename,tablename); + + if(startdate!=null && !"".equals(startdate)){ + // startdate=JAVATools.getpreventsql(startdate); + sql += " and to_date(LASTOPERATEDATE,'yyyy-MM-dd')>=to_date('"+startdate+"','yyyy-MM-dd') "; + } + if(enddate!=null && !"".equals(enddate)){ + // enddate=JAVATools.getpreventsql(enddate); + sql += " and to_date(LASTOPERATEDATE,'yyyy-MM-dd')<=to_date('"+enddate+"','yyyy-MM-dd') "; + } + + + + + + JAVATools.SetCmdwritelog("分支机构差旅报销",sql); + return JAVATools.GetTableToListMap(sql,null); + } + + + public List> getsubsidyinfo(Map map){ + String detailidsum=Util.null2String(map.get("detailidsum")); + String requestid=Util.null2String(map.get("requestid")); + if(requestid==null||requestid.equals("") || detailidsum==null||detailidsum.equals("")){ + return null; + } + String detailid=Arrays.asList(detailidsum.split(",")).stream().distinct().map(item->"\'\'"+item+"\'\'").collect(Collectors.joining(",")); + String tablename=JAVATools.getMaintable(requestid); + String sql="select dt12.bt, dt12.cclc, dt12.cclccn,(select workcode from hrmresource hr where hr.id= dt12.ccr ) as ccr from {0}_dt12 dt12 " + + "where dt12.id in ("+detailid+")"; + sql= MessageFormat.format(sql,tablename); + JAVATools.SetCmdwritelog("分支机构差旅接口查询",sql); + return JAVATools.GetTableToListMap(sql,null); + } + + + public Map getbankCardNum(Map map){ + String requestid=Util.null2String(map.get("requestid")); + String ccr=Util.null2String(map.get("ccr")); + if(requestid==null||requestid.equals("") || ccr==null||ccr.equals("")){ + return null; + } + String ccrstr=Arrays.asList(ccr.split(",")).stream().distinct().map(item->"\'\'"+item+"\'\'").collect(Collectors.joining(",")); + String tablename=JAVATools.getMaintable(requestid); + String sql=" select distinct yxzh,khxmc " + + " from {0}_dt10 " + + " where mainid in (select id from {1} where requestid = ''{2}'')" + + " and ccr in ( select id from hrmresource where workcode in ("+ccrstr+") )"; + sql= MessageFormat.format(sql,tablename,tablename,requestid,ccrstr); + JAVATools.SetCmdwritelog("分支差旅接口查询",sql); + return JAVATools.GetTableToMap(sql,null); + + } + + + public Map getuserbaseinfo(String userid ){ + + if(userid==null||userid.equals("")){ + return null; + } + String ccrstr= Arrays.stream(userid.split(",")).map(item->"\'"+item+"\'").collect(Collectors.joining(",")); + + + String sql="select t2.lastname,t2.workcode," + + + " t3.DEPARTMENTCODE, " + + " t4.SUBCOMPANYCODE, " + + " t2.id " + + " from hrmresource t2 " + + " left join hrmdepartment t3 on t2.departmentid = t3.id" + + " left join hrmsubcompany t4 on t4.id = t2.SUBCOMPANYID1 " + + " where rownum = 1 and t2.workcode in ({0})"; + sql= MessageFormat.format(sql,ccrstr); + + JAVATools.SetCmdwritelog("分支机构接口查询",sql); + return JAVATools.GetTableToMap(sql,null); + + } + +} diff --git a/src/main/java/com/engine/htsc/fzjgtravel/Service/Impl/SubsidyServiceImpl.java b/src/main/java/com/engine/htsc/fzjgtravel/Service/Impl/SubsidyServiceImpl.java new file mode 100644 index 0000000..0eff516 --- /dev/null +++ b/src/main/java/com/engine/htsc/fzjgtravel/Service/Impl/SubsidyServiceImpl.java @@ -0,0 +1,61 @@ +package com.engine.htsc.fzjgtravel.Service.Impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.ReimbursementFlow.tool.Apireturn; +import com.engine.htsc.fzjgtravel.Dao.SubsidyDao; +import com.engine.htsc.fzjgtravel.Service.SubsidyService; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import weaver.general.Util; +import weaver.interfaces.htsc.GlobatTools.JAVATools; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class SubsidyServiceImpl extends Service implements SubsidyService { + + private SubsidyDao subsidyDao=new SubsidyDao(); + + @Override + public String getSubsidyService(Map Params) { + + String startdate = Util.null2String(Params.get("startdate")); + String enddate = Util.null2String(Params.get("enddate")); + String type=Util.null2String(Params.get("type")); + if ("".equals(startdate) || "".equals(enddate) || "".equals(type)) { + return Apireturn.returnmes(400, "参数有误", new JSONArray()); + } + try{ + JSONArray relateWfAllowancesarray=new JSONArray(); + List> listmap = subsidyDao.getWorkflowInfo(Params); + + for(Map entry : listmap){ + JSONObject relateWfAllowancesObj = new JSONObject(); + relateWfAllowancesObj.put("requestId", Util.null2String(entry.get("requestid"))); + relateWfAllowancesObj.put("workflowNumber", Util.null2String(entry.get("lcbh"))); + relateWfAllowancesObj.put("workflowName", Util.null2String(entry.get("requestname"))); + relateWfAllowancesObj.put("lastOperateTime",Util.null2String(entry.get("lastoperatedate"))); + relateWfAllowancesObj.put("workcode", Util.null2String(entry.get("workcode"))); + relateWfAllowancesObj.put("bankCardNum", Util.null2String(entry.get("yxzh"))); + relateWfAllowancesObj.put("bankName", Util.null2String(entry.get("khxmc"))); + relateWfAllowancesObj.put("allowance", Util.getDoubleValue(Util.null2String(entry.get("yxzfje")))); + relateWfAllowancesObj.put("deptCode", Util.null2String(entry.get("departmentcode"))); + relateWfAllowancesObj.put("deptName", Util.null2String(entry.get("departmentname"))); + relateWfAllowancesarray.add(relateWfAllowancesObj); + } + return Apireturn.returnmes(200,"success",relateWfAllowancesarray); + }catch (Exception exo){ + JAVATools.SetCmdwritelog("分支机构补贴数据error",exo.getMessage()); + } + return Apireturn.returnmes(200,"success",new JSONArray()); + + +} + + +} diff --git a/src/main/java/com/engine/htsc/fzjgtravel/Service/SubsidyService.java b/src/main/java/com/engine/htsc/fzjgtravel/Service/SubsidyService.java new file mode 100644 index 0000000..20bc2da --- /dev/null +++ b/src/main/java/com/engine/htsc/fzjgtravel/Service/SubsidyService.java @@ -0,0 +1,8 @@ +package com.engine.htsc.fzjgtravel.Service; + +import java.util.Map; + +public interface SubsidyService { + + public String getSubsidyService(Map Params); +} diff --git a/src/main/java/com/engine/htsc/fzjgtravel/Web/SubsidyAction.java b/src/main/java/com/engine/htsc/fzjgtravel/Web/SubsidyAction.java new file mode 100644 index 0000000..f9b5749 --- /dev/null +++ b/src/main/java/com/engine/htsc/fzjgtravel/Web/SubsidyAction.java @@ -0,0 +1,176 @@ +package com.engine.htsc.fzjgtravel.Web; + +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; + +import com.engine.govern.util.ParamsUtil; +import com.engine.htsc.fzjgtravel.Service.Impl.SubsidyServiceImpl; +import com.engine.htsc.fzjgtravel.Service.SubsidyService; +import org.json.JSONObject; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.interfaces.htsc.GlobatTools.DBTools; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.workflow.action.Action; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +public class SubsidyAction { + + private SubsidyService getService(){ + return ServiceUtil.getService(SubsidyServiceImpl.class); + } + + @POST + @Path("/Getsubsidy") + @Produces({MediaType.APPLICATION_JSON}) + public String GetSubsidy(@Context HttpServletRequest req, @Context HttpServletRequest rep){ + return getService().getSubsidyService(ParamUtil.request2Map(req)); + } + + @POST + @Path("/travelflowreturn") + @Produces({MediaType.APPLICATION_JSON}) + public String TravelFlowReturnAction(@Context HttpServletRequest request, @Context HttpServletRequest rep){ + + String requestid = request.getParameter("requestid"); + RecordSet rs = new RecordSet(); +// String requestid = Util.null2String(requestInfo.getRequestid()); + String tableunnumbber=JAVATools.getmainunnumber(requestid); + Map map=getUnumber(tableunnumbber); + if(map==null || map.size()<=0){ + return JAVATools.Apiretrun("400","失败"); + } + String ngjdbh=Util.null2String(map.get("ngjdbh")); + String data=Util.null2String(map.get("sj")); + if("".equals(ngjdbh) || "".equals(data)){ + return JAVATools.Apiretrun("400","失败"); + } + Map datamap= getdatamap(data); + if(datamap==null || datamap.size()<=0){ + return JAVATools.Apiretrun("200",""); + } + String ngjdnodeid=JAVATools.getnodeunnumbertoid(ngjdbh); + + + String tablename = Util.null2String(JAVATools.getMaintable(requestid));//主表 + String sql="select a.nodeid lastnodeid,a.operator,a.isSubmitDirect lastIsSubmitDirect, a.logtype " + + " from workflow_requestlog a, workflow_nownode b " + + " where a.requestid = b.requestid " + + " and a.destnodeid = b.nownodeid " + + " and b.requestid =? " + + " and a.destnodeid = ? " + + " order by a.logid desc "; + Map returnmap= DBTools.getsqltomap(sql,requestid,ngjdnodeid); + + if(returnmap==null || returnmap.size()<=0){ + + return JAVATools.Apiretrun("200",""); + } + String lastnodeid= Util.null2String(returnmap.get("lastnodeid")); + String isSubmitDirect= Util.null2String(returnmap.get("lastissubmitdirect")); + String operator= Util.null2String(returnmap.get("operator")); + String isnotkeyvalueStr= Util.null2String(datamap.get(lastnodeid)); + if("".equals(isnotkeyvalueStr) || "".equals(operator) || !"1".equals(isSubmitDirect)){ + return JAVATools.Apiretrun("200",""); + } + try { + JSONObject jsonObject = new JSONObject(); + jsonObject.put(isnotkeyvalueStr.split("_")[1], operator); + return JAVATools.Apiretrun("200",jsonObject.toString()); + }catch (Exception exo){ + + return JAVATools.Apiretrun("400","失败"); + + } + + } + + + + + + private Map getUnumber(String number){ + String sql="select ngjdbh,sj from uf_zdjd where 1=1"; + Map paramswhere=new HashMap<>(); + paramswhere.put("zbbh",number); + return JAVATools.GetTableToMap(sql,paramswhere); + } + + private Map getdatamap(String data){ + Map datamap=new HashMap<>(); + Arrays.stream(data.split(",")).forEach((model)->{ + if(model.split(":").length==2){ + + String key=model.split(":")[0]; + String value=model.split(":")[1]; + if(!"".equals(key) && !"".equals(value)){ + String keynodeid=JAVATools.getnodeunnumbertoid(key); + if(!"".equals(keynodeid)){ + datamap.put(keynodeid,value); + } + + } + + } + }); + return datamap; + } + + private void updateoperate(Map map){ + RecordSet rs=new RecordSet(); + String tablename= Util.null2String(map.get("tablename")); + String requestid=Util.null2String(map.get("requestid")); + String datavalue=Util.null2String(map.get("datavalue")); + if("".equals(tablename) || "".equals(requestid)|| "".equals(datavalue)){ + return ; + } + String updateset=""; + if(datavalue.split("_").length==2){ + updateset=datavalue.split("_")[0]+"="+datavalue.split("_")[1]+","+datavalue.split("_")[1]+"=''"; + }else{ + updateset=datavalue+"=''"; + } + String updatesql="update "+tablename+" set "+updateset+ + " where requestid=?"; + JAVATools.SetCmdwritelog("差旅类流程修改",updatesql+"requestid"+requestid); + + rs.executeUpdate(updatesql,requestid); + } + + private void updateall(Map map, + Map datavalue){ + RecordSet rs=new RecordSet(); + String tablename=Util.null2String(map.get("tablename")); + String requestid=Util.null2String(map.get("requestid")); + + if("".equals(tablename) || "".equals(requestid)|| null==datavalue ||datavalue.size()<=0){ + return ; + } + + String updateset=""; + for (String key:datavalue.keySet()){ + String value=datavalue.get(key); + if(!"".equals(value)){ +// updateset.append(value.split("_")[0]+"=''"); + updateset += updateset==""?value.split("_")[0]+"=''" : ","+value.split("_")[0]+"=''"; + } + } + + String updatesql="update "+tablename+" set "+ updateset.toString()+ + " where requestid=?"; + JAVATools.SetCmdwritelog("差旅类流程修改",updatesql+"requestid"+requestid); + rs.executeUpdate(updatesql,requestid); + } + +} diff --git a/src/main/java/com/engine/htsc/glpt/web/CheckStateAction.java b/src/main/java/com/engine/htsc/glpt/web/CheckStateAction.java new file mode 100644 index 0000000..3fad882 --- /dev/null +++ b/src/main/java/com/engine/htsc/glpt/web/CheckStateAction.java @@ -0,0 +1,118 @@ +package com.engine.htsc.glpt.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.integration.util.StringUtils; +import com.weaver.general.BaseBean; +import org.apache.commons.collections.CollectionUtils; +import weaver.conn.RecordSet; +import weaver.conn.RecordSetDataSource; +import weaver.general.Util; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.workflow.action.Action; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.*; + +/** + * @Title: ecology-9 + * @Company: 泛微软件 + * @author: K1810039 + * @version: 1.0 + * @CreateDate: 2022-06-13 + * @Description: 对接IT需求管理平台,验证流程状态 + * @ModifyLog: + **/ +public class CheckStateAction { + /*** + * 对接IT需求管理平台,验证流程状态 + */ + @POST + @Path("/checkState") + @Produces({MediaType.TEXT_PLAIN}) + public String checkState( @Context HttpServletRequest request, @Context HttpServletResponse response) { + JAVATools.writelog("-------CheckStateAction------"); + Map apidatas = new HashMap(); + try { + String xqbhStr = Util.null2String(request.getParameter("demandcodeList")); + + if (StringUtils.isEmpty(xqbhStr)){ + JAVATools.writelog("xqbhStr is null"); + apidatas.put("success",false); + apidatas.put("msg", "接收到的参数为空"); + return JSONObject.toJSONString(apidatas); + } + JAVATools.writelog("xqbhStr:"+xqbhStr); + String sql = ""; + RecordSet rs = new RecordSet(); + sql = "select distinct d.XQBH from formtable_main_548 t join FORMTABLE_MAIN_548_DT7 d\n" + + " on t.ID in (d.MAINID) join WORKFLOW_REQUESTBASE a on a.REQUESTID = t.REQUESTID\n" + + "where d.XQBH in ("+xqbhStr+") and a.CURRENTNODETYPE in (1,2) and a.ISSTOPPED IS NUll "; + JAVATools.writelog(sql); + List resList = new ArrayList<>(); + rs.execute(sql); + while (rs.next()){ + resList.add(Util.null2String(rs.getString("XQBH"))); + } + apidatas.put("success",true); + apidatas.put("msg", "查询成功"); + apidatas.put("demandcodeList",resList); + } catch (Exception e) { + e.printStackTrace(); + apidatas.put("success",false); + apidatas.put("msg", "系统内部错误"); + } + + return JSONObject.toJSONString(apidatas); + + } + + /** + * 触发IT需求管理平台流程拟稿节点前Action + */ + @POST + @Path("/ItxqlcDeleteJira") + @Produces({MediaType.TEXT_PLAIN}) + public void ItxqlcDeleteJira( @Context HttpServletRequest request, @Context HttpServletResponse response) { + String requestid = Util.null2String(request.getParameter("requestid")); + JAVATools.writelog("-------ItxqlcDeleteJira------" + requestid ); + RecordSetDataSource rsd = new RecordSetDataSource("ALM"); + BaseBean bb = new BaseBean(); + try { + String sql = " DELETE FROM T_ITAPPLYREQUIREMENT_DATA WHERE WORKFLOWNUM= '"+requestid+"' AND STATUS='未办结'"; + JAVATools.writelog(sql); + rsd.execute(sql); + } catch (Exception e) { + e.printStackTrace(); + JAVATools.writelog("error:ItxqlcDeleteJira"); + JAVATools.writelog( "异常参考:" + e ); + } + } + + + /** + * 将List集合转化为带引号的String + * 如{"1","2"} To '1','2' + * @param strList ⼊参 + * @return String + */ + public static String convertListToString(List strList) { + StringBuffer sb = new StringBuffer(); + if (CollectionUtils.isNotEmpty(strList)) { + for (int i = 0; i < strList.size(); i++) { + if (i == 0) { + sb.append("'").append(strList.get(i)).append("'"); + } else { + sb.append(",").append("'").append(strList.get(i)).append("'"); + } + } + } + return sb.toString(); + } + +} diff --git a/src/main/java/com/engine/htsc/gsfw/web/CompanyWorkflowAction.java b/src/main/java/com/engine/htsc/gsfw/web/CompanyWorkflowAction.java new file mode 100644 index 0000000..810e69b --- /dev/null +++ b/src/main/java/com/engine/htsc/gsfw/web/CompanyWorkflowAction.java @@ -0,0 +1,71 @@ +package com.engine.htsc.gsfw.web; + +import com.weaver.general.Util; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.conn.RecordSet; +import weaver.interfaces.htsc.comInfo.PropBean; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class CompanyWorkflowAction { + + private Log log = LogFactory.getLog(this.getClass()); + + /** + * 公司发文公文发送节点送办结前校验领导会签 + * @param request + * @param response + * @return + */ + @GET + @Path("/checkTransferred") + @Produces({MediaType.APPLICATION_JSON}) + public Map checkTransferred(@Context HttpServletRequest request, + @Context HttpServletResponse response){ + Map map = new HashMap<>(); + PropBean pb = new PropBean(); + String leaderIds = Util.null2String(request.getParameter("leaderIds")); + List leaderIdList = new ArrayList<>(); + String[] split = leaderIds.split(","); + for (String leaderId : split){ + leaderIdList.add(leaderId); + } + String requestid = Util.null2String(request.getParameter("requestid")); + String nodeunnumber = Util.null2String(request.getParameter("nodeunnumber")); + String nodeid_ldhq = pb.getActionNodeIdByUnNumber(nodeunnumber); + log.info("nodeid_ldhq"+nodeid_ldhq); + try { + RecordSet rs = new RecordSet(); + String selectLeader = "select DISTINCT userid from workflow_currentoperator " + + " where requestid = ? and nodeid = ? and isremark <> 0 "; + rs.executeQuery(selectLeader,requestid,nodeid_ldhq); + log.info("sql--"+selectLeader); + List useridList = new ArrayList<>(); + while (rs.next()){ + String userid = Util.null2String(rs.getString("userid")); + useridList.add(userid); + } + Boolean flag = useridList.containsAll(leaderIdList); + log.info("flag:"+flag); + map.put("status",1); + map.put("msg","success"); + map.put("result",flag); + + }catch (Exception e){ + map.put("msg","校验失败"); + e.printStackTrace(); + } + return map; + } +} diff --git a/src/main/java/com/engine/htsc/gsfw/web/GsFwControlAction.java b/src/main/java/com/engine/htsc/gsfw/web/GsFwControlAction.java new file mode 100644 index 0000000..76cee39 --- /dev/null +++ b/src/main/java/com/engine/htsc/gsfw/web/GsFwControlAction.java @@ -0,0 +1,888 @@ +package com.engine.htsc.gsfw.web; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import weaver.general.Util; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.workflow.request.wfAgentCondition; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.*; + +public class GsFwControlAction { + + /** + * 查询人员待办 + * @param request + * @param response + * @return + */ + @GET + @Path("/getNextJudget") + @Produces({MediaType.TEXT_PLAIN}) + public String getNextJudget(@Context HttpServletRequest request, @Context HttpServletResponse response){ + String requestid = Util.null2String(request.getParameter("requestid")); + BaseBean bb = new BaseBean(); + PropBean pb = new PropBean(); +// String sxfxg = pb.getPropName("GSFW_SXFXG_NODEID"); +// String hgzj = pb.getPropName("GSFW_HGZJ_NODEID"); + + String gsfw_sxfxg = pb.getPropName("gsfw_sxfxg"); + String sxfxg = pb.getNodeIdsByUnNumber(gsfw_sxfxg); //首席风险官 + + String gsfw_hgzj = pb.getPropName("gsfw_hgzj"); + String hgzj = pb.getNodeIdsByUnNumber(gsfw_hgzj); + + bb.writeLog("sxfxg:"+sxfxg); + bb.writeLog("hgzj:"+hgzj); + RecordSet rs = new RecordSet(); + JSONObject json = new JSONObject(); + json.put("result","no"); + json.put("smesg",""); + if(!requestid.equals("-1")) + { + boolean fsFlag = false; + boolean hgFlag = false; + int fs_int = 0; + String sql = " select logid from workflow_requestlog where requestid=" + requestid + " and nodeid in(" + sxfxg+")"; + bb.writeLog("sql:" + sql); + rs.execute(sql); + if (rs.next()) { + fs_int++; + } + if (fs_int > 0) { + fsFlag = true; + } else { + json.put("smesg", "请先送完首席风险官"); + } + + if (fsFlag) + { + int hg_int = 0; + sql = " select logid from workflow_requestlog where requestid=" + requestid + " and nodeid in(" + hgzj +")"; + bb.writeLog("sql:" + sql); + rs.execute(sql); + if (rs.next()) { + hg_int++; + } + if (hg_int > 0) { + hgFlag = true; + } else { + json.put("smesg", "请先送完合规总监"); + } + } + if (fsFlag && hgFlag) { + json.put("result", "yes"); + } + } + return JSONObject.toJSONString(json); + } + + /*** + * 公司发文(执行秘书)节点判断 + * @param request + * @param response + * @return + */ + @GET + @Path("/getNextIshq") + @Produces({MediaType.TEXT_PLAIN}) + public String getNextIshq(@Context HttpServletRequest request, @Context HttpServletResponse response) { + String requestid = Util.null2String(request.getParameter("requestid")); + RecordSet rs = new RecordSet(); + String whqgs = "0"; + + JSONObject jsonObject = new JSONObject(); + if(!"".equals(requestid)) + { + String formid = ""; + String tablename = "formtable_main_"; + String sqltable = " select abs(t.formid) as formid " + + " from workflow_base t " + + " inner join workflow_requestbase l on l.workflowid = t.id " + + " where l.requestid=" + requestid + ""; + rs.execute(sqltable); + if (rs.next()) { + formid = Util.null2String(rs.getString("formid")); + } + tablename += formid; + String tabledetailname = tablename + "_dt2"; + String sql = " select count(*) as detailsum from " + tabledetailname + " where mainid in (select id from " + tablename+ + " where requestid='" + requestid + "') " + + " and (yhq='0' or yhq is null)"; + rs.execute(sql); + if (rs.next()) + { + whqgs = Util.null2String(rs.getString("detailsum")); + } + } + jsonObject.put("whqgs",whqgs); + return jsonObject.toJSONString(); + + } + /*** + * + * @param request + * @param response + * @return + */ + @GET + @Path("/getNextValue") + @Produces({MediaType.TEXT_PLAIN}) + public String getNextValue(@Context HttpServletRequest request, @Context HttpServletResponse response){ + String requestid = Util.null2String( request.getParameter( "requestid" ) ); + int formid = Util.getIntValue(Util.null2String( request.getParameter("formid"))); + JSONObject json = new JSONObject(); +// List valList = new ArrayList(); +// valList.add("0"); +// valList.add("1"); + + String sval = "0,1,7"; + BaseBean bb = new BaseBean(); + RecordSet rs = new RecordSet(); + if(!requestid.equals("-1")){ + //---获取所有参与审批人的部门--- + String alldept = ""; + String sql = " select distinct h.departmentid as departmentid from hrmresource h where h.id in(select r.userid from workflow_currentoperator r where r.requestid='"+requestid+"')"; + rs.executeQuery( sql ); + while(rs.next()){ + alldept += alldept=="" ? Util.null2String(rs.getString("departmentid")) : ","+Util.null2String(rs.getString("departmentid")); + } + alldept = ","+alldept + ","; + + //---判断是否是债务融资部拟稿-- + if (alldept.indexOf(",670,") > -1) + { + String formtable = "" ; + sql = " select 'formtable_main_'||abs(l.formid) as formtable from workflow_requestbase t\n" + + "inner join workflow_base l on l.id = t.workflowid\n" + + "where requestid="+requestid ; + rs.execute(sql); + if(rs.next()){ + formtable = Util.null2String(rs.getString("formtable")); + } + String lx = "" ; + if(!"".equals(formtable)){ + sql = " select lx from "+formtable+" where requestid="+requestid ; + rs.execute(sql); + if(rs.next()){ + lx = Util.null2String(rs.getString("lx")); + } + } + if("22".equals(lx)){ +// valList.add("2"); + sval = sval + ",2"; + } + } + + List list = new ArrayList(); + String szbm = ""; + String hqbm = ""; + String formtable = "formtable_main_"+Math.abs(formid); + sql = " select szbm,hqbm from "+ formtable+" where requestid="+requestid; + rs.execute(sql); + if(rs.next()){ + szbm = Util.null2String(rs.getString("szbm")); + hqbm = Util.null2String(rs.getString("hqbm")); + } + + bb.writeLog("szbm:"+szbm); + if(!"".equals(szbm)) + { + list.addAll(Arrays.asList(szbm.split(","))); + } + + //---获取风险管理部门id、合规法律部id--- + String fs_deptid = ""; + String hg_deptid = ""; + sql = "select id,departmentcode from hrmdepartment where departmentcode in('ZZ323310','ZZ323311')"; + rs.executeQuery( sql ); + while(rs.next()){ + String code = Util.null2String(rs.getString("departmentcode")); + if(code.equals("ZZ323310")){ + fs_deptid = Util.null2String(rs.getString("id")); + }else{ + hg_deptid = Util.null2String(rs.getString("id")); + } + } + + if(list !=null && list.size() >0) + { + if(list.contains(fs_deptid) ){ +// valList.add("3"); + sval = sval+",3"; + } + + if(list.contains(hg_deptid) ){ +// valList.add("4"); + sval = sval+",4"; + } + } + + List hqList = new ArrayList(); + if(!"".equals(hqbm)) + { + sql = " select t.userid,h.departmentid from workflow_currentoperator t\n" + + " inner join hrmresource h on h.id = t.userid\n" + + " where nodeid < 0 and userid in( select id from hrmresource h where departmentid in("+hqbm+")) and requestid="+requestid; + rs.execute(sql); + while(rs.next()){ + String departmentid = Util.null2String(rs.getString("departmentid")); + hqList.add(departmentid); + } + } + + if(hqList !=null && hqList.size() >0) + { + if(hqList.contains(fs_deptid)){ + if(!sval.contains("3")){ +// valList.add("3"); + sval = sval+",3"; + } + } + + if(hqList.contains(hg_deptid)){ + if(!sval.contains("4")){ +// valList.add("4"); + sval = sval+",4"; + } + } + } + + +// //---判断是计划财务部、资金运营部参与审批--- + String jhcwbid = ""; + String zjyybid = ""; + sql = "select id,departmentcode from hrmdepartment where departmentcode in('ZZ001016','ZZ323314')"; //计划财务部、资金运营部 + rs.executeQuery( sql ); + while(rs.next()){ + String code = Util.null2String(rs.getString("departmentcode")); + if(code.equals("ZZ001016")){ + jhcwbid = Util.null2String(rs.getString("id")); + }else{ + zjyybid = Util.null2String(rs.getString("id")); + } + } + + if(list !=null && list.size() >0) + { + boolean bool = false; + if(list.contains(jhcwbid) || list.contains(zjyybid) ){ + bool = true; + } + if(bool) + { +// valList.add("5"); + sval = sval+",5"; + } + } + + if(hqList !=null && hqList.size() >0) + { + if(hqList.contains(jhcwbid) || hqList.contains(zjyybid)){ + if(!sval.contains("5")){ +// valList.add("5"); + sval = sval+",5"; + } + } + } + +// int sfty = 0; +// sql = " select * from (\n" + +// "select remark,row_number() over(partition by nodeid order by logid desc) as xh\n" + +// " from workflow_requestlog\n" + +// "where requestid = " + requestid + +// "and nodeid in(select id from workflow_nodebase \n" + +// "where unnumber in('gsfw_sxcwg','gsfw_hgzj','gsfw_sxfxg'))\n" + +// ") l where l.xh=1 and remark like '不同意%' "; +// +// rs.execute(sql); +// if(rs.next()){ +// sfty++; +// } +// if(sfty == 0){ +// valList.add("6"); +// sval = sval+",6"; +// } + sval = sval+",6"; + + } + json.put("result",sval); + return JSONObject.toJSONString(json); + } + + @GET + @Path("/judgeBgszrApprove") + @Produces({MediaType.TEXT_PLAIN}) + public String judgeBgszrApprove(@Context HttpServletRequest request, @Context HttpServletResponse response) { + String requestid = Util.null2String( request.getParameter( "requestid" ) ); + RecordSet rs = new RecordSet(); + PropBean pb = new PropBean(); + JSONObject json = new JSONObject(); + json.put("result","no"); + + try{ + if(!requestid.equals("-1")) + { + boolean fsFlag = false; + + //---公司发文办公室主任审核节点id--- +// String gsfw_bgszr_nodeid = Util.null2String(pb.getPropName("GSFW_BGSZR_NODEID")); +// String sql = "select distinct nodeid as nodes from workflow_currentoperator where requestid='"+requestid+"'"; +// rs.executeQuery( sql ); +// while(rs.next()){ +// String nodes = Util.null2String(rs.getString("nodes")); +// if(nodes.equals(gsfw_bgszr_nodeid)){ +// fsFlag = true; +// break; +// } +// } + + String gsfw_bgszrsh = Util.null2String(pb.getPropName("gsfw_bgszrsh")); + String gsfw_bgszr_nodeid = pb.getNodeIdsByUnNumber(gsfw_bgszrsh); + + String sql = " select id from workflow_currentoperator where requestid='"+requestid+"' and nodeid in("+gsfw_bgszr_nodeid+")"; + rs.executeQuery( sql ); + if(rs.next()){ + fsFlag = true; + } + + if(fsFlag){ + json.put("result","yes"); + } + } + }catch (Exception e){ + + } + return JSONObject.toJSONString(json); + } + + + @GET + @Path("/getldqf2") + @Produces({MediaType.TEXT_PLAIN}) + public String getldqf2(@Context HttpServletRequest request, @Context HttpServletResponse response) { + + BaseBean bb = new BaseBean(); + RecordSet rs = new RecordSet(); + DepartmentComInfo departmentComInfo = null; + ResourceComInfo resourceComInfo = null; + JSONObject jsonObject = new JSONObject(); + try{ + departmentComInfo = new DepartmentComInfo(); + resourceComInfo = new ResourceComInfo(); + + String szbm = Util.null2String(request.getParameter("szbm")); + String szbmcode = departmentComInfo.getDepartmentCode(szbm); + + String excludeId = "ZZ001014,ZZ323472" ; //信息技术部 , 数字化运营部 + String definUserCode = "001008"; //周易 + String definUserid = ""; + String sql = " select id from hrmresource where loginid='"+definUserCode+"'"; + rs.execute(sql); + if(rs.next()){ + definUserid = Util.null2String(rs.getString("id")); + } + String definUsername = resourceComInfo.getLastname(definUserid); + if((","+excludeId+",").contains(","+szbmcode+",")) + { + jsonObject.put("ldqf2value",definUserid); + jsonObject.put("ldqf2name",definUsername); + + String deptleaders = ""; + sql = " select deptleaders from hrmdepartmentdefined where deptid = "+szbm; + rs.execute(sql); + if(rs.next()){ + deptleaders = Util.null2String(rs.getString("deptleaders")); + } + if(deptleaders.indexOf(",")>-1){ + deptleaders = deptleaders.substring(0,deptleaders.indexOf(",")); + } + String deptleadersname = ""; + if(!"".equals(deptleaders)){ + deptleadersname = resourceComInfo.getLastname(deptleaders); + } + jsonObject.put("ldsp2value",deptleaders); + jsonObject.put("ldsp2name",deptleadersname); + + }else{ + String deptleaders = ""; + sql = " select deptleaders from hrmdepartmentdefined where deptid = "+szbm; + rs.execute(sql); + if(rs.next()){ + deptleaders = Util.null2String(rs.getString("deptleaders")); + } + if(deptleaders.indexOf(",")>-1){ + deptleaders = deptleaders.substring(0,deptleaders.indexOf(",")); + } + String deptleadersname = ""; + if(!"".equals(deptleaders)){ + deptleadersname = resourceComInfo.getLastname(deptleaders); + } + + jsonObject.put("ldqf2value",deptleaders); + jsonObject.put("ldqf2name",deptleadersname); + + jsonObject.put("ldsp2value",""); + jsonObject.put("ldsp2name",""); + } + }catch (Exception e){ + bb.writeLog("e:"+e); + } + return JSONObject.toJSONString(jsonObject); + } + + + @GET + @Path("/getldsp2") + @Produces({MediaType.TEXT_PLAIN}) + public String getldsp2(@Context HttpServletRequest request, @Context HttpServletResponse response) { + BaseBean bb = new BaseBean(); + RecordSet rs = new RecordSet(); + ResourceComInfo resourceComInfo = null; + Map dataMap = new HashMap(); + try{ + resourceComInfo = new ResourceComInfo(); + String yz = Util.null2String(request.getParameter("yz")); + String ldsp2 = Util.null2String(request.getParameter("ldsp2")); + int bool = 0; + String[] yzs = yz.split(","); + for(int i=0;i0) + { + List speciaList = Arrays.asList(ldsp2.split(",")); + bb.writeLog("speciaList:"+speciaList.size()); + String values = ""; + JSONArray speciaArray = new JSONArray(); + for(int i=0;i hqbmArry = Arrays.asList(bjhqbm.split(",")); + JSONArray hqbmJsonArray = new JSONArray(); + for (String hqbm2 : hqbmArry) + { + if(!hqbm2.equals(deptid)){ + JSONObject jsonObject = new JSONObject(); + String hqbmname = departmentComInfo.getDepartmentName(hqbm2);//必经会签部门名称 + jsonObject.put( "id", hqbm2 ); + jsonObject.put( "name", hqbmname ); + hqbmJsonArray.add( jsonObject ); + } + } + + List tzyddxArry = Arrays.asList(qzsyry.split(",")); + JSONArray tzyddxJsonArray = new JSONArray(); + for (String tzyddx2 : tzyddxArry) + { + JSONObject jsonObject = new JSONObject(); + String tzyddxname = resourceComInfo.getLastname(tzyddx2);//强制送阅人员 + jsonObject.put( "id", tzyddx2 ); + jsonObject.put( "name", tzyddxname ); + tzyddxJsonArray.add( jsonObject ); + if(gd.equals("")){ + gd = "hrm_"+tzyddx2; + }else{ + gd = gd + ",hrm_"+tzyddx2; + } + } + + if(!qzsydx.equals("")){ + if(gd.equals("")){ + gd = "dept_"+qzsydx; + }else{ + gd = gd + ",dept_"+qzsydx; + } + } + + dataJson.put("hqbm",bjhqbm); + dataJson.put("hqbmspec",hqbmJsonArray); + dataJson.put("hqbm_gd",bjhqbm); + + dataJson.put("tzyddx",qzsyry); + dataJson.put("tzyddxspec",tzyddxJsonArray); + dataJson.put("tzyddx_gd",gd); + + }catch (Exception e){ + bb.writeLog("e:"+e); + } + return dataJson.toJSONString(); + } + + + @GET + @Path("/getbeagent") + @Produces({MediaType.TEXT_PLAIN}) + public String getBeagent(@Context HttpServletRequest request, @Context HttpServletResponse response) { + BaseBean bb = new BaseBean(); + JSONObject json = new JSONObject(); + ResourceComInfo resourceComInfo = null; + try{ + resourceComInfo = new ResourceComInfo(); + String requestid = Util.null2String(request.getParameter("requestid")); + String workflowid = Util.null2String(request.getParameter("workflowid")); + String operatorid = Util.null2String(request.getParameter("operatorid")); + bb.writeLog("requestid:"+requestid); + bb.writeLog("workflowid:"+workflowid); + bb.writeLog("operatorid:"+operatorid); + + wfAgentCondition wfAgentCondition = new wfAgentCondition(); + JSONArray jsonArray = new JSONArray(); + Map map = wfAgentCondition.getAgentInfoByResouce(workflowid,operatorid,requestid); + for(Map.Entry entry : map.entrySet()) + { + String key = entry.getKey(); + String value = entry.getValue(); + String name = "" ; + if(value !="") + { + name = resourceComInfo.getLastname(value); + } + JSONObject jsonObject = new JSONObject(); + jsonObject.put("operatorid",key); + jsonObject.put("beagentid",value); + jsonObject.put("beagentname",name); + jsonArray.add(jsonObject); + } + json.put("data",jsonArray); + }catch (Exception e){ + bb.writeLog("e:"+e); + } + return json.toJSONString(); + } + + + @GET + @Path("/getszwrznh") + @Produces({MediaType.TEXT_PLAIN}) + public String getSzWrznh(@Context HttpServletRequest request, @Context HttpServletResponse response) { + BaseBean bb = new BaseBean(); + RecordSet rs = new RecordSet(); + JSONObject dataJson = new JSONObject(); + try{ + String hgflbnbsh = Util.null2String( request.getParameter("hgflbnbsh") );//合规法律部内部审核 + int requestid = Util.getIntValue(Util.null2String(request.getParameter("requestid")));//流程requestid + String logid =""; + if(requestid >0) + { + String sql = " select logid from workflow_requestlog where requestid="+requestid+" and nodeid in("+hgflbnbsh+") and logtype=0" ; + bb.writeLog("sql:"+sql); + rs.executeQuery(sql); + if(rs.next()) + { + logid = Util.null2String(rs.getString("logid")); + } + } + dataJson.put("logid",logid); + }catch (Exception e){ + bb.writeLog("e:"+e); + } + return dataJson.toJSONString(); + } + + + + @GET + @Path("/getNextValueForLx") + @Produces({MediaType.TEXT_PLAIN}) + public String getNextValueForLx(@Context HttpServletRequest request, @Context HttpServletResponse response) { + + RecordSet rs = new RecordSet(); + BaseBean bb = new BaseBean(); + String requestid = Util.null2String( request.getParameter( "requestid" ) ); + int formid = Util.getIntValue(Util.null2String( request.getParameter("formid"))); + String lx = Util.null2String( request.getParameter( "lx" ) ); + JSONObject json = new JSONObject(); +// List valList = new ArrayList(); +// valList.add("0"); +// valList.add("1"); + + String sval = "0,1"; + if(!requestid.equals("-1")) + { + if("".equals(lx)) + { + //---获取所有参与审批人的部门--- + String alldept = ""; + String sql = " select distinct h.departmentid as departmentid from hrmresource h where h.id in(select r.userid from workflow_currentoperator r where r.requestid='"+requestid+"')"; + rs.executeQuery( sql ); + while(rs.next()){ + alldept += alldept=="" ? Util.null2String(rs.getString("departmentid")) : ","+Util.null2String(rs.getString("departmentid")); + } + alldept = ","+alldept + ","; + + //---判断是否是债务融资部拟稿-- + if (alldept.indexOf(",670,") > -1) + { + String formtable = "" ; + sql = " select 'formtable_main_'||abs(l.formid) as formtable from workflow_requestbase t\n" + + "inner join workflow_base l on l.id = t.workflowid\n" + + "where requestid="+requestid ; + rs.execute(sql); + if(rs.next()){ + formtable = Util.null2String(rs.getString("formtable")); + } + if(!"".equals(formtable)){ + sql = " select lx from "+formtable+" where requestid="+requestid ; + rs.execute(sql); + if(rs.next()){ + lx = Util.null2String(rs.getString("lx")); + } + } + } + } + if("22".equals(lx)) + { +// valList.add("2"); + sval = sval + ",2"; + } + + List list = new ArrayList(); + String szbm = ""; + String hqbm = ""; + String formtable = "formtable_main_"+Math.abs(formid); + String sql = " select szbm,hqbm from "+ formtable+" where requestid="+requestid; + rs.execute(sql); + if(rs.next()){ + szbm = Util.null2String(rs.getString("szbm")); + hqbm = Util.null2String(rs.getString("hqbm")); + } + + bb.writeLog("szbm:"+szbm); + if(!"".equals(szbm)) + { + list.addAll(Arrays.asList(szbm.split(","))); + } + + //---获取风险管理部门id、合规法律部id--- + String fs_deptid = ""; + String hg_deptid = ""; + sql = "select id,departmentcode from hrmdepartment where departmentcode in('ZZ323310','ZZ323311')"; + rs.executeQuery( sql ); + while(rs.next()){ + String code = Util.null2String(rs.getString("departmentcode")); + if(code.equals("ZZ323310")){ + fs_deptid = Util.null2String(rs.getString("id")); + }else{ + hg_deptid = Util.null2String(rs.getString("id")); + } + } + + if(list !=null && list.size() >0) + { + if(list.contains(fs_deptid) ){ +// valList.add("3"); + sval = sval+",3"; + } + + if(list.contains(hg_deptid) ){ +// valList.add("4"); + sval = sval+",4"; + } + } + + List hqList = new ArrayList(); + if(!"".equals(hqbm)) + { + sql = " select t.userid,h.departmentid from workflow_currentoperator t\n" + + " inner join hrmresource h on h.id = t.userid\n" + + " where nodeid < 0 and userid in( select id from hrmresource h where departmentid in("+hqbm+")) and requestid="+requestid; + rs.execute(sql); + while(rs.next()){ + String departmentid = Util.null2String(rs.getString("departmentid")); + hqList.add(departmentid); + } + } + + if(hqList !=null && hqList.size() >0) + { + if(hqList.contains(fs_deptid)){ + if(!sval.contains("3")){ +// valList.add("3"); + sval = sval+",3"; + } + } + + if(hqList.contains(hg_deptid)){ + if(!sval.contains("4")){ +// valList.add("4"); + sval = sval+",4"; + } + } + } + + +// //---判断是计划财务部、资金运营部参与审批--- + String jhcwbid = ""; + String zjyybid = ""; + sql = "select id,departmentcode from hrmdepartment where departmentcode in('ZZ001016','ZZ323314')"; //计划财务部、资金运营部 + rs.executeQuery( sql ); + while(rs.next()){ + String code = Util.null2String(rs.getString("departmentcode")); + if(code.equals("ZZ001016")){ + jhcwbid = Util.null2String(rs.getString("id")); + }else{ + zjyybid = Util.null2String(rs.getString("id")); + } + } + + if(list !=null && list.size() >0) + { + boolean bool = false; + if(list.contains(jhcwbid) || list.contains(zjyybid) ){ + bool = true; + } + if(bool) + { +// valList.add("5"); + sval = sval+",5"; + } + } + + if(hqList !=null && hqList.size() >0) + { + if(hqList.contains(jhcwbid) || hqList.contains(zjyybid)){ + if(!sval.contains("5")){ +// valList.add("5"); + sval = sval+",5"; + } + } + } + +// int sfty = 0; +// sql = " select * from (\n" + +// "select remark,row_number() over(partition by nodeid order by logid desc) as xh\n" + +// " from workflow_requestlog\n" + +// "where requestid = " + requestid + +// "and nodeid in(select id from workflow_nodebase \n" + +// "where unnumber in('gsfw_sxcwg','gsfw_hgzj','gsfw_sxfxg'))\n" + +// ") l where l.xh=1 and remark like '不同意%' "; +// +// rs.execute(sql); +// if(rs.next()){ +// sfty++; +// } +// if(sfty == 0){ +// valList.add("6"); +// sval = sval+",6"; +// } + sval = sval+",6"; + } + json.put("result",sval); + return JSONObject.toJSONString(json); + } + + + @GET + @Path("/getJudgeSendZxms") + @Produces({MediaType.TEXT_PLAIN}) + public String getJudgeSendZxms(@Context HttpServletRequest request, @Context HttpServletResponse response) { + + RecordSet rs = new RecordSet(); + BaseBean bb = new BaseBean(); + String requestid = Util.null2String(request.getParameter("requestid")); + int sfty = 0; + String nodenames = "" ; + if(!"".equals(requestid)){ + String sql =" select l.*,p.nodename from (\n" + + " select nodeid,logtype,row_number() over(partition by nodeid order by logid desc) as xh\n" + + " from workflow_requestlog t\n" + + " where requestid =" + requestid+ + " and nodeid in(select id from workflow_nodebase \n" + + " where unnumber in('gsfw_sxcwg','gsfw_hgzj','gsfw_sxfxg'))\n" + + " ) l \n" + + " left join workflow_nodebase p on p.id = l.nodeid\n" + + " where l.xh=1 and logtype = 3 "; + + + rs.execute(sql); + while(rs.next()){ + nodenames += nodenames=="" ? Util.null2String(rs.getString("nodename")) : "、"+Util.null2String(rs.getString("nodename")) ; + sfty++; + } + } + JSONObject jsonObject = new JSONObject(); + jsonObject.put("sfty",sfty); + jsonObject.put("nodenames",nodenames); + + return JSONObject.toJSONString(jsonObject); + } + + + +} diff --git a/src/main/java/com/engine/htsc/gsfw/web/Gsfw_Ifuserjobtool.java b/src/main/java/com/engine/htsc/gsfw/web/Gsfw_Ifuserjobtool.java new file mode 100644 index 0000000..dd66963 --- /dev/null +++ b/src/main/java/com/engine/htsc/gsfw/web/Gsfw_Ifuserjobtool.java @@ -0,0 +1,47 @@ +package com.engine.htsc.gsfw.web; + +import com.alibaba.fastjson.JSONObject; +import com.weaver.general.Util; +import org.apache.tools.ant.taskdefs.Tstamp; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.interfaces.htsc.comInfo.PropBean; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; + +public class Gsfw_Ifuserjobtool { + + @GET + @Path("/GetUserJobflag") + @Produces({MediaType.TEXT_PLAIN}) + public String getNextJudget(@Context HttpServletRequest request, @Context HttpServletResponse response) { + // String requestid = Util.null2String(request.getParameter("requestid")); + JSONObject jsonObject=new JSONObject(); + BaseBean bb = new BaseBean(); + PropBean pb = new PropBean(); + String userid = Util.null2String(request.getParameter("userid")); + jsonObject.put("zbnkllr", ""); + jsonObject.put("zbhggl", ""); + String sql=""; + sql="select count(*) rysum from uf_zbnkllr where dbms_lob.instr(ry,"+userid+")>0"; //内控联络人 + RecordSet rs = new RecordSet(); + rs.execute(sql); + if(rs.next()){ + jsonObject.put("zbnkllr", Util.null2String(rs.getString("rysum"))); + } + sql="select count(*) hgglsum from uf_zbbmhggl where hgry="+userid; //总部合规管理 + + rs.execute(sql); + if(rs.next()){ + jsonObject.put("zbhggl", Util.null2String(rs.getString("hgglsum"))); + } + return jsonObject.toString(); + } + + } diff --git a/src/main/java/com/engine/htsc/hrm/web/HrmGroupAction.java b/src/main/java/com/engine/htsc/hrm/web/HrmGroupAction.java new file mode 100644 index 0000000..5ed2799 --- /dev/null +++ b/src/main/java/com/engine/htsc/hrm/web/HrmGroupAction.java @@ -0,0 +1,66 @@ +package com.engine.htsc.hrm.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.htsc.workflow.util.WorkflowUtil; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.group.HrmGroupTreeComInfo; +import weaver.hrm.orggroup.HrmOrgGroupComInfo; +import weaver.hrm.resource.ResourceComInfo; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * + */ +public class HrmGroupAction { + + + /** + * 人力资源分组成员删除 + * @param request + * @param response + * @return + */ + @POST + @Path("/members/delete") + @Produces({MediaType.TEXT_PLAIN}) + public String deleteGroupMember(@Context HttpServletRequest request, @Context HttpServletResponse response){ + + Map apidatas = new HashMap(); + String groupid = request.getParameter("groupid"); + String userids = request.getParameter("userids"); + try { + String dataSql = " delete from HrmGroupMembers where groupid=? and userid in ("+userids+") "; + RecordSet rs = new RecordSet(); + boolean res = rs.executeUpdate(dataSql,new Object[]{groupid}); + if (res){ + apidatas.put("success", true); + }else{ + apidatas.put("success", false); + } + + } catch (Exception e) { + e.printStackTrace(); + apidatas.put("success", false); + } + return JSONObject.toJSONString(apidatas); + } + + + +} diff --git a/src/main/java/com/engine/htsc/htjjh/cmd/FoundationHallDataListCmd.java b/src/main/java/com/engine/htsc/htjjh/cmd/FoundationHallDataListCmd.java new file mode 100644 index 0000000..8e1aa97 --- /dev/null +++ b/src/main/java/com/engine/htsc/htjjh/cmd/FoundationHallDataListCmd.java @@ -0,0 +1,120 @@ +package com.engine.htsc.htjjh.cmd; + +import com.api.doc.detail.util.DocDownloadCheckUtil; +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.GCONST; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.interfaces.htsc.comInfo.PropBean; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class FoundationHallDataListCmd extends AbstractCommonCommand> { + + public FoundationHallDataListCmd(Map params, User user) + { + this.params = params; + this.user = user; + } + + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + RecordSet rs = new RecordSet(); + String ecologyContentPath = GCONST.getContextPath(); + BaseBean bb = new BaseBean(); + Map apimap = new HashMap(); + List> uflist = new ArrayList>(); + Map ufmap = null; + int userid = this.user.getUID(); + //http://eipsit.htsc.com.cn/htoa/spa/workflow/static4form/index.html?_rdm=1649382905129#/main/workflow/req?iscreate=1&workflowid=24&isagent=0&beagenter=0&f_weaver_belongto_userid=&f_weaver_belongto_usertype=0&menuIds=1,12&_key=269vcq + PropBean pb = new PropBean(); + String jjhcode = Util.null2String(pb.getPropName("JJH_BM_BM")); + + String f_weaver_belongto_userid = "" ; + if(!"".equals(userid+"") && !"".equals(jjhcode)){ + String sql =" select t.id\n" + + " from hrmresource t\n" + + " where workcode in(\n" + + " select workcode from\n" + + " hrmresource h where h.id=\n" +userid+ + " )\n" + + " and t.departmentid in(\n" + + " select d.id\n" + + " from hrmdepartment d\n" + + " connect by prior d.id = d.supdepid\n" + + " start with d.departmentcode='"+jjhcode+"'\n" + + ") "; + rs.executeQuery(sql); + if(rs.next()){ + f_weaver_belongto_userid = Util.null2String(rs.getString("id")); + } + } + + + int count = 0 ; + try{ + String sql1 = " select lcmc,lclj,tbsc from uf_bsdtpz order by nvl(sx,0) "; + bb.writeLog("sql1:"+sql1); + rs.executeQuery(sql1); + while (rs.next()){ + String lcmc = Util.null2String(rs.getString("lcmc")); + String lclj = Util.null2String(rs.getString("lclj")); +// if(!"".equals(lclj) && lclj.indexOf("main/workflow/req")>0){ +// lclj = lclj+"&f_weaver_belongto_userid="+f_weaver_belongto_userid+"&f_weaver_belongto_usertype=0"; +// } + String tbsc = Util.null2String(rs.getString("tbsc")); + ufmap = new HashMap(); + ufmap.put("lcmc",lcmc); + ufmap.put("tb",tbsc); + ufmap.put("lclj",lclj); + ufmap.put("f_weaver_belongto_userid",f_weaver_belongto_userid); + uflist.add(ufmap); + count++ ; + } + + for(int i=0;i dataMap = uflist.get(i); + String tb = Util.null2String(dataMap.get("tb")); + String imagefileid = "" ; + if(!"".equals(tb)){ + String sql = " select k.imagefileid\n" + + " from docdetail t\n" + + " inner join docimagefile l on l.docid = t.id\n" + + " inner join imagefile k on k.imagefileid = l.imagefileid\n" + + " where docid= "+ tb; + rs.executeQuery(sql); + if(rs.next()){ + imagefileid = Util.null2String(rs.getString("imagefileid")); + } + } + String fileid = ""; + try{ + if(!"".equals(imagefileid)){ + fileid = DocDownloadCheckUtil.checkPermission(imagefileid+"",null); + } + }catch (Exception e){ + bb.writeLog("e:"+e); + } + String tburl = ecologyContentPath+"/weaver/weaver.file.FileDownload?fileid="+fileid+""; + dataMap.put("tburl",tburl); + } + }catch (Exception e){ + System.out.println(e); + } + apimap.put("data",uflist); + apimap.put("count",count); + return apimap; + } +} diff --git a/src/main/java/com/engine/htsc/htjjh/service/HtscFoundationExpService.java b/src/main/java/com/engine/htsc/htjjh/service/HtscFoundationExpService.java new file mode 100644 index 0000000..6d983ea --- /dev/null +++ b/src/main/java/com/engine/htsc/htjjh/service/HtscFoundationExpService.java @@ -0,0 +1,16 @@ +package com.engine.htsc.htjjh.service; + + +import weaver.hrm.User; + +import java.util.Map; + +public interface HtscFoundationExpService { + /*** + * + * @param paramMap + * @return + */ + Map gethalldata(Map paramMap, User user); +; +} diff --git a/src/main/java/com/engine/htsc/htjjh/service/impl/HtscFoundationExpServiceImpl.java b/src/main/java/com/engine/htsc/htjjh/service/impl/HtscFoundationExpServiceImpl.java new file mode 100644 index 0000000..96ecd02 --- /dev/null +++ b/src/main/java/com/engine/htsc/htjjh/service/impl/HtscFoundationExpServiceImpl.java @@ -0,0 +1,22 @@ +package com.engine.htsc.htjjh.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.htjjh.cmd.FoundationHallDataListCmd; +import com.engine.htsc.htjjh.service.HtscFoundationExpService; +import weaver.hrm.User; + +import java.util.Map; + + +public class HtscFoundationExpServiceImpl extends Service implements HtscFoundationExpService { + + + @Override + public Map gethalldata(Map params, User user) { + return commandExecutor.execute(new FoundationHallDataListCmd(params,user)); + } + + + + +} diff --git a/src/main/java/com/engine/htsc/htjjh/web/HtscFoundationExpAction.java b/src/main/java/com/engine/htsc/htjjh/web/HtscFoundationExpAction.java new file mode 100644 index 0000000..c0937a5 --- /dev/null +++ b/src/main/java/com/engine/htsc/htjjh/web/HtscFoundationExpAction.java @@ -0,0 +1,61 @@ +package com.engine.htsc.htjjh.web; + +import com.alibaba.fastjson.JSONObject; +import com.api.doc.detail.util.DocDownloadCheckUtil; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.hthy.service.HtscMettingService; +import com.engine.htsc.hthy.service.impl.HhtscMeetingServiceImpl; +import com.engine.htsc.htjjh.service.HtscFoundationExpService; +import com.engine.htsc.htjjh.service.impl.HtscFoundationExpServiceImpl; +import weaver.conn.RecordSet; +import weaver.docs.qc969424.util.QC969424RequestBaseUtil; +import weaver.docs.qc969424.util.QC969424SyncauthRequestUtil; +import weaver.docs.qc969424.util.QC969424Util; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.io.*; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.zip.ZipInputStream; + +public class HtscFoundationExpAction { + + public HtscFoundationExpService getService(HttpServletRequest request, HttpServletResponse response){ + User user = HrmUserVarify.getUser( request, response ); + return (HtscFoundationExpService) ServiceUtil.getService(HtscFoundationExpServiceImpl.class,user); + } + + + @GET + @Path("/gethalldata") + @Produces({MediaType.TEXT_PLAIN}) + public String getHymbData(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = new HashMap(); + try { + User user = HrmUserVarify.getUser( request, response ); + Map param = ParamUtil.request2Map(request); + apidatas.putAll(this.getService(request,response).gethalldata(param,user));; + apidatas.put("api_status", true); + } catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return JSONObject.toJSONString(apidatas); + } +} diff --git a/src/main/java/com/engine/htsc/hyld/web/HyldControlAction.java b/src/main/java/com/engine/htsc/hyld/web/HyldControlAction.java new file mode 100644 index 0000000..e040e2e --- /dev/null +++ b/src/main/java/com/engine/htsc/hyld/web/HyldControlAction.java @@ -0,0 +1,125 @@ +package com.engine.htsc.hyld.web; + + +import com.alibaba.fastjson.JSONObject; +import weaver.conn.RecordSet; +import weaver.general.GCONST; +import weaver.general.Util; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 会议选择类型字段联动 + */ +public class HyldControlAction { + + + @GET + @Path("/getHyChange") + @Produces({MediaType.TEXT_PLAIN}) + public String getHyChange(@Context HttpServletRequest request, @Context HttpServletResponse response) { + + JSONObject jsonObject = new JSONObject(); + Integer hylxNew = Util.getIntValue(request.getParameter("hylx"),1); + Integer hylx = 0; + try{ + //查询上级分类id +// RecordSet sqlFindId = new RecordSet(); +//// sqlFindId.execute("SELECT HYLXSJ FROM uf_hylx WHERE sfxs = 0 and id = "+hylxNew); +//// if (sqlFindId.next()){ +//// hylx = Util.getIntValue(sqlFindId.getString("HYLXSJ"),hylxNew); +//// } + //查询出席人员 + List> listOne = new ArrayList<>(); + RecordSet sqlHyldOne = new RecordSet(); + sqlHyldOne.execute("SELECT cxry FROM UF_HYRY_DT1 WHERE mainid = (SELECT id FROM uf_hyry WHERE hylx = "+hylxNew+")"); + while (sqlHyldOne.next()){ + Integer cxryOne = Util.getIntValue(sqlHyldOne.getString("cxry")); + RecordSet sqlPersonOne = new RecordSet(); + sqlPersonOne.execute("SELECT id,zwx,yx,ryxm FROM uf_hyxx WHERE sfxs = 0 AND zwx = "+cxryOne); + while (sqlPersonOne.next()){ + Map printOne = new HashMap(); + Integer idOne = Util.getIntValue(sqlPersonOne.getString("id")); + Integer zwOne = Util.getIntValue(sqlPersonOne.getString("zwx")); + String yxOne = Util.null2String(sqlPersonOne.getString("yx")); + String ryxmOne = Util.null2String(sqlPersonOne.getString("ryxm")); + printOne.put("id",idOne); + printOne.put("zw",zwOne); + printOne.put("yx",yxOne); + printOne.put("ryxm",ryxmOne); + listOne.add(printOne); + } + } + //查询列席人员 + List> listTwo = new ArrayList<>(); + RecordSet sqlHyldTwo = new RecordSet(); + sqlHyldTwo.execute("SELECT lxry FROM UF_HYRY_DT2 WHERE mainid = (SELECT id FROM uf_hyry WHERE hylx = "+hylxNew+")"); + while (sqlHyldTwo.next()){ + Integer lxryTwo = Util.getIntValue(sqlHyldTwo.getString("lxry")); + RecordSet sqlPersonTwo = new RecordSet(); + sqlPersonTwo.execute("SELECT id,zwx,yx,ryxm FROM uf_hyxx WHERE sfxs = 0 AND zwx = "+lxryTwo); + while (sqlPersonTwo.next()){ + Map printTwo = new HashMap(); + Integer idTwo = Util.getIntValue(sqlPersonTwo.getString("id")); + Integer zwTwo = Util.getIntValue(sqlPersonTwo.getString("zwx")); + String yxTwo = Util.null2String(sqlPersonTwo.getString("yx")); + String ryxmTwo = Util.null2String(sqlPersonTwo.getString("ryxm")); + printTwo.put("id",idTwo); + printTwo.put("zw",zwTwo); + printTwo.put("yx",yxTwo); + printTwo.put("ryxm",ryxmTwo); + listTwo.add(printTwo); + } + } + //主持人员 + List> listThree = new ArrayList<>(); + RecordSet sqlHyldThree = new RecordSet(); + sqlHyldThree.execute("SELECT hyzcr FROM UF_HYRY_DT3 WHERE mainid = (SELECT id FROM uf_hyry WHERE hylx = "+hylxNew+")"); + while (sqlHyldThree.next()){ + Integer hyzcrThree = Util.getIntValue(sqlHyldThree.getString("hyzcr")); + RecordSet sqlPersonThree = new RecordSet(); + sqlPersonThree.execute("SELECT id,zwx,yx,ryxm FROM uf_hyxx WHERE sfxs = 0 AND zwx = "+hyzcrThree); + while (sqlPersonThree.next()){ + Map printThree = new HashMap(); + Integer idThree = Util.getIntValue(sqlPersonThree.getString("id")); + Integer zwThree = Util.getIntValue(sqlPersonThree.getString("zwx")); + String yxThree = Util.null2String(sqlPersonThree.getString("yx")); + String ryxmThree = Util.null2String(sqlPersonThree.getString("ryxm")); + printThree.put("id",idThree); + printThree.put("zw",zwThree); + printThree.put("yx",yxThree); + printThree.put("ryxm",ryxmThree); + listThree.add(printThree); + } + } + + jsonObject.put("code","200"); + jsonObject.put("msg","success"); + jsonObject.put("cxPerson",listOne); + jsonObject.put("lxPerson",listTwo); + jsonObject.put("zcPerson",listThree); + }catch (Exception e) { + e.printStackTrace(); + jsonObject.put("code","500"); + jsonObject.put("msg","fail"); + } + return JSONObject.toJSONString(jsonObject); + } + + + + + + + +} diff --git a/src/main/java/com/engine/htsc/image/service/ImageBase64Service.java b/src/main/java/com/engine/htsc/image/service/ImageBase64Service.java new file mode 100644 index 0000000..9044440 --- /dev/null +++ b/src/main/java/com/engine/htsc/image/service/ImageBase64Service.java @@ -0,0 +1,14 @@ +package com.engine.htsc.image.service; + +import java.util.Map; + +public interface ImageBase64Service { + /*** + * + * @param params + * @return + */ + Map generate2Image(Map params); + + +} diff --git a/src/main/java/com/engine/htsc/image/service/impl/ImageBase64ServiceImpl.java b/src/main/java/com/engine/htsc/image/service/impl/ImageBase64ServiceImpl.java new file mode 100644 index 0000000..e714fdb --- /dev/null +++ b/src/main/java/com/engine/htsc/image/service/impl/ImageBase64ServiceImpl.java @@ -0,0 +1,72 @@ +package com.engine.htsc.image.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.image.service.ImageBase64Service; +import sun.misc.BASE64Decoder; +import weaver.general.BaseBean; +import weaver.general.Util; + +import java.io.*; +import java.util.HashMap; +import java.util.Map; + +public class ImageBase64ServiceImpl extends Service implements ImageBase64Service { + + @Override + public Map generate2Image(Map param) { + BaseBean bb = new BaseBean(); + Map apimap = new HashMap(); + +// String lcbh = Util.null2String(param.get("lcbh")); + String workFlowNum = ""; +// try { +// workFlowNum = new String(lcbh.getBytes("GBK"), System.getProperty("sun.jnu.encoding")); +// } catch (UnsupportedEncodingException e) { +// e.printStackTrace(); +// } + + //String ngr = Util.null2String(param.get("ngr")); + long currentTime = System.currentTimeMillis() ; + String folderName = currentTime + ""; + String fileName = workFlowNum + currentTime + "_new.png"; + String path = "/home/appadmin/png/"+folderName+"/"+fileName; + + String base64Str = Util.null2String(param.get("pdf")); + System.out.println(base64Str); + bb.writeLog(base64Str); + BASE64Decoder decoder = new BASE64Decoder(); + OutputStream out = null; + try { + // 解密 + byte[] b = decoder.decodeBuffer(base64Str); + // 处理数据 + for (int i = 0; i < b.length; ++i) { + if (b[i] < 0) { + b[i] += 256; + } + } + File tempFile = new File(path); + if (!tempFile.getParentFile().exists()) { + tempFile.getParentFile().mkdirs(); + } + out = new FileOutputStream(tempFile); + out.write(b); + out.flush(); + out.close(); + } catch (Exception e) { + apimap.put("code","-100"); + }finally { + if(out !=null){ + try { + out.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + apimap.put("code","100"); + return apimap; + } + + +} diff --git a/src/main/java/com/engine/htsc/image/web/ImageBase64Action.java b/src/main/java/com/engine/htsc/image/web/ImageBase64Action.java new file mode 100644 index 0000000..094cd36 --- /dev/null +++ b/src/main/java/com/engine/htsc/image/web/ImageBase64Action.java @@ -0,0 +1,64 @@ +package com.engine.htsc.image.web; + + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.image.service.ImageBase64Service; +import com.engine.htsc.image.service.impl.ImageBase64ServiceImpl; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +public class ImageBase64Action { + + + public ImageBase64Service getService(HttpServletRequest request, HttpServletResponse response){ + return (ImageBase64Service) ServiceUtil.getService(ImageBase64ServiceImpl.class); + } + + @POST + @Path("/getbase64toimage") + @Produces({MediaType.TEXT_PLAIN}) + public String getBase64ToImage(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = new HashMap(); + try { + Map param = ParamUtil.request2Map(request); + + apidatas = getService(request,response).generate2Image(param); + + apidatas.put("api_status", true); + apidatas.put("api_errormsg", ""); + } catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return JSONObject.toJSONString(apidatas); + } + + @GET + @Path("/gettest") + @Produces({MediaType.TEXT_PLAIN}) + public String getTest(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = new HashMap(); + try { + apidatas.put("api_status", true); + apidatas.put("api_errormsg", ""); + } catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return JSONObject.toJSONString(apidatas); + } + +} diff --git a/src/main/java/com/engine/htsc/init/payment/impl/PDFProcessorInitServcieImpl.java b/src/main/java/com/engine/htsc/init/payment/impl/PDFProcessorInitServcieImpl.java new file mode 100644 index 0000000..4b34784 --- /dev/null +++ b/src/main/java/com/engine/htsc/init/payment/impl/PDFProcessorInitServcieImpl.java @@ -0,0 +1,97 @@ +package com.engine.htsc.init.payment.impl; + +import com.engine.htsc.payment.util.IpUtils; +import com.weaverboot.frame.ioc.anno.classAnno.WeaSysInitComponent; +import com.weaverboot.frame.ioc.anno.methodAnno.WeaSysInit; +import weaver.general.BaseBean; +import weaver.general.GCONST; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.interfaces.htsc.payment.common.pdfprocess.PDFBizProcessorImpl; +import weaver.interfaces.htsc.payment.common.pdfprocess.PdfConsumer; +import weaver.interfaces.htsc.payment.common.pdfprocess.PdfProducer; + +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * Created on 2022/4/20. + * + * @author K1810012 + */ +@WeaSysInitComponent("pdf同步生产者消费者线程") +public class PDFProcessorInitServcieImpl { + private static BaseBean log = new BaseBean(); + + @WeaSysInit(order = 1, description = "启动生产消费线程") + public void init() { + + log.writeLog("===>>> pdf sync producer thread start...."); + log.writeLog("===>>> pdf sync consumer thread start...."); + + try { + + Thread subThread = new Thread(new SubStart()); + subThread.start(); + log.writeLog("===>>> PDFProcessorInit 主线程结束"); + } catch (Exception e) { + log.writeLog("===>>> pdf sync thread error:"); + log.writeLog("===>>> pdf sync thread error:" + e); + } + + } + + private static boolean isMainNode(){ + String hostIP = new PropBean().getPropName("HostIP"); + log.writeLog("===>>> 配置的IP是:"+hostIP); + String nowIp = IpUtils.getHostIp(); + log.writeLog("===>>> 当前环境IP是:"+nowIp); + return hostIP.equals(nowIp); + } + /** + * 子线程启动,join到方法上 + */ + static class SubStart implements Runnable { + @Override + public void run() { + BaseBean log = new BaseBean(); + try { + //五分钟休眠放在子线程中,防止影响正常启动时间 + //等待的目的是为了ecology充分加载完成,weaver.conn.ConnectionPool.createPools 初始化成功 + log.writeLog("PDFProcessorInit start to wait 5 MINUTES"); + TimeUnit.MINUTES.sleep(5); + log.writeLog("PDFProcessorInit wait 5 MINUTES done"); + if (!isMainNode()){ + return; + } + log.writeLog("主节点执行 PDF 同步模型"); + PDFBizProcessorImpl pdfBizProcessor = new PDFBizProcessorImpl(); + LinkedBlockingDeque runnables = new LinkedBlockingDeque<>(10); + ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor( + 10, 20, 5L, TimeUnit.SECONDS, + new LinkedBlockingQueue<>(10), + new ThreadPoolExecutor.CallerRunsPolicy()); + //2:1 + for (int i = 0; i < 5; i++) { + try { + runnables.put(new PdfConsumer(pdfBizProcessor, runnables)); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + PdfProducer producer = new PdfProducer(pdfBizProcessor, runnables, threadPoolExecutor); + new Thread(producer).start(); + + log.writeLog("===>>> pdf sync start done..."); + log.writeLog("===>>> PDFProcessorInit 子线程结束"); + } catch (Exception e) { + log.writeLog("===>>>pdf sync thread start error"); + log.writeLog("===>>>error: " + e); + } + + } + } + + +} \ No newline at end of file diff --git a/src/main/java/com/engine/htsc/itTestOnline/service/ItTestOnlineService.java b/src/main/java/com/engine/htsc/itTestOnline/service/ItTestOnlineService.java new file mode 100644 index 0000000..e34ead1 --- /dev/null +++ b/src/main/java/com/engine/htsc/itTestOnline/service/ItTestOnlineService.java @@ -0,0 +1,8 @@ +package com.engine.htsc.itTestOnline.service; + +import java.util.Map; + +public interface ItTestOnlineService { + + Map getDeptDirectors(String loginId); +} diff --git a/src/main/java/com/engine/htsc/itTestOnline/service/impl/ItTestOnlineServiceImpl.java b/src/main/java/com/engine/htsc/itTestOnline/service/impl/ItTestOnlineServiceImpl.java new file mode 100644 index 0000000..30743de --- /dev/null +++ b/src/main/java/com/engine/htsc/itTestOnline/service/impl/ItTestOnlineServiceImpl.java @@ -0,0 +1,49 @@ +package com.engine.htsc.itTestOnline.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.itTestOnline.service.ItTestOnlineService; +import weaver.conn.RecordSet; +import weaver.interfaces.htsc.GlobatTools.JAVATools; + +import java.util.HashMap; +import java.util.Map; + +/** + * @Title: ecology-9 + * @Company: 泛微软件 + * @author: K1810039 + * @version: 1.0 + * @CreateDate: 2022-06-13 + * @Description: IT测试和上线(管理平台)根据工号,查询部门id,部门领导 + * @ModifyLog: + **/ +public class ItTestOnlineServiceImpl extends Service implements ItTestOnlineService { + @Override + public Map getDeptDirectors(String loginId) { + Map map = new HashMap<>(); + JAVATools.writelog("----getDeptDirectors----deptCode:"+loginId); + String deptDirectors = ""; + String deptCode = ""; + String deptId = ""; + RecordSet rs = new RecordSet(); + String sql = "select t.DEPTDIRECTORS,m.DEPARTMENTCODE,d.DEPARTMENTID from hrmdepartmentdefined t\n" + + " join HRMRESOURCE d on t.DEPTID = d.DEPARTMENTID\n" + + " join HRMDEPARTMENT m on m.ID = t.DEPTID\n" + + "where d.LOGINID = '"+loginId+"' "; + JAVATools.writelog(sql); + rs.execute(sql); + if (rs.next()){ + deptDirectors = rs.getString("DEPTDIRECTORS"); + deptCode = rs.getString("DEPARTMENTCODE"); + deptId = rs.getString("DEPARTMENTID"); + } + JAVATools.writelog("deptDirectors---->"+deptDirectors+"deptCode---->"+deptCode+"deptId---->"+deptId); + if(deptDirectors.indexOf(",") > -1){ + deptDirectors = ""; + } + map.put("deptDirectors",deptDirectors); + map.put("deptCode",deptCode); + map.put("deptId",deptId); + return map; + } +} diff --git a/src/main/java/com/engine/htsc/itTestOnline/web/ItTestOnlineAction.java b/src/main/java/com/engine/htsc/itTestOnline/web/ItTestOnlineAction.java new file mode 100644 index 0000000..0f95035 --- /dev/null +++ b/src/main/java/com/engine/htsc/itTestOnline/web/ItTestOnlineAction.java @@ -0,0 +1,55 @@ +package com.engine.htsc.itTestOnline.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.itTestOnline.service.ItTestOnlineService; +import com.engine.htsc.itTestOnline.service.impl.ItTestOnlineServiceImpl; +import com.engine.htsc.ityssq.service.ItyssqService; +import com.engine.htsc.ityssq.service.impl.ItyssqServiceImpl; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; +import weaver.interfaces.htsc.GlobatTools.JAVATools; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +/** + * @Title: ecology-9 + * @Company: 泛微软件 + * @author: K1810039 + * @version: 1.0 + * @CreateDate: 2022-06-13 + * @Description: IT测试和上线(管理平台)根据工号,查询部门id,部门领导 + * @ModifyLog: + **/ +public class ItTestOnlineAction { + public ItTestOnlineService getService(){ + return ServiceUtil.getService(ItTestOnlineServiceImpl.class); + } + + @POST + @Path("/getDeptDirectors") + @Produces({MediaType.TEXT_PLAIN}) + public String getDeptDirectors(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = new HashMap<>(); + try { + String loginId = request.getParameter("loginId"); + apidatas = getService().getDeptDirectors(loginId); + JAVATools.writelog("result apidatas---->"+apidatas); + apidatas.put("api_status", "true"); + } catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", "false"); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return JSONObject.toJSONString(apidatas); + } +} diff --git a/src/main/java/com/engine/htsc/ityssq/cmd/ItyssqFreeNodeCmd.java b/src/main/java/com/engine/htsc/ityssq/cmd/ItyssqFreeNodeCmd.java new file mode 100644 index 0000000..217ba0e --- /dev/null +++ b/src/main/java/com/engine/htsc/ityssq/cmd/ItyssqFreeNodeCmd.java @@ -0,0 +1,250 @@ +package com.engine.htsc.ityssq.cmd; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.common.util.ServiceUtil; +import com.engine.core.interceptor.CommandContext; +import com.engine.workflow.service.RequestFreeFlowService; +import com.engine.workflow.service.impl.RequestFreeFlowServiceImpl; +import weaver.conn.RecordSet; +import weaver.formmode.setup.ModeRightInfo; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.hrm.company.DepartmentComInfo; +import weaver.interfaces.htsc.comInfo.PropBean; + +import java.util.HashMap; +import java.util.Map; + +public class ItyssqFreeNodeCmd extends AbstractCommonCommand> { + + public ItyssqFreeNodeCmd(User user, Map params) { + this.params = params; + this.user = user; + } + + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + DepartmentComInfo departmentComInfo = null; + + RecordSet rs = new RecordSet(); + BaseBean bb = new BaseBean(); + bb.writeLog( "in=================ItyssqFreeNodeCmd" ); + Map apimap = new HashMap(); + try{ + PropBean pb = new PropBean(); + departmentComInfo = new DepartmentComInfo(); + int requestid = Util.getIntValue(Util.null2String(params.get("requestid"))); + int workflowid = Util.getIntValue(Util.null2String(params.get("workflowid"))); + int nodeid = Util.getIntValue(Util.null2String(params.get("nodeid"))); + + bb.writeLog( "in=================nodeid:" + nodeid ); + int xybzvalue = Util.getIntValue(Util.null2String(params.get("xybzvalue"))); + String jdfl = ""; + if (xybzvalue == 0) { + jdfl = "6"; + } else if (xybzvalue == 1) { + jdfl = "11"; + } + + String ysxgbm_mc = pb.getPropName("ysxgbm_mc"); + String ysxgbm_fzr = pb.getPropName("ysxgbm_fzr"); + String jsonArr = Util.null2String(Util.null2String(params.get("jsonArr"))); + bb.writeLog("jsonArr:"+jsonArr); + JSONArray jsonArray = JSONArray.parseArray( jsonArr ); + JSONObject freeNode = new JSONObject(); + JSONArray nodeData = new JSONArray(); + String bmfzrs = ""; + String zdrys = ""; + for (int i = 0; i < jsonArray.size(); i++) { + String hqbmvalue = Util.null2String( jsonArray.getJSONObject( i ).get( "hqbmvalue" ) ); + String zdry = Util.null2String( jsonArray.getJSONObject( i ).get( "zdry" ) ); + String bmfzr = Util.null2String( jsonArray.getJSONObject( i ).get( "bmfzr" ) ); + bb.writeLog("zdry:"+zdry); + bb.writeLog("bmfzr:"+bmfzr); + String sfhq = Util.null2String( jsonArray.getJSONObject( i ).get( "sfhq" ) ); + if ("1".equals( sfhq )) { + JSONArray nodeArray = new JSONArray(); + if (!"".equals( zdry ) && !"".equals( bmfzr )) { + JSONObject nodeDataJson1 = new JSONObject(); + if(xybzvalue==0){ + nodeDataJson1.put( "nodename", "指定人员" ); + nodeDataJson1.put( "operators", zdry ); + nodeDataJson1.put( "signType", 1 ); //会签方式,(0:非会签、1:会签、2:依次逐个签) //20201226 + } + if(xybzvalue==1){ + nodeDataJson1.put( "nodename", "跨公司会签" ); + nodeDataJson1.put( "operators", zdry ); + nodeDataJson1.put( "signType", Util.getIntValue( sfhq ) ); //会签方式,(0:非会签、1:会签、2:依次逐个签) + } + nodeArray.add( nodeDataJson1 ); + JSONObject nodeDataJson2 = new JSONObject(); + if(xybzvalue == 0){ + nodeDataJson2.put( "nodename", "会签部门负责人" ); + String deptcode = departmentComInfo.getDepartmentCode(hqbmvalue); + bb.writeLog("deptcode:"+deptcode); + // ZZ001014 + if("ZZ001014".equals(deptcode)){ + nodeDataJson2.put( "signType", "0" ); //20201226 + }else{ + nodeDataJson2.put( "signType", "1" ); //20201226 + } + } + if(xybzvalue==1){ + nodeDataJson2.put( "nodename", "跨公司会签" ); + nodeDataJson2.put( "signType", Util.getIntValue( sfhq ) ); + } + nodeDataJson2.put( "operators", bmfzr ); + nodeArray.add( nodeDataJson2 ); + + } else if (!"".equals( zdry ) && "".equals( bmfzr )) { + JSONObject nodeDataJson1 = new JSONObject(); + if(xybzvalue==0){ + nodeDataJson1.put( "nodename", "指定人员" ); + nodeDataJson1.put( "operators", zdry ); + nodeDataJson1.put( "signType", 1 ); + } + if(xybzvalue==1){ + nodeDataJson1.put( "nodename", "跨公司会签" ); + nodeDataJson1.put( "operators", zdry ); + nodeDataJson1.put( "signType", Util.getIntValue( sfhq ) ); + } + nodeArray.add( nodeDataJson1 ); + } else if ("".equals( zdry ) && !"".equals( bmfzr )) { + JSONObject nodeDataJson2 = new JSONObject(); + if(xybzvalue==0){ + nodeDataJson2.put( "nodename", "会签部门负责人" ); + String deptcode = departmentComInfo.getDepartmentCode(hqbmvalue); + bb.writeLog("deptcode:"+deptcode); + // ZZ001014 + if("ZZ001014".equals(deptcode)){ + nodeDataJson2.put( "signType", "0" ); //20201226 + }else{ + nodeDataJson2.put( "signType", "1" ); //20201226 + } + } + + if(xybzvalue==1){ + nodeDataJson2.put( "nodename", "跨公司会签" ); + nodeDataJson2.put( "signType", Util.getIntValue( sfhq ) ); + } + nodeDataJson2.put( "operators", bmfzr ); + nodeArray.add( nodeDataJson2 ); + } + nodeData.add( nodeArray ); + freeNode.put( "nodeData", nodeData ); + freeNode.put( "mergeType", 1 ); //合并方式,(1:按比例方式通过,2:按分支数通过) + freeNode.put( "mergeValue", 100 ); + bmfzrs += bmfzrs == "" ? "'" + bmfzr + "'" + "" : "," + "'" + bmfzr + "'"; + zdrys += zdrys == "" ? "'" + zdry + "'" + "" : "," + "'" + zdry + "'"; + } + } + + int userid = user.getUID(); + // 自由节点参数 + Map params = new HashMap(); + params.put( "requestid", requestid ); + params.put( "nodeid", nodeid ); + params.put( "workflowid", workflowid ); + params.put( "nodetype", 2 ); + params.put( "nextNodeEditPurview", 2 ); + params.put( "allowModify", 1 ); + params.put( "isFlowToNext", 0 ); + params.put( "isAddToParentGroup", 1 ); + params.put( "isParallel", 0 ); + params.put( "freeNodeData", freeNode ); + if (freeNode.size() > 0) { + bb.writeLog( "=================params:" + params.toString() ); + + //生产自由节点 + RequestFreeFlowService freeFlowService = ServiceUtil.getService( RequestFreeFlowServiceImpl.class, user ); + freeFlowService.generateFreeNode( params ); + int formmodeid = 0 ; + rs.executeQuery( "select m.id from modeinfo m left join WORKFLOW_BILL b on m.formid = b.id where b.tablename = 'uf_qzyjhqb'" ); + if(rs.next()){ + formmodeid = Util.getIntValue( rs.getString( "id" ) ); + } + + + String freenode = ""; + rs.executeQuery( "select id from workflow_freenode where requestid ='" + requestid + "'" ); + while (rs.next()) { + String id = Util.null2String(rs.getString("id")); + freenode += freenode==""? id : ","+id ;//自由节点 + } + + String uf_freenode = ""; + rs.executeQuery( " select freenode as id from uf_qzyjhqb where lcid ='" + requestid + "'" ); + while(rs.next()) { + String id = Util.null2String(rs.getString("id")); + uf_freenode += uf_freenode==""? id : ","+id ;//自由节点 + } + + String bmfzrNode= ""; + String zdryNode= ""; + if(!"".equals(bmfzrs)){ + rs.executeQuery( " select id from workflow_freenode where requestid ='" + requestid + "' and to_char(operatorids) in ("+bmfzrs+")" ); + while(rs.next()) { + String id = Util.null2String(rs.getString("id")); + bmfzrNode += bmfzrNode ==""? id : ","+id ;//自由节点 + } + } + if(!"".equals(zdrys)) + { + rs.executeQuery( " select id from workflow_freenode where requestid ='" + requestid + "' and to_char(operatorids) in ("+zdrys+")" ); + while (rs.next()) { + String id = Util.null2String(rs.getString("id")); + zdryNode += zdryNode ==""? id : ","+id ;//自由节点 + } + } + bb.writeLog( "=================freenode:" + freenode + ",freenode1:" + uf_freenode ); + String str = equestStr( freenode, uf_freenode ); + boolean flag = rs.executeUpdate( "insert into uf_qzyjhqb(lcid,jdfl,freenode,formmodeid,bmfzr,zdry) values('" + requestid + "','" + jdfl + "','" + str + "','" + formmodeid + "','"+bmfzrNode+"','"+zdryNode+"')" ); + if(flag){ + rs.executeQuery( "select id from uf_qzyjhqb where requestid='" + requestid + "'" ); + while (rs.next()) + { + int id = Util.getIntValue(rs.getString( "id" ) ); + ModeRightInfo moderight = new ModeRightInfo(); + moderight.editModeDataShare( userid, formmodeid, id ); + } + apimap.put("flag",true); + } + }else { + apimap.put("flag",false); + } + + }catch (Exception e){ + + } + return apimap; + } + + /*** + * + * @param str1 + * @param str2 + * @return + */ + public static String equestStr(String str1, String str2) + { + StringBuilder sb = new StringBuilder(); + String[] strings = str1.split( "," ); + for (String s : strings) { + if (!str2.contains( s )) { + sb.append( s + "," ); + } + } + String str = sb.substring( 0, sb.length() - 1 ).toString(); + return str; + } + +} diff --git a/src/main/java/com/engine/htsc/ityssq/cmd/ItyssqNsryInfoCmd.java b/src/main/java/com/engine/htsc/ityssq/cmd/ItyssqNsryInfoCmd.java new file mode 100644 index 0000000..ccf3f2b --- /dev/null +++ b/src/main/java/com/engine/htsc/ityssq/cmd/ItyssqNsryInfoCmd.java @@ -0,0 +1,108 @@ +package com.engine.htsc.ityssq.cmd; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.GCONST; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.interfaces.htsc.comInfo.PropBean; + +import java.util.*; + +public class ItyssqNsryInfoCmd extends AbstractCommonCommand> { + + public ItyssqNsryInfoCmd(Map params) { + this.params = params; + } + + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + + RecordSet rs = new RecordSet(); + System.out.println( "in=================ItlxlcLdspInfoCmd" ); + Map apimap = new HashMap(); + + PropBean pb = new PropBean(); + List> nsrylist = new ArrayList>(); + Map nsrymap = null; + String nsryvalues = "" ; + + String nsry = pb.getPropName("ityssq_ngry"); + + String xmlx = Util.null2String(params.get("xmlx")); + if("0".equals(xmlx) || "2".equals(xmlx)){ + if(!"".equals(nsry)) + { + nsry = "'"+nsry.replace(",","','")+"'"; + String sql = " select id,lastname from hrmresource where workcode in("+nsry+") and belongto is null " ; + rs.execute(sql); + while (rs.next()){ + String id = Util.null2String(rs.getString("id")); + String lastname = Util.null2String(rs.getString("lastname")); + nsryvalues += nsryvalues==""? id : ","+id ; + nsrymap = new HashMap(); + nsrymap.put("id",id); + nsrymap.put("name",lastname); + nsrylist.add(nsrymap); + } + } + } + + + List> bmlslist = new ArrayList>(); + Map bmldmap = null; + String bmldvalues = "" ; + + String bmld_wl = pb.getPropName("ityssq_bmld_wl"); + String bmld_cd = pb.getPropName("ityssq_bmld_cd"); + String bmlds = "" ; + if("0".equals(xmlx)){ + bmlds += bmlds == "" ? "'"+bmld_wl+"'" : ",'"+bmld_wl+"'" ; + }else if("1".equals(xmlx)){ + bmlds += bmlds == "" ? "'"+bmld_cd+"'" : ",'"+bmld_cd+"'" ; + }else if("2".equals(xmlx)){ + bmlds += bmlds == "" ? "'"+bmld_wl+"'" : ",'"+bmld_wl+"'" ; + bmlds += bmlds == "" ? "'"+bmld_cd+"'" : ",'"+bmld_cd+"'" ; + } + + if(!"".equals(bmlds)) + { + String sql = " select id,lastname from hrmresource where workcode in("+bmlds+") and belongto is null " ; + rs.execute(sql); + while (rs.next()){ + String id = Util.null2String(rs.getString("id")); + String lastname = Util.null2String(rs.getString("lastname")); + bmldvalues += bmldvalues==""? id : ","+id ; + bmldmap = new HashMap(); + bmldmap.put("id",id); + bmldmap.put("name",lastname); + bmlslist.add(bmldmap); + } + } + + apimap.put("nsryObject",nsrylist); + apimap.put("nsry",nsryvalues); + apimap.put("bmlsObject",bmlslist); + apimap.put("bmls",bmldvalues); + return apimap; + } + + public static void main(String[] args) { + GCONST.setRootPath("WEB-INF/"); + GCONST.setServerName("ecology"); + Map params=new HashMap<>(); + params.put("xmlx","0"); + ItyssqNsryInfoCmd ItlxlcLdspInfoCmd = new ItyssqNsryInfoCmd(params); + CommandContext ceshi= new CommandContext(null,null); + ItlxlcLdspInfoCmd.execute(ceshi); + } + +} diff --git a/src/main/java/com/engine/htsc/ityssq/service/ItAcceptanceApplyService.java b/src/main/java/com/engine/htsc/ityssq/service/ItAcceptanceApplyService.java new file mode 100644 index 0000000..b739269 --- /dev/null +++ b/src/main/java/com/engine/htsc/ityssq/service/ItAcceptanceApplyService.java @@ -0,0 +1,8 @@ +package com.engine.htsc.ityssq.service; + +import java.util.Map; + +public interface ItAcceptanceApplyService { + + Map detailSummary(Map request2Map); +} diff --git a/src/main/java/com/engine/htsc/ityssq/service/ItyssqService.java b/src/main/java/com/engine/htsc/ityssq/service/ItyssqService.java new file mode 100644 index 0000000..e2bf2aa --- /dev/null +++ b/src/main/java/com/engine/htsc/ityssq/service/ItyssqService.java @@ -0,0 +1,18 @@ +package com.engine.htsc.ityssq.service; + +import weaver.hrm.User; + +import java.util.Map; + +public interface ItyssqService { + + /** + * + * @param params + * @return + */ + Map createFreeNode(User user, Map params); + + Map getNsryInfo( Map params); + +} diff --git a/src/main/java/com/engine/htsc/ityssq/service/impl/ItAcceptanceApplyServiceImpl.java b/src/main/java/com/engine/htsc/ityssq/service/impl/ItAcceptanceApplyServiceImpl.java new file mode 100644 index 0000000..9053143 --- /dev/null +++ b/src/main/java/com/engine/htsc/ityssq/service/impl/ItAcceptanceApplyServiceImpl.java @@ -0,0 +1,42 @@ +package com.engine.htsc.ityssq.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.ityssq.service.ItAcceptanceApplyService; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.resource.ResourceComInfo; + +import java.util.HashMap; +import java.util.Map; + +public class ItAcceptanceApplyServiceImpl extends Service implements ItAcceptanceApplyService { + @Override + public Map detailSummary(Map params) { + Map datas = new HashMap<>(); + try{ + RecordSet rs = new RecordSet(); + ResourceComInfo resourceComInfo = new ResourceComInfo(); + String tablename = "formtable_main_" + Util.null2String(params.get("formid")); + String detailname = tablename +"_dt4"; + String requestid = Util.null2String(params.get("requestid")); + String xtsxsfyxzc = Util.null2String(params.get("xtsxsfyxzc")); + String tjclsfqb = Util.null2String(params.get("tjclsfqb")); + String xtmzysyq = Util.null2String(params.get("xtmzysyq")); + String bcyj = Util.null2String(params.get("bcyj")); + String clr = Util.null2String(params.get("clr")); + String hqbm = resourceComInfo.getDepartmentID(clr); + String id = ""; + rs.executeQuery("select id from "+tablename+" where requestid = ?",requestid); + if (rs.next()){ + id = Util.null2String(rs.getString("id")); + } + String sql = "insert into "+detailname+"(mainid,hqbm,clr,xtsxsfyxzc,tjclsfqb,xtmzysyq,bcyj) " + + " values(?,?,?,?,?,?,?)"; + rs.executeUpdate(sql,new Object[]{id,hqbm,clr,xtsxsfyxzc,tjclsfqb,xtmzysyq,bcyj}); + + }catch (Exception e){ + e.printStackTrace(); + } + return datas; + } +} diff --git a/src/main/java/com/engine/htsc/ityssq/service/impl/ItyssqServiceImpl.java b/src/main/java/com/engine/htsc/ityssq/service/impl/ItyssqServiceImpl.java new file mode 100644 index 0000000..b62f710 --- /dev/null +++ b/src/main/java/com/engine/htsc/ityssq/service/impl/ItyssqServiceImpl.java @@ -0,0 +1,24 @@ +package com.engine.htsc.ityssq.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.ityssq.cmd.ItyssqFreeNodeCmd; +import com.engine.htsc.ityssq.cmd.ItyssqNsryInfoCmd; +import com.engine.htsc.ityssq.service.ItyssqService; +import weaver.hrm.User; + +import java.util.Map; + +public class ItyssqServiceImpl extends Service implements ItyssqService { + + @Override + public Map createFreeNode(User user, Map params) { + return commandExecutor.execute(new ItyssqFreeNodeCmd(user,params)); + } + + @Override + public Map getNsryInfo(Map params) { + return commandExecutor.execute(new ItyssqNsryInfoCmd(params)); + } + + +} diff --git a/src/main/java/com/engine/htsc/ityssq/web/ItAcceptanceApplyAction.java b/src/main/java/com/engine/htsc/ityssq/web/ItAcceptanceApplyAction.java new file mode 100644 index 0000000..cedf08b --- /dev/null +++ b/src/main/java/com/engine/htsc/ityssq/web/ItAcceptanceApplyAction.java @@ -0,0 +1,50 @@ +package com.engine.htsc.ityssq.web; + + +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.ityssq.service.ItAcceptanceApplyService; +import com.engine.htsc.ityssq.service.impl.ItAcceptanceApplyServiceImpl; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +public class ItAcceptanceApplyAction { + + private ItAcceptanceApplyService getService(User user){ + return ServiceUtil.getService(ItAcceptanceApplyServiceImpl.class,user); + } + + /** + * It验收流程明细表4汇总 + * @param request + * @param response + * @return + */ + @POST + @Path("/summary") + @Produces({MediaType.APPLICATION_JSON}) + public Map detailSummary(@Context HttpServletRequest request, + @Context HttpServletResponse response){ + Map apidatas = new HashMap<>(); + try { + User user = HrmUserVarify.getUser(request, response); + apidatas = this.getService(user).detailSummary(ParamUtil.request2Map(request)); + apidatas.put("api_status", 1); + }catch (Exception e){ + e.printStackTrace(); + apidatas.put("api_status",-1); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return apidatas; + } +} diff --git a/src/main/java/com/engine/htsc/ityssq/web/ItxqsqAction.java b/src/main/java/com/engine/htsc/ityssq/web/ItxqsqAction.java new file mode 100644 index 0000000..7e08747 --- /dev/null +++ b/src/main/java/com/engine/htsc/ityssq/web/ItxqsqAction.java @@ -0,0 +1,98 @@ +package com.engine.htsc.ityssq.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.ityssq.service.ItyssqService; +import com.engine.htsc.ityssq.service.impl.ItyssqServiceImpl; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; +import weaver.interfaces.htsc.comInfo.PropBean; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.*; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +public class ItxqsqAction { + + public ItyssqService getService(HttpServletRequest request, HttpServletResponse response){ + User user = HrmUserVarify.getUser( request, response ); + return (ItyssqService) ServiceUtil.getService(ItyssqServiceImpl.class,user); + } + + @POST + @Path("/createFreeNode") + @Produces({MediaType.TEXT_PLAIN}) + public String createFreeNode(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = new HashMap(); + try { + User user = HrmUserVarify.getUser( request, response ); + Map param = ParamUtil.request2Map(request); + apidatas = getService(request,response).createFreeNode(user,param); + apidatas.put("api_status", true); + } catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return JSONObject.toJSONString(apidatas); + } + + + @GET + @Path("/getNsBmsdInfo") + @Produces({MediaType.TEXT_PLAIN}) + public String getNsBmsdInfo(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = new HashMap(); + try { + User user = HrmUserVarify.getUser( request, response ); + Map param = ParamUtil.request2Map(request); + apidatas = getService(request,response).getNsryInfo(param); + apidatas.put("api_status", true); + } catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return JSONObject.toJSONString(apidatas); + } + + @GET + @Path("/getszbm") + @Produces({MediaType.TEXT_PLAIN}) + public String getszbm(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = new HashMap(); + try { + RecordSet rs = new RecordSet(); + Map param = ParamUtil.request2Map(request); + String szbm = Util.null2String(param.get("szbm")); + PropBean pb = new PropBean(); + String xxjsb = pb.getPropName("ityssq_xxjsb"); + String isxxjsb = "0"; + String departmentcode = "" ; + if(!"".equals(szbm) && !"".equals(xxjsb)){ + String sql = " select departmentcode from hrmdepartment where id="+xxjsb ; + rs.execute(sql); + if(rs.next()){ + departmentcode = Util.null2String(rs.getString("departmentcode")); + } + } + if(!"".equals(departmentcode) && departmentcode.equals(xxjsb)){ + isxxjsb = "1"; + } + apidatas.put("isxxjsb", isxxjsb); + apidatas.put("api_status", true); + } catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return JSONObject.toJSONString(apidatas); + } +} diff --git a/src/main/java/com/engine/htsc/jgzxzysx/cmd/JgzxzdsywknumberCmd.java b/src/main/java/com/engine/htsc/jgzxzysx/cmd/JgzxzdsywknumberCmd.java new file mode 100644 index 0000000..fd41e6e --- /dev/null +++ b/src/main/java/com/engine/htsc/jgzxzysx/cmd/JgzxzdsywknumberCmd.java @@ -0,0 +1,180 @@ +package com.engine.htsc.jgzxzysx.cmd; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import com.engine.htsc.payment.util.PayUtil; +import com.engine.integration.util.StringUtils; +import weaver.conn.RecordSet; +import weaver.formmode.setup.ModeRightInfo; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.comInfo.PropBean; + +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import java.util.stream.IntStream; +import java.util.stream.LongStream; + +/** + * @author K1810015 + * @version 1.0.0 + * @ClassName JgzxzdsywknumberCmd.java + * @createTime 2022年05月19日 16:14:00 + */ +public class JgzxzdsywknumberCmd extends AbstractCommonCommand> { + + public JgzxzdsywknumberCmd(User user, Map params) { + this.params = params; + this.user = user; + } + private DateTime newdate=DateTime.now(); + + private String tablename="uf_jgzxlcbh"; + + private RecordSet rs=new RecordSet(); + @Override + public BizLogContext getLogContext() { + return null; + } + + + @Override + public Map execute(CommandContext commandContext) { + PropBean pb=new PropBean(); + Map returnmap=new HashMap<>(); + String datename=newdate.toString("yyyyMMdd"); + String deptid= Util.null2String(this.params.get("deptid")); + String name=Util.null2String(pb.getPropName("jgzxzdsy.workflownumname")); + //Util.null2String(user.getUserDepartment()) + + String deptname = getdeptname(deptid); + String unnumber= Util.null2String(this.params.get("unnumber")); + + String numberno=name+deptname+datename; + String value= getrangevalue(numberno); + returnmap.put("data",value); + return returnmap; + } + + + private int rollnum=0; + public String getrangevalue(String unnumber){ + int randnum=(int)((Math.random()*9+1)*100000); + String value=unnumber+randnum; + int maxnum=100; + +// while(!getsql(value) && rollnum<=maxnum){ +// rollnum++; +// getrangevalue(unnumber); +// }; + //递归有点吃线程资源 + for (int i=0;i map){ + String modeuuid = UUID.randomUUID().toString(); + int formModeId = PayUtil.getFormModeIdByCubeName("uf_fklcbh"); + map.put("FORMMODEID",Util.null2String(formModeId)); + map.put("MODEDATACREATER",Util.null2String(this.user.getUID())); + map.put("MODEDATACREATERTYPE",Util.null2String(this.user.getType())); + map.put("MODEDATACREATEDATE", newdate.toString("yyyy-MM-dd")); + map.put("MODEDATACREATETIME",newdate.toString("HH:mm:ss")); + map.put("MODEUUID",modeuuid); + JAVATools.Excetesql(map,tablename); + //权限重构 + int dataId = PayUtil.getDataIdByUUID(modeuuid); + ModeRightInfo modeRightInfo = new ModeRightInfo(); + modeRightInfo.editModeDataShare(1, formModeId, dataId); + } + public String getdeptname(String id){ + if(StringUtils.isBlank(id)){ + return ""; + } + String sql="select docnumabbreviation from hrmdepartmentdefined where 1=1 "; + Map wheremap=new HashMap<>(); + wheremap.put("deptid",id); + Map retmap=JAVATools.GetTableToMap(sql,wheremap); + if(retmap==null || retmap.size()<=0){ + return ""; + } + + return Util.null2String(retmap.get("docnumabbreviation")); + } + // String isCreate = Util.null2String(request.getParameter("iscreate")); //是否为创建,1为创建 +// int workFlowId = Util.getIntValue(request.getParameter("workflowid")); +// int formModeId = PayUtil.getFormModeIdByCubeName("uf_fklcbh"); +// StringBuilder mark = new StringBuilder(); //流程编码 +// String sql = "select WORKFLOWNAME,UNNUMBER from workflow_base where ID=?"; +// rs.executeQuery(sql, workFlowId); +// String name = ""; +// if (rs.next()) { +// name = rs.getString("WORKFLOWNAME"); +// } +// +// String unNumber = PayUtil.getUnNumberByWorkFlowId(workFlowId); +// String modeUuid = ""; +// LocalDateTime now = LocalDateTime.now(); +// String yM = now.format(DateTimeFormatter.ofPattern("yyyyMM")); +// +// synchronized (this) { +// rs.executeQuery("select id,lsh,MODEUUID from uf_fklcbh where ny = '" + yM + "' and LCLX='" + unNumber + "'"); +// if (rs.next()) { +// //更新 +// int num = Util.getIntValue(rs.getString("lsh")) + 1; +// int id = Util.getIntValue(rs.getString("id")); +// modeUuid = Util.null2String(rs.getString("MODEUUID")); +// String updateSql = "update uf_fklcbh set lsh=? where id=?"; +// rs.executeUpdate(updateSql, num, id); +// mark = new StringBuilder(num + ""); +// while (mark.length() < 6) { +// mark.insert(0, "0"); +// } +// mark = new StringBuilder(name + now.format(DateTimeFormatter.ofPattern("yyyyMM")) + mark); +// } else { +// String userId = Util.null2String(request.getParameter("f_weaver_belongto_userid")); +// String userType = Util.null2String(request.getParameter("f_weaver_belongto_usertype")); +// String createDate = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); +// String createTime = now.format(DateTimeFormatter.ofPattern("HH:mm:ss")); +// //插入 +// String insertSql = "insert into uf_fklcbh" + +// "(FORMMODEID,MODEDATACREATER,MODEDATACREATERTYPE,MODEDATACREATEDATE,MODEDATACREATETIME,MODEUUID,LSH,NY,LCLX) \n" + +// "values(?,?,?,?,?,?,?,?,?)"; +// String uuid = UUID.randomUUID().toString(); +// modeUuid = uuid; +// rs.executeUpdate(insertSql, formModeId, userId, userType, createDate, createTime, uuid, "1", yM, unNumber); +// mark = new StringBuilder(name + now.format(DateTimeFormatter.ofPattern("yyyyMM")) + "000001"); +// } +// //权限重构 +// int dataId = PayUtil.getDataIdByUUID(modeUuid); +// ModeRightInfo modeRightInfo = new ModeRightInfo(); +// modeRightInfo.editModeDataShare(1, formModeId, dataId); +// return null; +// +} diff --git a/src/main/java/com/engine/htsc/jgzxzysx/service/JgzxzysxService.java b/src/main/java/com/engine/htsc/jgzxzysx/service/JgzxzysxService.java new file mode 100644 index 0000000..61e30b5 --- /dev/null +++ b/src/main/java/com/engine/htsc/jgzxzysx/service/JgzxzysxService.java @@ -0,0 +1,30 @@ +package com.engine.htsc.jgzxzysx.service; + +import com.alibaba.fastjson.JSONObject; +import weaver.hrm.User; + +import java.util.Map; +import java.util.Set; + +/** + * @author K1810015 + * @version 1.0.0 + * @ClassName JgzxzysxAction.java + * @createTime 2022年05月11日 13:47:00 + */ +public interface JgzxzysxService { + + + public boolean donewkconfidential(User user, Map map); + + public JSONObject getDataRange(User user, Map map); + + public Set getwkdonetosuer(User user, Map map); + + public String getnumber(User user, Map map); + + public JSONObject getleaderallname(User user, Map map); + + public boolean getleadercflag(User user, Map map); + +} diff --git a/src/main/java/com/engine/htsc/jgzxzysx/service/impl/JgzxzysxServiceImp.java b/src/main/java/com/engine/htsc/jgzxzysx/service/impl/JgzxzysxServiceImp.java new file mode 100644 index 0000000..caa6517 --- /dev/null +++ b/src/main/java/com/engine/htsc/jgzxzysx/service/impl/JgzxzysxServiceImp.java @@ -0,0 +1,345 @@ +package com.engine.htsc.jgzxzysx.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.engine.core.impl.Service; +import com.engine.htsc.jgzxzysx.cmd.JgzxzdsywknumberCmd; +import com.engine.htsc.jgzxzysx.service.JgzxzysxService; +import com.engine.htsc.jgzxzysx.util.JgzxzysxUtil; +import com.engine.integration.util.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.comInfo.PropBean; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author K1810015 + * @version 1.0.0 + * @ClassName JgzxzysxServiceImp.java + * @createTime 2022年05月11日 13:48:00 + */ +public class JgzxzysxServiceImp extends Service implements JgzxzysxService { + + + private PropBean pb=new PropBean(); + @Override + public boolean donewkconfidential(User user, Map map) { + if(map==null || map.size()<=0){ + return false; + } + String requestid= Util.null2String(map.get("requestid")); + + if(StringUtils.isBlank(requestid) ) + { + return false; + } + return JgzxzysxUtil.getworkflowflag(map); + + } + + + @Override + public Set getwkdonetosuer(User user, Map map){ + Set useridSet = new HashSet<>(); + if(map==null || map.size()<=0){ + return useridSet; + } + String requestid=Util.null2String(map.get("requestid")); + String nodeunnumber=Util.null2String(map.get("nodeunnumber")); + if(StringUtils.isBlank(requestid) || StringUtils.isBlank(nodeunnumber) ){ + return useridSet; + } + String nodeid = pb.getActionNodeIdByUnNumber(nodeunnumber); + String sql = "select operator,agentorbyagentid from workflow_requestlog where requestid = '"+requestid+"' and nodeid = '"+nodeid+"'"; + List> list= JAVATools.GetTableToListMap(sql,null); + if(list!=null && list.size()>0){ + list.forEach((Map retmap)->{ + String agentorbyagentid = Util.null2String(retmap.get("agentorbyagentid")); + if("-1".equals(agentorbyagentid)){//授权,获取原处理人 + String operator = Util.null2String(retmap.get("operator")); + useridSet.addAll(getAllUserid(operator)); + }else{ + useridSet.addAll(getAllUserid(agentorbyagentid)); + } + }); + } + return useridSet; + } + + @Override + public JSONObject getDataRange(User user, Map map){ + String sblb= Util.null2String(map.get("sblb")); + String sblx= Util.null2String(map.get("sblx")); + JSONObject jsonObject=new JSONObject(); + JSONArray jsonnullArray=new JSONArray(); + jsonObject.put("ywzgbmfzr",jsonnullArray); + jsonObject.put("ywzgbmns",jsonnullArray); + jsonObject.put("hqbm",jsonnullArray); + jsonObject.put("gsld",jsonnullArray); + if(StringUtils.isBlank(sblb) || StringUtils.isBlank(sblx)){ + return jsonObject; + } + String sql="select * from uf_jgzxsyfw where 1=1 "; + Map wheremap=new HashMap<>(); + wheremap.put("sblb",sblb); + wheremap.put("sblx",sblx); + Map selectmap= JAVATools.GetTableToMap(sql,wheremap); + if(selectmap==null || selectmap.size()<=0){ + return jsonObject; + } + String gsld=Util.null2String(selectmap.get("gsld")); + + if(!StringUtils.isBlank(gsld)){ + JSONArray jsonArray= getusermap(gsld); + if(jsonArray!=null && jsonArray.size()>0){ + jsonObject.put("gsld",jsonArray); + } + } + + + //业务主管部门负责人(ywzgbmfzr)、 + // 会签部门(hqbm) + + String ywzgbmns=Util.null2String(selectmap.get("ywzgbmns")); + if(!StringUtils.isBlank(ywzgbmns)){ + JSONArray jsonArray= getusermap(ywzgbmns); + if(jsonArray!=null && jsonArray.size()>0){ + jsonObject.put("ywzgbmns",jsonArray); + } + } + + + String hqbm=Util.null2String(selectmap.get("hqbm")); + if(!StringUtils.isBlank(hqbm)){ + JSONArray jsonArray= getdeptmap(hqbm); + if(jsonArray!=null && jsonArray.size()>0){ + jsonObject.put("hqbm",jsonArray); + } + + } + + + + String ywzgbmldbq=Util.null2String(selectmap.get("ywzgbmldbq")); + + if(!StringUtils.isBlank(ywzgbmldbq)){ + if ("0".equals(ywzgbmldbq)){ + String ywzgbm=Util.null2String(selectmap.get("ywzgbm")); + if (!StringUtils.isBlank(ywzgbm)){ + ywzgbm = Arrays.stream(ywzgbm.split(",")).distinct().collect(Collectors.joining(",")); + String sql02="select wm_concat_old( distinct DEPTDIRECTORS) as userid from hrmdepartmentdefined where deptid in ( "+ywzgbm+" )"; + Map selectmap02= JAVATools.GetTableToMap(sql02,null); + if(selectmap02==null || selectmap02.size()<=0){ + jsonObject.put("ywzgbmfzr",jsonnullArray); + }else { + String userid=Util.null2String(selectmap02.get("userid")); + if(!StringUtils.isBlank(userid)){ + JSONArray jsonArray02= getusermap(userid); + if(jsonArray02==null || jsonArray02.size()<=0){ + jsonObject.put("ywzgbmfzr",jsonnullArray); + } + jsonObject.put("ywzgbmfzr",jsonArray02); + } + } + } + } + } + + + String qzsyrys = Util.null2String(selectmap.get("qzsyry")); + + if(!StringUtils.isBlank(qzsyrys)){ + jsonObject.put("qztzyd",getDefaultNotice(qzsyrys)); + } + + return jsonObject; + } + + @Override + public String getnumber(User user, Map map) { + Map retmap= commandExecutor.execute(new JgzxzdsywknumberCmd(user,map)); + if(retmap==null || retmap.size()<=0){ + return ""; + } + return Util.null2String(retmap.get("data")); + } + + @Override + public JSONObject getleaderallname(User user, Map map) { + String type=Util.null2String(map.get("type")); + JSONObject jsonObject=new JSONObject(); + if(StringUtils.isBlank(type)){ + return jsonObject; + } + type= Arrays.stream(type.split(",")).distinct().collect(Collectors.joining(",")); + String sql="select id,hqld,gwry from uf_jgzxhqld where 1=1 and id in ("+type+")"; + List> mainlistmap=JAVATools.GetTableToListMap(sql,null); + if(mainlistmap==null || mainlistmap.size()<=0){ + return jsonObject; + } + mainlistmap.forEach((item)->{ + Map detaimap=(Map)item; + String id=Util.null2String(detaimap.get("id")); + String hqld=Util.null2String(detaimap.get("hqld")); + String gwry=Util.null2String(detaimap.get("gwry")); + String name=JAVATools.getHrmName(gwry); + if(StringUtils.isBlank(name)){ + jsonObject.put(id,hqld); + }else{ + jsonObject.put(id,name+"("+hqld+")"); + } + + }); + return jsonObject; + } + + @Override + public boolean getleadercflag(User user, Map map) { + String requestid=Util.null2String(map.get("requestid")); + String hqld=Util.null2String(map.get("hqld")); + String userdeptid=Util.null2String(user.getUserDepartment()); + if(StringUtils.isBlank(requestid) || StringUtils.isBlank(hqld)){ + return false; + } + String jsonpb= new PropBean().getPropName("jgzxzysy.leaderflag"); + JSONObject jsonobject=reloadleaderjson(JSONObject.parseObject(jsonpb)); + if(jsonobject==null || jsonobject.size()<=0){ + return false; + } + String sql="select wm_concat_old(distinct operatordept) as operatordepts from workflow_requestlog where nodeid<0 "; + Map wheremap=new HashMap<>(); + wheremap.put("requestid",requestid); + Map retmap=JAVATools.GetTableToMap(sql,wheremap); + String operatordepts=Util.null2String(retmap.get("operatordepts")); + boolean flag= Arrays.stream(hqld.split(",")).distinct().anyMatch((item)->{ + String value=Util.null2String(jsonobject.get(item)); + if(StringUtils.isBlank(value)){ + return true; + } + if((","+value+",").indexOf(","+userdeptid+",")>=0){ + return false; + }else{ + if(StringUtils.isBlank(operatordepts)){ + return true; + } + Set set=new HashSet<>(); + set.addAll(Arrays.stream(operatordepts.split(",")).collect(Collectors.toSet())); + set.retainAll(Arrays.stream(value.split(",")).collect(Collectors.toSet())); + if(set==null || set.size()<=0){ + return true; + } + } + return false; + }); + return !flag; + } + + public JSONObject reloadleaderjson(JSONObject jsonobject){ + if(jsonobject==null || jsonobject.size()<=0){ + return null; + } + JSONObject jsonObject1=new JSONObject(); + jsonobject.forEach((key,value)->{ + jsonObject1.put(Util.null2String(key),getdeptcodetoids(Util.null2String(value))); + }); + return jsonObject1; + } + public String getdeptcodetoids(String deptcode){ + if(StringUtils.isBlank(deptcode)){ + return ""; + } + try { + deptcode= Arrays.stream(deptcode.split(",")).distinct().map(item->"'"+item+"'").collect(Collectors.joining(",")); + String sql ="select wm_concat_old(id) as id from hrmdepartment where 1=1 and departmentcode in ("+deptcode+")"; + Map mapitem = JAVATools.GetTableToMap(sql, null); + if (mapitem == null || mapitem.size() <= 0) { + return ""; + } + return Util.null2String(mapitem.get("id")); + }catch (Exception e){ + return ""; + } + } + + public JSONArray getusermap(String userids){ + if(StringUtils.isBlank(userids)){ + return null; + } + try { + userids = Arrays.stream(userids.split(",")).distinct().collect(Collectors.joining(",")); + String sql = "select id,lastname as name from hrmresource where id in (" + userids + ")"; + List list = JAVATools.GetTableToListMap(sql, null); + if (list == null || list.size() <= 0) { + return null; + } + JSONArray retlist = new JSONArray(list); + if (retlist == null || retlist.size() <= 0) { + return null; + } + return retlist; + }catch (Exception e){ + return null; + } + + } + + public JSONArray getdeptmap(String userids){ + if(StringUtils.isBlank(userids)){ + return null; + } + try { + userids = Arrays.stream(userids.split(",")).distinct().collect(Collectors.joining(",")); + String sql = "select id,departmentname as name from hrmdepartment where id in (" + userids + ")"; + List list = JAVATools.GetTableToListMap(sql, null); + if (list == null || list.size() <= 0) { + return null; + } + JSONArray retlist = new JSONArray(list); + if (retlist == null || retlist.size() <= 0) { + return null; + } + return retlist; + }catch (Exception e){ + return null; + } + + } + + private List getAllUserid(String id){ + BaseBean bs = new BaseBean(); + RecordSet rs = new RecordSet(); + List idList = new ArrayList<>(); + + String mainUserid = JAVATools.getmainhrmid(id); + idList.add(mainUserid); + String sql="select id from hrmresource where belongto = '"+mainUserid+"'"; + bs.writeLog(sql); + rs.executeQuery(sql); + while(rs.next()){ + idList.add(Util.null2String(rs.getString("id"))); + } + return idList; + } + + /** + * 获得强制通知阅读对象 + * @param qzsyrys + * @return + */ + public JSONObject getDefaultNotice(String qzsyrys){ + JSONObject jsonObject=new JSONObject(); + try{ + jsonObject.put( "qzsyryid", getusermap(qzsyrys)); + }catch (Exception e){ + e.printStackTrace(); + } + return jsonObject; + } + +} diff --git a/src/main/java/com/engine/htsc/jgzxzysx/util/JgzxzysxUtil.java b/src/main/java/com/engine/htsc/jgzxzysx/util/JgzxzysxUtil.java new file mode 100644 index 0000000..c6702c1 --- /dev/null +++ b/src/main/java/com/engine/htsc/jgzxzysx/util/JgzxzysxUtil.java @@ -0,0 +1,46 @@ +package com.engine.htsc.jgzxzysx.util; + +import com.engine.integration.util.StringUtils; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.comInfo.PropBean; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author K1810015 + * @version 1.0.0 + * @ClassName JgzxzysxUtil.java + * @createTime 2022年05月11日 13:47:00 + */ +public class JgzxzysxUtil { + + private static PropBean pb=new PropBean(); + + public static boolean getworkflowflag(Map map){ + String requestid= Util.null2String(map.get("requestid")); + String nodeid=pb.getActionNodeIdByUnNumber(pb.getPropName("jgzxzysx.node.jgzxzysx_jgzxfzrsh")); + if(StringUtils.isBlank(requestid) ||StringUtils.isBlank(nodeid) ){ + return false; + } + String sql=" select count(*) as sunum from workflow_requestlog where 1=1 "; + Map wheremap=new HashMap<>(); + wheremap.put("requestid",requestid); + wheremap.put("nodeid",nodeid); + Map retmap=JAVATools.GetTableToMap(sql,wheremap); + if(retmap==null || retmap.size()<=0){ + return false; + } + int sunnum=Util.getIntValue(Util.null2String(retmap.get("sunum")),0); + + if(sunnum>0){ + return true; + }else{ + return false; + } + + } + +} diff --git a/src/main/java/com/engine/htsc/jgzxzysx/web/JgzxzysxAction.java b/src/main/java/com/engine/htsc/jgzxzysx/web/JgzxzysxAction.java new file mode 100644 index 0000000..7754785 --- /dev/null +++ b/src/main/java/com/engine/htsc/jgzxzysx/web/JgzxzysxAction.java @@ -0,0 +1,124 @@ +package com.engine.htsc.jgzxzysx.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.jgzxzysx.service.JgzxzysxService; +import com.engine.htsc.jgzxzysx.service.impl.JgzxzysxServiceImp; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; +import weaver.interfaces.htsc.GlobatTools.JAVATools; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * @author K1810015 + * @version 1.0.0 + * @ClassName JgzxzysxAction.java + * @createTime 2022年05月11日 13:47:00 + */ +public class JgzxzysxAction { + + + + private JgzxzysxService jgzxzysxService= ServiceUtil.getService(JgzxzysxServiceImp.class); + + @POST + @Path("/getdonewkconfidential") + @Produces({MediaType.TEXT_PLAIN}) + public String getdonewkconfidential(@Context HttpServletRequest request, @Context HttpServletResponse response) { + JAVATools.SetCmdwritelog("-------------JgzxzysxAction.getdonewkconfidential-------------"); + User user = HrmUserVarify.getUser(request, response); + try { + boolean flag = jgzxzysxService.donewkconfidential(user, ParamUtil.request2Map(request)); + return JAVATools.Apiretrun("200", flag); + } catch (Exception e) { + return JAVATools.Apiretrun("400", "error"); + } + } + + @POST + @Path("/getdwkonetosuer") + @Produces({MediaType.TEXT_PLAIN}) + public String getwkdonetosuer(@Context HttpServletRequest request, @Context HttpServletResponse response) { + JAVATools.SetCmdwritelog("-------------JgzxzysxAction.getdonewkconfidential-------------"); + User user = HrmUserVarify.getUser(request, response); + + try{ + Set set=jgzxzysxService.getwkdonetosuer(user, ParamUtil.request2Map(request)); + if(set==null || set.size()<=0){ + return JAVATools.Apiretrun("200",""); + } + return JAVATools.Apiretrun("200",set.stream().collect(Collectors.joining(","))); + }catch (Exception e){ + return JAVATools.Apiretrun("400","error"); + } + } + + + @POST + @Path("/getDataRange") + @Produces({MediaType.TEXT_PLAIN}) + public String getDataRange(@Context HttpServletRequest request, @Context HttpServletResponse response){ + JAVATools.SetCmdwritelog("-------------JgzxzysxAction.getDataRange-------------"); + User user = HrmUserVarify.getUser(request, response); + try{ + JSONObject jsonObject=jgzxzysxService.getDataRange(user, ParamUtil.request2Map(request)); + return JAVATools.Apiretrun("200",jsonObject); + }catch (Exception e){ + return JAVATools.Apiretrun("400","error"); + } + } + + + + @POST + @Path("/getnumber") + @Produces({MediaType.TEXT_PLAIN}) + public String getnumber(@Context HttpServletRequest request, @Context HttpServletResponse response){ + JAVATools.SetCmdwritelog("-------------JgzxzysxAction.getnumber-------------"); + User user = HrmUserVarify.getUser(request, response); + try{ + String value=jgzxzysxService.getnumber(user, ParamUtil.request2Map(request)); + return JAVATools.Apiretrun("200",value); + }catch (Exception e){ + return JAVATools.Apiretrun("400","error"); + } + } + + @POST + @Path("/getleaderallname") + @Produces({MediaType.TEXT_PLAIN}) + public String getleaderallname(@Context HttpServletRequest request, @Context HttpServletResponse response){ + JAVATools.SetCmdwritelog("-------------JgzxzysxAction.getfreenodeadmin-------------"); + User user = HrmUserVarify.getUser(request, response); + try{ + JSONObject value=jgzxzysxService.getleaderallname(user, ParamUtil.request2Map(request)); + return JAVATools.Apiretrun("200",value); + }catch (Exception e){ + return JAVATools.Apiretrun("400","error"); + } + } + @POST + @Path("/getleadercflag") + @Produces({MediaType.TEXT_PLAIN}) + public String getleadercflag(@Context HttpServletRequest request, @Context HttpServletResponse response){ + JAVATools.SetCmdwritelog("-------------JgzxzysxAction.getnumber-------------"); + User user = HrmUserVarify.getUser(request, response); + try{ + Boolean value=jgzxzysxService.getleadercflag(user, ParamUtil.request2Map(request)); + return JAVATools.Apiretrun("200",value); + }catch (Exception e){ + return JAVATools.Apiretrun("400","error"); + } + } + +} diff --git a/src/main/java/com/engine/htsc/jjhtyfk/cmd/GetContractInfoCmd.java b/src/main/java/com/engine/htsc/jjhtyfk/cmd/GetContractInfoCmd.java new file mode 100644 index 0000000..7362d33 --- /dev/null +++ b/src/main/java/com/engine/htsc/jjhtyfk/cmd/GetContractInfoCmd.java @@ -0,0 +1,87 @@ +package com.engine.htsc.jjhtyfk.cmd; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.interfaces.htsc.util.HT_WorkflowInfo; + +import java.util.HashMap; +import java.util.Map; + +/** + * @Author Weaver.SongYuchen + * @Date 2022-03-31 + * @Description 付款流程联动用印流程合同信息 + */ +public class GetContractInfoCmd extends AbstractCommonCommand> { + public GetContractInfoCmd(User user, Map params) { + this.user = user; + this.params = params; + } + + @Override + public BizLogContext getLogContext() { + return null; + } + + /** + * 获取用印流程合同信息 + * + * @param commandContext + * @return + */ + @Override + public Map execute(CommandContext commandContext) { + Map resultMap = new HashMap<>(); + RecordSet rs = new RecordSet(); + BaseBean bb = new BaseBean(); + + try { + String requestId = Util.null2String(params.get("code")); //获取用印流程requestid + HT_WorkflowInfo HT_WorkflowInfo = new HT_WorkflowInfo(); + String formTableName = HT_WorkflowInfo.getFormTableByRequestid(requestId); //根据requestid获取流程表名 + + bb.writeLog("用印流程requestId: " + requestId); + bb.writeLog("用印流程表名: " + formTableName); + + //查询用印流程主表数据 + String sql = "select id, htje, yfje from " + formTableName + " where requestid = '" + requestId + "'"; + bb.writeLog("sql: " + sql); + String mainId = ""; + rs.execute(sql); + if (rs.next()) { + bb.writeLog("合同金额: " + Util.null2String(rs.getString("htje")) + " 已付金额:" + Util.null2String(rs.getString("yfje"))); + mainId = Util.null2String(rs.getString("id")); + resultMap.put("htje", Util.null2String(rs.getString("htje"))); + resultMap.put("yfje", Util.null2String(rs.getString("yfje"))); + } + + //查询用印流程明细表数据 + sql = "select wjmc, htbh from " + formTableName + "_dt7 where mainid = '" + mainId + "' and sfsht = 1"; + bb.writeLog("sql: " + sql); + rs.execute(sql); + if (rs.next()) { + bb.writeLog("文件名称: " + Util.null2String(rs.getString("wjmc")) + " 合同编号:" + Util.null2String(rs.getString("htbh"))); + resultMap.put("htbh", Util.null2String(rs.getString("htbh"))); + + //根据文件id获取文件名 + sql = "select k.imagefilename from DocDetail t inner join DocImageFile k on k.docid = t.id \n" + + "where t.id in (" + Util.null2String(rs.getString("wjmc")) + ")"; + bb.writeLog("sql: " + sql); + rs.execute(sql); + if (rs.next()) { + resultMap.put("wjmc", Util.null2String(rs.getString("imagefilename"))); + } + } + } catch (Exception e) { + bb.writeLog("获取合同信息异常, error: " + e.getMessage()); + resultMap.put("error", e.getMessage()); + return resultMap; + } + return resultMap; + } +} diff --git a/src/main/java/com/engine/htsc/jjhtyfk/service/GetContractInfoService.java b/src/main/java/com/engine/htsc/jjhtyfk/service/GetContractInfoService.java new file mode 100644 index 0000000..91e7ef7 --- /dev/null +++ b/src/main/java/com/engine/htsc/jjhtyfk/service/GetContractInfoService.java @@ -0,0 +1,18 @@ +package com.engine.htsc.jjhtyfk.service; + +import java.util.Map; + +/** + * @Author Weaver.SongYuchen + * @Date 2022-03-31 + * @Description 付款流程联动用印流程合同信息 + */ +public interface GetContractInfoService { + /** + * 获取用印流程合同信息 + * + * @param params + * @return + */ + Map getContractInfo(Map params); +} diff --git a/src/main/java/com/engine/htsc/jjhtyfk/service/impl/GetContractInfoServiceImpl.java b/src/main/java/com/engine/htsc/jjhtyfk/service/impl/GetContractInfoServiceImpl.java new file mode 100644 index 0000000..96fd2a3 --- /dev/null +++ b/src/main/java/com/engine/htsc/jjhtyfk/service/impl/GetContractInfoServiceImpl.java @@ -0,0 +1,25 @@ +package com.engine.htsc.jjhtyfk.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.jjhtyfk.cmd.GetContractInfoCmd; +import com.engine.htsc.jjhtyfk.service.GetContractInfoService; + +import java.util.Map; + +/** + * @Author Weaver.SongYuchen + * @Date 2022-03-31 + * @Description 付款流程联动用印流程合同信息 + */ +public class GetContractInfoServiceImpl extends Service implements GetContractInfoService { + /** + * 获取用印流程合同信息 + * + * @param params + * @return + */ + @Override + public Map getContractInfo(Map params) { + return commandExecutor.execute(new GetContractInfoCmd(user, params)); + } +} diff --git a/src/main/java/com/engine/htsc/jjhtyfk/web/GetContractInfoAction.java b/src/main/java/com/engine/htsc/jjhtyfk/web/GetContractInfoAction.java new file mode 100644 index 0000000..ed38f65 --- /dev/null +++ b/src/main/java/com/engine/htsc/jjhtyfk/web/GetContractInfoAction.java @@ -0,0 +1,50 @@ +package com.engine.htsc.jjhtyfk.web; + +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.jjhtyfk.service.GetContractInfoService; +import com.engine.htsc.jjhtyfk.service.impl.GetContractInfoServiceImpl; +import com.engine.htsc.trip.util.AjaxResult; +import weaver.general.BaseBean; + +import javax.ws.rs.Consumes; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +/** + * @Author Weaver.SongYuchen + * @Date 2022-03-31 + * @Description 付款流程联动用印流程合同信息 + */ +public class GetContractInfoAction { + private GetContractInfoService getService() { + return ServiceUtil.getService(GetContractInfoServiceImpl.class); + } + + /** + * 获取用印流程合同信息 + * + * @param data + * @return + */ + @POST + @Path("/getContractInfo") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult> getContractInfo(Map data) { + Map apidatas = new HashMap<>(); + BaseBean bb = new BaseBean(); + try { + bb.writeLog("========================= getContractInfo Interfaces ========================="); + apidatas.putAll(getService().getContractInfo(data)); + apidatas.put("status", "1"); + return AjaxResult.ok(apidatas); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error(e.getMessage()); + } + } +} diff --git a/src/main/java/com/engine/htsc/jjhyy/dao/JjhyybaseDao.java b/src/main/java/com/engine/htsc/jjhyy/dao/JjhyybaseDao.java new file mode 100644 index 0000000..84e563e --- /dev/null +++ b/src/main/java/com/engine/htsc/jjhyy/dao/JjhyybaseDao.java @@ -0,0 +1,39 @@ +package com.engine.htsc.jjhyy.dao; + +import com.engine.integration.util.StringUtils; +import weaver.general.Util; +import weaver.interfaces.htsc.GlobatTools.JAVATools; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author K1810015 + * @version 1.0.0 + * @ClassName JjhyybaseDao.java + * @createTime 2022年03月18日 10:41:00 + */ +public class JjhyybaseDao { + + /** + * @title getdetailnumber + * @author K1810015 + * @updateTime 2022/3/18 10:59 + * @Remark 获取文件表是合同并且合同编号为空的数据 + * @throws + */ + public static List> getdetailnumber(Map map){ + String requestid= Util.null2String(map.get("requestid")); + String tablename= Util.null2String(map.get("tablename")); + if(StringUtils.isBlank(requestid) || StringUtils.isBlank(tablename)){ + return null; + } + String sql="select dt.* from "+tablename+"_dt7 dt left join "+tablename+" t on dt.mainid=t.id "+ + " where dt.sfsht=1 and ( dt.htbh is null or dt.htbh ='') "; + Map wheremap=new HashMap<>(1); + wheremap.put("t.requestid",requestid); + return JAVATools.GetTableToListMap(sql,wheremap); + + } +} diff --git a/src/main/java/com/engine/htsc/jjhyy/enitry/Uf_jjhhtbh.java b/src/main/java/com/engine/htsc/jjhyy/enitry/Uf_jjhhtbh.java new file mode 100644 index 0000000..5f0f619 --- /dev/null +++ b/src/main/java/com/engine/htsc/jjhyy/enitry/Uf_jjhhtbh.java @@ -0,0 +1,77 @@ +package com.engine.htsc.jjhyy.enitry; + +import com.engine.doc.util.TableEditUtil; +import weaver.interfaces.htsc.GlobatTools.TableUtils; + +/** + * @author K1810015 + * @version 1.0.0 + * @ClassName uf_jjhhtbh.java + * @createTime 2022年03月18日 13:59:00 + */ +public class Uf_jjhhtbh extends TableUtils { + + private String cjsj; + private Integer bm; + private String wjmc; + private String nf; + private Integer wh; + private String lcid; + private Integer ngr; + + public Integer getNgr() { + return ngr; + } + + public void setNgr(Integer ngr) { + this.ngr = ngr; + } + + public String getCjsj() { + return cjsj; + } + + public void setCjsj(String cjsj) { + this.cjsj = cjsj; + } + + public Integer getBm() { + return bm; + } + + public void setBm(Integer bm) { + this.bm = bm; + } + + public String getWjmc() { + return wjmc; + } + + public void setWjmc(String wjmc) { + this.wjmc = wjmc; + } + + public String getNf() { + return nf; + } + + public void setNf(String nf) { + this.nf = nf; + } + + public Integer getWh() { + return wh; + } + + public void setWh(Integer wh) { + this.wh = wh; + } + + public String getLcid() { + return lcid; + } + + public void setLcid(String lcid) { + this.lcid = lcid; + } +} diff --git a/src/main/java/com/engine/htsc/jjhyy/service/JjhyybaseService.java b/src/main/java/com/engine/htsc/jjhyy/service/JjhyybaseService.java new file mode 100644 index 0000000..180ac2f --- /dev/null +++ b/src/main/java/com/engine/htsc/jjhyy/service/JjhyybaseService.java @@ -0,0 +1,23 @@ +package com.engine.htsc.jjhyy.service; + +import com.alibaba.fastjson.JSONObject; +import weaver.hrm.User; + +import java.util.Map; + +/** + * @author K1810015 + * @version 1.0.0 + * @ClassName JjhyybaseService.java + * @createTime 2022年03月18日 10:39:00 + */ +public interface JjhyybaseService { + + void createdetailnumber(User user, Map map); + + public boolean getwkyygldoneuser(User user, Map map); + + public Map getsealname(User user, Map map); + + public JSONObject getOtherReadUser(User user, Map map); +} diff --git a/src/main/java/com/engine/htsc/jjhyy/service/impl/JjhyybaseServiceImpl.java b/src/main/java/com/engine/htsc/jjhyy/service/impl/JjhyybaseServiceImpl.java new file mode 100644 index 0000000..72a4344 --- /dev/null +++ b/src/main/java/com/engine/htsc/jjhyy/service/impl/JjhyybaseServiceImpl.java @@ -0,0 +1,180 @@ +package com.engine.htsc.jjhyy.service.impl; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.engine.core.impl.Service; +import com.engine.htsc.jjhyy.dao.JjhyybaseDao; +import com.engine.htsc.jjhyy.enitry.Uf_jjhhtbh; +import com.engine.htsc.jjhyy.service.JjhyybaseService; +import com.engine.integration.util.StringUtils; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.interfaces.htsc.GlobatTools.DeptUtils; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.comInfo.PropBean; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author K1810015 + * @version 1.0.0 + * @ClassName JjhyybaseService.java + * @createTime 2022年03月18日 10:39:00 + */ +public class JjhyybaseServiceImpl extends Service implements JjhyybaseService { + private PropBean pb=new PropBean(); + + private String date = DateUtil.format(new Date(), "yyyy-MM-dd"); + + @Override + public boolean getwkyygldoneuser(User user,Map map) { + String nodenumbber=Util.null2String(pb.getPropName("jjhyy.nodenumber.jjhyy_yyglfh")); + String requestid=Util.null2String(map.get("requestid")); + Set useridSet = new HashSet<>(); + String sql = "select operator,agentorbyagentid from workflow_requestlog where requestid = '"+requestid+"' " + + " and nodeid in ( select id from workflow_nodebase where unnumber='"+nodenumbber+"') order by to_date((operatedate || ' ' || OPERATETIME),'yyyy-MM-dd hh24:mi:ss') desc"; + boolean falg=false; + List list =JAVATools.GetTableToListMap(sql,null); + if(list!=null && list.size()>0){ + falg=true; + } + return falg; + } + + @Override + public Map getsealname(User user, Map map) { + String unnumber=Util.null2String(map.get("unnumber")); + String sealname= Util.null2String(map.get("sealname")); + Map resultMap = new HashMap<>(); + if(StringUtils.isBlank(unnumber) || StringUtils.isBlank(sealname)){ + return null; + } + Arrays.stream(sealname.split(",")).forEach((value)->{ + Map mapvalue= getsealmap(unnumber,value); + if(mapvalue!=null && mapvalue.size()>0){ + resultMap.put(value,mapvalue); + } + }); + return resultMap; + } + + + private Map getsealmap(String lcxx,String eselname){ + if(StringUtils.isBlank(lcxx) || StringUtils.isBlank(eselname)){ + return null; + } + String sql = "select t1.id,t1.yzmc,t1.yzlx,t1.pxzd from uf_yinzhang" + + " t1,uf_tsld t2 where t2.yz = t1.id "; + Map wheremap=new HashMap<>(); + wheremap.put("t2.lcxx",lcxx); + wheremap.put("t2.qt",eselname); + return JAVATools.GetTableToMap(sql,wheremap); + } + + + @Override + public void createdetailnumber(User user, Map map) { + String requestid= Util.null2String(map.get("requestid")); + String tablename= Util.null2String(map.get("tablename")); + if(StringUtils.isBlank(requestid) || StringUtils.isBlank(tablename) || user==null){ + return ; + } + List> strmap= JjhyybaseDao.getdetailnumber(map); + strmap.forEach(item->{ + String id=Util.null2String(item.get("id")); + String wjmc=Util.null2String(item.get("wjmc")); + int wh=createwh(requestid,wjmc,user); + Map wheremap=new HashMap<>(); + wheremap.put("id",id); + Map updatemap=new HashMap<>(); + String newunnumber= pb.getPropName("jjhyy.unnumbername")+date.replace("-","")+reloadwh(wh,4); + updatemap.put("htbh",newunnumber); + JAVATools.Updatesql(updatemap,tablename+"_dt7",wheremap); + }); + } + + public String reloadwh(int wh,int length){ + if(length<=0 && wh<=0){ + return "0001"; + } + if(wh>=10000){ + return Util.null2String(wh); + } + String formatstr="%"+length+"d"; + String whStr = String.format(formatstr,wh).replace(" ","0"); + return whStr; + } + + private int createwh(String requestid,String wjcm,User user){ + int unnumber = 1; + try { + + //去询了 + String sql = "select max(wh) wh from uf_jjhhtbh where 1=1"; + Map retmap = new HashMap<>(); + retmap.put("nf", date); + Map whcount = JAVATools.GetTableToMap(sql, retmap); + if (whcount == null || whcount.size() <= 0) { + return unnumber; + } + unnumber = Util.getIntValue(Util.null2String(whcount.get("wh")))+1; + if (unnumber <= 0) { + unnumber = 1; + } + Uf_jjhhtbh uf_jjhhtbh = new Uf_jjhhtbh(); + uf_jjhhtbh.setLcid(requestid); + uf_jjhhtbh.setBm(user.getUserDepartment()); + uf_jjhhtbh.setNf(date); + uf_jjhhtbh.setWh(unnumber); + uf_jjhhtbh.setNgr(user.getUID()); + uf_jjhhtbh.setWjmc(wjcm); + uf_jjhhtbh.setCjsj(date); + uf_jjhhtbh.create(); + }catch (Exception e){ + return 1; + } + return unnumber; + } + + @Override + public JSONObject getOtherReadUser(User user, Map map) { + String wjlb=Util.null2String(map.get("wjlb")); + JSONObject jsonObject=new JSONObject(); + JSONArray jsonArray=new JSONArray(); + List userstr=new ArrayList<>(); + if(StringUtils.isBlank(wjlb) ){ + return null; + } + try { + if ("1".equals(wjlb) || "2".equals(wjlb)) { + //获取对应的人 + String jscode = pb.getPropName("jjhyy.jjhjscode"); + List> userlist = DeptUtils.getDepartmentCodeToUserids(jscode); + if (userlist != null && userlist.size() > 0) { + userlist.forEach((value) -> { + String id = Util.null2String(value.get("id")); + String lastname = Util.null2String(value.get("lastname")); + if (!StringUtils.isBlank(id) && !StringUtils.isBlank(lastname)) { + JSONObject userjson = new JSONObject(); + userjson.put("id", id); + userjson.put("name", lastname); + jsonArray.add(userjson); + userstr.add(id); + } + }); + + } + } + }catch (Exception e){ + return null; + } + jsonObject.put("value",userstr.stream().collect(Collectors.joining(","))); + jsonObject.put("specialobj",jsonArray); + + return jsonObject; + } + + +} diff --git a/src/main/java/com/engine/htsc/jjhyy/web/JjhyySealBaseAction.java b/src/main/java/com/engine/htsc/jjhyy/web/JjhyySealBaseAction.java new file mode 100644 index 0000000..f9d1bb0 --- /dev/null +++ b/src/main/java/com/engine/htsc/jjhyy/web/JjhyySealBaseAction.java @@ -0,0 +1,80 @@ +package com.engine.htsc.jjhyy.web; + + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.jjhyy.service.JjhyybaseService; +import com.engine.htsc.jjhyy.service.impl.JjhyybaseServiceImpl; + +import weaver.general.BaseBean; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; +import weaver.interfaces.htsc.GlobatTools.JAVATools; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +/** + * @author K1810015 + * @version 1.0.0 + * @ClassName JjhyySealBaseAction.java + * @createTime 2022年03月18日 17:07:00 + */ +public class JjhyySealBaseAction { + + private JjhyybaseService jjhyyBaseService= ServiceUtil.getService(JjhyybaseServiceImpl.class); + + @POST + @Path("/getwkdoneuser") + @Produces({MediaType.TEXT_PLAIN}) + public String getwkyygldoneuser(@Context HttpServletRequest request, @Context HttpServletResponse response){ + JAVATools.SetCmdwritelog("-------------JjhyySealAction.getwkyygldoneuser-------------"); + User user = HrmUserVarify.getUser(request, response); + boolean flag=jjhyyBaseService.getwkyygldoneuser(user,ParamUtil.request2Map(request)); + if(flag){ + return JAVATools.Apiretrun("200",true); + }else{ + return JAVATools.Apiretrun("400",false); + } + } + @POST + @Path("/getsealname") + @Produces({MediaType.TEXT_PLAIN}) + public String getsealname(@Context HttpServletRequest request, @Context HttpServletResponse response) { + BaseBean bs = new BaseBean(); + Map retmap = new HashMap(); + bs.writeLog("----sealApplication-----"); + try { + User user = HrmUserVarify.getUser(request, response); + retmap = jjhyyBaseService.getsealname(user, ParamUtil.request2Map(request)); + } catch (Exception e) { + + return JAVATools.Apiretrun("400", "error"); + } + + return JAVATools.Apiretrun("200", new JSONObject(retmap)); + } + + + @POST + @Path("/getOtherReadUser") + @Produces({MediaType.TEXT_PLAIN}) + public String getOtherReadUser(@Context HttpServletRequest request, @Context HttpServletResponse response){ + JAVATools.SetCmdwritelog("-------------getOtherReadUSer.getwkyygldoneuser-------------"); + User user = HrmUserVarify.getUser(request, response); + JSONObject jsonObject=jjhyyBaseService.getOtherReadUser(user,ParamUtil.request2Map(request)); + if(jsonObject!=null){ + return JAVATools.Apiretrun("200",jsonObject); + }else{ + return JAVATools.Apiretrun("400",false); + } + } +} diff --git a/src/main/java/com/engine/htsc/langchaoPDF/pojo/LangChaoPDFRequest.java b/src/main/java/com/engine/htsc/langchaoPDF/pojo/LangChaoPDFRequest.java new file mode 100644 index 0000000..c5eb946 --- /dev/null +++ b/src/main/java/com/engine/htsc/langchaoPDF/pojo/LangChaoPDFRequest.java @@ -0,0 +1,36 @@ +package com.engine.htsc.langchaoPDF.pojo; + +import java.io.Serializable; + +public class LangChaoPDFRequest implements Serializable { + + private String lcbh; + + private String ngr; + + private String pdf; + + public String getLcbh() { + return lcbh; + } + + public void setLcbh(String lcbh) { + this.lcbh = lcbh; + } + + public String getNgr() { + return ngr; + } + + public void setNgr(String ngr) { + this.ngr = ngr; + } + + public String getPdf() { + return pdf; + } + + public void setPdf(String pdf) { + this.pdf = pdf; + } +} diff --git a/src/main/java/com/engine/htsc/langchaoPDF/service/UploadFileService.java b/src/main/java/com/engine/htsc/langchaoPDF/service/UploadFileService.java new file mode 100644 index 0000000..5847b30 --- /dev/null +++ b/src/main/java/com/engine/htsc/langchaoPDF/service/UploadFileService.java @@ -0,0 +1,6 @@ +package com.engine.htsc.langchaoPDF.service; + +public interface UploadFileService { + + public String uploadFile(String billID, byte[] byteArr, String fileType, String userCode, String fileName); +} diff --git a/src/main/java/com/engine/htsc/langchaoPDF/service/impl/UploadFileServiceImpl.java b/src/main/java/com/engine/htsc/langchaoPDF/service/impl/UploadFileServiceImpl.java new file mode 100644 index 0000000..2c8cc42 --- /dev/null +++ b/src/main/java/com/engine/htsc/langchaoPDF/service/impl/UploadFileServiceImpl.java @@ -0,0 +1,48 @@ +package com.engine.htsc.langchaoPDF.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.langchaoPDF.service.UploadFileService; +import weaver.general.Util; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.interfaces.htsc.cus.webservices.FileInfoEntity; +import weaver.interfaces.htsc.cus.webservices.ImageServiceSoap; +import weaver.interfaces.htsc.cus.webservices.ImageServiceSoapProxy; +import weaver.interfaces.htsc.cus.webservices.UploadfileEntity; + +public class UploadFileServiceImpl extends Service implements UploadFileService { + @Override + public String uploadFile(String billID, byte[] byteArr, String fileType, String userCode, String fileName) { + try { + JAVATools.SetCmdwritelog("浪潮OCR识别上传接口 入参 : billID={} " + billID + + " fileType={} " + fileType + + " userCode={} " + userCode + + " fileName={} " + fileName); + String sendImageUrl = Util.null2String(new PropBean().getPropName("sendImageUrl")); + String fileTypeID = Util.null2String(new PropBean().getPropName("cft.image.type.png")); + ImageServiceSoapProxy issp = new ImageServiceSoapProxy(sendImageUrl); + ImageServiceSoap service = issp.getImageServiceSoap(); + + UploadfileEntity uploadfileEntityr = new UploadfileEntity(); + uploadfileEntityr.setBillID(billID); + FileInfoEntity[] fileInfoEntityArr = new FileInfoEntity[1]; + FileInfoEntity fileInfo = new FileInfoEntity(); + fileInfo.setContent(byteArr); + fileInfo.setFileName(fileName); + fileInfo.setFileTypeID(fileTypeID); + fileInfoEntityArr[0] = fileInfo; + uploadfileEntityr.setFileInfoEntityArr(fileInfoEntityArr); + uploadfileEntityr.setFileType(fileType); + uploadfileEntityr.setUserCode(userCode); + String result = service.sendImageOnPC(uploadfileEntityr); + JAVATools.SetCmdwritelog("浪潮OCR识别上传接口,出参:{}",result); + return result; + }catch (Exception e) { + JAVATools.SetCmdwritelog("浪潮OCR识别上传接口出现异常:",e.getMessage()); + e.printStackTrace(); + + return "浪潮OCR识别上传接口 上传失败"; + } + + } +} diff --git a/src/main/java/com/engine/htsc/langchaoPDF/web/LangChaoPDFAction.java b/src/main/java/com/engine/htsc/langchaoPDF/web/LangChaoPDFAction.java new file mode 100644 index 0000000..43de655 --- /dev/null +++ b/src/main/java/com/engine/htsc/langchaoPDF/web/LangChaoPDFAction.java @@ -0,0 +1,102 @@ +package com.engine.htsc.langchaoPDF.web; + +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.langchaoPDF.service.UploadFileService; +import com.engine.htsc.langchaoPDF.service.impl.UploadFileServiceImpl; +import sun.misc.BASE64Decoder; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.interfaces.htsc.GlobatTools.JAVATools; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.net.URLDecoder; +import java.util.HashMap; +import java.util.Map; + +public class LangChaoPDFAction { + private UploadFileService getService() { + return ServiceUtil.getService(UploadFileServiceImpl.class); + } + + @POST + @Path("/pdf") + @Produces({MediaType.APPLICATION_JSON}) + public Map upLoadPDF(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map data = new HashMap<>(); + try { + Map param = ParamUtil.request2Map(request); + String lcbh = Util.null2String(param.get("lcbh")); + String workFlowNum = URLDecoder.decode(lcbh.substring(0,lcbh.length()-12),"UTF-8") + lcbh.substring(lcbh.length()-12,lcbh.length()); + JAVATools.SetCmdwritelog("workFlowNum", workFlowNum); + String ngr = Util.null2String(param.get("ngr")); + JAVATools.SetCmdwritelog("ngr", ngr); + String fileType = "0"; + String fileName = workFlowNum + System.currentTimeMillis() + ".png"; + String pdf = Util.null2String(param.get("pdf")); + JAVATools.SetCmdwritelog("pdf", pdf); + byte[] png = new BASE64Decoder().decodeBuffer(pdf); + //环境生成文件again + InputStream inputstream = new ByteArrayInputStream(png); + int index; + byte[] bytes = new byte[1024]; + String path = "/app/ecology/filesystem/langchaoyingxinangTemp/" + workFlowNum; + File dir = new File(path); + if(dir.exists()){ + dir.delete(); + } + dir.setWritable(true, false); + dir.mkdirs(); + Runtime.getRuntime().exec("chmod -R 777 " + path); + path += "/" + fileName; + File file = new File(path); + if (file.exists()) { + file.delete(); + } + + FileOutputStream uploadFile = new FileOutputStream(file); + while ((index = inputstream.read(bytes)) != -1) { + uploadFile.write(bytes, 0, index); + uploadFile.flush(); + } + inputstream.close(); + uploadFile.close(); + Runtime.getRuntime().exec("chmod -R 777 " + path); + //环境生成文件end + + //通过ngr查出loginid + RecordSet rs = new RecordSet(); + String loginid = ""; + String sql = " select loginid from hrmresource where id = " + ngr; + rs.execute(sql); + JAVATools.SetCmdwritelog("查询" + sql); + JAVATools.SetCmdwritelog("查询结果" + rs.toString()); + if (rs.next()) { + loginid = Util.null2String(rs.getString("loginid")); + JAVATools.SetCmdwritelog("loginid", loginid); + } + String result = getService().uploadFile(workFlowNum, png, fileType, loginid, fileName); + JAVATools.SetCmdwritelog("浪潮OCR识别上传接口返回", result); + data.put("code", 200); + data.put("message", "接口调用成功"); + data.put("result", result); + } catch (Exception e) { + e.printStackTrace(); + data.put("code", -1); + data.put("message", "接口调用失败"); + data.put("api_errormsg", "catch exception : " + e.getMessage()); + JAVATools.SetCmdwritelog("isPostion catch exception"); + } + return data; + } +} diff --git a/src/main/java/com/engine/htsc/lhccsq/pojo/ExistTravelInfo.java b/src/main/java/com/engine/htsc/lhccsq/pojo/ExistTravelInfo.java new file mode 100644 index 0000000..eb33691 --- /dev/null +++ b/src/main/java/com/engine/htsc/lhccsq/pojo/ExistTravelInfo.java @@ -0,0 +1,76 @@ +package com.engine.htsc.lhccsq.pojo; + +import java.util.List; + +public class ExistTravelInfo { + String requestId; + String cclxzxx; + String ccrgh; + String sfsbsx; + /** + * 明细表4数据 + */ + List travelInfo; + + public ExistTravelInfo() { + } + + public ExistTravelInfo(String requestId, String cclxzxx, String ccrgh, String sfsbsx, List travelInfo) { + this.requestId = requestId; + this.cclxzxx = cclxzxx; + this.ccrgh = ccrgh; + this.sfsbsx = sfsbsx; + this.travelInfo = travelInfo; + } + + @Override + public String toString() { + return "ExistTravelInfo{" + + "requestId='" + requestId + '\'' + + ", cclxzxx='" + cclxzxx + '\'' + + ", ccrgh='" + ccrgh + '\'' + + ", sfsbsx='" + sfsbsx + '\'' + + ", travelInfo=" + travelInfo + + '}'; + } + + public String getRequestId() { + return requestId; + } + + public void setRequestId(String requestId) { + this.requestId = requestId; + } + + public String getCclxzxx() { + return cclxzxx; + } + + public void setCclxzxx(String cclxzxx) { + this.cclxzxx = cclxzxx; + } + + public String getCcrgh() { + return ccrgh; + } + + public void setCcrgh(String ccrgh) { + this.ccrgh = ccrgh; + } + + public String getSfsbsx() { + return sfsbsx; + } + + public void setSfsbsx(String sfsbsx) { + this.sfsbsx = sfsbsx; + } + + public List getTravelInfo() { + return travelInfo; + } + + public void setTravelInfo(List travelInfo) { + this.travelInfo = travelInfo; + } +} diff --git a/src/main/java/com/engine/htsc/lhccsq/pojo/ExistTravelInfoSpecific.java b/src/main/java/com/engine/htsc/lhccsq/pojo/ExistTravelInfoSpecific.java new file mode 100644 index 0000000..02ab46c --- /dev/null +++ b/src/main/java/com/engine/htsc/lhccsq/pojo/ExistTravelInfoSpecific.java @@ -0,0 +1,66 @@ +package com.engine.htsc.lhccsq.pojo; + +public class ExistTravelInfoSpecific { + // 餐费自理 + private String sfbc; + // 出发时间 + private String cfsj; + // 返回时间 + private String fhsj; + // 目的地 + private String mddgn; + + public ExistTravelInfoSpecific() { + } + + public ExistTravelInfoSpecific(String sfbc, String cfsj, String fhsj, String mddgn) { + this.sfbc = sfbc; + this.cfsj = cfsj; + this.fhsj = fhsj; + this.mddgn = mddgn; + } + + + + @Override + public String toString() { + return "ExistTravelInfoSpecific{" + + "sfbc='" + sfbc + '\'' + + ", cfsj='" + cfsj + '\'' + + ", fhsj='" + fhsj + '\'' + + ", mddgn='" + mddgn + '\'' + + '}'; + } + + public String getSfbc() { + return sfbc; + } + + public void setSfbc(String sfbc) { + this.sfbc = sfbc; + } + + public String getCfsj() { + return cfsj; + } + + public void setCfsj(String cfsj) { + this.cfsj = cfsj; + } + + public String getFhsj() { + return fhsj; + } + + public void setFhsj(String fhsj) { + this.fhsj = fhsj; + } + + public String getMddgn() { + return mddgn; + } + + public void setMddgn(String mddgn) { + this.mddgn = mddgn; + } +} diff --git a/src/main/java/com/engine/htsc/lhccsq/service/ComputerSubsidyService.java b/src/main/java/com/engine/htsc/lhccsq/service/ComputerSubsidyService.java new file mode 100644 index 0000000..0169a1b --- /dev/null +++ b/src/main/java/com/engine/htsc/lhccsq/service/ComputerSubsidyService.java @@ -0,0 +1,8 @@ +package com.engine.htsc.lhccsq.service; + +import java.util.Map; + +public interface ComputerSubsidyService { + + Map computeExsitSubsidy(); +} diff --git a/src/main/java/com/engine/htsc/lhccsq/service/impl/ComputerSubsidyServiceImpl.java b/src/main/java/com/engine/htsc/lhccsq/service/impl/ComputerSubsidyServiceImpl.java new file mode 100644 index 0000000..9f86f51 --- /dev/null +++ b/src/main/java/com/engine/htsc/lhccsq/service/impl/ComputerSubsidyServiceImpl.java @@ -0,0 +1,225 @@ +package com.engine.htsc.lhccsq.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.engine.core.impl.Service; +import com.engine.htsc.lhccsq.pojo.ExistTravelInfo; +import com.engine.htsc.lhccsq.pojo.ExistTravelInfoSpecific; +import com.engine.htsc.lhccsq.service.ComputerSubsidyService; +import weaver.conn.RecordSet; +import weaver.conn.RecordSetTrans; +import weaver.general.Util; +import weaver.workflow.logging.Logger; +import weaver.workflow.logging.LoggerFactory; + +import java.text.SimpleDateFormat; +import java.util.*; + +public class ComputerSubsidyServiceImpl extends Service implements ComputerSubsidyService { + private Logger logger = LoggerFactory.getLogger(this.getClass()); + + /** + * 特殊地区 + */ + private static String[] area = {"34", "112", "248", "246"}; + + /** + * 所有出差申请(2021-09-01至今,所有无自付费用带报销的联合出差申请),出差补贴重新计算,计算结果放入新字段(cb_bak)中 + * + * @return + */ + @Override + public Map computeExsitSubsidy() { + Map result = new HashMap<>(); + RecordSetTrans rst = new RecordSetTrans(); + rst.setAutoCommit(false); + logger.info("准备刷数据,此次刷数据的目的是所有出差申请(2021-09-01至今,所有无自付费用带报销的联合出差申请),出差补贴重新计算,计算结果放入新字段(cb_bak)中"); + String ccsqMainTable = getMainTableByWfUnNumber("ccsq"); + logger.info("获取的主表名是:" + ccsqMainTable); + if ("".equals(ccsqMainTable) || "error".equals(ccsqMainTable)) { + result.put("isSuccess", "false"); + result.put("message", "主表名获取异常,请检查日志"); + } else { + try { + // 获取所有需要刷新数据的联合出差申请流程,并将信息存储到ExistTravelInfo实体类中 + List existTravelInfos = getNeedUpdateInfo(ccsqMainTable); + logger.info("需要更新的数据有:" + JSONObject.toJSONString(existTravelInfos)); + for (ExistTravelInfo existTravelInfo : existTravelInfos) { + int btMoney = generateBtVal( + isSpecialPeople(existTravelInfo.getSfsbsx()), + existTravelInfo.getCcrgh(), + existTravelInfo.getCclxzxx(), + existTravelInfo.getTravelInfo()); + logger.info("计算的补贴金额是:" + btMoney); + String sql = "update " + ccsqMainTable + " set cb_bak = ? where requestid = ?"; + logger.info("即将执行的sql是:" + sql + "," + btMoney + "," + existTravelInfo.getRequestId()); + rst.executeUpdate(sql, btMoney, existTravelInfo.getRequestId()); + } + logger.info("更新完毕,即将提交"); + rst.commit(); + result.put("isSuccess", "true"); + result.put("message", "批量更新数据完成"); + } catch (Exception e) { + e.getMessage(); + logger.info(e.toString()); + result.put("isSuccess", "false"); + result.put("message", "批量更新数据时发生错误,请查看日志"); + } + } + return result; + } + + /** + * 获取所有需要刷新数据的联合出差申请流程,并将信息存储到ExistTravelInfo实体类中 + * 2021-09-01至今,所有无自付费用待报销的联合出差申请 + * + * @return + */ + public List getNeedUpdateInfo(String mainTableName) { + List existTravelInfos = new ArrayList<>(); + logger.info("获取所有需要刷新数据的联合出差申请流程,并将信息存储到ExistTravelInfo实体类中==============="); + logger.info("获取的主表名是:" + mainTableName); + RecordSet rs = new RecordSet(); + String sql = "select a.id,a.requestid,a.cclxzxx,b.ccrgh,b.sfsbsx," + + "listagg(c.sfbc,'&') as sfbcs,listagg(c.cfsj,'&') as cfsjs,listagg(c.fhsj,'&') as fhsjs,listagg(c.mddgn,'&') as mddgns " + + "from " + mainTableName + " a " + + "join " + mainTableName + "_dt2 b on a.id = b.mainid " + + "join " + mainTableName + "_dt4 c on a.id = c.mainid " + + "where ywzffydbx = 1 and ngrq > '2021-09-01 00:00' " + + "group by a.id,a.requestid,a.cclxzxx,b.ccrgh,b.sfsbsx"; + logger.info("即将执行的SQL是:" + sql); + rs.executeQuery(sql); + while (rs.next()) { + ExistTravelInfo existTravelInfo = new ExistTravelInfo(); + String requestid = Util.null2String(rs.getString("requestid")); + existTravelInfo.setRequestId(requestid); + existTravelInfo.setCclxzxx(Util.null2String(rs.getString("cclxzxx"))); + existTravelInfo.setCcrgh(Util.null2String(rs.getString("ccrgh"))); + existTravelInfo.setSfsbsx(Util.null2String(rs.getString("sfsbsx"))); + String sfbcs = Util.null2String(rs.getString("sfbcs")); + String cfsjs = Util.null2String(rs.getString("cfsjs")); + String fhsjs = Util.null2String(rs.getString("fhsjs")); + String mddgns = Util.null2String(rs.getString("mddgns")); + existTravelInfo.setTravelInfo(parseTravelInfo(sfbcs, cfsjs, fhsjs, mddgns, requestid)); + existTravelInfos.add(existTravelInfo); + } + return existTravelInfos; + } + + private List parseTravelInfo(String sfbcs, String cfsjs, String fhsjs, String mddgns, String requestid) { + logger.info("进入出差信息解析方法,接收到的参数是:sfbcs:" + sfbcs + ",cfsjs:" + cfsjs + ",fhsjs:" + fhsjs + ",mddgns:" + mddgns); + List existTravelInfoSpecifics = new ArrayList<>(); + String[] sfbcList = sfbcs.split("&"); + String[] cfsjsList = cfsjs.split("&"); + String[] fhsjsList = fhsjs.split("&"); + String[] mddgnsList = mddgns.split("&"); + if (sfbcList.length == cfsjsList.length && sfbcList.length == fhsjsList.length && sfbcList.length == mddgnsList.length) { + for (int i = 0; i < sfbcList.length; i++) { + ExistTravelInfoSpecific existTravelInfoSpecific = new ExistTravelInfoSpecific(); + existTravelInfoSpecific.setSfbc(sfbcList[i]); + existTravelInfoSpecific.setCfsj(cfsjsList[i]); + existTravelInfoSpecific.setFhsj(fhsjsList[i]); + existTravelInfoSpecific.setMddgn(mddgnsList[i]); + existTravelInfoSpecifics.add(existTravelInfoSpecific); + } + logger.info("流程" + requestid + "的解析结果为:" + JSONObject.toJSONString(existTravelInfoSpecifics)); + return existTravelInfoSpecifics; + } else { + logger.info("明细表4中存在空值字段,请检查,requestid:" + requestid); + return null; + } + } + + private String getMainTableByWfUnNumber(String unnumber) { + RecordSet rs = new RecordSet(); + String sql = ""; + logger.info("================获取联合出差申请的主表名============"); + sql = "select distinct(t1.tablename) from workflow_bill t1,workflow_base t2 where t1.id =t2.formid and t2.UNNUMBER = ?"; + logger.info("即将执行的sql是:" + sql); + rs.executeQuery(sql, unnumber); + if (rs.getCounts() != 1) { + return "error"; + } else { + if (rs.next()) { + return Util.null2String(rs.getString("tablename")); + } else { + return ""; + } + } + } + + /** + * 判断是否是特殊人员 + * + * @return 是否是特殊人员 + */ + private boolean isSpecialPeople(String sfsbsx) { + return "0".equals(sfsbsx); + } + + private int generateBtVal(boolean isSpecial, String ccrgh, String cclxzxx, List travelInfos) { + logger.info("进入具体计算补贴的方法=================================="); + int bt = 0; + // 1、如果是实习生,则没有补贴 + logger.info("获取的出差人工号是:" + ccrgh); + if (ccrgh.contains("sx")) { + bt = 0; + } else if (!isSpecial) { + // 不是特殊人员 + int ts = 0; + // 获取出差信息,对应G1216 + logger.info("需要进行补贴计算金额的差旅信息是:" + JSONObject.toJSONString(travelInfos)); + if (travelInfos != null) { + for (int i = 0; i < travelInfos.size(); i++) { + ExistTravelInfoSpecific travelInfo = travelInfos.get(i); + String cfsj = travelInfo.getCfsj(); + String fhsj = travelInfo.getFhsj(); + String mddgn = travelInfo.getMddgn(); + String sfbc = travelInfo.getSfbc(); + // 首条数据天数+1 + if (i == 0) { + ts = (int) (1 + getDaysBetween(cfsj, fhsj)); + } else { + if ("0".equals(sfbc)) { + ts = (int) getDaysBetween(cfsj, fhsj); + } else { + ts = (int) (1 + getDaysBetween(cfsj, fhsj)); + } + } + // 出差类型 业务 + if ("3".equals(cclxzxx)) { + bt += ts * 50; + } else if (!"".equals(mddgn)) { + String city = mddgn.split(",")[1]; + String procince = mddgn.split(",")[0]; + List areas = Arrays.asList(area); + if (areas.contains(city) || "282".equals(procince)) { + bt += ts * 100; + } else { + bt += ts * 80; + } + } + } + } + + } + return bt; + } + + /** + * 获取两个时间点之间的天数 + * + * @param var0 + * @param var1 + * @return + */ + private static long getDaysBetween(String var0, String var1) { + SimpleDateFormat var2 = new SimpleDateFormat("yyyy-MM-dd"); + try { + Date var3 = var2.parse(var1); + Date var4 = var2.parse(var0); + return (var3.getTime() - var4.getTime()) / 86400000L; + } catch (Exception var5) { + return 0L; + } + } +} diff --git a/src/main/java/com/engine/htsc/lhccsq/web/ComputeTravelSubsidy.java b/src/main/java/com/engine/htsc/lhccsq/web/ComputeTravelSubsidy.java new file mode 100644 index 0000000..95ab5e0 --- /dev/null +++ b/src/main/java/com/engine/htsc/lhccsq/web/ComputeTravelSubsidy.java @@ -0,0 +1,34 @@ +package com.engine.htsc.lhccsq.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.lhccsq.service.ComputerSubsidyService; +import com.engine.htsc.lhccsq.service.impl.ComputerSubsidyServiceImpl; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.Map; + +public class ComputeTravelSubsidy { + + private ComputerSubsidyService getService(){ + return ServiceUtil.getService(ComputerSubsidyServiceImpl.class); + } + + /** + * 所有出差申请(2021-09-01至今,所有无自付费用带报销的联合出差申请),出差补贴重新计算,计算结果放入新字段(cb_bak)中 + * @param request + * @return + */ + @GET + @Path("/computeExsitSubsidy") + @Produces({MediaType.APPLICATION_JSON}) + public String computeExsitSubsidy(@Context HttpServletRequest request){ + Map result = getService().computeExsitSubsidy(); + return JSONObject.toJSONString(result); + } +} diff --git a/src/main/java/com/engine/htsc/lhclbx/dao/LhclDataRecoverCMD.java b/src/main/java/com/engine/htsc/lhclbx/dao/LhclDataRecoverCMD.java new file mode 100644 index 0000000..ab01938 --- /dev/null +++ b/src/main/java/com/engine/htsc/lhclbx/dao/LhclDataRecoverCMD.java @@ -0,0 +1,195 @@ +package com.engine.htsc.lhclbx.dao; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import com.engine.integration.util.StringUtils; +import weaver.conn.RecordSet; +import weaver.conn.RecordSetDataSource; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.payment.WorkFlowNameConvertor; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.*; + +public class LhclDataRecoverCMD extends AbstractCommonCommand> { + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss"); + @Override + public BizLogContext getLogContext() { + return null; + } + + + public LhclDataRecoverCMD(User user, Map params) { + this.user = user; + this.params = params; + } + + @Override + public Map execute(CommandContext commandContext) { + Map back = new HashMap<>(); + List> mapList = new ArrayList<>(); + Map res = new HashMap<>(); + BaseBean bb = new BaseBean(); + String lclx = "fzjgclbx"; + String tablename = getTableName(lclx); + if ("".equals(tablename)){ + return back; + } + bb.writeLog("=======================YdbxModeDataCMD============================"); + String requestids = Util.null2String(params.get("requestids")); + String[] requestarr = requestids.split(","); + for (int i = 0; i < requestarr.length; i++) { + //判断是否全自付 + if(isFZF(requestarr[i], tablename)) { + writeLog("requestId:" + requestarr[i] + " 全是非自付费用 不写资金表"); + continue; + } + writeLog("requestId:" + requestarr[i] + " 开始写入资金系统表,差旅报销名:" + tablename); + Map map = getOAMainData(requestarr[i], tablename); + RecordSetDataSource rsdM = new RecordSetDataSource("FinanceM"); + String str = "select * from OAFKZJB t where t.OAFKZJB_OAID = '" + map.get("OAFKZJB_OAID") + "'"; + rsdM.execute(str); + if(rsdM.next()){ + continue; + } + String result = innserttable(map, "OAFKZJB"); + writeLog("requestId:" + requestarr[i] + " 写入资金中间表主表完成"); + if(!StringUtils.isBlank(result)){ + res.put(requestarr[i] ,result); + } + mapList.add(res); + } + back.put("result",mapList); + return back; + } + + /** + * 获取表名 + * @param lclx + * @return + */ + public static String getTableName(String lclx){ + RecordSet rs = new RecordSet(); + String sql = "select t2.tablename from workflow_base t1,workflow_bill t2 where t1.formid = t2.id and t1.UNNUMBER = ? and ISVALID = '1'"; + rs.executeQuery(sql,lclx); + if(rs.next()){ + return Util.null2String(rs.getString("tablename")); + }else { + return ""; + } + } + + /** + * 获取资金表主表数据 + * @param requestId + * @param mainTableName + * @return + */ + Map getOAMainData(String requestId, String mainTableName) { + RecordSet rs = new RecordSet(); + Map map = new HashMap<>(); + String sqlMain =""; + sqlMain = " select r.id ,r.requestid,r.lcbh,r.requestId,r.szbm,r.bz,r.ngsj,r.ngr ,d.DEPARTMENTNAME,d.DEPARTMENTCODE,s.LASTNAME,s.workcode " + + " from "+mainTableName+" r,hrmdepartment d,hrmresource s where r.szbm = d.id and s.id = r.ngr and REQUESTID = '"+requestId+"'"; + writeLog("requestId:"+requestId+" 关联查询查询主表sql:"+sqlMain); + rs.execute(sqlMain); + if(rs.next()){ + String mainId = Util.null2String(rs.getString("id")); + map.put("OAFKZJB_OAID", Util.null2String(rs.getString("lcbh"))); + map.put("OAFKZJB_OABH", WorkFlowNameConvertor.getEN_Lcbh(Util.null2String(rs.getString("lcbh")))); + map.put("OAFKZJB_ZDDW", Util.null2String(rs.getString("DEPARTMENTCODE"))); + map.put("OAFKZJB_DWBH", Util.null2String(rs.getString("DEPARTMENTCODE"))); + map.put("OAFKZJB_FKBMMC",Util.null2String(rs.getString("DEPARTMENTNAME"))); + map.put("OAFKZJB_BZ",Util.null2String(rs.getString("bz"))); + String timeStr = Util.null2String(rs.getString("ngsj")); + timeStr = timeStr + ":00"; + String[] timeStrs = timeStr.split(" "); + String[] dataStrs = timeStrs[0].split("-"); + map.put("OAFKZJB_SQRQ",dataStrs[0]+dataStrs[1]+dataStrs[2]); + map.put("OAFKZJB_SQSJ",timeStrs[1]); + map.put("OAFKZJB_JSZT","0"); + map.put("OAFKZJB_SQR",Util.null2String(rs.getString("LASTNAME"))); + map.put("OAFKZJB_SQRGH",Util.null2String(rs.getString("workcode"))); + String date = sdf.format(new Date()); + String[] newDates = date.split(" "); + map.put("OAFKZJB_BJRQ",newDates[0]); + map.put("OAFKZJB_BJSJ",newDates[1]); + } + return map; + } + + + public static String Lengthmax(String value,Integer sum){ + if("".equals(value)){ + return ""; + } + if(value.length()>sum){ + value=value.substring(0,sum-1); + } + return value; + } + + + //插入表 + public static String innserttable(Map mapvalue, String tablename){ + boolean flag=true; + String result = ""; + try { + String dttablename=""; + String dttablenvalue=""; + List list=new ArrayList<>(); + JAVATools.SetCmdwritelog("新表插入:","表名"+tablename); + for (Map.Entry entry : mapvalue.entrySet()) + { + String fieldname = Util.null2String(entry.getKey()); + String fieldvalue = Util.null2String(entry.getValue()); + JAVATools.SetCmdwritelog(" key: "+fieldname+" value:"+fieldvalue); + dttablename += dttablename == "" ? fieldname : "," + fieldname; + dttablenvalue += dttablenvalue == "" ? "'"+Lengthmax(fieldvalue.replace("\r\n",""),150)+"'" : ",'"+Lengthmax(fieldvalue.replace("\r\n",""),150)+"'"; + } + String sql = "insert into "+tablename+"("+dttablename+") values("+dttablenvalue+")"; + JAVATools.SetCmdwritelog(" sql: "+sql); + JAVATools.SetCmdwritelog(" sql: "+list.toString()); + + RecordSetDataSource rsdM = new RecordSetDataSource("FinanceM"); + flag = rsdM.execute(sql); +// rsdM.executeQueryWithDatasource(sql,null,new Object[]{list}); + }catch (Exception exo){ + flag=false; + exo.printStackTrace(); + result = exo.getMessage(); + new BaseBean().writeLog("插入明细表失败:"+exo.getMessage()); + } + return result; + } + + + /** + * 判断是否全自付 + * @param requestId + * @param mainTableName + * @return + */ + public boolean isFZF (String requestId, String mainTableName) { + RecordSet rs = new RecordSet(); + String querySql = " select t.xj from "+mainTableName+"_dt12 t where t.mainid in ( select id from "+mainTableName+" t where t.requestid = '"+requestId+"' )"; + rs.writeLog("requestId:"+requestId+" 查询是否为全部非自付SQL:"+querySql); + BigDecimal totalZFB = new BigDecimal("0.00"); + rs.executeQuery(querySql); + while(rs.next()) { + BigDecimal tempB = (new BigDecimal(StringUtils.isEmpty(rs.getString("xj")) ? 0.00 :Double.parseDouble(rs.getString("xj")))).setScale(2, BigDecimal.ROUND_HALF_UP); + rs.writeLog("requestId:"+requestId+" 查询是否为全部非自付小计金额tempB:"+tempB); + totalZFB = (totalZFB.add(tempB).setScale(2, BigDecimal.ROUND_HALF_UP)); + } + rs.writeLog("requestId:"+requestId+" 自付费用汇总金额 totalZFB:"+totalZFB); + if(totalZFB.compareTo(BigDecimal.ZERO)==0) { + return true;//没有自付费用 + } + return false; + } +} diff --git a/src/main/java/com/engine/htsc/lhclbx/service/LhclDataRecoverService.java b/src/main/java/com/engine/htsc/lhclbx/service/LhclDataRecoverService.java new file mode 100644 index 0000000..7e58db7 --- /dev/null +++ b/src/main/java/com/engine/htsc/lhclbx/service/LhclDataRecoverService.java @@ -0,0 +1,8 @@ +package com.engine.htsc.lhclbx.service; + +import java.util.Map; + +public interface LhclDataRecoverService { + + Map dataRecover(Map params); +} diff --git a/src/main/java/com/engine/htsc/lhclbx/service/LhclDataRecoverServiceImpl.java b/src/main/java/com/engine/htsc/lhclbx/service/LhclDataRecoverServiceImpl.java new file mode 100644 index 0000000..0306a14 --- /dev/null +++ b/src/main/java/com/engine/htsc/lhclbx/service/LhclDataRecoverServiceImpl.java @@ -0,0 +1,14 @@ +package com.engine.htsc.lhclbx.service; + +import com.engine.core.impl.Service; +import com.engine.htsc.lhclbx.dao.LhclDataRecoverCMD; +import com.engine.htsc.zbclbx.dao.lcIsGledCMD; + +import java.util.Map; + +public class LhclDataRecoverServiceImpl extends Service implements LhclDataRecoverService{ + @Override + public Map dataRecover(Map params) { + return commandExecutor.execute(new LhclDataRecoverCMD(user, params)); + } +} diff --git a/src/main/java/com/engine/htsc/lhclbx/web/LhclDataRecover.java b/src/main/java/com/engine/htsc/lhclbx/web/LhclDataRecover.java new file mode 100644 index 0000000..d06e53b --- /dev/null +++ b/src/main/java/com/engine/htsc/lhclbx/web/LhclDataRecover.java @@ -0,0 +1,48 @@ +package com.engine.htsc.lhclbx.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.lhclbx.service.LhclDataRecoverService; +import com.engine.htsc.lhclbx.service.LhclDataRecoverServiceImpl; +import com.engine.htsc.zbclbx.service.lcIsGledService; +import com.engine.htsc.zbclbx.service.lcIsGledServiceImpl; +import oracle.jdbc.proxy.annotation.Post; +import weaver.general.BaseBean; +import weaver.general.Util; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +public class LhclDataRecover { + private LhclDataRecoverService getService(){ + return ServiceUtil.getService(LhclDataRecoverServiceImpl.class); + } + + @Post + @Path("/datarecover") + @Produces({MediaType.APPLICATION_JSON}) + public String DataRecover(@Context HttpServletRequest request, @Context HttpServletResponse response){ + BaseBean bb = new BaseBean(); + bb.writeLog("====================DataRecover check in ======================="); + Map result = new HashMap<>(); + String requestids = Util.null2String(request.getParameter("requestids")); + bb.writeLog("============获取的requestids参数为:"+requestids); + if("".equals(requestids)){ + result.put("code","500"); + result.put("message","requestids参数为空"); + }else { + Map params = new HashMap<>(); + params.put("requestids",requestids); + result = getService().dataRecover(params); + result.put("code","200"); + result.put("message","success"); + } + return JSONObject.toJSONString(result); + } +} diff --git a/src/main/java/com/engine/htsc/movereimburse/dao/MoveReimbursedCMD.java b/src/main/java/com/engine/htsc/movereimburse/dao/MoveReimbursedCMD.java new file mode 100644 index 0000000..5cce648 --- /dev/null +++ b/src/main/java/com/engine/htsc/movereimburse/dao/MoveReimbursedCMD.java @@ -0,0 +1,99 @@ +package com.engine.htsc.movereimburse.dao; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.conn.RecordSet; +import weaver.general.Util; + +import java.util.*; + +public class MoveReimbursedCMD extends AbstractCommonCommand> { + private Log log = LogFactory.getLog(this.getClass()); + private String invInfo; + private String requestId; + + @Override + public BizLogContext getLogContext() { + return null; + } + + public MoveReimbursedCMD(String invInfo, String requestId) { + this.invInfo = invInfo; + this.requestId = requestId; + } + + @Override + public Map execute(CommandContext commandContext) { + log.info("获取的参数是:" + invInfo + ", " + requestId); + List wfInvoiceInfo = invString2List(invInfo); + // 查询流程内的发票是否与发票关联关系表中存在连号发票 + Map checDbResult = checkwithdb(wfInvoiceInfo); + log.info("检查关联关系表的结果是:" + JSONObject.toJSONString(checDbResult)); + return checDbResult; + } + + private List invString2List(String invStringInfo) { + log.info("接收的发票数据为:" + invStringInfo); + List wfInvoiceInfo = new ArrayList<>(); + JSONArray array = JSONObject.parseArray(invStringInfo); + for (int i = 0; i < array.size(); i++) { + wfInvoiceInfo.add(Util.null2String(array.get(i))); + } + log.info("解析的结果是:" + JSONObject.toJSONString(wfInvoiceInfo)); + return wfInvoiceInfo; + } + + /** + * 查看本流程中的发票是否与关联关系表中的发票存在连号关系 + * + * @param wfInvoiceInfo 流程发票信息 + * 连号规则:发票代码相同,发票号码+1 + * @return Map + */ + public Map checkwithdb(List wfInvoiceInfo) { + RecordSet rs = new RecordSet(); + String sql; + Map result = new HashMap<>(); + StringBuilder coliedMsg = new StringBuilder(); + try { + for (String invoiceInfo : wfInvoiceInfo) { + log.info("invoiceInfo: " + invoiceInfo); + String fpdm = invoiceInfo.split("@")[0]; + String fphm = invoiceInfo.split("@")[1]; + log.info("fpdm: " + fpdm + ", fphm: " + fphm); + if (StringUtils.isNotEmpty(fpdm) && StringUtils.isNotEmpty(fphm)) { + String status1 = 0 == fphm.indexOf("0") ? "0" + Util.null2String(Long.parseLong(fphm) - 1) : Util.null2String(Long.parseLong(fphm) - 1); + String status2 = 0 == fphm.indexOf("0") ? "0" + Util.null2String(Long.parseLong(fphm)) : Util.null2String(Long.parseLong(fphm)); + String status3 = 0 == fphm.indexOf("0") ? "0" + Util.null2String(Long.parseLong(fphm) + 1) : Util.null2String(Long.parseLong(fphm) + 1); + String[] fphms = {status1, status2, status3}; + sql = "select COUNT(*) as counts from uf_pjxxgl where fpdm = ? and fphm = ? and requestid != ?"; + for (String theFphm : fphms) { + log.info("theFphm: " + theFphm); + rs.executeQuery(sql, fpdm, theFphm, requestId); + if (rs.next()) { + boolean coliedOne = "0".equals(Util.null2String(rs.getString("counts"))); + if (!coliedOne) { + coliedMsg.append(fpdm).append("_").append(fphm).append("存在连号发票;"); + break; + } + } + } + } + } + result.put("status", StringUtils.isEmpty(coliedMsg.toString()) ? "true" : "false"); + result.put("msg", coliedMsg.toString()); + } catch (Exception e) { + log.info("检查流程与发票关联关系表连号关系中发生错误"); + log.info(e.getMessage()); + result.put("status", "error"); + result.put("msg", "连号判断时出现错误,请检查"); + } + return result; + } +} \ No newline at end of file diff --git a/src/main/java/com/engine/htsc/movereimburse/service/MoveReimbursedService.java b/src/main/java/com/engine/htsc/movereimburse/service/MoveReimbursedService.java new file mode 100644 index 0000000..c0496ee --- /dev/null +++ b/src/main/java/com/engine/htsc/movereimburse/service/MoveReimbursedService.java @@ -0,0 +1,13 @@ +package com.engine.htsc.movereimburse.service; + +import java.util.Map; + +public interface MoveReimbursedService { + /** + * 获取连号发票信息 + * @param invInfo 发票信息 + * @param requestId 流程请求id + * @return Map + */ + Map getColiedInvInfo(String invInfo, String requestId); +} diff --git a/src/main/java/com/engine/htsc/movereimburse/service/impl/MoveReimbursedServiceImpl.java b/src/main/java/com/engine/htsc/movereimburse/service/impl/MoveReimbursedServiceImpl.java new file mode 100644 index 0000000..ea39f37 --- /dev/null +++ b/src/main/java/com/engine/htsc/movereimburse/service/impl/MoveReimbursedServiceImpl.java @@ -0,0 +1,14 @@ +package com.engine.htsc.movereimburse.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.movereimburse.dao.MoveReimbursedCMD; +import com.engine.htsc.movereimburse.service.MoveReimbursedService; + +import java.util.Map; + +public class MoveReimbursedServiceImpl extends Service implements MoveReimbursedService { + @Override + public Map getColiedInvInfo(String invInfo, String requestId) { + return commandExecutor.execute(new MoveReimbursedCMD(invInfo, requestId)); + } +} diff --git a/src/main/java/com/engine/htsc/movereimburse/web/MoveReimbursedAction.java b/src/main/java/com/engine/htsc/movereimburse/web/MoveReimbursedAction.java new file mode 100644 index 0000000..5896d5a --- /dev/null +++ b/src/main/java/com/engine/htsc/movereimburse/web/MoveReimbursedAction.java @@ -0,0 +1,38 @@ +package com.engine.htsc.movereimburse.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.movereimburse.service.MoveReimbursedService; +import com.engine.htsc.movereimburse.service.impl.MoveReimbursedServiceImpl; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.general.Util; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; + +public class MoveReimbursedAction { + private Log log = LogFactory.getLog(this.getClass()); + + private MoveReimbursedService getService() { + return ServiceUtil.getService(MoveReimbursedServiceImpl.class); + } + + @POST + @Path("/getColiedInvInfo") + @Produces({MediaType.APPLICATION_JSON}) + public String coliedInvoice(@Context HttpServletRequest request) { + log.info("========================== getColiedInvInfo start =========================="); + String invInfo = Util.null2String(request.getParameter("invInfo")); + String requestId = Util.null2String(request.getParameter("requestId")); + log.info("invInfo: " + invInfo + ", requestId: " + requestId); + String result = JSONObject.toJSONString(getService().getColiedInvInfo(invInfo, requestId)); + log.info("即将返回给前端的参数是:" + result); + log.info("========================== getColiedInvInfo end =========================="); + return result; + } +} diff --git a/src/main/java/com/engine/htsc/mpsq/ExcelListener.java b/src/main/java/com/engine/htsc/mpsq/ExcelListener.java new file mode 100644 index 0000000..43452eb --- /dev/null +++ b/src/main/java/com/engine/htsc/mpsq/ExcelListener.java @@ -0,0 +1,20 @@ +package com.engine.htsc.mpsq; + +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; + +import java.util.ArrayList; +import java.util.List; + +public class ExcelListener extends AnalysisEventListener { + List list = new ArrayList(); + @Override + public void invoke(MpsqEntity mpsqEntity, AnalysisContext analysisContext) { + list.add(mpsqEntity); + } + + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + + } +} diff --git a/src/main/java/com/engine/htsc/mpsq/MpsqEntity.java b/src/main/java/com/engine/htsc/mpsq/MpsqEntity.java new file mode 100644 index 0000000..619c4a7 --- /dev/null +++ b/src/main/java/com/engine/htsc/mpsq/MpsqEntity.java @@ -0,0 +1,165 @@ +package com.engine.htsc.mpsq; + +import com.alibaba.excel.annotation.ExcelProperty; + +public class MpsqEntity { + @ExcelProperty("序号") + private Integer xh;//序号 + @ExcelProperty("姓名") + private String xm;//姓名 + @ExcelProperty("英文名") + private String ywm;//英文名 + @ExcelProperty("部门") + private String bm;// 部门 + @ExcelProperty("部门英文名") + private String bmywm;// 部门英文名 + @ExcelProperty("职务") + private String zw;// 职务 + @ExcelProperty("职务英文名") + private String zwywm;// 职务英文名 + @ExcelProperty("联系地址") + private String lxdz;// 联系地址 + @ExcelProperty("联系地址英文") + private String lxdzyw;//联系地址英文 + @ExcelProperty("固定电话") + private String gddh;// 固定电话 + @ExcelProperty("手机") + private String sj;// 手机 + @ExcelProperty("传真") + private String cz;// 传真 + @ExcelProperty("Email") + private String email;//email + @ExcelProperty("印数(盒)") + private String ys;// 印数(盒) + public Integer getXh() { + return xh; + } + + public void setXh(Integer xh) { + this.xh = xh; + } + + public String getXm() { + return xm; + } + + public void setXm(String xm) { + this.xm = xm; + } + + public String getYwm() { + return ywm; + } + + public void setYwm(String ywm) { + this.ywm = ywm; + } + + public String getBm() { + return bm; + } + + public void setBm(String bm) { + this.bm = bm; + } + + public String getBmywm() { + return bmywm; + } + + public void setBmywm(String bmywm) { + this.bmywm = bmywm; + } + + public String getZw() { + return zw; + } + + public void setZw(String zw) { + this.zw = zw; + } + + public String getZwywm() { + return zwywm; + } + + public void setZwywm(String zwywm) { + this.zwywm = zwywm; + } + + public String getLxdz() { + return lxdz; + } + + public void setLxdz(String lxdz) { + this.lxdz = lxdz; + } + + public String getLxdzyw() { + return lxdzyw; + } + + public void setLxdzyw(String lxdzyw) { + this.lxdzyw = lxdzyw; + } + + public String getGddh() { + return gddh; + } + + public void setGddh(String gddh) { + this.gddh = gddh; + } + + public String getSj() { + return sj; + } + + public void setSj(String sj) { + this.sj = sj; + } + + public String getCz() { + return cz; + } + + public void setCz(String cz) { + this.cz = cz; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getYs() { + return ys; + } + + public void setYs(String ys) { + this.ys = ys; + } + + @Override + public String toString() { + return "MpsqEntity{" + + "xh=" + xh + + ", xm='" + xm + '\'' + + ", ywm='" + ywm + '\'' + + ", bm='" + bm + '\'' + + ", bmywm='" + bmywm + '\'' + + ", zw='" + zw + '\'' + + ", zwywm='" + zwywm + '\'' + + ", lxdz='" + lxdz + '\'' + + ", lxdzyw='" + lxdzyw + '\'' + + ", gddh='" + gddh + '\'' + + ", sj='" + sj + '\'' + + ", cz='" + cz + '\'' + + ", email='" + email + '\'' + + ", ys='" + ys + '\'' + + '}'; + } +} diff --git a/src/main/java/com/engine/htsc/mpsq/service/MpsqService.java b/src/main/java/com/engine/htsc/mpsq/service/MpsqService.java new file mode 100644 index 0000000..f7370c0 --- /dev/null +++ b/src/main/java/com/engine/htsc/mpsq/service/MpsqService.java @@ -0,0 +1,17 @@ +package com.engine.htsc.mpsq.service; + +import com.engine.htsc.mpsq.MpsqEntity; + +import javax.servlet.http.HttpServletResponse; +import java.io.OutputStream; +import java.util.List; +import java.util.Map; + +public interface MpsqService { + List getDetailByExcel(Map request2Map); + + String getExportExcel(Map request2Map, HttpServletResponse response); + + boolean deleteFile(String path); +// void getExportExcel(Map request2Map); +} diff --git a/src/main/java/com/engine/htsc/mpsq/service/impl/MpsqServiceImpl.java b/src/main/java/com/engine/htsc/mpsq/service/impl/MpsqServiceImpl.java new file mode 100644 index 0000000..014482d --- /dev/null +++ b/src/main/java/com/engine/htsc/mpsq/service/impl/MpsqServiceImpl.java @@ -0,0 +1,163 @@ +package com.engine.htsc.mpsq.service.impl; + +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.metadata.Sheet; +import com.alibaba.excel.support.ExcelTypeEnum; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.engine.core.impl.Service; +import com.engine.htsc.mpsq.ExcelListener; +import com.engine.htsc.mpsq.MpsqEntity; +import com.engine.htsc.mpsq.service.MpsqService; +import com.engine.htsc.payment.pojo.HTPaymentCostDetail; +import org.apache.commons.lang3.StringUtils; +import org.apache.pdfbox.io.IOUtils; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import weaver.conn.RecordSet; +import weaver.conn.aop.RecordSetAop; +import weaver.file.ImageFileManager; +import weaver.general.Util; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.comInfo.PropBean; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class MpsqServiceImpl extends Service implements MpsqService { + @Override + public List getDetailByExcel(Map params) { + JAVATools.SetCmdwritelog("-------名片申请Excel解析文件参数:-------" + params.toString()); + ArrayList result = new ArrayList<>(); + List list = null; + RecordSet rs = new RecordSet(); + String fileIds = (String) params.get("fileIds"); + if(StringUtils.isNotBlank(fileIds)){ + if(fileIds.contains(",")){ + String[] split = fileIds.split(","); +// for (String fileId :split) { + String fileId =split[split.length-1] ; + if(StringUtils.isNotBlank(fileId)){ + String sql = "select * from docimagefile where docid = " + fileId; + rs.execute(sql); + if(rs.next()){ + InputStream inputStream = ImageFileManager.getInputStreamById(Integer.parseInt(rs.getString("imagefileid"))); + list = EasyExcel.read(inputStream, MpsqEntity.class, new ExcelListener()).sheet().doReadSync(); +// result.addAll(list); + JAVATools.SetCmdwritelog("list的长度"+list.size()); + JAVATools.SetCmdwritelog("list的内容"+list.toString()); + } + } + + +// } + }else{ + String sql = "select * from docimagefile where docid = " + fileIds; + rs.execute(sql); + if(rs.next()){ + InputStream inputStream = ImageFileManager.getInputStreamById(Integer.parseInt(rs.getString("imagefileid"))); + list = EasyExcel.read(inputStream, MpsqEntity.class, new ExcelListener()).sheet().doReadSync(); + JAVATools.SetCmdwritelog("list的长度"+list.size()); + JAVATools.SetCmdwritelog("list的内容"+list.toString()); + } + + } + } + + + return list; + } + + @Override + public String getExportExcel(Map map, HttpServletResponse response) { +// public void getExportExcel(Map map) { + OutputStream outputStream = null; + String path=null; + String requestid = (String)map.get("requestid"); + JAVATools.writelog("名片申请导出 ids="+requestid); + RecordSet rs = new RecordSet(); + PropBean pb = new PropBean(); + if(StringUtils.isNotBlank(requestid)){ + String mainMpsqTableName = pb.getPropName("mainMpsqTableName"); + String mainSql = "select * from " + mainMpsqTableName + " where requestid = " + requestid; + JAVATools.writelog("名片申请主表sql="+mainSql); + rs.execute(mainSql); + rs.next(); + String dtMpsqTableName = pb.getPropName("dtMpsqTableName"); + String sql = "select * from "+dtMpsqTableName+" where mainid = " + rs.getString("id"); + JAVATools.writelog("名片申请明细表sql="+sql); + rs.execute(sql); + ArrayList list = new ArrayList<>(); + int i = 1; + while(rs.next()){ + MpsqEntity entity = new MpsqEntity(); + entity.setXh(i++); + entity.setXm(rs.getString("xm")); + entity.setYwm(rs.getString("ywm")); + entity.setBm(rs.getString("bm")); + entity.setBmywm(rs.getString("bmywm")); + entity.setZw(rs.getString("zw")); + entity.setZwywm(rs.getString("zwywm")); + entity.setLxdz(rs.getString("lxdz")); + entity.setLxdzyw(rs.getString("lxdzyw")); + entity.setGddh(rs.getString("gddh")); + entity.setSj(rs.getString("sj")); + entity.setCz(rs.getString("cz")); + entity.setEmail(rs.getString("email")); + entity.setYs(rs.getString("ys")); + list.add(entity); + } + JAVATools.writelog("名片申请list="+list.toString()); + ExcelWriter excelWriter = null; + try { +// outputStream = response.getOutputStream(); + Date date = new Date(); + String dataForm = new SimpleDateFormat("yyyyMMdd").format(date); + path="/app/ecology/filesystem/mpsq/"+dataForm; +// 如果不存在,创建文件夹 + File f = new File(path); + if(!f.exists()){ + f.mkdirs(); + } + path = path+"/"+System.currentTimeMillis()+"mpsq.xlsx"; + outputStream = new FileOutputStream(path); + excelWriter = EasyExcel.write(outputStream, MpsqEntity.class).build(); + WriteSheet writeSheet = EasyExcel.writerSheet("名片申请").build(); + excelWriter.write(list, writeSheet); + JAVATools.writelog("名片申请导出完成"); + outputStream.flush(); +// outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + // 千万别忘记finish 会帮忙关闭流 + if (excelWriter != null) { + excelWriter.finish(); + } + + } + + } + return path; + } + + @Override + public boolean deleteFile(String path) { + boolean flag = false; + JAVATools.writelog("名片删除文件路径"+path); + File file = new File(path); + if(file.isFile() && file.exists()){ + file.delete(); + JAVATools.writelog("名片删除文件完成"); + return true; + } + return false; + } +} diff --git a/src/main/java/com/engine/htsc/mpsq/web/MpsqAction.java b/src/main/java/com/engine/htsc/mpsq/web/MpsqAction.java new file mode 100644 index 0000000..de42929 --- /dev/null +++ b/src/main/java/com/engine/htsc/mpsq/web/MpsqAction.java @@ -0,0 +1,124 @@ +package com.engine.htsc.mpsq.web; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.mpsq.MpsqEntity; +import com.engine.htsc.mpsq.service.MpsqService; +import com.engine.htsc.mpsq.service.impl.MpsqServiceImpl; +import oracle.jdbc.proxy.annotation.Post; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.io.OutputStream; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class MpsqAction { + private MpsqService getService(User user) { + return ServiceUtil.getService(MpsqServiceImpl.class, user); + } + @GET + @Path("/getDetailByExcel") + @Produces({MediaType.APPLICATION_JSON}) + public String getDetailByExcel(@Context HttpServletRequest request, + @Context HttpServletResponse response){ + HashMap map = new HashMap<>(); + try { + User user = HrmUserVarify.getUser(request, response); + List list = this.getService(user).getDetailByExcel(ParamUtil.request2Map(request)); +// List collect = list.stream().filter(distinctByKey(MpsqEntity::getSj)).collect(Collectors.toList()); + map.put("code",200); + map.put("msg","success"); + map.put("data",list); + + return JSON.toJSONString(map); + } catch (Exception e) { + e.printStackTrace(); + map.put("code",500); + map.put("msg",e.getMessage()); + map.put("data",null); + + return JSON.toJSONString(map); + } + + } + private Predicate distinctByKey(Function keyExtractor) { + Map seen = new ConcurrentHashMap<>(); + return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; + } + + + @GET + @Path("/getExportExcel") + @Produces({MediaType.APPLICATION_JSON}) +// @Produces({MediaType.APPLICATION_OCTET_STREAM}) + public String getExportExcel(@Context HttpServletRequest request, + @Context HttpServletResponse response){ + + //添加响应头信息 +// response.setHeader("Content-disposition", "attachment; filename=" + "mpsq.xlsx"); +// response.setContentType("application/vnd.ms-excel;charset=UTF-8");//设置类型 +// response.setHeader("Pragma", "No-cache");//设置头 +// response.setHeader("Cache-Control", "no-cache");//设置头 +// response.setDateHeader("Expires", 0);//设置日期头 + HashMap map = new HashMap<>(); + try { + User user = HrmUserVarify.getUser(request, response); + String path = this.getService(user).getExportExcel(ParamUtil.request2Map(request), response); + map.put("code","200"); + map.put("msg","success"); + map.put("data",path); + }catch (Exception e){ + map.put("code","500"); + map.put("msg",e.getMessage()); + map.put("data",""); + } + return JSONObject.toJSONString(map); + + + } + @GET + @Path("/deleteFile") + @Produces({MediaType.APPLICATION_JSON}) + public String deleteFile(@Context HttpServletRequest request, + @Context HttpServletResponse response){ + HashMap map = new HashMap<>(); + try { + User user = HrmUserVarify.getUser(request, response); + String path = request.getParameter("path"); + boolean flag = this.getService(user).deleteFile(path); + if(flag){ + map.put("code","200"); + map.put("msg","success"); + }else{ + map.put("code","500"); + map.put("msg","error"); + } + + + }catch (Exception e){ + map.put("code","500"); + map.put("msg",e.getMessage()); + + } + return JSONObject.toJSONString(map); + + + } +} diff --git a/src/main/java/com/engine/htsc/otherSystemWorkflow/GetOtherSystemWorkFlowAction.java b/src/main/java/com/engine/htsc/otherSystemWorkflow/GetOtherSystemWorkFlowAction.java new file mode 100644 index 0000000..44bb088 --- /dev/null +++ b/src/main/java/com/engine/htsc/otherSystemWorkflow/GetOtherSystemWorkFlowAction.java @@ -0,0 +1,104 @@ +package com.engine.htsc.otherSystemWorkflow; + + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.engine.htsc.payment.util.HttpUtil; +import com.engine.htsc.trip.util.AjaxResult; +import org.apache.commons.lang3.ArrayUtils; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; + +import javax.ws.rs.Consumes; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class GetOtherSystemWorkFlowAction extends BaseBean { + + + /** + * 查询其他系统人员待办 + * @param request + * @return + */ + @POST + @Path("/getOtherSystemWorkFlow") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult>> getPortalTodoData(Map request){ + + Map apidatas = new HashMap(); + //获取用户 + String userId = Util.null2String(request.get("userId")); + String type = Util.null2String(request.get("type")).equals("")?"2":Util.null2String(request.get("type")); + //标题 + String requestName = Util.null2String(request.get("title")); + //流程编号 + String workFlowNum = Util.null2String(request.get("workFlowNum")); + //创建人 + String drafterName = Util.null2String(request.get("drafterName")); + int pageNumber = Integer.parseInt(Util.null2String(request.get("pageNumber"))); + int pageSize = Integer.parseInt(Util.null2String(request.get("pageSize"))); + + JSONObject jsonObject=new JSONObject(); + jsonObject.put("title",requestName); + jsonObject.put("workFlowNum",workFlowNum); + jsonObject.put("drafterName",drafterName); + jsonObject.put("pageNumber",pageNumber); + jsonObject.put("pageSize",pageSize); + jsonObject.put("userId",userId); + jsonObject.put("type",type); + + try { + RecordSet rs = new RecordSet(); + //查询接口 + String urlSql = "select xtmc,qqdz from UF_LCJKDZ where sfqy=0"; + rs.executeQuery(urlSql); + ArrayList urlList = new ArrayList<>(); + while (rs.next()){ + urlList.add(rs.getString("qqdz")); + } + JSONArray jsonArray = new JSONArray(); + for (String url:urlList){ + String responsestr = HttpUtil.postApplicationJson(url, jsonObject.toJSONString()); + if (!"".equals(responsestr)){ + JSONObject jsonObjectstr = JSONObject.parseObject(responsestr); + if(jsonObjectstr!=null&&jsonObject.size()>0){ + jsonArray.addAll(jsonObjectstr.getJSONArray("data")); + } + } + } + /** + * 分页 + */ + + apidatas.put("total",jsonArray.size()); + int min = (pageNumber-1)*pageSize; + int max = pageNumber*pageSize; + List dataList = new ArrayList(); + if (max > jsonArray.size()){ + max = jsonArray.size(); + } + for (int i =min;i request){ + + Map apidatas = new HashMap(); + //获取用户 + String userId = Util.null2String(request.get("userId")); + int num = Util.getIntValue(request.get("num")); + String type = Util.null2String(request.get("type")); + JSONObject jsonObject=new JSONObject(); + StringBuilder stringBuilder = new StringBuilder(); + //标题 + String requestName = Util.null2String(request.get("title")); + //流程编号 + String workFlowNum = Util.null2String(request.get("workFlowNum")); + //创建人 + String drafterName = Util.null2String(request.get("drafterName")); + //创建人ID + String drafterId = ""; + int pageNumber = Integer.parseInt(Util.null2String(request.get("pageNumber"))); + + int pageSize = Integer.parseInt(Util.null2String(request.get("pageSize"))); + + + + PropBean pb = new PropBean(); + String oahost = pb.getPropName("OAHOST"); + + + List> dataList = new ArrayList>(); + try { + RecordSet rs = new RecordSet(); + rs.executeQuery(" select * from hrmresource where workcode=? and (accounttype is null or accounttype='' or accounttype='0')",userId); + if(rs.next()){ + + int id = rs.getInt("id"); + User user = User.getUser(id,0); + String useridAll = id+""; + String belongtoids = user.getBelongtoids(); + if(!"".equals(belongtoids)){ + useridAll += ","+belongtoids; + } + + //查询接口 + // List liststr=gethideAttention(id); + apidatas.put("userCode",rs.getString("workcode")); + apidatas.put("userId",id); + apidatas.put("userName",user.getLastname()); + String getTotalNumSql = this.getTotalNumSql(useridAll, type, num, requestName, pageNumber, pageSize); + rs.execute(getTotalNumSql); + while(rs.next()) { + apidatas.put("total", Integer.valueOf(rs.getString("total"))); + } + if (!"".equals(drafterName) && drafterName != null){ + String nameConditionSql = "select id from hrmresource where lastname like '%"+drafterName+"%'"; + rs.execute(nameConditionSql); + while(rs.next()){ + stringBuilder.append(rs.getString("id")); + stringBuilder.append(","); + } + drafterId = stringBuilder.substring(0,stringBuilder.length()-1).toString(); + } + + ResourceComInfo resourceComInfo = new ResourceComInfo(); + String sql = getWorkflowDataSql(useridAll,type,num,requestName,drafterName,workFlowNum,pageNumber,pageSize,drafterId); + //System.out.println("data sql===="+sql); + rs.execute(sql); + while(rs.next()){ + //String workcode = Util.null2String(rs.getString("workcode")); + String userid = Util.null2String(rs.getString("userid")); + String creater = Util.null2String(rs.getString("creater")); + String uuid = Util.null2String(rs.getString("uuid")); + String workcode = resourceComInfo.getWorkcode(creater); + String lastname = resourceComInfo.getLastname(creater); + // String workcode=""; + // String lastname=""; + + String requestid = Util.null2String(rs.getString("requestid")); + String priority = Util.null2String(rs.getString("requestlevel")); + + if("0".equals(priority)){ + priority = "一般"; + }else if("1".equals(priority)){ + priority = "紧急"; + }else if("2".equals(priority)){ + priority = "特急"; + }else{ + priority = "一般"; + } + + String title = Util.null2String(rs.getString("requestname")); + String workflowname = Util.null2String(rs.getString("workflowname")); + //String lastname = Util.null2String(rs.getString("lastname")); + String action = WorkflowUtil.getNodeName(Util.null2String(rs.getString("currentnodeid"))) ; + String createTime = Util.null2String(rs.getString("createtime")); + String createDate = Util.null2String(rs.getString("createdate")); + String referencenumber = Util.null2String(rs.getString("requestmark")); + String workflowid = Util.null2String(rs.getString("workflowid")); + + Map itemMap = new HashMap(); + itemMap.put("createrCode",workcode); + itemMap.put("priority",priority); + String marks = "" ; + try{ + marks = getAttentionType(requestid,useridAll); + }catch (Exception e){ + + } + if(!"".equals(marks)){ + itemMap.put("title",marks + title); + }else{ + itemMap.put("title",title); + } + + itemMap.put("uuid",uuid); + itemMap.put("type",workflowname); + itemMap.put("createrName",lastname); + itemMap.put("action",action); + itemMap.put("createTime",createTime); + itemMap.put("createDate",createDate); + itemMap.put("referencenumber",referencenumber); + itemMap.put("fromSystem","数字办公平台"); + itemMap.put("requestid",requestid); + + long sjc = System.currentTimeMillis(); + //&_workflowid=4024&_workflowtype=&isovertime=0&preloadkey=1615367484147×tamp=1615367484147&_key=w3aabh +// itemMap.put("url",oahost+"workflow/request/ViewRequestForwardSPA.jsp?isrequest=1&requestid="+requestid+"" + +// "&f_weaver_belongto_userid="+userid+"&f_weaver_belongto_usertype=0&isovertime=0&preloadkey="+sjc+"×tamp="+sjc); + +// itemMap.put("url",oahost+"workflow/request/ViewRequestForwardSPA.jsp?isrequest=1&requestid="+requestid+"" + +// "&_workflowid="+workflowid+"&f_weaver_belongto_userid="+userid+"&f_weaver_belongto_usertype=0"+"&isovertime=0"); + itemMap.put("url",oahost); + + + // if(liststr==null || liststr.size()<=0 || !liststr.contains(requestid) || (liststr.contains(requestid) && !(type.equals("2") || type.equals("3")) ) ){ + dataList.add(itemMap); + // } + + + + } + apidatas.put("data",dataList); + } + + apidatas.put("success", true); + apidatas.put("status","200"); + } catch (Exception e) { + e.printStackTrace(); + apidatas.put("success", false); + } + return JSONObject.toJSONString(apidatas); + } + + /** + * 格局ids查询流程信息 + * @param request + * @return + */ + @POST + @Path("/getRequestData") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public String getRequestData(Map request){ + PropBean pb = new PropBean(); + String oahost = pb.getPropName("OAHOST"); + Map apidatas = new HashMap(); + String requestIds = Util.null2String(request.get("requestIds")); + String xtmc = Util.null2String(request.get("xtmc")); + + String sql = "select requestid,creatertype,requestname,requestmark,requestnamenew,creater,createdate,createtime from workflow_requestbase where requestid in (" + requestIds + ")"; + try { + RecordSet recordSet = new RecordSet(); + recordSet.executeSql(sql); + ResourceComInfo resourceComInfo = new ResourceComInfo(); + CustomerInfoComInfo comInfo = new CustomerInfoComInfo(); + List> dataList = new ArrayList<>(); + while (recordSet.next()){ + String requestid = Util.null2String(recordSet.getString("requestid")); + String creater = Util.null2String(recordSet.getString("creater")); + String createdate = Util.null2String(recordSet.getString("createdate")); + String createtime = Util.null2String(recordSet.getString("createtime")); + String requestname = Util.null2String(recordSet.getString("requestname")); + String createtype = Util.null2String(recordSet.getString("createtype")); + String requestmark = Util.null2String(recordSet.getString("requestmark")); + if ("1".equals(createtype)) { + creater = comInfo.getCustomerInfoname(creater); + } else { + creater = resourceComInfo.getResourcename(creater); + } + HashMap dataMap = new HashMap(); + dataMap.put("id", oahost+"^"+requestid); + dataMap.put("title", requestname); + dataMap.put("workflownum", requestmark); + dataMap.put("creater", creater); + dataMap.put("createdate", createdate + " " + createtime); + dataMap.put("url",oahost); + dataList.add(dataMap); + } + apidatas.put("data",dataList); + apidatas.put("success", true); + apidatas.put("status","200"); + }catch (Exception e){ + e.printStackTrace(); + apidatas.put("success", false); + } + + return JSONObject.toJSONString(apidatas); + } + + + + + + + + + + + /** + * @param requstid + * @return + */ + public String getAttentionType(String requstid,String userids){ + String mark = "" ; + RecordSet rs = new RecordSet(); + String sql =" select requestid\n" + + " from workflow_attention\n" + + " where atypeid in (select id\n" + + " from workflow_attentionTypeSet\n" + + " where showname = '电子用印'\n" + + " and userid in ("+userids+"))\n" + + " and userid in ("+userids+") \n" + + " and usertype = 0 \n " + + " and requestid="+requstid ; + + //System.out.println("sql:"+sql); + rs.execute(sql); + if(rs.next()){ + mark = "[E]"; + } + + sql =" select requestid\n" + + " from workflow_attention\n" + + " where atypeid in (select id\n" + + " from workflow_attentionTypeSet\n" + + " where showname = '邮寄'\n" + + " and userid in ("+userids+"))\n" + + " and userid in ("+userids+") \n" + + " and usertype = 0 \n " + + " and requestid="+requstid ; + + //System.out.println("sql:"+sql); + rs.execute(sql); + if(rs.next()){ + mark = mark + "[邮]"; + } + + return mark; + } + + +// +// public List gethideAttention(int userid){ +// PropBean propBean=new PropBean(); +// String jgxtworkflowid= propBean.getPropName("jgxt.workflowid"); +// String showname= propBean.getPropName("jgxt.label.showname"); +// String userids=getAgentInfoByResouce(jgxtworkflowid,Utils.null2String(userid)); +// if(StringUtil.isBlank(userids)){ +// userids= Utils.null2String(userid); +// } +// +// Map map=new HashMap<>(); +// map.put("userid",userid); +// map.put("showname",showname); +// String usertype= ServiceUtil.getService(WfAttentionTypeSetServiceImpl.class).getAttentionTypeSet(map); +// +// RecordSet rs=new RecordSet(); +// List list=new ArrayList<>(); +// userids = userids.replace("\'", ""); +// String sql =" select t.* from workflow_attention t where t.userid in ("+userids+") and atypeid='"+usertype+"' "; +// rs.execute(sql); +// while(rs.next()){ +// String requestid=Util.null2String(rs.getString("requestid")); +// if(!"".equals(requestid)){ +// list.add(requestid); +// } +// } +// return list; +// } + + public String getAgentInfoByResouce(String workflowid, String userid) { + String value=""; + if (!org.apache.commons.lang.StringUtils.isBlank(workflowid) && !org.apache.commons.lang.StringUtils.isBlank(userid)) { + try { + RecordSet rs = new RecordSet(); + Calendar calendar = Calendar.getInstance(); + String endDate = Util.add0(calendar.get(1), 4) + "-" + Util.add0(calendar.get(2) + 1, 2) + "-" + Util.add0(calendar.get(5), 2); + String beginTime = Util.add0(calendar.get(11), 2) + ":" + Util.add0(calendar.get(12), 2) + ":" + Util.add0(calendar.get(13), 2); + String sql = " select wm_concat_old(a.bagentuid) as bagentuid from workflow_agentConditionSet a,Workflow_Agent b where a.workflowId in (" + workflowid + ") and (" + Util.getSubINClause(userid, "a.agentuid", "IN") + ") and b.agenttype = '1' and a.agentid=b.agentId and a.workflowid = b.workflowid and a.isproxydeal='1' and ( ( (a.endDate = '" + endDate + "' and (a.endTime='' or a.endTime is null)) or (a.endDate = '" + endDate + "' and a.endTime > '" + beginTime + "' ) ) or a.endDate > '" + endDate + "' or a.endDate = '' or a.endDate is null) and ( ( (a.beginDate = '" + endDate + "' and (a.beginTime='' or a.beginTime is null)) or (a.beginDate = '" + endDate + "' and a.beginTime < '" + beginTime + "' ) ) or a.beginDate < '" + endDate + "' or a.beginDate = '' or a.beginDate is null) order by a.agentbatch asc,a.id asc "; + rs.execute(sql); + if(rs.getColCounts()<=0){ + return ""; + } + rs.next(); + value= Util.null2String(rs.getString("bagentuid")); + + } catch (Exception exo) { + } + } else { + return value; + } + return value; + } + + + public String getWorkflowDataSql(String useridAll,String type,int num,String requestName,String drafterName,String workFlowNum,int pageNumber,int pageSize,String drafterId){ + String sql = ""; + String excludeFlow = new PropBean().getPropName("noSendWorkflowId"); + String excludeSqlWhere = ""; + if(!"".equals(excludeFlow)){ + excludeSqlWhere = " and t3.id not in("+excludeFlow+") "; + } + String requestNameCondition = ""; + if(requestName != null && !"".equals(requestName)){ + requestNameCondition = " AND requestname like '%"+requestName+"%'"; + } + if(drafterName != null && !"".equals(drafterName)){ + requestNameCondition = " AND creater in ( " + drafterId+" )"; + } + if(workFlowNum != null && !"".equals(workFlowNum)){ + requestNameCondition = " AND requestmark like '%"+workFlowNum+"%'"; + } + String paging = " AND rn between "+((pageNumber-1)*pageSize+1)+ " and " + pageNumber*pageSize; + + + //type 1、待阅 2、待办 3、在办 4、搁置 5、草稿 + if("1".equals(type)){ + sql = " select * from ( " + + " select t2.userid,t1.workflowid,t1.requestid,t3.workflowname,t1.requestname,t1.requestmark,\n" + + " t1.creater,t1.createdate, t1.createtime,t1.requestlevel,t1.currentnodeid\n" + + " from workflow_requestbase t1,workflow_currentoperator t2,workflow_base t3 \n" + + " where t1.requestid = t2.requestid \n" + + " and t1.workflowid=t3.id \n" + + " and t2.userid in ("+useridAll+") and t2.usertype=0 \n" + + " and (nvl(t1.currentstatus,-1) = -1 or (nvl(t1.currentstatus,-1)=0 and t1.creater in ("+useridAll+"))) \n" + + " and (t1.deleted<>1 or t1.deleted is null or t1.deleted='') \n" + + " and t2.preisremark in ('1','8','9','11') \n" + + " and t2.takisremark is null and nvl(t1.isstopped,0) != 1 and t2.viewtype = '0' \n" + + " and (t1.currentnodetype <> '3' or (t2.isremark in ('1', '8', '9','11') and t1.currentnodetype = '3')) \n" + + " and (isprocessing = '' or isprocessing is null) and t3.isvalid in(1,3) "+excludeSqlWhere+" order by t2.receivedate desc,t2.receivetime desc " + + " ) where rownum<="+num; + }else if("2".equals(type)){ //待办 +// sql = "select DISTINCT(requestid),requestname,workflowid,workflowname,requestname,requestmark,uuid,creater,createdate,createtime,requestlevel,currentnodeid from (\n" + +// " select t2.userid,t1.workflowid,t1.requestid,t3.workflowname,t1.requestname,t1.requestmark,t3.uuid,\n" + +// " t1.creater,t1.createdate, t1.createtime,t1.requestlevel,t1.currentnodeid \n" + +// " from workflow_requestbase t1,workflow_currentoperator t2,workflow_base t3 \n" + +// " where t1.requestid = t2.requestid and t1.workflowid=t3.id \n" + +// " and t2.userid in ("+useridAll+") and t2.usertype=0 \n" + +// " and (nvl(t1.currentstatus,-1) = -1 or (nvl(t1.currentstatus,-1)=0 and t1.creater in ("+useridAll+"))) \n" + +// " and (t1.deleted<>1 or t1.deleted is null or t1.deleted='') \n" + +// " and t2.islasttimes=1 and t2.isremark not in('5') \n" + +// " and t2.isprocessed is null \n" + +// " and t1.currentnodetype='3' \n"+ +// " and (isprocessing = '' or isprocessing is null) and t3.isvalid in(1,3) " +excludeSqlWhere+ +// " and ( (t2.isremark not in ('1','8','9') )or (t2.isremark = '1' and t2.takisremark = '2' ) )\n" + +// " order by t2.receivedate desc,t2.receivetime desc "+ +// " ) where 1=1 "+requestNameCondition; + sql = "select DISTINCT(requestid),requestname,workflowid,workflowname,requestmark,uuid,creater,createdate,createtime,requestlevel,currentnodeid from(SELECT\n" + + "t1.requestid,\n" + + "t1.requestmark,\n" + + "t1.createdate,\n" + + "t1.createtime,\n" + + "t1.creater,\n" + + "t1.creatertype,\n" + + "t1.workflowid,\n" + + "t1.requestname,\n" + + "t1.requestnamenew,\n" + + "t1.status,\n" + + "t1.requestlevel,\n" + + "t1.currentnodeid,\n" + + "t2.viewtype,\n" + + "t2.userid,\n" + + "t2.receivedate,\n" + + "t2.receivetime,\n" + + "t2.isremark,\n" + + "t2.nodeid,\n" + + "t2.agentorbyagentid,\n" + + "t2.agenttype,\n" + + "t2.isprocessed,\n" + + "t3.uuid,\n" + + "t3.workflowname,\n" + + "( CASE WHEN t2.operatedate IS NULL THEN t2.receivedate ELSE t2.operatedate END ) operatedate,\n" + + "( CASE WHEN t2.operatetime IS NULL THEN t2.receivetime ELSE t2.operatetime END ) operatetime,\n" + + "t1.seclevel,\n" + + "'0' AS systype,\n" + + "t2.workflowtype,\n" + + "t2.viewDate,\n" + + "t2.viewTime,\n" + + "t1.lastFeedBackDate,\n" + + "t1.lastFeedBackTime,\n" + + "t2.needwfback,\n" + + "t1.lastFeedBackOperator,\n" + + "t2.operatedate AS operatedateNew,\n" + + "t2.operatetime AS operatetimeNew \n" + + "FROM\n" + + "workflow_requestbase t1,\n" + + "workflow_currentoperator t2,\n" + + "workflow_base t3 \n" + + "WHERE\n" + + "t1.requestid = t2.requestid \n" + + "AND t1.workflowid = t3.id \n" + + "AND t2.userid IN ( "+useridAll+" ) \n" + + "AND t2.usertype = 0 \n" + + "AND (\n" + + "nvl( t1.currentstatus,- 1 ) = - 1 \n" + + "OR (\n" + + "nvl( t1.currentstatus,- 1 ) = 0 \n" + + "AND t1.creater IN ( "+useridAll+" ))) \n" + + "AND ( t1.deleted <> 1 OR t1.deleted IS NULL OR t1.deleted = '' ) \n" + + "AND (\n" + + "t2.isremark IN ( '2', '4' ) \n" + + "OR ( t2.isremark = '0' AND t2.takisremark =- 2 )) \n" + + "AND t2.islasttimes = 1 \n" + + "AND t3.isvalid IN ( 1, 3 )) where 1=1 "+requestNameCondition; + + }else if("3".equals(type)){ //在办 + //收文等待 + String where = " " ; + sql = " select * from (\n" + + " select t2.userid,t1.workflowid,t1.requestid,t3.workflowname,t1.requestname,t1.requestmark,\n" + + " t1.creater,t1.createdate, t1.createtime,t1.requestlevel,t1.currentnodeid \n" + + " from workflow_requestbase t1,workflow_currentoperator t2,workflow_base t3 \n" + + " where t1.requestid = t2.requestid and t1.workflowid=t3.id \n" + + " and t2.userid in ("+useridAll+") and t2.usertype=0 \n" + + " and (nvl(t1.currentstatus,-1) = -1 or (nvl(t1.currentstatus,-1)=0 and t1.creater in ("+useridAll+"))) \n" + + " and (t1.deleted<>1 or t1.deleted is null or t1.deleted='') \n" + + " and ((t2.isremark='0' and (t2.takisremark is null or t2.takisremark=0 )) or t2.isremark in('1','5','8','9','7','11')) \n" + + " and t2.islasttimes=1 and t2.viewtype != '0' \n" + + " and (t1.currentnodetype <> '3' or (t2.isremark in ('1', '8', '9','11') and t1.currentnodetype = '3')) \n" + + " and (isprocessing = '' or isprocessing is null) and t3.isvalid in(1,3) " +excludeSqlWhere+ + " and ( exists (select 1 from workflow_requestlog log where log.requestid=t2.requestid \n" + + " and log.logtype in ('0','2','i') ) or nvl(t1.notdraft,0)=1 )\n" + + " and not exists ( select 1 from uf_lcgzb t4 where t4.lcid=t1.requestid and lcdqzt=1 and gzr in ("+useridAll+") ) \n"+ + " and ( (t2.isremark not in ('1','8','9') )or (t2.isremark = '1' and t2.takisremark = '2' ) )\n" + + " and t1.requestid not in(" + + " select requestid from workflow_attention where atypeid in(select id from workflow_attentionTypeSet where showname='收文等待' and userid in("+useridAll+"))"+ + " and userid in("+useridAll+") and usertype=0 ) \n"+ + " order by t2.receivedate desc,t2.receivetime desc\n" + + " ) where rownum<="+num; + + //System.out.println("swdd:"+sql); + + }else if("4".equals(type)){//搁置 + sql = " select * from (\n" + + " select gzr userid,t2.requestid,t2.workflowid,t3.workflowname,t2.requestname,t2.requestmark,\n" + + " t2.creater,t2.createdate, t2.createtime,t2.requestlevel,t2.currentnodeid \n" + + " from uf_lcgzb t1,workflow_requestbase t2, workflow_base t3\n" + + " where t3.id=t2.workflowid and t2.requestid=t1.lcid " +excludeSqlWhere+ + " and gzr in ("+useridAll+") and lcdqzt = 1 order by t1.gzrq desc,t1.gzsj desc ) where rownum<="+num; + + }else if("5".equals(type)){//草稿 + sql = " select * from ("+ + "select t2.userid,t1.workflowid,t1.requestid,t3.workflowname,t1.requestname,t1.requestmark,\n" + + "t1.creater,t1.createdate, t1.createtime,t1.requestlevel,t1.currentnodeid \n" + + "from workflow_requestbase t1,workflow_currentoperator t2,workflow_base t3 \n" + + "where t1.requestid = t2.requestid and t1.workflowid=t3.id \n" + + "and t2.userid in ("+useridAll+" ) and t2.usertype=0 \n" + + "and (nvl(t1.currentstatus,-1) = -1 or (nvl(t1.currentstatus,-1)=0 and t1.creater in ("+useridAll+"))) \n" + + "and (t1.deleted<>1 or t1.deleted is null or t1.deleted='') \n" + + "and t1.creater in ("+useridAll+") and t1.creatertype = 0 and t1.creater = t2.userid \n" + + "and (not exists (select 1 from workflow_requestlog wr where wr.logtype in ('0','2','i') and wr.requestid = t1.requestid ) \n" + + "and t1.currentnodetype != '3' ) and t3.isvalid in(1,3) "+excludeSqlWhere+" order by t1.createdate desc,t1.createtime desc " + + ") where rownum<="+num; + }else if("6".equals(type)){ + sql = "select * from ( \n" + + "select t2.userid,t1.workflowid,t1.requestid,t3.workflowname,t1.requestname,t1.requestmark,\n" + + "t1.creater,t1.createdate, t1.createtime,t1.requestlevel,t1.currentnodeid \n" + + "from workflow_requestbase t1,workflow_currentoperator t2,workflow_base t3 \n" + + "where t1.requestid = t2.requestid and t1.workflowid=t3.id and t2.userid in ("+useridAll+" ) and t2.usertype=0 \n" + + "and (nvl(t1.currentstatus,-1) = -1 or (nvl(t1.currentstatus,-1)=0 and t1.creater in ("+useridAll+"))) \n" + + "and (t1.deleted<>1 or t1.deleted is null or t1.deleted='') and t2.preisremark in ('1','8','9','11') \n" + + "and t2.takisremark is null and nvl(t1.isstopped,0) != 1 and t2.islasttimes=1 and t2.viewtype != '0' \n" + + "and t2.isremark not in ('4','2') and (t1.currentnodetype <> '3' or (t2.isremark in ('1', '8', '9','11') \n" + + "and t1.currentnodetype = '3')) and (isprocessing = '' or isprocessing is null) and t3.isvalid in(1,3) "+excludeSqlWhere+ + "order by t2.receivedate desc,t2.receivetime desc \n" + + ") where rownum<="+num; + } + return sql; + } + + public String getTotalNumSql(String useridAll, String type, int num, String requestName, int pageNumber, int pageSize) { + String sql = ""; + String excludeFlow = (new PropBean()).getPropName("noSendWorkflowId"); + + if ("2".equals(type)) { + //sql = " select count(1) as total \n from workflow_requestbase t1,workflow_currentoperator t2,workflow_base t3 \n where t1.requestid = t2.requestid and t1.workflowid=t3.id \n and t2.userid in (" + useridAll + ") and t2.usertype=0 \n" + " and (nvl(t1.currentstatus,-1) = -1 or (nvl(t1.currentstatus,-1)=0 and t1.creater in (" + useridAll + "))) \n" + " and (t1.deleted<>1 or t1.deleted is null or t1.deleted='') \n" + " and ((t2.isremark='0' and (t2.takisremark is null or t2.takisremark=0 )) or t2.isremark in('1','5','8','9','7','11')) \n" + " and t2.islasttimes=1 and t2.isremark not in('5') \n" + " and t2.isprocessed is null and t2.viewtype = '0' \n" + " and (t1.currentnodetype <> '3' or (t2.isremark in ('1', '8', '9','11') and t1.currentnodetype = '3')) \n" + " and (isprocessing = '' or isprocessing is null) and t3.isvalid in(1,3) " + excludeSqlWhere + " and ( exists (select 1 from workflow_requestlog log where log.requestid=t2.requestid \n" + " and log.logtype in ('0','2','i') ) or nvl(t1.notdraft,0)=1 )\n" + " and ( (t2.isremark not in ('1','8','9') )or (t2.isremark = '1' and t2.takisremark = '2' ) )"; + sql = "SELECT\n" + + "count(1) as total\n" + + "FROM\n" + + "workflow_requestbase t1,\n" + + "workflow_currentoperator t2,\n" + + "workflow_base t3 \n" + + "WHERE\n" + + "t1.requestid = t2.requestid \n" + + "AND t1.workflowid = t3.id \n" + + "AND t2.userid IN ( "+useridAll+" ) \n" + + "TokenUtilAND t2.usertype = 0 \n" + + "TokenUtilAND (\n" + + "TokenUtilnvl( t1.currentstatus,- 1 ) = - 1 \n" + + "TokenUtilOR (\n" + + "TokenUtilnvl( t1.currentstatus,- 1 ) = 0 \n" + + "TokenUtilAND t1.creater IN ( "+useridAll+" ))) \n" + + "TokenUtilAND ( t1.deleted <> 1 OR t1.deleted IS NULL OR t1.deleted = '' ) \n" + + "TokenUtilAND (\n" + + "TokenUtilt2.isremark IN ( '2', '4' ) \n" + + "TokenUtilOR ( t2.isremark = '0' AND t2.takisremark =- 2 )) \n" + + "TokenUtilAND t2.islasttimes = 1 \n" + + "TokenUtilAND t3.isvalid IN ( 1, 3 )"; + } + + return sql; + } + + + + + + + + + + + + + +} diff --git a/src/main/java/com/engine/htsc/payment/biz/WfToDocBiz.java b/src/main/java/com/engine/htsc/payment/biz/WfToDocBiz.java new file mode 100644 index 0000000..cd1864f --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/biz/WfToDocBiz.java @@ -0,0 +1,457 @@ +package com.engine.htsc.payment.biz; + + +import com.engine.common.util.ServiceUtil; +import com.engine.workflow.biz.freeNode.FreeNodeBiz; +import com.engine.workflow.entity.freeNode.FreeNodeEntity; +import com.engine.workflow.service.HtmlToPdfService; +import com.engine.workflow.service.impl.HtmlToPdfServiceImpl; +import weaver.conn.RecordSet; +import weaver.docs.share.DocShareUtil; +import weaver.file.FileSecurityUtil; +import weaver.file.FileUpload; +import weaver.file.ImageFileManager; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.hrm.resource.ResourceComInfo; +import weaver.system.SystemComInfo; +import weaver.workflow.exceldesign.HtmlLayoutOperate; +import weaver.workflow.workflow.WorkflowConfigComInfo; + +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + + +public class WfToDocBiz extends BaseBean { + + //底部签字意见列表显示数量 + private int pageSize =100; + //是否用wk转换 + private String useWk=""; + private int keepsign; + private User user; + private String docfiles; + Map pathMap; + private LinkedHashMap fileids; + + private boolean isOpenWaterMark; //是否生成水印 + private String useModeid ; + /* ---这些参数给到workflowtodoc获取 避免查多次数据库 -- start*/ + private String wfdocpathtype ="1"; + private String wfdocpath = ""; + private String wfdocpathfieldid = ""; + private String wfdocpathfieldvalue =""; + private String isAccordToSubCom = ""; + /* --- end ----*/ + + String OnlineHtmlMethod; //生成在线文档 + + private Map otherParamsMap; + + public Map getOtherParamsMap() { + return otherParamsMap; + } + + public void setOtherParamsMap(Map otherParamsMap) { + this.otherParamsMap = otherParamsMap; + } + + public void setOnlineHtmlMethod(String onlineHtmlMethod) { + OnlineHtmlMethod = onlineHtmlMethod; + } + + public Map getPathMap() { + return pathMap; + } + + public void setPathMap(Map pathMap) { + this.pathMap = pathMap; + } + + public String getWfdocpathtype() { + return wfdocpathtype; + } + + public void setWfdocpathtype(String wfdocpathtype) { + this.wfdocpathtype = wfdocpathtype; + } + + public String getWfdocpath() { + return wfdocpath; + } + + public void setWfdocpath(String wfdocpath) { + this.wfdocpath = wfdocpath; + } + + public String getWfdocpathfieldid() { + return wfdocpathfieldid; + } + + public void setWfdocpathfieldid(String wfdocpathfieldid) { + this.wfdocpathfieldid = wfdocpathfieldid; + } + + public String getWfdocpathfieldvalue() { + return wfdocpathfieldvalue; + } + + public void setWfdocpathfieldvalue(String wfdocpathfieldvalue) { + this.wfdocpathfieldvalue = wfdocpathfieldvalue; + } + + public String getIsAccordToSubCom() { + return isAccordToSubCom; + } + + public void setIsAccordToSubCom(String isAccordToSubCom) { + this.isAccordToSubCom = isAccordToSubCom; + } + + + + public WfToDocBiz(User user, int pageSize, int keepsign, String docfiles){ + this.pageSize = pageSize; + this.keepsign = keepsign; + this.user = user; + this.docfiles = docfiles; + this.fileids = new LinkedHashMap<>(); + } + + public WfToDocBiz(User user, int pageSize, int keepsign, String docfiles, String useModeid){ + this.pageSize = pageSize; + this.keepsign = keepsign; + this.user = user; + this.docfiles = docfiles; + this.fileids = new LinkedHashMap<>(); + this.useModeid=useModeid; + } + + public WfToDocBiz(User user, int pageSize, int keepsign, String docfiles, String useModeid, boolean isOpenWaterMark){ + this.pageSize = pageSize; + this.keepsign = keepsign; + this.user = user; + this.docfiles = docfiles; + this.fileids = new LinkedHashMap<>(); + this.useModeid=useModeid; + this.isOpenWaterMark = isOpenWaterMark; + } + + + public WfToDocBiz(){ + } + + + /* + * 生成html和pdf + */ + public void generatepdfandhtml(String requestid, String filename,String temppath,String src){ + int onlyHtml =0; + if (docfiles.contains("2")&&!docfiles.contains("3")){ //只选了生成离线html 没选pdf + onlyHtml =1; + }else if (docfiles.contains("3")&&docfiles.contains("2")){ //选了pdf和html + onlyHtml =2; + }else if (docfiles.contains("3")&&!docfiles.contains("2")){ //只选了pdf + onlyHtml =0; + } + Map params = new HashMap<>(); + params.put("requestid",requestid); + params.put("onlyHtml", onlyHtml); + params.put("pageSize", pageSize); + params.put("path", temppath); + params.put("filename", filename); + params.put("keepsign", keepsign); + params.put("limitauth", "0"); + params.put("src",src); + params.put("modeid",useModeid); + //是否使用wk,在config表中读配置 + WorkflowConfigComInfo configComInfo = new WorkflowConfigComInfo(); + useWk = Util.null2String(configComInfo.getValue("htmltopdf_usewk")); + new BaseBean().writeLog("jymjym……useWk ="+useWk); + //是否使用Itext7 + String useItext7 = Util.null2String(configComInfo.getValue("workflowtodoc_useitext7")); + params.put("useItext7", useItext7); + if (!"".equals(useWk)){ + params.put("useWk", useWk); + } + params.put("isOpenWaterMark",isOpenWaterMark); + + params.put("onlinehtml",OnlineHtmlMethod.equals("1")&&docfiles.contains("1")); //在线htmlE9 + + if (this.otherParamsMap!=null) + params.putAll(this.otherParamsMap); + + HtmlToPdfService htmlToPdfService = (HtmlToPdfService) ServiceUtil.getService(HtmlToPdfServiceImpl.class,user); + pathMap = (htmlToPdfService != null) ? htmlToPdfService.getFormDatas(params) : new HashMap<>(); + } + + public LinkedHashMap getfileids(String requestname, String filename,String temppath){ + int onlyHtml =0; + if (docfiles.contains("2")&&!docfiles.contains("3")){ //只选了生成离线html 没选pdf + onlyHtml =1; + }else if (docfiles.contains("3")&&docfiles.contains("2")){ //选了pdf和html + onlyHtml =2; + }else if (docfiles.contains("3")&&!docfiles.contains("2")){ //只选了pdf + onlyHtml =0; + } + String htmlname=""; + String truefilename =""; + + if (OnlineHtmlMethod.equals("1")&&docfiles.contains("1")){ //在线html + htmlname = temppath + Util.null2String(pathMap.get("onlinehtmlfilename")); + truefilename = requestname +"_online.html"; + String fileid = saveAsFile(htmlname,truefilename); + if (!"".equals(fileid)){ + fileids.put("online_html",fileid); + } + } + + if (docfiles.contains("2")){ //选了生成离线html + if(onlyHtml ==1){ //只选了生成离线html 没选pdf + htmlname = temppath + Util.null2String(pathMap.get("filename")); + }else if(onlyHtml ==2){ + htmlname = temppath + Util.null2String(pathMap.get("htmlfilename")); + } + truefilename = requestname +"_offline_html.zip"; + String fileid = saveAsFile(htmlname,truefilename); + if (!"".equals(fileid)){ + fileids.put("offline_html",fileid+""); + } + + } + if (docfiles.contains("3")){ //只要选了pdf + if(onlyHtml ==0){ //只选了pdf + htmlname = temppath + Util.null2String(pathMap.get("filename")); + }else if(onlyHtml ==2){ + htmlname = temppath + Util.null2String(pathMap.get("pdffilename")); + } + truefilename = requestname + "_offline_pdf.pdf"; + String fileid = saveAsFile(htmlname,truefilename); + if (!"".equals(fileid)){ + fileids.put("offline_pdf",fileid); + } + } + + + return fileids; + } + + //保存为附件 + public String saveAsFile(String htmlname,String truefilename){ + truefilename = Util.formatMultiLang(truefilename,user.getLanguage()+""); + InputStream in = null; + byte[] buffer = null; + File file = new File(htmlname); + if (file.exists()){ + try { + in = new FileInputStream(file); + buffer = new byte[(int) file.length()]; + in.read(buffer); + in.close(); + }catch (Exception e){ + e.printStackTrace(); + } + } + ImageFileManager imageFileManager = new ImageFileManager(); + imageFileManager.setComefrom("WorkflowToDoc"); + imageFileManager.setData(buffer); + imageFileManager.setImagFileName(truefilename); + + int fileid = imageFileManager.saveImageFile(); + if (fileid <= 0) { + writeLog("保存离线HTML/PDF文件失败"); + return ""; + } + FileSecurityUtil.deleteFile(file); + return fileid+""; + } + + /** + * 获得文件保存目录 + * + * @return + */ + public String getFileSavePath() { + SystemComInfo syscominfo = new SystemComInfo(); + String createdir = FileUpload.getCreateDir(syscominfo.getFilesystem()); + return createdir; + } + + + //获取存文档的路径 + public String getWfDocPath(String workflowid,String requestid){ + String doccategory = ""; + RecordSet rs = new RecordSet(); + rs.executeQuery("select * from workflow_base where id = ?",workflowid); + + if (rs.next()){ + this.wfdocpathtype = Util.null2String(rs.getString("wfdocpathtype")); + this.wfdocpath = Util.null2String(rs.getString("wfdocpath")); + this.wfdocpathfieldid = Util.null2String(rs.getString("wfdocpathfieldid")); + + int isbill = Util.getIntValue(rs.getString("isbill"), 0); + int formid = Util.getIntValue(rs.getString("formid"), 0); + if (wfdocpathtype.equals("1")||wfdocpathtype.equals("")){ //历史数据为空则默认用固定目录 + doccategory = wfdocpath; + }else if (wfdocpathtype.equals("2")){ //选择框字段值对应路径 + //先获取表单字段值 + String fieldvalue = ""; //表单字段值 + String tablename = " workflow_form "; + String fieldname = ""; + String sql = ""; + if(isbill == 1){ + sql = "select tablename from workflow_bill where id="+formid; + rs.executeQuery(sql); + if(rs.next()){ + tablename = Util.null2String(rs.getString(1)); + } + sql = "select fieldname from workflow_billfield where billid="+formid+" and id="+wfdocpathfieldid; + }else{ + sql = "select fieldname from workflow_formdictdetail where id="+wfdocpathfieldid; + } + rs.executeQuery(sql); + if(rs.next()){ + fieldname = Util.null2String(rs.getString(1)); + if(!"".equals(tablename) && !"".equals(fieldname)){ + sql = "select "+fieldname+" from "+tablename+" where requestid="+requestid; + rs.executeQuery(sql); + if(rs.next()){ + fieldvalue = Util.null2String(rs.getString(1)); + } + } + } + this.wfdocpathfieldvalue = fieldvalue; + if (!fieldvalue.equals("")){ + rs.executeQuery("select doccategory,isAccordToSubCom from workflow_selectitem t where fieldid=" + + wfdocpathfieldid + " and selectvalue=" + fieldvalue); + if (rs.next()) { + doccategory = rs.getString("doccategory"); + isAccordToSubCom = Util.null2String(rs.getString("isAccordToSubCom")); + } + if (isAccordToSubCom.equals("1")) { + int creater = 0; + rs.executeQuery("select creater from workflow_requestbase where requestId=" + requestid); + if (rs.next()) { + creater = Util.getIntValue(rs.getString("creater"), 0); + } + + int subCompanyId = 0; + try { + ResourceComInfo resourceComInfo = new ResourceComInfo(); + subCompanyId = Util.getIntValue(resourceComInfo.getSubCompanyID("" + creater), 0); + } catch (Exception ex) { + ex.printStackTrace(); + } + rs.executeQuery("SELECT docCategory FROM Workflow_SelectitemObj where fieldid=" + + wfdocpathfieldid + " and selectvalue=" + fieldvalue + " and isBill=" + isbill + + " and objType='1' and objId= " + subCompanyId); + if (rs.next()) { + doccategory = Util.null2String(rs.getString("docCategory")); + } + } + } + } + } + return doccategory; + } + + /* + *获取模板id + */ + public String getModeid(int workflowid,int requestid,int nodeid){ + RecordSet rs = new RecordSet(); + int modeid = -1; + FreeNodeEntity nodeEntity = FreeNodeBiz.getCurrentFreeNodeEntity(requestid,nodeid); + if(nodeEntity != null) { //如果为自由节点 + nodeid = nodeEntity.getExtendnodeid(); + } + String wfdocsource =""; + rs.executeQuery("select * from workflow_base where id = ?",workflowid); + if (rs.next()){ + wfdocsource = Util.null2String(rs.getString("wfdocsource")); //附件来源 1:显示模板 2:打印模板 + } + HtmlLayoutOperate htmlLayoutOperate = new HtmlLayoutOperate(); + if (wfdocsource.equals("2")) { //打印模板 获取开启的第一个打印模板 如果没有开启的打印模板,则取显示模板,如果没有打印模板 则取显示模板 + rs.executeQuery("select * from workflow_printset where nodeid = ? and type =1 and printenable =1 order by orderid",nodeid); + if (rs.next()){ + modeid = Util.getIntValue(rs.getString("modeid"),-1); + }else { + modeid = htmlLayoutOperate.getActiveHtmlLayout(workflowid, nodeid, 0); //获取当前显示模板的活动模板 + } + }else { //否则就取当前显示模板 + rs.executeQuery("select ismode from workflow_flownode where workflowid=? and nodeid=?",workflowid,nodeid); + if (rs.next()){ + String ismode = Util.null2String(rs.getString("ismode")); + if (ismode.equals("2")){ //如果不是 + modeid = htmlLayoutOperate.getActiveHtmlLayout(workflowid, nodeid, 0); //获取当前显示模板的活动模板 + }else{ + modeid = -1; + } + } + + } + return modeid+""; + } + + /* + * 文档赋权 + * docid 赋权的文档id + * requestid 请求id + * docowner 文档所有者 + * 给流程所有操作者赋权 + */ + public static void docShare(String docids,String requestid,int docowner){ + RecordSet rs = new RecordSet(); + //选择流程的所有操作人 + String sql = "select distinct userid,usertype,isremark,agentorbyagentid,agenttype from workflow_currentoperator where requestid ="+requestid; + rs.executeQuery(sql); + String userids = ""; + String usertypes = ""; + String agentids = ""; + String agenttypes = ""; + while (rs.next()){ + int opertor = rs.getInt("userid"); + int beagentorid=rs.getInt("agentorbyagentid"); + int usertype = rs.getInt("usertype"); + int isremark=Util.getIntValue(rs.getString("isremark"),-1); + int agenttype=Util.getIntValue(rs.getString("agenttype"),-1); + //用户相关客户一次性共享 + userids += "," + opertor; + usertypes += "," + usertype; + + if (beagentorid > 0) { + agentids += "," + beagentorid; + agenttypes += ",0"; + } + } + //修正数据 + if (userids.length() > 0) { + userids = userids.substring(1); + usertypes = usertypes.substring(1); + } + if (agentids.length() > 0) { + agentids = agentids.substring(1); + agenttypes = agenttypes.substring(1); + } + new BaseBean().writeLog("docShare------userids="+userids+"-------agentids="+agentids+"-----docid="+docids); + User user = new User(docowner); + //文档共享 + DocShareUtil dsu = new DocShareUtil(); + //共享 + dsu.addDocShare(user, docids, usertypes, userids, 1); + + if (agentids.length() > 0) { + //共享 + dsu.addDocShare(user, docids, agenttypes, agentids, 1); + } + } + + +} diff --git a/src/main/java/com/engine/htsc/payment/dao/BudgetDao.java b/src/main/java/com/engine/htsc/payment/dao/BudgetDao.java new file mode 100644 index 0000000..187ea7b --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/dao/BudgetDao.java @@ -0,0 +1,223 @@ +package com.engine.htsc.payment.dao; + +import org.apache.ibatis.jdbc.SQL; + +/** + * author:k1810012 + * 通用付款sql + */ +public class BudgetDao { + + /** + * 更新中间表 + * @param tableName 表名 + * @return sql + */ + public String updateMiddleTable(String tableName) { + return new SQL() {{ + UPDATE(tableName); + SET("FBILLSTATUS=?,YSND=?,FBIZDATE=?,FSJAMOUNT=?,FNOTAXAMOUNT=?,FTAXAMOUNT=?," + + "FACTUALAMOUNT=?,FSTANDARDAMOUNT=?,FOVERWEIGHT=?"); + WHERE("FITEMDETAILNUM=? and FNAME=?"); + }}.toString(); + } + + /** + * 插入中间表 + * @param tableName 表名 + * @return sql + */ + public String insertMiddleTable(String tableName) { + return new SQL() {{ + INSERT_INTO(tableName); + VALUES("FBILLSTATUS,FNAME,FBILLTITLE,FPESONNAME," + + "YSND,FBIZDATE,FITEMDETAILNUM," + + "FCOSTITEMNUM,FSJAMOUNT,FNOTAXAMOUNT,FTAXAMOUNT,FACTUALAMOUNT," + + "FSTANDARDAMOUNT,FOVERWEIGHT,\n" + + "ISITITEM,ITITEMCODE,ITITEMNAME,FDEPTNUMBER", + "?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?"); + }}.toString(); + } + + /** + * 是否it付款 + * + * @param main 主表 + * @param requestMark 流程编码 + * @return string + */ + public String isItPay(String main, String requestMark) { + return new SQL() {{ + SELECT("FKLX"); + FROM(main); + WHERE("LCBH='" + requestMark + "'"); + }}.toString(); + } + + /** + * 获取预算科目信息 + * + * @param budgetKmTable 预算表(dt8 or dt9) + * @param mainId mainId + * @return sql + */ + public String budgetKmTableInfo(String budgetKmTable, String mainId, boolean isIt) { + return new SQL() {{ + if (budgetKmTable.toLowerCase().contains("dt8")) { + if (!isIt) { + SELECT("FYSJCDBM,BHSJE,SJ,JSHJJE,CYS,YSKM"); + } else { + SELECT("FYSJCDBM,BHSJE,SJ,JSHJJE,CYS,YSKM,PROJECTCODE,XMMC"); + } + } else { + SELECT("rmbje,CYS,YSKM,FYSJCDBM"); + } + FROM(budgetKmTable); + WHERE("MAINID=" + mainId); + }}.toString(); + } + + /** + * 获取付款主表信息 + * + * @param main 主表名称 + * @param requestMark 流程编号 + * @return 主表信息sql + */ + public String mainInfo(String main, String requestMark) { + return new SQL() {{ + SELECT_DISTINCT("t1.ID,t1.LCBH,t2.REQUESTNAME,t3.LASTNAME,t4.DEPARTMENTCODE"); + FROM(main + " t1"); + LEFT_OUTER_JOIN("workflow_requestbase t2 on t1.requestid=t2.requestid"); + LEFT_OUTER_JOIN("hrmresource t3 on t1.ngr=t3.id"); + LEFT_OUTER_JOIN("hrmdepartment t4 on t3.departmentid=t4.id"); + WHERE("t1.lcbh='" + requestMark + "'"); + }}.toString(); + } + + /** + * 查询数据是否存在sql + * + * @param budgetTableName 数据表 + * @param fName 流程编号 + * @return 查询sql + */ + public String fNameIsExist(String budgetTableName, String fName) { + return new SQL() {{ + SELECT_DISTINCT("FNAME"); + FROM(budgetTableName); + WHERE("FNAME='" + fName + "'"); + }}.toString(); + } + + /** + * 通用付款 获取主表 + * lcbh,ngr,id,requestname字段用于调用预算接口 + * + * @return sql 占位符1 mainTable 占位符2 reqId + */ + public String mainFieldParam(String table, String rid) { + return new SQL() {{ + SELECT("t1.lcbh,t1.ngr,t1.id,t1.fkxx,t2.requestname "); + FROM(table + " t1"); + LEFT_OUTER_JOIN("workflow_requestbase t2 on t1.requestid=t2.requestid"); + WHERE("t1.requestid=" + rid); + }}.toString(); + } + + + /** + * 通用报销 获取主表 + * lcbh,ngr,id,requestname字段用于调用预算接口 + * + * @return sql 占位符1 mainTable 占位符2 reqId + */ + public String mainBXFieldParam(String table, String rid) { + return new SQL() {{ + SELECT("t1.lcbh,t1.ngr,t1.id,t2.requestname "); + FROM(table + " t1"); + LEFT_OUTER_JOIN("workflow_requestbase t2 on t1.requestid=t2.requestid"); + WHERE("t1.requestid=" + rid); + }}.toString(); + } + + + /** + * it付款 获取主表 + * lcbh,ngr,id,requestname字段用于调用预算接口 + * + * @return sql 占位符1 mainTable 占位符2 reqId + */ + public String mainFieldParamForIt(String table, String rid) { + return new SQL() {{ + SELECT("t1.lcbh,t1.ngr,t1.id,t1.xzfklx,t2.requestname "); + FROM(table + " t1"); + LEFT_OUTER_JOIN("workflow_requestbase t2 on t1.requestid=t2.requestid"); + WHERE("t1.requestid=" + rid); + }}.toString(); + } + + /** + * 通用付款 获取预算明细数据 + * fycdbmfzr,yskm,ccsqlc 字段用于调用预算接口 + * + * @return sql 占位符1 yskmTable(明细8或明细9) 占位符2 mainId + */ + public String yskmTableFieldParam(String detailTable, String mainId) { + return new SQL() {{ + SELECT("fycdbmfzr,fysjcdbm,yskm"); + FROM(detailTable); + WHERE("mainid=" + mainId); + }}.toString(); + } + + public String bxBBYskmTableFieldParam(String detailTable, String mainId){ + return new SQL() {{ + SELECT("fysjcdbm,yskmid,yskm,jshjje,bhsje,sj"); + FROM(detailTable); + WHERE("mainid=" + mainId); + }}.toString(); + } + + public String clbxBBYskmTableFieldParam(String detailTable, String mainId){ + return new SQL() {{ + SELECT("fycdbm,jshjje,bhsje,sj,qzzsbhsje,zssj,lkysbhsje,lkyssj,qt"); + FROM(detailTable); + WHERE("mainid=" + mainId); + }}.toString(); + } + + public String bxWBYskmTableFieldParam(String detailTable, String mainId){ + return new SQL() {{ + SELECT("fysjcdbm,yskm,rmbje"); + FROM(detailTable); + WHERE("mainid=" + mainId); + }}.toString(); + } + + /** + * IT付款 获取付款明细预算数据 + * @param detailTable + * @param mainId + * @return + */ + public String ITyskmTableFieldParam(String detailTable, String mainId) { + String sql= "select FYCDBMFZR,FYSJCDBM,YSKM,PROJECTCODE from " + detailTable + " where MAINID=" + mainId; + return sql; + } + + /** + * 通用付款,预算科目上级科目 + * + * @return sql 占位符1 subBudgetCode 预算科目 + */ + public String superiorBudgetSubject(String subBudgetCode) { + return new SQL() {{ + SELECT_DISTINCT("sjyskm"); + FROM("uf_kmpz"); + WHERE("yskmbm=" + subBudgetCode); + }}.toString(); + } + + +} diff --git a/src/main/java/com/engine/htsc/payment/dao/PaymentDao.java b/src/main/java/com/engine/htsc/payment/dao/PaymentDao.java new file mode 100644 index 0000000..e14569e --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/dao/PaymentDao.java @@ -0,0 +1,178 @@ +package com.engine.htsc.payment.dao; + +import org.apache.ibatis.jdbc.SQL; + +/** + * author:k1810012 + * 总部通用付款sql + */ +public class PaymentDao { + + /** + * 获取部门负责人sql + * + * @return sql语句 + */ + public String getDivisonHead(String deptIds) { + return new SQL() {{ + SELECT("deptleaders"); + FROM("hrmdepartmentdefined"); + WHERE("deptid in (" + deptIds + ")"); + }}.toString(); + } + + /** + * 获取第n级会计科目code + * + * @param code 预算科目 + * @return sql + */ + public String getAccountCode(String code) { + return new SQL() {{ + SELECT("t1.HJKMBM,t1.HJKMMC"); + FROM("UF_KJKMPZ t1"); + LEFT_OUTER_JOIN("UF_KJKMPZ_DT1 t2 on t1.id=t2.mainid"); + WHERE("t2.yskm='" + code + "'"); + }}.toString(); + + } + + /** + * 获取表基础数据 + * + * @param modeTableName 建模表 + * @param workFlowTableName 流程表 + * @param id 需要更新的id + * @return sql + */ + public String getBaseInfo(String modeTableName, String workFlowTableName, String id) { + return new SQL() {{ + SELECT("t2.SFQDZ,t1.ID,t1.REQUTID,t1.fkzt,t2.ywht,t2.fklx,t2.NGR,t2.SZBM,t2.LCBH,t2.REQUESTID,t2.DJZS,t2.LCBT,t2.NGSJ,t3.REQUESTNAME"); + FROM(modeTableName + " t1"); + LEFT_OUTER_JOIN(workFlowTableName + " t2 on t1.REQUTID=t2.REQUESTID"); + LEFT_OUTER_JOIN("WORKFLOW_REQUESTBASE t3 on t1.REQUTID=t3.REQUESTID"); + WHERE("t1.ID=" + id); + }}.toString(); + } + + /** + * 获取表基础数据(差旅) + * + * @param modeTableName 建模表 + * @param workFlowTableName 流程表 + * @param id 需要更新的id + * @return sql + */ + public String getBaseInfoForCl(String modeTableName, String workFlowTableName, String id) { + return new SQL() {{ + SELECT("t2.SFQDZ,t1.ID,t1.fkzt,t1.REQUTID,1 as ywht,t2.fklx,t2.NGR,t2.SZBM,t2.LCBH,t2.REQUESTID,t2.DJZS,t2.bt as lcbt,t2.NGSJ,t3.REQUESTNAME"); + FROM(modeTableName + " t1"); + LEFT_OUTER_JOIN(workFlowTableName + " t2 on t1.REQUTID=t2.REQUESTID"); + LEFT_OUTER_JOIN("WORKFLOW_REQUESTBASE t3 on t1.REQUTID=t3.REQUESTID"); + WHERE("t1.ID=" + id); + }}.toString(); + } + + /** + * 建模id获取对应的付款流程表明 + * + * @param modeTableName 建模表 + * @param id id + * @return sql + */ + public String getFormTableByModeOrderId(String modeTableName, String id) { + return new SQL() {{ + SELECT("t1.FORMID"); + FROM("workflow_base t1"); + LEFT_OUTER_JOIN("WORKFLOW_REQUESTBASE t2 on t1.ID=t2.WORKFLOWID"); + LEFT_OUTER_JOIN(modeTableName + " t3 on t3.REQUTID=t2.REQUESTID"); + WHERE("t3.ID=" + id); + }}.toString(); + } + + /** + * 查询明细8和dt12, 会计详情 + * + * @param mainTableName 主表 + * @param requestId 流程id + * @return sql + */ + public String getSubjectInfoFromDt8AndDt12(String mainTableName, String requestId) { + return new SQL() {{ + SELECT("t2.YSKM,t2.YSKMMC,t2.HJKM,t2.FYSJCDBM,t2.JE,t2.SY,t2.ZHRMB"); + FROM(mainTableName + " t1"); + LEFT_OUTER_JOIN(mainTableName + "_DT12 t2 on t1.ID=t2.MAINID"); + WHERE("t1.REQUESTID=" + requestId); + ORDER_BY("t2.ID"); + }}.toString(); + } + + /** + * 查询明细11, 支付明细 + * + * @param mainTableName 主表 + * @param requestId 流程id + * @return sql + */ + public String getPayInfoFromDt11(String mainTableName, String requestId) { + return new SQL() {{ + SELECT("t2.YXZFJE,t2.XJZFJE,t2.KHXMC,t2.YXZH,t2.SKDW"); + FROM(mainTableName + " t1"); + LEFT_OUTER_JOIN(mainTableName + "_DT11 t2 on t1.ID=t2.MAINID"); + WHERE("t1.REQUESTID=" + requestId); + }}.toString(); + } + + /** + * 获取付款类型 + * + * @param modeTableName 建模表 + * @param workFlowTableName 流程表 + * @param id 需要更新的id + * @return sql + */ + public String getPaymentType(String modeTableName, String workFlowTableName, String id) { + return new SQL() {{ + SELECT("t1.ID,t1.REQUTID,t2.fklx"); + FROM(modeTableName + " t1"); + LEFT_OUTER_JOIN(workFlowTableName + " t2 on t1.REQUTID=t2.REQUESTID"); + LEFT_OUTER_JOIN("WORKFLOW_REQUESTBASE t3 on t1.REQUTID=t3.REQUESTID"); + WHERE("t1.ID=" + id); + }}.toString(); + } + + /** + * 获取采购商城基础数据 + * + * @param modeTableName 建模表 + * @param workFlowTableName 流程表 + * @param id 需要更新的id + * @return sql + */ + public String getBaseInfoSettlePayment(String modeTableName, String workFlowTableName, String id) { + return new SQL() {{ + SELECT("t1.ID,t1.REQUTID,t2.fklx,t2.NGR,t2.SZBM,t2.LCBH,t2.REQUESTID,t2.DJZS,t2.LCBT,t2.NGRQ,t3.REQUESTNAME"); + FROM(modeTableName + " t1"); + LEFT_OUTER_JOIN(workFlowTableName + " t2 on t1.REQUTID=t2.REQUESTID"); + LEFT_OUTER_JOIN("WORKFLOW_REQUESTBASE t3 on t1.REQUTID=t3.REQUESTID"); + WHERE("t1.ID=" + id); + }}.toString(); + } + + /** + * 查询采购商城明细8和dt12, 会计详情 + * + * @param mainTableName 主表 + * @param requestId 流程id + * @return sql + */ + public String getSettleSubjectInfoFromDt8AndDt12(String mainTableName, String requestId) { + return new SQL() {{ + SELECT("t2.YSKM,t2.HJKM,t2.FYSJCDBM,t2.JE,t2.SY"); + FROM(mainTableName + " t1"); + LEFT_OUTER_JOIN(mainTableName + "_DT12 t2 on t1.ID=t2.MAINID"); + WHERE("t1.REQUESTID=" + requestId); + ORDER_BY("t2.ID"); + }}.toString(); + } +} diff --git a/src/main/java/com/engine/htsc/payment/dao/UfCgsplDao.java b/src/main/java/com/engine/htsc/payment/dao/UfCgsplDao.java new file mode 100644 index 0000000..149839a --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/dao/UfCgsplDao.java @@ -0,0 +1,344 @@ +package com.engine.htsc.payment.dao; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.engine.htsc.payment.pojo.MallPayBizModel; +import com.engine.htsc.payment.pojo.UfCgspl; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.interfaces.htsc.GlobatTools.JAVATools; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class UfCgsplDao { + + public List getUfCgspl(Map mapReqSql){ + List list = new ArrayList(); + String sql = "select * from uf_cgspl where 1 = 1"; + List> resp = getTableToListMap(sql,mapReqSql); + JAVATools.writelog("获取审批链sql:"+sql+ JSONObject.toJSONString(resp)); + for (Map colunmn:resp){ + UfCgspl UfCgspl = JSON.parseObject(JSON.toJSONString(colunmn), UfCgspl.class); + list.add(UfCgspl); + } + return list; + } + + public String getUserIdByCode(String workcode, String deptcode) { + String result = ""; + RecordSet rs = new RecordSet(); + String sql = "select a.id,a.workcode,b.departmentcode from hrmresource a,hrmdepartment b where a.workcode = '"+workcode+ + "' and a.departmentid = b.id and b.departmentcode = '"+deptcode+"'"; + JAVATools.writelog("sql根据人员工号和部门code查找人员id:"+sql); + rs.execute(sql); + if(rs.next()){ + result= Util.null2String(rs.getString("id")); + } + return result; + } + + public static List getTableToListMap(String sql,Map parmasmap){ + RecordSet rs=new RecordSet(); + List list=new ArrayList<>(); + + String where=""; + List> listreturn=new ArrayList<>(); + + if(parmasmap!=null&&parmasmap.size()>0){ + for (String key:parmasmap.keySet()) { + if ("sslc".equals(key)||"fqbmlx".equals(key)){ + where+=" and "+key+"=? "; + list.add(parmasmap.get(key)); + } + } + } + + if("".equals(where)){ + rs.execute(sql); + }else{ + rs.executeQuery(sql+where,new Object[]{list}); + } + + while(rs.next()){ + Map map=new HashMap<>(); + String[] colnums=rs.getColumnName(); + for (String colnumvalue:colnums ) { + map.put(colnumvalue.toLowerCase(),rs.getString(colnumvalue)); + } + listreturn.add(map); + + } + return listreturn; + } + + public String getBmysglysh(String bms) { + String bmysglysh = ""; + if (!"".equals(bms)){ + RecordSet rs=new RecordSet(); + String sql = "select * from uf_ysgly where bm in ( "+bms+" )" ; + JAVATools.writelog("获取uf_ysgly :"+sql); + rs.execute(sql); + while (rs.next()){ + bmysglysh+=bmysglysh==""? Util.null2String(rs.getString("ysgly")):","+ Util.null2String(rs.getString("ysgly")); + } + } + return bmysglysh; + } + + public Boolean updateMain(HashMap reqMap, String tableName) { + RecordSet rs = new RecordSet(); + String sqlUpdate = " update "+tableName+" set bmysglysh = '" + reqMap.get("bmysglysh") + + "' , yybfzrsh = '" + reqMap.get("yybfzrsh") + + "' , bmfzrsh = '" + reqMap.get("bmfzrsh") + + "' , fgsfzrsh = '" + reqMap.get("fgsfzrsh") + + "' , fgldsh = '" + reqMap.get("fgldsh") + + "' , ysglyzs = '" + reqMap.get("ysglyzs") + + "' , fyhj = '" + reqMap.get("fyhj") + + "' , cwfzrsp = '" + reqMap.get("cwfzrsp") + + "' , cn = '" + reqMap.get("cn") + + "' , ysglycs = '" + reqMap.get("ysglycs") + + "' , cnrygh = '" + reqMap.get("cnrygh") + "' where requestid = '" + reqMap.get("requestid") +"'"; + JAVATools.writelog("根据requestid写入审批链Sql: "+ sqlUpdate); + Boolean result = rs.execute(sqlUpdate); + return result; + } + + public Boolean updateShoppingMalPool(String requestId) { + RecordSet rs = new RecordSet(); + String sqlUpdate = "update uf_ShoppingMalPool set zt = '1'" + " where requtid = '" + requestId +"'"; + JAVATools.writelog("更新uf_ShoppingMalPool: "+ sqlUpdate); + Boolean result = rs.execute(sqlUpdate); + return result; + } + + public Boolean updateShoppingMalPoolEnd(String requestId) { + RecordSet rs = new RecordSet(); + String sqlUpdate = "update uf_ShoppingMalPool set zt = '2'" + " where requtid = '" + requestId +"'"; + JAVATools.writelog("更新uf_ShoppingMalPool: "+ sqlUpdate); + Boolean result = rs.execute(sqlUpdate); + return result; + } + + public Boolean updateMainFyqr(HashMap reqMap, String tableName) { + RecordSet rs = new RecordSet(); + String sqlUpdate = " update "+tableName+" set scglysh = '" + reqMap.get("ysglycs") + + "' , fgscwjlsh = '" + reqMap.get("fgscwjlsh") + + "' , wzcgdjrysh = '" + reqMap.get("wzcgdjrysh") + + "' , ysglysh = '" + reqMap.get("bmysglysh") + + "' , yybfzrsh = '" + reqMap.get("yybfzrsh") + + "' , bmfzrsh = '" + reqMap.get("bmfzrsh") + + "' , fgsfzrsh = '" + reqMap.get("fgsfzrsh") + + "' , fgldsh = '" + reqMap.get("fgldsh") + + "' , scglybj = '" + reqMap.get("ysglyzs") + + "' , fgscwjlbj = '" + reqMap.get("fgscwjlbj") + "' where requestid = '" + reqMap.get("requestid") +"'"; + JAVATools.writelog("根据requestid写入审批链Sql: "+ sqlUpdate); + Boolean result = rs.execute(sqlUpdate); + return result; + } + + public Boolean updateMainJsfk(HashMap reqMap, String tableName) { + RecordSet rs = new RecordSet(); + String sqlUpdate = " update "+tableName+" set " + + " scglysh = '" + reqMap.get("ysglycs") + + "' , fgscwjlsh = '" + reqMap.get("fgscwjlsh") + + "' , wzcgdjrysh = '" + reqMap.get("wzcgdjrysh") + + "' , wzcggkbmfzrsh = '" + reqMap.get("wzcggkbmfzr") + + "' , cwzxhjsh = '" + reqMap.get("cwzxhj") + + "' , fyhjsh = '" + reqMap.get("fyhj") + + "' , cwzxjlsh = '" + reqMap.get("cwzxjl") + + "' , cwfzrsp = '" + reqMap.get("cwfzrsp") + + "' , cwzjsp = '" + reqMap.get("cwzj") + + "' , fgsfzrsp = '" + reqMap.get("fgsfzrsh") + + "' , fgldsp = '" + reqMap.get("fgldsh") + + "' , ldsp = '" + reqMap.get("zc") + + "' , cn = '" + reqMap.get("cn") + + "' , cnrygh = '" + reqMap.get("cnrygh") + "' where requestid = '" + reqMap.get("requestid") +"'"; + JAVATools.writelog("根据requestid写入审批链Sql: "+ sqlUpdate); + Boolean result = rs.execute(sqlUpdate); + return result; + } + + public Boolean updateRequestbase(String requestId, String lcbh) { + RecordSet rs = new RecordSet(); + Boolean result = rs.executeUpdate("update workflow_requestbase set requestmark = ? where requestid = ?", + lcbh, requestId); + JAVATools.writelog("写入workflow_requestbaseSql: "+ "update workflow_requestbase set requestmark = "+lcbh+" where requestid = "+requestId); + return result; + } + + public Map getDt5(String mainid, String oldTbaleName) { + RecordSet rs = new RecordSet(); + String sql = "select a.mtrtypeid,sum(a.amount) as amount from "+oldTbaleName+"_dt5 a where a.mainid = '"+mainid+"' group by mtrtypeid" ; + JAVATools.writelog("明细表5 :"+sql); + rs.execute(sql); + HashMap map = new HashMap<>(); + while (rs.next()){ + map.put(Util.null2String(rs.getString("mtrtypeid")), Util.null2String(rs.getString("amount"))); + } + return map; + } + + + public Map getCwMap(List departList, String fqbmlx) { + Map map = new HashMap<>(); + RecordSet rs = new RecordSet(); + if (null!=departList&&departList.size()>0){ + if ("zb".equals(fqbmlx)){ + String glbm = ""; + for (String bm : departList){ + glbm += glbm==""?bm:","+bm; + } + String sql = "select hjry,cnry from uf_zbkjpz where glbm in ( "+glbm+" )" ; + JAVATools.writelog("获取总部会计信息 :"+sql); + rs.execute(sql); + String kj = ""; + String cn = ""; + while (rs.next()){ + if (!"".equals(Util.null2String(rs.getString("hjry")))){ + kj += kj==""? Util.null2String(rs.getString("hjry")):","+ Util.null2String(rs.getString("hjry")); + } + if (!"".equals(Util.null2String(rs.getString("hjry")))){ + cn += cn==""? Util.null2String(rs.getString("hjry")):","+ Util.null2String(rs.getString("cnry")); + } + map.put("kj",kj);//会计 + map.put("cn",cn);//出纳 + } + }else if ("fzjg".equals(fqbmlx)){ + String glbm = ""; + for (String bm : departList){ + glbm += glbm==""?bm:","+bm; + } + String sql = "select kjjl,cn,kj from uf_fzjgfkgwpp where bm in ( "+glbm+" )" ; + JAVATools.writelog("获取总部会计信息 :"+sql); + rs.execute(sql); + String kj = ""; + String cn = ""; + String kjjl = ""; + while (rs.next()){ + if (!"".equals(Util.null2String(rs.getString("kj")))){ + kj += kj==""? Util.null2String(rs.getString("kj")):","+ Util.null2String(rs.getString("kj")); + } + if (!"".equals(Util.null2String(rs.getString("cn")))){ + cn += cn==""? Util.null2String(rs.getString("cn")):","+ Util.null2String(rs.getString("cn")); + } + if (!"".equals(Util.null2String(rs.getString("kjjl")))){ + kjjl += kjjl==""? Util.null2String(rs.getString("kjjl")):","+ Util.null2String(rs.getString("kjjl")); + } + map.put("kj",kj);//会计 + map.put("cn",cn);//出纳 + map.put("kjjl",kjjl);//会计经理 + } + } + } + return map; + } + + public String getSs(String yxzh) { + RecordSet rs = new RecordSet(); + String ss = ""; + String sql = "select yxzh,skdw,ss from uf_cgyhzhpz where yxzh = '" +yxzh+"'"; + JAVATools.writelog("获取银行账号对应省市sql :"+sql); + rs.execute(sql); + if (rs.next()){ + ss = Util.null2String(rs.getString("ss")); + } + return ss; + } + + public Map getHtxx(String htbh){ + RecordSet rs = new RecordSet(); + Map htxx = new HashMap<>(); + String sql = "select yxzh,khx,skdw,ss,jbr from uf_cgyhzhpz where htbh = '" +htbh+"'"; + rs.execute(sql); + if (rs.next()){ + htxx.put("yxzh",Util.null2String(rs.getString("yxzh"))); + htxx.put("khx",Util.null2String(rs.getString("khx"))); + htxx.put("skdw",Util.null2String(rs.getString("skdw"))); + htxx.put("ss",Util.null2String(rs.getString("ss"))); + htxx.put("jbr",Util.null2String(rs.getString("jbr"))); + } + return htxx; + } + + public String getHl(String bz) { + + RecordSet rs = new RecordSet(); + String hl = ""; + String sql = "select hl from uf_bz_hl where bz = '" +bz+"'"; + JAVATools.writelog("获取汇率sql :"+sql); + rs.execute(sql); + if (rs.next()){ + hl = Util.null2String(rs.getString("hl")); + } + return hl; + } + + public String getkjkm(String kmName) { + RecordSet rs = new RecordSet(); + String hjkmbm = ""; + String sql = "select * from UF_KJKMPZ where hjkmmc = '" +kmName+"'"; + JAVATools.writelog("获取进项税sql :"+sql); + rs.execute(sql); + if (rs.next()){ + hjkmbm = Util.null2String(rs.getString("HJKMBM")); + } + return hjkmbm; + } + + public String getfkqr(String rid) { + RecordSet rs = new RecordSet(); + String table = JAVATools.getMaintable(rid); + String glfyqrlc = ""; + String sql = "select glfyqrlc from "+table+" where requestid = '" +rid+"'"; + JAVATools.writelog("获取关联流程requestid :"+sql); + rs.execute(sql); + if (rs.next()){ + glfyqrlc = Util.null2String(rs.getString("glfyqrlc")); + } + return glfyqrlc; + } + + public List getJsfk(String fyqr, String fklc) { + List mallPayBizNo = new ArrayList<>(); + if (!"".equals(Util.null2String(fklc))){ + String[] fklcList = fklc.split(","); + String maintable = JAVATools.getMaintable(fklcList[0]); + RecordSet rs = new RecordSet(); + String sql = "select a.lcbh,a.splb,a.glfyqrlc from "+maintable+" a where a.glfyqrlc = '"+fyqr+"'" + " and requestid in ("+fklc+")"; + JAVATools.writelog("获取采购商城费用确认生产的所有付款流程 :"+sql); + rs.execute(sql); + while (rs.next()){ + MallPayBizModel mallPayBizModel = new MallPayBizModel(); + mallPayBizModel.setMallPayBizNo(Util.null2String(rs.getString("lcbh"))); + if ("1".equals(Util.null2String(rs.getString("splb")))){ + //办公品,耗材 mtrTypeId=1 + mallPayBizModel.setPayType("C1018681,C1018682"); + }else if ("2".equals(Util.null2String(rs.getString("splb")))){ + //宣传品 + mallPayBizModel.setPayType("C1018684"); + }else if ("3".equals(Util.null2String(rs.getString("splb")))){ + //电子设备, IT标准硬件 + mallPayBizModel.setPayType("C1018683,ITBZYJ"); + } + mallPayBizNo.add(mallPayBizModel); + } + } + return mallPayBizNo; + } + + public String getLcbh(String fyqr) { + RecordSet rs = new RecordSet(); + String table = JAVATools.getMaintable(fyqr); + String lcbh = ""; + String sql = "select lcbh from "+table+" where requestid = '" +fyqr+"'"; + JAVATools.writelog("获取关联流程流程编号 :"+sql); + rs.execute(sql); + if (rs.next()){ + lcbh = Util.null2String(rs.getString("lcbh")); + } + return lcbh; + } +} diff --git a/src/main/java/com/engine/htsc/payment/enums/BudgetNodeType.java b/src/main/java/com/engine/htsc/payment/enums/BudgetNodeType.java new file mode 100644 index 0000000..01a5fd4 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/enums/BudgetNodeType.java @@ -0,0 +1,19 @@ +package com.engine.htsc.payment.enums; + +public enum BudgetNodeType { + + SUBMIT("3"), //发起,预占3 + RESUBMIT("2,3"),//会计节点,先回退再预占,2,3 + FINISH("1"),//实占,1 + REJECT("2"); //回退,取消预占2 + + private final String value; + + BudgetNodeType(String value) { + this.value = value; + } + + public String getValue() { + return value; + } +} diff --git a/src/main/java/com/engine/htsc/payment/enums/BudgetWF.java b/src/main/java/com/engine/htsc/payment/enums/BudgetWF.java new file mode 100644 index 0000000..d4c932a --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/enums/BudgetWF.java @@ -0,0 +1,56 @@ +package com.engine.htsc.payment.enums; + +import org.apache.commons.lang3.StringUtils; + +public enum BudgetWF { + + //总部通用付款 + PAYMENT("1", "com.engine.htsc.payment.service.impl.HeadPaymentBudgetStrategy"), + + //总部通用报销 + BXBUDGET("2", "com.engine.htsc.payment.service.impl.HeadBxBudgetStrategy"), + + //总部通用差旅报销 + CLBXBUDGET("3", "com.engine.htsc.payment.service.impl.HeadClBxBudgetStrategy"), + + //紫金通用报销 + ZJBXBUDGET("4","com.engine.htsc.payment.service.impl.ZjBxBudgetStrategy"), + + //采购商城通用付款 + CGSCPAYMENT("5","com.engine.htsc.payment.service.impl.HeadCgscPaymentBudgetStrategy"); + + + private String code; + private String className; + + BudgetWF() { + } + + BudgetWF(String code, String className) { + this.code = code; + this.className = className; + } + + public static String getClassNameByCode(String code) { + String className = ""; + if (StringUtils.isEmpty(code)) { + return className; + } + + for (BudgetWF e : BudgetWF.values()) { + if (e.code.equalsIgnoreCase(code)) { + className = e.className; + break; + } + } + return className; + } + + public String getCode() { + return code; + } + + public String getClassName() { + return className; + } +} diff --git a/src/main/java/com/engine/htsc/payment/enums/DataSourceName.java b/src/main/java/com/engine/htsc/payment/enums/DataSourceName.java new file mode 100644 index 0000000..4b5d4be --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/enums/DataSourceName.java @@ -0,0 +1,16 @@ +package com.engine.htsc.payment.enums; + +public enum DataSourceName { + + FinanceD("FinanceD"); //资金库 + + private final String name; + + DataSourceName(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/com/engine/htsc/payment/enums/DispatchType.java b/src/main/java/com/engine/htsc/payment/enums/DispatchType.java new file mode 100644 index 0000000..bf398b2 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/enums/DispatchType.java @@ -0,0 +1,20 @@ +package com.engine.htsc.payment.enums; + +/** + * UF_DSRWDB 调度任务表 rwlx字段 + * + */ +public enum DispatchType { + PROCESS_PDF("PROCESS_PDF"), + PROCESS_AFFIX("PROCESS_AFFIX"); + + private final String type; + + DispatchType(String type) { + this.type = type; + } + + public String getType() { + return type; + } +} diff --git a/src/main/java/com/engine/htsc/payment/enums/HsType.java b/src/main/java/com/engine/htsc/payment/enums/HsType.java new file mode 100644 index 0000000..f3614d9 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/enums/HsType.java @@ -0,0 +1,32 @@ +package com.engine.htsc.payment.enums; + +/** + * 核算 lb 参数{@link weaver.interfaces.htsc.cus.HTUtil} + */ +public enum HsType { + + LHCLBX("", "lhcl"), //联合差旅报销费用核算 + LHPTBX("","lhpt"), //联合普通报销费用核算 + LHFK("","lhfk"), //联合付款费用核算 + ZBCLBX("10","htcl"), //总部差旅报销费用核算 + ZBPTBX("9","htpt"), //总部普通报销费用核算 + CGSCFK("4", "cgsc"), //采购商城付款费用核算 + ZBFK("0,1,2","htfk"); //总部付款费用核算 + + //id 对应 建模 uf_zbfk 中付款类型字段 + private final String id; + private final String type; + + HsType(String id, String type) { + this.id = id; + this.type = type; + } + + public String getType() { + return type; + } + + public String getId() { + return id; + } +} diff --git a/src/main/java/com/engine/htsc/payment/enums/Pay.java b/src/main/java/com/engine/htsc/payment/enums/Pay.java new file mode 100644 index 0000000..232795a --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/enums/Pay.java @@ -0,0 +1,104 @@ +package com.engine.htsc.payment.enums; + +public class Pay { + + public enum Branch { + PAY("fzjgtyfk", "fzjgtyfk_bj"), + REI("fzjgtybx", "fzjgtybx_bj"), + TRIP_PAY("fzjgsljsfk", "fzjgsljsfk_bj"), + TRIP_REI("fzjgclbx", "fzjgclbx_bj"); + private final String wfUnNumber; + private final String endUnNumber; + + Branch(String wfUnNumber, String endUnNumber) { + this.wfUnNumber = wfUnNumber; + this.endUnNumber = endUnNumber; + } + + public String getWfUnNumber() { + return wfUnNumber; + } + + public String getEndUnNumber() { + return endUnNumber; + } + } + + public enum Head { + PAY("zbtyfk", "zbtyfk_bj"), + PAY_IT("zbitfk", "zbitfk_bj"), + PAY_GH("zbghfk", "zbghfk_bj"), + PAY_SL("sljsfk", "sljsfk_bj"), + TRIP_REI("zbclbx", "zbclbx_bj"); + private final String wfUnNumber; + private final String endUnNumber; + + Head(String wfUnNumber, String endUnNumber) { + this.wfUnNumber = wfUnNumber; + this.endUnNumber = endUnNumber; + } + + public String getWfUnNumber() { + return wfUnNumber; + } + + public String getEndUnNumber() { + return endUnNumber; + } + } + + /** + * 香港通用付款;xgtyfk_bj + * 香港通用报销;xgtybx_bj + * 联合通用报销;lhtybx_bj + * 联合出差申请;ccsq_bj + * 联合差旅报销;clbx_bj + * 资管通用报销;zgtybx_bj + * 资管差旅报销;zgclbx_bj + * 紫金通用报销;zjtybx_bj + * 紫金差旅报销;zjclbx_bj + * 财务调整;cwtz_bj + * 联合财务调整;lhcwtz_bj + * 财务考核调整;cwkhtz_bj + * 托收业务流程;fyft_bj + * 资金业务付款;zjywfk_bj + * 内部资金调拨;zbzjnbdb_bj + * 预收款费用确认流程;zbyfkfyqr_bj + * 采购商城费用确认流程;cgscfyqr_bj + * 采购商城结算付款流程;cgscjsfk_bj + */ + public enum Sub { + XG_TY_PAY("xgtyfk", "xgtyfk_bj"), + XG_TY_REI("xgtybx", "xgtybx_bj"), + LH_TY_REI("lhtybx", "lhtybx_bj"), + LH_CL_SQ("ccsq", "ccsq_bj"), + LH_CL_REI("clbx", "ccsq_bj"), + ZG_TY_REI("zgtybx", "zgtybx_bj"), + ZG_CL_REI("zgclbx", "zgclbx_bj"), + CW_TZ("cwtz", "cwtz_bj"), + LH_CW_TZ("lhcwtz", "lhcwtz_bj"), + CW_KH_TZ("cwkhtz", "cwkhtz_bj"), + TS_YW_PAY("fyft", "fyft_bj"), + ZJ_YW_PAY("zjywfk", "zjywfk_bj"), + ZJ_DB("zbzjnbdb", "zbzjnbdb_bj"), + PRE_PAY("zbyfkfyqr", "zbyfkfyqr_bj"), + MALL_PRE_PAY("cgscfyqr", "cgscfyqr_bj"), + MALL_PAY("cgscjsfk", "cgscjsfk_bj"); + private final String wfUnNumber; + private final String endUnNumber; + + Sub(String wfUnNumber, String endUnNumber) { + this.wfUnNumber = wfUnNumber; + this.endUnNumber = endUnNumber; + } + + public String getWfUnNumber() { + return wfUnNumber; + } + + public String getEndUnNumber() { + return endUnNumber; + } + } + +} diff --git a/src/main/java/com/engine/htsc/payment/enums/ReiState.java b/src/main/java/com/engine/htsc/payment/enums/ReiState.java new file mode 100644 index 0000000..9c6e54d --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/enums/ReiState.java @@ -0,0 +1,50 @@ +package com.engine.htsc.payment.enums; + +import org.apache.commons.lang3.StringUtils; + +/** + * k1810012 + * 总部差旅报销状态 + * 0 - 退回,RETURN + * 1 - 拟稿提交,RUNNING + * 2 - 办结前,FINISH + * + */ +public enum ReiState { + + RETURN("0", "RETURN"), + RUNNING("1", "RUNNING"), + FINISH("2", "FINISH"); + + + private final String id; + private final String state; + + ReiState(String id, String state) { + this.id = id; + this.state = state; + } + + public String getId() { + return id; + } + + public String getState() { + return state; + } + + public static String getStateByCode(String code) { + String className = ""; + if (StringUtils.isEmpty(code)) { + return className; + } + + for (ReiState e : ReiState.values()) { + if (e.id.equalsIgnoreCase(code)) { + className = e.state; + break; + } + } + return className; + } +} diff --git a/src/main/java/com/engine/htsc/payment/enums/Sequences.java b/src/main/java/com/engine/htsc/payment/enums/Sequences.java new file mode 100644 index 0000000..ae916f1 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/enums/Sequences.java @@ -0,0 +1,14 @@ +package com.engine.htsc.payment.enums; + +/** + * 网报序列表 + * 总部 + * 分支 + * 子公司 + * @author K1810012 + */ +public enum Sequences { + NET_REI_WORKFLOW_SEQ_ZB, + NET_REI_WORKFLOW_SEQ_FZ, + NET_REI_WORKFLOW_SEQ_ZGS; +} diff --git a/src/main/java/com/engine/htsc/payment/enums/ThirdInterfaceEnum.java b/src/main/java/com/engine/htsc/payment/enums/ThirdInterfaceEnum.java new file mode 100644 index 0000000..3434190 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/enums/ThirdInterfaceEnum.java @@ -0,0 +1,5 @@ +package com.engine.htsc.payment.enums; + +public enum ThirdInterfaceEnum { + YS,HS,YPJ_GL,YPJ_RESET_GL +} \ No newline at end of file diff --git a/src/main/java/com/engine/htsc/payment/enums/UnNumber.java b/src/main/java/com/engine/htsc/payment/enums/UnNumber.java new file mode 100644 index 0000000..07e8b6f --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/enums/UnNumber.java @@ -0,0 +1,27 @@ +package com.engine.htsc.payment.enums; + +public enum UnNumber { + + CCSQ("ccsq", "出差申请"), //出差申请 + ZBTYFK("zbtyfk", "总部通用付款"), //总部通用付款 + ZBITFK("zbitfk", "总部IT付款"), //总部IT付款 + ZBGFFK("zbgffk", "总部工会付款"), //总部工会付款 + ZBYFKFYQR("zbtyfk", "总部预付款费用确认"), //总部预付款费用确认 + CLBX("clbx", "差旅报销"); //差旅报销 + + private final String unNumber; + private final String name; + + UnNumber(String unNumber, String name) { + this.unNumber = unNumber; + this.name = name; + } + + public String getName() { + return name; + } + + public String getUnNumber() { + return unNumber; + } +} diff --git a/src/main/java/com/engine/htsc/payment/enums/WBEnum.java b/src/main/java/com/engine/htsc/payment/enums/WBEnum.java new file mode 100644 index 0000000..ee9072f --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/enums/WBEnum.java @@ -0,0 +1,18 @@ +package com.engine.htsc.payment.enums; + +public enum WBEnum { + HEAD("zbtyfk,zbitfk,zbghfk,zbsljsfk,zbtybx,zbclbx"), + BRANCH("fzjgtybx,fzjgclbx,fzjgtyfk,fzjgsljsfk"), + SUB("zgtybx,zjtybx,zgstybx,zgclbx"); + + WBEnum(String wfUnNumber) { + this.wfUnNumber = wfUnNumber; + } + + private final String wfUnNumber; + + public String getWfUnNumber() { + return wfUnNumber; + } + +} diff --git a/src/main/java/com/engine/htsc/payment/eusp/EUSP.java b/src/main/java/com/engine/htsc/payment/eusp/EUSP.java new file mode 100644 index 0000000..8bd1514 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/eusp/EUSP.java @@ -0,0 +1,14 @@ +/** + * EUSP.java + * + * This file was auto-generated from WSDL + * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter. + */ + +package com.engine.htsc.payment.eusp; + +public interface EUSP extends java.rmi.Remote { + public EUSPOutput login(String loginuser, String md5Password) throws java.rmi.RemoteException; + public void logout(String token) throws java.rmi.RemoteException; + public EUSPOutput callService(String token, String productId, String serviceName, String methodName, EUSPParameter[] params) throws java.rmi.RemoteException; +} diff --git a/src/main/java/com/engine/htsc/payment/eusp/EUSPOutput.java b/src/main/java/com/engine/htsc/payment/eusp/EUSPOutput.java new file mode 100644 index 0000000..542174e --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/eusp/EUSPOutput.java @@ -0,0 +1,271 @@ +/** + * EUSPOutput.java + * + * This file was auto-generated from WSDL + * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter. + */ + +package com.engine.htsc.payment.eusp; + +public class EUSPOutput implements java.io.Serializable { + private int retCode; + + private String retMessage; + + private String retValue; + + private int rowsetCount; + + private EUSPRowSet[] rowsets; + + public EUSPOutput() { + } + + public EUSPOutput( + int retCode, + String retMessage, + String retValue, + int rowsetCount, + EUSPRowSet[] rowsets) { + this.retCode = retCode; + this.retMessage = retMessage; + this.retValue = retValue; + this.rowsetCount = rowsetCount; + this.rowsets = rowsets; + } + + + /** + * Gets the retCode value for this EUSPOutput. + * + * @return retCode + */ + public int getRetCode() { + return retCode; + } + + + /** + * Sets the retCode value for this EUSPOutput. + * + * @param retCode + */ + public void setRetCode(int retCode) { + this.retCode = retCode; + } + + + /** + * Gets the retMessage value for this EUSPOutput. + * + * @return retMessage + */ + public String getRetMessage() { + return retMessage; + } + + + /** + * Sets the retMessage value for this EUSPOutput. + * + * @param retMessage + */ + public void setRetMessage(String retMessage) { + this.retMessage = retMessage; + } + + + /** + * Gets the retValue value for this EUSPOutput. + * + * @return retValue + */ + public String getRetValue() { + return retValue; + } + + + /** + * Sets the retValue value for this EUSPOutput. + * + * @param retValue + */ + public void setRetValue(String retValue) { + this.retValue = retValue; + } + + + /** + * Gets the rowsetCount value for this EUSPOutput. + * + * @return rowsetCount + */ + public int getRowsetCount() { + return rowsetCount; + } + + + /** + * Sets the rowsetCount value for this EUSPOutput. + * + * @param rowsetCount + */ + public void setRowsetCount(int rowsetCount) { + this.rowsetCount = rowsetCount; + } + + + /** + * Gets the rowsets value for this EUSPOutput. + * + * @return rowsets + */ + public EUSPRowSet[] getRowsets() { + return rowsets; + } + + + /** + * Sets the rowsets value for this EUSPOutput. + * + * @param rowsets + */ + public void setRowsets(EUSPRowSet[] rowsets) { + this.rowsets = rowsets; + } + + private Object __equalsCalc = null; + @Override + public synchronized boolean equals(Object obj) { + if (!(obj instanceof EUSPOutput)) { + return false; + } + EUSPOutput other = (EUSPOutput) obj; + if (obj == null) { + return false; + } + if (this == obj) { + return true; + } + if (__equalsCalc != null) { + return (__equalsCalc == obj); + } + __equalsCalc = obj; + boolean _equals; + _equals = true && + this.retCode == other.getRetCode() && + ((this.retMessage==null && other.getRetMessage()==null) || + (this.retMessage!=null && + this.retMessage.equals(other.getRetMessage()))) && + ((this.retValue==null && other.getRetValue()==null) || + (this.retValue!=null && + this.retValue.equals(other.getRetValue()))) && + this.rowsetCount == other.getRowsetCount() && + ((this.rowsets==null && other.getRowsets()==null) || + (this.rowsets!=null && + java.util.Arrays.equals(this.rowsets, other.getRowsets()))); + __equalsCalc = null; + return _equals; + } + + private boolean __hashCodeCalc = false; + @Override + public synchronized int hashCode() { + if (__hashCodeCalc) { + return 0; + } + __hashCodeCalc = true; + int _hashCode = 1; + _hashCode += getRetCode(); + if (getRetMessage() != null) { + _hashCode += getRetMessage().hashCode(); + } + if (getRetValue() != null) { + _hashCode += getRetValue().hashCode(); + } + _hashCode += getRowsetCount(); + if (getRowsets() != null) { + for (int i=0; + i> query = CommonAPI.queryWithPlaceholder(tableName, + "requestid,lcbh", "requestid,lcbh", + 1920930, "总部通用付款20210400006"); + System.out.println("query = " + query); + + } + + @Override + void getAllAppendix(String tableName) { + + } + +} diff --git a/src/main/java/com/engine/htsc/payment/model/LeaderViewBaseModel.java b/src/main/java/com/engine/htsc/payment/model/LeaderViewBaseModel.java new file mode 100644 index 0000000..6fde751 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/model/LeaderViewBaseModel.java @@ -0,0 +1,96 @@ +package com.engine.htsc.payment.model; + +public class LeaderViewBaseModel { + private String yskmbm; + private String yskmmc; + private String totalBudget; + private String preUsedBudget; + private String usedBudget; + private String usedPercent; + private String yskmjl; +// private String deptId; +// private String deptName; +// private String deptCode; + + public String getYskmbm() { + return yskmbm; + } + + public void setYskmbm(String yskmbm) { + this.yskmbm = yskmbm; + } + + public String getYskmmc() { + return yskmmc; + } + + public void setYskmmc(String yskmmc) { + this.yskmmc = yskmmc; + } + + + public String getTotalBudget() { + return totalBudget; + } + + public void setTotalBudget(String totalBudget) { + this.totalBudget = totalBudget; + } + + public String getPreUsedBudget() { + return preUsedBudget; + } + + public void setPreUsedBudget(String preUsedBudget) { + this.preUsedBudget = preUsedBudget; + } + + public String getUsedBudget() { + return usedBudget; + } + + public void setUsedBudget(String usedBudget) { + this.usedBudget = usedBudget; + } + + public String getUsedPercent() { + return usedPercent; + } + + public void setUsedPercent(String usedPercent) { + this.usedPercent = usedPercent; + } + + public String getYskmjl() { + return yskmjl; + } + + public void setYskmjl(String yskmjl) { + this.yskmjl = yskmjl; + } + +// public String getDeptId() { +// return deptId; +// } +// +// public void setDeptId(String deptId) { +// this.deptId = deptId; +// } +// +// public String getDeptName() { +// return deptName; +// } +// +// public void setDeptName(String deptName) { +// this.deptName = deptName; +// } +// +// public String getDeptCode() { +// return deptCode; +// } +// +// public void setDeptCode(String deptCode) { +// this.deptCode = deptCode; +// } + +} diff --git a/src/main/java/com/engine/htsc/payment/model/LeaderViewModel.java b/src/main/java/com/engine/htsc/payment/model/LeaderViewModel.java new file mode 100644 index 0000000..7e95940 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/model/LeaderViewModel.java @@ -0,0 +1,43 @@ +package com.engine.htsc.payment.model; + +import java.util.List; + +public class LeaderViewModel extends LeaderViewBaseModel { + private List yskmList; + private String deptId; + private String deptName; + private String deptCode; + + + public String getDeptId() { + return deptId; + } + + public void setDeptId(String deptId) { + this.deptId = deptId; + } + + public String getDeptName() { + return deptName; + } + + public void setDeptName(String deptName) { + this.deptName = deptName; + } + + public String getDeptCode() { + return deptCode; + } + + public void setDeptCode(String deptCode) { + this.deptCode = deptCode; + } + + public List getYskmList() { + return yskmList; + } + + public void setYskmList(List yskmList) { + this.yskmList = yskmList; + } +} diff --git a/src/main/java/com/engine/htsc/payment/model/SendAppendicesTask.java b/src/main/java/com/engine/htsc/payment/model/SendAppendicesTask.java new file mode 100644 index 0000000..b40ad6d --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/model/SendAppendicesTask.java @@ -0,0 +1,71 @@ +package com.engine.htsc.payment.model; + +import com.alibaba.fastjson.JSON; +import com.engine.htsc.meeting.util.Common; +import com.engine.htsc.payment.log.PaymentLogger; +import com.engine.htsc.payment.log.PaymentLoggerFactory; +import org.apache.commons.lang3.Validate; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.htsc.cus.HTUtil; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.RecursiveAction; +import java.util.function.Predicate; + +public class SendAppendicesTask extends RecursiveAction { + + private static final PaymentLogger logger = PaymentLoggerFactory.getLogger(SendAppendicesTask.class); + + private static final int THRESHOLD = 50; + private int start; + private int end; + private ResourceComInfo rc = new ResourceComInfo(); + private WfParams wfParams; + HTUtil htUtil = new HTUtil(); + + + public SendAppendicesTask(int start, int end, WfParams wfParams) throws Exception { + this.start = start; + this.end = end; + this.wfParams = wfParams; + } + + @Override + protected void compute() { + try { + Validate.notNull(wfParams, "WfParams is null or empty"); + Validate.notEmpty(wfParams.getAppendices(), "WfParams.appendices list is null or empty,continue..."); + if (end - start < THRESHOLD) { + logger.info(String.format("[start,end]=[%d,%d] start...", start, end)); + List> appendices = wfParams.getAppendices().subList(start, end); + appendices.parallelStream().distinct().filter(WfParams::qualifyAppendices).forEach(appendix -> { + //附件 + Map paras = new HashMap<>(); + paras.put("billid", appendix.get(WfParams.REQUEST_MARK)); + paras.put("workcode", rc.getWorkcode(appendix.get(WfParams.CREATE))); + paras.put("fileids", appendix.get("appendices")); + logger.info(String.format("appendices langChao in: %s", JSON.toJSONString(paras))); + String langChaoResponse = htUtil.SendImageWithAffix(paras); + logger.info(String.format("appendices langChao out: %s", JSON.toJSONString(langChaoResponse))); + + }); + + } else { + // 如果当end与start之间的差大于THRESHOLD时,任务分解 + int middle = (start + end) / 2; + //捕获异常 + invokeAll(new SendAppendicesTask(start, middle, wfParams), new SendAppendicesTask(middle, end, wfParams)); + } + + } catch (Exception e) { + logger.error(String.format("[start,end]=[%d,%d] occur error", start, end), e); + } + + } + + private static Predicate not(Predicate t) { + return t.negate(); + } +} diff --git a/src/main/java/com/engine/htsc/payment/model/SendPDFTask.java b/src/main/java/com/engine/htsc/payment/model/SendPDFTask.java new file mode 100644 index 0000000..e940e43 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/model/SendPDFTask.java @@ -0,0 +1,78 @@ +package com.engine.htsc.payment.model; + +import com.alibaba.fastjson.JSON; +import com.engine.htsc.meeting.util.Common; +import com.engine.htsc.payment.log.PaymentLogger; +import com.engine.htsc.payment.log.PaymentLoggerFactory; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.Validate; +import weaver.general.BaseBean; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.htsc.cus.HTUtil; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.RecursiveAction; +import java.util.function.Predicate; + +public class SendPDFTask extends RecursiveAction { + + private static final PaymentLogger logger = PaymentLoggerFactory.getLogger(SendPDFTask.class); + + private static final int THRESHOLD = 50; + private int start; + private int end; + private ResourceComInfo rc = new ResourceComInfo(); + private WfParams wfParams; + HTUtil htUtil = new HTUtil(); + + + public SendPDFTask(int start, int end, WfParams wfParams) throws Exception { + this.start = start; + this.end = end; + this.wfParams = wfParams; + } + + @Override + protected void compute() { + try { + Validate.notNull(wfParams, "WfParams is null or empty"); + Validate.notEmpty(wfParams.getRequestInfos(), "WfParams.requestInfos list is null or empty,continue..."); + if (end - start < THRESHOLD) { + logger.info(String.format("[start,end]=[%d,%d] start...", start, end)); + List> requestInfos = wfParams.getRequestInfos().subList(start, end); + requestInfos.parallelStream().distinct().filter(WfParams::qualifyRequestInfo).forEach(requestInfo -> { + //生成审批单PDF + String path = Common.saveProcessPDFWithReturnFilePath(wfParams.getModeid(), + requestInfo.get(WfParams.REQUEST_ID), + requestInfo.get(WfParams.REQUEST_MARK)); + //浪潮 + Map paras = new HashMap<>(); + paras.put("billid", requestInfo.get(WfParams.REQUEST_MARK)); + paras.put("workcode", rc.getWorkcode(requestInfo.get(WfParams.CREATE))); + paras.put("filePath", path); + logger.info(String.format("langChao in: %s", JSON.toJSONString(paras))); + String langChaoResponse = htUtil.SendImageWithInputStream(paras); + logger.info(String.format("langChao out: %s", JSON.toJSONString(langChaoResponse))); + + }); + + } else { + // 如果当end与start之间的差大于THRESHOLD时,任务分解 + int middle = (start + end) / 2; + //捕获异常 + invokeAll(new SendPDFTask(start, middle, wfParams), new SendPDFTask(middle, end, wfParams)); + } + + } catch (Exception e) { + logger.error(String.format("[start,end]=[%d,%d] occur error", start, end), e); + } + + } + + private static Predicate not(Predicate t) { + return t.negate(); + } +} diff --git a/src/main/java/com/engine/htsc/payment/model/TestForkJoinPool.java b/src/main/java/com/engine/htsc/payment/model/TestForkJoinPool.java new file mode 100644 index 0000000..b39f281 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/model/TestForkJoinPool.java @@ -0,0 +1,53 @@ +package com.engine.htsc.payment.model; + + +import java.util.concurrent.*; + +public class TestForkJoinPool { + + private static final Integer MAX = 200; + + static class MyForkJoinTask extends RecursiveAction { + // 子任务开始计算的值 + private Integer startValue; + + // 子任务结束计算的值 + private Integer endValue; + + public MyForkJoinTask(Integer startValue , Integer endValue) { + this.startValue = startValue; + this.endValue = endValue; + } + + @Override + protected void compute() { + // 如果条件成立,说明这个任务所需要计算的数值分为足够小了 + // 可以正式进行累加计算了 + if(endValue - startValue < MAX) { + System.out.println("开始计算的部分:startValue = " + startValue + ";endValue = " + endValue); + Integer totalValue = 0; + for(int index = this.startValue ; index <= this.endValue ; index++) { + totalValue += index; + } + } + // 否则再进行任务拆分,拆分成两个任务 + else { + MyForkJoinTask subTask1 = new MyForkJoinTask(startValue, (startValue + endValue) / 2); + subTask1.fork(); + MyForkJoinTask subTask2 = new MyForkJoinTask((startValue + endValue) / 2 + 1 , endValue); + subTask2.fork(); + } + } + } + + public static void main(String[] args) { + // 这是Fork/Join框架的线程池 + ForkJoinPool pool = new ForkJoinPool(); + try { + pool.submit(new MyForkJoinTask(1,1001)); + pool.awaitTermination(5, TimeUnit.SECONDS); + } catch (Exception e) { + e.printStackTrace(System.out); + } + } +} diff --git a/src/main/java/com/engine/htsc/payment/model/WfParams.java b/src/main/java/com/engine/htsc/payment/model/WfParams.java new file mode 100644 index 0000000..b923cc1 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/model/WfParams.java @@ -0,0 +1,195 @@ +package com.engine.htsc.payment.model; + +import com.engine.htsc.payment.util.AssertUtil; +import com.engine.htsc.payment.util.CommonAPI; +import org.apache.commons.lang3.StringUtils; +import weaver.general.BaseBean; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 流程相关信息 + */ +public class WfParams implements Serializable { + + private static final long serialVersionUID = 3311023766057703155L; + + public static final String REQUEST_ID = "requestid"; + public static final String REQUEST_NAME = "requestname"; + public static final String REQUEST_MARK = "requestmark"; + public static final String CREATE = "creater"; + + /** + * map keys: + * requestid,requestname,requestmark,creater + */ + private List> requestInfos; + + private String tableName; + + /** + * 流程唯一英文简写 + */ + private String unnumber; + + private int workflowid; + /** + * 打印模板 + */ + private String modeid; + + /** + * 附件 + */ + private List> appendices; + + public WfParams(Builder builder) { + this.requestInfos = builder.requestInfos; + this.modeid = builder.modeid; + this.tableName = builder.tableName; + this.unnumber = builder.unnumber; + this.workflowid = builder.workflowid; + this.appendices = builder.appendices; + } + + public List> getRequestInfos() { + return requestInfos; + } + + public String getModeid() { + return modeid; + } + + public void setModeid(String modeid) { + this.modeid = modeid; + } + + public void setRequestInfos(List> requestInfos) { + this.requestInfos = requestInfos; + } + + public List> getAppendices() { + return appendices; + } + + public void setAppendices(List> appendices) { + this.appendices = appendices; + } + + public static class Builder extends BaseBean { + private List> requestInfos; + private String modeid; + private String tableName; + private String unnumber; + private int workflowid; + private List> appendices; + + private Builder setTableName(String tableName) { + this.tableName = tableName; + return this; + } + + private Builder setWorkflowid(int workflowid) { + this.workflowid = workflowid; + return this; + } + + private Builder setAppendices(List> appendices) { + this.appendices = appendices; + return this; + } + + private Builder setRequestInfos(List> requestInfos) { + this.requestInfos = requestInfos; + return this; + } + + public Builder setModeid(String modeid) { + this.modeid = modeid; + return this; + } + + private Builder() { + + } + + public Builder(String unnumber) { + this.unnumber = unnumber; + } + + public void buildTableInfo() { + String sql = "select t1.tablename,t2.id from workflow_bill t1\n" + + "left join workflow_base t2\n" + + "on t1.id=t2.formid\n" + + "where t2.isvalid=1 and t2.unnumber=?"; + Map info = CommonAPI.querySingleRow(sql, this.unnumber); + this.setTableName(info.get("tablename")); + String workflowid = info.get("id"); + this.setWorkflowid(Integer.parseInt(workflowid)); + } + + public WfParams build() { + try { + //获取 tablename workflowid + buildTableInfo(); + return new WfParams(this); + } catch (Exception e) { + writeLog("build WfParams error, ", e); + return null; + } + + } + + } + + public String getTableName() { + return tableName; + } + + public String getUnnumber() { + return unnumber; + } + + public int getWorkflowid() { + return workflowid; + } + + public static boolean qualifyRequestInfo(Map requestInfo) { + if (requestInfo == null) { + return false; + } + if (StringUtils.isEmpty(requestInfo.get("requestmark"))) { + return false; + } + if (StringUtils.isEmpty(requestInfo.get("requestname"))) { + return false; + } + return true; + } + + public static boolean qualifyAppendices(Map affix) { + if (affix == null) { + return false; + } + if (StringUtils.isEmpty(affix.get("requestmark"))) { + return false; + } + if (StringUtils.isEmpty(affix.get("appendices"))) { + return false; + } + return true; + } + + @Override + public String toString() { + return "WfParams{" + + " tableName='" + tableName + '\'' + + ", unnumber='" + unnumber + '\'' + + ", workflowid=" + workflowid + + ", modeid='" + modeid + '\'' + + '}'; + } +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/BudgetDTO.java b/src/main/java/com/engine/htsc/payment/pojo/BudgetDTO.java new file mode 100644 index 0000000..77f47c5 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/BudgetDTO.java @@ -0,0 +1,94 @@ +package com.engine.htsc.payment.pojo; + + +import com.alibaba.fastjson.annotation.JSONField; + +import java.io.Serializable; +import java.util.List; + +/** + * 付款流程预算接口入参 {@link weaver.interfaces.htsc.cus.HTUtil} + */ +public class BudgetDTO implements Serializable { + private static final long serialVersionUID = -624377204568331845L; + + @JSONField(name = "billnum") + private String billNum; + @JSONField(name = "bizdate") + private String bizDate; + @JSONField(name = "billstatus") + private String billStatus; + @JSONField(name = "billname") + private String billName; + @JSONField(name = "billtitle") + private String billTitle; + private String pesonName; + + @JSONField(name = "sfyfp") + private String sfyfp; + private List list; + + public String getBillNum() { + return billNum; + } + + public void setBillNum(String billNum) { + this.billNum = billNum; + } + + public String getBizDate() { + return bizDate; + } + + public void setBizDate(String bizDate) { + this.bizDate = bizDate; + } + + public String getBillStatus() { + return billStatus; + } + + public void setBillStatus(String billStatus) { + this.billStatus = billStatus; + } + + public String getBillName() { + return billName; + } + + public void setBillName(String billName) { + this.billName = billName; + } + + public String getBillTitle() { + return billTitle; + } + + public void setBillTitle(String billTitle) { + this.billTitle = billTitle; + } + + public String getPesonName() { + return pesonName; + } + + public void setPesonName(String pesonName) { + this.pesonName = pesonName; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public String getSFYFP() { + return sfyfp; + } + + public void setSFYFP(String sfyfp) { + this.sfyfp = sfyfp; + } +} \ No newline at end of file diff --git a/src/main/java/com/engine/htsc/payment/pojo/BudgetData.java b/src/main/java/com/engine/htsc/payment/pojo/BudgetData.java new file mode 100644 index 0000000..42baf83 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/BudgetData.java @@ -0,0 +1,53 @@ +package com.engine.htsc.payment.pojo; + +import java.io.Serializable; + +public class BudgetData implements Serializable { + + private static final long serialVersionUID = -1673659956199314138L; + private String relationCode; + private String itemCode; + private String itemName; + + public BudgetData() { + } + + public BudgetData(String relationCode, String itemCode, String itemName) { + this.relationCode = relationCode; + this.itemCode = itemCode; + this.itemName = itemName; + } + + public String getRelationCode() { + return relationCode; + } + + public void setRelationCode(String relationCode) { + this.relationCode = relationCode; + } + + public String getItemCode() { + return itemCode; + } + + public void setItemCode(String itemCode) { + this.itemCode = itemCode; + } + + public String getItemName() { + return itemName; + } + + public void setItemName(String itemName) { + this.itemName = itemName; + } + + @Override + public String toString() { + return "BudgetData{" + + "relationCode='" + relationCode + '\'' + + ", itemCode='" + itemCode + '\'' + + ", itemName='" + itemName + '\'' + + '}'; + } +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/BudgetList.java b/src/main/java/com/engine/htsc/payment/pojo/BudgetList.java new file mode 100644 index 0000000..7a594e2 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/BudgetList.java @@ -0,0 +1,90 @@ +package com.engine.htsc.payment.pojo; + +import com.alibaba.fastjson.annotation.JSONField; + +public class BudgetList { + private String deptNum; + @JSONField(name = "bgitem") + private String bgItem; + private String itemEntryNum; + private String bgElement; + private String billEntryID; + private String amount; + @JSONField(name = "notaxAmount") + private String noTaxAmount; + private String taxAmount; + private String bgITElement; + + public String getDeptNum() { + return deptNum; + } + + public void setDeptNum(String deptNum) { + this.deptNum = deptNum; + } + + public String getBgItem() { + return bgItem; + } + + public void setBgItem(String bgItem) { + this.bgItem = bgItem; + } + + public String getItemEntryNum() { + return itemEntryNum; + } + + public void setItemEntryNum(String itemEntryNum) { + this.itemEntryNum = itemEntryNum; + } + + public String getBgElement() { + return bgElement; + } + + public void setBgElement(String bgElement) { + this.bgElement = bgElement; + } + + public String getBillEntryID() { + return billEntryID; + } + + public void setBillEntryID(String billEntryID) { + this.billEntryID = billEntryID; + } + + public String getAmount() { + return amount; + } + + public void setAmount(String amount) { + this.amount = amount; + } + + public String getNoTaxAmount() { + return noTaxAmount; + } + + public void setNoTaxAmount(String noTaxAmount) { + this.noTaxAmount = noTaxAmount; + } + + public String getTaxAmount() { + return taxAmount; + } + + public void setTaxAmount(String taxAmount) { + this.taxAmount = taxAmount; + } + + public String getBgITElement() { + return bgITElement; + } + + public void setBgITElement(String bgITElement) { + this.bgITElement = bgITElement; + } + +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/BudgetReqDto.java b/src/main/java/com/engine/htsc/payment/pojo/BudgetReqDto.java new file mode 100644 index 0000000..1d6e73c --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/BudgetReqDto.java @@ -0,0 +1,54 @@ +package com.engine.htsc.payment.pojo; + +import java.io.Serializable; + +public class BudgetReqDto implements Serializable { + //部门id + private String deptCode; + //预算科目 逗号分割 + private String bgItem; + //拟稿时间 + private String bgPeriod; + + public BudgetReqDto() { + } + + public BudgetReqDto(String deptCode, String bgItem, String bgPeriod) { + this.deptCode = deptCode; + this.bgItem = bgItem; + this.bgPeriod = bgPeriod; + } + + public String getDeptCode() { + return deptCode; + } + + public void setDeptCode(String deptCode) { + this.deptCode = deptCode; + } + + public String getBgItem() { + return bgItem; + } + + public void setBgItem(String bgItem) { + this.bgItem = bgItem; + } + + public String getBgPeriod() { + return bgPeriod; + } + + public void setBgPeriod(String bgPeriod) { + this.bgPeriod = bgPeriod; + } + + @Override + public String toString() { + return "BudgetReqDto{" + + "deptCode='" + deptCode + '\'' + + ", bgItem='" + bgItem + '\'' + + ", bgPeriod='" + bgPeriod + '\'' + + '}'; + } +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/BxBudgetDTO.java b/src/main/java/com/engine/htsc/payment/pojo/BxBudgetDTO.java new file mode 100644 index 0000000..31ea7d5 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/BxBudgetDTO.java @@ -0,0 +1,93 @@ +package com.engine.htsc.payment.pojo; + + +import com.alibaba.fastjson.annotation.JSONField; + +import java.io.Serializable; +import java.util.List; + +/** + * 报销流程预算接口入参 {@link weaver.interfaces.htsc.cus.HTUtil} + */ +public class BxBudgetDTO implements Serializable { + private static final long serialVersionUID = -634377204568331845L; + + @JSONField(name = "billnum") + private String billNum; + @JSONField(name = "bizdate") + private String bizDate; + @JSONField(name = "billstatus") + private String billStatus; + @JSONField(name = "billname") + private String billName; + @JSONField(name = "billtitle") + private String billTitle; + @JSONField(name = "workFlowNum") + private String workFlowNum; + private String pesonName; + private List list; + + public String getBillNum() { + return billNum; + } + + public void setBillNum(String billNum) { + this.billNum = billNum; + } + + public String getBizDate() { + return bizDate; + } + + public void setBizDate(String bizDate) { + this.bizDate = bizDate; + } + + public String getBillStatus() { + return billStatus; + } + + public void setBillStatus(String billStatus) { + this.billStatus = billStatus; + } + + public String getBillName() { + return billName; + } + + public void setBillName(String billName) { + this.billName = billName; + } + + public String getBillTitle() { + return billTitle; + } + + public void setBillTitle(String billTitle) { + this.billTitle = billTitle; + } + + public String getPesonName() { + return pesonName; + } + + public void setPesonName(String pesonName) { + this.pesonName = pesonName; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public String getWorkFlowNum() { + return workFlowNum; + } + + public void setWorkFlowNum(String workFlowNum) { + this.workFlowNum = workFlowNum; + } +} \ No newline at end of file diff --git a/src/main/java/com/engine/htsc/payment/pojo/ContractInfoVo.java b/src/main/java/com/engine/htsc/payment/pojo/ContractInfoVo.java new file mode 100644 index 0000000..06fb509 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/ContractInfoVo.java @@ -0,0 +1,97 @@ +package com.engine.htsc.payment.pojo; + +import com.alibaba.fastjson.annotation.JSONField; + +import java.io.Serializable; +import java.util.List; + +/** + * 合同接口返回数据 + */ +public class ContractInfoVo implements Serializable { + + private static final long serialVersionUID = 7169357361813015204L; + @JSONField(ordinal = 1) + private Integer totalRecords; + @JSONField(ordinal = 2) + private Integer firstResult; + @JSONField(ordinal = 3) + private Integer maxResult; + @JSONField(ordinal = 4) + private Boolean isSuccess; + @JSONField(ordinal = 5) + private Integer resultState; + @JSONField(ordinal = 6) + private String msg; + @JSONField(ordinal = 7) + private List data; + + public Integer getTotalRecords() { + return totalRecords; + } + + public void setTotalRecords(Integer totalRecords) { + this.totalRecords = totalRecords; + } + + public Integer getFirstResult() { + return firstResult; + } + + public void setFirstResult(Integer firstResult) { + this.firstResult = firstResult; + } + + public Integer getMaxResult() { + return maxResult; + } + + public void setMaxResult(Integer maxResult) { + this.maxResult = maxResult; + } + + public Boolean getIsSuccess() { + return isSuccess; + } + + public void setIsSuccess(Boolean success) { + isSuccess = success; + } + + public Integer getResultState() { + return resultState; + } + + public void setResultState(Integer resultState) { + this.resultState = resultState; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + @Override + public String toString() { + return "ContractInfoVo{" + + "totalRecords=" + totalRecords + + ", firstResult=" + firstResult + + ", maxResult=" + maxResult + + ", isSuccess=" + isSuccess + + ", resultState=" + resultState + + ", msg='" + msg + '\'' + + ", data=" + data + + '}'; + } +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/ContractRequestJson.java b/src/main/java/com/engine/htsc/payment/pojo/ContractRequestJson.java new file mode 100644 index 0000000..c85c774 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/ContractRequestJson.java @@ -0,0 +1,158 @@ +package com.engine.htsc.payment.pojo; + +import java.io.Serializable; + +/** + * 请求信息封装 + */ +public class ContractRequestJson implements Serializable { + + private static final long serialVersionUID = 4626492147447527232L; + + private String ctrctCode; + private String ctrctName; + private Integer curPage; + private Integer firstResult; + private Integer maxResult; + private String moduleCode; + private String oaCode; + private String oaPayUrl; + private Boolean pagination; + private String paymentDate; + private String paymentMoney; + private String processCode; + private String sysCode; + private String userId; + + public String getCtrctCode() { + return ctrctCode; + } + + public void setCtrctCode(String ctrctCode) { + this.ctrctCode = ctrctCode; + } + + public String getCtrctName() { + return ctrctName; + } + + public void setCtrctName(String ctrctName) { + this.ctrctName = ctrctName; + } + + public Integer getCurPage() { + return curPage; + } + + public void setCurPage(Integer curPage) { + this.curPage = curPage; + } + + public Integer getFirstResult() { + return firstResult; + } + + public void setFirstResult(Integer firstResult) { + this.firstResult = firstResult; + } + + public Integer getMaxResult() { + return maxResult; + } + + public void setMaxResult(Integer maxResult) { + this.maxResult = maxResult; + } + + public String getModuleCode() { + return moduleCode; + } + + public void setModuleCode(String moduleCode) { + this.moduleCode = moduleCode; + } + + public String getOaCode() { + return oaCode; + } + + public void setOaCode(String oaCode) { + this.oaCode = oaCode; + } + + public String getOaPayUrl() { + return oaPayUrl; + } + + public void setOaPayUrl(String oaPayUrl) { + this.oaPayUrl = oaPayUrl; + } + + public Boolean getPagination() { + return pagination; + } + + public void setPagination(Boolean pagination) { + this.pagination = pagination; + } + + public String getPaymentDate() { + return paymentDate; + } + + public void setPaymentDate(String paymentDate) { + this.paymentDate = paymentDate; + } + + public String getPaymentMoney() { + return paymentMoney; + } + + public void setPaymentMoney(String paymentMoney) { + this.paymentMoney = paymentMoney; + } + + public String getProcessCode() { + return processCode; + } + + public void setProcessCode(String processCode) { + this.processCode = processCode; + } + + public String getSysCode() { + return sysCode; + } + + public void setSysCode(String sysCode) { + this.sysCode = sysCode; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + @Override + public String toString() { + return "ContractRequestJson{" + + "ctrctCode='" + ctrctCode + '\'' + + ", ctrctName='" + ctrctName + '\'' + + ", curPage=" + curPage + + ", firstResult=" + firstResult + + ", maxResult=" + maxResult + + ", moduleCode='" + moduleCode + '\'' + + ", oaCode='" + oaCode + '\'' + + ", oaPayUrl='" + oaPayUrl + '\'' + + ", pagination=" + pagination + + ", paymentDate='" + paymentDate + '\'' + + ", paymentMoney='" + paymentMoney + '\'' + + ", processCode='" + processCode + '\'' + + ", sysCode='" + sysCode + '\'' + + ", userId='" + userId + '\'' + + '}'; + } +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/ContractRequestParam.java b/src/main/java/com/engine/htsc/payment/pojo/ContractRequestParam.java new file mode 100644 index 0000000..386379e --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/ContractRequestParam.java @@ -0,0 +1,94 @@ +package com.engine.htsc.payment.pojo; + +import java.io.Serializable; + +/** + * 合同信息查询条件 + */ +public class ContractRequestParam implements Serializable { + + private static final long serialVersionUID = 6178379156928967640L; + + /** + * 当前页码 + */ + private Integer currentPage = 0; + /** + * 分页数 + */ + private Integer pageSize = 10; + /** + * 工号 + */ + private String userCode; + /** + * 合同编号 + */ + private String code; + /** + * 合同名称 + */ + private String name; + + public Integer getCurrentPage() { + return currentPage; + } + + public void setCurrentPage(Integer currentPage) { + this.currentPage = currentPage; + } + + public Integer getPageSize() { + return pageSize; + } + + public void setPageSize(Integer pageSize) { + this.pageSize = pageSize; + } + + public String getUserCode() { + return userCode; + } + + public void setUserCode(String userCode) { + this.userCode = userCode; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public ContractRequestParam() { + } + + public ContractRequestParam(Integer currentPage, Integer pageSize, String userCode, String code, String name) { + this.currentPage = currentPage; + this.pageSize = pageSize; + this.userCode = userCode; + this.code = code; + this.name = name; + } + + @Override + public String toString() { + return "ContractRequestParam{" + + "currentPage=" + currentPage + + ", pageSize=" + pageSize + + ", userCode='" + userCode + '\'' + + ", code='" + code + '\'' + + ", name='" + name + '\'' + + '}'; + } +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/ContractVo.java b/src/main/java/com/engine/htsc/payment/pojo/ContractVo.java new file mode 100644 index 0000000..8e9f446 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/ContractVo.java @@ -0,0 +1,83 @@ +package com.engine.htsc.payment.pojo; + +import com.alibaba.fastjson.annotation.JSONField; + +import java.io.Serializable; +import java.util.List; + +public class ContractVo implements Serializable { + + private static final long serialVersionUID = -1233724888213513961L; + + @JSONField(ordinal = 1) + private String code; + @JSONField(ordinal = 2) + private String name; + @JSONField(ordinal = 3) + private String processCode; + @JSONField(ordinal = 4) + private String currency; + @JSONField(ordinal = 5) + private String ttl; + + private List data; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getProcessCode() { + return processCode; + } + + public void setProcessCode(String processCode) { + this.processCode = processCode; + } + + public String getCurrency() { + return currency; + } + + public void setCurrency(String currency) { + this.currency = currency; + } + + public String getTtl() { + return ttl; + } + + public void setTtl(String ttl) { + this.ttl = ttl; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + @Override + public String toString() { + return "ContractVo{" + + "code='" + code + '\'' + + ", name='" + name + '\'' + + ", processCode='" + processCode + '\'' + + ", currency='" + currency + '\'' + + ", ttl='" + ttl + '\'' + + '}'; + } +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/CostAccountDto.java b/src/main/java/com/engine/htsc/payment/pojo/CostAccountDto.java new file mode 100644 index 0000000..840129c --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/CostAccountDto.java @@ -0,0 +1,324 @@ +package com.engine.htsc.payment.pojo; + +import com.alibaba.fastjson.annotation.JSONField; + +import java.io.Serializable; +import java.util.List; + +/** + * 核算请求数据封装 + */ +public class CostAccountDto implements Serializable { + private static final long serialVersionUID = -6198697112629171860L; + + //是否全电子 + @JSONField(name = "sfqdz") + private String electronicBill; + + //类别 + @JSONField(name = "lb") + private String type; + + //拟稿人部门名称 + @JSONField(name = "bxbm") + private String ngrDept; + + //拟稿人部门编号 + @JSONField(name = "bxbmbh") + private String ngrDeptCode; + + //拟稿人姓名 + @JSONField(name = "bxr") + private String ngrName; + + //流程编号 + @JSONField(name = "bxbh") + private String requestMark; + + //流程id + @JSONField(name = "djid") + private String requestId; + + //附件张数 + @JSONField(name = "fjzs") + private String attachmentNum; + + //报销地点(中文) + @JSONField(name = "dq") + private String locationName; + + //流程标题 + @JSONField(name = "zy") + private String title; + + //币种 + @JSONField(name = "bz") + private String currency; + + //拟稿日期(yyyy-MM-dd HH:mm:ss) + @JSONField(name = "ngrq") + private String createDate; + + //报销方式 + @JSONField(name = "bxfs") + private String reimbursementWay; + + //付款单号 + @JSONField(name = "fkdh") + private String payOrderNo; + + //项目编号 + private String bh1; + //项目名称 + private String bz1; + private String bz2; + + @JSONField(name = "sfyfp") + private String sfyfp; + + //会计明细 + @JSONField(name = "kjmx") + private List kjDetails; + + //支付明细 + @JSONField(name = "zfmx") + private List payDetails; + + //单据数量 + @JSONField(name = "djsl") + private String djsl; + + //纸质单据数量 + @JSONField(name = "zzdjsl") + private String zzdjsl; + + public CostAccountDto() { + } + + public CostAccountDto(String electronicBill, String type, String ngrDept, String ngrDeptCode, String ngrName, String requestMark, String requestId, String attachmentNum, String locationName, String title, String currency, String createDate, String reimbursementWay, String payOrderNo, String bh1, String bz1, String bz2, List kjDetails, List payDetails, String djsl, String zzdjsl) { + this.electronicBill = electronicBill; + this.type = type; + this.ngrDept = ngrDept; + this.ngrDeptCode = ngrDeptCode; + this.ngrName = ngrName; + this.requestMark = requestMark; + this.requestId = requestId; + this.attachmentNum = attachmentNum; + this.locationName = locationName; + this.title = title; + this.currency = currency; + this.createDate = createDate; + this.reimbursementWay = reimbursementWay; + this.payOrderNo = payOrderNo; + this.bh1 = bh1; + this.bz1 = bz1; + this.bz2 = bz2; + this.kjDetails = kjDetails; + this.payDetails = payDetails; + this.djsl = djsl; + this.zzdjsl = zzdjsl; + } + + public String getElectronicBill() { + return electronicBill; + } + + public void setElectronicBill(String electronicBill) { + this.electronicBill = electronicBill; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getNgrDept() { + return ngrDept; + } + + public void setNgrDept(String ngrDept) { + this.ngrDept = ngrDept; + } + + public String getNgrName() { + return ngrName; + } + + public void setNgrName(String ngrName) { + this.ngrName = ngrName; + } + + public String getRequestMark() { + return requestMark; + } + + public void setRequestMark(String requestMark) { + this.requestMark = requestMark; + } + + public String getRequestId() { + return requestId; + } + + public void setRequestId(String requestId) { + this.requestId = requestId; + } + + public String getAttachmentNum() { + return attachmentNum; + } + + public void setAttachmentNum(String attachmentNum) { + this.attachmentNum = attachmentNum; + } + + public String getLocationName() { + return locationName; + } + + public void setLocationName(String locationName) { + this.locationName = locationName; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getCurrency() { + return currency; + } + + public void setCurrency(String currency) { + this.currency = currency; + } + + public String getCreateDate() { + return createDate; + } + + public void setCreateDate(String createDate) { + this.createDate = createDate; + } + + public String getReimbursementWay() { + return reimbursementWay; + } + + public void setReimbursementWay(String reimbursementWay) { + this.reimbursementWay = reimbursementWay; + } + + public String getPayOrderNo() { + return payOrderNo; + } + + public void setPayOrderNo(String payOrderNo) { + this.payOrderNo = payOrderNo; + } + + public List getKjDetails() { + return kjDetails; + } + + public void setKjDetails(List kjDetails) { + this.kjDetails = kjDetails; + } + + public List getPayDetails() { + return payDetails; + } + + public void setPayDetails(List payDetails) { + this.payDetails = payDetails; + } + + public String getNgrDeptCode() { + return ngrDeptCode; + } + + public void setNgrDeptCode(String ngrDeptCode) { + this.ngrDeptCode = ngrDeptCode; + } + + public String getBh1() { + return bh1; + } + + public void setBh1(String bh1) { + this.bh1 = bh1; + } + + public String getBz1() { + return bz1; + } + + public void setBz1(String bz1) { + this.bz1 = bz1; + } + + public String getBz2() { + return bz2; + } + + public void setBz2(String bz2) { + this.bz2 = bz2; + } + + public String getSFYFP() { + return sfyfp; + } + + public void setSFYFP(String SFYFP) { + this.sfyfp = SFYFP; + } + + public String getDjsl() { + return djsl; + } + + public void setDjsl(String djsl) { + this.djsl = djsl; + } + + public String getZzdjsl() { + return zzdjsl; + } + + public void setZzdjsl(String zzdjsl) { + this.zzdjsl = zzdjsl; + } + + @Override + public String toString() { + return "CostAccountDto{" + + "electronicBill='" + electronicBill + '\'' + + ", type='" + type + '\'' + + ", ngrDept='" + ngrDept + '\'' + + ", ngrDeptCode='" + ngrDeptCode + '\'' + + ", ngrName='" + ngrName + '\'' + + ", requestMark='" + requestMark + '\'' + + ", requestId='" + requestId + '\'' + + ", attachmentNum='" + attachmentNum + '\'' + + ", locationName='" + locationName + '\'' + + ", title='" + title + '\'' + + ", currency='" + currency + '\'' + + ", createDate='" + createDate + '\'' + + ", reimbursementWay='" + reimbursementWay + '\'' + + ", payOrderNo='" + payOrderNo + '\'' + + ", bh1='" + bh1 + '\'' + + ", bz1='" + bz1 + '\'' + + ", bz2='" + bz2 + '\'' + + ", kjDetails=" + kjDetails + + ", payDetails=" + payDetails + + ", djsl='" + djsl + '\'' + + ", zzdjsl='" + zzdjsl + '\'' + + '}'; + } +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/HTPaymentCostDetail.java b/src/main/java/com/engine/htsc/payment/pojo/HTPaymentCostDetail.java new file mode 100644 index 0000000..17d36cd --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/HTPaymentCostDetail.java @@ -0,0 +1,164 @@ +package com.engine.htsc.payment.pojo; + +public class HTPaymentCostDetail { + //承担人部门 + private String assumeDept; + //承担人部门(编号) + private String assumeDeptCode; + //金额 + private Double money; + //事由 + private String reason; + //是否超预算 + private String isOutBuadge; + //预算项目编号 + private String estimateProjectCode; + //预算项目名称 + private String estimateProject; + //不含税金额 + private String notaxMoney; + //税金 + private String taxMoney; + //税率编号 + private int taxRateCode; + //税率 + private String taxRate; + //货币类型:本币、外币 + private String currencyKind; + // 币种编号 + private int moneyKindCode; + // 币种 + private String moneyKind; + //外币金额 + private String foreignCurrencyMoney; + //汇率 + private String exchangeRate; + + public int getTaxRateCode() { + return taxRateCode; + } + + public void setTaxRateCode(int taxRateCode) { + this.taxRateCode = taxRateCode; + } + + public int getMoneyKindCode() { + return moneyKindCode; + } + + public void setMoneyKindCode(int moneyKindCode) { + this.moneyKindCode = moneyKindCode; + } + + public String getAssumeDept() { + return assumeDept; + } + + public void setAssumeDept(String assumeDept) { + this.assumeDept = assumeDept; + } + + public String getAssumeDeptCode() { + return assumeDeptCode; + } + + public void setAssumeDeptCode(String assumeDeptCode) { + this.assumeDeptCode = assumeDeptCode; + } + + public Double getMoney() { + return money; + } + + public void setMoney(Double money) { + this.money = money; + } + + public String getReason() { + return reason; + } + + public void setReason(String reason) { + this.reason = reason; + } + + public String getIsOutBuadge() { + return isOutBuadge; + } + + public void setIsOutBuadge(String isOutBuadge) { + this.isOutBuadge = isOutBuadge; + } + + public String getEstimateProject() { + return estimateProject; + } + + public void setEstimateProject(String estimateProject) { + this.estimateProject = estimateProject; + } + + public String getNotaxMoney() { + return notaxMoney; + } + + public void setNotaxMoney(String notaxMoney) { + this.notaxMoney = notaxMoney; + } + + public String getTaxMoney() { + return taxMoney; + } + + public void setTaxMoney(String taxMoney) { + this.taxMoney = taxMoney; + } + + public String getTaxRate() { + return taxRate; + } + + public void setTaxRate(String taxRate) { + this.taxRate = taxRate; + } + + public String getCurrencyKind() { + return currencyKind; + } + + public void setCurrencyKind(String currencyKind) { + this.currencyKind = currencyKind; + } + + public String getMoneyKind() { + return moneyKind; + } + + public void setMoneyKind(String moneyKind) { + this.moneyKind = moneyKind; + } + + public String getForeignCurrencyMoney() { + return foreignCurrencyMoney; + } + + public void setForeignCurrencyMoney(String foreignCurrencyMoney) { + this.foreignCurrencyMoney = foreignCurrencyMoney; + } + + public String getExchangeRate() { + return exchangeRate; + } + + public void setExchangeRate(String exchangeRate) { + this.exchangeRate = exchangeRate; + } + + public String getEstimateProjectCode() { + return estimateProjectCode; + } + + public void setEstimateProjectCode(String estimateProjectCode) { + this.estimateProjectCode = estimateProjectCode; + } +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/InterfaceLogDTO.java b/src/main/java/com/engine/htsc/payment/pojo/InterfaceLogDTO.java new file mode 100644 index 0000000..aeeee9c --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/InterfaceLogDTO.java @@ -0,0 +1,152 @@ +package com.engine.htsc.payment.pojo; + +/** + * k1810012 + * 平台调用第三方接口日志类 + * 对应表 uf_interfacelog + */ +public class InterfaceLogDTO { + //流程id + private String requestId; + //流程编号 + private String lcbh; + //日期时间 + private String rqsj; + //接口名称(rest接口) + private String jkmc; + //入参 + private String rc; + //出参 + private String cc; + //调用人工号 + private String dyrgh; + //调用人名称 + private String dyrmc; + //调用时间 + private String dysj; + //泛微机器ip + private String fwjqip; + //调用对方地址(完整IP+路径) + private String dydfdz; + //对应方法(webservice接口) + private String dyff; + //泛微业务结果 + private String fwywjg; + //接口类别 + private String jklb; + + public InterfaceLogDTO() { + } + + public String getRequestId() { + return requestId; + } + + public void setRequestId(String requestId) { + this.requestId = requestId; + } + + public String getLcbh() { + return lcbh; + } + + public void setLcbh(String lcbh) { + this.lcbh = lcbh; + } + + public String getRqsj() { + return rqsj; + } + + public void setRqsj(String rqsj) { + this.rqsj = rqsj; + } + + public String getJkmc() { + return jkmc; + } + + public void setJkmc(String jkmc) { + this.jkmc = jkmc; + } + + public String getRc() { + return rc; + } + + public void setRc(String rc) { + this.rc = rc; + } + + public String getCc() { + return cc; + } + + public void setCc(String cc) { + this.cc = cc; + } + + public String getDyrgh() { + return dyrgh; + } + + public void setDyrgh(String dyrgh) { + this.dyrgh = dyrgh; + } + + public String getDyrmc() { + return dyrmc; + } + + public void setDyrmc(String dyrmc) { + this.dyrmc = dyrmc; + } + + public String getDysj() { + return dysj; + } + + public void setDysj(String dysj) { + this.dysj = dysj; + } + + public String getFwjqip() { + return fwjqip; + } + + public void setFwjqip(String fwjqip) { + this.fwjqip = fwjqip; + } + + public String getDydfdz() { + return dydfdz; + } + + public void setDydfdz(String dydfdz) { + this.dydfdz = dydfdz; + } + + public String getDyff() { + return dyff; + } + + public void setDyff(String dyff) { + this.dyff = dyff; + } + + public String getFwywjg() { + return fwywjg; + } + + public void setFwywjg(String fwywjg) { + this.fwywjg = fwywjg; + } + + public String getJklb() { + return jklb; + } + + public void setJklb(String jklb) { + this.jklb = jklb; + } +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/InvoiceData.java b/src/main/java/com/engine/htsc/payment/pojo/InvoiceData.java new file mode 100644 index 0000000..08ab5b8 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/InvoiceData.java @@ -0,0 +1,40 @@ +package com.engine.htsc.payment.pojo; + +public class InvoiceData { + private String type; + private String priceTax; + private String taxes; + + public InvoiceData() { + } + + public InvoiceData(String type, String priceTax, String taxes) { + this.type = type; + this.priceTax = priceTax; + this.taxes = taxes; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getPriceTax() { + return priceTax; + } + + public void setPriceTax(String priceTax) { + this.priceTax = priceTax; + } + + public String getTaxes() { + return taxes; + } + + public void setTaxes(String taxes) { + this.taxes = taxes; + } +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/ItProjectQueryCondition.java b/src/main/java/com/engine/htsc/payment/pojo/ItProjectQueryCondition.java new file mode 100644 index 0000000..88589e6 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/ItProjectQueryCondition.java @@ -0,0 +1,83 @@ +package com.engine.htsc.payment.pojo; + +import java.io.Serializable; + +public class ItProjectQueryCondition implements Serializable { + + private static final long serialVersionUID = -5111040242910655952L; + + /** + * 分页 + */ + private Integer pageNo = 1; + + private Integer pageSize = 10; + + private String code; + + private String name; + + private String key; + + public ItProjectQueryCondition() { + } + + public ItProjectQueryCondition(Integer pageNo, Integer pageSize, String code, String name, String key) { + this.pageNo = pageNo; + this.pageSize = pageSize; + this.code = code; + this.name = name; + this.key = key; + } + + public Integer getPageNo() { + return pageNo; + } + + public void setPageNo(Integer pageNo) { + this.pageNo = pageNo; + } + + public Integer getPageSize() { + return pageSize; + } + + public void setPageSize(Integer pageSize) { + this.pageSize = pageSize; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + @Override + public String toString() { + return "ItProjectQueryCondition{" + + "pageNo=" + pageNo + + ", pageSize=" + pageSize + + ", code='" + code + '\'' + + ", name='" + name + '\'' + + ", key='" + key + '\'' + + '}'; + } +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/ItProjectVo.java b/src/main/java/com/engine/htsc/payment/pojo/ItProjectVo.java new file mode 100644 index 0000000..a7fbc93 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/ItProjectVo.java @@ -0,0 +1,66 @@ +package com.engine.htsc.payment.pojo; + + +import java.io.Serializable; +import java.util.List; + +public class ItProjectVo implements Serializable { + + private static final long serialVersionUID = 4485067512092102641L; + private Integer total; + private Boolean isOk; + private String msg; + private List data; + + public ItProjectVo() { + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public ItProjectVo(Integer total, Boolean isOk, String msg, List data) { + this.total = total; + this.isOk = isOk; + this.msg = msg; + this.data = data; + } + + public Integer getTotal() { + return total; + } + + public void setTotal(Integer total) { + this.total = total; + } + + public Boolean getOk() { + return isOk; + } + + public void setOk(Boolean ok) { + isOk = ok; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + @Override + public String toString() { + return "ItProjectVo{" + + "total=" + total + + ", isOk=" + isOk + + ", msg='" + msg + '\'' + + ", data=" + data + + '}'; + } +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/KjDetail.java b/src/main/java/com/engine/htsc/payment/pojo/KjDetail.java new file mode 100644 index 0000000..1805a6d --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/KjDetail.java @@ -0,0 +1,149 @@ +package com.engine.htsc.payment.pojo; + +import com.alibaba.fastjson.annotation.JSONField; + +import java.io.Serializable; + +/** + * 请求数据封装 + * 会计明细数据 + */ +public class KjDetail implements Serializable { + + private static final long serialVersionUID = 7183358706483602009L; + private String expenseDeptCode; + private String expenseDept; + private String expenseBadge; + private String expensePerson; + + private SubjectData subjectData; + @JSONField(name = "yssuanData") + private BudgetData budgetData; + private String priceRMB; + private String money; + private String projectCode; + private String project; + private String reason; + + public KjDetail() { + } + + public KjDetail(String expenseDeptCode, String expenseDept, String expenseBadge, String expensePerson, SubjectData subjectData, BudgetData budgetData, String priceRMB, String money, String projectCode, String project, String reason) { + this.expenseDeptCode = expenseDeptCode; + this.expenseDept = expenseDept; + this.expenseBadge = expenseBadge; + this.expensePerson = expensePerson; + this.subjectData = subjectData; + this.budgetData = budgetData; + this.priceRMB = priceRMB; + this.money = money; + this.projectCode = projectCode; + this.project = project; + this.reason = reason; + } + + public String getExpenseDeptCode() { + return expenseDeptCode; + } + + public void setExpenseDeptCode(String expenseDeptCode) { + this.expenseDeptCode = expenseDeptCode; + } + + public String getExpenseDept() { + return expenseDept; + } + + public void setExpenseDept(String expenseDept) { + this.expenseDept = expenseDept; + } + + public String getExpenseBadge() { + return expenseBadge; + } + + public void setExpenseBadge(String expenseBadge) { + this.expenseBadge = expenseBadge; + } + + public String getExpensePerson() { + return expensePerson; + } + + public void setExpensePerson(String expensePerson) { + this.expensePerson = expensePerson; + } + + public SubjectData getSubjectData() { + return subjectData; + } + + public void setSubjectData(SubjectData subjectData) { + this.subjectData = subjectData; + } + + public BudgetData getBudgetData() { + return budgetData; + } + + public void setBudgetData(BudgetData budgetData) { + this.budgetData = budgetData; + } + + public String getPriceRMB() { + return priceRMB; + } + + public void setPriceRMB(String priceRMB) { + this.priceRMB = priceRMB; + } + + public String getMoney() { + return money; + } + + public void setMoney(String money) { + this.money = money; + } + + public String getProjectCode() { + return projectCode; + } + + public void setProjectCode(String projectCode) { + this.projectCode = projectCode; + } + + public String getProject() { + return project; + } + + public void setProject(String project) { + this.project = project; + } + + public String getReason() { + return reason; + } + + public void setReason(String reason) { + this.reason = reason; + } + + @Override + public String toString() { + return "KjDetail{" + + "expenseDeptCode='" + expenseDeptCode + '\'' + + ", expenseDept='" + expenseDept + '\'' + + ", expenseBadge='" + expenseBadge + '\'' + + ", expensePerson='" + expensePerson + '\'' + + ", subjectData=" + subjectData + + ", budgetData=" + budgetData + + ", priceRMB='" + priceRMB + '\'' + + ", money='" + money + '\'' + + ", projectCode='" + projectCode + '\'' + + ", project='" + project + '\'' + + ", reason='" + reason + '\'' + + '}'; + } +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/MallPayBizModel.java b/src/main/java/com/engine/htsc/payment/pojo/MallPayBizModel.java new file mode 100644 index 0000000..edb6ea7 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/MallPayBizModel.java @@ -0,0 +1,22 @@ +package com.engine.htsc.payment.pojo; + +public class MallPayBizModel { + private String mallPayBizNo;//费用确认关联的付款流程编号 + private String payType;//付款类型,付款对应的商品编号 + + public String getMallPayBizNo() { + return mallPayBizNo; + } + + public void setMallPayBizNo(String mallPayBizNo) { + this.mallPayBizNo = mallPayBizNo; + } + + public String getPayType() { + return payType; + } + + public void setPayType(String payType) { + this.payType = payType; + } +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/MallUpdatePayStatusRequest.java b/src/main/java/com/engine/htsc/payment/pojo/MallUpdatePayStatusRequest.java new file mode 100644 index 0000000..189792e --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/MallUpdatePayStatusRequest.java @@ -0,0 +1,33 @@ +package com.engine.htsc.payment.pojo; + +import java.util.List; + +public class MallUpdatePayStatusRequest { + private String mallConfirmBizNo;//费用确认流程编号 + private List mallPayBizModelList; + private String htPayStatus;//付款状态。 1:待付款 2:付款中 4: 付款成功, 5,终止 + + public String getMallConfirmBizNo() { + return mallConfirmBizNo; + } + + public void setMallConfirmBizNo(String mallConfirmBizNo) { + this.mallConfirmBizNo = mallConfirmBizNo; + } + + public List getMallPayBizModelList() { + return mallPayBizModelList; + } + + public void setMallPayBizModelList(List mallPayBizModelList) { + this.mallPayBizModelList = mallPayBizModelList; + } + + public String getHtPayStatus() { + return htPayStatus; + } + + public void setHtPayStatus(String htPayStatus) { + this.htPayStatus = htPayStatus; + } +} \ No newline at end of file diff --git a/src/main/java/com/engine/htsc/payment/pojo/OaPaymentBizRequest.java b/src/main/java/com/engine/htsc/payment/pojo/OaPaymentBizRequest.java new file mode 100644 index 0000000..6fb4b2f --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/OaPaymentBizRequest.java @@ -0,0 +1,135 @@ +package com.engine.htsc.payment.pojo; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * author: k1810012 + * 更新合同信息实体类 + */ +public class OaPaymentBizRequest implements Serializable { + + private static final long serialVersionUID = -2750755799711478295L; + + /** + * 付款流程访问url + */ + private String oaPayUrl; + /** + * 付款流程编号 + */ + private String oaCode; + /** + * 合同编号 + */ + private String ctrctCode; + /** + * 付款金额 + */ + private String paymentMoney; + /** + * 付款日期 + */ + private String paymentDate; + /** + * 合同流程编号 + */ + private String processCode; + + private String sysCode; + + private String moduleCode; + + public OaPaymentBizRequest() { + } + + public OaPaymentBizRequest(String oaPayUrl, String oaCode, String ctrctCode, String paymentMoney, String paymentDate, String processCode, String sysCode, String moduleCode) { + this.oaPayUrl = oaPayUrl; + this.oaCode = oaCode; + this.ctrctCode = ctrctCode; + this.paymentMoney = paymentMoney; + this.paymentDate = paymentDate; + this.processCode = processCode; + this.sysCode = sysCode; + this.moduleCode = moduleCode; + } + + public String getOaPayUrl() { + return oaPayUrl; + } + + public void setOaPayUrl(String oaPayUrl) { + this.oaPayUrl = oaPayUrl; + } + + public String getOaCode() { + return oaCode; + } + + public void setOaCode(String oaCode) { + this.oaCode = oaCode; + } + + public String getCtrctCode() { + return ctrctCode; + } + + public void setCtrctCode(String ctrctCode) { + this.ctrctCode = ctrctCode; + } + + public String getPaymentMoney() { + return paymentMoney; + } + + public void setPaymentMoney(String paymentMoney) { + this.paymentMoney = paymentMoney; + } + + public String getPaymentDate() { + return paymentDate; + } + + public void setPaymentDate(String paymentDate) { + this.paymentDate = paymentDate; + } + + public String getProcessCode() { + return processCode; + } + + public void setProcessCode(String processCode) { + this.processCode = processCode; + } + + public String getSysCode() { + return sysCode; + } + + public void setSysCode(String sysCode) { + this.sysCode = sysCode; + } + + public String getModuleCode() { + return moduleCode; + } + + public void setModuleCode(String moduleCode) { + this.moduleCode = moduleCode; + } + + @Override + public String toString() { + return "OaPaymentBizRequest{" + + "oaPayUrl='" + oaPayUrl + '\'' + + ", oaCode='" + oaCode + '\'' + + ", ctrctCode='" + ctrctCode + '\'' + + ", paymentMoney='" + paymentMoney + '\'' + + ", paymentDate='" + paymentDate + '\'' + + ", processCode='" + processCode + '\'' + + ", sysCode='" + sysCode + '\'' + + ", moduleCode='" + moduleCode + '\'' + + '}'; + } + +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/PaDetail.java b/src/main/java/com/engine/htsc/payment/pojo/PaDetail.java new file mode 100644 index 0000000..c635c24 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/PaDetail.java @@ -0,0 +1,49 @@ +package com.engine.htsc.payment.pojo; + +public class PaDetail { + /** + * 校验标题 + */ + private String info; + /** + * 校验结果 + */ + private boolean check; + /** + * 校验信息详情 + */ + private String tips; + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } + + public boolean isCheck() { + return check; + } + + public void setCheck(boolean check) { + this.check = check; + } + + public String getTips() { + return tips; + } + + public void setTips(String tips) { + this.tips = tips; + } + + @Override + public String toString() { + return "PaDetail{" + + "info='" + info + '\'' + + ", check=" + check + + ", tips='" + tips + '\'' + + '}'; + } +} \ No newline at end of file diff --git a/src/main/java/com/engine/htsc/payment/pojo/PayDetail.java b/src/main/java/com/engine/htsc/payment/pojo/PayDetail.java new file mode 100644 index 0000000..65c14de --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/PayDetail.java @@ -0,0 +1,109 @@ +package com.engine.htsc.payment.pojo; + +/** + * 请求数据封装 + * 支付明细数据 + */ +public class PayDetail { + + private String payByBank; + private String payByCash; + private String bankName; + private String bankAccount; + private String employeeDept; + private String employeeName; + private String payee; + private String employeeBadge; + + public PayDetail() { + } + + public PayDetail(String payByBank, String payByCash, String bankName, String bankAccount, String employeeDept, String employeeName, String payee, String employeeBadge) { + this.payByBank = payByBank; + this.payByCash = payByCash; + this.bankName = bankName; + this.bankAccount = bankAccount; + this.employeeDept = employeeDept; + this.employeeName = employeeName; + this.payee = payee; + this.employeeBadge = employeeBadge; + } + + public String getPayByBank() { + return payByBank; + } + + public void setPayByBank(String payByBank) { + this.payByBank = payByBank; + } + + public String getPayByCash() { + return payByCash; + } + + public void setPayByCash(String payByCash) { + this.payByCash = payByCash; + } + + public String getBankName() { + return bankName; + } + + public void setBankName(String bankName) { + this.bankName = bankName; + } + + public String getBankAccount() { + return bankAccount; + } + + public void setBankAccount(String bankAccount) { + this.bankAccount = bankAccount; + } + + public String getEmployeeDept() { + return employeeDept; + } + + public void setEmployeeDept(String employeeDept) { + this.employeeDept = employeeDept; + } + + public String getEmployeeName() { + return employeeName; + } + + public void setEmployeeName(String employeeName) { + this.employeeName = employeeName; + } + + public String getPayee() { + return payee; + } + + public void setPayee(String payee) { + this.payee = payee; + } + + public String getEmployeeBadge() { + return employeeBadge; + } + + public void setEmployeeBadge(String employeeBadge) { + this.employeeBadge = employeeBadge; + } + + @Override + public String toString() { + return "PayDetail{" + + "payByBank='" + payByBank + '\'' + + ", payByCash='" + payByCash + '\'' + + ", bankName='" + bankName + '\'' + + ", bankAccount='" + bankAccount + '\'' + + ", employeeDept='" + employeeDept + '\'' + + ", employeeName='" + employeeName + '\'' + + ", payee='" + payee + '\'' + + ", employeeBadge='" + employeeBadge + '\'' + + '}'; + } +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/PayLhExcelData.java b/src/main/java/com/engine/htsc/payment/pojo/PayLhExcelData.java new file mode 100644 index 0000000..2ff8e35 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/PayLhExcelData.java @@ -0,0 +1,79 @@ +package com.engine.htsc.payment.pojo; + +import com.alibaba.excel.annotation.ExcelProperty; + +public class PayLhExcelData { + + @ExcelProperty(value = "费用归口部门编号",index = 0) + private String payForDept; + @ExcelProperty(value = "预算科目编号",index = 1) + private String estimateProjectCode; + @ExcelProperty(value = "不含税金额",index = 2) + private String notaxMoney; + @ExcelProperty(value = "税金",index = 3) + private String taxMoney; + @ExcelProperty(value = "价税合计",index = 4) + private String allMoney; + @ExcelProperty(value = "公司项目",index = 5) + private String projectCode; + + public String getPayForDept() { + return payForDept; + } + + public void setPayForDept(String payForDept) { + this.payForDept = payForDept; + } + + public String getEstimateProjectCode() { + return estimateProjectCode; + } + + public void setEstimateProjectCode(String estimateProjectCode) { + this.estimateProjectCode = estimateProjectCode; + } + + public String getNotaxMoney() { + return notaxMoney; + } + + public void setNotaxMoney(String notaxMoney) { + this.notaxMoney = notaxMoney; + } + + public String getTaxMoney() { + return taxMoney; + } + + public void setTaxMoney(String taxMoney) { + this.taxMoney = taxMoney; + } + + public String getAllMoney() { + return allMoney; + } + + public void setAllMoney(String allMoney) { + this.allMoney = allMoney; + } + + public String getProjectCode() { + return projectCode; + } + + public void setProjectCode(String projectCode) { + this.projectCode = projectCode; + } + + @Override + public String toString() { + return "PayLhExcelData{" + + "payForDept='" + payForDept + '\'' + + ", estimateProjectCode='" + estimateProjectCode + '\'' + + ", notaxMoney='" + notaxMoney + '\'' + + ", taxMoney='" + taxMoney + '\'' + + ", allMoney='" + allMoney + '\'' + + ", projectCode='" + projectCode + '\'' + + '}'; + } +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/PayWf.java b/src/main/java/com/engine/htsc/payment/pojo/PayWf.java new file mode 100644 index 0000000..835941f --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/PayWf.java @@ -0,0 +1,71 @@ +package com.engine.htsc.payment.pojo; + +public class PayWf { + private String mt; + private String dt8; + private String dt9; + private Integer mainId; + private String reqId; + + public PayWf() { + } + + public PayWf(String mt, String dt8, String dt9, Integer mainId, String reqId) { + this.mt = mt; + this.dt8 = dt8; + this.dt9 = dt9; + this.mainId = mainId; + this.reqId = reqId; + } + + public String getMt() { + return mt; + } + + public void setMt(String mt) { + this.mt = mt; + } + + public String getDt8() { + return dt8; + } + + public void setDt8(String dt8) { + this.dt8 = dt8; + } + + public String getDt9() { + return dt9; + } + + public void setDt9(String dt9) { + this.dt9 = dt9; + } + + public Integer getMainId() { + return mainId; + } + + public void setMainId(Integer mainId) { + this.mainId = mainId; + } + + public String getReqId() { + return reqId; + } + + public void setReqId(String reqId) { + this.reqId = reqId; + } + + @Override + public String toString() { + return "PayWf{" + + "mt='" + mt + '\'' + + ", dt8='" + dt8 + '\'' + + ", dt9='" + dt9 + '\'' + + ", mainId=" + mainId + + ", reqId='" + reqId + '\'' + + '}'; + } +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/PreApproval.java b/src/main/java/com/engine/htsc/payment/pojo/PreApproval.java new file mode 100644 index 0000000..45f9fea --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/PreApproval.java @@ -0,0 +1,57 @@ +package com.engine.htsc.payment.pojo; + +import java.util.List; + +public class PreApproval { + + /** + * 智能预审标识 + * 1 发票 + * 2 合同 + * 3 其他 + */ + private String type; + + /** + * 条目 + */ + private String label; + + /** + * 详情 + */ + private List details; + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + public List getDetails() { + return details; + } + + public void setDetails(List details) { + this.details = details; + } + + @Override + public String toString() { + return "PreApproval{" + + "type='" + type + '\'' + + ", label='" + label + '\'' + + ", details=" + details + + '}'; + } +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/SettlePayAutoRequestParam.java b/src/main/java/com/engine/htsc/payment/pojo/SettlePayAutoRequestParam.java new file mode 100644 index 0000000..f2041d9 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/SettlePayAutoRequestParam.java @@ -0,0 +1,144 @@ +package com.engine.htsc.payment.pojo; + + +import org.apache.commons.lang3.StringUtils; + +import java.util.List; +import java.util.Map; + +public class SettlePayAutoRequestParam { + private String relateStaffRid; + private String creatorUid; + private String workflowId; + private String requestName; + private String isNextFlow; + Map main; + List> dt4; + List> dt8; + List> dt9; + List> dt10; + List> dt11; + List> dt12; + + public String getRelateStaffRid() { + return relateStaffRid; + } + + public void setRelateStaffRid(String relateStaffRid) { + this.relateStaffRid = relateStaffRid; + } + + public String getCreatorUid() { + return creatorUid; + } + + public void setCreatorUid(String creatorUid) { + this.creatorUid = creatorUid; + } + + public String getWorkflowId() { + return workflowId; + } + + public void setWorkflowId(String workflowId) { + this.workflowId = workflowId; + } + + public String getRequestName() { + return requestName; + } + + public void setRequestName(String requestName) { + this.requestName = requestName; + } + + public String getIsNextFlow() { + return isNextFlow; + } + + public void setIsNextFlow(String isNextFlow) { + this.isNextFlow = isNextFlow; + } + + public Map getMain() { + return main; + } + + public void setMain(Map main) { + this.main = main; + } + + public List> getDt4() { + return dt4; + } + + public void setDt4(List> dt4) { + this.dt4 = dt4; + } + + public List> getDt8() { + return dt8; + } + + public void setDt8(List> dt8) { + this.dt8 = dt8; + } + + public List> getDt9() { + return dt9; + } + + public void setDt9(List> dt9) { + this.dt9 = dt9; + } + + public List> getDt10() { + return dt10; + } + + public void setDt10(List> dt10) { + this.dt10 = dt10; + } + + public List> getDt11() { + return dt11; + } + + public void setDt11(List> dt11) { + this.dt11 = dt11; + } + + public List> getDt12() { + return dt12; + } + + public void setDt12(List> dt12) { + this.dt12 = dt12; + } + + @Override + public String toString() { + return "SettlePayAutoRequestParam{" + + "relateStaffRid='" + relateStaffRid + '\'' + + ", creatorUid='" + creatorUid + '\'' + + ", workflowId='" + workflowId + '\'' + + ", requestName='" + requestName + '\'' + + ", isNextFlow='" + isNextFlow + '\'' + + ", main=" + main + + ", dt4=" + dt4 + + ", dt8=" + dt8 + + ", dt9=" + dt9 + + ", dt10=" + dt10 + + ", dt11=" + dt11 + + ", dt12=" + dt12 + + '}'; + } + + /** + * 任一为空返回false + */ + public boolean isValid() { + return StringUtils.isNotBlank(creatorUid) && StringUtils.isNotBlank(workflowId) + && StringUtils.isNotBlank(requestName) && StringUtils.isNotBlank(isNextFlow); + } +} \ No newline at end of file diff --git a/src/main/java/com/engine/htsc/payment/pojo/SettlePaymentSplLinkReq.java b/src/main/java/com/engine/htsc/payment/pojo/SettlePaymentSplLinkReq.java new file mode 100644 index 0000000..863e245 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/SettlePaymentSplLinkReq.java @@ -0,0 +1,33 @@ +package com.engine.htsc.payment.pojo; + +import com.alibaba.fastjson.JSONObject; + +public class SettlePaymentSplLinkReq { + private String unnumber=""; + private String unnumbercode=""; + private JSONObject value; + + public String getUnnumber() { + return unnumber; + } + + public void setUnnumber(String unnumber) { + this.unnumber = unnumber; + } + + public String getUnnumbercode() { + return unnumbercode; + } + + public void setUnnumbercode(String unnumbercode) { + this.unnumbercode = unnumbercode; + } + + public JSONObject getValue() { + return value; + } + + public void setValue(JSONObject value) { + this.value = value; + } +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/SettlePaymentSplVO.java b/src/main/java/com/engine/htsc/payment/pojo/SettlePaymentSplVO.java new file mode 100644 index 0000000..96928d2 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/SettlePaymentSplVO.java @@ -0,0 +1,232 @@ +package com.engine.htsc.payment.pojo; + +import com.engine.htsc.ReimbursementFlow.model.NewDepart; +import com.engine.htsc.ReimbursementFlow.model.NewUser; + +public class SettlePaymentSplVO { + private NewUser newUser; + private NewDepart newDepart; + private UfCgspl ufCgspl; + private Integer id; //数据ID + private String sslc; //所属流程 + private String fqbmlx; //发起部门类型 + private String tj; //条件 + private String bmysglysh; //预算管理员审核 + private String yybfzrsh; //营业部负责人审核 + private String bmfzrsh; //部门负责人审核 + private String wzcggkbmfzr; //物资采购归口部门负责人 + private String wzcgdjrysh; //物资采购对接人员审核 + private String cwzxhj; //财务中心会计审核 + private String cwzxjl; //财务中心经理审核 + private String fgscwjlsh; //分公司财务经理审核 + private String fgsfzrsh; //分公司负责人审批 + private String fgldsh; //分管领导审核 + private String fgscwjlbj; //分公司财务经理办结 + private String zc; //总裁审批 + private String ysglyzs; //预算管理员终审 + private String fyhj; //费用会计审核 + private String cwfzrsp; //财务负责人审核 + private String cwzj; //财务总监审核 + private String cn; //出纳 + private String ysglycs; //商城管理员审核 + + public String getWzcggkbmfzr() { + return wzcggkbmfzr; + } + + public void setWzcggkbmfzr(String wzcggkbmfzr) { + this.wzcggkbmfzr = wzcggkbmfzr; + } + + public String getWzcgdjrysh() { + return wzcgdjrysh; + } + + public void setWzcgdjrysh(String wzcgdjrysh) { + this.wzcgdjrysh = wzcgdjrysh; + } + + public String getCwzxhj() { + return cwzxhj; + } + + public void setCwzxhj(String cwzxhj) { + this.cwzxhj = cwzxhj; + } + + public String getCwzxjl() { + return cwzxjl; + } + + public void setCwzxjl(String cwzxjl) { + this.cwzxjl = cwzxjl; + } + + public String getFgscwjlsh() { + return fgscwjlsh; + } + + public void setFgscwjlsh(String fgscwjlsh) { + this.fgscwjlsh = fgscwjlsh; + } + + public String getFgscwjlbj() { + return fgscwjlbj; + } + + public void setFgscwjlbj(String fgscwjlbj) { + this.fgscwjlbj = fgscwjlbj; + } + + public String getZc() { + return zc; + } + + public void setZc(String zc) { + this.zc = zc; + } + + public String getCwzj() { + return cwzj; + } + + public void setCwzj(String cwzj) { + this.cwzj = cwzj; + } + + public NewUser getNewUser() { + return newUser; + } + + public void setNewUser(NewUser newUser) { + this.newUser = newUser; + } + + public NewDepart getNewDepart() { + return newDepart; + } + + public void setNewDepart(NewDepart newDepart) { + this.newDepart = newDepart; + } + + public UfCgspl getUfCgspl() { + return ufCgspl; + } + + public void setUfCgspl(UfCgspl ufCgspl) { + this.ufCgspl = ufCgspl; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getSslc() { + return sslc; + } + + public void setSslc(String sslc) { + this.sslc = sslc; + } + + public String getFqbmlx() { + return fqbmlx; + } + + public void setFqbmlx(String fqbmlx) { + this.fqbmlx = fqbmlx; + } + + public String getTj() { + return tj; + } + + public void setTj(String tj) { + this.tj = tj; + } + + public String getBmysglysh() { + return bmysglysh; + } + + public void setBmysglysh(String bmysglysh) { + this.bmysglysh = bmysglysh; + } + + public String getYybfzrsh() { + return yybfzrsh; + } + + public void setYybfzrsh(String yybfzrsh) { + this.yybfzrsh = yybfzrsh; + } + + public String getBmfzrsh() { + return bmfzrsh; + } + + public void setBmfzrsh(String bmfzrsh) { + this.bmfzrsh = bmfzrsh; + } + + public String getFgsfzrsh() { + return fgsfzrsh; + } + + public void setFgsfzrsh(String fgsfzrsh) { + this.fgsfzrsh = fgsfzrsh; + } + + public String getFgldsh() { + return fgldsh; + } + + public void setFgldsh(String fgldsh) { + this.fgldsh = fgldsh; + } + + public String getYsglyzs() { + return ysglyzs; + } + + public void setYsglyzs(String ysglyzs) { + this.ysglyzs = ysglyzs; + } + + public String getFyhj() { + return fyhj; + } + + public void setFyhj(String fyhj) { + this.fyhj = fyhj; + } + + public String getCwfzrsp() { + return cwfzrsp; + } + + public void setCwfzrsp(String cwfzrsp) { + this.cwfzrsp = cwfzrsp; + } + + public String getCn() { + return cn; + } + + public void setCn(String cn) { + this.cn = cn; + } + + public String getYsglycs() { + return ysglycs; + } + + public void setYsglycs(String ysglycs) { + this.ysglycs = ysglycs; + } +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/SubjectData.java b/src/main/java/com/engine/htsc/payment/pojo/SubjectData.java new file mode 100644 index 0000000..3577839 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/SubjectData.java @@ -0,0 +1,41 @@ +package com.engine.htsc.payment.pojo; + +import java.io.Serializable; + +public class SubjectData implements Serializable { + private static final long serialVersionUID = -5573462721223082687L; + private String itemCode; + private String itemName; + + public SubjectData() { + } + + public SubjectData(String itemCode, String itemName) { + this.itemCode = itemCode; + this.itemName = itemName; + } + + public String getItemCode() { + return itemCode; + } + + public void setItemCode(String itemCode) { + this.itemCode = itemCode; + } + + public String getItemName() { + return itemName; + } + + public void setItemName(String itemName) { + this.itemName = itemName; + } + + @Override + public String toString() { + return "subjectData{" + + "itemCode='" + itemCode + '\'' + + ", itemName='" + itemName + '\'' + + '}'; + } +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/SyncVo.java b/src/main/java/com/engine/htsc/payment/pojo/SyncVo.java new file mode 100644 index 0000000..6c509dc --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/SyncVo.java @@ -0,0 +1,20 @@ +package com.engine.htsc.payment.pojo; + +public class SyncVo { + private String requestMarks; + + public String getRequestMarks() { + return requestMarks; + } + + public void setRequestMarks(String requestMarks) { + this.requestMarks = requestMarks; + } + + @Override + public String toString() { + return "SyncVo{" + + "requestMarks='" + requestMarks + '\'' + + '}'; + } +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/TreeNode.java b/src/main/java/com/engine/htsc/payment/pojo/TreeNode.java new file mode 100644 index 0000000..d3dbc51 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/TreeNode.java @@ -0,0 +1,131 @@ +package com.engine.htsc.payment.pojo; + +import org.apache.commons.lang3.StringUtils; + +import java.io.Serializable; +import java.util.List; + +/** + * it项目 modle + */ +public class TreeNode implements Serializable { + + private static final long serialVersionUID = -2030747144145653088L; + + private String id; + private String name; + private String projectCode; + private String type; + private List children; + private String pid; + private String pCode; + private String pName; + private String key; + + public TreeNode() { + } + + public TreeNode(String id, String name, String projectCode, String type, List children, String pid, String pCode, String pName, String key) { + this.id = id; + this.name = name; + this.projectCode = projectCode; + this.type = type; + this.children = children; + this.pid = pid; + this.pCode = pCode; + this.pName = pName; + this.key = key; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getProjectCode() { + return projectCode; + } + + public void setProjectCode(String projectCode) { + this.projectCode = projectCode; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public void setChildren(List children) { + this.children = children; + } + + public List getChildren() { + return children; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getpCode() { + return pCode; + } + + public void setpCode(String pCode) { + this.pCode = pCode; + } + + public String getpName() { + return pName; + } + + public void setpName(String pName) { + this.pName = pName; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + @Override + public String toString() { + return "TreeNode{" + + "id='" + id + '\'' + + ", name='" + name + '\'' + + ", projectCode='" + projectCode + '\'' + + ", type='" + type + '\'' + + ", children=" + children + + ", pid='" + pid + '\'' + + ", pCode='" + pCode + '\'' + + ", pName='" + pName + '\'' + + ", key='" + key + '\'' + + '}'; + } + + public boolean qualify() { + return !StringUtils.isBlank(name) && !StringUtils.isBlank(projectCode) + && !StringUtils.isBlank(type) && !StringUtils.isBlank(key); + } +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/TripPaymentRequest.java b/src/main/java/com/engine/htsc/payment/pojo/TripPaymentRequest.java new file mode 100644 index 0000000..39a9cdb --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/TripPaymentRequest.java @@ -0,0 +1,79 @@ +package com.engine.htsc.payment.pojo; + +import java.io.Serializable; +import java.util.List; + +public class TripPaymentRequest implements Serializable { + private String beginTime; + private String endTime; + private String accountId; + private String deptCode; + private String empCode; + private List realBatchNoList; + private String platformType; + private Integer requestId; + + public String getBeginTime() { + return beginTime; + } + + public void setBeginTime(String beginTime) { + this.beginTime = beginTime; + } + + public String getEndTime() { + return endTime; + } + + public void setEndTime(String endTime) { + this.endTime = endTime; + } + + public String getAccountId() { + return accountId; + } + + public void setAccountId(String accountId) { + this.accountId = accountId; + } + + public String getDeptCode() { + return deptCode; + } + + public void setDeptCode(String deptCode) { + this.deptCode = deptCode; + } + + public String getEmpCode() { + return empCode; + } + + public void setEmpCode(String empCode) { + this.empCode = empCode; + } + + public List getRealBatchNoList() { + return realBatchNoList; + } + + public void setRealBatchNoList(List realBatchNoList) { + this.realBatchNoList = realBatchNoList; + } + + public Integer getRequestId() { + return requestId; + } + + public void setRequestId(Integer requestId) { + this.requestId = requestId; + } + + public String getPlatformType() { + return platformType; + } + + public void setPlatformType(String platformType) { + this.platformType = platformType; + } +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/UfCgspl.java b/src/main/java/com/engine/htsc/payment/pojo/UfCgspl.java new file mode 100644 index 0000000..3cd8c98 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/UfCgspl.java @@ -0,0 +1,203 @@ +package com.engine.htsc.payment.pojo; + +public class UfCgspl { + private Integer id; //数据ID + private String sslc; //所属流程 + private String fqbmlx; //发起部门类型 + private String tj; //条件 + + private String ysglycs; //商城管理员审核 + private String fgscwjlsh; //分公司财务经理审核 + private String wzcgdjrysh; //物资采购对接人员审核 + private String bmysglysh; //预算管理员审核 + private String yybfzrsh; //营业部负责人审核 + private String bmfzrsh; //部门负责人审核 + private String wzcggkbmfzr; //物资采购归口部门负责人 + private String cwzxhj; //财务中心会计审核 + private String fyhj; //费用会计审核 + private String cwzxjl; //财务中心经理审核 + private String cwfzrsp; //财务负责人审核 + private String cwzj; //财务总监审核 + private String fgsfzrsh; //分公司负责人审批 + private String fgldsh; //分管领导审核 + private String zc; //总裁审批 + private String cn; //出纳 + private String ysglyzs; //预算管理员终审,商城管理员办结 + private String fgscwjlbj; //分公司财务经理办结 + + public String getWzcggkbmfzr() { + return wzcggkbmfzr; + } + + public void setWzcggkbmfzr(String wzcggkbmfzr) { + this.wzcggkbmfzr = wzcggkbmfzr; + } + + public String getWzcgdjrysh() { + return wzcgdjrysh; + } + + public void setWzcgdjrysh(String wzcgdjrysh) { + this.wzcgdjrysh = wzcgdjrysh; + } + + public String getCwzxhj() { + return cwzxhj; + } + + public void setCwzxhj(String cwzxhj) { + this.cwzxhj = cwzxhj; + } + + public String getCwzxjl() { + return cwzxjl; + } + + public void setCwzxjl(String cwzxjl) { + this.cwzxjl = cwzxjl; + } + + public String getFgscwjlsh() { + return fgscwjlsh; + } + + public void setFgscwjlsh(String fgscwjlsh) { + this.fgscwjlsh = fgscwjlsh; + } + + public String getFgscwjlbj() { + return fgscwjlbj; + } + + public void setFgscwjlbj(String fgscwjlbj) { + this.fgscwjlbj = fgscwjlbj; + } + + public String getZc() { + return zc; + } + + public void setZc(String zc) { + this.zc = zc; + } + + public String getCwzj() { + return cwzj; + } + + public void setCwzj(String cwzj) { + this.cwzj = cwzj; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getSslc() { + return sslc; + } + + public void setSslc(String sslc) { + this.sslc = sslc; + } + + public String getFqbmlx() { + return fqbmlx; + } + + public void setFqbmlx(String fqbmlx) { + this.fqbmlx = fqbmlx; + } + + public String getTj() { + return tj; + } + + public void setTj(String tj) { + this.tj = tj; + } + + public String getBmysglysh() { + return bmysglysh; + } + + public void setBmysglysh(String bmysglysh) { + this.bmysglysh = bmysglysh; + } + + public String getYybfzrsh() { + return yybfzrsh; + } + + public void setYybfzrsh(String yybfzrsh) { + this.yybfzrsh = yybfzrsh; + } + + public String getBmfzrsh() { + return bmfzrsh; + } + + public void setBmfzrsh(String bmfzrsh) { + this.bmfzrsh = bmfzrsh; + } + + public String getFgsfzrsh() { + return fgsfzrsh; + } + + public void setFgsfzrsh(String fgsfzrsh) { + this.fgsfzrsh = fgsfzrsh; + } + + public String getFgldsh() { + return fgldsh; + } + + public void setFgldsh(String fgldsh) { + this.fgldsh = fgldsh; + } + + public String getYsglyzs() { + return ysglyzs; + } + + public void setYsglyzs(String ysglyzs) { + this.ysglyzs = ysglyzs; + } + + public String getFyhj() { + return fyhj; + } + + public void setFyhj(String fyhj) { + this.fyhj = fyhj; + } + + public String getCwfzrsp() { + return cwfzrsp; + } + + public void setCwfzrsp(String cwfzrsp) { + this.cwfzrsp = cwfzrsp; + } + + public String getCn() { + return cn; + } + + public void setCn(String cn) { + this.cn = cn; + } + + public String getYsglycs() { + return ysglycs; + } + + public void setYsglycs(String ysglycs) { + this.ysglycs = ysglycs; + } +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/WbLog.java b/src/main/java/com/engine/htsc/payment/pojo/WbLog.java new file mode 100644 index 0000000..447bc5e --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/WbLog.java @@ -0,0 +1,131 @@ +package com.engine.htsc.payment.pojo; + +import java.util.ArrayList; +import java.util.List; + +/** + * 网报日志类 + */ +public class WbLog { + //流程编号 + private String requestNo; + //调用人 + private String operator; + //调用结果(泛微定义的成功标志) + private String result; + // 调用时间 + private String time; + //第三方接口地址 + private String url; + //第三方接口方法 + private String method; + //调用原始参数或报文(clob字段) + private String request; + //调用结果(第三方接口原始返回结果) + private String response; + // 机器IP + private String ip; + + public String getRequestNo() { + return requestNo; + } + + public void setRequestNo(String requestNo) { + this.requestNo = requestNo; + } + + public String getOperator() { + return operator; + } + + public void setOperator(String operator) { + this.operator = operator; + } + + public String getResult() { + return result; + } + + public void setResult(String result) { + this.result = result; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getMethod() { + return method; + } + + public void setMethod(String method) { + this.method = method; + } + + public String getRequest() { + return request; + } + + public void setRequest(String request) { + this.request = request; + } + + public String getResponse() { + return response; + } + + public void setResponse(String response) { + this.response = response; + } + + public String getIp() { + return ip; + } + + public void setIp(String ip) { + this.ip = ip; + } + + @Override + public String toString() { + return "WbLog{" + + "requestNo='" + requestNo + '\'' + + ", operator='" + operator + '\'' + + ", result='" + result + '\'' + + ", time='" + time + '\'' + + ", url='" + url + '\'' + + ", method='" + method + '\'' + + ", request='" + request + '\'' + + ", response='" + response + '\'' + + ", ip='" + ip + '\'' + + '}'; + } + + public List toList() { + List objects = new ArrayList<>(); + objects.add(this.getRequestNo()); + objects.add(this.getOperator()); + objects.add(this.getResult()); + objects.add(this.getTime()); + objects.add(this.getUrl()); + objects.add(this.getMethod()); + objects.add(this.getRequest()); + objects.add(this.getResponse()); + objects.add(this.getIp()); + return objects; + + } + +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/ZipModel.java b/src/main/java/com/engine/htsc/payment/pojo/ZipModel.java new file mode 100644 index 0000000..e5e859b --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/ZipModel.java @@ -0,0 +1,68 @@ +package com.engine.htsc.payment.pojo; + +import java.io.File; + +public class ZipModel { + + public ZipModel(String parentFolder) { + this.parentFolder = parentFolder; + } + + private final String parentFolder; + private String imageFileId; + private String realName; + private String realPath; + private String isZip; + private String docId; + private String newRealPathName; + + public String getParentFolder() { + return parentFolder; + } + + public String getImageFileId() { + return imageFileId; + } + + public void setImageFileId(String imageFileId) { + this.imageFileId = imageFileId; + } + + public String getRealName() { + return realName; + } + + public void setRealName(String realName) { + this.realName = realName; + } + + public String getRealPath() { + return realPath; + } + + public void setRealPath(String realPath) { + this.realPath = realPath; + } + + public String getIsZip() { + return isZip; + } + + public void setIsZip(String isZip) { + this.isZip = isZip; + } + + public String getDocId() { + return docId; + } + + public void setDocId(String docId) { + this.docId = docId; + } + + public String getNewRealPathName() { + return parentFolder + File.separatorChar + realName; + } + + +} diff --git a/src/main/java/com/engine/htsc/payment/service/BudgetCommand.java b/src/main/java/com/engine/htsc/payment/service/BudgetCommand.java new file mode 100644 index 0000000..ae92e78 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/BudgetCommand.java @@ -0,0 +1,15 @@ +package com.engine.htsc.payment.service; + +/** + * {@link com.engine.htsc.payment.enums.BudgetNodeType} + */ +public interface BudgetCommand { + + String submit(String requestNo, String billStatus) throws Exception; + + String reSubmit(String requestNo) throws Exception; + + String reject(String requestNo) throws Exception; + + String finish(String requestNo) throws Exception; +} diff --git a/src/main/java/com/engine/htsc/payment/service/BudgetService.java b/src/main/java/com/engine/htsc/payment/service/BudgetService.java new file mode 100644 index 0000000..236ba2a --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/BudgetService.java @@ -0,0 +1,46 @@ +package com.engine.htsc.payment.service; + +import weaver.conn.RecordSetDataSource; + +/** + * @author K1810012 + * 预算 业务 + */ +public interface BudgetService { + + /** + * 预算接口,同步写入预算中间表 + * + * @param requestMark 流程编号 + * @param billStatus 付款状态 + * @param budgetKmTable 预算科目表(dt8 or dt9) + * @param mainTable 主表 + * @return 是否成功 + */ + boolean doBudgetMiddleTable(String requestMark, String billStatus, String fbizDate, String budgetKmTable, String mainTable, boolean isItFlag); + + boolean dobugetModeUpdateYs(String requestId, String tableName ); + + /** + * 插入中间表 + * + * @param fName 流程编号 + * @param billStatus 单据状态 + * @param mainTable 主表 + * @param rsd 外部数据源 + * @return 布尔 + */ + boolean insertBudgetMiddleTable(String fName, String billStatus,String fbizdate, String budgetKmTable, String mainTable, boolean isItFlag, RecordSetDataSource rsd) throws Exception; + + /** + * 更新预算表 + * + * @param fName 流程编号 + * @param billStatus 单据状态 + * @param mainTable 主表 + * @param rsd 外部数据源 + * @return 布尔 + */ + boolean updateBudgetMiddleTable(String fName, String billStatus, String budgetKmTable, String mainTable, boolean isItFlag, RecordSetDataSource rsd) throws Exception; + +} diff --git a/src/main/java/com/engine/htsc/payment/service/BudgetStrategy.java b/src/main/java/com/engine/htsc/payment/service/BudgetStrategy.java new file mode 100644 index 0000000..8cd4bc4 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/BudgetStrategy.java @@ -0,0 +1,44 @@ +package com.engine.htsc.payment.service; + +import com.engine.htsc.payment.pojo.BudgetList; + +public interface BudgetStrategy { + + /** + * 构建预算信息实体 T + * + * 通用付款表单: {@link com.engine.htsc.payment.pojo.BudgetDTO} + * 总部差旅报销表单: + * 总部通用报销表单 + * + * @param requestNo 流程id + * @param billStatus 预算状态 + * @return 预算实体 + * @throws Exception 异常 + */ + T buildNewBudgetParamFromWorkflowDB(String requestNo, String billStatus) throws Exception; + + /** + * 构建预算分录的sql + * {@link BudgetList} + * + * 通用付款表单: 明细表8,表9取出预算信息数据 + * 总部差旅报销表单: + * 总部通用报销表单 + * + * @param bz 币种,本币外币 + * @param table 主表 + * @param detailId 明细表主键 + * @return sql + */ + String queryBudgetSqlFromDetailTable(String bz, String table, String detailId); + + /** + * 从建模数据中获取预算信息实体 T + * + * @param requestNo 流程id + * @param ifFlag it标识 + * @return 预算实体 + */ + T getLastBudgetParamFromModeDB(String requestNo, String ifFlag); +} diff --git a/src/main/java/com/engine/htsc/payment/service/BxBudgetService.java b/src/main/java/com/engine/htsc/payment/service/BxBudgetService.java new file mode 100644 index 0000000..f8c881a --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/BxBudgetService.java @@ -0,0 +1,53 @@ +package com.engine.htsc.payment.service; + +import weaver.conn.RecordSetDataSource; + +import java.util.List; + +public interface BxBudgetService { + + /** + * 预算 + * @param requestId 流程编号 + * @param tableName 流程表名 + * @return 更新信息 + * @throws Exception 异常 + */ + String doBudgetAccount(String requestId, String tableName, String billStatus) throws Exception; + + /** + * 预算接口,同步写入预算中间表 + * + * @param requestMark 流程编号 + * @param billStatus 付款状态 + * @param budgetKmTable 预算科目表(dt8 or dt9) + * @param mainTable 主表 + * @return 是否成功 + */ + boolean doBudgetMiddleTable(String requestMark, String billStatus,String fbizdate ,List budgetKmTable, String mainTable); + + boolean dobugetModeUpdateYs(String requestId, String tableName ); + + /** + * 插入中间表 + * + * @param fName 流程编号 + * @param billStatus 单据状态 + * @param mainTable 主表 + * @param rsd 外部数据源 + * @return 布尔 + */ + boolean insertBudgetMiddleTable(String fName, String billStatus,String fbizDate, List budgetKmTable, String mainTable, RecordSetDataSource rsd) throws Exception; + + /** + * 更新预算表 + * + * @param fName 流程编号 + * @param billStatus 单据状态 + * @param mainTable 主表 + * @param rsd 外部数据源 + * @return 布尔 + */ + boolean updateBudgetMiddleTable(String fName, String billStatus, List budgetKmTable, String mainTable, RecordSetDataSource rsd) throws Exception; + +} diff --git a/src/main/java/com/engine/htsc/payment/service/ClBxBudgetService.java b/src/main/java/com/engine/htsc/payment/service/ClBxBudgetService.java new file mode 100644 index 0000000..0cad0fc --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/ClBxBudgetService.java @@ -0,0 +1,52 @@ +package com.engine.htsc.payment.service; + +import weaver.conn.RecordSetDataSource; + +import java.util.List; + +public interface ClBxBudgetService { + /** + * 预算 + * @param requestId 流程编号 + * @param tableName 流程表名 + * @return 更新信息 + * @throws Exception 异常 + */ + String doBudgetAccount(String requestId, String tableName, String billStatus) throws Exception; + + /** + * 预算接口,同步写入预算中间表 + * + * @param requestMark 流程编号 + * @param billStatus 付款状态 + * @param budgetKmTable 预算科目表(dt8 or dt9) + * @param mainTable 主表 + * @return 是否成功 + */ + boolean doBudgetMiddleTable(String requestMark, String billStatus,String fbizDate, List budgetKmTable, String mainTable); + + boolean dobugetModeUpdateYs(String requestId, String tableName ); + + /** + * 插入中间表 + * + * @param fName 流程编号 + * @param billStatus 单据状态 + * @param mainTable 主表 + * @param rsd 外部数据源 + * @return 布尔 + */ + boolean insertBudgetMiddleTable(String fName, String billStatus, String fbizDate, List budgetKmTable, String mainTable, RecordSetDataSource rsd) throws Exception; + + /** + * 更新预算表 + * + * @param fName 流程编号 + * @param billStatus 单据状态 + * @param mainTable 主表 + * @param rsd 外部数据源 + * @return 布尔 + */ + boolean updateBudgetMiddleTable(String fName, String billStatus, List budgetKmTable, String mainTable, RecordSetDataSource rsd) throws Exception; + +} diff --git a/src/main/java/com/engine/htsc/payment/service/PaymentCommonService.java b/src/main/java/com/engine/htsc/payment/service/PaymentCommonService.java new file mode 100644 index 0000000..bbf00b0 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/PaymentCommonService.java @@ -0,0 +1,27 @@ +package com.engine.htsc.payment.service; + +import java.io.File; +import java.util.List; +import java.util.Map; + +public interface PaymentCommonService { + + /** + * 流程附件下载 + */ + File buildAttachmentsZipFile() throws Exception; + + /** + * 更新合同信息 + * @param rids 流程id 例如 1,2 + * @return 接口返回信息 + */ + String syncContractInfo(String syncIt, String rids) throws Exception; + + /** + * 接收到流程编号后自动写预算实占、核算并且将预算状态、核算状态、付款状态改为已经同步、已经付款 + * + * @param requestId 网报流程id + */ + List> syncFundAllStatus(String requestId) throws Exception; +} diff --git a/src/main/java/com/engine/htsc/payment/service/PaymentCubeService.java b/src/main/java/com/engine/htsc/payment/service/PaymentCubeService.java new file mode 100644 index 0000000..9793859 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/PaymentCubeService.java @@ -0,0 +1,9 @@ +package com.engine.htsc.payment.service; + +import java.util.Map; + +public interface PaymentCubeService { + Map updateReadStatus(String requestid); + + Map updatePrintStatus(String ids); +} diff --git a/src/main/java/com/engine/htsc/payment/service/PaymentExcelTemplateService.java b/src/main/java/com/engine/htsc/payment/service/PaymentExcelTemplateService.java new file mode 100644 index 0000000..72d0131 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/PaymentExcelTemplateService.java @@ -0,0 +1,14 @@ +package com.engine.htsc.payment.service; + +import com.alibaba.fastjson.JSONArray; +import com.engine.htsc.payment.pojo.HTPaymentCostDetail; + +import java.util.List; +import java.util.Map; + +public interface PaymentExcelTemplateService { + List getDetailByExcel(Map params) throws Exception; + + JSONArray readByImageId(int imageId,String ngrid) throws Exception; + +} diff --git a/src/main/java/com/engine/htsc/payment/service/PaymentQueryDetailService.java b/src/main/java/com/engine/htsc/payment/service/PaymentQueryDetailService.java new file mode 100644 index 0000000..69a2e9e --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/PaymentQueryDetailService.java @@ -0,0 +1,8 @@ +package com.engine.htsc.payment.service; + +import java.util.List; +import java.util.Map; + +public interface PaymentQueryDetailService { + List> getDetailInfo(Map params); +} diff --git a/src/main/java/com/engine/htsc/payment/service/PaymentService.java b/src/main/java/com/engine/htsc/payment/service/PaymentService.java new file mode 100644 index 0000000..d8ae257 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/PaymentService.java @@ -0,0 +1,173 @@ +package com.engine.htsc.payment.service; + +import com.engine.htsc.payment.pojo.*; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + + +public interface PaymentService { + + /** + * 校验流程编号 + * @param lcbh 流程编号 + * @param type 类型 + * @param unNumber 流程唯一标识 + * @return 重复则返回新的流程编号 + */ + String checkRequestMark(String lcbh, String type, String unNumber) throws Exception; + + /** + * 预算控制 + * @param bgRd 入参 + * @return 返回对应金额和编码 + */ + Map controlBudget(BudgetReqDto bgRd) throws Exception; + + /** + * 获取汇率信息 + * @return 汇率对应关系 + */ + Map queryExchangeRate() throws Exception; + + /** + * 查询已付金额 + * @param contractCode 合同编号 + * @param processCode 合同流程编号 + * @return 合同金额 + */ + String queryContractPaidMoney(String contractCode, String processCode) throws Exception; + + /** + * 出纳付款-预算按钮 + * + * @param ids 多个 ,分割 + * @param isDiscard 是否废弃 0 标识废弃 1或其他 实占 + * @return 消息 + */ + Map doBudget(String ids, String isDiscard); + + /** + * 更新导出状态 + * @param id id编号,多个 + * @param type 类型 传0或空为总部;传1为联合; + * @return 更新是否成功 + */ + String doExport(String id, String type); + + /** + * 更新手动付款状态 + * @param id id编码 可以多个状态 + * @return 更新是否成功 + */ + String updateManualPaymentStatus(String id); + + /** + * 查询虚拟部门个数 + * @param deptId 部门id + * @return 返回虚拟部门个数 + */ + String queryVirtualDepartment(String deptId); + + /** + * 查询合同信息,带分页 + * @return string + */ + ContractInfoVo queryContractPagination(ContractRequestParam param); + + /** + * 查询it项目信息,带分页 + * @param condition dto + * @return it项目列表 + */ + ItProjectVo queryItProject(ItProjectQueryCondition condition) throws Exception; + + /** + * 预算科目对应会计科目信息 + * 总部通用付款:会计节点 + * 付款明细预算科目带出会计科目会计科目 + * @param budgetCode 付款明细预算科目code + * @return ec浏览按钮 + */ + String getAccountCode(String budgetCode); + + /** + * 同上, {@link #getAccountCode(String)} + * 联合适配 + */ + String getAccountCode4Lh(String budgetCode); + + /** + * 同上, {@link #getAccountCode(String)} + * 香港适配 + */ + String getAccountCode4HK(String budgetCode); + + /** + * 生产流程编号 + * @param request http请求 + * @return requestMark + */ + String generateRequestMark(HttpServletRequest request); + + /** + * 预算 + * @param requestId 流程编号 + * @param tableName 流程表名 + * @return 更新信息 + * @throws Exception 异常 + */ + String doBudgetAccount(String requestId, String tableName, String billStatus) throws Exception; + + /** + * it预算 + * @return 更新it预算信息 + * @throws Exception 异常 + */ + String doITBudgetAccount(String requestId, String tableName, String billStatus) throws Exception; + + /** + * 核算 + * @param ids 建模流程号id + * @return 更新信息 + */ + List> doCostAccount(String ids) throws Exception; + + /** + * 付款 + * @param ids 建模流程号id + * @return 更新信息 + * @throws Exception 异常 + */ + List> doPayment(String ids) throws Exception; + + /** + * 发票记录 + * @param fphm 发票号码 + * @param fpdm 发票代码 + * @return map + * @throws Exception 异常 + */ + Map queryInvoiceOnce(String fphm, String fpdm) throws Exception; + + /** + * 资金,付款历史 + * @param bankAccount 银行账户 + * @param payeeDept 付款单位 + * @param bankName 开户行 + * @param city 省市 + * @return map + * @throws Exception ero + */ + Map queryHistoryPayRecord(String bankAccount, String payeeDept, String bankName, String city) throws Exception; + + /** + * 提交时校验银行账户 + * @param dtData 明细11数据 + * @return string + */ + String queryHistoryPayRecordWithSubmit(Map> dtData) throws Exception; + + Map upMainFKZT(Map params); +} diff --git a/src/main/java/com/engine/htsc/payment/service/PaymentSyncService.java b/src/main/java/com/engine/htsc/payment/service/PaymentSyncService.java new file mode 100644 index 0000000..a78a684 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/PaymentSyncService.java @@ -0,0 +1,17 @@ +package com.engine.htsc.payment.service; + +import com.engine.htsc.payment.model.SendAppendicesTask; +import com.engine.htsc.payment.model.SendPDFTask; +import com.engine.htsc.payment.model.WfParams; + +import java.util.List; +import java.util.concurrent.RecursiveAction; + +public interface PaymentSyncService { + + void syncProcessPdfAndAllAppendix() throws Exception; + + List syncProcessPdf(List branchWfParams) throws InterruptedException; + + List syncAppendices(List branchWfParams); +} diff --git a/src/main/java/com/engine/htsc/payment/service/PaymentWorkflowService.java b/src/main/java/com/engine/htsc/payment/service/PaymentWorkflowService.java new file mode 100644 index 0000000..efd8d58 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/PaymentWorkflowService.java @@ -0,0 +1,12 @@ +package com.engine.htsc.payment.service; + +import com.engine.htsc.payment.pojo.TripPaymentRequest; +import java.util.Map; + + +public interface PaymentWorkflowService { + Map getVirtualDept(); + Map createBusinessTravelWorkflow(TripPaymentRequest request); + void saveDetailInfo(TripPaymentRequest request) throws Exception; + Map getLevelDept(String deptid); +} diff --git a/src/main/java/com/engine/htsc/payment/service/PreApprovalService.java b/src/main/java/com/engine/htsc/payment/service/PreApprovalService.java new file mode 100644 index 0000000..d7cb956 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/PreApprovalService.java @@ -0,0 +1,12 @@ +package com.engine.htsc.payment.service; + +import com.alibaba.fastjson.JSONArray; +import com.engine.htsc.payment.pojo.PreApproval; + +import java.util.List; + +public interface PreApprovalService { + + List getPreAplInfos(String requestid) throws Exception; + +} diff --git a/src/main/java/com/engine/htsc/payment/service/PurchasingMallService.java b/src/main/java/com/engine/htsc/payment/service/PurchasingMallService.java new file mode 100644 index 0000000..2f7843a --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/PurchasingMallService.java @@ -0,0 +1,8 @@ +package com.engine.htsc.payment.service; + +import java.util.Map; + +public interface PurchasingMallService { + + Map> getBatchKj(String yskms) throws Exception; +} diff --git a/src/main/java/com/engine/htsc/payment/service/SaveIntoFinancePaymentService.java b/src/main/java/com/engine/htsc/payment/service/SaveIntoFinancePaymentService.java new file mode 100644 index 0000000..a3f0bb1 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/SaveIntoFinancePaymentService.java @@ -0,0 +1,9 @@ +package com.engine.htsc.payment.service; + +import java.util.List; + +public interface SaveIntoFinancePaymentService { + + String saveIntoFinance(List requestidList) throws Exception; + +} diff --git a/src/main/java/com/engine/htsc/payment/service/SettlePaymentFlowService.java b/src/main/java/com/engine/htsc/payment/service/SettlePaymentFlowService.java new file mode 100644 index 0000000..45e625a --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/SettlePaymentFlowService.java @@ -0,0 +1,45 @@ +package com.engine.htsc.payment.service; + + +import com.alibaba.fastjson.JSONObject; +import com.engine.htsc.payment.pojo.SettlePayAutoRequestParam; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public interface SettlePaymentFlowService { + + List getParam(String requestid) throws Exception ; + + String createWorkflowMain(List paramList) throws Exception; + + HashMap getSplParam(String requestid); + + String saveSubCompanySpl(HashMap reqMap); + + String getSplNgr(String flowType,String orgCode); + + boolean doBudgetMiddleTable(String requestMark, String billStatus); + + boolean insertBudgetMiddleTable(String fName, String billStatus, String yskmTable, String mainTable) throws Exception; + + JSONObject getSettlePaymentSplWeb(HashMap reqMap); + + Map doAccountByBatchIdZb(String rids) throws Exception; + + Map doBudgetByBatchIdZb(String rid, String isDiscard) throws Exception; + + Map doAccountByBatchIdFzjg(String rids) throws Exception; + + Map doBudgetByBatchIdFzjg(String rid, String isDiscard) throws Exception; + + Map doPaymentByBatchIdZb(String rids) throws Exception; + + Map doPaymentByBatchIdFzjg(String rids) throws Exception; + + String updateManualPaymentStatusZb(String rids); + + String updateManualPaymentStatusFzjg(String rids); + +} diff --git a/src/main/java/com/engine/htsc/payment/service/StaffCodService.java b/src/main/java/com/engine/htsc/payment/service/StaffCodService.java new file mode 100644 index 0000000..7933f04 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/StaffCodService.java @@ -0,0 +1,24 @@ +package com.engine.htsc.payment.service; + +import com.engine.htsc.payment.pojo.AutoRequestParam; + +import java.util.Map; + +/** + * 员工慰问服务 + */ +public interface StaffCodService { + + /** + * 生成触发流程数据 + * @param rids 员工慰问流程ids + * @return {@link AutoRequestParam} 多条流程数据归并 + */ + AutoRequestParam generateAutoRequestParamByStaffCodRid(String rids) throws Exception; + + /** + * 自动触发工会流程 + * @param params 请求实体 + */ + Map autoTriggerLaborUnionPayment(AutoRequestParam params) throws Exception; +} diff --git a/src/main/java/com/engine/htsc/payment/service/UnionPaymentService.java b/src/main/java/com/engine/htsc/payment/service/UnionPaymentService.java new file mode 100644 index 0000000..b7f9340 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/UnionPaymentService.java @@ -0,0 +1,9 @@ +package com.engine.htsc.payment.service; + + +import java.util.Map; + +public interface UnionPaymentService { + + Map getApprovalLinkByDept(Map params) throws Exception; +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/BudgetServiceImpl.java b/src/main/java/com/engine/htsc/payment/service/impl/BudgetServiceImpl.java new file mode 100644 index 0000000..3d64832 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/BudgetServiceImpl.java @@ -0,0 +1,273 @@ +package com.engine.htsc.payment.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.payment.dao.BudgetDao; +import com.engine.htsc.payment.service.BudgetService; +import com.engine.htsc.payment.util.PayUtil; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.conn.RecordSet; +import weaver.conn.RecordSetDataSource; +import weaver.general.Util; +import weaver.hrm.company.DepartmentComInfo; +import weaver.interfaces.htsc.comInfo.PropBean; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; + + +/** + * @author K1810012 + * 预算 业务实现 + */ +public class BudgetServiceImpl extends Service implements BudgetService { + + private final Log log = LogFactory.getLog(PaymentServiceImpl.class.getName()); + private final BudgetDao budgetDao = new BudgetDao(); + private final PropBean pp = new PropBean(); + + @Override + public boolean doBudgetMiddleTable(String requestMark, String billStatus, String fbizdate, String budgetKmTable, String mainTable, boolean isIt) { + log.info("付款流程,预算中间表更新\n @requestMark=" + requestMark + ",billStatus=" + billStatus + + ",budgetKmTable=" + budgetKmTable + "@"); + if (StringUtils.isBlank(requestMark) || StringUtils.isBlank(billStatus) || StringUtils.isBlank(budgetKmTable)) { + log.info("更新失败,原因:流程编号或单据状态为空"); + return false; + } + try { + //预算中间表外部数据源 + String budgetTableName = pp.getPropName("BudgetTableName"); + String nameIsExist = budgetDao.fNameIsExist(budgetTableName, requestMark); + log.info("预算数据是否存在sql @" + nameIsExist + "@"); + RecordSetDataSource rsd = new RecordSetDataSource("BudgetRecords"); + rsd.execute(nameIsExist); + if (rsd.next() && StringUtils.isNotBlank(requestMark)) { + String deleteAll = String.format("delete from %s where FNAME='%s'", + budgetTableName, requestMark); + rsd.executeUpdateWithDatasource(deleteAll, "BudgetRecords"); + insertBudgetMiddleTable(requestMark, billStatus,fbizdate, budgetKmTable, mainTable, isIt, rsd); + // updateBudgetMiddleTable(requestMark, billStatus, budgetKmTable, mainTable, isIt, rsd); + } else { + insertBudgetMiddleTable(requestMark, billStatus,fbizdate, budgetKmTable, mainTable, isIt, rsd); + } + return true; + } catch (Exception e) { + log.info("更新失败,原因: catch exception: " + e); + return false; + } + } + + //预算更新 在 + @Override + public boolean dobugetModeUpdateYs(String requestId, String tableName) { + log.info("付款流程修改建模状态!!!requestId:" + requestId + "tablename:" + tableName); + if (StringUtils.isBlank(requestId) || StringUtils.isBlank(tableName)) { + log.info("更新失败,原因:流程编号或单据状态为空"); + return false; + } + try { + String sql = "update " + tableName + " set tbdlcyszt=0 where requestid='" + requestId + "'"; + RecordSet rs = new RecordSet(); + return rs.execute(sql); + //预算中间表外部数据源 + /* String budgetTableName = pp.getPropName("BudgetTableName"); + String nameIsExist = budgetDao.fNameIsExist(budgetTableName, requestMark); + log.info("预算数据是否存在sql @" + nameIsExist + "@"); + + RecordSetDataSource rsd = new RecordSetDataSource("BudgetRecords"); + rsd.execute(nameIsExist); + if (rsd.next()) { + updateBudgetMiddleTable(requestMark, billStatus, budgetKmTable, mainTable, isIt, rsd); + } else { + insertBudgetMiddleTable(requestMark, billStatus, budgetKmTable, mainTable, isIt, rsd); + } + */ + + + } catch (Exception e) { + log.info("更新失败,原因: catch exception: " + e); + return false; + } + } + + @Override + public boolean insertBudgetMiddleTable(String requestMark, String billStatus,String fbizdate, String budgetKmTable, String mainTable, boolean isIt, RecordSetDataSource rsd) throws Exception { + log.info("预算信息不存在,执行更新方法 insertBudgetMiddleTable\n @requestMark=" + requestMark + ",billStatus=" + billStatus + "@"); + Map budgetBody = getBudgetBody(requestMark, mainTable, budgetKmTable, isIt); + List mainInfo = (List) budgetBody.get("main"); //主表数据 + List> dtInfo = (List>) budgetBody.get("dt"); //预算数据 + if (dtInfo.size() == 0) { + log.info("插入预算表中止,因为科目信息为空"); + return false; + } + DateTimeFormatter dfOnlyYear = DateTimeFormatter.ofPattern("yyyy"); //年 + DateTimeFormatter dfDateTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); //当前操作时间 + try { + String budgetTableName = new PropBean().getPropName("BudgetTableName"); + for (List singleValue : dtInfo) { + List insertValues = new ArrayList<>(); + insertValues.add(billStatus); + insertValues.addAll(mainInfo); + insertValues.add(dfOnlyYear.format(LocalDateTime.now())); + if(StringUtils.isNotEmpty(fbizdate)){ + insertValues.add(fbizdate); + } else { + insertValues.add(dfDateTime.format(LocalDateTime.now())); + } + insertValues.addAll(singleValue); +// String budgetTableName = "T_BUD_BUDGETRECORDS"; + String insert = budgetDao.insertMiddleTable(budgetTableName); + RecordSet recordSet = new RecordSet(); + recordSet.executeUpdateWithDatasource(insert, "BudgetRecords", insertValues); + } + return true; + } catch (Exception e) { + log.info("insertBudgetMiddleTable异常, [" + e + "]"); + return false; + } + } + + @Override + public boolean updateBudgetMiddleTable(String requestMark, String billStatus, String budgetKmTable, String mainTable, boolean isIt, RecordSetDataSource rsd) throws Exception { + log.info("预算信息已存在,执行更新方法 updateBudgetMiddleTable \n @requestMark=" + requestMark + ",billStatus=" + billStatus + "@"); + Map budgetBody = getBudgetBody(requestMark, mainTable, budgetKmTable, isIt); + List mainInfo = (List) budgetBody.get("main"); //主表数据 + List> dtInfo = (List>) budgetBody.get("dt"); //预算数据 + if (dtInfo.size() == 0) { + log.info("插入预算表中止,因为科目信息为空"); + return false; + } + DateTimeFormatter dfOnlyYear = DateTimeFormatter.ofPattern("yyyy"); //年 + DateTimeFormatter dfDateTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); //当前操作时间 + RecordSet rs = new RecordSet(); + try { + for (List singleValue : dtInfo) { + List insertValues = new ArrayList<>(); + insertValues.add(billStatus); +// insertValues.add("0"); + insertValues.add(dfOnlyYear.format(LocalDateTime.now())); + insertValues.add(dfDateTime.format(LocalDateTime.now())); + insertValues.addAll(singleValue.subList(2, 8)); + insertValues.add(singleValue.get(0)); + insertValues.add(mainInfo.get(0)); + String budgetTableName = new PropBean().getPropName("BudgetTableName"); +// String budgetTableName = "T_BUD_BUDGETRECORDS"; + String update = budgetDao.updateMiddleTable(budgetTableName); + RecordSet recordSet = new RecordSet(); + recordSet.executeUpdateWithDatasource(update, "BudgetRecords", insertValues); + } + return true; + } catch (Exception e) { + log.info("insertBudgetMiddleTable异常, [" + e + "]"); + return false; + } + } + + /** + * 获取插入表中的数据 + * + * @param requestMark 流程编号 + * @return map + */ + private Map getBudgetBody(String requestMark, String main, String budgetKmTable, boolean isItFlag) throws Exception { + Map res = new HashMap<>(); + log.info("付款流程表名: @" + main + "@"); + log.info("付款预算表名: @" + budgetKmTable + "@"); + RecordSet rs = new RecordSet(); + RecordSet rs1 = new RecordSet(); + String mainInfo = budgetDao.mainInfo(main, requestMark); + rs.executeQuery(mainInfo); + List mainValues = new ArrayList<>(); + String mainId = ""; //主副表关联id + if (rs.next()) { + mainValues.add(requestMark); + mainValues.add(Util.null2String(rs.getString("REQUESTNAME"))); //流程编码 + mainValues.add(Util.null2String(rs.getString("LASTNAME"))); //拟稿人名称 + //mainValues.add(Util.null2String(rs.getString("DEPARTMENTCODE"))); //华泰部门code + mainId = Util.null2String(rs.getString("ID")); + } + log.info("主表数据: @" + mainValues + "@"); + res.put("main", mainValues); + + String budgetKmTableInfo = budgetDao.budgetKmTableInfo(budgetKmTable, mainId, isItFlag); + DepartmentComInfo dc = new DepartmentComInfo(); + rs.executeQuery(budgetKmTableInfo); + List> allDtValues = new ArrayList<>(); //所有明细科目数据 add dtValues 单行明细科目数据 + while (rs.next()) { + List dtValues = new ArrayList<>(); //单行明细科目数据 + String yskm = Util.null2String(rs.getString("YSKM")); //科目 + dtValues.add(yskm); //二级预算科目 + dtValues.add(PayUtil.superBudgetSubject(yskm)); //一级预算科目 + if (budgetKmTable.toLowerCase().contains("dt8")) { + String FYSJCDBM = Util.null2String(rs.getString("FYSJCDBM")); + String JSHJJE = Util.null2String(rs.getString("JSHJJE")); + String BHSJE = Util.null2String(rs.getString("BHSJE")); + String SJ = Util.null2String(rs.getString("SJ")); + String CYS = Util.null2String(rs.getString("CYS")); + String PROJECTCODE = Util.null2String(rs.getString("PROJECTCODE")); + String XMMC = Util.null2String(rs.getString("XMMC")); + if ("".equals(JSHJJE)) { + dtValues.add(0.00); // 价税合计金额 + } else { + dtValues.add(Double.parseDouble(JSHJJE)); // 价税合计金额 + } + if ("".equals(BHSJE)) { + dtValues.add(0.00); // 未税金额 + } else { + dtValues.add(Double.parseDouble(BHSJE)); // 未税金额 + } + + if ("".equals(SJ)) { + dtValues.add(0.00); //税金 + } else { + dtValues.add(Double.parseDouble(SJ)); //税金 + } + dtValues.add(0.00); // 实际报销金额 + dtValues.add(0.00); // 差旅标准金额 + dtValues.add(PayUtil.overWeight(CYS)); // 是否超标 + String isItPay = "否"; + rs1.executeQuery(budgetDao.isItPay(main, requestMark)); + if (rs1.next()) { + if ("1".equals(Util.null2String(rs1.getString("FKLX")))) { + isItPay = "是"; + } + } + dtValues.add(isItPay); + dtValues.add(PROJECTCODE); // it项目编码 + dtValues.add(XMMC); // it项目名称 + dtValues.add(dc.getDepartmentCode(FYSJCDBM)); //取明细实际费用承担部门 + } else { + String FYSJCDBM = Util.null2String(rs.getString("FYSJCDBM")); + String JSHJJE = Util.null2String(rs.getString("rmbje")); // 人民币金额 + String PROJECTCODE = ""; + String XMMC = ""; + if ("".equals(JSHJJE)) { + dtValues.add(0.00); // 价税合计金额 + dtValues.add(0.00); // 未税金额 + } else { + dtValues.add(Double.parseDouble(JSHJJE)); // 价税合计金额 + dtValues.add(Double.parseDouble(JSHJJE)); // 未税金额 + } + String CYS = Util.null2String(rs.getString("CYS")); + dtValues.add(0.00); //税金 + dtValues.add(0.00); // 实际报销金额 + dtValues.add(0.00); // 差旅标准金额 + dtValues.add(PayUtil.overWeight(CYS)); // 是否超标 + dtValues.add("否"); + dtValues.add(PROJECTCODE); // it项目编码 + dtValues.add(XMMC); // it项目名称 + dtValues.add(dc.getDepartmentCode(FYSJCDBM)); //取明细实际费用承担部门 + + } + log.info("dtValues = " + dtValues); + allDtValues.add(dtValues); + } + log.info("预算表数据" + budgetKmTable + " @" + allDtValues + "@"); + res.put("dt", allDtValues); + return res; + } + + +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/BxBudgetServiceImpl.java b/src/main/java/com/engine/htsc/payment/service/impl/BxBudgetServiceImpl.java new file mode 100644 index 0000000..920d5c6 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/BxBudgetServiceImpl.java @@ -0,0 +1,374 @@ +package com.engine.htsc.payment.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.engine.core.impl.Service; +import com.engine.htsc.payment.dao.BudgetDao; +import com.engine.htsc.payment.service.BxBudgetService; +import com.engine.htsc.payment.util.PayUtil; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.conn.RecordSet; +import weaver.conn.RecordSetDataSource; +import weaver.general.Util; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.interfaces.htsc.cus.HTUtil; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; + +public class BxBudgetServiceImpl extends Service implements BxBudgetService { + private final Log log = LogFactory.getLog(PaymentServiceImpl.class); + private final BudgetDao budgetDao = new BudgetDao(); + private final PropBean pp = new PropBean(); + + + @Override + public String doBudgetAccount(String requestId, String tableName, String billStatus) throws Exception { + log.info("====报销流程预算开始"); + log.info("====报销流程预算流程id@" + requestId + "@"); + log.info("====报销流程表名@" + tableName + "@"); + JSONObject params = new JSONObject(); + BudgetDao budgetDao = new BudgetDao(); + RecordSet rs = new RecordSet(); + ResourceComInfo rc = new ResourceComInfo(); + HTUtil htUtil = new HTUtil(); + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + try { + + String budgetInvokeParam = budgetDao.mainBXFieldParam(tableName, requestId); + rs.executeQuery(budgetInvokeParam); +// String bz = "0"; //对应fkxx字段 + String lcbh = ""; + String requestname = ""; + String ngr = ""; + String mainId = ""; + if (rs.next()) { + lcbh = Util.null2String(rs.getString("lcbh")); + ngr = Util.null2String(rs.getString("ngr")); + mainId = Util.null2String(rs.getString("id")); +// bz = Util.null2String(rs.getString("fkxx")); + requestname = Util.null2String(rs.getString("requestname")); + } +// String yskmTable = tableName + "_dt8"; //预算科目表,本币dt8,外币dt9 +// if ("1".equals(bz)) { +// yskmTable = tableName + "_dt9"; +// } + params.put("billnum", requestId); + params.put("billname", lcbh); + params.put("billstatus", billStatus); + params.put("billtitle", requestname); + params.put("personName", rc.getLastname(ngr)); + params.put("bizdate", df.format(LocalDateTime.now())); + log.info(">>主表字段获取: @" + params + "@"); +// rs.executeQuery(budgetDao.isItPay(tableName, lcbh)); +// boolean isItFlag = false; +// if (rs.next()) { +// if ("1".equals(Util.null2String(rs.getString("FKLX")))) { +// isItFlag = true; +// } +// } + JSONArray levelList = new JSONArray(); + String yskmTable = tableName + "_dt8"; + String bbYskmTableFieldParam = budgetDao.bxBBYskmTableFieldParam(yskmTable, mainId); + rs.executeQuery(bbYskmTableFieldParam); + int i = 1; + while (rs.next()) { + JSONObject level = new JSONObject(); +// String fycdbmfzr = Util.null2String(rs.getString("fycdbmfzr")); //费用承担部门负责人 + String fysjcdbm = Util.null2String(rs.getString("fysjcdbm")); //费用承担部门 + String yskm = Util.null2String(rs.getString("yskm")); //预算科目 + String JSHJJE = Util.null2String(rs.getString("jshjje")); + String BHSJE = Util.null2String(rs.getString("bhsje")); + String SJ = Util.null2String(rs.getString("sj")); +// level.put("employeeNum", PayUtil.splitBmfzrThenJoin(fycdbmfzr, rc)); + level.put("deptNum", fysjcdbm); + level.put("bgitem", PayUtil.superBudgetSubject(yskm)); //上级科目编码 + level.put("bgElement", "0101"); // 费用类型编码(默认传0101) + level.put("billEntryID", UUID.randomUUID().toString() + "#" + i); + level.put("itemEntryNum", yskm); + level.put("amount", JSHJJE); + level.put("notaxAmount", BHSJE); // 不含价税金额 + level.put("taxAmount", SJ); //税金 + //科目对应金额 + levelList.add(level); + i++; + } + //外币 + String wbYskmTable = tableName + "_dt9"; + String wbYskmTableFieldParam = budgetDao.bxWBYskmTableFieldParam(wbYskmTable, mainId); + rs.executeQuery(wbYskmTableFieldParam); + while (rs.next()) { + JSONObject level = new JSONObject(); +// String fycdbmfzr = Util.null2String(rs.getString("fycdbmfzr")); //费用承担部门负责人 + String fysjcdbm = Util.null2String(rs.getString("fysjcdbm")); //费用承担部门 + String yskm = Util.null2String(rs.getString("yskm")); //预算科目 + String rmbje = Util.null2String(rs.getString("rmbje")); +// String BHSJE = Util.null2String(rs.getString("bhsje")); +// String SJ = Util.null2String(rs.getString("sj")); +// level.put("employeeNum", PayUtil.splitBmfzrThenJoin(fycdbmfzr, rc)); + level.put("deptNum", fysjcdbm); + level.put("bgitem", PayUtil.superBudgetSubject(yskm)); //上级科目编码 + level.put("bgElement", "0101"); // 费用类型编码(默认传0101) + level.put("billEntryID", UUID.randomUUID().toString() + "#" + i); + level.put("itemEntryNum", yskm); + level.put("amount", rmbje); + level.put("notaxAmount", rmbje); // 不含价税金额 + level.put("taxAmount", 0); //税金 + //科目对应金额 + levelList.add(level); + i++; + } + + if (i == 1) { + //没有明细 + log.info("预算科目明细为空"); + return "没有分摊的预算科目, 流程禁止提交"; + } + params.put("list", levelList); + Map dataMap = new HashMap<>(); + dataMap.put("data", params); + log.info(">>预算接口调用参数 params : @" + params + "@"); + String resp = htUtil.budgetCommit(dataMap); + log.info(">>预算接口调用返回 resp : @" + resp + "@"); + if (!"F1001".equals(resp)) { + log.info("预算接口执行失败!返回值: " + resp); + return "预算接口执行失败!返回值: " + resp; + } else { + boolean isUpdate = doBudgetMiddleTable(lcbh, billStatus,null, Arrays.asList(yskmTable, wbYskmTable), tableName); + if (isUpdate) { + return "success"; + } else { + return "节点后附加操作更新预算中间表失败!"; + } + } + } catch (Exception e) { + log.info("预算发生异常: " + e); + throw new Exception(e); + } + } + + @Override + public boolean doBudgetMiddleTable(String requestMark, String billStatus,String fbizdate, List budgetKmTable, String mainTable) { + log.info("报销流程,预算中间表更新\n @requestMark=" + requestMark + ",billStatus=" + billStatus + + ",budgetKmTable=" + JSONObject.toJSONString(budgetKmTable) + "@"); + if (StringUtils.isBlank(requestMark) || StringUtils.isBlank(billStatus) || CollectionUtils.isEmpty(budgetKmTable)) { + log.info("更新失败,原因:流程编号或单据状态为空"); + return false; + } + try { + //预算中间表外部数据源 + String budgetTableName = pp.getPropName("BudgetTableName"); + String nameIsExist = budgetDao.fNameIsExist(budgetTableName, requestMark); + log.info("预算数据是否存在sql @" + nameIsExist + "@"); + RecordSetDataSource rsd = new RecordSetDataSource("BudgetRecords"); + rsd.execute(nameIsExist); + if (rsd.next()) { + String deleteAll = String.format("delete from %s where FNAME='%s'", + budgetTableName, requestMark); + rsd.executeUpdateWithDatasource(deleteAll, "BudgetRecords"); + insertBudgetMiddleTable(requestMark, billStatus, fbizdate, budgetKmTable, mainTable, rsd); +// updateBudgetMiddleTable(requestMark, billStatus, budgetKmTable, mainTable, rsd); + } else { + insertBudgetMiddleTable(requestMark, billStatus,fbizdate, budgetKmTable, mainTable, rsd); + } + return true; + } catch (Exception e) { + log.info("更新失败,原因: catch exception: " + e); + return false; + } + } + + @Override + public boolean dobugetModeUpdateYs(String requestId, String tableName) { + return false; + } + + @Override + public boolean insertBudgetMiddleTable(String requestMark, String billStatus,String fbizDate, List budgetKmTable, String mainTable, RecordSetDataSource rsd) throws Exception { + log.info("预算信息不存在,执行更新方法 insertBudgetMiddleTable\n @requestMark=" + requestMark + ",billStatus=" + billStatus + "@"); + List mainInfo = null; + List> budgetDtList = new ArrayList<>(); + for(String buggetKmTable : budgetKmTable){ + Map budgetBody = getBudgetBody(requestMark, mainTable, buggetKmTable); + mainInfo = (List) budgetBody.get("main"); + List> dtInfo = (List>)budgetBody.get("dt"); + budgetDtList.addAll(dtInfo); + } + //主表数据 + if (budgetDtList.size() == 0) { + log.info("插入预算表中止,因为科目信息为空"); + return false; + } + DateTimeFormatter dfOnlyYear = DateTimeFormatter.ofPattern("yyyy"); //年 + DateTimeFormatter dfDateTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); //当前操作时间 + try { + for (List singleValue : budgetDtList) { + List insertValues = new ArrayList<>(); + insertValues.add(billStatus); + insertValues.addAll(mainInfo); + insertValues.add(dfOnlyYear.format(LocalDateTime.now())); + if(StringUtils.isNotEmpty(fbizDate)){ + insertValues.add(fbizDate); + } else { + insertValues.add(dfDateTime.format(LocalDateTime.now())); + } + insertValues.addAll(singleValue); + String budgetTableName = new PropBean().getPropName("BudgetTableName"); +// String budgetTableName = "T_BUD_BUDGETRECORDS"; + String insert = budgetDao.insertMiddleTable(budgetTableName); + RecordSet recordSet = new RecordSet(); + recordSet.executeUpdateWithDatasource(insert, "BudgetRecords", insertValues); + } + return true; + } catch (Exception e) { + log.info("insertBudgetMiddleTable异常, [" + e + "]"); + return false; + } + } + + @Override + public boolean updateBudgetMiddleTable(String requestMark, String billStatus, List budgetKmTable, String mainTable, RecordSetDataSource rsd) throws Exception { + log.info("预算信息已存在,执行更新方法 updateBudgetMiddleTable \n @requestMark=" + requestMark + ",billStatus=" + billStatus + "@"); + List mainInfo = null; + List> budgetDtList = new ArrayList<>(); + for(String buggetKmTable : budgetKmTable){ + Map budgetBody = getBudgetBody(requestMark, mainTable, buggetKmTable); + mainInfo = (List) budgetBody.get("main"); + List> dtInfo = (List>)budgetBody.get("dt"); + budgetDtList.addAll(dtInfo); + } +// Map budgetBody = getBudgetBody(requestMark, mainTable, budgetKmTable); +// List mainInfo = (List) budgetBody.get("main"); //主表数据 +// List> dtInfo = (List>) budgetBody.get("dt"); //预算数据 + if (budgetDtList.size() == 0) { + log.info("插入预算表中止,因为科目信息为空"); + return false; + } + DateTimeFormatter dfOnlyYear = DateTimeFormatter.ofPattern("yyyy"); //年 + DateTimeFormatter dfDateTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); //当前操作时间 + RecordSet rs = new RecordSet(); + try { + for (List singleValue : budgetDtList) { + List insertValues = new ArrayList<>(); + insertValues.add(billStatus); +// insertValues.add("0"); + insertValues.add(dfOnlyYear.format(LocalDateTime.now())); + insertValues.add(dfDateTime.format(LocalDateTime.now())); + insertValues.addAll(singleValue.subList(2,8)); + insertValues.add(singleValue.get(0)); + insertValues.add(mainInfo.get(0)); + String budgetTableName = new PropBean().getPropName("BudgetTableName"); +// String budgetTableName = "T_BUD_BUDGETRECORDS"; + String update = budgetDao.updateMiddleTable(budgetTableName); + RecordSet recordSet = new RecordSet(); + recordSet.executeUpdateWithDatasource(update, "BudgetRecords", insertValues); + } + return true; + } catch (Exception e) { + log.info("insertBudgetMiddleTable异常, [" + e + "]"); + return false; + } + } + + + /** + * 获取插入表中的数据 + * + * @param requestMark 流程编号 + * @return map + */ + private Map getBudgetBody(String requestMark, String main, String budgetKmTable) throws Exception { + Map res = new HashMap<>(); + log.info("付款流程表名: @" + main + "@"); + log.info("付款预算表名: @" + budgetKmTable + "@"); + RecordSet rs = new RecordSet(); + RecordSet rs1 = new RecordSet(); + DepartmentComInfo departmentComInfo = new DepartmentComInfo(); + String mainInfo = budgetDao.mainInfo(main, requestMark); + rs.executeQuery(mainInfo); + List mainValues = new ArrayList<>(); + String mainId = ""; //主副表关联id + if (rs.next()) { + mainValues.add(requestMark); + mainValues.add(Util.null2String(rs.getString("REQUESTNAME"))); //流程编码 + mainValues.add(Util.null2String(rs.getString("LASTNAME"))); //拟稿人名称 +// mainValues.add(Util.null2String(rs.getString("DEPARTMENTCODE"))); //华泰部门code + mainId = Util.null2String(rs.getString("ID")); + } + log.info("主表数据: @" + mainValues + "@"); + res.put("main", mainValues); + String budgetKmTableInfo = budgetDao.budgetKmTableInfo(budgetKmTable, mainId, false); + rs.executeQuery(budgetKmTableInfo); + List> allDtValues = new ArrayList<>(); //所有明细科目数据 add dtValues 单行明细科目数据 + while (rs.next()) { + List dtValues = new ArrayList<>(); //单行明细科目数据 + String yskm = Util.null2String(rs.getString("YSKM")); //科目 + String FYSJCDBM = Util.null2String(rs.getString("FYSJCDBM")); + dtValues.add(yskm); //二级预算科目 + dtValues.add(PayUtil.superBudgetSubject(yskm)); //一级预算科目 + if (budgetKmTable.toLowerCase().contains("dt8")) { + String JSHJJE = Util.null2String(rs.getString("JSHJJE")); + String BHSJE = Util.null2String(rs.getString("BHSJE")); + String SJ = Util.null2String(rs.getString("SJ")); + String CYS = Util.null2String(rs.getString("CYS")); + String PROJECTCODE = ""; + String XMMC = ""; + if ("".equals(JSHJJE)) { + dtValues.add(0.00); // 价税合计金额 + } else { + dtValues.add(Double.parseDouble(JSHJJE)); // 价税合计金额 + } + if ("".equals(BHSJE)) { + dtValues.add(0.00); // 未税金额 + } else { + dtValues.add(Double.parseDouble(BHSJE)); // 未税金额 + } + + if ("".equals(SJ)) { + dtValues.add(0.00); //税金 + } else { + dtValues.add(Double.parseDouble(SJ)); //税金 + } + dtValues.add(0.00); // 实际报销金额 + dtValues.add(0.00); // 差旅标准金额 + dtValues.add(PayUtil.overWeight(CYS)); // 是否超标 + String isItPay = "否"; + dtValues.add(isItPay); + dtValues.add(PROJECTCODE); // it项目编码 + dtValues.add(XMMC); // it项目名称 + } else { + String JSHJJE = Util.null2String(rs.getString("rmbje")); // 人民币金额 + String PROJECTCODE = ""; + String XMMC = ""; + if ("".equals(JSHJJE)) { + dtValues.add(0.00); // 价税合计金额 + dtValues.add(0.00); // 未税金额 + } else { + dtValues.add(Double.parseDouble(JSHJJE)); // 价税合计金额 + dtValues.add(Double.parseDouble(JSHJJE)); // 未税金额 + } + String CYS = Util.null2String(rs.getString("CYS")); + + dtValues.add(0.00); //税金 + dtValues.add(0.00); // 实际报销金额 + dtValues.add(0.00); // 差旅标准金额 + dtValues.add(PayUtil.overWeight(CYS)); // 是否超标 + dtValues.add("否"); + dtValues.add(PROJECTCODE); // it项目编码 + dtValues.add(XMMC); // it项目名称 + } + dtValues.add(departmentComInfo.getDepartmentCode(FYSJCDBM)); // 费用承担部门 + System.out.println("dtValues = " + dtValues); + allDtValues.add(dtValues); + } + log.info("预算表数据" + budgetKmTable + " @" + allDtValues + "@"); + res.put("dt", allDtValues); + return res; + } +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/ClBxBudgetServiceImpl.java b/src/main/java/com/engine/htsc/payment/service/impl/ClBxBudgetServiceImpl.java new file mode 100644 index 0000000..379be78 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/ClBxBudgetServiceImpl.java @@ -0,0 +1,385 @@ +package com.engine.htsc.payment.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.engine.core.impl.Service; +import com.engine.htsc.payment.dao.BudgetDao; +import com.engine.htsc.payment.service.BudgetService; +import com.engine.htsc.payment.service.BxBudgetService; +import com.engine.htsc.payment.service.ClBxBudgetService; +import com.engine.htsc.payment.util.PayUtil; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.conn.RecordSet; +import weaver.conn.RecordSetDataSource; +import weaver.general.Util; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.interfaces.htsc.cus.HTUtil; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; + +public class ClBxBudgetServiceImpl extends Service implements ClBxBudgetService { + private final Log log = LogFactory.getLog(PaymentServiceImpl.class); + private final BudgetDao budgetDao = new BudgetDao(); + private final PropBean pp = new PropBean(); + + private String ZSYSKM = "8601050303"; + private String YSYSKM = "8601050301"; + private String QTYSKM = "8601050302"; + + @Override + public String doBudgetAccount(String requestId, String tableName, String billStatus) throws Exception { + log.info("====差旅报销流程预算开始"); + log.info("====差旅报销流程预算流程id@" + requestId + "@"); + log.info("====差旅报销流程表名@" + tableName + "@"); + JSONObject params = new JSONObject(); + BudgetDao budgetDao = new BudgetDao(); + RecordSet rs = new RecordSet(); + ResourceComInfo rc = new ResourceComInfo(); + HTUtil htUtil = new HTUtil(); + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + try { + + String budgetInvokeParam = budgetDao.mainBXFieldParam(tableName, requestId); + rs.executeQuery(budgetInvokeParam); +// String bz = "0"; //对应fkxx字段 + String lcbh = ""; + String requestname = ""; + String ngr = ""; + String mainId = ""; + if (rs.next()) { + lcbh = Util.null2String(rs.getString("lcbh")); + ngr = Util.null2String(rs.getString("ngr")); + mainId = Util.null2String(rs.getString("id")); +// bz = Util.null2String(rs.getString("fkxx")); + requestname = Util.null2String(rs.getString("requestname")); + } +// String yskmTable = tableName + "_dt8"; //预算科目表,本币dt8,外币dt9 +// if ("1".equals(bz)) { +// yskmTable = tableName + "_dt9"; +// } + params.put("billnum", requestId); + params.put("billname", lcbh); + params.put("billstatus", billStatus); + params.put("billtitle", requestname); + params.put("personName", rc.getLastname(ngr)); + params.put("bizdate", df.format(LocalDateTime.now())); + log.info(">>主表字段获取: @" + params + "@"); +// rs.executeQuery(budgetDao.isItPay(tableName, lcbh)); +// boolean isItFlag = false; +// if (rs.next()) { +// if ("1".equals(Util.null2String(rs.getString("FKLX")))) { +// isItFlag = true; +// } +// } + JSONArray levelList = new JSONArray(); + String yskmTable = tableName + "_dt9"; + String clbxYskmTableFieldParam = budgetDao.clbxBBYskmTableFieldParam(yskmTable, mainId); + rs.executeQuery(clbxYskmTableFieldParam); + int i = 1; + while (rs.next()) { + +// String fycdbmfzr = Util.null2String(rs.getString("fycdbmfzr")); //费用承担部门负责人 + String fysjcdbm = Util.null2String(rs.getString("fycdbm")); //费用承担部门 + String JSHJJE = Util.null2String(rs.getString("jshjje")); + String BHSJE = Util.null2String(rs.getString("bhsje")); + String SJ = Util.null2String(rs.getString("sj")); + String qzzsbhsje = Util.null2String(rs.getString("qzzsbhsje")); + String zssj = Util.null2String(rs.getString("zssj")); + String lkysbhsje = Util.null2String(rs.getString("lkysbhsje")); + String lkyssj = Util.null2String(rs.getString("lkyssj")); + String qt = Util.null2String(rs.getString("qt")); +// level.put("employeeNum", PayUtil.splitBmfzrThenJoin(fycdbmfzr, rc)); + + + JSONObject levelZS = new JSONObject(); + levelZS.put("deptNum", fysjcdbm); + levelZS.put("bgitem", PayUtil.superBudgetSubject(ZSYSKM)); //上级科目编码 + levelZS.put("bgElement", "0101"); // 费用类型编码(默认传0101) + levelZS.put("billEntryID", UUID.randomUUID().toString() + "#" + i); + levelZS.put("itemEntryNum", ZSYSKM); + levelZS.put("amount", Float.parseFloat(qzzsbhsje) + Float.parseFloat(zssj)); + levelZS.put("notaxAmount", qzzsbhsje); // 不含价税金额 + levelZS.put("taxAmount", zssj); //税金 + //科目对应金额 + levelList.add(levelZS); + + JSONObject levelYS = new JSONObject(); + levelYS.put("deptNum", fysjcdbm); + levelYS.put("bgitem", PayUtil.superBudgetSubject(YSYSKM)); //上级科目编码 + levelYS.put("bgElement", "0101"); // 费用类型编码(默认传0101) + levelYS.put("billEntryID", UUID.randomUUID().toString() + "#" + i); + levelYS.put("itemEntryNum", YSYSKM); + levelYS.put("amount", Float.parseFloat(lkysbhsje) + Float.parseFloat(lkyssj)); + levelYS.put("notaxAmount", lkysbhsje); // 不含价税金额 + levelYS.put("taxAmount", lkyssj); //税金 + //科目对应金额 + levelList.add(levelYS); + i++; + + JSONObject levelQT = new JSONObject(); + levelQT.put("deptNum", fysjcdbm); + levelQT.put("bgitem", PayUtil.superBudgetSubject(QTYSKM)); //上级科目编码 + levelQT.put("bgElement", "0101"); // 费用类型编码(默认传0101) + levelQT.put("billEntryID", UUID.randomUUID().toString() + "#" + i); + levelQT.put("itemEntryNum", QTYSKM); + levelQT.put("amount", qt); + levelQT.put("notaxAmount", qt); // 不含价税金额 + levelQT.put("taxAmount", 0); //税金 + //科目对应金额 + levelList.add(levelQT); + i++; + } + + if (i == 1) { + //没有明细 + log.info("预算科目明细为空"); + return "没有分摊的预算科目, 流程禁止提交"; + } + params.put("list", levelList); + Map dataMap = new HashMap<>(); + dataMap.put("data", params); + log.info(">>预算接口调用参数 params : @" + params + "@"); + String resp = htUtil.budgetCommit(dataMap); + log.info(">>预算接口调用返回 resp : @" + resp + "@"); + if (!"F1001".equals(resp)) { + log.info("预算接口执行失败!返回值: " + resp); + return "预算接口执行失败!返回值: " + resp; + } else { + boolean isUpdate = doBudgetMiddleTable(lcbh, billStatus,null, Arrays.asList(yskmTable), tableName); + if (isUpdate) { + return "success"; + } else { + return "节点后附加操作更新预算中间表失败!"; + } + } + } catch (Exception e) { + log.info("预算发生异常: " + e); + throw new Exception(e); + } + } + + @Override + public boolean doBudgetMiddleTable(String requestMark, String billStatus,String fbizdate, List budgetKmTable, String mainTable) { + log.info("报销流程,预算中间表更新\n @requestMark=" + requestMark + ",billStatus=" + billStatus + + ",budgetKmTable=" + JSONObject.toJSONString(budgetKmTable) + "@"); + if (StringUtils.isBlank(requestMark) || StringUtils.isBlank(billStatus) || CollectionUtils.isEmpty(budgetKmTable)) { + log.info("更新失败,原因:流程编号或单据状态为空"); + return false; + } + try { + //预算中间表外部数据源 + String budgetTableName = pp.getPropName("BudgetTableName"); + String nameIsExist = budgetDao.fNameIsExist(budgetTableName, requestMark); + log.info("预算数据是否存在sql @" + nameIsExist + "@"); + RecordSetDataSource rsd = new RecordSetDataSource("BudgetRecords"); + rsd.execute(nameIsExist); + if (rsd.next()) { + String deleteAll = String.format("delete from %s where FNAME='%s'", + budgetTableName, requestMark); + rsd.executeUpdateWithDatasource(deleteAll, "BudgetRecords"); + insertBudgetMiddleTable(requestMark, billStatus,fbizdate, budgetKmTable, mainTable, rsd); +// updateBudgetMiddleTable(requestMark, billStatus, budgetKmTable, mainTable, rsd); + } else { + insertBudgetMiddleTable(requestMark, billStatus, fbizdate,budgetKmTable, mainTable, rsd); + } + return true; + } catch (Exception e) { + log.info("更新失败,原因: catch exception: " + e); + return false; + } + } + + @Override + public boolean dobugetModeUpdateYs(String requestId, String tableName) { + return false; + } + + @Override + public boolean insertBudgetMiddleTable(String requestMark, String billStatus,String fbizDate, List budgetKmTable, String mainTable, RecordSetDataSource rsd) throws Exception { + log.info("预算信息不存在,执行更新方法 insertBudgetMiddleTable\n @requestMark=" + requestMark + ",billStatus=" + billStatus + "@"); + List mainInfo = null; + List> budgetDtList = new ArrayList<>(); + for(String buggetKmTable : budgetKmTable){ + Map budgetBody = getBudgetBody(requestMark, mainTable, buggetKmTable); + mainInfo = (List) budgetBody.get("main"); + List> dtInfo = (List>)budgetBody.get("dt"); + budgetDtList.addAll(dtInfo); + } + //主表数据 + if (budgetDtList.size() == 0) { + log.info("插入预算表中止,因为科目信息为空"); + return false; + } + DateTimeFormatter dfOnlyYear = DateTimeFormatter.ofPattern("yyyy"); //年 + DateTimeFormatter dfDateTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); //当前操作时间 + try { + for (List singleValue : budgetDtList) { + List insertValues = new ArrayList<>(); + insertValues.add(billStatus); + insertValues.addAll(mainInfo); + insertValues.add(dfOnlyYear.format(LocalDateTime.now())); + if(StringUtils.isNotEmpty(fbizDate)){ + insertValues.add(fbizDate); + }else { + insertValues.add(dfDateTime.format(LocalDateTime.now())); + } + insertValues.addAll(singleValue); + String budgetTableName = new PropBean().getPropName("BudgetTableName"); +// String budgetTableName = "T_BUD_BUDGETRECORDS"; + String insert = budgetDao.insertMiddleTable(budgetTableName); + RecordSet recordSet = new RecordSet(); + recordSet.executeUpdateWithDatasource(insert, "BudgetRecords", insertValues); + } + return true; + } catch (Exception e) { + log.info("insertBudgetMiddleTable异常, [" + e + "]"); + return false; + } + } + + @Override + public boolean updateBudgetMiddleTable(String requestMark, String billStatus, List budgetKmTable, String mainTable, RecordSetDataSource rsd) throws Exception { + log.info("预算信息已存在,执行更新方法 updateBudgetMiddleTable \n @requestMark=" + requestMark + ",billStatus=" + billStatus + "@"); + List mainInfo = null; + List> budgetDtList = new ArrayList<>(); + for(String buggetKmTable : budgetKmTable){ + Map budgetBody = getBudgetBody(requestMark, mainTable, buggetKmTable); + mainInfo = (List) budgetBody.get("main"); + List> dtInfo = (List>)budgetBody.get("dt"); + budgetDtList.addAll(dtInfo); + } +// Map budgetBody = getBudgetBody(requestMark, mainTable, budgetKmTable); +// List mainInfo = (List) budgetBody.get("main"); //主表数据 +// List> dtInfo = (List>) budgetBody.get("dt"); //预算数据 + if (budgetDtList.size() == 0) { + log.info("插入预算表中止,因为科目信息为空"); + return false; + } + DateTimeFormatter dfOnlyYear = DateTimeFormatter.ofPattern("yyyy"); //年 + DateTimeFormatter dfDateTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); //当前操作时间 + RecordSet rs = new RecordSet(); + try { + for (List singleValue : budgetDtList) { + List insertValues = new ArrayList<>(); + insertValues.add(billStatus); +// insertValues.add("0"); + insertValues.add(dfOnlyYear.format(LocalDateTime.now())); + insertValues.add(dfDateTime.format(LocalDateTime.now())); + insertValues.addAll(singleValue.subList(2,8)); + insertValues.add(singleValue.get(0)); + insertValues.add(mainInfo.get(0)); + String budgetTableName = new PropBean().getPropName("BudgetTableName"); +// String budgetTableName = "T_BUD_BUDGETRECORDS"; + String update = budgetDao.updateMiddleTable(budgetTableName); + RecordSet recordSet = new RecordSet(); + recordSet.executeUpdateWithDatasource(update, "BudgetRecords", insertValues); + } + return true; + } catch (Exception e) { + log.info("insertBudgetMiddleTable异常, [" + e + "]"); + return false; + } + } + + + /** + * 获取插入表中的数据 + * + * @param requestMark 流程编号 + * @return map + */ + private Map getBudgetBody(String requestMark, String main, String budgetKmTable) throws Exception { + Map res = new HashMap<>(); + log.info("差旅报销流程表名: @" + main + "@"); + log.info("差旅报销预算表名: @" + budgetKmTable + "@"); + RecordSet rs = new RecordSet(); + RecordSet rs1 = new RecordSet(); + String mainInfo = budgetDao.mainInfo(main, requestMark); + rs.executeQuery(mainInfo); + List mainValues = new ArrayList<>(); + String mainId = ""; //主副表关联id + if (rs.next()) { + mainValues.add(requestMark); + mainValues.add(Util.null2String(rs.getString("REQUESTNAME"))); //流程编码 + mainValues.add(Util.null2String(rs.getString("LASTNAME"))); //拟稿人名称 +// mainValues.add(Util.null2String(rs.getString("DEPARTMENTCODE"))); //华泰部门code + mainId = Util.null2String(rs.getString("ID")); + } + log.info("主表数据: @" + mainValues + "@"); + res.put("main", mainValues); + String budgetKmTableInfo = budgetDao.clbxBBYskmTableFieldParam(budgetKmTable, mainId); + rs.executeQuery(budgetKmTableInfo); + List> allDtValues = new ArrayList<>(); //所有明细科目数据 add dtValues 单行明细科目数据 + while (rs.next()) { + + + // String fycdbmfzr = Util.null2String(rs.getString("fycdbmfzr")); //费用承担部门负责人 + String fysjcdbm = Util.null2String(rs.getString("fycdbm")); //费用承担部门 +// String JSHJJE = Util.null2String(rs.getString("jshjje")); +// String BHSJE = Util.null2String(rs.getString("bhsje")); +// String SJ = Util.null2String(rs.getString("sj")); + String qzzsbhsje = Util.null2String(rs.getString("qzzsbhsje")); + String zssj = Util.null2String(rs.getString("zssj")); + String lkysbhsje = Util.null2String(rs.getString("lkysbhsje")); + String lkyssj = Util.null2String(rs.getString("lkyssj")); + String qt = Util.null2String(rs.getString("qt")); +// level.put("employeeNum", PayUtil.splitBmfzrThenJoin(fycdbmfzr, rc)); + + + List zsDtValues = getDetailList(ZSYSKM, String.valueOf(Float.parseFloat(qzzsbhsje) + Float.parseFloat(zssj)), qzzsbhsje, zssj,fysjcdbm); + List ysDtValues = getDetailList(YSYSKM, String.valueOf(Float.parseFloat(qzzsbhsje) + Float.parseFloat(zssj)), lkysbhsje, lkyssj,fysjcdbm); + List qtDtValues = getDetailList(QTYSKM, qt, qt, "0",fysjcdbm); + allDtValues.add(zsDtValues); + allDtValues.add(ysDtValues); + allDtValues.add(qtDtValues); + } + + log.info("预算表数据" + budgetKmTable + " @" + allDtValues + "@"); + res.put("dt", allDtValues); + return res; + } + + + private List getDetailList(String yskm, String JSHJJE, String BHSJE, String SJ,String fysjcdbm) { + List dtValues = new ArrayList<>(); //单行明细科目数据 + DepartmentComInfo departmentComInfo = new DepartmentComInfo(); + dtValues.add(yskm); //二级预算科目 + dtValues.add(PayUtil.superBudgetSubject(yskm)); //一级预算科目 + String PROJECTCODE = ""; + String XMMC = ""; + if ("".equals(JSHJJE)) { + dtValues.add(0.00); // 价税合计金额 + } else { + dtValues.add(Double.parseDouble(JSHJJE)); // 价税合计金额 + } + if ("".equals(BHSJE)) { + dtValues.add(0.00); // 未税金额 + } else { + dtValues.add(Double.parseDouble(BHSJE)); // 未税金额 + } + + if ("".equals(SJ)) { + dtValues.add(0.00); //税金 + } else { + dtValues.add(Double.parseDouble(SJ)); //税金 + } + dtValues.add(0.00); // 实际报销金额 + dtValues.add(0.00); // 差旅标准金额 + dtValues.add(PayUtil.overWeight("0")); // 是否超标 + String isItPay = "否"; + dtValues.add(isItPay); + dtValues.add(PROJECTCODE); // it项目编码 + dtValues.add(XMMC); // it项目名称 + dtValues.add(departmentComInfo.getDepartmentCode(fysjcdbm)); // 费用承担部门 + System.out.println("dtValues = " + dtValues); + return dtValues; + } +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/HeadBxBudgetCommand.java b/src/main/java/com/engine/htsc/payment/service/impl/HeadBxBudgetCommand.java new file mode 100644 index 0000000..689c263 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/HeadBxBudgetCommand.java @@ -0,0 +1,150 @@ +package com.engine.htsc.payment.service.impl; + +import com.alibaba.fastjson.JSON; +import com.engine.htsc.payment.enums.BudgetWF; +import com.engine.htsc.payment.pojo.BxBudgetDTO; +import com.engine.htsc.payment.pojo.WbLog; +import com.engine.htsc.payment.service.BudgetCommand; +import com.engine.htsc.payment.service.BudgetService; +import com.engine.htsc.payment.service.BudgetStrategy; +import com.engine.htsc.payment.service.BxBudgetService; +import com.engine.htsc.payment.util.AssertUtil; +import com.engine.htsc.payment.util.BizUtils; +import com.engine.htsc.payment.util.BudgetStrategyFactory; +import com.engine.htsc.payment.util.IpUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.joda.time.DateTime; +import weaver.general.Util; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.interfaces.htsc.cus.HTUtil; + +import java.util.Arrays; +import java.util.Map; + +public class HeadBxBudgetCommand implements BudgetCommand { + + private final Log log = LogFactory.getLog(HeadBxBudgetCommand.class); + + private final BudgetStrategy bg = BudgetStrategyFactory.getBxBudgetStrategyForPayment( + BudgetWF.BXBUDGET.getCode()); + + BxBudgetService bxBudgetService = new BxBudgetServiceImpl(); + + @Override + public String submit(String requestNo, String billStatus) throws Exception { + assert bg != null; + BizUtils bizUtils = new BizUtils(); + BxBudgetDTO budgetDTO = bg.buildNewBudgetParamFromWorkflowDB(requestNo, billStatus); + String table = bizUtils.getTableNameByRequestId(requestNo); + String yskmTable = table + "_dt8"; + String wbYskmTable = table + "_dt9"; + Map stringObjectMap = bizUtils.convertDtoToMap(budgetDTO); + log.info("\n 执行报销预算 >>> 当前状态submit"); + log.info("\n 调用预算参数(状态:" + billStatus + ") >>> \n " + JSON.toJSONString(stringObjectMap)); + //记录日志信息 + WbLog wbLog = new WbLog(); + DateTime today = new DateTime(); + wbLog.setRequestNo(requestNo); + wbLog.setTime(today.toString("yyyy-MM-dd HH:mm:ss")); + wbLog.setUrl(String.format("%s/cwbase/JTGL/BudgetProcess.asmx?wsdl", + Util.null2String(new PropBean().getPropName("budgetIp")))); + wbLog.setMethod("weaver.interfaces.htsc.cus.HTUtil.budgetCommit"); + wbLog.setIp(IpUtils.getHostIp()); + try { + //调用接口,提交预算 + String resp = new HTUtil().budgetCommit(stringObjectMap); + log.info("\n 调用预算返回(状态:" + billStatus + ") >>> \n " + resp); + //更新预算记录表,记录入参 + bizUtils.refreshBudgetRecord(requestNo, billStatus, JSON.toJSONString(budgetDTO), "0"); + //更新中间表,应该不是通用的 +// boolean b = bizUtils.updateBudgetMidTable(requestNo, billStatus); + boolean isUpdate = bxBudgetService.doBudgetMiddleTable(budgetDTO.getBillName(), billStatus,null, Arrays.asList(yskmTable, wbYskmTable), table); + log.info("\n 调用预算更新中间表返回 >>> \n " + isUpdate); + //记录日志 + wbLog.setResponse(resp); + if ("F1001".equals(resp)) { + wbLog.setResult("预算成功"); + } else { + wbLog.setResult("预算失败,返回值:" + resp); + } + wbLog.setRequest(JSON.toJSONString(stringObjectMap)); + return resp; //F1001 + } catch (Exception e) { + //记录日志 + wbLog.setResponse(""); + wbLog.setResult("预算失败"); + wbLog.setRequest(JSON.toJSONString(stringObjectMap)); + throw new Exception("预算失败"); + } finally { + BizUtils.saveLog(wbLog); + } + } + + @Override + public String reSubmit(String requestNo) throws Exception { + String reject = reject(requestNo); + if ("F1001".equalsIgnoreCase(reject)) { + return submit(requestNo, "3"); //重新预占 + } else { + return reject; + } + } + + @Override + public String reject(String requestNo) throws Exception { + assert bg != null; + BizUtils bizUtils = new BizUtils(); + BxBudgetDTO lastBudgetDTO = bg.getLastBudgetParamFromModeDB(requestNo, "0"); + if (AssertUtil.isEmpty(lastBudgetDTO)) { + // 为不影响后面的逻辑,默认返回成功F1001 + log.info(String.format("UF_YSJLB无requestno=%s的预算数据", requestNo)); + return "F1001"; + } + + String table = bizUtils.getTableNameByRequestId(requestNo); + String yskmTable = table + "_dt8"; + String wbYskmTable = table + "_dt9"; + log.info("\n 从建模表中获取的参数@ \n" + JSON.toJSONString(lastBudgetDTO)); + lastBudgetDTO.setBillStatus("2"); //回退 + Map stringObjectMap = bizUtils.convertDtoToMap(lastBudgetDTO); + log.info("\n 执行总部通用报销预算 >>> 当前状态reject"); + log.info("\n 调用预算参数(回退) >>> \n " + JSON.toJSONString(stringObjectMap)); + //记录日志信息 + WbLog wbLog = new WbLog(); + DateTime today = new DateTime(); + wbLog.setRequestNo(requestNo); + wbLog.setTime(today.toString("yyyy-MM-dd HH:mm:ss")); + wbLog.setUrl(String.format("%s/cwbase/JTGL/BudgetProcess.asmx?wsdl", + Util.null2String(new PropBean().getPropName("budgetIp")))); + wbLog.setMethod("weaver.interfaces.htsc.cus.HTUtil.budgetCommit"); + wbLog.setIp(IpUtils.getHostIp()); + try { + String resp = new HTUtil().budgetCommit(stringObjectMap); + bizUtils.refreshBudgetRecord(requestNo, "2", JSON.toJSONString(lastBudgetDTO), "0"); + log.info("\n 调用预算返回(回退) >>> \n " + resp); + //更新中间表 不是通用表 + boolean isUpdate = bxBudgetService.doBudgetMiddleTable(lastBudgetDTO.getBillName(), "2", null,Arrays.asList(yskmTable, wbYskmTable), table); + log.info("\n 调用预算更新中间表返回(回退) >>> \n " + isUpdate); + //记录日志 + wbLog.setResponse(resp); + wbLog.setResult("预算成功"); + wbLog.setRequest(JSON.toJSONString(stringObjectMap)); + return resp; + } catch (Exception e) { + //记录日志 + wbLog.setResponse(""); + wbLog.setResult("预算失败"); + wbLog.setRequest(JSON.toJSONString(stringObjectMap)); + throw new Exception("预算失败"); + } finally { + BizUtils.saveLog(wbLog); + } + + } + + @Override + public String finish(String requestNo) throws Exception { + return submit(requestNo, "1"); + } +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/HeadBxBudgetStrategy.java b/src/main/java/com/engine/htsc/payment/service/impl/HeadBxBudgetStrategy.java new file mode 100644 index 0000000..25f0806 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/HeadBxBudgetStrategy.java @@ -0,0 +1,155 @@ +package com.engine.htsc.payment.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.engine.htsc.payment.dao.BudgetDao; +import com.engine.htsc.payment.pojo.BudgetList; +import com.engine.htsc.payment.pojo.BxBudgetDTO; +import com.engine.htsc.payment.service.BudgetStrategy; +import com.engine.htsc.payment.util.BizUtils; +import com.engine.htsc.payment.util.PayUtil; +import org.apache.commons.lang.math.NumberUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.resource.ResourceComInfo; + +import java.text.DecimalFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.UUID; + +public class HeadBxBudgetStrategy implements BudgetStrategy { + private final Log log = LogFactory.getLog(HeadBxBudgetStrategy.class); + + @Override + public BxBudgetDTO buildNewBudgetParamFromWorkflowDB(String requestNo, String billStatus) throws Exception { + log.info("====报销流程预算开始"); + log.info("====报销流程预算流程id@" + requestNo + "@"); + RecordSet rs = new RecordSet(); + BizUtils bizUtils = new BizUtils(); + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + ResourceComInfo resourceComInfo = new ResourceComInfo(); + DepartmentComInfo departmentComInfo = new DepartmentComInfo(); + String table = bizUtils.getTableNameByRequestId(requestNo); + log.info("====报销流程表名@" + table + "@"); + BudgetDao budgetDao = new BudgetDao(); + String sql = budgetDao.mainBXFieldParam(table, requestNo); + log.info("====查询报销SQL" + sql); + rs.executeQuery(sql); + BxBudgetDTO budgetDTO = new BxBudgetDTO(); + String lcbh = ""; + String requestname = ""; + String ngr = ""; + String mainId = ""; + if (rs.next()) { + lcbh = Util.null2String(rs.getString("lcbh")); + ngr = Util.null2String(rs.getString("ngr")); + mainId = Util.null2String(rs.getString("id")); + requestname = Util.null2String(rs.getString("requestname")); + } + budgetDTO.setBillNum(requestNo); + budgetDTO.setBillName(lcbh); + budgetDTO.setWorkFlowNum(lcbh); + budgetDTO.setBillStatus(billStatus); + budgetDTO.setBillTitle(requestname); + budgetDTO.setBizDate(df.format(LocalDateTime.now())); + budgetDTO.setPesonName(resourceComInfo.getLastname(ngr)); + //获取明细表 dt8和 + String yskmTable = table + "_dt8"; + String bbYskmTableFieldParam = budgetDao.bxBBYskmTableFieldParam(yskmTable, mainId); + log.info("====查询报销明细表SQL" + bbYskmTableFieldParam); + rs.executeQuery(bbYskmTableFieldParam); + //uuid现在放在循环外 + String uuid = UUID.randomUUID().toString(); + int i = 1; + ArrayList list = new ArrayList<>(); + while (rs.next()) { + BudgetList budgetList = new BudgetList(); + String fysjcdbm = Util.null2String(rs.getString("fysjcdbm")); //费用承担部门 + String yskm = Util.null2String(rs.getString("yskm")); //预算科目 + String yskmid = Util.null2String(rs.getString("yskmid")); //预算科目 + String[] yskmidArray = yskmid.split("_"); + if (null==yskm||"".equals(yskm)){ + yskm = yskmidArray[1]; + } + String JSHJJE = Util.null2String(rs.getString("jshjje")); + String BHSJE = Util.null2String(rs.getString("bhsje")); + String SJ = Util.null2String(rs.getString("sj")); + budgetList.setDeptNum(departmentComInfo.getDepartmentCode(fysjcdbm)); //费用承担部门编号 + budgetList.setBgItem(PayUtil.superBudgetSubject(yskm)); //项目编码 + budgetList.setItemEntryNum(yskm); //明细项目编码 + budgetList.setBgElement("0101"); //费用类型编码 + budgetList.setBillEntryID(uuid + "#" + i); + budgetList.setAmount(JSHJJE);//金额 + budgetList.setNoTaxAmount(BHSJE); // 不含价税金额 + budgetList.setTaxAmount(SJ); //税金 + i++; + list.add(budgetList); + } + log.info("====查询报销SQL" + JSONObject.toJSONString(list)); + //外币 + String wbYskmTable = table + "_dt9"; + String wbYskmTableFieldParam = budgetDao.bxWBYskmTableFieldParam(wbYskmTable, mainId); + log.info("====查询报销明细表SQL" + wbYskmTableFieldParam); + rs.executeQuery(wbYskmTableFieldParam); + while (rs.next()) { + BudgetList budgetList = new BudgetList(); + String fysjcdbm = Util.null2String(rs.getString("fysjcdbm")); //费用承担部门 + String yskm = Util.null2String(rs.getString("yskm")); //预算科目 + String yskmid = Util.null2String(rs.getString("yskmid")); //预算科目 + String[] yskmidArray = yskmid.split("_"); + if (null==yskm||"".equals(yskm)){ + yskm = yskmidArray[1]; + } + String rmbje = Util.null2String(rs.getString("rmbje")); + budgetList.setDeptNum(departmentComInfo.getDepartmentCode(fysjcdbm)); //费用承担部门编号 + budgetList.setBgItem(PayUtil.superBudgetSubject(yskm)); //项目编码 + budgetList.setItemEntryNum(yskm); //明细项目编码 + budgetList.setBgElement("0101"); //费用类型编码 + budgetList.setBillEntryID(uuid + "#" + i); + budgetList.setAmount(rmbje);//金额 + budgetList.setNoTaxAmount(rmbje); // 不含价税金额 + budgetList.setTaxAmount("0"); //税金 + i++; + list.add(budgetList); + } + budgetDTO.setList(list); //分录汇总 + return budgetDTO; + } + + @Override + public String queryBudgetSqlFromDetailTable(String bz, String table, String detailId) { + String sql = ""; + if ("0".equals(bz)) { + //dt8 + sql = "select FYCDBMFZR,FYSJCDBM,YSKM,BHSJE,SJ,JSHJJE from " + table + "_DT8 where MAINID=" + detailId; + } else if ("1".equals(bz)) { + //dt9 + sql = "select FYCDBMFZR,FYSJCDBM,YSKM,RMBJE from " + table + "_DT9 where MAINID=" + detailId; + } + return sql; + } + + @Override + public BxBudgetDTO getLastBudgetParamFromModeDB(String requestNo, String itFlag) { + RecordSet rs = new RecordSet(); + rs.executeQuery("select YSQQCS from UF_YSJLB where ITFLAG=? and LCID=?", itFlag, requestNo); + String lastOperateBudgetParam = ""; + if (rs.next()) { + lastOperateBudgetParam = Util.null2String(rs.getString("YSQQCS")); + } + //decode + BxBudgetDTO budgetDTO = null; + try { + budgetDTO = JSONObject.parseObject(lastOperateBudgetParam, BxBudgetDTO.class); + } catch (Exception e) { + new BizUtils().log(e.getMessage()); + } + return budgetDTO; + } + +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/HeadCgscPaymentBudgetStrategy.java b/src/main/java/com/engine/htsc/payment/service/impl/HeadCgscPaymentBudgetStrategy.java new file mode 100644 index 0000000..d305300 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/HeadCgscPaymentBudgetStrategy.java @@ -0,0 +1,116 @@ +package com.engine.htsc.payment.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.engine.htsc.payment.pojo.BudgetDTO; +import com.engine.htsc.payment.pojo.BudgetList; +import com.engine.htsc.payment.service.BudgetStrategy; +import com.engine.htsc.payment.util.BizUtils; +import com.engine.htsc.payment.util.PayUtil; +import org.apache.commons.lang.math.NumberUtils; +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.resource.ResourceComInfo; + +import java.text.DecimalFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.UUID; + +/** + * 总部通用付款预算参数构建 + */ +public class HeadCgscPaymentBudgetStrategy implements BudgetStrategy { + + + @Override + public BudgetDTO buildNewBudgetParamFromWorkflowDB(String requestNo, String billStatus) throws Exception { + RecordSet rs = new RecordSet(); + BizUtils bizUtils = new BizUtils(); + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + ResourceComInfo resourceComInfo = new ResourceComInfo(); + DepartmentComInfo departmentComInfo = new DepartmentComInfo(); + String table = bizUtils.getTableNameByRequestId(requestNo); + //预算基本数据信息 + String sql = "select t1.ID,t1.REQUESTID,t1.LCBH,t1.NGR,t2.REQUESTNAME from " + table + " t1\n" + + "left join WORKFLOW_REQUESTBASE t2\n" + + "on t1.REQUESTID=t2.REQUESTID\n" + + "where t1.REQUESTID=?"; + rs.executeQuery(sql, requestNo); + BudgetDTO budgetDTO = new BudgetDTO(); +// String bz = "0"; // 0 本币 + String detailId = ""; + if (rs.next()) { + budgetDTO.setBillNum(rs.getString("REQUESTID")); + budgetDTO.setBizDate(df.format(LocalDateTime.now())); + budgetDTO.setBillStatus(billStatus); + budgetDTO.setBillName(rs.getString("LCBH")); + budgetDTO.setBillTitle(rs.getString("REQUESTNAME")); + budgetDTO.setPesonName(resourceComInfo.getLastname(rs.getString("NGR"))); + detailId = rs.getString("ID"); + } + + String queryBudgetList = queryBudgetSqlFromDetailTable("0", table, detailId); + rs.writeLog("requestId:"+requestNo+" 查询付款明细sql:"+queryBudgetList); + String uuid = UUID.randomUUID().toString(); + int i = 1; + ArrayList list = new ArrayList<>(); + rs.executeQuery(queryBudgetList); + while (rs.next()) { + BudgetList budgetList = new BudgetList(); + String fysjcdbm = rs.getString("FYSJCDBM"); + String yskm = rs.getString("YSKM"); + String superBudgetCode = PayUtil.getSuperBudgetCode(yskm); + budgetList.setDeptNum(departmentComInfo.getDepartmentCode(fysjcdbm)); + budgetList.setBgItem(superBudgetCode); + budgetList.setBgITElement(superBudgetCode); + budgetList.setBgElement("0101"); //费用类型编码 + budgetList.setBillEntryID(uuid + "#" + i); + budgetList.setItemEntryNum(yskm); + //明细8 + String jshjje = Util.null2String(rs.getString("JSHJJE")); + String bhsje = Util.null2String(rs.getString("BHSJE")); + String sj = Util.null2String(rs.getString("SJ")); + jshjje = new DecimalFormat("0.00").format(NumberUtils.toDouble(jshjje)); + budgetList.setAmount(jshjje); + budgetList.setNoTaxAmount(bhsje); + budgetList.setTaxAmount(sj); + if (StringUtils.isNotBlank(jshjje) && !"0".equals(jshjje) && !"0.00".equals(jshjje) && ( + StringUtils.isBlank(bhsje) || "0".equals(bhsje) || "0.00".equals(bhsje))) { + // 不含价税金额 + budgetList.setNoTaxAmount(jshjje); + } + i++; + list.add(budgetList); + } + budgetDTO.setList(list); //分录汇总 + return budgetDTO; + } + + @Override + public String queryBudgetSqlFromDetailTable(String bz, String table, String detailId) { + String sql = ""; + sql = "select FYCDBMFZR,FYSJCDBM,YSKM,BHSJE,SJ,JSHJJE from " + table + "_DT8 where MAINID=" + detailId; + return sql; + } + + @Override + public BudgetDTO getLastBudgetParamFromModeDB(String requestNo, String itFlag) { + RecordSet rs = new RecordSet(); + rs.executeQuery("select YSQQCS from UF_YSJLB where ITFLAG=? and LCID=?", itFlag, requestNo); + String lastOperateBudgetParam = ""; + if (rs.next()) { + lastOperateBudgetParam = Util.null2String(rs.getString("YSQQCS")); + } + //decode + BudgetDTO budgetDTO = null; + try { + budgetDTO = JSONObject.parseObject(lastOperateBudgetParam, BudgetDTO.class); + } catch (Exception e) { + new BizUtils().log(e.getMessage()); + } + return budgetDTO; + } +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/HeadClBxBudgetCommand.java b/src/main/java/com/engine/htsc/payment/service/impl/HeadClBxBudgetCommand.java new file mode 100644 index 0000000..93d7800 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/HeadClBxBudgetCommand.java @@ -0,0 +1,148 @@ +package com.engine.htsc.payment.service.impl; + +import com.alibaba.fastjson.JSON; +import com.engine.htsc.payment.enums.BudgetWF; +import com.engine.htsc.payment.pojo.BxBudgetDTO; +import com.engine.htsc.payment.pojo.WbLog; +import com.engine.htsc.payment.service.BudgetCommand; +import com.engine.htsc.payment.service.BudgetStrategy; +import com.engine.htsc.payment.service.ClBxBudgetService; +import com.engine.htsc.payment.util.AssertUtil; +import com.engine.htsc.payment.util.BizUtils; +import com.engine.htsc.payment.util.BudgetStrategyFactory; +import com.engine.htsc.payment.util.IpUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.joda.time.DateTime; +import weaver.general.Util; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.interfaces.htsc.cus.HTUtil; + +import java.util.Arrays; +import java.util.Map; + +public class HeadClBxBudgetCommand implements BudgetCommand { + private final Log log = LogFactory.getLog(HeadClBxBudgetCommand.class); + + private final BudgetStrategy bg = BudgetStrategyFactory.getClBxBudgetStrategyForPayment( + BudgetWF.CLBXBUDGET.getCode()); + + ClBxBudgetService clBxBudgetService = new ClBxBudgetServiceImpl(); + + @Override + public String submit(String requestNo, String billStatus) throws Exception { + assert bg != null; + BizUtils bizUtils = new BizUtils(); + BxBudgetDTO budgetDTO = bg.buildNewBudgetParamFromWorkflowDB(requestNo, billStatus); + Map stringObjectMap = bizUtils.convertDtoToMap(budgetDTO); + String table = bizUtils.getTableNameByRequestId(requestNo); +// String yskmTable = table + "_dt8"; + String wbYskmTable = table + "_dt9"; + log.info("\n 执行总部差旅报销预算 >>> 当前状态submit"); + log.info("\n 调用预算参数(状态:" + billStatus + ") >>> \n " + JSON.toJSONString(stringObjectMap)); + //记录日志信息 + WbLog wbLog = new WbLog(); + DateTime today = new DateTime(); + wbLog.setRequestNo(requestNo); + wbLog.setTime(today.toString("yyyy-MM-dd HH:mm:ss")); + wbLog.setUrl(String.format("%s/cwbase/JTGL/BudgetProcess.asmx?wsdl", + Util.null2String(new PropBean().getPropName("budgetIp")))); + wbLog.setMethod("weaver.interfaces.htsc.cus.HTUtil.budgetCommit"); + wbLog.setIp(IpUtils.getHostIp()); + try { + String resp = new HTUtil().budgetCommit(stringObjectMap); + log.info("\n 调用预算返回(状态:" + billStatus + ") >>> \n " + resp); + //更新预算记录表,记录入参 + bizUtils.refreshBudgetRecord(requestNo, billStatus, JSON.toJSONString(budgetDTO), "0"); + +// boolean b = bizUtils.updateBudgetMidTable(requestNo, billStatus); + boolean isUpdate = clBxBudgetService.doBudgetMiddleTable(budgetDTO.getBillName(), billStatus,null, Arrays.asList(wbYskmTable), table); + log.info("\n 调用预算更新中间表返回 >>> \n " + isUpdate); + //记录日志 + wbLog.setResponse(resp); + if ("F1001".equals(resp)) { + wbLog.setResult("预算成功"); + } else { + wbLog.setResult("预算失败,返回值:" + resp); + } + wbLog.setRequest(JSON.toJSONString(stringObjectMap)); + return resp; //F1001 + } catch (Exception e) { + //记录日志 + wbLog.setResponse(""); + wbLog.setResult("预算失败"); + wbLog.setRequest(JSON.toJSONString(stringObjectMap)); + throw new Exception("预算失败"); + } finally { + BizUtils.saveLog(wbLog); + } + } + + @Override + public String reSubmit(String requestNo) throws Exception { + String reject = reject(requestNo); + if ("F1001".equalsIgnoreCase(reject)) { + return submit(requestNo, "3"); //重新预占 + } else { + return reject; + } + } + + @Override + public String reject(String requestNo) throws Exception { + assert bg != null; + BizUtils bizUtils = new BizUtils(); + BxBudgetDTO lastBudgetDTO = bg.getLastBudgetParamFromModeDB(requestNo, "0"); + if (AssertUtil.isEmpty(lastBudgetDTO)) { + // 为不影响后面的逻辑,默认返回成功F1001 + log.info(String.format("UF_YSJLB无requestno=%s的预算数据", requestNo)); + return "F1001"; + } + String table = bizUtils.getTableNameByRequestId(requestNo); + //总部差旅报销,只用到明细表9 +// String yskmTable = table + "_dt8"; + String wbYskmTable = table + "_dt9"; + log.info("\n 从建模表中获取的参数@ \n" + JSON.toJSONString(lastBudgetDTO)); + lastBudgetDTO.setBillStatus("2"); //回退 + Map stringObjectMap = bizUtils.convertDtoToMap(lastBudgetDTO); + log.info("\n 执行总部通用付款预算 >>> 当前状态reject"); + log.info("\n 调用预算参数(回退) >>> \n " + JSON.toJSONString(stringObjectMap)); + //记录日志信息 + WbLog wbLog = new WbLog(); + DateTime today = new DateTime(); + wbLog.setRequestNo(requestNo); + wbLog.setTime(today.toString("yyyy-MM-dd HH:mm:ss")); + wbLog.setUrl(String.format("%s/cwbase/JTGL/BudgetProcess.asmx?wsdl", + Util.null2String(new PropBean().getPropName("budgetIp")))); + wbLog.setMethod("weaver.interfaces.htsc.cus.HTUtil.budgetCommit"); + wbLog.setIp(IpUtils.getHostIp()); + try { + String resp = new HTUtil().budgetCommit(stringObjectMap); + bizUtils.refreshBudgetRecord(requestNo, "2", JSON.toJSONString(lastBudgetDTO), "0"); + log.info("\n 调用预算返回(回退) >>> \n " + resp); + //更新中间表 不是通用表 + boolean isUpdate = clBxBudgetService.doBudgetMiddleTable(lastBudgetDTO.getBillName(), "2",null, Arrays.asList(wbYskmTable), table); +// boolean b = bizUtils.updateBudgetMidTable(requestNo, "2"); + log.info("\n 调用预算更新中间表返回(回退) >>> \n " + isUpdate); + //记录日志 + wbLog.setResponse(resp); + wbLog.setResult("预算成功"); + wbLog.setRequest(JSON.toJSONString(stringObjectMap)); + return resp; + } catch (Exception e) { + //记录日志 + wbLog.setResponse(""); + wbLog.setResult("预算失败"); + wbLog.setRequest(JSON.toJSONString(stringObjectMap)); + throw new Exception("预算失败"); + } finally { + BizUtils.saveLog(wbLog); + } + + } + + @Override + public String finish(String requestNo) throws Exception { + return submit(requestNo, "1"); + } +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/HeadClBxBudgetStrategy.java b/src/main/java/com/engine/htsc/payment/service/impl/HeadClBxBudgetStrategy.java new file mode 100644 index 0000000..47b56e9 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/HeadClBxBudgetStrategy.java @@ -0,0 +1,157 @@ +package com.engine.htsc.payment.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.engine.htsc.payment.dao.BudgetDao; +import com.engine.htsc.payment.pojo.BudgetList; +import com.engine.htsc.payment.pojo.BxBudgetDTO; +import com.engine.htsc.payment.service.BudgetStrategy; +import com.engine.htsc.payment.util.BizUtils; +import com.engine.htsc.payment.util.PayUtil; +import org.apache.commons.lang.math.NumberUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.resource.ResourceComInfo; + +import java.text.DecimalFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.UUID; + +public class HeadClBxBudgetStrategy implements BudgetStrategy { + + private final Log log = LogFactory.getLog(HeadClBxBudgetStrategy.class); + + private String ZSYSKM = "8601050303"; + private String YSYSKM = "8601050301"; + private String QTYSKM = "8601050302"; + + @Override + public BxBudgetDTO buildNewBudgetParamFromWorkflowDB(String requestNo, String billStatus) throws Exception { + log.info("====差旅报销流程预算开始"); + log.info("====差旅报销流程预算流程id@" + requestNo + "@"); + RecordSet rs = new RecordSet(); + BizUtils bizUtils = new BizUtils(); + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + ResourceComInfo resourceComInfo = new ResourceComInfo(); + DepartmentComInfo departmentComInfo = new DepartmentComInfo(); + String table = bizUtils.getTableNameByRequestId(requestNo); + log.info("====差旅报销流程表名@" + table + "@"); + BudgetDao budgetDao = new BudgetDao(); + String sql = budgetDao.mainBXFieldParam(table, requestNo); + log.info("查询差旅报销SQL为" + sql); + rs.executeQuery(sql); + BxBudgetDTO budgetDTO = new BxBudgetDTO(); + String lcbh = ""; + String requestname = ""; + String ngr = ""; + String mainId = ""; + if (rs.next()) { + lcbh = Util.null2String(rs.getString("lcbh")); + ngr = Util.null2String(rs.getString("ngr")); + mainId = Util.null2String(rs.getString("id")); + requestname = Util.null2String(rs.getString("requestname")); + } + budgetDTO.setBillNum(requestNo); + budgetDTO.setBillName(lcbh); + budgetDTO.setWorkFlowNum(lcbh); + budgetDTO.setBillStatus(billStatus); + budgetDTO.setBillTitle(requestname); + budgetDTO.setBizDate(df.format(LocalDateTime.now())); + budgetDTO.setPesonName(resourceComInfo.getLastname(ngr)); + //获取明细表 dt9和 + String yskmTable = table + "_dt9"; + String clbxYskmTableFieldParam = budgetDao.clbxBBYskmTableFieldParam(yskmTable, mainId); + rs.executeQuery(clbxYskmTableFieldParam); + //uuid现在放在循环外 + String uuid = UUID.randomUUID().toString(); + int i = 1; + ArrayList list = new ArrayList<>(); + while (rs.next()) { + String fysjcdbm = Util.null2String(rs.getString("fycdbm")); //费用承担部门 + String JSHJJE = Util.null2String(rs.getString("jshjje")); + String BHSJE = Util.null2String(rs.getString("bhsje")); + String SJ = Util.null2String(rs.getString("sj")); + String qzzsbhsje = Util.null2String(rs.getString("qzzsbhsje")); + String zssj = Util.null2String(rs.getString("zssj")); + String lkysbhsje = Util.null2String(rs.getString("lkysbhsje")); + String lkyssj = Util.null2String(rs.getString("lkyssj")); + String qt = Util.null2String(rs.getString("qt")); + + BudgetList budgetListZS = new BudgetList(); + budgetListZS.setDeptNum(departmentComInfo.getDepartmentCode(fysjcdbm)); //费用承担部门编号 + budgetListZS.setBgItem(PayUtil.superBudgetSubject(ZSYSKM)); //项目编码 + budgetListZS.setItemEntryNum(ZSYSKM); //明细项目编码 + budgetListZS.setBgElement("0101"); //费用类型编码 + budgetListZS.setBillEntryID(uuid + "#" + i); + Float amount = Float.parseFloat(qzzsbhsje) + Float.parseFloat(zssj); + budgetListZS.setAmount(amount.toString());//金额 + budgetListZS.setNoTaxAmount(qzzsbhsje); // 不含价税金额 + budgetListZS.setTaxAmount(zssj); //税金 + list.add(budgetListZS); + i++; + BudgetList budgetListYS = new BudgetList(); + budgetListYS.setDeptNum(departmentComInfo.getDepartmentCode(fysjcdbm)); //费用承担部门编号 + budgetListYS.setBgItem(PayUtil.superBudgetSubject(YSYSKM)); //项目编码 + budgetListYS.setItemEntryNum(YSYSKM); //明细项目编码 + budgetListYS.setBgElement("0101"); //费用类型编码 + budgetListYS.setBillEntryID(uuid + "#" + i); + Float amountYS = Float.parseFloat(lkysbhsje) + Float.parseFloat(lkyssj); + budgetListYS.setAmount(amountYS.toString());//金额 + budgetListYS.setNoTaxAmount(lkysbhsje); // 不含价税金额 + budgetListYS.setTaxAmount(lkyssj); //税金 + list.add(budgetListYS); + i++; + BudgetList budgetListQT = new BudgetList(); + budgetListQT.setDeptNum(departmentComInfo.getDepartmentCode(fysjcdbm)); //费用承担部门编号; //费用承担部门编号 + budgetListQT.setBgItem(PayUtil.superBudgetSubject(QTYSKM)); //项目编码 + budgetListQT.setItemEntryNum(QTYSKM); //明细项目编码 + budgetListQT.setBgElement("0101"); //费用类型编码 + budgetListQT.setBillEntryID(uuid + "#" + i); + budgetListQT.setAmount(qt);//金额 + budgetListQT.setNoTaxAmount(qt); // 不含价税金额 + budgetListQT.setTaxAmount("0"); //税金 + list.add(budgetListQT); + i++; + } + budgetDTO.setList(list); //分录汇总 + return budgetDTO; + } + + @Override + public String queryBudgetSqlFromDetailTable(String bz, String table, String detailId) { + String sql = ""; +// if ("0".equals(bz)) { +// //dt8 +// sql = "select FYCDBMFZR,FYSJCDBM,YSKM,BHSJE,SJ,JSHJJE from " + table + "_DT8 where MAINID=" + detailId; +// } else if ("1".equals(bz)) { +// //dt9 +// sql = "select FYCDBMFZR,FYSJCDBM,YSKM,RMBJE from " + table + "_DT9 where MAINID=" + detailId; +// } + sql = "select FYCDBMFZR,FYSJCDBM,YSKM,RMBJE from " + table + "_DT9 where MAINID=" + detailId; + + return sql; + } + + @Override + public BxBudgetDTO getLastBudgetParamFromModeDB(String requestNo, String itFlag) { + RecordSet rs = new RecordSet(); + rs.executeQuery("select YSQQCS from UF_YSJLB where ITFLAG=? and LCID=?", itFlag, requestNo); + String lastOperateBudgetParam = ""; + if (rs.next()) { + lastOperateBudgetParam = Util.null2String(rs.getString("YSQQCS")); + } + //decode + BxBudgetDTO budgetDTO = null; + try { + budgetDTO = JSONObject.parseObject(lastOperateBudgetParam, BxBudgetDTO.class); + } catch (Exception e) { + new BizUtils().log(e.getMessage()); + } + return budgetDTO; + } +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/HeadPaymentBudgetCommand.java b/src/main/java/com/engine/htsc/payment/service/impl/HeadPaymentBudgetCommand.java new file mode 100644 index 0000000..f1f6a77 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/HeadPaymentBudgetCommand.java @@ -0,0 +1,133 @@ +package com.engine.htsc.payment.service.impl; + +import com.alibaba.fastjson.JSON; +import com.engine.htsc.payment.enums.BudgetWF; +import com.engine.htsc.payment.pojo.BudgetDTO; +import com.engine.htsc.payment.pojo.WbLog; +import com.engine.htsc.payment.service.BudgetCommand; +import com.engine.htsc.payment.service.BudgetStrategy; +import com.engine.htsc.payment.util.AssertUtil; +import com.engine.htsc.payment.util.BizUtils; +import com.engine.htsc.payment.util.BudgetStrategyFactory; +import com.engine.htsc.payment.util.IpUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.joda.time.DateTime; +import weaver.general.Util; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.interfaces.htsc.cus.HTUtil; + +import java.util.Map; + +public class HeadPaymentBudgetCommand implements BudgetCommand { + + private final Log log = LogFactory.getLog(HeadPaymentBudgetCommand.class); + + private final BudgetStrategy bg = BudgetStrategyFactory.getBudgetStrategyForPayment( + BudgetWF.PAYMENT.getCode()); + + @Override + public String submit(String requestNo, String billStatus) throws Exception { + assert bg != null; + BizUtils bizUtils = new BizUtils(); + BudgetDTO budgetDTO = bg.buildNewBudgetParamFromWorkflowDB(requestNo, billStatus); + Map stringObjectMap = bizUtils.convertDtoToMap(budgetDTO); + log.info("\n 执行总部通用付款预算 >>> 当前状态submit"); + log.info("\n 调用预算参数(状态:" + billStatus + ") >>> \n " + JSON.toJSONString(stringObjectMap)); + //记录日志信息 + WbLog wbLog = new WbLog(); + DateTime today = new DateTime(); + wbLog.setRequestNo(requestNo); + wbLog.setTime(today.toString("yyyy-MM-dd HH:mm:ss")); + wbLog.setUrl(String.format("%s/cwbase/JTGL/BudgetProcess.asmx?wsdl", + Util.null2String(new PropBean().getPropName("budgetIp")))); + wbLog.setMethod("weaver.interfaces.htsc.cus.HTUtil.budgetCommit"); + wbLog.setIp(IpUtils.getHostIp()); + try { + String resp = new HTUtil().budgetCommit(stringObjectMap); + log.info("\n 调用预算返回(状态:" + billStatus + ") >>> \n " + resp); + bizUtils.refreshBudgetRecord(requestNo, billStatus, JSON.toJSONString(budgetDTO), "0"); + boolean b = bizUtils.updateBudgetMidTable(requestNo, billStatus); + log.info("\n 调用预算更新中间表返回 >>> \n " + b); + //记录日志 + wbLog.setResponse(resp); + if ("F1001".equals(resp)) { + wbLog.setResult("预算成功"); + } else { + wbLog.setResult("预算失败,返回值:" + resp); + } + wbLog.setRequest(JSON.toJSONString(stringObjectMap)); + return resp; //F1001 + } catch (Exception e) { + //记录日志 + wbLog.setResponse(""); + wbLog.setResult("预算失败"); + wbLog.setRequest(JSON.toJSONString(stringObjectMap)); + throw new Exception("预算失败"); + } finally { + BizUtils.saveLog(wbLog); + } + } + + @Override + public String reSubmit(String requestNo) throws Exception { + String reject = reject(requestNo); + if ("F1001".equalsIgnoreCase(reject)) { + return submit(requestNo, "3"); //重新预占 + } else { + return reject; + } + } + + @Override + public String reject(String requestNo) throws Exception { + assert bg != null; + BizUtils bizUtils = new BizUtils(); + BudgetDTO lastBudgetDTO = bg.getLastBudgetParamFromModeDB(requestNo, "0"); + if (AssertUtil.isEmpty(lastBudgetDTO)) { + // 为不影响后面的逻辑,默认返回成功F1001 + log.info(String.format("UF_YSJLB无requestno=%s的预算数据", requestNo)); + return "F1001"; + } + log.info("\n 从建模表中获取的参数@ \n" + JSON.toJSONString(lastBudgetDTO)); + lastBudgetDTO.setBillStatus("2"); //回退 + Map stringObjectMap = bizUtils.convertDtoToMap(lastBudgetDTO); + log.info("\n 执行总部通用付款预算 >>> 当前状态reject"); + log.info("\n 调用预算参数(回退) >>> \n " + JSON.toJSONString(stringObjectMap)); + //记录日志信息 + WbLog wbLog = new WbLog(); + DateTime today = new DateTime(); + wbLog.setRequestNo(requestNo); + wbLog.setTime(today.toString("yyyy-MM-dd HH:mm:ss")); + wbLog.setUrl(String.format("%s/cwbase/JTGL/BudgetProcess.asmx?wsdl", + Util.null2String(new PropBean().getPropName("budgetIp")))); + wbLog.setMethod("weaver.interfaces.htsc.cus.HTUtil.budgetCommit"); + wbLog.setIp(IpUtils.getHostIp()); + try { + String resp = new HTUtil().budgetCommit(stringObjectMap); + bizUtils.refreshBudgetRecord(requestNo, "2", JSON.toJSONString(lastBudgetDTO), "0"); + log.info("\n 调用预算返回(回退) >>> \n " + resp); + boolean b = bizUtils.updateBudgetMidTable(requestNo, "2"); + log.info("\n 调用预算更新中间表返回(回退) >>> \n " + b); + //记录日志 + wbLog.setResponse(resp); + wbLog.setResult("预算成功"); + wbLog.setRequest(JSON.toJSONString(stringObjectMap)); + return resp; + } catch (Exception e) { + //记录日志 + wbLog.setResponse(""); + wbLog.setResult("预算失败"); + wbLog.setRequest(JSON.toJSONString(stringObjectMap)); + throw new Exception("预算失败"); + } finally { + BizUtils.saveLog(wbLog); + } + + } + + @Override + public String finish(String requestNo) throws Exception { + return submit(requestNo, "1"); + } +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/HeadPaymentBudgetStrategy.java b/src/main/java/com/engine/htsc/payment/service/impl/HeadPaymentBudgetStrategy.java new file mode 100644 index 0000000..8d1ef4a --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/HeadPaymentBudgetStrategy.java @@ -0,0 +1,190 @@ +package com.engine.htsc.payment.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.api.htsc.businessMethod.SubUnionBizUtil; +import com.engine.htsc.payment.pojo.BudgetDTO; +import com.engine.htsc.payment.pojo.BudgetList; +import com.engine.htsc.payment.service.BudgetStrategy; +import com.engine.htsc.payment.util.BizUtils; +import com.engine.htsc.payment.util.PayUtil; +import org.apache.commons.lang.math.NumberUtils; +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.resource.ResourceComInfo; + +import java.text.DecimalFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.UUID; + +/** + * 总部通用付款预算参数构建 + */ +public class HeadPaymentBudgetStrategy implements BudgetStrategy { + + @Override + public BudgetDTO buildNewBudgetParamFromWorkflowDB(String requestNo, String billStatus) throws Exception { + RecordSet rs = new RecordSet(); + BizUtils bizUtils = new BizUtils(); + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + ResourceComInfo resourceComInfo = new ResourceComInfo(); + DepartmentComInfo departmentComInfo = new DepartmentComInfo(); + String table = bizUtils.getTableNameByRequestId(requestNo); + String sql = "select t1.ID,t1.REQUESTID,t1.LCBH,t1.NGR,t1.FKXX,t2.REQUESTNAME from " + table + " t1\n" + + "left join WORKFLOW_REQUESTBASE t2\n" + + "on t1.REQUESTID=t2.REQUESTID\n" + + "where t1.REQUESTID=?"; + rs.executeQuery(sql, requestNo); + BudgetDTO budgetDTO = new BudgetDTO(); + String bz = "0"; // 0 本币 + String detailId = ""; + if (rs.next()) { + budgetDTO.setBillNum(rs.getString("REQUESTID")); + budgetDTO.setBizDate(df.format(LocalDateTime.now())); + budgetDTO.setBillStatus(billStatus); + budgetDTO.setBillName(rs.getString("LCBH")); + budgetDTO.setBillTitle(rs.getString("REQUESTNAME")); + budgetDTO.setPesonName(resourceComInfo.getLastname(rs.getString("NGR"))); + bz = rs.getString("FKXX"); + detailId = rs.getString("ID"); + } + boolean itFlag = false; + if (budgetDTO.getBillName().contains("总部IT付款")) { + itFlag = !BizUtils.whetherItOrTy(requestNo); //判断是否为it类付款 + } + String queryBudgetList; + rs.writeLog("requestId:"+requestNo+" 是否IT付款:"+itFlag); + if(itFlag) { + queryBudgetList = queryITBudgetSqlFromDetailTable(bz, table, detailId); + }else { + queryBudgetList = queryBudgetSqlFromDetailTable(bz, table, detailId); + } + rs.writeLog("requestId:"+requestNo+" 是否IT付款:"+itFlag+" 查询付款明细sql:"+queryBudgetList); + String uuid = UUID.randomUUID().toString(); + int i = 1; + ArrayList list = new ArrayList<>(); + rs.executeQuery(queryBudgetList); + while (rs.next()) { + BudgetList budgetList = new BudgetList(); + String fysjcdbm = rs.getString("FYSJCDBM"); + String yskm = rs.getString("YSKM"); + String superBudgetCode = PayUtil.getSuperBudgetCode(yskm); + budgetList.setDeptNum(departmentComInfo.getDepartmentCode(fysjcdbm)); + if(itFlag) { + rs.writeLog("requestId:"+requestNo+" 是否IT付款:"+itFlag+" 付款明细projectcode:"+rs.getString("PROJECTCODE")); + budgetList.setBgItem(rs.getString("PROJECTCODE")); + budgetList.setBgITElement(rs.getString("PROJECTCODE")); + }else { + budgetList.setBgItem(superBudgetCode); + budgetList.setBgITElement(superBudgetCode); + } + budgetList.setBgElement("0101"); //default + budgetList.setBillEntryID(uuid + "#" + i); + budgetList.setItemEntryNum(yskm); + + if ("0".equals(bz)) { + //明细8 + String jshjje = Util.null2String(rs.getString("JSHJJE")); + String bhsje = Util.null2String(rs.getString("BHSJE")); + String sj = Util.null2String(rs.getString("SJ")); + jshjje = new DecimalFormat("0.00").format(NumberUtils.toDouble(jshjje)); + budgetList.setAmount(jshjje); + budgetList.setNoTaxAmount(bhsje); + budgetList.setTaxAmount(sj); + if (!itFlag) { + // 非IT付款的情况下,价税合计不为0 不含税为0的情况下 不含税金额改成和价税合计一样的金额 + if (StringUtils.isNotBlank(jshjje) && !"0".equals(jshjje) && !"0.00".equals(jshjje) && ( + StringUtils.isBlank(bhsje) || "0".equals(bhsje) || "0.00".equals(bhsje))) { + // 不含价税金额 + budgetList.setNoTaxAmount(jshjje); + } + } + } else { + String rmbje = Util.null2String(rs.getString("rmbje")); + rmbje = new DecimalFormat("0.00").format(NumberUtils.toDouble(rmbje)); + budgetList.setAmount(rmbje); + budgetList.setNoTaxAmount(rmbje); + budgetList.setTaxAmount("0.00"); + } + i++; + list.add(budgetList); + } + budgetDTO.setList(list); //分录汇总 + //HTO-11640查询主表,当付款流程中字段“先付款后发票”选项为“是”时,接口字段“SFYFP”传值“Y”, + // “先付款后发票”选项为“否”时,接口字段“SFYFP”传值“N”; + //针对分支机构通用付款,总部通用付款,总部it付款,总部工会付款,托收业务付款,资管通用付款,紫金通用付款 + if(SubUnionBizUtil.equalsTableName(requestNo, "fzjgtyfk")||SubUnionBizUtil.equalsTableName(requestNo, "zbtyfk") + ||SubUnionBizUtil.equalsTableName(requestNo, "zbghfk")||SubUnionBizUtil.equalsTableName(requestNo, "zbitfk") + ||SubUnionBizUtil.equalsTableName(requestNo, "fyft") || SubUnionBizUtil.equalsTableName(requestNo, "zgtyfk") + ||SubUnionBizUtil.equalsTableName(requestNo, "zjtyfk") ||SubUnionBizUtil.equalsTableName(requestNo, "zgstyfk")){ + RecordSet sqlFindYfp = new RecordSet(); + String sqlNew = "select sfxfkhtgfp from "+table+" where requestid = "+requestNo; + sqlFindYfp.execute(sqlNew); + if (sqlFindYfp.next()){ + String sfxfkhtgfp = Util.null2String(sqlFindYfp.getString("sfxfkhtgfp")); + if ("0".equals(sfxfkhtgfp)){ + //当付款流程中字段“先付款后发票”选项为“是”时,接口字段“SFYFP”传值“Y” + budgetDTO.setSFYFP("Y"); + }else{ + //“先付款后发票”选项为“否”时,接口字段“SFYFP”传值“N”; + budgetDTO.setSFYFP("N"); + } + } + } + + return budgetDTO; + } + + @Override + public String queryBudgetSqlFromDetailTable(String bz, String table, String detailId) { + String sql = ""; + if ("0".equals(bz)) { + //dt8 + sql = "select FYCDBMFZR,FYSJCDBM,YSKM,BHSJE,SJ,JSHJJE from " + table + "_DT8 where MAINID=" + detailId; + } else if ("1".equals(bz)) { + //dt9 + sql = "select FYCDBMFZR,FYSJCDBM,YSKM,RMBJE from " + table + "_DT9 where MAINID=" + detailId; + } + return sql; + } + + /** + * IT付款明细 + * @param bz + * @param table + * @param detailId + * @return + */ + public String queryITBudgetSqlFromDetailTable(String bz, String table, String detailId) { + String sql = ""; + if ("0".equals(bz)) { + //dt8 + sql = "select FYCDBMFZR,FYSJCDBM,YSKM,BHSJE,SJ,JSHJJE,projectcode from " + table + "_DT8 where MAINID=" + detailId; + } else if ("1".equals(bz)) { + //dt9 + sql = "select FYCDBMFZR,FYSJCDBM,YSKM,RMBJE,projectcode from " + table + "_DT9 where MAINID=" + detailId; + } + return sql; + } + + @Override + public BudgetDTO getLastBudgetParamFromModeDB(String requestNo, String itFlag) { + RecordSet rs = new RecordSet(); + rs.executeQuery("select YSQQCS from UF_YSJLB where ITFLAG=? and LCID=?", itFlag, requestNo); + String lastOperateBudgetParam = ""; + if (rs.next()) { + lastOperateBudgetParam = Util.null2String(rs.getString("YSQQCS")); + } + //decode + BudgetDTO budgetDTO = null; + try { + budgetDTO = JSONObject.parseObject(lastOperateBudgetParam, BudgetDTO.class); + } catch (Exception e) { + new BizUtils().log(e.getMessage()); + } + return budgetDTO; + } +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/ITHeadPaymentBudgetCommand.java b/src/main/java/com/engine/htsc/payment/service/impl/ITHeadPaymentBudgetCommand.java new file mode 100644 index 0000000..a942ad6 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/ITHeadPaymentBudgetCommand.java @@ -0,0 +1,142 @@ +package com.engine.htsc.payment.service.impl; + +import com.alibaba.fastjson.JSON; +import com.engine.htsc.payment.enums.BudgetWF; +import com.engine.htsc.payment.pojo.BudgetDTO; +import com.engine.htsc.payment.pojo.WbLog; +import com.engine.htsc.payment.service.BudgetCommand; +import com.engine.htsc.payment.service.BudgetStrategy; +import com.engine.htsc.payment.util.*; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.joda.time.DateTime; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.interfaces.htsc.cus.HTUtil; + +import java.util.Map; + +public class ITHeadPaymentBudgetCommand implements BudgetCommand { + + private final Log log = LogFactory.getLog(ITHeadPaymentBudgetCommand.class); + + private final BudgetStrategy bg = BudgetStrategyFactory.getBudgetStrategyForPayment( + BudgetWF.PAYMENT.getCode()); + + @Override + public String submit(String requestNo, String billStatus) throws Exception { + assert bg != null; + String requestUrl = new PropBean().getPropName("ITBudgetUpdateUrl"); + BizUtils bizUtils = new BizUtils(); + BudgetDTO budgetDTO = bg.buildNewBudgetParamFromWorkflowDB(requestNo, billStatus); + log.info("\n 执行总部通用付款预算 >>> 当前状态submit"); + log.info("\n 调用预算参数(状态:" + billStatus + ") >>> \n " + JSON.toJSONString(budgetDTO)); + //记录日志信息 + WbLog wbLog = new WbLog(); + DateTime today = new DateTime(); + wbLog.setRequestNo(requestNo); + wbLog.setTime(today.toString("yyyy-MM-dd HH:mm:ss")); + wbLog.setUrl(requestUrl); + wbLog.setMethod("配置文件ITBudgetUpdateUrl"); + wbLog.setIp(IpUtils.getHostIp()); + try { + HTUtil htUtil = new HTUtil(); + Map stringObjectMap = bizUtils.convertDtoToMap(budgetDTO); + String normalResp = htUtil.budgetCommit(stringObjectMap); + + Map appHeader = htUtil.getAppHeader(); + log.info("getAppHeader@" + appHeader + "@"); + //新增token校验 + String resp = HttpUtil.postApplicationJson(requestUrl, JSON.toJSONString(budgetDTO), appHeader); + bizUtils.refreshBudgetRecord(requestNo, billStatus, JSON.toJSONString(budgetDTO), "1"); + log.info("\n 调用预算返回(状态:" + billStatus + ") >>> \n " + resp); + boolean b = bizUtils.updateBudgetMidTable(requestNo, billStatus); + log.info("\n 调用预算更新中间表返回 >>> \n " + b); + //记录日志 + wbLog.setResponse(normalResp); + if ("F1001".equals(normalResp)) { + wbLog.setResult("预算成功"); + } else { + wbLog.setResult("预算失败,返回值:" + normalResp); + } + wbLog.setRequest(JSON.toJSONString(budgetDTO)); + return normalResp; //F1001 + } catch (Exception e) { + //记录日志 + wbLog.setResponse(""); + wbLog.setResult("预算失败"); + wbLog.setRequest(JSON.toJSONString(budgetDTO)); + throw new Exception("预算失败"); + } finally { + BizUtils.saveLog(wbLog); + } + } + + @Override + public String reSubmit(String requestNo) throws Exception { + String reject = reject(requestNo); + if ("F1001".equalsIgnoreCase(reject)) { + return submit(requestNo, "3"); //重新预占 + } else { + return reject; + } + } + + @Override + public String reject(String requestNo) throws Exception { + assert bg != null; + String requestUrl = new PropBean().getPropName("ITBudgetUpdateUrl"); + BizUtils bizUtils = new BizUtils(); + BudgetDTO lastBudgetDTO = bg.getLastBudgetParamFromModeDB(requestNo, "1"); + if (AssertUtil.isEmpty(lastBudgetDTO)) { + // 为不影响后面的逻辑,默认返回成功F1001 + log.info(String.format("UF_YSJLB无requestno=%s的预算数据", requestNo)); + return "F1001"; + } + lastBudgetDTO.setBillStatus("2"); //回退 + log.info("\n 执行总部IT付款预算 >>> 当前状态reject"); + log.info("\n 调用预算参数(回退) >>> \n " + JSON.toJSONString(lastBudgetDTO)); + //记录日志信息 + WbLog wbLog = new WbLog(); + DateTime today = new DateTime(); + wbLog.setRequestNo(requestNo); + wbLog.setTime(today.toString("yyyy-MM-dd HH:mm:ss")); + wbLog.setUrl(requestUrl); + wbLog.setIp(IpUtils.getHostIp()); + + try { + //退回时调用budgetCommit + HTUtil htUtil = new HTUtil(); + Map stringObjectMap = bizUtils.convertDtoToMap(lastBudgetDTO); + String normalResp = htUtil.budgetCommit(stringObjectMap); + + Map appHeader = htUtil.getAppHeader(); + log.info("getAppHeader@" + appHeader + "@"); + String resp = HttpUtil.postApplicationJson(requestUrl, JSON.toJSONString(lastBudgetDTO), appHeader); + log.info("ITBudgetInterfaceInvoke>>预算接口调用返回 resp : @" + resp + "@"); + bizUtils.refreshBudgetRecord(requestNo, "2", JSON.toJSONString(lastBudgetDTO), "1"); + log.info("\n 调用预算返回(回退) >>> \n " + normalResp); + boolean b = bizUtils.updateBudgetMidTable(requestNo, "2"); + log.info("\n 调用预算更新中间表返回(回退) >>> \n " + b); + //记录日志 + wbLog.setResponse(resp); + wbLog.setResult("预算成功"); + wbLog.setRequest(JSON.toJSONString(lastBudgetDTO)); + return resp; + } catch (Exception e) { + //记录日志 + wbLog.setResponse(""); + wbLog.setResult("预算失败"); + wbLog.setRequest(JSON.toJSONString(lastBudgetDTO)); + throw new Exception("预算失败"); + } finally { + BizUtils.saveLog(wbLog); + } + + } + + @Override + public String finish(String requestNo) throws Exception { + return submit(requestNo, "1"); + } +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/PaymentCommonServiceImpl.java b/src/main/java/com/engine/htsc/payment/service/impl/PaymentCommonServiceImpl.java new file mode 100644 index 0000000..239ecf6 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/PaymentCommonServiceImpl.java @@ -0,0 +1,140 @@ +package com.engine.htsc.payment.service.impl; + +import cn.hutool.core.util.ReflectUtil; +import com.engine.core.impl.Service; +import com.engine.htsc.branchpayment.service.impl.BranchPaymentServiceImpl; +import com.engine.htsc.payment.enums.WBEnum; +import com.engine.htsc.payment.service.PaymentCommonService; +import com.engine.htsc.payment.util.BizUtils; +import com.engine.htsc.payment.util.PayUtil; +import com.engine.htsc.payment.util.ZipUtils; +import com.engine.htsc.trip.util.WeaverUtil; +import net.lingala.zip4j.ZipFile; +import weaver.conn.RecordSet; +import weaver.general.Util; +import com.engine.htsc.payment.service.PaymentService; +import com.engine.htsc.payment.util.PayCommonUtil; +import com.engine.htsc.payment.util.ZipUtils; +import com.engine.htsc.subpayment.service.impl.SubPaymentServiceImpl; +import net.lingala.zip4j.ZipFile; +import weaver.conn.RecordSetDataSource; +import weaver.conn.RecordSetTrans; +import weaver.general.BaseBean; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.interfaces.htsc.cus.HTUtil; + +import javax.ws.rs.ext.Provider; +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class PaymentCommonServiceImpl extends Service implements PaymentCommonService { + + @Override + public File buildAttachmentsZipFile() throws Exception { + String parentPath = "/app/ecology/filesystem/temp/zip"; + ZipUtils zipUtils = new ZipUtils(); + PropBean pp = new PropBean(); + String categories = pp.getPropName("AttachmentCategories"); //附件目录名称,逗号分隔 + String[] attachmentsCategories = categories.split(","); + File targetFile = new File(parentPath + File.separator + "网报流程附件.zip"); + if (targetFile.exists()) { + targetFile.delete(); + } + for (String attachmentsCategory : attachmentsCategories) { + List filesByCategory = zipUtils.getFilesByCategory(attachmentsCategory, parentPath); + File file = zipUtils.zipFiles(new File(parentPath + File.separator + attachmentsCategory + ".zip"), filesByCategory); + new ZipFile(targetFile).addFile(file); + } + return new File(parentPath + File.separatorChar + "网报流程附件.zip"); + } + + @Override + public String syncContractInfo(String syncIt, String rids) throws Exception { + RecordSet rs = new RecordSet(); + rs.writeLog("syncContractInfo,流程编号:requestid:" + rids); + BizUtils bizUtils = new BizUtils(); + StringBuilder sb = new StringBuilder(); + for (String requestId : rids.split(",")) { + boolean normalContractFlag = PayUtil.updatePaymentInfoToHuaTai(requestId); + rs.writeLog("普通合同更新状态flag:" + normalContractFlag); + sb.append("普通合同更新状态flag:").append(normalContractFlag); + String tableName = WeaverUtil.getTableNameByRequestId(requestId, rs); + rs.executeQuery("SELECT LCBH FROM " + tableName + " fm WHERE REQUESTID = ?", requestId); + String lcbh = ""; + if (rs.next()) { + lcbh = Util.null2String(rs.getString("LCBH")); + } + if (lcbh.contains("总部IT付款") && "true".equals(syncIt)) { + boolean type = BizUtils.whetherItOrTy(requestId, tableName); + rs.writeLog("当前流程未it付款, 判断是否是it费用付款,flag=" + type + "; (注:false为it费用付款)"); + if (!type) { + sb.append(";"); + //执行it流程合同 + rs.writeLog("it合同更新状态开始"); + String workflowTable = bizUtils.getTableNameByRequestId(requestId); + boolean itContractFlag = PayUtil.updateItPaymentInfoToHT(requestId, workflowTable); + rs.writeLog("it合同更新状态flag:" + itContractFlag); + sb.append("it合同更新状态flag:").append(itContractFlag); + } + } + } + return sb.toString(); + } + + @Override + public List> syncFundAllStatus(String requestMarks) throws Exception { + BaseBean bb = new BaseBean(); + bb.writeLog(String.format("syncFundAllStatus starting...., requestMarks: %s", requestMarks)); + Map unNumberByRequestId = PayCommonUtil.getUnNumberByRequestId(requestMarks); + String unNumber = unNumberByRequestId.get("UNNUMBER"); + String requestId = unNumberByRequestId.get("REQUESTID"); + if (WBEnum.HEAD.getWfUnNumber().contains(unNumber)) { + bb.writeLog(String.format("requestId's unnumber: %s, 总部流程,执行" + + "com.engine.htsc.payment.service.PaymentService.doPayment", unNumber)); + //总部 doPayment入参为建模id,需要转化 + String ufId = PayCommonUtil.trans2Id(requestId); + List> resp = ReflectUtil.invoke(new PaymentServiceImpl(), "doPayment", ufId); + List> tempList = new ArrayList<>(); + resp.forEach(map -> map.forEach((key, value) -> { + Map temp = new HashMap<>(); + temp.put("requestMark", key); + temp.put("result", value); + tempList.add(temp); + })); + return tempList; + } + + if (WBEnum.BRANCH.getWfUnNumber().contains(unNumber)) { + bb.writeLog(String.format("requestId's unnumber: %s, 分支机构流程,执行" + + "com.engine.htsc.branchpayment.service.impl.BranchPaymentServiceImpl.doPaymentByBatchId", unNumber)); + Map map = ReflectUtil.invoke(new BranchPaymentServiceImpl(), "doPaymentByBatchId", requestId); + List> tempList = new ArrayList<>(); + map.forEach((key, value) -> { + Map temp = new HashMap<>(); + temp.put("requestMark", key); + temp.put("result", value); + tempList.add(temp); + }); + return tempList; + } + + if (WBEnum.SUB.getWfUnNumber().contains(unNumber)) { + bb.writeLog(String.format("requestId's unnumber: %s, 子公司流程,执行" + + "com.engine.htsc.subpayment.service.impl.SubPaymentServiceImpl.doPaymentByBatchId", unNumber)); + Map map = ReflectUtil.invoke(new SubPaymentServiceImpl(), "doPaymentByBatchId", requestId); + List> tempList = new ArrayList<>(); + map.forEach((key, value) -> { + Map temp = new HashMap<>(); + temp.put("requestMark", key); + temp.put("result", value); + tempList.add(temp); + }); + return tempList; + } + + throw new Exception(String.format("流程资金表状态更新失败,流程id不存在 %s", requestId)); + } +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/PaymentCubeServiceImpl.java b/src/main/java/com/engine/htsc/payment/service/impl/PaymentCubeServiceImpl.java new file mode 100644 index 0000000..9bc2486 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/PaymentCubeServiceImpl.java @@ -0,0 +1,54 @@ +package com.engine.htsc.payment.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.payment.service.PaymentCubeService; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; + +import java.util.HashMap; +import java.util.Map; + +public class PaymentCubeServiceImpl extends Service implements PaymentCubeService { + private BaseBean log = new BaseBean(); + + + @Override + public Map updateReadStatus(String requestid) { + + Map datas = new HashMap<>(); + try { + RecordSet rs = new RecordSet(); + String lcydzt = ""; + rs.executeQuery("select lcydzt from uf_zbfk where requtid = ?",requestid); + if (rs.next()){ + lcydzt = Util.null2String(rs.getString("lcydzt")); + } + if ("1".equals(lcydzt)){ + rs.executeUpdate("update uf_zbfk set lcydzt = 0 where requtid = ?",requestid); + } + datas.put("message","流程编号为"+requestid+"已更新阅读状态"); + }catch (Exception e){ + e.printStackTrace(); + } + return datas; + } + + + @Override + public Map updatePrintStatus(String ids) { + + Map datas = new HashMap<>(); + try { + RecordSet rs = new RecordSet(); + String updateSql = " update uf_zbfk set dyzt=0 where id in ("+ids+") "; + rs.executeUpdate(updateSql); + + }catch (Exception e){ + e.printStackTrace(); + } + return datas; + } +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/PaymentExcelTemplateServiceImpl.java b/src/main/java/com/engine/htsc/payment/service/impl/PaymentExcelTemplateServiceImpl.java new file mode 100644 index 0000000..521813d --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/PaymentExcelTemplateServiceImpl.java @@ -0,0 +1,404 @@ +package com.engine.htsc.payment.service.impl; + +import com.alibaba.excel.EasyExcel; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.engine.core.impl.Service; +import com.engine.htsc.financialadjustment.excel.ExcelDataListener; +import com.engine.htsc.financialadjustment.util.BizUtil; +import com.engine.htsc.payment.pojo.HTPaymentCostDetail; +import com.engine.htsc.payment.pojo.PayLhExcelData; +import com.engine.htsc.payment.service.PaymentExcelTemplateService; + +import org.apache.commons.lang.StringUtils; +import org.apache.poi.xssf.usermodel.XSSFCell; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import weaver.conn.RecordSet; +import weaver.file.ImageFileManager; +import weaver.general.IOUtils; +import weaver.general.Util; +import weaver.interfaces.htsc.GlobatTools.JAVATools; + +import java.io.InputStream; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class PaymentExcelTemplateServiceImpl extends Service implements PaymentExcelTemplateService { + public static final String COST_DEPT = "费用实际承担部门编号";//标题行 + public static final String BUDGET_ITEM = "预算科目编号"; + public static final String NOTTAX_MONEY = "不含税金额"; + public static final String TAX_RATE = "税率"; + public static final String CURRENCY = "币种"; + public static final String FOREIGN_CURRENCY_MONEY = "外币金额"; + public static final String REASON = "事由"; + public static final String CURRENCY_KIND = "货币类型"; + public static final String TYPE_HTZXYSKM = "HTZXYSKM";//专项预算科目 + public static final String TYPE_HTYBYSKM = "HTYBYSKM";//一般预算科目 + public static final String TYPE_HTZBYSKM = "HTZBYSKM";//资本预算科目 + public static final String TYPE_HTQTYSKM = "HTQTYSKM";//其他预算科目 + public static final String TYPE_HTZJYSKM = "HTZJYSKM";//资金预算科目 + + @Override + public List getDetailByExcel(Map params) throws Exception { + JAVATools.SetCmdwritelog("-------总部通用付款Excel解析文件参数:-------" + params.toString()); + int fileId = Util.getIntValue((String) params.get("fileId")); + InputStream inputStream = ImageFileManager.getInputStreamById(fileId); + XSSFWorkbook book = new XSSFWorkbook(inputStream); + List rowList = getXSSFRowList(book); + List detailList = getDataList(rowList); + return detailList; + } + + //只取第一个sheet + private List getXSSFRowList(XSSFWorkbook xssfWorkbook) { + List rowList = new ArrayList(); + // 循环工作表Sheet + XSSFSheet sheetAt = xssfWorkbook.getSheetAt(0); + List list = getRowObj(sheetAt); + rowList.addAll(list); + //只取第一个sheet,后续sheet为标识,不能处理 +// for (int numSheet = 0; numSheet < xssfWorkbook.getNumberOfSheets(); numSheet++) { +// XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(numSheet); +// if (xssfSheet == null) { +// continue; +// } else { +// List list = getRowObj(xssfSheet); +// rowList.addAll(list); +// } +// } + return rowList; + } + + // 将表变成行对象返回 + private List getRowObj(XSSFSheet pageObj) { + // 循环工作表Sheet + List rowList = new ArrayList(); + // 循环行Row + for (int rowNum = 0; rowNum <= pageObj.getLastRowNum(); rowNum++) { + XSSFRow xssfRow = pageObj.getRow(rowNum); + if (xssfRow == null) { + continue; + } + //将不为空的行放入 + rowList.add(xssfRow); + } + return rowList; + } + + private List getDataList(List rowList) throws Exception { + List dataList = new ArrayList(); + List itemNameList = new ArrayList(); + List relationCodeList = new ArrayList(); + List slNameList = new ArrayList(); + List slDisorderList = new ArrayList(); + try { + String sqlname = "select name from mode_selectitempagedetail where mainid in ( select id from mode_selectitempage t where t.cubeuuid='B89F75E7D6707CCCE05331353DA877B5') order by id"; + RecordSet rs0 = new RecordSet(); + rs0.execute(sqlname); + while (rs0.next()) { + itemNameList.add(Util.null2String(rs0.getString("name"))); + } + String sqlcode = "select hl from uf_bz_hl order by bz"; + RecordSet rs1 = new RecordSet(); + rs1.execute(sqlcode); + while (rs1.next()) { + relationCodeList.add(Util.null2String(rs1.getString("hl"))); + } + String sqlsl = "select name,disorder from mode_selectitempagedetail where mainid in ( select id from mode_selectitempage t where t.cubeuuid='B89FDE40168B7CABE05331353DA8AED1') order by id"; + RecordSet rs2 = new RecordSet(); + rs2.execute(sqlsl); + while (rs2.next()) { + if ("0".equals(rs2.getString("name"))) { + slNameList.add("0%"); + } else { + slNameList.add(Util.null2String(rs2.getString("name"))); + } + slDisorderList.add(Util.null2String(rs2.getString("disorder"))); + } + } catch (Exception e) { + e.printStackTrace(); + } + Map indexMap = getIndexMap(rowList); + for (int rowNum = 0; rowNum < rowList.size(); rowNum++) { + HTPaymentCostDetail detailObj = new HTPaymentCostDetail(); + XSSFRow xssfRow = rowList.get(rowNum); + if (xssfRow == null) { + continue; + } + for (int cellNum = 0; cellNum <= xssfRow.getLastCellNum(); cellNum++) { + XSSFCell xssfCell = xssfRow.getCell(cellNum); + if (xssfCell == null || cellNum == 4 || cellNum == 5 || cellNum == 9) { + continue; + } else { + String cellValue = getValue(xssfCell); +// cellValue=cellValue.replace(" ", ""); + cellValue = cellValue.replaceAll("\\z\\n\\t\\r", ""); + if (indexMap.isEmpty()) { + throw new Exception("因没找到对应文件解析EXCEL文件失败"); + } else { + Integer titleRow = indexMap.get("titleRow"); + if (titleRow == null || titleRow < 0) { + throw new Exception("因没找到对应的标题所在的行号,解析EXCEL文件失败"); + } else if (indexMap.get(COST_DEPT) == null || indexMap.get(COST_DEPT) < 0) { + throw new Exception("没有填写相应费用实际承担部门编号,解析EXCEL文件失败"); + } else if (indexMap.get(BUDGET_ITEM) == null || indexMap.get(BUDGET_ITEM) < 0) { + throw new Exception("没有填写相应费用预算编号,解析EXCEL文件失败"); + } else if (indexMap.get(CURRENCY_KIND) == null || indexMap.get(CURRENCY_KIND) < 0) { + throw new Exception("没有填写相应货币类型,解析EXCEL文件失败"); + } else { + if (xssfCell.getRowIndex() == titleRow) { + break; + } else { + if (indexMap.get(this.COST_DEPT) == xssfCell.getColumnIndex()) { + String deptid = ""; + String departmentname = ""; + RecordSet rs = new RecordSet(); + String sql = " select id,departmentname from hrmdepartment l where l.departmentcode = '" + cellValue + "'"; + rs.execute(sql); + if (rs.next()) { + deptid = Util.null2String(rs.getString("id")); + departmentname = Util.null2String(rs.getString("departmentname")); + } + + if (StringUtils.isEmpty( cellValue)) { + break; + } + if (StringUtils.isEmpty( deptid) || "" == deptid) { + throw new Exception( "费用实际承担部门编号错误!请检查EXCEL文件第" + (rowNum + 1) + "行"); + } + detailObj.setAssumeDeptCode(deptid); + detailObj.setAssumeDept(departmentname); + } else if (indexMap.get(this.BUDGET_ITEM) == xssfCell.getColumnIndex()) { + setBudgetDetail(cellValue, detailObj); + } else if (indexMap.get(this.NOTTAX_MONEY) == xssfCell.getColumnIndex()) { + detailObj.setNotaxMoney(StringUtils.isNotEmpty(cellValue) ? cellValue : "0"); + } else if (indexMap.get(this.TAX_RATE) == xssfCell.getColumnIndex()) { + detailObj.setTaxRate(StringUtils.isNotEmpty(cellValue) ? cellValue : "0"); + } else if (indexMap.get(this.CURRENCY) == xssfCell.getColumnIndex()) { + detailObj.setMoneyKind(cellValue); + if (itemNameList.contains(cellValue)) { + detailObj.setMoneyKindCode(itemNameList.indexOf(cellValue)); + } else { + detailObj.setMoneyKindCode(0); + } + } else if (indexMap.get(this.FOREIGN_CURRENCY_MONEY) == xssfCell.getColumnIndex()) { + detailObj.setForeignCurrencyMoney(StringUtils.isNotEmpty(cellValue) ? cellValue : "0"); + } else if (indexMap.get(this.REASON) == xssfCell.getColumnIndex()) { + detailObj.setReason(cellValue); + } else if (indexMap.get(this.CURRENCY_KIND) == xssfCell.getColumnIndex()) { + if (StringUtils.isEmpty(cellValue) || (!"本币".equals(cellValue) && !"外币".equals(cellValue))) { + throw new Exception("第" + (rowNum + 1) + "行,货币类型为空或错误!"); + } + detailObj.setCurrencyKind(cellValue); + } + } + } + } + } + } + if (StringUtils.isNotEmpty(detailObj.getAssumeDeptCode()) && null != detailObj.getEstimateProjectCode()) { + if ("外币".equals(detailObj.getCurrencyKind())) { + boolean flag = true; + if (StringUtils.isEmpty(detailObj.getMoneyKind())) { + throw new Exception("第" + (rowNum + 1) + "行,请填写币种!"); + } + for (int i = 0; i < itemNameList.size(); i++) { + if (detailObj.getMoneyKind().equals(itemNameList.get(i))) { + BigDecimal b1 = new BigDecimal(detailObj.getForeignCurrencyMoney()); + BigDecimal b2 = new BigDecimal(relationCodeList.get(i)); + double money = b1.multiply(b2).doubleValue(); + DecimalFormat df = new DecimalFormat("#.##"); + df.setRoundingMode(RoundingMode.HALF_UP); + detailObj.setMoney(Double.parseDouble(df.format(money))); + detailObj.setTaxMoney("0"); + detailObj.setTaxRate("0"); + detailObj.setNotaxMoney("0"); + detailObj.setExchangeRate(relationCodeList.get(i)); + flag = false; + break; + } + } + if (flag) { + throw new Exception("第" + (rowNum + 1) + "行,请填写正确的币种!"); + } + } else { + if (StringUtils.isEmpty(detailObj.getNotaxMoney())) { + throw new Exception("第" + (rowNum + 1) + "行,请填写不含税金额!"); + } else if (StringUtils.isEmpty(detailObj.getTaxRate()) || (!"0".equals(detailObj.getTaxRate()) && + !"3%".equals(detailObj.getTaxRate()) && !"5%".equals(detailObj.getTaxRate()) && + !"6%".equals(detailObj.getTaxRate()) && !"11%".equals(detailObj.getTaxRate()) && + !"13%".equals(detailObj.getTaxRate()) && !"17%".equals(detailObj.getTaxRate()) && + !"16%".equals(detailObj.getTaxRate()) && !"10%".equals(detailObj.getTaxRate()) && + !"0.03".equals(detailObj.getTaxRate()) && !"0.05".equals(detailObj.getTaxRate()) && + !"0.06".equals(detailObj.getTaxRate()) && !"0.11".equals(detailObj.getTaxRate()) && + !"0.13".equals(detailObj.getTaxRate()) && !"0.17".equals(detailObj.getTaxRate()) && + !"0.16".equals(detailObj.getTaxRate()) && !"0.1".equals(detailObj.getTaxRate()))) { + throw new Exception("第" + (rowNum + 1) + "行,汇率为空或汇率错误!"); + } + BigDecimal b1 = new BigDecimal(detailObj.getNotaxMoney()); + BigDecimal b2 = new BigDecimal(detailObj.getTaxRate().replace("%", "")); + BigDecimal b3 = new BigDecimal("100"); + DecimalFormat df = new DecimalFormat("#.##"); + double taxMoney = 0; + if (b2.doubleValue() > 1) { + taxMoney = b1.multiply(b2).divide(b3).doubleValue(); + if (detailObj.getTaxRate().indexOf("%") == -1) { + detailObj.setTaxRate(detailObj.getTaxRate() + "%"); + } + } else { + taxMoney = b1.multiply(b2).doubleValue(); + detailObj.setTaxRate(df.format(b3.multiply(b2).doubleValue()) + "%"); + } + df.setRoundingMode(RoundingMode.HALF_UP); + detailObj.setTaxMoney(df.format(taxMoney)); + BigDecimal b4 = new BigDecimal(detailObj.getTaxMoney()); + detailObj.setMoney(Double.parseDouble(b4.add(b1).toString())); + detailObj.setForeignCurrencyMoney("0"); + detailObj.setTaxRateCode(Integer.parseInt(slDisorderList.get(slNameList.indexOf(detailObj.getTaxRate())))); + } + dataList.add(detailObj); + } + } + return dataList; + } + + private Map getIndexMap(List rowList) { + Map indexMap = new HashMap(); + for (int rowNum = 0; rowNum < rowList.size(); rowNum++) { + XSSFRow xssfRow = rowList.get(rowNum); + if (xssfRow == null) { + continue; + } + Boolean blag = true; + // 循环列Cell 获取字段相对应的列号。 + for (int cellNum = 0; cellNum <= xssfRow.getLastCellNum(); cellNum++) { + XSSFCell xssfCell = xssfRow.getCell(cellNum); + if (xssfCell == null || cellNum == 4 || cellNum == 5 || cellNum == 9) { + continue; + } else { + if (!"0".equals(getValue(xssfCell))) { + String cellValue = getValue(xssfCell); + if (cellValue.equals(this.COST_DEPT)) { + if (blag) { + indexMap.put("titleRow", xssfCell.getRowIndex()); + blag = false; + } + indexMap.put(this.COST_DEPT, xssfCell.getColumnIndex()); + } else if (cellValue.equals(this.BUDGET_ITEM)) { + indexMap.put(this.BUDGET_ITEM, xssfCell.getColumnIndex()); + } else if (cellValue.equals(this.NOTTAX_MONEY)) { + indexMap.put(this.NOTTAX_MONEY, xssfCell.getColumnIndex()); + } else if (cellValue.equals(this.TAX_RATE)) { + indexMap.put(this.TAX_RATE, xssfCell.getColumnIndex()); + } else if (cellValue.equals(this.CURRENCY)) { + indexMap.put(this.CURRENCY, xssfCell.getColumnIndex()); + } else if (cellValue.equals(this.FOREIGN_CURRENCY_MONEY)) { + indexMap.put(this.FOREIGN_CURRENCY_MONEY, xssfCell.getColumnIndex()); + } else if (cellValue.equals(this.REASON)) { + indexMap.put(this.REASON, xssfCell.getColumnIndex()); + } else if (cellValue.equals(this.CURRENCY_KIND)) { + indexMap.put(this.CURRENCY_KIND, xssfCell.getColumnIndex()); + } + } + } + } + } + return indexMap; + + } + + private String getValue(XSSFCell xssfCell) { + if (xssfCell.getCellType().getCode() == 4) { + return String.valueOf(xssfCell.getBooleanCellValue()); + } else if (xssfCell.getCellType().getCode() == 0) { + DecimalFormat df = new DecimalFormat("#.##"); + return df.format(xssfCell.getNumericCellValue()); + } else { + return String.valueOf(xssfCell.getStringCellValue()); + } + } + + public void setBudgetDetail(String budgetCode, HTPaymentCostDetail detailObj) { + Map budgetItem = getDataItemByCode(budgetCode, this.TYPE_HTZXYSKM); + if (null == budgetItem) { + budgetItem = getDataItemByCode(budgetCode, this.TYPE_HTYBYSKM); + if (null == budgetItem) { + budgetItem = getDataItemByCode(budgetCode, this.TYPE_HTZBYSKM); + if (null == budgetItem) { + budgetItem = getDataItemByCode(budgetCode, this.TYPE_HTQTYSKM); + if (null == budgetItem) { + budgetItem = getDataItemByCode(budgetCode, this.TYPE_HTZJYSKM); + } + } + } + } + detailObj.setIsOutBuadge( budgetItem.get("cyskz")); + detailObj.setEstimateProject( budgetItem.get("yskmmc")); + detailObj.setEstimateProjectCode( budgetItem.get("yskmbm")); + } + + public Map getDataItemByCode(String code, String typeCode) { + Map map = new HashMap<>(); + String sqlMaxid = "select id,sjyskm,yskmmc,yskmbm,cyskz from uf_kmpz where YSKMBM = '" + code + "' and typeCode='" + typeCode + "'"; + RecordSet rs = new RecordSet(); + rs.execute(sqlMaxid); + if (rs.next()) { + map.put("id", Util.null2String(rs.getString("id"))); + map.put("sjyskm", Util.null2String(rs.getString("sjyskm"))); + map.put("yskmmc", Util.null2String(rs.getString("yskmmc"))); + map.put("yskmbm", Util.null2String(rs.getString("yskmbm"))); + map.put("cyskz", Util.null2String(rs.getString("cyskz"))); + } + if (null != map && map.size() > 0) { + return map; + } else { + return null; + } + } + + @Override + public JSONArray readByImageId(int imageId,String ngrid) throws Exception { + List source = read2List(imageId); + RecordSet sqlFindCode = new RecordSet(); + //获取拟稿人工号 + String workCode = ""; + String sql = "SELECT WORKCODE FROM HRMRESOURCE h WHERE id = "+ ngrid; + sqlFindCode.execute(sql); + if (sqlFindCode.next()){ + workCode = Util.null2String(sqlFindCode.getString("WORKCODE")); + } + JAVATools.SetCmdwritelog(String.format("联合通用付款导入Excel获取 image id: %d, and workCode id: %s", imageId,workCode)); + JSONArray jsa = new JSONArray(); + for (PayLhExcelData d : source) { + JSONObject jso = new JSONObject(); + jso.put("payForDept", BizUtil.getDidByCode(d.getPayForDept())); + jso.put("estimateProjectCode",BizUtil.getBudgetObj(d.getEstimateProjectCode(),"1") ); + jso.put("notaxMoney", d.getNotaxMoney()); + jso.put("taxMoney", d.getTaxMoney()); + jso.put("allMoney", d.getAllMoney()); + jso.put("projectCode",StringUtils.isNotBlank(d.getProjectCode()) ? BizUtil.getProjectBrowserByCode(workCode, d.getProjectCode()) : ""); + jsa.add(jso); + } + JAVATools.SetCmdwritelog(String.format("联合通用付款导入Excel完成 jsa: %s",jsa.toString())); + return jsa; + } + + private List read2List(int imageFileId) throws Exception { + JAVATools.SetCmdwritelog(String.format("开始读取 imageFileId: %d",imageFileId)); + InputStream fis = ImageFileManager.getInputStreamById(imageFileId); + JAVATools.SetCmdwritelog(String.format("获得 fis: %s", IOUtils.toString(fis))); + ExcelDataListener listener = new ExcelDataListener<>(); + // 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭 + JAVATools.SetCmdwritelog("开始读取第一个"); + EasyExcel.read(ImageFileManager.getInputStreamById(imageFileId), PayLhExcelData.class, listener).sheet().doRead(); + JAVATools.SetCmdwritelog(String.format("读取完成 List: %s",listener.getList().toString())); + return listener.getList(); + } +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/PaymentQueryDetailServiceImpl.java b/src/main/java/com/engine/htsc/payment/service/impl/PaymentQueryDetailServiceImpl.java new file mode 100644 index 0000000..61ae84f --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/PaymentQueryDetailServiceImpl.java @@ -0,0 +1,287 @@ +package com.engine.htsc.payment.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.payment.service.PaymentQueryDetailService; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.conn.RecordSet; +import weaver.general.Util; + +public class PaymentQueryDetailServiceImpl extends Service implements PaymentQueryDetailService { + + private Log log = LogFactory.getLog(this.getClass()); + + @Override + public List> getDetailInfo(Map params) { + int requestId = Util.getIntValue((String) params.get("requestId")); + int bmbm = Util.getIntValue((String) params.get("bmbm")); + String type = Util.null2String(params.get("type")); + if (StringUtils.isBlank(type)) { + log.info("input param type can not be empty or null!"); + return null; + } + String slptly = null; + if (type.contains("-")) { + String[] split = type.split("-"); + slptly = split[0].toUpperCase(); + type = split[1]; + } + RecordSet rs = new RecordSet(); + String tablename = "formtable_main_"; + String tableSql = "select formid from workflow_base where id = " + + "(select workflowid from workflow_requestbase where requestid = " + requestId + ")"; + rs.execute(tableSql); + if (rs.next()) { + int formid = Math.abs(Util.getIntValue(rs.getString("formid"))); + tablename = tablename + formid; + } + //查询主表id + int mainId = -1; + rs.executeQuery(String.format("select id from %s where requestid = ?", tablename), requestId); + while (rs.next()) { + mainId = Util.getIntValue(rs.getString("id")); + } + if (mainId == -1) { + log.info("get maintable id failed!"); + return null; + } + if ("plane".equals(type)) { + log.info("query plane order detail"); + return getPlaneDetail(bmbm, tablename, mainId, slptly); + } + if ("train".equals(type)) { + log.info("query train order detail"); + return getTrainDetail(bmbm, tablename, mainId, slptly); + } + if ("car".equals(type)) { + log.info("query car order detail"); + return getCarDetail(bmbm, tablename, mainId, slptly); + } + if ("hotel".equals(type)) { + log.info("query hotel order detail"); + return getHotelDetail(bmbm, tablename, mainId, slptly); + } + if ("allowance".equals(type)) { + log.info("query allowance detail"); + return getAllowanceDetail(bmbm, tablename, mainId); + } + return null; + } + + private String getDepartmentName(String deptCode) { + String deptName = ""; + RecordSet rs = new RecordSet(); + rs.executeQuery("select departmentname from hrmdepartment where departmentcode= ?", deptCode); + while (rs.next()) { + deptName = Util.null2String(rs.getString("departmentname")); + } + return deptName; + } + + private List> getPlaneDetail(int bmbm, String tablename, int mainid, + String slptly) { + List> result = new ArrayList<>(); + RecordSet rs = new RecordSet(); + tablename = tablename + "_dt15"; + if (slptly == null) { + rs.executeQuery(String.format("select * from %s where mainid = ? and bmbm = ?", tablename), + mainid, bmbm); + } else { + rs.executeQuery( + String.format("select * from %s where mainid = ? and bmbm = ? and slptly = ?", tablename), + mainid, bmbm, slptly); + } + while (rs.next()) { + Map map = new HashMap<>(); + map.put("fycdbm", getDepartmentName(rs.getString("fycdbm"))); + map.put("yggh", rs.getString("yggh")); + map.put("cjr", rs.getString("cjr")); + map.put("ccsqbh", rs.getString("ccsqbh")); + map.put("cjjj", rs.getString("cjjj")); + map.put("ry", rs.getString("ry")); + map.put("pmje", rs.getString("pmje")); + map.put("tpf", rs.getString("tpf")); + map.put("gqf", rs.getString("gqf")); + map.put("fwf", rs.getString("fwf")); + map.put("kdkse", rs.getString("kdkse")); + map.put("bkdkse", rs.getString("bkdkse")); + map.put("spf", rs.getString("spf")); + map.put("bxf", rs.getString("bxf")); + map.put("gqcj", rs.getString("gqcj")); + map.put("hj", rs.getString("hj")); + map.put("cfsj", rs.getString("cfsj")); + map.put("cfcs", rs.getString("cfcs")); + map.put("cfjc", rs.getString("cfjc")); + map.put("ddsj", rs.getString("ddsj")); + map.put("ddcs", rs.getString("ddcs")); + map.put("ddjc", rs.getString("ddjc")); + map.put("hbh", rs.getString("hbh")); + map.put("fxsc", rs.getString("fxsc")); + map.put("ddh", rs.getString("ddh")); + map.put("ddlx", rs.getString("ddlx")); + map.put("zkl", rs.getString("zkl")); + map.put("djhbjg", rs.getString("djhbjg")); + map.put("wxdjhbyy", rs.getString("wxdjhbyy")); + map.put("bmbm", rs.getString("bmbm")); + map.put("ygbm", rs.getString("ygbm")); + map.put("slptly", rs.getString("slptly")); + result.add(map); + } + return result; + } + + private List> getTrainDetail(int bmbm, String tablename, int mainid, + String slptly) { + List> result = new ArrayList<>(); + RecordSet rs = new RecordSet(); + tablename = tablename + "_dt16"; + if (slptly == null) { + rs.executeQuery(String.format("select * from %s where mainid = ? and bmbm = ?", tablename), + mainid, bmbm); + } else { + rs.executeQuery( + String.format("select * from %s where mainid = ? and bmbm = ? and slptly = ?", tablename), + mainid, bmbm, slptly); + } + while (rs.next()) { + Map map = new HashMap<>(); + map.put("fycdbm", getDepartmentName(rs.getString("fycdbm"))); + map.put("yggh", rs.getString("yggh")); + map.put("ccr", rs.getString("ccr")); + map.put("ccsqbh", rs.getString("ccsqbh")); + map.put("pmje", rs.getString("pmje")); + map.put("fwf", rs.getString("fwf")); + map.put("hhzfwfje", rs.getString("hhzfwfje")); + map.put("tpfy", rs.getString("tpfy")); + map.put("hj", rs.getString("hj")); + map.put("cfsj", rs.getString("cfsj")); + map.put("cfcs", rs.getString("cfcs")); + map.put("cfcz", rs.getString("cfcz")); + map.put("ddsj", rs.getString("ddsj")); + map.put("ddcs", rs.getString("ddcs")); + map.put("ddcz", rs.getString("ddcz")); + map.put("cc", rs.getString("cc")); + map.put("xb", rs.getString("xb")); + map.put("ddh", rs.getString("ddh")); + map.put("ddlx", rs.getString("ddlx")); + map.put("bmbm", rs.getString("bmbm")); + map.put("ygbm", rs.getString("ygbm")); + map.put("slptly", rs.getString("slptly")); + result.add(map); + } + return result; + } + + private List> getCarDetail(int bmbm, String tablename, int mainid, + String slptly) { + List> result = new ArrayList<>(); + RecordSet rs = new RecordSet(); + tablename = tablename + "_dt18"; + if (slptly == null) { + rs.executeQuery(String.format("select * from %s where mainid = ? and bmbm = ?", tablename), + mainid, bmbm); + } else { + rs.executeQuery( + String.format("select * from %s where mainid = ? and bmbm = ? and slptly = ?", tablename), + mainid, bmbm, slptly); + } + while (rs.next()) { + Map map = new HashMap<>(); + map.put("fycdbm", getDepartmentName(rs.getString("fycdbm"))); + map.put("yggh", rs.getString("yggh")); + map.put("ccr", rs.getString("ccr")); + map.put("ccsqbh", rs.getString("ccsqbh")); + map.put("jj", rs.getString("jj")); + map.put("fwf", rs.getString("fwf")); + map.put("jsse", rs.getString("jsse")); + map.put("hj", rs.getString("hj")); + map.put("cfsj", rs.getString("cfsj")); + map.put("ddsj", rs.getString("ddsj")); + map.put("cfcs", rs.getString("cfcs")); + map.put("ddcs", rs.getString("ddcs")); + map.put("cfdz", rs.getString("cfdz")); + map.put("dddz", rs.getString("dddz")); + map.put("jl", rs.getString("jl")); + map.put("sc", rs.getString("sc")); + map.put("ddh", rs.getString("ddh")); + map.put("ddzt", rs.getString("ddzt")); + map.put("jcfymx", rs.getString("jcfymx")); + map.put("zzfy", rs.getString("zzfy")); + map.put("wyj", rs.getString("wyj")); + map.put("kdfy", rs.getString("kdfy")); + map.put("bmbm", rs.getString("bmbm")); + map.put("ygbm", rs.getString("ygbm")); + map.put("slptly", rs.getString("slptly")); + result.add(map); + } + return result; + } + + private List> getHotelDetail(int bmbm, String tablename, int mainid, + String slptly) { + List> result = new ArrayList<>(); + RecordSet rs = new RecordSet(); + tablename = tablename + "_dt17"; + if (slptly == null) { + rs.executeQuery(String.format("select * from %s where mainid = ? and bmbm = ?", tablename), + mainid, bmbm); + } else { + rs.executeQuery( + String.format("select * from %s where mainid = ? and bmbm = ? and slptly = ?", tablename), + mainid, bmbm, slptly); + } + while (rs.next()) { + Map map = new HashMap<>(); + map.put("fycdbm", getDepartmentName(rs.getString("fycdbm"))); + map.put("yggh", rs.getString("yggh")); + map.put("rzr", rs.getString("rzr")); + map.put("ccsqbh", rs.getString("ccsqbh")); + map.put("zszje", rs.getString("zszje")); + map.put("dj", rs.getString("dj")); + map.put("jys", rs.getString("jys")); + map.put("sfkzp", rs.getString("sfkzp")); + map.put("kzpsxf", rs.getString("kzpsxf")); + map.put("fwf", rs.getString("fwf")); + map.put("hj", rs.getString("hj")); + map.put("fjm", rs.getString("fjm")); + map.put("rzsj", rs.getString("rzsj")); + map.put("ldsj", rs.getString("ldsj")); + map.put("cs", rs.getString("cs")); + map.put("jdm", rs.getString("jdm")); + map.put("ddh", rs.getString("ddh")); + map.put("bmbm", rs.getString("bmbm")); + map.put("ygbm", rs.getString("ygbm")); + map.put("slptly", rs.getString("slptly")); + result.add(map); + } + return result; + } + + private List> getAllowanceDetail(int bmbm, String tablename, int mainid) { + List> result = new ArrayList<>(); + RecordSet rs = new RecordSet(); + tablename = tablename + "_dt19"; + rs.executeQuery(String.format("select * from %s where mainid = ? and bmbm = ?", tablename), + mainid, bmbm); + while (rs.next()) { + Map map = new HashMap<>(); + map.put("cbje", rs.getString("cbje")); + map.put("gh", rs.getString("gh")); + map.put("xm", rs.getString("xm")); + map.put("ccrbm", rs.getString("ccrbm")); + map.put("lcbh", rs.getString("lcbh")); + map.put("lcbt", rs.getString("lcbt")); + map.put("khx", rs.getString("khx")); + map.put("kh", rs.getString("kh")); + map.put("bmbm", rs.getString("bmbm")); + map.put("ygbm", rs.getString("ygbm")); + result.add(map); + } + return result; + } +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/PaymentServiceImpl.java b/src/main/java/com/engine/htsc/payment/service/impl/PaymentServiceImpl.java new file mode 100644 index 0000000..e617164 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/PaymentServiceImpl.java @@ -0,0 +1,1331 @@ +package com.engine.htsc.payment.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.api.htsc.businessMethod.SubUnionBizUtil; +import com.engine.core.impl.Service; +import com.engine.htsc.payment.dao.BudgetDao; +import com.engine.htsc.payment.dao.PaymentDao; +import com.engine.htsc.payment.enums.DataSourceName; +import com.engine.htsc.payment.enums.Sequences; +import com.engine.htsc.payment.pojo.*; +import com.engine.htsc.payment.service.BudgetCommand; +import com.engine.htsc.payment.service.BudgetService; +import com.engine.htsc.payment.service.PaymentService; +import com.engine.htsc.payment.util.*; +import com.engine.htsc.trip.util.WeaverUtil; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.conn.RecordSet; +import weaver.conn.RecordSetTrans; +import weaver.formmode.setup.ModeRightInfo; +import weaver.formmode.virtualform.VirtualFormHandler; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.interfaces.htsc.cus.HTUtil; +import weaver.workflow.workflow.WorkflowBillComInfo; + +import javax.servlet.http.HttpServletRequest; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +public class PaymentServiceImpl extends Service implements PaymentService { + + private final Log log = LogFactory.getLog(PaymentServiceImpl.class); + + private final PaymentDao pd = new PaymentDao(); + + @Override + public String checkRequestMark(String lcbh, + String type, String unNumber) throws Exception { + int count = 1; + RecordSet rs = new RecordSet(); + String tableName = PayUtil.getTableNameByUnNumber(unNumber); + + rs.writeLog(String.format("checkRequestMark, unNumber:%s; lcbh:%s", unNumber, lcbh)); + rs.executeQuery("SELECT COUNT(*) as n FROM "+tableName+" fm WHERE fm.lcbh = ?", lcbh); + if (rs.next()) { + count = rs.getInt("n"); + } + if (count > 1) { + Sequences sequences = null; + if ("0".equals(type)) { + sequences = Sequences.NET_REI_WORKFLOW_SEQ_ZB; + } else if ("1".equals(type)) { + sequences = Sequences.NET_REI_WORKFLOW_SEQ_FZ; + } else if ("2".equals(type)) { + sequences = Sequences.NET_REI_WORKFLOW_SEQ_ZGS; + } else { + throw new Exception("流程类型没有匹配"); + } + return CoWfUtil.getRequestMarkByUnNumber(unNumber, sequences); + + } + return ""; + } + + @Override + public Map controlBudget(BudgetReqDto bgRd) throws Exception { + log.info("总部差旅报销超预算入参:" + bgRd.toString()); + Map resp = new HashMap<>(); + String bgItem = bgRd.getBgItem(); + if (StringUtils.isBlank(bgItem)) { + throw new Exception("超预算入参,bgItem不能为空"); + } + HTUtil ht = new HTUtil(); + DepartmentComInfo dc = new DepartmentComInfo(); + String bmCode = dc.getDepartmentCode(bgRd.getDeptCode()); + Arrays.stream(bgItem.split(",")).forEach(item -> { + Map reqs = new HashMap<>(); + reqs.put("deptNum", bmCode); + reqs.put("deptType", PayUtil.getDeptTypeCode(bgRd.getDeptCode())); + reqs.put("Bgitem", item); + reqs.put("BgPeriod", bgRd.getBgPeriod()); + + log.info("总部差旅报销超预算预算参数:" + reqs); + String budget = ht.getBudget(reqs); + + resp.put(item, budget); + }); + log.info("总部差旅报销超预算预算返回参数:" + JSONObject.toJSONString(resp)); + return resp; + } + + @Override + public Map queryExchangeRate() throws Exception { + RecordSet rs = new RecordSet(); + Map resp = new HashMap<>(); + try { + rs.executeQuery("select BZ,HL from UF_BZ_HL order by BZ"); + while (rs.next()) { + resp.put(rs.getString("BZ"), rs.getString("HL")); + } + return resp; + } catch (Exception e) { + throw new Exception("获取汇率数据异常,error:" + e.getMessage()); + } + } + + @Override + public String queryContractPaidMoney(String contractCode, String processCode) throws Exception { + try { + String queryPaidMoneyUrl = new PropBean().getPropName("queryPaidMoneyUrl"); + Map requestDTO = new HashMap<>(); + requestDTO.put("sysCode", "OA"); + requestDTO.put("moduleCode", "CTRCT"); + requestDTO.put("ctrctCode", contractCode); + requestDTO.put("processCode", processCode); + return HttpUtil.postApplicationJson(queryPaidMoneyUrl, requestDTO, new HTUtil().getAppHeader()); + } catch (Exception e) { + throw new Exception("查询合同已付金额的接口调用异常"); + } + } + + @Override + public Map doBudget(String ids, String isDiscard) { + log.info("====PaymentServiceImpl.doBudget====预算接口调用@ \nids=" + ids + "@isDiscard=" + isDiscard); + List idList = Arrays.asList(ids.split(",")); + if (CollectionUtils.isEmpty(idList)) { + log.info("====预算传入的id和type不能为空"); + Map res = new HashMap<>(); + res.put("预算接口入参错误", "id为空"); + return res; + } + //匹配id对应的付款类型和流程id + String idCondition = String.join("','", ids.split(",")); + String sql = "select tbdlcyszt, FKLX,REQUTID,LCBH,FKZT from UF_ZBFK where ID in('" + idCondition + "')"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql); + List typeList = new ArrayList<>(); + List reqNoList = new ArrayList<>(); + List reqMark = new ArrayList<>(); + List fkztList = new ArrayList<>(); + List tbdlcysztList = new ArrayList<>(); + while (rs.next()) { + typeList.add(rs.getString("FKLX")); + reqNoList.add(rs.getString("REQUTID")); + reqMark.add(rs.getString("LCBH")); + fkztList.add(rs.getString("FKZT")); + tbdlcysztList.add(rs.getString("tbdlcyszt")); + } + log.info("====预算id对应的流程类型@" + typeList); + log.info("====预算id对应的流程编号@" + reqNoList); + //遍历list核算 + Map results = new HashMap<>(); + try { + for (int i = 0; i < idList.size(); i++) { + if ("2".equals(fkztList.get(i))) { //已废弃 + results.put(reqMark.get(i), "流程已废弃,无法付款"); + continue; + } + if ("0".equals(tbdlcysztList.get(i))) { //已同步 + results.put(reqMark.get(i), "预算已经同步,禁止再次提交"); + continue; + } + String lb = typeList.get(i); + String rn = reqNoList.get(i); + String rm = reqMark.get(i); + log.info("当前遍历的流程@" + rm); + // 0 总部通用付款,1 总部IT付款,2 总部工会付款,9 总部通用报销,10 总部差旅报销 + BudgetCommand budgetCommand = BizUtils.getBudgetCommentByLb(lb); + + if ("1".equals(lb)) { + //it 流程特殊处理 + boolean flag = BizUtils.whetherItOrTy(rn); + log.info("当前it付款为:false为it付款 @" + flag); + if (!flag) { + //作it付款处理 + budgetCommand = new ITHeadPaymentBudgetCommand(); + } + } + + //判断是否为废弃 + if ("0".equals(isDiscard)) { + //废弃 + log.info("废弃"); + String result = budgetCommand.reject(rn); + if ("F1001".equals(result)) { + //更新预算状态 + results.put(rm, "废弃成功"); + rs.executeQuery("update UF_ZBFK set TBDLCZT=2,TBDLCYSZT=2,fkzt=2 where REQUTID=" + rn); + //废弃后更新发票关联关系: uf_pjxxgl 浪潮 + BizUtils bizUtils = new BizUtils(); + bizUtils.cancelInvLink(rn); + } else { + results.put(rm, "废弃失败,返回值:" + result); + } + } else { + String result = budgetCommand.finish(rn); + if ("F1001".equals(result)) { + //更新预算状态 + results.put(rm, "预算成功"); + rs.executeQuery("update UF_ZBFK set TBDLCYSZT=0 where REQUTID=" + rn); + //预算成功时,当核算为成功状态,更新付款状态为已付款 + rs.executeQuery("update UF_ZBFK set FKZT=0 where TBDLCZT=0 and REQUTID=" + rn); + } else { + results.put(rm, "预算失败,返回值:" + result); + } + } + + } + } catch (Exception e) { + e.printStackTrace(); + results.put("预算失败", e.getMessage()); + } + + return results; + } + + @Override + public String doExport(String id, String type) { + String sqlCondition = String.join("','", id.split(",")); + String sql = ""; + if ("0".equals(type) || StringUtils.isEmpty(type)) { + log.info("====更新导出状态 总部@" + id); + sql = "update UF_ZBFK set SFDC=0 where id in('" + sqlCondition + "')"; + } else if ("1".equals(type)) { + log.info("====更新导出状态 联合@" + id); + sql = "update uf_zfmx set dc=0 where id in('" + sqlCondition + "')"; + } + RecordSetTrans rst = new RecordSetTrans(); + try { + rst.setAutoCommit(false); + log.info("====更新导出状态@" + id); + rst.executeUpdate(sql); + rst.commit(); + return String.format("%s 导出状态更新成功.", id); + } catch (Exception e) { + rst.rollback(); + e.printStackTrace(); + return "更新导出状态失败: " + e.getMessage(); + } + } + + @Override + public String updateManualPaymentStatus(String id) { + log.info("====更新手动付款状态@" + id); + if ("".equals(id)) { + return "请勾选相关流程进行状态更改"; + } + RecordSetTrans rst = new RecordSetTrans(); + rst.setAutoCommit(false); + try { + String sqlCondition = String.join("','", id.split(",")); + String sql = "SELECT ID,FKZT,LCBH FROM uf_zbfk WHERE id IN ('"+sqlCondition+"')"; + rst.executeQuery(sql); + List notUpdateIds = new ArrayList<>(); + List updateIds = new ArrayList<>(); + while (rst.next()) { + String id1 = Util.null2String(rst.getString("ID")); + String lcbh = Util.null2String(rst.getString("LCBH")); + if ("2".equals(Util.null2String(rst.getString("FKZT")))) { //已废弃 + notUpdateIds.add(lcbh); + } else { + updateIds.add(id1); + } + } + rst.executeUpdate("update UF_ZBFK set FKFS=1,FKZT=0 where id in('" + String.join("','", updateIds) + "')"); + rst.commit(); + return "更新手动付款状态成功(注:id为 "+String.join(",", notUpdateIds)+" 已废弃,无法手动付款)"; + } catch (Exception e) { + rst.rollback(); + log.error("====更新手动付款状态失败,出现异常@" + e.getMessage()); + e.printStackTrace(); + return "更新手动付款状态出现异常"; + } + } + + @Override + public String queryVirtualDepartment(String deptId) { + log.info("====查询虚拟部门个数@" + deptId); + List deptIds = Arrays.asList(deptId.split(",")); + DepartmentComInfo dc = new DepartmentComInfo(); + String sqlValue = deptIds.stream().distinct().map(dc::getDepartmentCode).collect(Collectors.joining("','")); + log.info("====sql value@" + sqlValue); + RecordSet rs = new RecordSet(); + rs.executeQuery("select count(*) n from uf_fkxnbmpzb where DEPT_CODE in('" + sqlValue + "') and bs = '1'"); + if (rs.next()) { + return Util.null2String(rs.getString("n")); + } + return ""; + } + + @Override + public ContractInfoVo queryContractPagination(ContractRequestParam params) { + ContractInfoVo o = new ContractInfoVo(); + try { + log.info("合同esb接口请求参数,START> " + params + " " + queryContractUrl + " appHeader = htUtil.getAppHeader(); + log.info("getAppHeader@" + appHeader + "@"); + String res = HttpUtil.postApplicationJson(queryContractUrl, JSON.toJSONString(contractRequestJson), appHeader); + log.info("合同接口返回:START> " + res + " @" + condition + "@"); + log.info("it项目接口url:START> @" + itProjectsUrl + "@"); + HTUtil htUtil = new HTUtil(); + Map appHeader = htUtil.getAppHeader(); + log.info("getAppHeader@" + appHeader + "@"); + String res = HttpUtil.postApplicationJson(itProjectsUrl, JSON.toJSONString(new JSONArray()), appHeader); + log.info("it项目esb接口请求返回参数成功"); + //log.info("it项目esb接口请求返回参数@" + res); + @SuppressWarnings("unchecked") + List list = JSON.parseArray(res, TreeNode.class); +// itProjectVo.setTotal(list.size()); + //扁平化处理 + List treeNodes = TreeUtil.tree2list(list, null); + itProjectVo.setTotal(treeNodes.size()); + //数据清洗 +// treeNodes = treeNodes.stream().filter(TreeNode::qualify).collect(Collectors.toList()); + //回显 + if (StringUtils.isNotBlank(condition.getKey())) { + Pattern key = Pattern.compile(condition.getKey()); + treeNodes = treeNodes.stream() + .filter(node -> key.matcher(node.getKey()).matches()) + .collect(Collectors.toList()); + itProjectVo.setData(treeNodes); + itProjectVo.setOk(true); + return itProjectVo; + } + + if (StringUtils.isNotBlank(condition.getCode()) || StringUtils.isNotBlank(condition.getName())) { + Pattern name = Pattern.compile(condition.getName()); + Pattern code = Pattern.compile(condition.getCode()); + if (StringUtils.isBlank(condition.getCode())) { + treeNodes = treeNodes.stream() + .filter(node -> name.matcher(node.getName()).find()) + .collect(Collectors.toList()); + } else if (StringUtils.isBlank(condition.getName())) { + treeNodes = treeNodes.stream() + .filter(node -> code.matcher(node.getProjectCode()).find()) + .collect(Collectors.toList()); + } else { + treeNodes = treeNodes.stream().filter(node -> + name.matcher(node.getName()).find() && code.matcher(node.getProjectCode()).find()) + .collect(Collectors.toList()); + } + } else { + treeNodes = treeNodes.stream() + .skip((condition.getPageNo() - 1) * condition.getPageSize()) + .limit(condition.getPageSize()).collect(Collectors.toList()); + } + itProjectVo.setData(treeNodes); + itProjectVo.setOk(true); + return itProjectVo; + } + + @Override + public String getAccountCode(String budgetCode) { + PropBean pp = new PropBean(); + RecordSet rs = new RecordSet(); + String accountTreeId = pp.getPropName("accountTreeId"); + rs.writeLog("====accountTreeId@" + accountTreeId); + String sql = "SELECT t1.HJKMBM,t1.HJKMMC\n" + + "FROM UF_KJKMPZ t1\n" + + "LEFT OUTER JOIN UF_KJKMPZ_DT1 t2 on t1.id=t2.mainid\n" + + "WHERE (t2.yskm='" + budgetCode + "')"; + rs.writeLog("====sql@" + sql); + rs.executeQuery(sql); + String value = ""; + String name = ""; + if (rs.next()) { + value = Util.null2String(rs.getString("HJKMBM")); + name = Util.null2String(rs.getString("HJKMMC")); + } + rs.writeLog("====value@" + value); + rs.writeLog("====name@" + name); + if (StringUtils.isEmpty(value)) { + return ""; + } else { + return accountTreeId + "_" + value + "@" + name; + } + } + + @Override + public String getAccountCode4Lh(String budgetCode) { + PropBean pp = new PropBean(); + RecordSet rs = new RecordSet(); + String accountTreeId = pp.getPropName("accountTreeId4Lh"); + rs.writeLog("====accountTreeId@" + accountTreeId); + String sql = "SELECT t1.HJKMBM,t1.HJKMMC\n" + + "FROM UF_LHKJKMPZ t1\n" + + "LEFT OUTER JOIN UF_LHKJKMPZ_DT1 t2 on t1.id=t2.mainid\n" + + "WHERE (t2.yskm='" + budgetCode + "')"; + rs.writeLog("====sql@" + sql); + rs.executeQuery(sql); + String value = ""; + String name = ""; + if (rs.next()) { + value = Util.null2String(rs.getString("HJKMBM")); + name = Util.null2String(rs.getString("HJKMMC")); + } + rs.writeLog("====value@" + value); + rs.writeLog("====name@" + name); + if (StringUtils.isEmpty(value)) { + return ""; + } else { + return accountTreeId + "_" + value + "@" + name; + } + } + + + @Override + public String getAccountCode4HK(String budgetCode) { + PropBean pp = new PropBean(); + RecordSet rs = new RecordSet(); + String accountTreeId = pp.getPropName("accountTreeIdHK"); + rs.writeLog("====accountTreeId@" + accountTreeId); + String sql = "SELECT t1.HJKMBM,t1.HJKMMC\n" + + "FROM UF_XGKJKM t1\n" + + "LEFT OUTER JOIN UF_XGKJKM_DT1 t2 on t1.id=t2.mainid\n" + + "WHERE (t2.yskm='" + budgetCode + "')"; + rs.writeLog("====sql@" + sql); + rs.executeQuery(sql); + String value = ""; + String name = ""; + if (rs.next()) { + value = Util.null2String(rs.getString("HJKMBM")); + name = Util.null2String(rs.getString("HJKMMC")); + } + rs.writeLog("====value@" + value); + rs.writeLog("====name@" + name); + if (StringUtils.isEmpty(value)) { + return ""; + } else { + return accountTreeId + "_" + value + "@" + name; + } + } + + @Override + public String generateRequestMark(HttpServletRequest request) { + String isCreate = Util.null2String(request.getParameter("iscreate")); + int workFlowId = Util.getIntValue(request.getParameter("workflowid")); + int formModeId = PayUtil.getFormModeIdByCubeName("uf_fklcbh"); + log.info("生产流程编号的参数:@isCreate=" + isCreate + ",workFlowId=" + workFlowId + ",formModeId=" + formModeId + "@"); + StringBuilder mark = new StringBuilder(); //流程编码 + if ("1".equals(isCreate)) { + String unNumber = PayUtil.getUnNumberByWorkFlowId(workFlowId); + String modeUuid = ""; + LocalDateTime now = LocalDateTime.now(); + String yM = now.format(DateTimeFormatter.ofPattern("yyyyMM")); + RecordSet rs = new RecordSet(); + rs.executeQuery("select id,lsh,MODEUUID from uf_fklcbh where ny = '" + yM + "' and LCLX='" + unNumber + "'"); + if (rs.next()) { + //更新 + int num = Util.getIntValue(rs.getString("lsh")) + 1; + int id = Util.getIntValue(rs.getString("id")); + modeUuid = Util.null2String(rs.getString("MODEUUID")); + String updateSql = "update uf_fklcbh set lsh=? where id=?"; + rs.executeUpdate(updateSql, num, id); + mark = new StringBuilder(num + ""); + while (mark.length() < 6) { + mark.insert(0, "0"); + } + mark = new StringBuilder("总部通用付款" + now.format(DateTimeFormatter.ofPattern("yyyyMM")) + mark); + } else { + String userId = Util.null2String(request.getParameter("f_weaver_belongto_userid")); + String userType = Util.null2String(request.getParameter("f_weaver_belongto_usertype")); + String createDate = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + String createTime = now.format(DateTimeFormatter.ofPattern("HH:mm:ss")); + //插入 + String insertSql = "insert into uf_fklcbh" + + "(FORMMODEID,MODEDATACREATER,MODEDATACREATERTYPE,MODEDATACREATEDATE,MODEDATACREATETIME,MODEUUID,LSH,NY,LCLX) \n" + + "values(?,?,?,?,?,?,?,?,?)"; + String uuid = UUID.randomUUID().toString(); + modeUuid = uuid; + rs.executeUpdate(insertSql, formModeId, userId, userType, createDate, createTime, uuid, "1", yM, unNumber); + mark = new StringBuilder("总部通用付款" + now.format(DateTimeFormatter.ofPattern("yyyyMM")) + "000001"); + } + + //权限重构 + int dataId = PayUtil.getDataIdByUUID(modeUuid); + ModeRightInfo modeRightInfo = new ModeRightInfo(); + modeRightInfo.editModeDataShare(1, formModeId, dataId); + + } + return mark.toString(); + + } + + @Override + public String doBudgetAccount(String requestId, String tableName, String billStatus) throws Exception { + log.info("====通用付款流程预算开始"); + log.info("====通用付款预算流程id@" + requestId + "@"); + log.info("====待预算流程表名@" + tableName + "@"); + JSONObject params = new JSONObject(); + BudgetDao budgetDao = new BudgetDao(); + RecordSet rs = new RecordSet(); + ResourceComInfo rc = new ResourceComInfo(); + DepartmentComInfo dc = new DepartmentComInfo(); + HTUtil htUtil = new HTUtil(); + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + try { + String budgetInvokeParam = budgetDao.mainFieldParam(tableName, requestId); + rs.executeQuery(budgetInvokeParam); + String bz = "0"; //对应fkxx字段 + String lcbh = ""; + String requestname = ""; + String ngr = ""; + String mainId = ""; + if (rs.next()) { + lcbh = Util.null2String(rs.getString("lcbh")); + ngr = Util.null2String(rs.getString("ngr")); + mainId = Util.null2String(rs.getString("id")); + bz = Util.null2String(rs.getString("fkxx")); + requestname = Util.null2String(rs.getString("requestname")); + } + String yskmTable = tableName + "_dt8"; //预算科目表,本币dt8,外币dt9,主表字段fkxx区分 + if ("1".equals(bz)) { + yskmTable = tableName + "_dt9"; + } + params.put("billnum", requestId); + params.put("billname", lcbh); + params.put("billstatus", billStatus); + params.put("billtitle", requestname); + params.put("pesonName", rc.getLastname(ngr)); + params.put("bizdate", df.format(LocalDateTime.now())); + log.info(">>主表字段获取: @" + params + "@"); + rs.executeQuery(budgetDao.isItPay(tableName, lcbh)); + boolean isItFlag = false; + if (rs.next()) { + if ("1".equals(Util.null2String(rs.getString("FKLX")))) { + isItFlag = true; + } + } + JSONArray levelList = new JSONArray(); + + boolean itFlag = lcbh.contains("总部IT付款"); + String yskmTableFieldParam; + if (itFlag) { + yskmTableFieldParam = budgetDao.ITyskmTableFieldParam(yskmTable, mainId); + } else { + yskmTableFieldParam = budgetDao.yskmTableFieldParam(yskmTable, mainId); + } + rs.executeQuery(yskmTableFieldParam); + String uuid = UUID.randomUUID().toString(); + int i = 1; + while (rs.next()) { + JSONObject level = new JSONObject(); + //费用承担部门 + String fysjcdbm = Util.null2String(rs.getString("fysjcdbm")); + //预算科目 + String yskm = Util.null2String(rs.getString("yskm")); + level.put("deptNum", dc.getDepartmentCode(fysjcdbm)); + if (itFlag) {//IT项目付款传项目编码 + level.put("bgitem", Util.null2String(rs.getString("PROJECTCODE"))); + } else { + level.put("bgitem", PayUtil.getSuperBudgetCode(yskm)); + } + // 费用类型编码(默认传0101) + level.put("bgElement", "0101"); + level.put("billEntryID", uuid + "#" + i); + level.put("itemEntryNum", yskm); + level.put("bgITElement", level.get("bgitem")); + //科目对应金额 + level.putAll(PayUtil.getKjKmCharges(yskmTable, mainId, isItFlag)); + levelList.add(level); + i++; + } + if (i == 1) { + //没有明细 + log.info("预算科目明细为空"); + return "没有分摊的预算科目, 流程禁止提交"; + } + params.put("list", levelList); + Map dataMap = new HashMap<>(); + dataMap.put("data", params); + log.info(">>预算接口调用参数 params : @" + params + "@"); + String resp = htUtil.budgetCommit(dataMap); + log.info(">>预算接口调用返回 resp : @" + resp + "@"); + if (!"F1001".equals(resp)) { + log.info("预算接口执行失败!返回值: " + resp); + return "预算接口执行失败!返回值: " + resp; + } else { + BudgetService bds = new BudgetServiceImpl(); + boolean isUpdate = bds.doBudgetMiddleTable(lcbh, billStatus, null,yskmTable, tableName, isItFlag); + if (isUpdate) { + return "预算接口执行成功"; + } else { + return "节点后附加操作更新预算中间表失败!"; + } + } + } catch (Exception e) { + log.info("预算发生异常: " + e); + throw new Exception(e); + } + } + + @Override + public String doITBudgetAccount(String requestId, String tableName, String billStatus) throws Exception { + log.info("====it预算开始执行"); + log.info("====it预算流程id@" + requestId + "@"); + log.info("====待预算流程表名@" + tableName + "@"); + try { + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + JSONObject params = new JSONObject(); + ResourceComInfo rc = new ResourceComInfo(); + DepartmentComInfo dc = new DepartmentComInfo(); + RecordSet rs = new RecordSet(); + BudgetDao budgetDao = new BudgetDao(); + String budgetInvokeParam = budgetDao.mainFieldParamForIt(tableName, requestId); + rs.executeQuery(budgetInvokeParam); + String bz = "0"; //对应xzfklx字段 + String lcbh = ""; + String requestname = ""; + String ngr = ""; + String mainId = ""; + if (rs.next()) { + lcbh = Util.null2String(rs.getString("lcbh")); + ngr = Util.null2String(rs.getString("ngr")); + mainId = Util.null2String(rs.getString("id")); + bz = Util.null2String(rs.getString("xzfklx")); //=0是明细8,=1是明细9 + requestname = Util.null2String(rs.getString("requestname")); + } + String yskmTable = tableName + "_dt8"; //预算科目表,本币dt8,外币dt9,主表字段xzfklx区分 + if ("1".equals(bz)) { + yskmTable = tableName + "_dt9"; + } + params.put("billnum", requestId); + params.put("billname", lcbh); + params.put("billstatus", billStatus); + params.put("billtitle", requestname); + params.put("pesonName", rc.getLastname(ngr)); + params.put("bizdate", df.format(LocalDateTime.now())); + log.info(">>主表字段获取: @" + params + "@"); + rs.executeQuery(budgetDao.isItPay(tableName, lcbh)); + boolean isItFlag = false; + if (rs.next()) { + if ("1".equals(Util.null2String(rs.getString("FKLX")))) { + isItFlag = true; + } + } + JSONArray levelList = new JSONArray(); + String yskmTableFieldParam = budgetDao.yskmTableFieldParam(yskmTable, mainId); + rs.executeQuery(yskmTableFieldParam); + int i = 1; + String uuid = UUID.randomUUID().toString(); + while (rs.next()) { + JSONObject level = new JSONObject(); + //费用承担部门 + String fysjcdbm = Util.null2String(rs.getString("fysjcdbm")); + //预算科目 + String yskm = Util.null2String(rs.getString("yskm")); + level.put("deptNum", dc.getDepartmentCode(fysjcdbm)); + level.put("bgitem", PayUtil.getSuperBudgetCode(yskm)); + // 费用类型编码(默认传0101) + level.put("bgElement", "0101"); + level.put("billEntryID", uuid + "#" + i); + level.put("itemEntryNum", yskm); + level.put("bgITElement", level.get("bgitem")); + //科目对应金额 + level.putAll(PayUtil.getKjKmCharges(yskmTable, mainId, isItFlag)); + levelList.add(level); + i++; + } + if (i == 1) { + //没有明细 + log.info("没有分摊的预算科目"); + return "it预算成功"; + } + params.put("list", levelList); + log.info("ITBudgetInterfaceInvoke>>预算接口调用参数 params : @" + params + "@"); + String requestUrl = new PropBean().getPropName("ITBudgetUpdateUrl"); + HTUtil htUtil1 = new HTUtil(); + Map appHeader = htUtil1.getAppHeader(); + log.info("getAppHeader@" + appHeader + "@"); + //新增token校验 + String resp = HttpUtil.postApplicationJson(requestUrl, params.toJSONString(), appHeader); + log.info("ITBudgetInterfaceInvoke>>预算接口调用返回 resp : @" + resp + "@"); + if ("F1001".equals(resp)) { + return "IT预算成功"; + } else { + return "IT预算失败"; + } + } catch (Exception e) { + return "it预算接口执行失败"; + } + } + + @Override + public List> doCostAccount(String ids) throws Exception { + log.info("====通用付款流程核算开始"); + log.info("====待核算建模流程序号@" + ids + "@"); + List> resMessage = new ArrayList<>(); + try { + RecordSet rs = new RecordSet(); + String modeTableName = "uf_zbfk"; //唯一建模表 + //建模勾选的id + String[] ids_ = ids.split(","); + for (String id : ids_) { + Map resp = new HashMap<>(); + String sql = pd.getFormTableByModeOrderId(modeTableName, id); + rs.executeQuery(sql); + rs.next(); + String formId = Util.null2String(rs.getString("FORMID")); + WorkflowBillComInfo workflowBillComInfo = new WorkflowBillComInfo(); + String workFlowTableName = VirtualFormHandler.getRealFromName(Util.null2String(workflowBillComInfo.getTablename(formId))); + if ("".equals(workFlowTableName)) { + log.info("id:" + id + "对应流程表名未找到"); + resp.put(id, "对应流程表名未找到,核算失败"); + resMessage.add(resp); + return resMessage; + } + ResourceComInfo rc = new ResourceComInfo(); + DepartmentComInfo dc = new DepartmentComInfo(); + + boolean cl = BizUtils.isCl(id); + String baseInfo = pd.getBaseInfo(modeTableName, workFlowTableName, id); + if (cl) { + baseInfo = pd.getBaseInfoForCl(modeTableName, workFlowTableName, id); + } + String typeSql = pd.getPaymentType(modeTableName, workFlowTableName, id); + String type = ""; + rs.execute(typeSql); + if (rs.next()){ + type = Util.null2String(rs.getString("fklx")); + //判断是否为采购商城付款,4为采购商城特殊逻辑 + if ("4".equals(type)){ + baseInfo = pd.getBaseInfoSettlePayment(modeTableName, workFlowTableName, id); + } + } + rs.executeQuery(baseInfo); + rs.next(); + String fklx = rs.getString("fklx"); //付款类型 + String ngr = Util.null2String(rs.getString("NGR")); + String bm = Util.null2String(rs.getString("SZBM")); //部门 + String requestMark = Util.null2String(rs.getString("LCBH")); + String requestId = Util.null2String(rs.getString("REQUTID")); + String fjzs = Util.null2String(rs.getString("DJZS")); //附件张数 + String ngrq = ""; + if ("4".equals(type)){ + ngrq = Util.null2String(rs.getString("NGRQ")); //拟稿日期 + }else { + ngrq = Util.null2String(rs.getString("NGSJ")); //拟稿日期 + } + String requestName = Util.null2String(rs.getString("REQUESTNAME")); + String ywht = Util.null2String(rs.getString("ywht")); //有无合同 + String sfqdz = Util.null2String(rs.getString("SFQDZ")); //是否全电子 + String fkzt = Util.null2String(rs.getString("fkzt")); //付款状态 + if ("2".equals(fkzt)) { + resp.put(requestMark, "流程已废弃,无法付款"); + resMessage.add(resp); + continue; + } + CostAccountDto costAccountDto = new CostAccountDto(); //核算接口json 一级 + //总部通用付款0、总部通用报销9、总部差旅报销10、总部IT付款1 + if("0,9,10,1".contains(fklx)){ + String cxsql = "select t1.djsl,t1.zzdjsl from "+workFlowTableName+" t1 where t1.requestid = ?"; + rs.executeQuery(cxsql,requestId); + if (rs.next()){ + String djsl = Util.null2String(rs.getString("djsl")); //单据数量 + String zzdjsl = Util.null2String(rs.getString("zzdjsl")); //纸质单据数量 + costAccountDto.setDjsl(djsl); + costAccountDto.setZzdjsl(zzdjsl); + } + } + if ("0,1,2,3".contains(fklx)) { + //付款类型为总部通用付款,总部it或总部工会的,构建核算参数(添加商旅结算付款类型3) + costAccountDto.setElectronicBill(sfqdz); //是否电子票 + costAccountDto.setType("htfk"); //总部付款费用核算 + costAccountDto.setNgrDept(dc.getDepartmentmark(bm)); + costAccountDto.setNgrDeptCode(dc.getDepartmentCode(bm)); + costAccountDto.setNgrName(rc.getWorkcode(ngr)); + costAccountDto.setRequestMark(requestMark); + costAccountDto.setRequestId(requestMark); //djid传流程编码,流程id总部不需要 + costAccountDto.setAttachmentNum(fjzs); + costAccountDto.setLocationName(""); + costAccountDto.setTitle(requestName); + costAccountDto.setCurrency("RMB"); + costAccountDto.setCreateDate(ngrq); + costAccountDto.setReimbursementWay(""); + costAccountDto.setPayOrderNo(requestMark); //总部付款付款单号直接传流程编码 + + if ("".equals(requestId)) { + log.info("建模requestId为空,无法执行核算"); + resp.put(id, "建模requestId为空,无法执行核算"); + resMessage.add(resp); + continue; + } + + if ("1".equals(fklx)) { + //付款类型为it + boolean isIt = BizUtils.whetherItOrTy(requestId); + if (!isIt) { + // it费用付款 是否it付款=1 + rs.executeQuery("select XMMC,PROJECTCODE,LXBH,LXMC from " + workFlowTableName + "_DT8 t1\n" + + " left join " + workFlowTableName + " t2 on t1.MAINID=t2.ID\n" + + " where t2.REQUESTID=" + requestId); + rs.next(); + costAccountDto.setBh1(Util.null2String(rs.getString("LXBH")));//20210528 业务说传立项编号 + costAccountDto.setBz1(Util.null2String(rs.getString("LXMC"))); + } + } else { + //总部付款 + costAccountDto.setBz2("0"); + } + //获取支付明细(dt11) + String getPayInfoFromDt11 = pd.getPayInfoFromDt11(workFlowTableName, requestId); + List payDetailList = new ArrayList<>(); + rs.executeQuery(getPayInfoFromDt11); + while (rs.next()) { + PayDetail payDetail = new PayDetail(); + String payByBank = Util.null2String(rs.getString("YXZFJE")); + String payByCash = Util.null2String(rs.getString("XJZFJE")); + String bankName = Util.null2String(rs.getString("KHXMC")); + String bankAccount = Util.null2String(rs.getString("YXZH")); + String SKDW = Util.null2String(rs.getString("SKDW")); + payDetail.setPayByBank(payByBank); + payDetail.setPayByCash(payByCash); + payDetail.setBankName(bankName); + payDetail.setBankAccount(bankAccount); + payDetail.setEmployeeDept(""); + payDetail.setEmployeeName(""); + payDetail.setPayee(SKDW); + payDetailList.add(payDetail); + } + if ("2".equals(fklx)) { + //流程为工会付款流程时,同时取出对私的支付信息 + String tableNameGh = WeaverUtil.getTableNameByRequestId(requestId, rs); + String getPayInfoFromDt13 = "select t2.YXZFJE,t2.KHXMC,t2.YXZH,t2.ygxm,t2.bm\n" + + "from " + tableNameGh + " t1\n" + + "left join " + tableNameGh + "_dt13 t2 on t1.ID=t2.MAINID\n" + + "where t1.REQUESTID=" + requestId; + rs.executeQuery(getPayInfoFromDt13); + while (rs.next()) { + log.info("====当前流程为工会,附加个人支付明细开始@" + getPayInfoFromDt13); + PayDetail payDetail = new PayDetail(); + String payByBank = Util.null2String(rs.getString("YXZFJE")); + String payByCash = ""; + String bankName = Util.null2String(rs.getString("KHXMC")); + String bankAccount = Util.null2String(rs.getString("YXZH")); + String SKDW = ""; + String empDept = Util.null2String(rs.getString("bm")); + String empName = Util.null2String(rs.getString("ygxm")); + payDetail.setPayByBank(payByBank); + payDetail.setPayByCash(payByCash); + payDetail.setBankName(bankName); + payDetail.setBankAccount(bankAccount); + payDetail.setEmployeeDept(dc.getDepartmentmark(empDept)); + payDetail.setEmployeeName(rc.getWorkcode(empName)); + payDetail.setPayee(SKDW); + log.info("====@个人payDetail" + payDetail.toString()); + payDetailList.add(payDetail); + } + + } + log.info("流程:@" + requestMark + "@"); + log.info("支付明细(dt11):@payDetailList=" + payDetailList + "@"); + if (CollectionUtils.isEmpty(payDetailList)) { + log.info(requestMark + "支付明细数据为空,请检查表单数据后核算"); + resp.put(requestMark, "核算失败,支付明细数据为空"); + resMessage.add(resp); + continue; + } + costAccountDto.setPayDetails(payDetailList); + //获取预算明细 + String subjectInfoFromDt8AndDt12 = pd.getSubjectInfoFromDt8AndDt12(workFlowTableName, requestId); + if ("4".equals(type)){ + subjectInfoFromDt8AndDt12 = pd.getSettleSubjectInfoFromDt8AndDt12(workFlowTableName, requestId); + } + List kjDetailList = new ArrayList<>(); + rs.executeQuery(subjectInfoFromDt8AndDt12); + while (rs.next()) { + KjDetail kjDetail = new KjDetail(); + BudgetData budgetData = new BudgetData(); //预算科目 + SubjectData subjectData = new SubjectData(); //会计科目 + String fysjcdbm = Util.null2String(rs.getString("FYSJCDBM")); //费用承担部门 + String je = Util.null2String(rs.getString("JE")); + String zhrmb = Util.null2String(rs.getString("ZHRMB")); + String sy = Util.null2String(rs.getString("SY")); + String hjkmmc = Util.null2String(""); + String hjkmbm = Util.null2String(rs.getString("HJKM")); + subjectData.setItemCode(hjkmbm); + subjectData.setItemName(hjkmmc); + String dyyskm = Util.null2String(rs.getString("YSKM")); + budgetData.setRelationCode(hjkmbm); + budgetData.setItemCode(dyyskm); + //采购商城付款没有YSKMMC + if (!"4".equals(type)){ + String dyysmc = Util.null2String(rs.getString("YSKMMC")); + budgetData.setItemName(dyysmc); + kjDetail.setPriceRMB(zhrmb); + kjDetail.setMoney(zhrmb); + } else { + kjDetail.setPriceRMB(je); + kjDetail.setMoney(je); + } + kjDetail.setExpenseDeptCode(dc.getDepartmentCode(fysjcdbm)); + kjDetail.setExpenseDept(dc.getDepartmentmark(fysjcdbm)); + kjDetail.setExpenseBadge(""); + kjDetail.setExpensePerson(""); + kjDetail.setSubjectData(subjectData); + kjDetail.setBudgetData(budgetData); + kjDetail.setProjectCode(""); + kjDetail.setProject(""); + kjDetail.setReason(sy); + kjDetailList.add(kjDetail); + } + log.info("流程:@" + requestMark + "@"); + log.info("会计明细(dt8,dt12):@kjDetailList=" + kjDetailList + "@"); + if (CollectionUtils.isEmpty(kjDetailList)) { + log.info(requestMark + "会计明细数据为空,请检查表单数据后核算"); + resp.put(requestMark, "核算失败,会计明细数据为空"); + resMessage.add(resp); + continue; + } + costAccountDto.setKjDetails(kjDetailList); + } else { + log.info("非总部通用,it,或工会付款,走HsFactory对应的id"); + HsFactory hsFactory = new HsFactory(); + costAccountDto = hsFactory.getHsService(requestId, fklx); + if (costAccountDto == null) { + log.info("获取核算数据异常@requestId=" + requestId); + resp.put(requestMark, "核算失败,获取核算数据异常"); + resMessage.add(resp); + continue; + } + } + //HTO-11638查询主表,当付款流程中字段“先付款后发票”选项为“是”时,接口字段“SFYFP”传值“Y”, + // “先付款后发票”选项为“否”时,接口字段“SFYFP”传值“N”; + //针对总部通用付款,总部it付款,总部工会付款 + if(SubUnionBizUtil.equalsTableName(requestId, "zbtyfk") ||SubUnionBizUtil.equalsTableName(requestId, "zbghfk") + ||SubUnionBizUtil.equalsTableName(requestId, "zbitfk")){ + RecordSet sqlFindYfp = new RecordSet(); + String sqlNew = "select sfxfkhtgfp from "+workFlowTableName+" where requestid = "+requestId; + sqlFindYfp.execute(sqlNew); + if (sqlFindYfp.next()){ + String sfxfkhtgfp = Util.null2String(sqlFindYfp.getString("sfxfkhtgfp")); + if ("0".equals(sfxfkhtgfp)){ + //当付款流程中字段“先付款后发票”选项为“是”时,接口字段“SFYFP”传值“Y” + costAccountDto.setSFYFP("Y"); + }else{ + //“先付款后发票”选项为“否”时,接口字段“SFYFP”传值“N”; + costAccountDto.setSFYFP("N"); + } + } + } + String costAccountDtoJsonStr = JSON.toJSONString(costAccountDto); + @SuppressWarnings("unchecked") + Map stringObjectMap = JSONObject.parseObject(costAccountDtoJsonStr); + HTUtil ht = new HTUtil(); + log.info("开始执行核算接口"); + log.info("接口参数@request=" + stringObjectMap + "@"); + String response = ht.saveFydj(stringObjectMap); + log.info("接口返回@response=" + response + "@"); + if (!"".equals(response)) { + if ("success".equals(response)) { + log.info("流程id" + requestId + "核算接口响应成功"); + resp.put(requestMark, "核算成功"); + resMessage.add(resp); + //核算算成功,更新出纳付款建模表 为 同步到浪潮状态=0,付款状态=0 + //更新预付款中间表 SFFKQR=1 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + String rzsj = sdf.format(new Date()); + rs.executeUpdate("update UF_ZBFK set TBDLCZT=0 ,rzsj = '"+rzsj+"' where id =" + id); + //核算成功,预算也成功的情况下,更新付款状态为已付款 + rs.executeUpdate("update UF_ZBFK set FKZT=0 where TBDLCYSZT=0 and id =" + id); + //更新主表和预算中间表 + rs.executeUpdate("update UF_YFKMIDDLE set SFFKQR=1 where REQID=" + requestId); + rs.executeUpdate("update " + workFlowTableName + " set FKZT=1 where REQUESTID=" + requestId); + if ("0".equals(ywht)) { + //有无合同为是 + //更新合同信息 + boolean flag = PayUtil.updatePaymentInfoToHuaTai(requestId); + if (flag) { + log.info("合同信息更新成功"); +// resMessage.add("合同信息更新成功"); + } else { + log.info("合同信息更新失败"); +// resMessage.add("合同信息更新失败"); + } + //更新it合同信息 +// if ("1".equals(fklx)) { //1是付款类型 +// boolean isIt = BizUtils.whetherItOrTy(requestId); +// if (!isIt) { +// log.info("====当前流程是it付款,执行it合同更新"); +// boolean flagIT = PayUtil.updateItPaymentInfoToHT(requestId, workFlowTableName); +// if (flagIT) { +// log.info("====IT合同信息更新成功"); +// resMessage.add("IT合同信息更新成功"); +// } else { +// log.info("====IT合同信息更新失败"); +// resMessage.add("IT合同信息更新失败"); +// } +// } +// } + }else if ("4".equals(fklx)){ + boolean flag = PayUtil.updatePaymentInfoListToHuaTai(requestId); + if (flag) { + log.info("合同信息更新成功"); + } else { + log.info("合同信息更新失败"); + } + } + } else { + log.info("流程id" + requestId + "核算接口响应失败"); + resp.put(requestMark, "核算失败"); + resMessage.add(resp); + } + } else { + log.info("流程id" + requestId + "核算接口响应为空"); + resp.put(requestMark, "核算失败"); + resMessage.add(resp); + } + + } + + return resMessage; + } catch (Exception e) { + log.info("doCostAccount方法异常:@" + e.getMessage()); + e.printStackTrace(); + Map resp = new HashMap<>(); + resp.put("核算异常", e.getMessage()); + resMessage.add(resp); + return resMessage; + } + + } + + @Override + public List> doPayment(String ids) throws Exception { + log.info("====通用付款流程doPayment开始执行,待处理建模id数据@" + ids); + List> singleMessage = new ArrayList<>(); + try { + List idArray = Arrays.stream(ids.split(",")).collect(Collectors.toList()); + String sql = "select t1.REQUTID,t1.fklx,t2.REQUESTMARK,t4.TABLENAME,t1.fkzt from UF_ZBFK t1\n" + + "left join WORKFLOW_REQUESTBASE t2\n" + + "on t1.REQUTID=t2.REQUESTID\n" + + "left join workflow_base t3\n" + + "on t2.workflowid = t3.id\n" + + "left join workflow_bill t4\n" + + "on t3.formid = t4.id\n" + + "where t1.id=?"; + RecordSet rs = new RecordSet(); + for (String id : idArray) { + Map resp = new HashMap<>(); + log.info("====开始处理uf_zbfk建模id@" + id); + rs.executeQuery(sql, id); + String requestId = ""; + String tableName = ""; + String requestMark = ""; + String fklx = ""; + String fkzt = ""; + if (rs.next()) { + requestId = rs.getString("REQUTID"); + tableName = rs.getString("TABLENAME"); + requestMark = rs.getString("REQUESTMARK"); + fklx = rs.getString("fklx"); //流程类别 + fkzt = rs.getString("fkzt"); //付款状态 + } + + if ("2".equals(fkzt)) { + resp.put(requestMark, "流程已废弃,无法付款"); + singleMessage.add(resp); + continue; + } + + //预算 + BudgetCommand budgetCommand = BizUtils.getBudgetCommentByLb(fklx); + + //it优化部分 + if ("1".equals(fklx)) { + boolean flag = BizUtils.whetherItOrTy(requestId, tableName); + if (!flag) { + log.info("it付款,且it类型@" + id); + budgetCommand = new ITHeadPaymentBudgetCommand(); + } + } + + String finish = budgetCommand.finish(requestId); //实占 + + log.info("预算数据@" + requestMark + "@" + tableName); + log.info("预算结果@" + finish); + resp.put(requestMark, "F1001".equalsIgnoreCase(finish) ? "预算同步成功" : "预算同步失败"); + singleMessage.add(resp); //普通预算接口封装到返回消息中 + + if ("F1001".equals(finish)) { + rs.executeQuery("update UF_ZBFK set TBDLCYSZT=0 where id=" + id); // 更新建模表单状态 TBDLCYSZT + singleMessage.addAll(doCostAccount(id));//核算 + } + + } + return singleMessage; + } catch (Exception e) { + log.info("付款接口提交报错@" + e.getMessage()); + e.printStackTrace(); + Map resp = new HashMap<>(); + resp.put("核算异常", e.getMessage()); + singleMessage.add(resp); + return singleMessage; + } + + } + + @Override + public Map queryInvoiceOnce(String fphm, String fpdm) throws Exception { + Map res = new HashMap<>(); + log.info("====发票去重校验接口调用开始"); + log.info("====入参@fphm:" + fphm + ";fpdm:" + fpdm); + try { + RecordSet rs = new RecordSet(); + String sql = "select t1.REQUESTID,t1.LCBM,t1.FPDM,t1.FPHM\n" + + "from uf_pjxxgl t1\n" + + "where FPHM =? and FPDM=?"; + rs.executeQuery(sql, fphm, fpdm); + if (rs.next()) { + res.put("relReq", Util.null2String(rs.getString("LCBM"))); + res.put("flag", "1"); //1存在,0不存在 + log.info("====返回参数@" + JSONObject.toJSONString(res)); + return res; + } + } catch (Exception e) { + log.info("====queryInvoiceOnce报错@" + e.getMessage()); + e.printStackTrace(); + } + res.put("relReq", ""); + res.put("flag", "0"); //1存在,0不存在 + log.info("====返回参数@" + JSONObject.toJSONString(res)); + return res; + } + + @Override + public Map queryHistoryPayRecord(String bankAccount, String payeeDept, String bankName, String city) throws Exception { + //配置项控制校验支付记录 TurnOnBankCardVerification (开启银行卡校验) + Map res = new HashMap<>(); + PropBean pp = new PropBean(); + String openFlag = pp.getPropName("TurnOnBankCardVerification"); //0=关闭 1=开启 + if ("1".equals(openFlag)) { + log.info("屏蔽银行卡校验"); + res.put("flag", "1"); //可以提交 + res.put("isTrueAccount", "1"); // 存在正确的账户 + res.put("addition", ""); + return res; + } + + RecordSet rs = new RecordSet(); + log.info("付款流程校验资金系统信息"); + log.info(String.format("入参@bankAccount:%s;payeeDept:%s;bankName:%s;city:%s", bankAccount, payeeDept, bankName, city)); + PropBean propBean = new PropBean(); + String financeDTable = propBean.getPropName("FinanceDTable"); + String sql = "select ZJJSDJ_DFZH,ZJJSDJ_DFHM,ZJJSDJ_DFKHH,ZJJSDJ_DFS,ZJJSDJ_DFCS from " + financeDTable + " where ZJJSDJ_DFZH='" + bankAccount + "'"; + try { + rs.executeQueryWithDatasource(sql, DataSourceName.FinanceD.getName()); + String _city = PayUtil.cityCodeToName(city); + boolean hasTrueAccount = false; + while (rs.next()) { + //匹配到银行账户 + hasTrueAccount = true; + //校验其他信息 + String skdw = Util.null2String(rs.getString("ZJJSDJ_DFHM")); //收款单位 + String yhmc = Util.null2String(rs.getString("ZJJSDJ_DFKHH")); //开户行 + String province = Util.null2String(rs.getString("ZJJSDJ_DFS")); //省 + String cit = Util.null2String(rs.getString("ZJJSDJ_DFCS")); //市 + String cityInDb = province + "," + cit; //中文,逗号分割 江苏,南京 + if (payeeDept.equals(skdw) && bankName.equals(yhmc) && cityInDb.equals(_city)) { + //匹配到一个就允许提交 + res.put("flag", "1"); //可以提交 + res.put("isTrueAccount", "1"); // 存在正确的账户 + res.put("addition", ""); + return res; + } + } + if (hasTrueAccount) { + //匹配到银行账户,但付款单位和开户行等校验失败 + res.put("flag", "0"); //不允许提交 + res.put("isTrueAccount", "1"); //正确账户 + res.put("addition", "付款信息错误,请检查往来单位信息"); + } else { + //没有匹配到银行账户,通过收款单位进行查询,展示历史记录 + List yhzhInDB = new ArrayList<>(); //付款单位对应的历史银行账户 + String sqlWithout = "select ZJJSDJ_DFZH from " + financeDTable + " where ZJJSDJ_DFHM='" + payeeDept + "'"; + rs.executeQueryWithDatasource(sqlWithout, DataSourceName.FinanceD.getName()); + while (rs.next()) { + yhzhInDB.add(Util.null2String(rs.getString("ZJJSDJ_DFZH"))); + } + if (CollectionUtils.isNotEmpty(yhzhInDB)) { + //提示 + res.put("flag", "0"); //允许提交 + res.put("isTrueAccount", "0"); + res.put("addition", String.join(",", yhzhInDB)); + } else { + res.put("flag", "0"); //允许提交 + res.put("isTrueAccount", "0"); + res.put("addition", ""); + } + } + return res; + } catch (Exception e) { + log.error("====queryHistoryPayRecord抛出异常"); + throw new Exception(e); + } + } + + @Override + public String queryHistoryPayRecordWithSubmit(Map> dtData) throws Exception { + PropBean pp = new PropBean(); + String openFlag = pp.getPropName("TurnOnBankCardVerification"); //0=关闭 1=开启 + log.info(String.format("屏蔽银行卡校验openFlag=%s", openFlag)); + + RecordSet rs = new RecordSet(); + PropBean propBean = new PropBean(); + String financeDTable = propBean.getPropName("FinanceDTable"); //资金表库 + List msg = new ArrayList<>(); + dtData.values() + .forEach(data -> { + if ("1".equals(openFlag)) { + msg.add(String.valueOf(true)); + } else { + boolean newValue = true; + boolean flag = false; //是否允许提交 + String sql = "select ZJJSDJ_DFZH,ZJJSDJ_DFHM,ZJJSDJ_DFKHH,ZJJSDJ_DFS,ZJJSDJ_DFCS from " + financeDTable + " where ZJJSDJ_DFZH='" + data.get(0) + "'"; + rs.executeQueryWithDatasource(sql, DataSourceName.FinanceD.getName()); + String _city = PayUtil.cityCodeToName(data.get(3)); + while (rs.next()) { + newValue = false; + //校验其他信息 + String skdw = Util.null2String(rs.getString("ZJJSDJ_DFHM")); //收款单位 + String yhmc = Util.null2String(rs.getString("ZJJSDJ_DFKHH")); //开户行 + String province = Util.null2String(rs.getString("ZJJSDJ_DFS")); //省 + String cit = Util.null2String(rs.getString("ZJJSDJ_DFCS")); //市 + String cityInDb = province + "," + cit; //中文,逗号分割 江苏,南京 + if (data.get(1).equals(skdw) && data.get(2).equals(yhmc) && cityInDb.equals(_city)) { + //匹配到一个就允许提交 + flag = true; + } + } + msg.add(String.valueOf(flag || newValue)); + } + }); + return String.join(",", msg); + } + + @Override + public Map upMainFKZT(Map params) { + String ids = Util.null2String(params.get("ids")); + boolean updateResult = updateColumnByRequestid(ids); + Map result = new HashMap<>(); + result.put("code", updateResult ? "200" : "500"); + return result; + } + + /* + * 根据requestid更新流程主表中的一个字段 + * */ + public boolean updateColumnByRequestid(String ids) { + boolean result = true; + BaseBean bb = new BaseBean(); + bb.writeLog("建模表更新成功,同步更新流程表中的付款状态字段"); + RecordSet rs = new RecordSet(); + String sql; + List needUpdate = new ArrayList<>(); + sql = "select t1.REQUTID,t1.fklx,t2.REQUESTMARK,t4.TABLENAME,t1.fkzt from UF_ZBFK t1\n" + + "left join WORKFLOW_REQUESTBASE t2\n" + + "on t1.REQUTID=t2.REQUESTID\n" + + "left join workflow_base t3\n" + + "on t2.workflowid = t3.id\n" + + "left join workflow_bill t4\n" + + "on t3.formid = t4.id\n" + + "where t1.id in (" + ids + ")"; + rs.executeQuery(sql); + while (rs.next()) { +// if (rs.getString("REQUESTMARK").contains("IT")) { + needUpdate.add(Util.null2String(rs.getString("REQUTID"))); +// } + } + String tablename = ""; + if (needUpdate.size() > 0) { + sql = "select t2.tablename from workflow_requestbase t0,workflow_base t1,workflow_bill t2 where t0.workflowid = t1.id and t1.formid = t2.id and t0.requestid = '" + needUpdate.get(0) + "'"; + rs.executeQuery(sql); + if (rs.next()) { + tablename = rs.getString("tablename"); + } + } + bb.writeLog("获取的表名是:" + tablename); + for (String requestid : needUpdate) { + sql = "update " + tablename + " set fkzt = 0 where requestid = '" + requestid + "'"; + result = result && rs.executeUpdate(sql); + } + return result; + } + +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/PaymentSyncServiceImpl.java b/src/main/java/com/engine/htsc/payment/service/impl/PaymentSyncServiceImpl.java new file mode 100644 index 0000000..461f1f1 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/PaymentSyncServiceImpl.java @@ -0,0 +1,314 @@ +package com.engine.htsc.payment.service.impl; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.EnumUtil; +import com.alibaba.fastjson.JSONObject; +import com.cloudstore.api.util.Util_ObjCopy; +import com.engine.core.impl.Service; +import com.engine.htsc.meeting.util.Common; +import com.engine.htsc.payment.enums.DispatchType; +import com.engine.htsc.payment.enums.Pay; +import com.engine.htsc.payment.log.PaymentLogger; +import com.engine.htsc.payment.log.PaymentLoggerFactory; +import com.engine.htsc.payment.model.SendAppendicesTask; +import com.engine.htsc.payment.model.SendPDFTask; +import com.engine.htsc.payment.model.WfParams; +import com.engine.htsc.payment.service.PaymentSyncService; +import com.engine.htsc.payment.util.AssertUtil; +import com.engine.htsc.payment.util.CommonAPI; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; + +import java.io.IOException; +import java.util.*; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ForkJoinPool; +import java.util.concurrent.RecursiveAction; +import java.util.concurrent.TimeUnit; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +import static com.engine.htsc.payment.enums.Pay.*; + +public class PaymentSyncServiceImpl extends Service implements PaymentSyncService { + + private static final PaymentLogger logger = PaymentLoggerFactory.getLogger(PaymentSyncServiceImpl.class); + + @Override + public void syncProcessPdfAndAllAppendix() throws InterruptedException, IOException, ClassNotFoundException { +// Jedis jedis = RedisTools.GetJedis(); +// String rediskey = "syncProcessPdfAndAllAppendix"; +// int expireTime = Util.getIntValue(Util.null2String(new PropBean().getPropName("syncRedisExpiretime"))); +// boolean redisFlag = RedisTools.TryGetDistributedLock(jedis, rediskey, "lock", expireTime * 60000); + + //分支办结模板 + List> branchAllPrintMode = allPrintMode(); + logger.info(String.format("办结模板 branch-AllPrintMode: %s", JSONObject.toJSONString(branchAllPrintMode))); + + List wfParamsList = getAllWfParams(); + //深拷贝 + List toSyncProcessPdfBranchWfParams = Util_ObjCopy.deepCopy(wfParamsList); + // 同步审批单,剥离setRequestInfo的逻辑,联查调度表 + List> table_requestMarks_pdf = getDispatch(DispatchType.PROCESS_PDF); + List syncProcessPdf = toSyncProcessPdfBranchWfParams.stream().peek(wfParams -> { + List> maps = buildRequestInfo(String.valueOf(wfParams.getWorkflowid()), table_requestMarks_pdf); + wfParams.setRequestInfos(maps); + }).collect(Collectors.toList()); + + List toSyncAllAppendixBranchWfParams = Util_ObjCopy.deepCopy(wfParamsList); + // 同步附件,剥离setAppendices的逻辑,联查调度表 + List> table_requestMarks_affix = getDispatch(DispatchType.PROCESS_AFFIX); + List syncAppendices = toSyncAllAppendixBranchWfParams.stream().peek(wfParams -> { + List> maps = buildAppendices(wfParams.getTableName(), table_requestMarks_affix); + wfParams.setAppendices(maps); + }).collect(Collectors.toList()); + + + List taskSyncProcessPdf = syncProcessPdf(syncProcessPdf); + logger.info(String.format("同步pdf数据信息 all taskSyncProcessPdf.size:%d", taskSyncProcessPdf.size())); + logger.info(String.format("同步数据信息 Runtime.getRuntime().availableProcessors():%d", + Runtime.getRuntime().availableProcessors())); + ForkJoinPool pool = new ForkJoinPool(Runtime.getRuntime().availableProcessors()); //可用核心数 + taskSyncProcessPdf.parallelStream().forEach(task -> { + try { + pool.submit(task).get(); + } catch (InterruptedException | ExecutionException e) { + logger.error(String.format("分支同步数据信息 submit task error, \r\n task:%s", + task.toString()), e); + } + }); + logger.info("同步数据信息 success, poll ready shutdown"); + + List taskSyncAppendices = syncAppendices(syncAppendices); + logger.info(String.format("同步appendices数据信息 all taskSyncAppendices.size:%d", taskSyncAppendices.size())); + logger.info(String.format("同步数据信息 Runtime.getRuntime().availableProcessors():%d", + Runtime.getRuntime().availableProcessors())); + taskSyncAppendices.parallelStream().forEach(task -> { + try { + pool.submit(task).get(); + } catch (InterruptedException | ExecutionException e) { + logger.error(String.format("同步数据信息 submit task error, \r\n task:%s", + task.toString()), e); + } + }); + logger.info("同步数据信息 success, poll ready shutdown"); + pool.shutdown(); + while (!pool.awaitTermination(2, TimeUnit.SECONDS)) { + logger.info("同步数据信息 success, poll shutdown..."); + } + + FileUtil.clean(Common.OLD_SYNC_TEMP); + } + + /** + * 同步审批件 + * + * @return + * @throws InterruptedException + */ + @Override + public List syncProcessPdf(List wfParams) throws InterruptedException { + //去空 + wfParams = wfParams.stream() + .filter(wfParam -> CollectionUtils.isNotEmpty(wfParam.getRequestInfos())) + .collect(Collectors.toList()); + return wfParams.stream().map(wfParam -> { + try { + return new SendPDFTask(0, wfParam.getRequestInfos().size(), wfParam); + } catch (Exception e) { + logger.error(String.format("同步数据信息 build SendPDFTask error, " + + "\r\n wfParams:%s", wfParam.toString()), e); + return null; + } + }).filter(not(Objects::isNull)).collect(Collectors.toList()); + + } + + @Override + public List syncAppendices(List wfParams) { + //去空 + wfParams = wfParams.stream() + .filter(wfParam -> CollectionUtils.isNotEmpty(wfParam.getAppendices())) + .collect(Collectors.toList()); + return wfParams.stream().map(wfParam -> { + try { + return new SendAppendicesTask(0, wfParam.getAppendices().size(), wfParam); + } catch (Exception e) { + logger.error(String.format("同步数据信息 build SendPDFTask error, " + + "\r\n wfParams:%s", wfParam.toString()), e); + return null; + } + }).filter(not(Objects::isNull)).collect(Collectors.toList()); + } + + /** + * 构造审批单,workflowid维度 + * + * @param workflowid + * @return + */ + public List> buildRequestInfo(String workflowid, List> table_requestMarks) { + if (AssertUtil.isEmpty(workflowid)) { + return null; + } + // 调度表数据 + List needSync_requestMarks = new ArrayList<>(); + table_requestMarks.forEach(e -> { + String lcbh = e.get("lcbh"); + if (StringUtils.isNotEmpty(lcbh)) { + needSync_requestMarks.add(lcbh); + } + }); + logger.info(String.format("审批件 needSync_requestMarks.size:%s", needSync_requestMarks.size())); + + List> all = CommonAPI + .queryWithPlaceholder("workflow_requestbase", + "requestid,requestname,requestmark,creater", + "workflowid", + workflowid); + + //从所有的数据中过滤出调度表数据 + return all.stream() + .distinct() + .filter(e -> needSync_requestMarks.contains(e.get("requestmark"))) + .collect(Collectors.toList()); + } + + /** + * 构造附件 + * + * @param tableName + * @return + */ + public List> buildAppendices(String tableName, List> table_requestMarks) { + try { + if (AssertUtil.isEmpty(tableName)) { + return null; + } + //调度表 + String sql = "select lcbh from uf_dsrwdb where rwlx = ?"; + logger.info(String.format("sql:%s ?:%s", sql, DispatchType.PROCESS_AFFIX.getType())); + // 调度表数据 + List needSync_requestMarks = new ArrayList<>(); + table_requestMarks.forEach(e -> { + String lcbh = e.get("lcbh"); + if (StringUtils.isNotEmpty(lcbh)) { + needSync_requestMarks.add(lcbh); + } + }); + logger.info(String.format("附件 needSync_requestMarks.size:%s", needSync_requestMarks.size())); + + //所有附件字段 + String billid = tableName.substring(tableName.lastIndexOf("_")).replace("_", "-"); + sql = "select wm_concat_old(FIELDNAME) field from workflow_billfield b where b.fieldhtmltype=6 and b.billid=?"; + String field = CommonAPI.querySingleFieldWithPlaceholder(sql, "field", billid); + if (AssertUtil.isEmpty(field)) { + return null; + } + List> fjResults = CommonAPI + .query(tableName, "lcbh,ngr," + field, null); + List> requestMarkWithFj = new ArrayList<>(); + //附件数据汇总 + fjResults.forEach(result -> { + String lcbh = result.get("lcbh"); + //调度表包含 + if (needSync_requestMarks.contains(lcbh)) { + String ngr = result.get("ngr"); + result.remove("lcbh"); + result.remove("ngr"); + String fjs = result.values().stream() + .filter(AssertUtil::isNotEmpty) + .collect(Collectors.joining(",")); + Map res = new HashMap<>(); + res.put("requestmark", lcbh); + res.put("creater", ngr); + res.put("appendices", fjs); + //附件不为空 + if (!"".equals(fjs)) { + requestMarkWithFj.add(res); + } + } + }); + return requestMarkWithFj; + } catch (Exception e) { + logger.error(String.format("获取 tablename:%s 流程附件", tableName)); + return null; + } + + } + + + // ==== ignore below ==== + public String getPrintModeByEndUnNumber(String endUnNumber) { + String sql = " select t2.unnumber,t1.modeid from workflow_printset t1\n" + + " left join workflow_nodebase t2\n" + + " on t1.nodeid = t2.id\n" + + " where type =1\n" + + " and printenable =1\n" + + " and t2.nodename = '办结'\n" + + " and t1.isactive = 1\n" + + " and t1.orderid = 0\n" + + " and t2.unnumber = ?"; + return CommonAPI.querySingleFieldWithPlaceholder(sql, "MODEID", endUnNumber); + } + + public List> allPrintMode() { + List branchEndNode = EnumUtil.getFieldValues(Pay.Branch.class, "endUnNumber"); + List headEndNode = EnumUtil.getFieldValues(Pay.Head.class, "endUnNumber"); + List subEndNode = EnumUtil.getFieldValues(Pay.Sub.class, "endUnNumber"); + branchEndNode.addAll(headEndNode); + branchEndNode.addAll(subEndNode); + String sql = " SELECT t2.UNNUMBER,t1.MODEID FROM workflow_printset t1\n" + + " LEFT JOIN workflow_nodebase t2\n" + + " ON t1.nodeid = t2.id\n" + + " WHERE type =1\n" + + " AND printenable =1\n" + + " AND t2.NODENAME = '办结'\n" + + " AND t1.ISACTIVE = 1\n" + + " AND t1.orderid = 0\n" + + " AND t2.UNNUMBER in ('" + String.join("','", branchEndNode) + "')"; + return CommonAPI.query(sql); + } + + + public List> getDispatch(DispatchType type) { + String sql = "select lcbh from uf_dsrwdb where rwlx = ?"; + logger.info(String.format("getDispatch sql:%s ?:%s", sql, type.getType())); + return CommonAPI + .queryWithPlaceholder("uf_dsrwdb", "lcbh", "rwlx", + type.getType()); + } + + public List getAllWfParams() { + List wfParams = new ArrayList<>(); + List branchWfParams = Arrays.stream(Branch.values()).map(e -> new WfParams + .Builder(e.getWfUnNumber()) + .setModeid(getPrintModeByEndUnNumber(e.getEndUnNumber())) + .build()) + .collect(Collectors.toList()); + logger.info(String.format("同步数据信息 branch-WfParams: %s", branchWfParams.toString())); + List headWfParams = Arrays.stream(Head.values()).map(e -> new WfParams + .Builder(e.getWfUnNumber()) + .setModeid(getPrintModeByEndUnNumber(e.getEndUnNumber())) + .build()) + .collect(Collectors.toList()); + logger.info(String.format("同步数据信息 headWfParams: %s", headWfParams.toString())); + List subWfParams = Arrays.stream(Sub.values()).map(e -> new WfParams + .Builder(e.getWfUnNumber()) + .setModeid(getPrintModeByEndUnNumber(e.getEndUnNumber())) + .build()) + .collect(Collectors.toList()); + logger.info(String.format("同步数据信息 subWfParams: %s", subWfParams.toString())); + + wfParams.addAll(branchWfParams); + wfParams.addAll(headWfParams); + wfParams.addAll(subWfParams); + return wfParams; + } + + private static Predicate not(Predicate t) { + return t.negate(); + } + + +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/PaymentWorkflowServiceImpl.java b/src/main/java/com/engine/htsc/payment/service/impl/PaymentWorkflowServiceImpl.java new file mode 100644 index 0000000..18ef81d --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/PaymentWorkflowServiceImpl.java @@ -0,0 +1,2043 @@ +package com.engine.htsc.payment.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.engine.core.impl.Service; +import com.engine.htsc.payment.pojo.ContractInfoVo; +import com.engine.htsc.payment.pojo.ContractRequestParam; +import com.engine.htsc.payment.pojo.TripPaymentRequest; +import com.engine.htsc.payment.service.PaymentService; +import com.engine.htsc.payment.service.PaymentWorkflowService; +import com.engine.htsc.payment.util.PayUtil; +import com.engine.htsc.payment.util.WorkflowCreateUtil; +import com.google.common.collect.Lists; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.Callable; +import java.util.concurrent.CompletionService; +import java.util.concurrent.ExecutorCompletionService; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.FutureTask; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.eclipse.core.runtime.Assert; +import org.springframework.beans.BeanUtils; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StopWatch; +import weaver.conn.RecordSet; +import weaver.conn.RecordSetTrans; +import weaver.formmode.setup.ModeRightInfo; +import weaver.general.BaseBean; +import weaver.general.GCONST; +import weaver.general.Util; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.interfaces.htsc.cus.HTUtil; +import weaver.interfaces.htsc.payment.BTSUpdateAccountDetail; +import weaver.interfaces.htsc.payment.PaymentWorkflowInvoke; +import weaver.soa.workflow.request.RequestInfo; +import weaver.workflow.request.RequestManager; + +public class PaymentWorkflowServiceImpl extends Service implements PaymentWorkflowService { + + private Log log = LogFactory.getLog(this.getClass()); + private static final String IsNextFlow = "1"; + //部门表 + private static final String TABLE_DEPARTMENT = "hrmdepartment"; + //员工信息表 + private static final String TABLE_RESOURCE = "hrmresource"; + + private List budgetItems = new ArrayList<>(); + + + @Override + public Map getVirtualDept() { + Map datas = new HashMap<>(); + + try { + RecordSet rs = new RecordSet(); + rs.executeQuery("select t.id,t.departmentname from hrmdepartment t " + + " left join HRMDEPARTMENTDEFINED tf on t.id = tf.deptid" + + " where t.canceled = 1" + + " and (tf.sfycgxnbm <> '1' or tf.sfycgxnbm is null) " + + " and t.id >= 1000 "); + List dataList = new ArrayList<>(); + while (rs.next()) { + Map dataMap = new HashMap<>(); + //Map displayKeys = new HashMap<>(); + List displayKeys = new ArrayList<>(); + displayKeys.add("departmentname"); + String id = Util.null2String(rs.getString("id")); + String departmentname = Util.null2String(rs.getString("departmentname")); + dataMap.put("allVersionIds", ""); + dataMap.put("canClick", true); + dataMap.put("checkStrictly", false); + dataMap.put("departmentname", departmentname); + dataMap.put("displayKeys", displayKeys); + dataMap.put("icon", "icon-coms-Branch"); + dataMap.put("id", id); + dataMap.put("isImgIcon", false); + dataMap.put("isParent", false); + dataMap.put("isVirtual", "1"); + dataMap.put("name", departmentname); + dataMap.put("orgWholePathspan", departmentname); + dataMap.put("pid", "728"); + dataMap.put("psubcompanyid", ""); + dataMap.put("selected", false); + dataMap.put("shadowInfo", departmentname + "/华泰证券股份有限公司/华泰集团/华泰集团组织架构"); + dataMap.put("supdepid", "华泰证券股份有限公司"); + dataMap.put("type", "2"); + dataList.add(dataMap); + } + datas.put("datas", dataList); + + } catch (Exception e) { + e.printStackTrace(); + } + return datas; + } + + + @Override + public Map createBusinessTravelWorkflow(TripPaymentRequest request) { + Map datas = new HashMap<>(); + ResourceComInfo resourceComInfo = null; + RecordSet rs = new RecordSet(); + RecordSet rsdetail = new RecordSet(); + try { + resourceComInfo = new ResourceComInfo(); + String loginid = request.getEmpCode();//拟稿人工号 + String deptCode = request.getDeptCode();//拟稿人部门编码 + String account = ""; + Integer deptid = -1; + //是否为分支机构 + boolean isSub=!("010803".equals(request.getEmpCode())&&"ZZ001".equals(request.getDeptCode())); + //是否兼岗账号 岗位 + boolean isSecondPosition=loginid.contains("@"); + //如果为分支机构获取到他的次账号 + if (isSecondPosition) {//次账号处理 + //根据部门编码获取部门id + rsdetail.executeQuery("select id from hrmdepartment where departmentcode = ?", deptCode); + if (rsdetail.next()) { + deptid = Util.getIntValue(rsdetail.getString("id")); + } + log.info("根据部门编码获取部门id==" + deptid); + //截取@符之前数字--loginid + String mainLogind = loginid.substring(0, loginid.indexOf("@")); + log.info("主账号id==" + mainLogind); + rs.executeQuery("select id from hrmresource where loginid = ?", mainLogind); + if (rs.next()) { + account = Util.null2String(rs.getString("id"));//主账号id + rsdetail.executeQuery("select id from hrmresource where belongto = ?", account); + while (rsdetail.next()) { + String userid = Util.null2String(rsdetail.getString("id")); + log.info("账号" + account + "==存在次账号==" + userid); + //获取部门进行比较 + String departmentID = resourceComInfo.getDepartmentID(userid); + log.info("==次账号部门id==" + departmentID); + if (deptid == Integer.parseInt(departmentID)) { + account = userid; + break; + } + } + } else { + datas.put("info", "系统查无此人"); + return datas; + } + } else { + //1.验真工号准确性//// + rs.executeQuery("select id from hrmresource where loginid = ?", loginid); + if (rs.next()) { + account = Util.null2String(rs.getString("id")); + } else { + datas.put("info", "系统查无此人"); + return datas; + } + } + + datas.put("account", account); + log.info("==account==" + account); + //2.自动创建OA商旅付款流程 + PropBean pb = new PropBean(); + String workflowId; + String requestName; + if(isSub){ + workflowId = pb.getPropName("FZJGJSFK_WORKFLOWID"); + }else{ + workflowId = pb.getPropName("SLJSFK_WORKFLOWID"); + } + Map requestMainMap = new HashMap(); + String timeTempStr = request.getBeginTime().substring(0, 7); + String[] tempArr = timeTempStr.split("-"); + if(isSub){ + requestName = "分支机构智能商旅" + tempArr[0] + "年" + tempArr[1] + "月费用月结"; + //分支机构流程为下一节点指定处理人 + int bmbm = getDeptId(request.getDeptCode()); + rs.executeQuery("select kj,kjjl from uf_fzjgfkgwpp where bm = ?",bmbm); + while(rs.next()){ + String kj = rs.getString("kj"); + String kjjl = rs.getString("kjjl"); + if(StringUtils.isNotBlank(kj) && StringUtils.isNotBlank(kjjl)){ + requestMainMap.put("ngfgsfyhjsh",kj); + requestMainMap.put("fgscwjlsh", kjjl); + } + } + }else{ + requestName = "智能商旅" + tempArr[0] + "年" + tempArr[1] + "月费用月结"; + } + String lcbh = getLcbh(Integer.parseInt(workflowId)); + String ngsj = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")); + requestMainMap.put("lcbh", lcbh); + requestMainMap.put("ngsj", ngsj); + requestMainMap.put("fkxx", "0"); + requestMainMap.put("ngr",account); + String bm = getDeptId(request.getDeptCode()) + ""; + requestMainMap.put("szbm", bm); + //分支机构需要赋值对应的出纳人 + if (isSub) { + Map cnMap = getCNRYInfo(bm); + String cnry = cnMap.get("cnry"); + String cnrygh = cnMap.get("cnrygh"); + if (StringUtils.isNotBlank(cnry)) { + requestMainMap.put("cnry", cnry); + } else { + log.warn("分支机构商旅结算付款流程创建失败,未配置对应出纳! ngr:" + account + ", bm:" + bm); + datas.put("info", "分支机构商旅结算付款流程创建失败,未配置对应出纳"); + return datas; + } + if(StringUtils.isNotBlank(cnrygh)){ + requestMainMap.put("cnrygh", cnrygh); + }else{ + log.warn("分支机构商旅结算付款流程创建失败,获取出纳人员工号失败! ngr:" + account + ", bm:" + bm); + datas.put("info", "分支机构商旅结算付款流程创建失败,获取出纳人员工号失败"); + return datas; + } + } + //分支机构指定人员拟稿时,走指定内部审核 + if(request.getEmpCode().equals("006628@ZZ323305_2703")){ + requestMainMap.put("nbshr","25151"); + } + Integer requestid = Util.getIntValue(WorkflowCreateUtil + .workflowCreateByRequestMap(account, workflowId, requestName, IsNextFlow, + requestMainMap)); + if (requestid > 0) { + log.info("商旅付款流程编号:" + requestid); + log.info(String.format("do update requestmark where requestid = %s", requestid)); + rs.executeUpdate("update workflow_requestbase set requestmark = ? where requestid = ?", + lcbh, requestid); + request.setRequestId(requestid); + saveDetailInfo(request); + datas.put("info", "商旅付款流程自动创建成功"); + datas.put("requestid",requestid); + } else { + datas.put("info", "商旅付款流程自动创建失败"); + } + } catch (Exception e) { + log.error("商旅付款流程创建或明细信息存储出错!", e); + datas.put("info", "商旅付款流程创建或明细信息存储出错"); + } + return datas; + } + + @Override + public void saveDetailInfo(TripPaymentRequest request) + throws Exception { + RecordSet rs = new RecordSet(); + Integer requestid = request.getRequestId(); + //查询主表名 + String tablename = "formtable_main_"; + String tableSql = "select formid from workflow_base where id = " + + "(select workflowid from workflow_requestbase where requestid = " + + requestid + ")"; + rs.execute(tableSql); + if (rs.next()) { + int formid = Math.abs(Util.getIntValue(rs.getString("formid"))); + tablename = tablename + formid; + } + //查询主表id + int mainId = -1; + rs.executeQuery(String.format("select id from %s where requestid = ?", tablename), requestid); + while (rs.next()) { + mainId = Util.getIntValue(rs.getString("id")); + } + Assert.isTrue(mainId > 0, "mainId <= 0 "); + //更新合同信息 + List updateHTParams = new ArrayList<>(); + PaymentService paymentServiceImpl = new PaymentServiceImpl(); + //合同名称 + String contractCode = ""; + //合同编码 + String processCode = ""; + ContractRequestParam param = new ContractRequestParam(); + param.setUserCode(request.getEmpCode()); + if(request.getEmpCode().equals("007070@ZZ323429_2703") || request.getEmpCode().equals("006628@ZZ323305_2703")){ + contractCode = "智能商旅服务的补充协议"; + processCode = "合计(2020)26806"; + updateHTParams.add(mainId); + updateHTParams.add(processCode); + updateHTParams.add(contractCode); + rs.executeUpdate(String.format("update %s set htxx = ? where id = ?",tablename),"合计(2020)26806",mainId); + param.setCode(processCode); + param.setName(contractCode); + setContractInfoIntoParam(updateHTParams, paymentServiceImpl, contractCode, processCode, + param); + updateHTParams.add(processCode); + }else if (!("010803".equals(request.getEmpCode())&&"ZZ001".equals(request.getDeptCode()))){ + contractCode = "携程商旅出行服务补充协议"; + processCode = "合计(2020)14579"; + updateHTParams.add(mainId); + updateHTParams.add(processCode); + updateHTParams.add(contractCode); + rs.executeUpdate(String.format("update %s set htxx = ? where id = ?",tablename),"合计(2020)14579",mainId); + param.setCode(processCode); + param.setName(contractCode); + setContractInfoIntoParam(updateHTParams, paymentServiceImpl, contractCode, processCode, + param); + updateHTParams.add(processCode); + }else{ + contractCode = "集中采购转合同审批(商务旅行服务协议)"; + processCode = "合计(2019)18564"; + updateHTParams.add(mainId); + updateHTParams.add(processCode); + updateHTParams.add(contractCode); + //总部流程更新主表 + rs.executeUpdate(String.format("update %s set htxx = ? where id = ?",tablename),"合计(2019)18564",mainId); + param.setCode(processCode); + param.setName(contractCode); + setContractInfoIntoParam(updateHTParams, paymentServiceImpl, contractCode, processCode, + param); + updateHTParams.add(processCode); + } + //更新分支机构 总部通用的合同明细信息 + rs.executeUpdate(String.format("insert into %s (mainid,htbh,htmc,yfjebhbq," + + "htze,ckhtxx,bqzfje,wfjebhbq,bz) " + + "values(?,?,?,?,?,?,0,0,5)", + tablename + "_dt4"),updateHTParams); + + //更新主表支付类型字段 + ExecutorService executorService = Executors.newCachedThreadPool(); + CompletionService> cs = new ExecutorCompletionService<>(executorService); + Callable compareCallable = () -> getCompareInfo(request); + + Callable getDeptInfoCallable = () -> getDeptInfo(request); + + Callable getPaymentDetailInfoCallable = () -> getPaymentDetailInfo(request); + + Callable getAllowanceDetailCallable = () -> getAllowanceDetail(request); + //构建futureTask任务,控制返回顺序 + FutureTask> futureTask1 = new FutureTask>( + compareCallable); + FutureTask> futureTask2 = new FutureTask>( + getDeptInfoCallable); + FutureTask> futureTask3 = new FutureTask>( + getPaymentDetailInfoCallable); + FutureTask> futureTask4 = new FutureTask>( + getAllowanceDetailCallable); + StopWatch sw = new StopWatch("差旅对账接口调用耗时"); + sw.start("对比信息"); + executorService.submit(futureTask1); + sw.stop(); + sw.start("账单汇总"); + executorService.submit(futureTask2); + sw.stop(); + sw.start("账单明细"); + executorService.submit(futureTask3); + sw.stop(); + sw.start("差补明细"); + executorService.submit(futureTask4); + sw.stop(); + log.info("差旅对账接口调用耗时汇总" + sw.prettyPrint()); + String compareResult = (futureTask1.get()).get("compareResult"); + String orderSettlementDetailJson = (futureTask3.get()).get("orderSettlementDetailJson"); + String allowanceDetailJson = (futureTask4.get()).get("allowanceDetailJson"); + Map temp = futureTask2.get(); + String allowanceSummaryRes = temp.get("allowanceSummaryRes"); + String snapshotInfoRes = temp.get("snapshotInfoRes"); + + //保存月结账单对比数据(对比信息) + saveCompareInfoToDB(compareResult, mainId, tablename); + + //保存部门账单费用汇总(账单汇总) + savePaymentSummaryPerDeptToDB(allowanceSummaryRes, snapshotInfoRes, mainId, tablename, request); + + //保存机票 火车 酒店 用车 订单订单明细(账单明细) + savePaymentDetailToDB(orderSettlementDetailJson, mainId, tablename); + + //总部需要写入携程合阿里的费用明细,以及对应的订单明细 + if (("010803".equals(request.getEmpCode())&&"ZZ001".equals(request.getDeptCode()))){ + TripPaymentRequest ctripRequest=new TripPaymentRequest(); + BeanUtils.copyProperties(request,ctripRequest); + ctripRequest.setPlatformType("CTRIP"); + //携程部门明细汇总 + String ctripSnapshotInfoRes = getSnapshotInfo(ctripRequest).get("snapshotInfoRes"); + saveCostPerDeptAndSupplierToDB(ctripSnapshotInfoRes, mainId, tablename,"dt20"); + + TripPaymentRequest alitripRequest=new TripPaymentRequest(); + BeanUtils.copyProperties(request,alitripRequest); + alitripRequest.setPlatformType("ALITRIP"); + //阿里部门明细汇总 + String alitripSnapshotInfoRes = getSnapshotInfo(alitripRequest).get("snapshotInfoRes"); + saveCostPerDeptAndSupplierToDB(alitripSnapshotInfoRes, mainId, tablename,"dt26"); + + //重新设置支付明细 + saveZFMXToDB(allowanceSummaryRes,ctripSnapshotInfoRes,alitripSnapshotInfoRes,mainId,tablename); + } + + //保存差补明细(差补明细) + saveAllowanceDetailToDB(allowanceDetailJson, mainId, tablename); + + //K1810012 拆分税金,hto-5468 + splitTaxesSaveToMainDB(mainId, tablename); + + //发起费用预占 + doBudgetCommit(tablename, request.getRequestId()); + + //生成会计科目 + updateAccountDetail(requestid, tablename); + + } + + private void setContractInfoIntoParam(List updateHTParams, + PaymentService paymentServiceImpl, String contractCode, String processCode, + ContractRequestParam param) throws Exception { + //接口获取已付金额 合同金额 + String yfjeRes = paymentServiceImpl.queryContractPaidMoney(contractCode,processCode); + ContractInfoVo contractInfoVo = paymentServiceImpl.queryContractPagination(param); + //设置已付金额参数 + if(StringUtils.isNotBlank(yfjeRes)){ + JSONObject yfObject = JSONObject.parseObject(yfjeRes); + String isSuccess = yfObject.getString("isSuccess"); + //已付接口请求失败 + if(!isSuccess.equalsIgnoreCase("true")){ + updateHTParams.add("0"); + }else{ + updateHTParams.add(yfObject.getString("data")); + } + }else{ + updateHTParams.add("0"); + } + //设置合同金额参数 + if(contractInfoVo == null){ + updateHTParams.add("0"); + }else{ + JSONObject contractObject = (JSONObject) JSONObject.toJSON(contractInfoVo); + String isSuccess = contractObject.getString("isSuccess"); + //合同接口请求失败 + if(!isSuccess.equalsIgnoreCase("true")){ + updateHTParams.add("0"); + }else{ + if(CollectionUtils.isEmpty(contractObject.getJSONArray("data"))){ + updateHTParams.add("0"); + }else{ + JSONObject contract = (JSONObject) contractObject.getJSONArray("data").get(0); + String htje = contract.getString("ttl"); + updateHTParams.add(htje); + } + } + } + } + + private String updateAccountDetail(Integer requestid, String tablename) { + BTSUpdateAccountDetail ac = new BTSUpdateAccountDetail(); + try { + RequestInfo ri = new RequestInfo(); + ri.setRequestid(String.valueOf(requestid)); + RequestManager rm = new RequestManager(); + rm.setBilltablename(tablename); + ri.setRequestManager(rm); + return ac.execute(ri); + } catch (Exception e) { + log.error("商旅结算付款生成会计科目失败"); + return BTSUpdateAccountDetail.FAILURE_AND_CONTINUE; + } + } + + private void splitTaxesSaveToMainDB(int mainId, String tableName) { + log.info("商旅结算付款执行费用分摊逻辑"); + if (!CollectionUtils.isEmpty(budgetItems)) { + RecordSetTrans rst = new RecordSetTrans(); + rst.setAutoCommit(false); + try { + List deductionTaxList = new ArrayList<>(); + List inputTaxList = new ArrayList<>(); + + budgetItems.forEach(row -> { + Integer sy = (Integer) row.get(7); + String sj = (String) row.get(4); + //机票 火车 + if (sy == 0 || sy == 1) { + deductionTaxList.add(new BigDecimal(sj)); + } + //用车 酒店 服务费 + if (sy == 2 || sy == 3 || sy == 5) { + inputTaxList.add(new BigDecimal(sj)); + } + }); + BigDecimal deductionTax = deductionTaxList.stream().reduce(BigDecimal.ZERO, BigDecimal::add); //计算抵扣进项小计 + BigDecimal inputTax = inputTaxList.stream().reduce(BigDecimal.ZERO, BigDecimal::add); //进项税小计 + + log.info(String.format("分摊后数据, deductionTax:%s, inputTax:%s", deductionTax, inputTax)); + rst.executeUpdate("update " + tableName + + " set jsdksjxj=?,jxsxj=? where ID=?", deductionTax, inputTax, mainId); + rst.commit(); + } catch (Exception e) { + rst.rollback(); + log.error("拆分税金小计异常"); + } + + } + + + } + + + private void saveCompareInfoToDB(String compareResult, int mainId, String tablename) { + //获取月结账单对比信息,并更新对应表中数据 + RecordSet rs = new RecordSet(); + Map hasDiff = new HashMap<>(); + Map noDiff = new HashMap<>(); + //存在差异数据时存入差异明细,不存在时存入对比结果 + JSONObject jsonDuiBi = JSONObject.parseObject(compareResult); + if (jsonDuiBi == null) { + log.warn("compare info is null!"); + return; + } + JSONArray jsonArraymoth = jsonDuiBi.getJSONArray("compareResultModelList"); + if (jsonArraymoth != null) { + //对比接口返回,该数组实际只有一个元素(仅返回一个月的数据) + for (int i = 0; i < jsonArraymoth.size(); i++) { + JSONObject jsonObject = jsonArraymoth.getJSONObject(i); + String compareMonth = jsonObject.getJSONObject("compareHistoryDetail") + .getString("compareMonth"); + String comparisonre = jsonObject.getJSONObject("compareHistoryDetail") + .getString("compareResult"); + if (StringUtils.isNotEmpty(comparisonre)) { + if ("CORRECT".equals(comparisonre)) { + //无差异 + if (StringUtils.isNotEmpty(compareMonth)) { + //对比月份 + noDiff.put("dbyf", compareMonth); + } else { + log.warn("compare month in response is empty!"); + } + noDiff.put("dbjg", "无差异"); + } else { + String detailJson = jsonObject.getString("orderCompareResultDetails"); + //有差异 + if (StringUtils.isNotEmpty(compareMonth)) { + //对比月份 + hasDiff.put("dbyf", compareMonth); + } else { + log.warn("compare month in response is empty!"); + } + hasDiff.put("dbjg", detailJson); + } + } else { + log.warn("compare result is empty!"); + } + } + if (mainId != -1) { + //无差异数据,只更新主表,若存在差异数据,则需要同时更新主表与明细表 + if (!CollectionUtils.isEmpty(noDiff)) { + //update maintable only + String dbyf = (String) noDiff.get("dbyf"); + String dbjg = (String) noDiff.get("dbjg"); + rs.executeUpdate(String.format("update %s set dbyf = ?,dbjg = ? where id = ?", tablename), + dbyf, dbjg, mainId); + } + //update maintable and detail table together + if (!CollectionUtils.isEmpty(hasDiff)) { + String dbyf = (String) hasDiff.get("dbyf"); + String dbjg = (String) hasDiff.get("dbjg"); + rs.executeUpdate(String.format("update %s set dbyf = ?,dbjg = ? where id = ?", tablename), + dbyf, dbjg, mainId); + saveMonthlyCompareDetailToDB(hasDiff, mainId, tablename); + } + } + } + } + + private void saveMonthlyCompareDetailToDB(Map param, int mainId, + String tablename) { + RecordSet rs = new RecordSet(); + List updateParams = new ArrayList<>(); + String detailJsonStr = (String) param.get("dbjg"); + JSONArray jsonArray = null; + if (StringUtils.isNotBlank(detailJsonStr)) { + jsonArray = JSON.parseArray(detailJsonStr); + } + if (jsonArray != null) { + for (int i = 0; i < jsonArray.size(); i++) { + JSONObject jsonObject = jsonArray.getJSONObject(i); + List list = new ArrayList<>(); + list.add(mainId); + String ddh = jsonObject.getString("orderId"); + list.add(ddh); + String ddlx = jsonObject.getString("orderType"); + list.add(ddlx); + String cylx = jsonObject.getString("orderErrorType"); + list.add(cylx); + //金额接口返回即为保留2位 + String htmxjeStr = jsonObject.getString("orderAmount"); + list.add(htmxjeStr); + String xcmxje = jsonObject.getString("batchAmount"); + list.add(xcmxje); + String glxch = jsonObject.getString("journeyId"); + list.add(glxch); + String yggh = jsonObject.getString("employeeId"); + list.add(yggh); + String ygxm = jsonObject.getString("employeeName"); + list.add(ygxm); + String zffs = jsonObject.getString("payType"); + list.add(zffs); + int bmbm = getDeptId(jsonObject.getString("empDeptCode")); + int ygbm = getEmpId(jsonObject.getString("employeeId")); + list.add(bmbm); + list.add(ygbm); + updateParams.add(list); + } + } + rs.executeUpdate(String.format("delete from %s where mainid = ?", tablename + "_dt13"), mainId); + rs.executeBatchSql(String.format( + "insert into %s (mainid,ddh,ddlx,cylx,htmxje,xcmxje,glxch,yggh,ygxm,zffs,bmbm,ygbm" + + ") values(?,?,?,?,?,?,?,?,?,?,?,?) ", tablename + "_dt13"), updateParams); + } + + private void savePaymentSummaryPerDeptToDB(String allowanceSummaryRes, String snapshotInfoRes, + int mainId, String tablename, TripPaymentRequest request) { + RecordSet rs = new RecordSet(); + List updateParams = new ArrayList<>(); + List bbzfUpdateParams = new ArrayList<>(); + List zfmxUpdateParams = new ArrayList<>(); + Set chaibuDeptSet; + Set paymentDeptSet = new HashSet<>(); + //处理差补汇总信息,按照部门分组 + Map allowanceSummaryMap = new HashMap<>(); + JSONObject allowanceJson = JSONObject.parseObject(allowanceSummaryRes); + JSONArray allowanceJsonArray = allowanceJson.getJSONArray("travelAllowanceCollectDetails"); + if (allowanceJsonArray != null) { + for (int i = 0; i < allowanceJsonArray.size(); i++) { + JSONObject jsonObject = allowanceJsonArray.getJSONObject(i); + String deptCode = jsonObject.getString("deptCode"); + // String allowanceAmount = jsonObject.getString("allowanceAmount"); + if (StringUtils.isNotEmpty(deptCode)) { + allowanceSummaryMap.put(deptCode, jsonObject); + } + } + } else { + log.warn("get allowance summary failed!"); + } + JSONObject snapshotInfoJson = JSONObject.parseObject(snapshotInfoRes); + JSONArray snapshotInfoJsonArray = snapshotInfoJson.getJSONArray("deptOrderResultModels"); + DepartmentComInfo dc = new DepartmentComInfo(); + //存储汇总信息 + String jpze = snapshotInfoJson.getString("flightAmount"); + String hcpze = snapshotInfoJson.getString("trainAmount"); + String jdze = snapshotInfoJson.getString("hotelAmount"); + String ycze = snapshotInfoJson.getString("carAmount"); + String fwfze = snapshotInfoJson.getString("serviceFeeAmount"); + String xcfyze = snapshotInfoJson.getString("totalAmount"); + String cbze = allowanceJson.getString("totalAllowanceAmount"); + List hzUpdateParams = new ArrayList<>(); + List hzList = new ArrayList<>(); + hzList.add(mainId); + hzList.add(jpze); + hzList.add(hcpze); + hzList.add(jdze); + hzList.add(ycze); + hzList.add(fwfze); + hzList.add(xcfyze); + hzList.add(cbze); + hzUpdateParams.add(hzList); + //录入汇总信息 + rs.executeUpdate(String.format("delete from %s where mainid = ?", tablename + "_dt14"), mainId); + rs.executeBatchSql(String.format( + "insert into %s (mainid,jpze,hcpze,jdze,ycze,fwfze,xcfyze,cbze) values(?,?,?,?,?,?,?,?)", + tablename + "_dt14"), hzUpdateParams); + Map getCysParams = new HashMap<>(); + String idPrefix = Util.null2String(new PropBean().getPropName("YSaccountTreeId_yskm")); + + if (snapshotInfoJsonArray != null) { + for (int i = 0; i < snapshotInfoJsonArray.size(); i++) { + JSONObject jsonObject = snapshotInfoJsonArray.getJSONObject(i); + List list = new ArrayList<>(); + String bm; + String jp; + String hcp; + String jd; + String yc; + String fwfhj; + String xcfyhj; + String cbTemp; + //若该部门差补信息为空,则默认为0 + String cb; + int bmbm; + String kdksze; + String tpf; + BigDecimal bhsje; + int cys; + BigDecimal jpje; + BigDecimal kdkseje; + BigDecimal temp1; + BigDecimal temp2; + BigDecimal temp3; + BigDecimal temp4; + BigDecimal cbje; + BigDecimal cysje; + paymentDeptSet.add(jsonObject.getString("deptCode")); + //差补的部门信息中包含该部门信息 + if (allowanceSummaryMap.containsKey(jsonObject.getString("deptCode"))) { + bm = jsonObject.getString("deptName"); + jp = jsonObject.getString("flightAmount"); + hcp = jsonObject.getString("trainAmount"); + jd = jsonObject.getString("hotelAmount"); + yc = jsonObject.getString("carAmount"); + fwfhj = jsonObject.getString("serviceFeeAmount"); + xcfyhj = jsonObject.getString("totalAmount"); + cbTemp = ((JSONObject) allowanceSummaryMap.get(jsonObject.getString("deptCode"))) + .getString("allowanceAmount"); + //若该部门差补信息为空,则默认为0 + cb = StringUtils.isEmpty(cbTemp) ? "0.00" : cbTemp; + bmbm = getDeptId(jsonObject.getString("deptCode")); + kdksze = jsonObject.getString("flightDeductibleTaxAmount"); + tpf = jsonObject.getString("trainCancelFeeAmount"); + //计算不含税金额及超预算 + jpje = new BigDecimal(jp); + kdkseje = new BigDecimal(kdksze); + temp1 = new BigDecimal(hcp).subtract(new BigDecimal(tpf)); + temp2 = temp1.divide(new BigDecimal("1.09"), 2, BigDecimal.ROUND_HALF_UP); + temp3 = new BigDecimal(jd).add(new BigDecimal(yc)); + temp4 = temp3.divide(new BigDecimal("1.06"), 2, BigDecimal.ROUND_HALF_UP); + cbje = new BigDecimal(cb == null ? "0" : cb); + //不含税金额=机票 - 可抵扣税额+ (火车-退票费)/1.09+ 火车退票费 + (酒店+用车)/1.06 + 补贴 + bhsje = (jpje.subtract(kdkseje)).add(temp2).add(new BigDecimal(tpf)).add(temp4).add(cbje); + String bmCode = dc.getDepartmentCode(bmbm + ""); + getCysParams.put("deptNum", bmCode); + getCysParams.put("deptType", getDeptTypeCode(bmbm + "")); + getCysParams.put("Bgitem", "8601050301"); + cysje = getBigDecimalCys(getCysParams); + //超预算标识 0 未超预算 1 超预算 2未处理数据 + cys = getCys(bhsje, cysje); + } else { + bm = jsonObject.getString("deptName"); + jp = jsonObject.getString("flightAmount"); + hcp = jsonObject.getString("trainAmount"); + jd = jsonObject.getString("hotelAmount"); + yc = jsonObject.getString("carAmount"); + fwfhj = jsonObject.getString("serviceFeeAmount"); + xcfyhj = jsonObject.getString("totalAmount"); + //差补中不包含该部门,取0 + cb = "0.00"; + bmbm = getDeptId(jsonObject.getString("deptCode")); + kdksze = jsonObject.getString("flightDeductibleTaxAmount"); + tpf = jsonObject.getString("trainCancelFeeAmount"); + //计算不含税金额及超预算 + jpje = new BigDecimal(jp); + kdkseje = new BigDecimal(kdksze); + temp1 = new BigDecimal(hcp).subtract(new BigDecimal(tpf)); + temp2 = temp1.divide(new BigDecimal("1.09"), 2, BigDecimal.ROUND_HALF_UP); + temp3 = new BigDecimal(jd).add(new BigDecimal(yc)); + temp4 = temp3.divide(new BigDecimal("1.06"), 2, BigDecimal.ROUND_HALF_UP); + cbje = new BigDecimal(cb == null ? "0" : cb); + //不含税金额=机票 - 可抵扣税额+ (火车-退票费)/1.09+ 火车退票费 + (酒店+用车)/1.06 + 补贴 + bhsje = (jpje.subtract(kdkseje)).add(temp2).add(new BigDecimal(tpf)).add(temp4).add(cbje); + String bmCode = dc.getDepartmentCode(bmbm + ""); + getCysParams.put("deptNum", bmCode); + getCysParams.put("deptType", getDeptTypeCode(bmbm + "")); + getCysParams.put("Bgitem", "8601050301"); + cysje = getBigDecimalCys(getCysParams); + //超预算标识 0 未超预算 1 超预算 2未处理数据 + cys = getCys(bhsje, cysje); + } + list.add(mainId); + list.add(bm); + list.add(jp); + list.add(hcp); + list.add(jd); + list.add(yc); + list.add(fwfhj); + list.add(xcfyhj); + list.add(cb); + list.add(bmbm); + list.add(kdksze); + list.add(tpf); + list.add(bhsje.toString()); + list.add(cys); + updateParams.add(list); + List bbzfList1 = new ArrayList<>(); + List bbzfList2 = new ArrayList<>(); + List bbzfList3 = new ArrayList<>(); + List bbzfList4 = new ArrayList<>(); + List bbzfList5 = new ArrayList<>(); + //mainid,fysjcdbm,,yskm,bhsje,sj,jshjje,cys + //交通费类型使用相同会计科目的预算接口返回 + getCysParams.put("Bgitem", "8601050301"); + cysje = getBigDecimalCys(getCysParams); + //mainid + bbzfList1.add(mainId); + //fysjcdbm + bbzfList1.add(bmbm); + //yskm + bbzfList1.add("8601050301"); + //bhsje = 合计 - 税金 + BigDecimal bhsje1 = jpje.subtract(kdkseje); + bbzfList1.add(bhsje1.toString()); + //sj + bbzfList1.add(kdkseje.toString()); + //jshjje = 不含税金额 + 税金 + bbzfList1.add(bhsje1.add(kdkseje).toString()); + //cys + bbzfList1.add(getCys(bhsje1, cysje)); + //sy + bbzfList1.add(0); + //sl + bbzfList1.add(10); + //yskmid + bbzfList1.add(idPrefix + "_" + "8601050301"); + + bbzfList2.add(mainId); + bbzfList2.add(bmbm); + bbzfList2.add("8601050301"); + BigDecimal sj2 = temp2.multiply(new BigDecimal("0.09")).setScale(2, BigDecimal.ROUND_HALF_UP); + //合计 - 税金 + BigDecimal bhsje2 = new BigDecimal(hcp).subtract(sj2); + bbzfList2.add(bhsje2.toString()); + bbzfList2.add(sj2.toString()); + bbzfList2.add(bhsje2.add(sj2).toString()); + bbzfList2.add(getCys(bhsje2, cysje)); + bbzfList2.add(1); + bbzfList2.add(10); + bbzfList2.add(idPrefix + "_" + "8601050301"); + + bbzfList3.add(mainId); + bbzfList3.add(bmbm); + bbzfList3.add("8601050301"); + BigDecimal sj3 = new BigDecimal(yc) + .divide(new BigDecimal("1.06"), 2, BigDecimal.ROUND_HALF_UP) + .multiply(new BigDecimal("0.06")).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal bhsje3 = new BigDecimal(yc).subtract(sj3); + bbzfList3.add(bhsje3.toString()); + bbzfList3.add(sj3.toString()); + bbzfList3.add(bhsje3.add(sj3).toString()); + bbzfList3.add(getCys(bhsje3, cysje)); + bbzfList3.add(2); + bbzfList3.add(10); + bbzfList3.add(idPrefix + "_" + "8601050301"); + + getCysParams.put("Bgitem", "8601050303"); + cysje = getBigDecimalCys(getCysParams); + bbzfList4.add(mainId); + bbzfList4.add(bmbm); + bbzfList4.add("8601050303"); + BigDecimal sj4 = new BigDecimal(jd) + .divide(new BigDecimal("1.06"), 2, BigDecimal.ROUND_HALF_UP) + .multiply(new BigDecimal("0.06")).setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal bhsje4 = new BigDecimal(jd).subtract(sj4); + bbzfList4.add(bhsje4.toString()); + bbzfList4.add(sj4.toString()); + bbzfList4.add(bhsje4.add(sj4).toString()); + bbzfList4.add(getCys(bhsje4, cysje)); + bbzfList4.add(3); + bbzfList4.add(10); + bbzfList4.add(idPrefix + "_" + "8601050303"); + + getCysParams.put("Bgitem", "8601050302"); + cysje = getBigDecimalCys(getCysParams); + bbzfList5.add(mainId); + bbzfList5.add(bmbm); + bbzfList5.add("8601050302"); + BigDecimal bhsje5 = cbje; + bbzfList5.add(cbje.toString()); + BigDecimal sj5 = new BigDecimal("0"); + bbzfList5.add(sj5.toString()); + bbzfList5.add(cbje.add(sj5).toString()); + bbzfList5.add(getCys(bhsje5, cysje)); + bbzfList5.add(4); + bbzfList5.add(10); + bbzfList5.add(idPrefix + "_" + "8601050302"); + bbzfUpdateParams.add(bbzfList1); + bbzfUpdateParams.add(bbzfList2); + bbzfUpdateParams.add(bbzfList3); + bbzfUpdateParams.add(bbzfList4); + bbzfUpdateParams.add(bbzfList5); + } + //部门汇总信息中,差补返回的部门多余账单汇总中的部门,则该部门只包含差补信息和部门信息 + chaibuDeptSet = allowanceSummaryMap.keySet(); + chaibuDeptSet.removeAll(paymentDeptSet); + if (!CollectionUtils.isEmpty(chaibuDeptSet)) { + for (String deptCode : chaibuDeptSet) { + List tempList = new ArrayList<>(); + String bm = ((JSONObject) allowanceSummaryMap.get(deptCode)).getString("deptName"); + String jp = "0.00"; + String hcp = "0.00"; + String jd = "0.00"; + String yc = "0.00"; + String fwfhj = "0.00"; + String xcfyhj = "0.00"; + String cbTemp = ((JSONObject) allowanceSummaryMap.get(deptCode)) + .getString("allowanceAmount"); + //若该部门差补信息为空,则默认为0 + String cb = StringUtils.isEmpty(cbTemp) ? "0.00" : cbTemp; + int bmbm = getDeptId( + ((JSONObject) allowanceSummaryMap.get(deptCode)).getString("deptCode")); + String kdksze = "0.00"; + String tpf = "0.00"; + //超预算标识 0 未超预算 1 超预算 2未处理数据 + String bhsje = "0.00"; + int cys = 0; + tempList.add(mainId); + tempList.add(bm); + tempList.add(jp); + tempList.add(hcp); + tempList.add(jd); + tempList.add(yc); + tempList.add(fwfhj); + tempList.add(xcfyhj); + tempList.add(cb); + tempList.add(bmbm); + tempList.add(kdksze); + tempList.add(tpf); + tempList.add(bhsje); + tempList.add(cys); + updateParams.add(tempList); + + //本币支付模块在差补 部门信息多余 账单部门信息时 + List bbzfList1 = new ArrayList<>(); + List bbzfList2 = new ArrayList<>(); + List bbzfList3 = new ArrayList<>(); + List bbzfList4 = new ArrayList<>(); + List bbzfList5 = new ArrayList<>(); + //mainid,fysjcdbm,,yskm,bhsje,sj,jshjje,cys + //交通费类型使用相同会计科目的预算接口返回 + BigDecimal cysje = BigDecimal.ZERO; + //mainid + bbzfList1.add(mainId); + //fysjcdbm + bbzfList1.add(bmbm); + //yskm + bbzfList1.add("8601050301"); + //bhsje = 机票-可抵扣税额 + BigDecimal bhsje1 = BigDecimal.ZERO; + bbzfList1.add(bhsje1.toString()); + //sj + bbzfList1.add(BigDecimal.ZERO.toString()); + //jshjje = 不含税金额 + 税金 + bbzfList1.add(bhsje1.add(BigDecimal.ZERO).toString()); + //cys + bbzfList1.add(0); + //sy + bbzfList1.add(0); + //sl + bbzfList1.add(10); + //yskmid + bbzfList1.add(idPrefix + "_" + "8601050301"); + + bbzfList2.add(mainId); + bbzfList2.add(bmbm); + bbzfList2.add("8601050301"); + BigDecimal bhsje2 = BigDecimal.ZERO; + bbzfList2.add(bhsje2.toString()); + BigDecimal sj2 = BigDecimal.ZERO; + bbzfList2.add(sj2.toString()); + bbzfList2.add(bhsje2.add(sj2).toString()); + bbzfList2.add(0); + bbzfList2.add(1); + bbzfList2.add(10); + bbzfList2.add(idPrefix + "_" + "8601050301"); + + bbzfList3.add(mainId); + bbzfList3.add(bmbm); + bbzfList3.add("8601050301"); + BigDecimal bhsje3 = BigDecimal.ZERO; + bbzfList3.add(bhsje3.toString()); + BigDecimal sj3 = BigDecimal.ZERO; + bbzfList3.add(sj3.toString()); + bbzfList3.add(bhsje3.add(sj3).toString()); + bbzfList3.add(0); + bbzfList3.add(2); + bbzfList3.add(10); + bbzfList3.add(idPrefix + "_" + "8601050301"); + + bbzfList4.add(mainId); + bbzfList4.add(bmbm); + bbzfList4.add("8601050303"); + BigDecimal bhsje4 = BigDecimal.ZERO; + bbzfList4.add(bhsje4.toString()); + BigDecimal sj4 = BigDecimal.ZERO; + bbzfList4.add(sj4.toString()); + bbzfList4.add(bhsje4.add(sj4).toString()); + bbzfList4.add(0); + bbzfList4.add(3); + bbzfList4.add(10); + bbzfList4.add(idPrefix + "_" + "8601050303"); + + Map tempCysParams = new HashMap<>(); + tempCysParams.put("deptNum", deptCode); + tempCysParams.put("deptType", getDeptTypeCode(bmbm + "")); + tempCysParams.put("Bgitem", "8601050302"); + cysje = getBigDecimalCys(tempCysParams); + bbzfList5.add(mainId); + bbzfList5.add(bmbm); + bbzfList5.add("8601050302"); + BigDecimal bhsje5 = new BigDecimal(cb); + bbzfList5.add(cb); + BigDecimal sj5 = new BigDecimal("0"); + bbzfList5.add(sj5.toString()); + bbzfList5.add(new BigDecimal(cb).add(sj5).toString()); + bbzfList5.add(getCys(bhsje5, cysje)); + bbzfList5.add(4); + bbzfList5.add(10); + bbzfList5.add(idPrefix + "_" + "8601050302"); + bbzfUpdateParams.add(bbzfList1); + bbzfUpdateParams.add(bbzfList2); + bbzfUpdateParams.add(bbzfList3); + bbzfUpdateParams.add(bbzfList4); + bbzfUpdateParams.add(bbzfList5); + } + } + + + //分支机构费用不分摊计财部,而是到请求对应部门 + if(!("010803".equals(request.getEmpCode())&&"ZZ001".equals(request.getDeptCode()))){ + String fzCode = request.getDeptCode(); + getCysParams.put("deptNum", fzCode); + int deptId = getDeptId(fzCode); + String deptTypeCode = getDeptTypeCode(deptId + ""); + getCysParams.put("deptType", deptTypeCode); + getCysParams.put("Bgitem", "8601050302"); + BigDecimal cysje; + cysje = getBigDecimalCys(getCysParams); + List fzList = new ArrayList<>(); + fzList.add(mainId); + fzList.add(deptId); + fzList.add("8601050302"); + BigDecimal fzsj = new BigDecimal(snapshotInfoJson.getString("serviceFeeAmount")) + .divide(new BigDecimal("1.06"), 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("0.06")) + .setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal fzbhsje = new BigDecimal(snapshotInfoJson.getString("serviceFeeAmount")) + .subtract(fzsj); + fzList.add(fzbhsje.toString()); + fzList.add(fzsj.toString()); + fzList.add(fzbhsje.add(fzsj).toString()); + fzList.add(getCys(fzbhsje, cysje)); + fzList.add(5); + fzList.add(10); + fzList.add(idPrefix + "_" + "8601050302"); + bbzfUpdateParams.add(fzList); + + }else{ + //总部流程,费用分摊至计财部 + String jcbCode = dc.getDepartmentCode(16 + ""); + getCysParams.put("deptNum", jcbCode); + getCysParams.put("deptType", getDeptTypeCode(16 + "")); + getCysParams.put("Bgitem", "8601050302"); + BigDecimal cysje; + cysje = getBigDecimalCys(getCysParams); + List jcbList1 = new ArrayList<>(); + jcbList1.add(mainId); + jcbList1.add(16); + jcbList1.add("8601050302"); + BigDecimal jcbsj = new BigDecimal(snapshotInfoJson.getString("serviceFeeAmount")) + .divide(new BigDecimal("1.06"), 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("0.06")) + .setScale(2, BigDecimal.ROUND_HALF_UP); + BigDecimal jcbbhsje = new BigDecimal(snapshotInfoJson.getString("serviceFeeAmount")) + .subtract(jcbsj); + jcbList1.add(jcbbhsje.toString()); + jcbList1.add(jcbsj.toString()); + jcbList1.add(jcbbhsje.add(jcbsj).toString()); + jcbList1.add(getCys(jcbbhsje, cysje)); + jcbList1.add(5); + jcbList1.add(10); + jcbList1.add(idPrefix + "_" + "8601050302"); + bbzfUpdateParams.add(jcbList1); + } + List zfmxList1 = new ArrayList<>(); + List zfmxList2 = new ArrayList<>(); + //银行支付金额yxzfje = 四项费用+服务费 + BigDecimal totalFee = new BigDecimal(snapshotInfoJson.getString("flightAmount")) + .add(new BigDecimal(snapshotInfoJson.getString("trainAmount"))) + .add(new BigDecimal(snapshotInfoJson.getString("hotelAmount"))) + .add(new BigDecimal(snapshotInfoJson.getString("carAmount"))); + BigDecimal totalServiceFee = new BigDecimal(snapshotInfoJson.getString("serviceFeeAmount")); + zfmxList1.add(mainId); + //skdw + zfmxList1.add("上海携程宏睿国际旅行社有限公司"); + //yxzh + zfmxList1.add("1001014819000001515"); + //ss + zfmxList1.add("31,3101"); + zfmxList1.add(totalFee.add(totalServiceFee).toString()); + //现金支付金额xjzfje + zfmxList1.add(new BigDecimal("0.00").toString()); + //开户行 khx + zfmxList1.add("102290001487"); + //开户行名称 khxmc + zfmxList1.add(getKHXMC("102290001487")); + //dfkje + zfmxList1.add(new BigDecimal("0.00").toString()); + //zpzfje + zfmxList1.add(new BigDecimal("0.00").toString()); + zfmxUpdateParams.add(zfmxList1); + + zfmxList2.add(mainId); + zfmxList2.add("发放员工差旅补贴"); + zfmxList2.add(null); + zfmxList2.add(null); + zfmxList2.add(new BigDecimal("0.00").toString()); + BigDecimal totalAllowance = new BigDecimal(allowanceJson.getString("totalAllowanceAmount")); + zfmxList2.add(totalAllowance.toString()); + zfmxList2.add(""); + zfmxList2.add(""); + zfmxList2.add(new BigDecimal("0.00").toString()); + zfmxList2.add(new BigDecimal("0.00").toString()); + zfmxUpdateParams.add(zfmxList2); + //支付明细信息 + rs.executeUpdate(String.format("delete from %s where mainid = ?", tablename + "_dt11"), + mainId); + rs.executeBatchSql(String.format( + "insert into %s (mainid,skdw,yxzh,ss,yxzfje,xjzfje,khx,khxmc,dfkje,zpzfje) values(?,?,?,?,?,?,?,?,?,?)", + tablename + "_dt11"), zfmxUpdateParams); + //本币支付信息 + rs.executeUpdate(String.format("delete from %s where mainid = ?", tablename + "_dt8"), + mainId); + rs.executeBatchSql(String.format( + "insert into %s (mainid,fysjcdbm,yskm,bhsje,sj,jshjje,cys,sy,sl,yskmid) values(?,?,?,?,?,?,?,?,?,?)", + tablename + "_dt8"), bbzfUpdateParams); + + //保存是由信息 + budgetItems = bbzfUpdateParams; + + //部门汇总信息 + rs.executeUpdate(String.format("delete from %s where mainid = ?", tablename + "_dt14"), + mainId); + rs.executeBatchSql(String.format( + "insert into %s (mainid,bm,jp,hcp,jd,yc,fwfhj,xcfyhj,cb,bmbm,kdksze,tpf,bhsje,cys) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?)", + tablename + "_dt14"), updateParams); + } else { + log.warn("get cost summary per dept failed!"); + } + + } + + + + private void saveCostPerDeptAndSupplierToDB(String snapshotInfoRes, + int mainId, String tablename,String detailTable) { + RecordSet rs = new RecordSet(); + List updateParams = new ArrayList<>(); + JSONObject snapshotInfoJson = JSONObject.parseObject(snapshotInfoRes); + JSONArray snapshotInfoJsonArray = snapshotInfoJson.getJSONArray("deptOrderResultModels"); + //存储汇总信息 + String jpze = snapshotInfoJson.getString("flightAmount"); + String hcpze = snapshotInfoJson.getString("trainAmount"); + String jdze = snapshotInfoJson.getString("hotelAmount"); + String ycze = snapshotInfoJson.getString("carAmount"); + String fwfze = snapshotInfoJson.getString("serviceFeeAmount"); + String xcfyze = snapshotInfoJson.getString("totalAmount"); + List hzUpdateParams = new ArrayList<>(); + List hzList = new ArrayList<>(); + hzList.add(mainId); + hzList.add(jpze); + hzList.add(hcpze); + hzList.add(jdze); + hzList.add(ycze); + hzList.add(fwfze); + hzList.add(xcfyze); + hzUpdateParams.add(hzList); + //录入汇总信息 + rs.executeUpdate(String.format("delete from %s where mainid = ?", tablename + "_"+detailTable), mainId); + rs.executeBatchSql(String.format( + "insert into %s (mainid,jpze,hcpze,jdze,ycze,fwfze,xcfyze) values(?,?,?,?,?,?,?)", + tablename + "_"+detailTable), hzUpdateParams); + + if (snapshotInfoJsonArray != null) { + for (int i = 0; i < snapshotInfoJsonArray.size(); i++) { + JSONObject jsonObject = snapshotInfoJsonArray.getJSONObject(i); + List list = new ArrayList<>(); + String bm= jsonObject.getString("deptName"); + String jp= jsonObject.getString("flightAmount"); + String hcp= jsonObject.getString("trainAmount"); + String jd= jsonObject.getString("hotelAmount"); + String yc= jsonObject.getString("carAmount"); + String fwfhj= jsonObject.getString("serviceFeeAmount"); + String xcfyhj= jsonObject.getString("totalAmount"); + int bmbm = getDeptId(jsonObject.getString("deptCode")); + list.add(mainId); + list.add(bm); + list.add(jp); + list.add(hcp); + list.add(jd); + list.add(yc); + list.add(fwfhj); + list.add(xcfyhj); + list.add(bmbm); + updateParams.add(list); + } + //部门汇总信息 + rs.executeUpdate(String.format("delete from %s where mainid = ?", tablename + "_"+detailTable), + mainId); + rs.executeBatchSql(String.format( + "insert into %s (mainid,bm,jp,hcp,jd,yc,fwfhj,xcfyhj,bmbm) values(?,?,?,?,?,?,?,?,?)", + tablename + "_"+detailTable), updateParams); + } else { + log.warn("get cost summary per dept failed!"); + } + + } + + private void saveZFMXToDB(String allowanceRes,String ctripSnapshotInfoRes,String alitripSnapshotInfoRes, + int mainId, String tablename) { + RecordSet rs = new RecordSet(); + List zfmxUpdateParams = new ArrayList<>(); + if (StringUtils.isNotBlank(ctripSnapshotInfoRes)){ + JSONObject ctripSnapshotInfoJson = JSONObject.parseObject(ctripSnapshotInfoRes); + List ctripzfmxList = new ArrayList<>(); + //银行支付金额yxzfje = 四项费用+服务费 + BigDecimal ctripTotalFee = new BigDecimal(ctripSnapshotInfoJson.getString("flightAmount")) + .add(new BigDecimal(ctripSnapshotInfoJson.getString("trainAmount"))) + .add(new BigDecimal(ctripSnapshotInfoJson.getString("hotelAmount"))) + .add(new BigDecimal(ctripSnapshotInfoJson.getString("carAmount"))); + BigDecimal ctripTotalServiceFee = new BigDecimal(ctripSnapshotInfoJson.getString("serviceFeeAmount")); + ctripzfmxList.add(mainId); + //skdw + ctripzfmxList.add("上海携程宏睿国际旅行社有限公司"); + //yxzh + ctripzfmxList.add("1001014819000001515"); + //ss + ctripzfmxList.add("31,3101"); + ctripzfmxList.add(ctripTotalFee.add(ctripTotalServiceFee).toString()); + //现金支付金额xjzfje + ctripzfmxList.add(new BigDecimal("0.00").toString()); + //开户行 khx + ctripzfmxList.add("102290001487"); + //开户行名称 khxmc + ctripzfmxList.add(getKHXMC("102290001487")); + //dfkje + ctripzfmxList.add(new BigDecimal("0.00").toString()); + //zpzfje + ctripzfmxList.add(new BigDecimal("0.00").toString()); + zfmxUpdateParams.add(ctripzfmxList); + } + + if (StringUtils.isNotBlank(alitripSnapshotInfoRes)){ + JSONObject alitripSnapshotInfoJson = JSONObject.parseObject(alitripSnapshotInfoRes); + List alitripzfmxList = new ArrayList<>(); + //银行支付金额yxzfje = 四项费用+服务费 + BigDecimal alitripTotalFee = new BigDecimal(alitripSnapshotInfoJson.getString("flightAmount")) + .add(new BigDecimal(alitripSnapshotInfoJson.getString("trainAmount"))) + .add(new BigDecimal(alitripSnapshotInfoJson.getString("hotelAmount"))) + .add(new BigDecimal(alitripSnapshotInfoJson.getString("carAmount"))); + BigDecimal alitripTotalServiceFee = new BigDecimal(alitripSnapshotInfoJson.getString("serviceFeeAmount")); + alitripzfmxList.add(mainId); + //skdw + alitripzfmxList.add("浙江阿里商旅旅行社有限公司"); + //yxzh + alitripzfmxList.add("571910226010502002360302"); + //ss + alitripzfmxList.add("33,3302"); + alitripzfmxList.add(alitripTotalFee.add(alitripTotalServiceFee).toString()); + //现金支付金额xjzfje + alitripzfmxList.add(new BigDecimal("0.00").toString()); + //开户行 khx + alitripzfmxList.add("308331012079"); + //开户行名称 khxmc + alitripzfmxList.add(getKHXMC("308331012079")); + //dfkje + alitripzfmxList.add(new BigDecimal("0.00").toString()); + //zpzfje + alitripzfmxList.add(new BigDecimal("0.00").toString()); + zfmxUpdateParams.add(alitripzfmxList); + } + + if (StringUtils.isNotBlank(allowanceRes)){ + JSONObject allowanceJson = JSONObject.parseObject(allowanceRes); + List cbzfmxList = new ArrayList<>(); + cbzfmxList.add(mainId); + cbzfmxList.add("发放员工差旅补贴"); + cbzfmxList.add(null); + cbzfmxList.add(null); + cbzfmxList.add(new BigDecimal("0.00").toString()); + BigDecimal totalAllowance = new BigDecimal(allowanceJson.getString("totalAllowanceAmount")); + cbzfmxList.add(totalAllowance.toString()); + cbzfmxList.add(""); + cbzfmxList.add(""); + cbzfmxList.add(new BigDecimal("0.00").toString()); + cbzfmxList.add(new BigDecimal("0.00").toString()); + zfmxUpdateParams.add(cbzfmxList); + } + + //支付明细信息 + rs.executeUpdate(String.format("delete from %s where mainid = ?", tablename + "_dt11"), + mainId); + rs.executeBatchSql(String.format( + "insert into %s (mainid,skdw,yxzh,ss,yxzfje,xjzfje,khx,khxmc,dfkje,zpzfje) values(?,?,?,?,?,?,?,?,?,?)", + tablename + "_dt11"), zfmxUpdateParams); + + } + + private String getKHXMC(String khx){ + String name = ""; + RecordSet rs = new RecordSet(); + String sql = String.format("select yxmc from %s where lxh = ?", "uf_khh"); + rs.executeQuery(sql, khx); + while (rs.next()) { + name = rs.getString("yxmc"); + break; + } + return name; + } + + private Map getCNRYInfo(String bm) { + Map result = new HashMap<>(); + String name = ""; + String workCode = ""; + RecordSet rs = new RecordSet(); + String sql = String.format("select cn from %s where bm = ?", "uf_fzjgfkgwpp"); + rs.executeQuery(sql, bm); + while (rs.next()) { + name = rs.getString("cn"); + break; + } + //出纳可能为多个 + String[] cnArray = name.split(","); + String getGhSql = String.format("select workcode from %s where id = ?","hrmresource"); + for(int i = 0; i < cnArray.length; i++){ + String tempworkCode = ""; + rs.executeQuery(getGhSql, cnArray[i]); + while (rs.next()) { + tempworkCode = rs.getString("workcode"); + break; + } + if(cnArray.length == 1){ + workCode = tempworkCode; + break; + }else{ + if(i != cnArray.length -1){ + workCode = workCode + tempworkCode + ","; + }else{ + workCode = workCode + tempworkCode; + } + } + } + result.put("cnry",name); + result.put("cnrygh",workCode); + return result; + } + + private BigDecimal getBigDecimalCys(Map getCysParams) { + HTUtil htUtil = new HTUtil(); + //默认返回为null + BigDecimal cysje = null; + String cysRes = htUtil.getBudget(getCysParams); + JSONObject budgetObject = null; + if (StringUtils.isNotBlank(cysRes)) { + budgetObject = JSONObject.parseObject(cysRes); + } + if (budgetObject != null) { + JSONObject levelObject = null; + if (budgetObject.getJSONObject("BudgetData") != null) { + levelObject = budgetObject.getJSONObject("BudgetData").getJSONObject("Level"); + } + if (levelObject != null && StringUtils.isNotBlank(levelObject.getString("FBgbanlance"))) { + try { + cysje = new BigDecimal(levelObject.getString("FBgbanlance")); + } catch (Exception e) { + log.warn("FBgbanlance can not convert to number. FBgbanlance:"+levelObject.getString("FBgbanlance")); + } + } + } + return cysje; + } + + private int getCys(BigDecimal bhsje, BigDecimal cysje) { + int cys; + //超预算接口返回空返回为维护 + if (cysje==null) { + return 2; + } + int cysFlag = bhsje.compareTo(cysje); + //小于等于预算金额,则不超预算 + if (cysFlag <= 0) { + cys = 0; + } else { + cys = 1; + } + return cys; + } + + private void savePaymentDetailToDB(String orderSettlementDetailJson, int mainId, + String tablename) { + JSONObject orderSettlementDetailObject = JSON.parseObject(orderSettlementDetailJson); + JSONArray jsonArrayfilgh = orderSettlementDetailObject + .getJSONArray("flightOrderSettlementModels"); + JSONArray jsonArraytrain = orderSettlementDetailObject + .getJSONArray("trainOrderSettlementModels"); + JSONArray jsonArrayhotel = orderSettlementDetailObject + .getJSONArray("hotelOrderSettlementModels"); + JSONArray jsonArraycar = orderSettlementDetailObject.getJSONArray("carOrderSettlementModels"); + //机票明细 + if (jsonArrayfilgh == null || jsonArrayfilgh.size() <= 0) { + log.warn("flight order settlement info is empty!"); + } else { + log.info("start to save flight order settlement info to DB"); + savePlaneOrderSettlementDetailToDB(jsonArrayfilgh, mainId,tablename); + log.info("save flight order settlement info to DB end"); + } + //火车明细 + if (jsonArraytrain == null || jsonArraytrain.size() <= 0) { + log.warn("train order settlement info is empty!"); + } else { + log.info("start to save flight order settlement info to DB"); + saveTrainOrderSettlementDetailToDB(jsonArraytrain, mainId,tablename); + log.info("save flight order settlement info to DB end"); + } + //打车明细 + if (jsonArraycar == null || jsonArraycar.size() <= 0) { + log.warn("car order settlement info is empty!"); + } else { + log.info("start to save car order settlement info to DB"); + saveCarOrderSettlementDetailToDB(jsonArraycar, mainId,tablename); + log.info("save car order settlement info to DB end"); + } + //酒店明细 + if (jsonArrayhotel == null || jsonArrayhotel.size() <= 0) { + log.warn("hotel order settlement info is empty!"); + } else { + log.info("start to save car order settlement info to DB"); + saveHotelOrderSettlementDetailToDB(jsonArrayhotel, mainId,tablename); + log.info("save car order settlement info to DB end"); + } + + } + + private void savePlaneOrderSettlementDetailToDB(JSONArray jsonArrayFlight, int mainId, + String tablename) { + RecordSet rs = new RecordSet(); + List updateParams = new ArrayList<>(); + for (int i = 0; i < jsonArrayFlight.size(); i++) { + List list = new ArrayList<>(); + JSONObject jsonObjectFlight = jsonArrayFlight.getJSONObject(i); + String fycdbm = jsonObjectFlight.getString("empDeptCode"); + String yggh = jsonObjectFlight.getString("employeeId"); + String cjr = jsonObjectFlight.getString("employeeName"); + String ccsqbh = jsonObjectFlight.getString("journeyId"); + String cjjj = jsonObjectFlight.getString("price"); + String ry = jsonObjectFlight.getString("oilFee"); + String pmje = jsonObjectFlight.getString("ticketPrice"); + String tpf = jsonObjectFlight.getString("refundFee"); + String gqf = jsonObjectFlight.getString("rebookQueryFee"); + String fwf = jsonObjectFlight.getString("serviceFeeSum"); + String kdkse = jsonObjectFlight.getString("deductibleTax"); + String bkdkse = jsonObjectFlight.getString("nonDeductibleTax"); + String spf = jsonObjectFlight.getString("sendTicketFee"); + String bxf = jsonObjectFlight.getString("insuranceFee"); + String gqcj = jsonObjectFlight.getString("priceDifferential"); + String hj = jsonObjectFlight.getString("amountSum"); + String cfsj = jsonObjectFlight.getString("takeOffTime"); + //去掉时间字符串的后4位.000,存在部分数据缺少时间字段值,避免NPE + cfsj = getProperTimeFormat(cfsj); + String cfcs = jsonObjectFlight.getString("departureCityName"); + String cfjc = jsonObjectFlight.getString("departurePortName"); + String ddsj = jsonObjectFlight.getString("arrivalTime"); + ddsj = getProperTimeFormat(ddsj); + String ddcs = jsonObjectFlight.getString("arrivalCityName"); + String ddjc = jsonObjectFlight.getString("arrivalPortName"); + String hbh = jsonObjectFlight.getString("flight"); + String fxsc = jsonObjectFlight.getString("flightTime"); + String ddh = jsonObjectFlight.getString("orderId"); + String ddlx = jsonObjectFlight.getString("orderDetailType"); + String zkl = jsonObjectFlight.getString("priceRate"); + String djhbjg = jsonObjectFlight.getString("lowPrice"); + String wxdjhbyy = jsonObjectFlight.getString("lowPriceReason"); + int bmbm = getDeptId(jsonObjectFlight.getString("empDeptCode")); + int ygbm = getEmpId(jsonObjectFlight.getString("employeeId")); + String slptly = getPlatformName(jsonObjectFlight.getString("platformType")); + list.add(mainId); + list.add(fycdbm); + list.add(yggh); + list.add(cjr); + list.add(ccsqbh); + list.add(cjjj); + list.add(ry); + list.add(pmje); + list.add(tpf); + list.add(gqf); + list.add(fwf); + list.add(kdkse); + list.add(bkdkse); + list.add(spf); + list.add(bxf); + list.add(gqcj); + list.add(hj); + list.add(cfsj); + list.add(cfcs); + list.add(cfjc); + list.add(ddsj); + list.add(ddcs); + list.add(ddjc); + list.add(hbh); + list.add(fxsc); + list.add(ddh); + list.add(ddlx); + list.add(zkl); + list.add(djhbjg); + list.add(wxdjhbyy); + list.add(bmbm); + list.add(ygbm); + list.add(slptly); + updateParams.add(list); + } + rs.executeUpdate(String.format("delete from %s where mainid = ?", tablename + "_dt15"), mainId); + rs.executeBatchSql(String.format("insert into %s (mainid,fycdbm,yggh,cjr,ccsqbh,cjjj,ry,pmje," + + "tpf,gqf,fwf,kdkse,bkdkse,spf,bxf,gqcj,hj,cfsj,cfcs,cfjc,ddsj,ddcs,ddjc,hbh,fxsc," + + "ddh,ddlx,zkl,djhbjg,wxdjhbyy,bmbm,ygbm,slptly) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", + tablename + "_dt15"), updateParams); + } + + private void saveTrainOrderSettlementDetailToDB(JSONArray jsonArrayTrain, int mainId, + String tablename) { + RecordSet rs = new RecordSet(); + List updateParams = new ArrayList<>(); + for (int i = 0; i < jsonArrayTrain.size(); i++) { + List list = new ArrayList<>(); + JSONObject jsonObjecTrain = jsonArrayTrain.getJSONObject(i); + String fycdbm = jsonObjecTrain.getString("empDeptCode"); + String yggh = jsonObjecTrain.getString("employeeId"); + String ccr = jsonObjecTrain.getString("employeeName"); + String ccsqbh = jsonObjecTrain.getString("journeyId"); + String pmje = jsonObjecTrain.getString("ticketPrice"); + String fwf = jsonObjecTrain.getString("serviceFee"); + String hhzfwfje = jsonObjecTrain.getString("amountSum"); + String tpfy = jsonObjecTrain.getString("cancelFee"); + String hj = jsonObjecTrain.getString("amountSum"); + String cfsj = jsonObjecTrain.getString("departureDate"); + cfsj = getProperTimeFormat(cfsj); + String cfcs = jsonObjecTrain.getString("departureCityName"); + String cfcz = jsonObjecTrain.getString("departureStationName"); + String ddsj = jsonObjecTrain.getString("arrivalDate"); + ddsj = getProperTimeFormat(ddsj); + String ddcs = jsonObjecTrain.getString("arrivalCityName"); + String ddcz = jsonObjecTrain.getString("arrivalStationName"); + String cc = jsonObjecTrain.getString("trainName"); + String xb = jsonObjecTrain.getString("seatTypeName"); + String ddh = jsonObjecTrain.getString("orderId"); + String ddlx = getOrderStatusName(jsonObjecTrain.getString("detailType")); + int bmbm = getDeptId(jsonObjecTrain.getString("empDeptCode")); + int ygbm = getEmpId(jsonObjecTrain.getString("employeeId")); + String slptly = getPlatformName(jsonObjecTrain.getString("platformType")); + list.add(mainId); + list.add(fycdbm); + list.add(yggh); + list.add(ccr); + list.add(ccsqbh); + list.add(pmje); + list.add(fwf); + list.add(hhzfwfje); + list.add(tpfy); + list.add(hj); + list.add(cfsj); + list.add(cfcs); + list.add(cfcz); + list.add(ddsj); + list.add(ddcs); + list.add(ddcz); + list.add(cc); + list.add(xb); + list.add(ddh); + list.add(ddlx); + list.add(bmbm); + list.add(ygbm); + list.add(slptly); + updateParams.add(list); + } + rs.executeUpdate(String.format("delete from %s where mainid = ?", tablename + "_dt16"), mainId); + rs.executeBatchSql(String.format("insert into %s (mainid,fycdbm,yggh,ccr,ccsqbh,pmje,fwf," + + "hhzfwfje,tpfy,hj,cfsj,cfcs,cfcz,ddsj,ddcs,ddcz,cc,xb,ddh,ddlx,bmbm,ygbm,slptly)" + + " values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", + tablename + "_dt16"), updateParams); + } + + private void saveCarOrderSettlementDetailToDB(JSONArray jsonArrayCar, int mainId, + String tablename) { + RecordSet rs = new RecordSet(); + List updateParams = new ArrayList<>(); + for (int i = 0; i < jsonArrayCar.size(); i++) { + List list = new ArrayList<>(); + JSONObject jsonObjectCar = jsonArrayCar.getJSONObject(i); + String fycdbm = jsonObjectCar.getString("empDeptCode"); + String yggh = jsonObjectCar.getString("employeeId"); + String ccr = jsonObjectCar.getString("employeeName"); + String ccsqbh = jsonObjectCar.getString("journeyId"); + String jj = jsonObjectCar.getString("ticketPrice"); + String fwf = jsonObjectCar.getString("serviceFee"); + String jsse = jsonObjectCar.getString("carAddTaxAmount"); + String hj = jsonObjectCar.getString("amountSum"); + String cfsj = jsonObjectCar.getString("serviceBeginTime"); + cfsj = getProperTimeFormat(cfsj); + String ddsj = jsonObjectCar.getString("serviceEndTime"); + ddsj = getProperTimeFormat(ddsj); + String cfcs = jsonObjectCar.getString("departureCityName"); + String ddcs = jsonObjectCar.getString("arrivalCityName"); + String cfdz = jsonObjectCar.getString("departureAddressDetail"); + String dddz = jsonObjectCar.getString("arrivalAddressDetail"); + String jl = jsonObjectCar.getString("actualDistance"); + String sc = jsonObjectCar.getString("actualTime"); + String ddh = jsonObjectCar.getString("orderId"); + String ddzt = getOrderStatusName(jsonObjectCar.getString("detailType")); + String jcfymx = jsonObjectCar.getString("carBasicFeeDetail"); + String zzfy = jsonObjectCar.getString("carValueAddFee"); + String wyj = jsonObjectCar.getString("penaltyFee"); + String kdfy = jsonObjectCar.getString("expressFee"); + int bmbm = getDeptId(jsonObjectCar.getString("empDeptCode")); + int ygbm = getEmpId(jsonObjectCar.getString("employeeId")); + String slptly = getPlatformName(jsonObjectCar.getString("platformType")); + list.add(mainId); + list.add(fycdbm); + list.add(yggh); + list.add(ccr); + list.add(ccsqbh); + list.add(jj); + list.add(fwf); + list.add(jsse); + list.add(hj); + list.add(cfsj); + list.add(ddsj); + list.add(cfcs); + list.add(ddcs); + list.add(cfdz); + list.add(dddz); + list.add(jl); + list.add(sc); + list.add(ddh); + list.add(ddzt); + list.add(jcfymx); + list.add(zzfy); + list.add(wyj); + list.add(kdfy); + list.add(bmbm); + list.add(ygbm); + list.add(slptly); + updateParams.add(list); + } + rs.executeUpdate(String.format("delete from %s where mainid = ?", tablename + "_dt18"), mainId); + rs.executeBatchSql(String.format("insert into %s (mainid,fycdbm,yggh,ccr,ccsqbh,jj,fwf,jsse," + + "hj,cfsj,ddsj,cfcs,ddcs,cfdz,dddz,jl,sc,ddh,ddzt,jcfymx,zzfy,wyj," + + "kdfy,bmbm,ygbm,slptly) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", + tablename + "_dt18"), updateParams); + + } + + private void saveHotelOrderSettlementDetailToDB(JSONArray jsonArrayHotel, int mainId, + String tablename) { + RecordSet rs = new RecordSet(); + List updateParams = new ArrayList<>(); + for (int i = 0; i < jsonArrayHotel.size(); i++) { + List list = new ArrayList<>(); + JSONObject jsonObjectHotel = jsonArrayHotel.getJSONObject(i); + String fycdbm = jsonObjectHotel.getString("empDeptCode"); + String yggh = jsonObjectHotel.getString("employeeId"); + String rzr = jsonObjectHotel.getString("clientName"); + String ccsqbh = jsonObjectHotel.getString("journeyId"); + String zszje = jsonObjectHotel.getString("amountSum"); + String dj = jsonObjectHotel.getString("price"); + String jys = jsonObjectHotel.getString("quantity"); + String sfkzp = jsonObjectHotel.getString("isHasSpecialInvoice"); + String kzpsxf = jsonObjectHotel.getString("extraCharge"); + String fwf = jsonObjectHotel.getString("servicefee"); + String hj = jsonObjectHotel.getString("amountSum"); + String fjm = jsonObjectHotel.getString("roomQuantity"); + String rzsj = jsonObjectHotel.getString("startTime"); + rzsj = getProperTimeFormat(rzsj); + String ldsj = jsonObjectHotel.getString("endTime"); + ldsj = getProperTimeFormat(ldsj); + String cs = jsonObjectHotel.getString("cityName"); + String jdm = jsonObjectHotel.getString("hotelName"); + String ddh = jsonObjectHotel.getString("orderId"); + int bmbm = getDeptId(jsonObjectHotel.getString("empDeptCode")); + int ygbm = getEmpId(jsonObjectHotel.getString("employeeId")); + String slptly = getPlatformName(jsonObjectHotel.getString("platformType")); + list.add(mainId); + list.add(fycdbm); + list.add(yggh); + list.add(rzr); + list.add(ccsqbh); + list.add(zszje); + list.add(dj); + list.add(jys); + list.add(sfkzp); + list.add(kzpsxf); + list.add(fwf); + list.add(hj); + list.add(fjm); + list.add(rzsj); + list.add(ldsj); + list.add(cs); + list.add(jdm); + list.add(ddh); + list.add(bmbm); + list.add(ygbm); + list.add(slptly); + updateParams.add(list); + } + rs.executeUpdate(String.format("delete from %s where mainid = ?", tablename + "_dt17"), mainId); + rs.executeBatchSql(String.format( + "insert into %s (mainid,fycdbm,yggh,rzr," + "ccsqbh,zszje,dj,jys,sfkzp,kzpsxf,fwf,hj,fjm," + + "rzsj,ldsj,cs,jdm,ddh,bmbm,ygbm,slptly) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", + tablename + "_dt17"), updateParams); + } + + private void saveAllowanceDetailToDB(String allowanceDetailJson, int mainId, String tablename) { + RecordSet rs = new RecordSet(); + JSONObject allowanceDetailObject = JSONObject.parseObject(allowanceDetailJson); + JSONArray allowanceFetailJsonArray = allowanceDetailObject + .getJSONArray("travelAllowanceDetailModels"); + if (allowanceFetailJsonArray == null || allowanceFetailJsonArray.size() <= 0) { + log.info("allowance detail info is empty!"); + } else { + // log.info("allowance detail info is:" + JSON.toJSONString(allowanceFetailJsonArray)); + List updateParams = new ArrayList<>(); + for (int i = 0; i < allowanceFetailJsonArray.size(); i++) { + List list = new ArrayList<>(); + JSONObject jsonObject = allowanceFetailJsonArray.getJSONObject(i); + String cbje = jsonObject.getString("realAllowance"); + String gh = jsonObject.getString("empCode"); + String xm = jsonObject.getString("empName"); + String ccrbm = jsonObject.getString("empDeptName"); + String lcbh = jsonObject.getString("workFlowNum"); + String lcbt = jsonObject.getString("workFlowSubject"); + String khx = jsonObject.getString("bankName"); + String kh = jsonObject.getString("cardNo"); + int bmbm = getDeptId(jsonObject.getString("empDeptCode")); + int ygbm = getEmpId(jsonObject.getString("empCode")); + list.add(mainId); + list.add(cbje); + list.add(gh); + list.add(xm); + list.add(ccrbm); + list.add(lcbh); + list.add(lcbt); + list.add(khx); + list.add(kh); + list.add(bmbm); + list.add(ygbm); + updateParams.add(list); + } + rs.executeUpdate(String.format("delete from %s where mainid = ?", tablename + "_dt19"), + mainId); + rs.executeBatchSql(String.format( + "insert into %s (mainid,cbje,gh,xm,ccrbm,lcbh,lcbt,khx,kh,bmbm,ygbm)" + + " values (?,?,?,?,?,?,?,?,?,?,?)", tablename + "_dt19"), updateParams); + } + } + + /** + * 根据员工号获取泛微ID + * + * @param empCode + * @return + */ + private int getEmpId(String empCode) { + int id = 0; + String sql = String.format("select id,workcode from %s where workcode=?", TABLE_RESOURCE); + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, empCode); + while (rs.next()) { + id = rs.getInt("id"); + break; + } + return id; + } + + /** + * 根据部门编号获取泛微部门ID + * + * @param deptCode + * @return + */ + private int getDeptId(String deptCode) { + int id = 0; + String sql = String.format("select id from %s where departmentcode=?", TABLE_DEPARTMENT); + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, deptCode); + while (rs.next()) { + id = rs.getInt("id"); + break; + } + return id; + } + + private String getDeptTypeCode(String deptId) { + String code = ""; + String sql = "select depttypecode from hrmdepartmentdefined where deptid=?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, deptId); + while (rs.next()) { + code = rs.getString("depttypecode"); + break; + } + return code; + } + + private String getProperTimeFormat(String stringOrigin) { + if (StringUtils.isBlank(stringOrigin) || StringUtils.isEmpty(stringOrigin)) { + return stringOrigin; + } else { + return stringOrigin = stringOrigin.substring(0, stringOrigin.length() - 4); + } + } + + private String getLcbh(int workFlowId) { + int formModeId = PayUtil.getFormModeIdByCubeName("uf_fklcbh"); + StringBuilder mark = new StringBuilder(); //流程编码 + RecordSet rs = new RecordSet(); + String sql = "select WORKFLOWNAME,UNNUMBER from workflow_base where ID=?"; + rs.executeQuery(sql, workFlowId); + String name = ""; + if (rs.next()) { + name = rs.getString("WORKFLOWNAME"); + } + String unNumber = PayUtil.getUnNumberByWorkFlowId(workFlowId); + String modeUuid = ""; + LocalDateTime now = LocalDateTime.now(); + String yM = now.format(DateTimeFormatter.ofPattern("yyyyMM")); + + rs.executeQuery( + "select id,lsh,MODEUUID from uf_fklcbh where ny = '" + yM + "' and LCLX='" + unNumber + + "'"); + if (rs.next()) { + //更新 + int num = Util.getIntValue(rs.getString("lsh")) + 1; + int id = Util.getIntValue(rs.getString("id")); + modeUuid = Util.null2String(rs.getString("MODEUUID")); + String updateSql = "update uf_fklcbh set lsh=? where id=?"; + rs.executeUpdate(updateSql, num, id); + mark = new StringBuilder(num + ""); + while (mark.length() < 6) { + mark.insert(0, "0"); + } + mark = new StringBuilder(name + now.format(DateTimeFormatter.ofPattern("yyyyMM")) + mark); + } else { + String userId = Util.null2String(""); + String userType = Util.null2String("0"); + String createDate = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + String createTime = now.format(DateTimeFormatter.ofPattern("HH:mm:ss")); + //插入 + String insertSql = "insert into uf_fklcbh" + + "(FORMMODEID,MODEDATACREATER,MODEDATACREATERTYPE,MODEDATACREATEDATE,MODEDATACREATETIME,MODEUUID,LSH,NY,LCLX) \n" + + "values(?,?,?,?,?,?,?,?,?)"; + String uuid = UUID.randomUUID().toString(); + modeUuid = uuid; + rs.executeUpdate(insertSql, formModeId, userId, userType, createDate, createTime, uuid, "1", + yM, unNumber); + mark = new StringBuilder(name + now.format(DateTimeFormatter.ofPattern("yyyyMM")) + "000001"); + } + + //权限重构 + int dataId = PayUtil.getDataIdByUUID(modeUuid); + ModeRightInfo modeRightInfo = new ModeRightInfo(); + modeRightInfo.editModeDataShare(1, formModeId, dataId); + return mark.toString(); + } + + private String getDeptCode(String deptId) { + String code = ""; + String sql = String.format("select departmentcode from %s where id = ?", TABLE_DEPARTMENT); + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, deptId); + while (rs.next()) { + code = rs.getString("departmentcode"); + break; + } + return code; + } + + private String getPlatformName(String platform) { + String name = ""; + if (StringUtils.isNotBlank(platform)) { + if ("ctrip".equalsIgnoreCase(platform)){ + name="携程"; + } + if ("alitrip".equalsIgnoreCase(platform)){ + name="阿里"; + } + } + return name; + } + + private String getOrderStatusName(String orderStatus) { + String name = ""; + if (StringUtils.isNotBlank(orderStatus)) { + if ("o".equalsIgnoreCase(orderStatus)){ + name="出票"; + } + if ("a".equalsIgnoreCase(orderStatus)){ + name="改签"; + } + if ("r".equalsIgnoreCase(orderStatus)){ + name="退票"; + } + } + return name; + } + + private void doBudgetCommit(String tableName, int requestId) { + PaymentWorkflowInvoke paymentWorkflowInvoke = new PaymentWorkflowInvoke(); + paymentWorkflowInvoke.setBillStatus("3"); + RequestInfo requestInfo = new RequestInfo(); + requestInfo.setRequestid(requestId + ""); + RequestManager requestManager = new RequestManager(); + requestManager.setBilltablename(tableName); + requestInfo.setRequestManager(requestManager); + paymentWorkflowInvoke.execute(requestInfo); + } + + //调用对比接口 + private Map getCompareInfo(TripPaymentRequest request) { + Map result = new HashMap<>(); + HTUtil htUtil = new HTUtil(); + Map monthlyCompareParams = new HashMap<>(); + monthlyCompareParams.put("beginTime", request.getBeginTime()); + monthlyCompareParams.put("endTime", request.getEndTime()); + monthlyCompareParams.put("realBatchNoList", request.getRealBatchNoList()); + monthlyCompareParams.put("ngr", request.getEmpCode().contains("@")?request.getEmpCode().substring(0,request.getEmpCode().indexOf("@")):request.getEmpCode()); + String compareResult = htUtil.getCompareResults(monthlyCompareParams); + result.put("compareResult", compareResult); + return result; + } + + //调用差补汇总和部门汇总 + private Map getDeptInfo(TripPaymentRequest request) { + Map result = new HashMap<>(); + HTUtil htUtil = new HTUtil(); + + Map getAllowanceInfoParams = new HashMap<>(); + + //先查询差补汇总信息 + getAllowanceInfoParams.put("beginTime", request.getBeginTime()); + getAllowanceInfoParams.put("endTime", request.getEndTime()); + getAllowanceInfoParams.put("payType", "MONTHLY"); + getAllowanceInfoParams.put("accountIdList", Collections.singletonList(request.getAccountId())); + getAllowanceInfoParams.put("ngr", request.getEmpCode().contains("@")?request.getEmpCode().substring(0,request.getEmpCode().indexOf("@")):request.getEmpCode()); + String allowanceSummaryRes = htUtil + .getTravelAllowanceCollectInformation(getAllowanceInfoParams); + Map getSnapshotInfoParams = new HashMap<>(); + getSnapshotInfoParams.put("beginTime", request.getBeginTime()); + getSnapshotInfoParams.put("endTime", request.getEndTime()); + getSnapshotInfoParams.put("payType", "MONTHLY"); + getSnapshotInfoParams.put("realBatchNoList", request.getRealBatchNoList()); + getSnapshotInfoParams.put("ngr", request.getEmpCode().contains("@")?request.getEmpCode().substring(0,request.getEmpCode().indexOf("@")):request.getEmpCode()); + String snapshotInfoRes = htUtil.getOrderSnapshotInfo(getSnapshotInfoParams); + result.put("allowanceSummaryRes", allowanceSummaryRes); + result.put("snapshotInfoRes", snapshotInfoRes); + return result; + } + + private Map getSnapshotInfo(TripPaymentRequest request) { + Map result = new HashMap<>(); + HTUtil htUtil = new HTUtil(); + Map getSnapshotInfoParams = new HashMap<>(); + getSnapshotInfoParams.put("beginTime", request.getBeginTime()); + getSnapshotInfoParams.put("endTime", request.getEndTime()); + getSnapshotInfoParams.put("payType", "MONTHLY"); + getSnapshotInfoParams.put("realBatchNoList", request.getRealBatchNoList()); + getSnapshotInfoParams.put("ngr", request.getEmpCode().contains("@")?request.getEmpCode().substring(0,request.getEmpCode().indexOf("@")):request.getEmpCode()); + getSnapshotInfoParams.put("platformType", request.getPlatformType()); + String snapshotInfoRes = htUtil.getOrderSnapshotInfo(getSnapshotInfoParams); + result.put("snapshotInfoRes", snapshotInfoRes); + return result; + } + + private Map getPaymentDetailInfo(TripPaymentRequest request) { + Map result = new HashMap<>(); + HTUtil htUtil = new HTUtil(); + Map getSnapshotDetailInfoParams = new HashMap<>(); + getSnapshotDetailInfoParams.put("beginTime", request.getBeginTime()); + getSnapshotDetailInfoParams.put("endTime", request.getEndTime()); + getSnapshotDetailInfoParams.put("payType","MONTHLY"); + getSnapshotDetailInfoParams + .put("realBatchNoList", request.getRealBatchNoList()); + getSnapshotDetailInfoParams.put("ngr", request.getEmpCode().contains("@")?request.getEmpCode().substring(0,request.getEmpCode().indexOf("@")):request.getEmpCode()); + String orderSettlementDetailJson = htUtil + .queryOrderSnapshotDetails(getSnapshotDetailInfoParams); + result.put("orderSettlementDetailJson", orderSettlementDetailJson); + return result; + } + + private Map getAllowanceDetail(TripPaymentRequest request) { + Map result = new HashMap<>(); + HTUtil htUtil = new HTUtil(); + Map getAllowanceDetailParams = new HashMap<>(); + getAllowanceDetailParams.put("beginTime", request.getBeginTime()); + getAllowanceDetailParams.put("endTime", request.getEndTime()); + getAllowanceDetailParams.put("payType", "MONTHLY"); + getAllowanceDetailParams.put("accountIdList", Collections.singletonList(request.getAccountId())); + getAllowanceDetailParams.put("ngr", request.getEmpCode().contains("@")?request.getEmpCode().substring(0,request.getEmpCode().indexOf("@")):request.getEmpCode()); + String allowanceDetailJson = htUtil.getAllowanceCollectDetail(getAllowanceDetailParams); + result.put("allowanceDetailJson", allowanceDetailJson); + return result; + } + + //本地debug时,修改HTutil中接口url,以及获取token的url + public static void main(String[] args) throws Exception { + GCONST.setRootPath(""); + GCONST.setServerName("ecology"); + TripPaymentRequest request=new TripPaymentRequest(); + request.setBeginTime("2020-10-01T00:00:00"); + request.setEndTime("2020-10-31T23:59:59.999999999"); + request.setAccountId("378074"); + request.setRealBatchNoList(Lists.newArrayList("htsc_378074_20201001","htsc_dingd391290d34082fd3bc961a6cb783455b_20201001")); + request.setDeptCode("ZZ001"); + request.setEmpCode("010803"); + PaymentWorkflowServiceImpl paymentWorkflowService = new PaymentWorkflowServiceImpl(); + paymentWorkflowService.createBusinessTravelWorkflow(request); + // PaymentService paymentService = new PaymentServiceImpl(); + // String contractCode = "集中采购转合同审批(商务旅行服务协议)"; + // String processCode = "合计(2019)18564"; + // ContractRequestParam param = new ContractRequestParam(); + // param.setUserCode("010803"); + // String yfje = paymentService.queryContractPaidMoney(contractCode,processCode); + // ContractInfoVo contractInfoVo = paymentService.queryContractPagination(param); + // System.out.println("已付金额" + yfje); + // System.out.println("合同金额" + JSON.toJSONString(contractInfoVo)); + System.out.println("1111"); + } + + @Override + public Map getLevelDept(String deptid) { + Map datas = new HashMap<>(); + try { + RecordSet rs = new RecordSet(); + BaseBean bb = new BaseBean(); + DepartmentComInfo departmentComInfo = new DepartmentComInfo(); + String departmentName = departmentComInfo.getDepartmentName(deptid); + rs.executeQuery("select supdepid from hrmdepartment where id = ? and tlevel = 4",deptid); + if (rs.next() && ! "682".equals(deptid)) {//总部二级部门存在一级部门,默认费用承担部门为一级部 除报价融资部682 + String supdepid = Util.null2String(rs.getString("supdepid")); + deptid = supdepid; + departmentName = departmentComInfo.getDepartmentname(supdepid); + } + datas.put("deptid",deptid); + datas.put("departmentName",departmentName); + //bb.infoLog("info",JSONObject.toJSONString(datas)); + + }catch (Exception e){ + e.printStackTrace(); + } + return datas; + } +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/PreApprovalServiceImpl.java b/src/main/java/com/engine/htsc/payment/service/impl/PreApprovalServiceImpl.java new file mode 100644 index 0000000..64e7cd8 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/PreApprovalServiceImpl.java @@ -0,0 +1,2715 @@ +package com.engine.htsc.payment.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.common.utils.DoubleUtil; +import com.engine.htsc.payment.log.PaymentLogger; +import com.engine.htsc.payment.log.PaymentLoggerFactory; +import com.engine.htsc.payment.pojo.PaDetail; +import com.engine.htsc.payment.pojo.PreApproval; +import com.engine.htsc.payment.service.PreApprovalService; +import com.engine.htsc.payment.util.CommonAPI; +import com.engine.htsc.payment.util.LuhnUtil; +import com.engine.htsc.payment.util.StringUtil; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.Validate; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.workflow.mode.FieldInfo; +import weaver.workflow.workflow.WorkflowComInfo; + +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class PreApprovalServiceImpl extends Service implements PreApprovalService { + + private final Log log = LogFactory.getLog(this.getClass()); + + private final PaymentLogger logger = PaymentLoggerFactory.getLogger(PreApprovalServiceImpl.class); + + /** + * 报销流程 + */ + private final String[] bx_workflow = new String[]{"zbtybx", "fzjgtybx","lhtybx","xgtybx"}; + /** + * 差旅流程 + */ + private final String[] cl_workflow = new String[]{"fzjgclbx","zbclbx","clbx","xgclbx"}; + /** + * 付款流程 + */ + private final String[] fk_workflow = new String[]{"zbtyfk", "zbitfk", "zbghfk", "fzjgtyfk","fyft","jjhtyfk","xgtyfk","lhtyfk","zgtyfk"}; + + /** + * 科目id + */ + private final String[] km = new String[]{"8601020301", "8601020302", "8601020101", "8601020601", "8601050101", "8601050102", + "8701010501", "8701010201", "8701010101", "8701010401", "8701010301", "87010203", "87010202", "87010201"}; + + /** + * 科目id对应表单id + */ + private final String[] fjfield = new String[]{"fjfymxd", "fjfymxd", "fjfymxd", "fjhytz", "fjggxgt", "fjxcptp", + "fjzcysrkd", "fjzcysrkd", "fjzcysrkd", "fjzcysrkd", "fjzcysrkd", "fjgcfksqd", "fjgcfksqd", "fjgcfksqd"}; + + private String tablename = ""; + private String rid = ""; + private String mainid = ""; + private String workflowid = ""; + private List tips; + private String unNumberNew = ""; + + @Override + public List getPreAplInfos(String requestid) throws Exception { + String tableName = ""; + String unNumber = ""; + rid = requestid; + String sql = "SELECT t2.UNNUMBER,t3.TABLENAME,t1.REQUESTID,t1.WORKFLOWID FROM WORKFLOW_REQUESTBASE t1\n" + + "LEFT JOIN WORKFLOW_BASE t2\n" + + "ON t1.WORKFLOWID = t2.ID\n" + + "LEFT JOIN WORKFLOW_BILL t3\n" + + "ON t2.FORMID = t3.ID \n" + + "WHERE t2.ISVALID = 1 AND t1.REQUESTID = ?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, requestid); + if (rs.next()) { + tableName = Util.null2String(rs.getString("TABLENAME")); + unNumber = Util.null2String(rs.getString("UNNUMBER")); + tablename = tableName; + unNumberNew = unNumber; + workflowid = Util.null2String(rs.getString("WORKFLOWID")); + } + sql = "SELECT ID FROM " + tablename + " WHERE REQUESTID = ?"; + rs.executeQuery(sql, requestid); + if (rs.next()) { + mainid = Util.null2String(rs.getString("ID")); + } + log.info(String.format("requestid: %s; tableName: %s; unNumber:%s", requestid, tableName, unNumber)); + List model = new ArrayList<>(); + if (Arrays.asList(fk_workflow).contains(unNumber)) { + log.info("判断为付款流程"); + //发票重复校验 + model.add(checkInvoices(requestid)); + //基金会通用付款不进行合同校验 + if (!"jjhtyfk".equals(unNumberNew)){ + //合同信息校验 + model.add(checkContract(requestid)); + } + //表单金额控制校验 + model.add(checkMoney(requestid)); + //其他信息校验 + model.add(checkOthers(requestid)); + } else if (Arrays.asList(bx_workflow).contains(unNumber)) { + log.info("判断为报销流程"); + //发票重复校验 + model.add(checkInvoicesBx(requestid)); + //表单金额控制校验 + model.add(checkMoneyBx(requestid)); + //其他校验 + model.add(checkOthersBx(requestid)); + } else if (Arrays.asList(cl_workflow).contains(unNumber)) { + log.info("判断为差旅流程"); + //发票重复校验 + model.add(checkInvoicesCl(requestid)); + //表单金额控制校验 + model.add(checkMoneyCl(requestid)); + //其他校验 + model.add(checkOthersCl(requestid)); + } else { + throw new IllegalArgumentException("unNumber:" + unNumber + ", 在付款和报销流程中没有匹配"); + } + + return model; + } + + public PreApproval checkContractBx(String requestid) throws Exception { + Validate.notEmpty(requestid, "requestid 为空, 退出checkContract方法"); + PreApproval preApproval = new PreApproval(); + preApproval.setType("2"); + preApproval.setLabel("合同"); + List details = new ArrayList<>(); + //合同金额校验 + details.add(buildAccountCheck("1")); + + preApproval.setDetails(details); + return preApproval; + } + + public PreApproval checkContract(String requestid) throws Exception { + Validate.notEmpty(requestid, "requestid 为空, 退出checkContract方法"); + PreApproval preApproval = new PreApproval(); + preApproval.setType("2"); + preApproval.setLabel("合同"); + List details = new ArrayList<>(); + //合同金额校验 + details.add(buildAccountCheck("0")); + //合同总额金额校验 + details.add(buildContractAmountCheck()); + //已付金额校验 + details.add(buildAlreadyPayCheck()); + //银行信息校验 +// details.add(buildBankInfoCheck()); + //银行卡号校验 +// details.add(buildBankNumCheck()); + preApproval.setDetails(details); + return preApproval; + } + + public PreApproval checkMoney(String requestid) throws Exception { + Validate.notEmpty(requestid, "requestid 为空, 退出checkContract方法"); + PreApproval preApproval = new PreApproval(); + preApproval.setType("3"); + preApproval.setLabel("表单金额控制"); + List details = new ArrayList<>(); + //银行信息校验 + details.add(buildBankInfoCheck()); + //银行卡号校验 + details.add(buildBankNumCheck()); + //发票合计金额与费用合计金额校验 + details.add(buildFpOrFyHjCheck()); + preApproval.setDetails(details); + return preApproval; + } + + public PreApproval checkMoneyBx(String requestid) throws Exception { + Validate.notEmpty(requestid, "requestid 为空, 退出checkContract方法"); + PreApproval preApproval = new PreApproval(); + preApproval.setType("3"); + preApproval.setLabel("表单金额控制"); + List details = new ArrayList<>(); + //银行信息校验 + details.add(buildBankInfoCheck()); + //银行卡号校验 + details.add(buildBankNumCheck()); + //发票合计金额与费用合计金额校验 + details.add(buildFpOrFyHjCheck()); + preApproval.setDetails(details); + return preApproval; + } + + public PreApproval checkMoneyCl(String requestid) throws Exception { + Validate.notEmpty(requestid, "requestid 为空, 退出checkContract方法"); + PreApproval preApproval = new PreApproval(); + preApproval.setType("3"); + preApproval.setLabel("表单金额控制"); + List details = new ArrayList<>(); + //银行信息校验 + details.add(buildBankInfoCheckCl()); + //银行卡号校验 + details.add(buildBankNumCheckCl()); + //发票合计金额与费用合计金额校验 + details.add(buildFpOrFyHjCheckCl()); + preApproval.setDetails(details); + return preApproval; + } + + public PreApproval checkInvoicesBx(String requestid) throws Exception { + Validate.notEmpty(tablename, "tablename 为空, 退出checkInvoices方法"); + Validate.notEmpty(requestid, "requestid 为空, 退出checkInvoices方法"); + + PreApproval preApproval = new PreApproval(); + preApproval.setType("1"); + preApproval.setLabel("发票"); + + List fps = new ArrayList<>(); + List yzs = new ArrayList<>(); + String sql = "SELECT t1.FPHM,t1.FPDM,t1.YZ FROM " + tablename + "_DT5 t1\n" + + "LEFT JOIN " + tablename + " t2\n" + + "ON t1.MAINID = t2.ID \n" + + "WHERE t2.REQUESTID = ?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, requestid); + while (rs.next()) { + String dm = Util.null2String(rs.getString("FPDM")); + String hm = Util.null2String(rs.getString("FPHM")); + String yz = Util.null2String(rs.getString("YZ")); + fps.add(String.join("@", dm, hm)); + yzs.add(String.join("@", dm, hm, StringUtils.isEmpty(yz) ? "0" : yz)); + } + sql = "SELECT t1.FPHM,t1.FPDM,t2.id FROM " + tablename + "_DT6 t1\n" + + "LEFT JOIN " + tablename + " t2\n" + + "ON t1.MAINID = t2.ID \n" + + "WHERE t2.REQUESTID = ?"; + rs.executeQuery(sql, requestid); + while (rs.next()) { + String dm = Util.null2String(rs.getString("FPDM")); + String hm = Util.null2String(rs.getString("FPHM")); + fps.add(String.join("@", dm, hm)); + + mainid = Util.null2String(rs.getString("id")); + } +// Map countMap = fps.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); +// List disFps = countMap.keySet().stream().filter(key -> countMap.get(key) > 1).distinct().collect(Collectors.toList()); +// log.info("重复发票: " + disFps); + List details = new ArrayList<>(); + details.add(buildFpCf(fps)); + details.add(buildFpYz(yzs)); +// details.add(buildFkPjGx(requestid)); + preApproval.setDetails(details); + + return preApproval; + + } + + public PreApproval checkInvoicesCl(String requestid) throws Exception { + Validate.notEmpty(tablename, "tablename 为空, 退出checkInvoices方法"); + Validate.notEmpty(requestid, "requestid 为空, 退出checkInvoices方法"); + + PreApproval preApproval = new PreApproval(); + preApproval.setType("1"); + preApproval.setLabel("发票"); + + List fps = new ArrayList<>(); + List yzs = new ArrayList<>(); + String sql = "SELECT t1.FPHM,t1.FPDM,t1.YZ FROM " + tablename + "_DT4 t1\n" + + "LEFT JOIN " + tablename + " t2\n" + + "ON t1.MAINID = t2.ID \n" + + "WHERE t2.REQUESTID = ?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, requestid); + while (rs.next()) { + String dm = Util.null2String(rs.getString("FPDM")); + String hm = Util.null2String(rs.getString("FPHM")); + String yz = Util.null2String(rs.getString("YZ")); + fps.add(String.join("@", dm, hm)); + yzs.add(String.join("@", dm, hm, StringUtils.isEmpty(yz) ? "0" : yz)); + } + sql = "SELECT t1.FPHM,t1.FPDM,t2.id FROM " + tablename + "_DT5 t1\n" + + "LEFT JOIN " + tablename + " t2\n" + + "ON t1.MAINID = t2.ID \n" + + "WHERE t2.REQUESTID = ?"; + rs.executeQuery(sql, requestid); + while (rs.next()) { + String dm = Util.null2String(rs.getString("FPDM")); + String hm = Util.null2String(rs.getString("FPHM")); + fps.add(String.join("@", dm, hm)); + + } + sql = "SELECT t1.FPHM,t1.FPDM,t2.id FROM " + tablename + "_DT6 t1\n" + + "LEFT JOIN " + tablename + " t2\n" + + "ON t1.MAINID = t2.ID \n" + + "WHERE t2.REQUESTID = ?"; + rs.executeQuery(sql, requestid); + while (rs.next()) { + String dm = Util.null2String(rs.getString("FPDM")); + String hm = Util.null2String(rs.getString("FPHM")); + fps.add(String.join("@", dm, hm)); + + mainid = Util.null2String(rs.getString("id")); + } +// Map countMap = fps.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); +// List disFps = countMap.keySet().stream().filter(key -> countMap.get(key) > 1).distinct().collect(Collectors.toList()); +// log.info("重复发票: " + disFps); + List details = new ArrayList<>(); + details.add(buildFpCf(fps)); + details.add(buildFpYz(yzs)); +// details.add(buildFkPjGx(requestid)); + preApproval.setDetails(details); + + return preApproval; + + } + + public PreApproval checkInvoices(String requestid) throws Exception { + Validate.notEmpty(tablename, "tablename 为空, 退出checkInvoices方法"); + Validate.notEmpty(requestid, "requestid 为空, 退出checkInvoices方法"); + + PreApproval preApproval = new PreApproval(); + preApproval.setType("1"); + preApproval.setLabel("发票"); + + List fps = new ArrayList<>(); + List yzs = new ArrayList<>(); + String sql = "SELECT t1.FPHM,t1.FPDM,t1.YZ FROM " + tablename + "_DT5 t1\n" + + "LEFT JOIN " + tablename + " t2\n" + + "ON t1.MAINID = t2.ID \n" + + "WHERE t2.REQUESTID = ?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, requestid); + while (rs.next()) { + String dm = Util.null2String(rs.getString("FPDM")); + String hm = Util.null2String(rs.getString("FPHM")); + String yz = Util.null2String(rs.getString("YZ")); + fps.add(String.join("@", dm, hm)); + yzs.add(String.join("@", dm, hm, StringUtils.isEmpty(yz) ? "0" : yz)); + } + sql = "SELECT t1.FPHM,t1.FPDM,t2.id FROM " + tablename + "_DT6 t1\n" + + "LEFT JOIN " + tablename + " t2\n" + + "ON t1.MAINID = t2.ID \n" + + "WHERE t2.REQUESTID = ?"; + rs.executeQuery(sql, requestid); + while (rs.next()) { + String dm = Util.null2String(rs.getString("FPDM")); + String hm = Util.null2String(rs.getString("FPHM")); + fps.add(String.join("@", dm, hm)); + + mainid = Util.null2String(rs.getString("id")); + } +// Map countMap = fps.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); +// List disFps = countMap.keySet().stream().filter(key -> countMap.get(key) > 1).distinct().collect(Collectors.toList()); +// log.info("重复发票: " + disFps); + List details = new ArrayList<>(); + details.add(buildFpCf(fps)); + details.add(buildFpYz(yzs)); + if(!"xgtyfk".equals(unNumberNew)){ + details.add(buildFkPjGx(requestid)); + } + preApproval.setDetails(details); + return preApproval; + + } + + public PreApproval checkOthersBx(String requestid) throws Exception { + Validate.notEmpty(requestid, "requestid 为空, 退出checkOthersBx方法"); + PreApproval preApproval = new PreApproval(); + preApproval.setType("4"); + preApproval.setLabel("其他"); + List details = new ArrayList<>(); + //只针对总部和分支的通用报销流程 + if(!"lhtybx".equals(unNumberNew) && !"xgtybx".equals(unNumberNew) ){ + details.add(buildAttachmentCheck()); + details.add(buildAutoFillFormCheck()); + } + details.add(buildHrmCheck()); + details.add(buildNeedValueCheckBx()); + preApproval.setDetails(details); + return preApproval; + } + + public PreApproval checkOthersCl(String requestid) throws Exception { + Validate.notEmpty(requestid, "requestid 为空, 退出checkOthersBx方法"); + PreApproval preApproval = new PreApproval(); + preApproval.setType("4"); + preApproval.setLabel("其他"); + List details = new ArrayList<>(); + details.add(buildHrmCheckCl()); + details.add(buildNeedValueCheckCl()); + preApproval.setDetails(details); + return preApproval; + } + + public PreApproval checkOthers(String requestid) throws Exception { + Validate.notEmpty(requestid, "requestid 为空, 退出checkOthers方法"); + PreApproval preApproval = new PreApproval(); + preApproval.setType("4"); + preApproval.setLabel("其他"); + List details = new ArrayList<>(); + //基金会通用付款不进行合同对手方校验和预算科目校验 + if("jjhtyfk".equals(unNumberNew)){ + details.add(buildAttachmentCheck()); + details.add(buildHistoryPayCheck()); + details.add(buildNeedValueCheck()); + }else if ("lhtyfk".equals(unNumberNew) ||"xgtyfk".equals(unNumberNew)||"zgtyfk".equals(unNumberNew)){ + //联合通用付款不进行科目与附件信息校验和自动填单预算科目校验 + details.add(buildInvoicedEqualsContractCheck()); + details.add(buildHistoryPayCheck()); + details.add(buildNeedValueCheck()); + }else if("zbghfk".equals(unNumberNew) ||"xgtybx".equals(unNumberNew)){ + details.add(buildAutoFillFormCheck()); + details.add(buildInvoicedEqualsContractCheck()); + details.add(buildHistoryPayCheck()); + details.add(buildNeedValueCheck()); + }else{ + details.add(buildAttachmentCheck()); + details.add(buildAutoFillFormCheck()); + details.add(buildInvoicedEqualsContractCheck()); + details.add(buildHistoryPayCheck()); + details.add(buildNeedValueCheck()); + } + preApproval.setDetails(details); + return preApproval; + } + + + + /** + * 发票重复校验 + * + * @param fps + * @return + */ + private PaDetail buildFpCf(List fps) throws Exception { + PaDetail pd = new PaDetail(); + pd.setInfo("发票重复校验"); + if (CollectionUtils.isEmpty(fps)) { + pd.setCheck(true); + pd.setTips(String.join(",", "未提供发票")); + return pd; + } + + List dTips = new ArrayList<>(); + String sql = "SELECT t2.REQUESTID,t2.REQUESTMARK,t1.FPDM,t1.FPHM FROM UF_PJXXGL t1\n" + + "LEFT JOIN WORKFLOW_REQUESTBASE t2\n" + + "ON t1.REQUESTID = t2.REQUESTID \n" + + "WHERE t1.FPDM = ? AND t1.FPHM = ?"; + RecordSet rs = new RecordSet(); + //获取当前流程编号 + RecordSet sqlFindRemark = new RecordSet(); + fps.stream().distinct().forEach(item -> { + if (!"@".equals(item)){ + if (!item.startsWith("@") && !item.endsWith("@")){ + rs.executeQuery(sql, item.split("@")[0], item.split("@")[1]); + String remarkNew = ""; + sqlFindRemark.executeQuery("SELECT REQUESTMARK FROM WORKFLOW_REQUESTBASE WHERE REQUESTID = ?",rid); + if (sqlFindRemark.next()){ + remarkNew = Util.null2String(sqlFindRemark.getString("REQUESTMARK")); + } + while (rs.next()) { + if(!rs.getString("REQUESTMARK").equals(remarkNew)){ + dTips.add("发票" + rs.getString("FPHM") + + "(" + rs.getString("FPDM") + + ")已被流程" + rs.getString("REQUESTMARK") + "占用,请核实发票信息"); + } + } + } + } + }); + pd.setCheck(CollectionUtils.isEmpty(dTips)); + pd.setTips(String.join(",", dTips)); + return pd; + } + + /** + * 发票验真校验 + * + * @param yzs + * @return + */ + private PaDetail buildFpYz(List yzs) throws Exception { + PaDetail pd = new PaDetail(); + pd.setInfo("发票验真校验"); + if (CollectionUtils.isEmpty(yzs)) { + pd.setCheck(true); + pd.setTips(String.join(",", "未提供验真发票")); + return pd; + } + List dTips = new ArrayList<>(); + yzs.stream().distinct().forEach(item -> { + if (!"1".equals(item.split("@")[2])) { + dTips.add("发票" + item.split("@")[0] + "(" + item.split("@")[1] + ")验真未通过,请核实发票信息"); + } + }); + pd.setCheck(CollectionUtils.isEmpty(dTips)); + pd.setTips(String.join(",", dTips)); + return pd; + } + + /** + * 是否提供发票和付款信息校验 + * + * @param requestid + * @return + */ + private PaDetail buildFkPjGx(String requestid) throws Exception { + List dTips = new ArrayList<>(); + String sql = "SELECT DJZS,SFXFKHTGFP FROM " + tablename + " WHERE REQUESTID = ?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, requestid); + if (rs.next()) { + String djzs = Util.null2String(rs.getString("DJZS")); + String sfxfkhtgfp = Util.null2String(rs.getString("SFXFKHTGFP")); + if (("0".equals(djzs) || "".equals(djzs)) && "1".equals(sfxfkhtgfp)) { //0为是 + dTips.add("请确认本次付款申请是否为“先付款后提供发票”"); + } + } + + PaDetail pd = new PaDetail(); + pd.setInfo("是否提供发票校验"); + pd.setCheck(CollectionUtils.isEmpty(dTips)); + pd.setTips(String.join(",", dTips)); + return pd; + } + + /** + * 4、合同本次申请金额(仅付款)=预算合计(报销合计)=支付合计才能提交; + * 适用范围:见“提示信息”标注 + * 控制:不允许提交流程 + * 提示信息: + * (付款流程,且有合同信息,当上述3种金额不相等时)请核实:本期申请金额=预算合计=支付合计 + * (付款流程,且无合同信息,当上述3种金额不相等时)请核实:预算合计=支付合计 + * (报销流程,当上述3种金额不相等时)请核实:报销合计=支付合计 + * + * @param type 类型 0:付款, 1:报销 + * @return + */ + public PaDetail buildAccountCheck(String type) throws Exception { + List tips = new ArrayList<>(); + RecordSet rs = new RecordSet(); + DecimalFormat df = new DecimalFormat("0.00"); + if ("0".equals(type)) { + String sql = "SELECT t1.hjxxjeitxmf,t1.hjxxjezfmx,t2.bqzfje FROM " + tablename + " t1\n" + + "LEFT JOIN " + tablename + "_DT4 t2\n" + + "ON t1.ID = t2.MAINID\n" + + "WHERE t1.REQUESTID = ?"; + String bqzfje = ""; + String hjxxjeitxmf = ""; + String hjxxjezfmx = ""; + rs.executeQuery(sql, rid); + if (rs.next()) { + bqzfje = Util.null2String(rs.getString("bqzfje")); //合同本期金额 + hjxxjeitxmf = df.format(Double.parseDouble(Util.null2String(rs.getString("hjxxjeitxmf")))); + hjxxjezfmx = df.format(Double.parseDouble(Util.null2String(rs.getString("hjxxjezfmx")))); + } + if (StringUtils.isNotEmpty(bqzfje)) { + bqzfje = df.format(Double.parseDouble(bqzfje)); + //存在合同信息 + if (!(new BigDecimal(hjxxjeitxmf).equals(new BigDecimal(hjxxjezfmx)) && + new BigDecimal(bqzfje).equals(new BigDecimal(hjxxjeitxmf)))) { + tips.add("请核实:本期申请金额=预算合计=支付合计"); + } + } else { + if (!new BigDecimal(hjxxjeitxmf).equals(new BigDecimal(hjxxjezfmx))) { + tips.add("请核实:预算合计=支付合计"); + } + } + } else if ("1".equals(type)) { + String sql = "SELECT hjxxjeitxmf,hjxxjezfmx FROM " + tablename + " WHERE REQUESTID =?"; + rs.executeQuery(sql, rid); + String hjxxjeitxmf = ""; + String hjxxjezfmx = ""; + if (rs.next()) { + hjxxjeitxmf = df.format(Double.parseDouble(Util.null2String(rs.getString("hjxxjeitxmf")))); + hjxxjezfmx = df.format(Double.parseDouble(Util.null2String(rs.getString("hjxxjezfmx")))); + } + if (!new BigDecimal(hjxxjeitxmf).equals(new BigDecimal(hjxxjezfmx))) { + tips.add("请核实:预算合计=支付合计"); + } + } else { + throw new IllegalArgumentException("buildAccountCheck没有指定type类型"); + } + + PaDetail pd = new PaDetail(); + pd.setInfo("合同及小计金额校验"); + pd.setCheck(CollectionUtils.isEmpty(tips)); + pd.setTips(String.join(",", tips)); + return pd; + } + + /** + * 5、合同总额=本次申请金额+已付金额+剩余可用金额 + * 适用范围:付款流程 + * 控制:仅提示,允许发起流程 + * 提示信息: + * (当合同总额≠本次申请金额+已付金额+剩余可用金额时)请核实“合同金额=本期申请金额+已付金额+剩余可用金额” + * + * @return + */ + public PaDetail buildContractAmountCheck() throws Exception { + List tips = new ArrayList<>(); + String sql = "SELECT htze,bqzfje,yfjebhbq,wfjebhbq FROM " + tablename + "_DT4 fmd WHERE MAINID = ?"; + String htze = ""; + String bqzfje = ""; + String yfjebhbq = ""; + String wfjebhbq = ""; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, mainid); + if (rs.next()) { + htze = Util.null2String(rs.getString("htze")); //合同总额 + bqzfje = Util.null2String(rs.getString("bqzfje")); //本次申请金额 + yfjebhbq = Util.null2String(rs.getString("yfjebhbq")); //已付金额 + wfjebhbq = Util.null2String(rs.getString("wfjebhbq")); //剩余可用金额 + BigDecimal allMoney = DoubleUtil.add(DoubleUtil.add(blank2Zero(bqzfje), blank2Zero(yfjebhbq), 2).toString(), + blank2Zero(wfjebhbq), 2);//本次申请金额+已付金额+剩余可用金额 + DecimalFormat df = new DecimalFormat("0.00"); + BigDecimal htzeNew = new BigDecimal(df.format(Double.valueOf(blank2Zero(htze)))); + if ("0".equals(htze) || !htzeNew.equals(allMoney) ){ + tips.add("请核实“合同金额=本期申请金额+已付金额+剩余可用金额”"); + } + } + + PaDetail pd = new PaDetail(); + pd.setInfo("合同总额金额校验"); + pd.setCheck(CollectionUtils.isEmpty(tips)); + pd.setTips(String.join(",", tips)); + return pd; + } + + /** + * 6、已付金额=关联合同中已付金额合计 + * 适用范围:付款流程 + * 控制:仅提示,允许发起流程 + * 提示信息: + * (关联合同时,将合同已付金额多存一个备用字段,提交的时候,将表单上的合同已付金额与备用字段对比。当金额不一致时)请核实合同已付金额 + */ + private PaDetail buildAlreadyPayCheck() throws Exception { + List tips = new ArrayList<>(); + String sql = "SELECT yfjeby,yfjebhbq FROM " + tablename + "_DT4 WHERE MAINID = ?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, mainid); + String yfjeby = ""; + String yfjebhbq = ""; + if (rs.next()) { + DecimalFormat df = new DecimalFormat("0.00"); + yfjeby = df.format(Double.parseDouble(Util.null2s(rs.getString("yfjeby"),"0.00"))); //备用支付金额 + yfjebhbq = df.format(Double.parseDouble(Util.null2s(rs.getString("yfjebhbq"),"0.00"))); + if (!new BigDecimal(yfjeby).equals(new BigDecimal(yfjebhbq))) { + tips.add("请核实合同已付金额"); + } + } + + PaDetail pd = new PaDetail(); + pd.setInfo("已付金额校验"); + pd.setCheck(CollectionUtils.isEmpty(tips)); + pd.setTips(String.join(",", tips)); + return pd; + } + + /** + * 7、当银行支付金额不为0时,银行卡信息必填。当银行支付金额为0,且现金支付金额不为0时,银行卡信息不必填; + * 适用范围:付款流程、报销流程、差旅报销 + * 控制:不允许提交 + * 提示信息: + * (当银行支付金额不为0,银行卡信息未填写时)请填写银行卡信息 + * + * @return + */ + public PaDetail buildBankInfoCheck() throws Exception { + List tips = new ArrayList<>(); + String sql = "SELECT YXZFJE,khx,ss,khxmc,yxzh FROM " + tablename + "_DT11 WHERE MAINID = ?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, mainid); + String yxzfje = ""; + String khx = ""; + String yxzh = ""; + if (rs.next()) { + yxzfje = Util.null2String(rs.getString("YXZFJE")); + khx = Util.null2String(rs.getString("khx")); + yxzh = Util.null2String(rs.getString("yxzh")); + if (!StringUtils.isBlank(yxzfje) && !"0.00".equals(yxzfje) && !"0".equals(yxzfje)) { + if (StringUtils.isBlank(khx) || StringUtils.isBlank(yxzh)) { + tips.add("请填写银行卡信息"); + } + } + } + + PaDetail pd = new PaDetail(); + pd.setInfo("银行卡信息校验"); + pd.setCheck(CollectionUtils.isEmpty(tips)); + pd.setTips(String.join(",", tips)); + return pd; + } + + /** + * 7、当银行支付金额不为0时,银行卡信息必填。当银行支付金额为0,且现金支付金额不为0时,银行卡信息不必填;(差旅) + * 适用范围:付款流程、报销流程、差旅报销 + * 控制:不允许提交 + * 提示信息: + * (当银行支付金额不为0,银行卡信息未填写时)请填写银行卡信息 + * + * @return + */ + public PaDetail buildBankInfoCheckCl() throws Exception { + List tips = new ArrayList<>(); + String sql = "SELECT YXZFJE,khx,ss,yxzh FROM " + tablename + "_DT10 WHERE MAINID = ?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, mainid); + String yxzfje = ""; + String khx = ""; + String yxzh = ""; + if (rs.next()) { + yxzfje = Util.null2String(rs.getString("YXZFJE")); + khx = Util.null2String(rs.getString("khx")); + yxzh = Util.null2String(rs.getString("yxzh")); + if (!StringUtils.isBlank(yxzfje) && !"0.00".equals(yxzfje) && !"0".equals(yxzfje)) { + if (StringUtils.isBlank(khx) || StringUtils.isBlank(yxzh)) { + tips.add("请填写银行卡信息"); + } + } + } + + PaDetail pd = new PaDetail(); + pd.setInfo("银行卡信息校验"); + pd.setCheck(CollectionUtils.isEmpty(tips)); + pd.setTips(String.join(",", tips)); + return pd; + } + + /** + * 8、收款单位银行账户字符格式,限定在数字、字母和-,字符数限制5-35 + * 适用范围:付款流程、报销流程、差旅报销 + * 控制:不允许提交 + * 提示信息: + * (当银行账户格式错误或者长度小于5或大于35时)请核实收款方银行账号信息 + */ + private PaDetail buildBankNumCheck() throws Exception { + List tips = new ArrayList<>(); + String sql = "SELECT khx,yxzfje,yxzh FROM " + tablename + "_DT11 WHERE MAINID = ?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, mainid); + String khx = ""; + String yxzfje = ""; + String yxzh = ""; + String checkBank = "^[a-zA-Z0-9]{5,35}$"; + if (rs.next()) { + khx = Util.null2String(rs.getString("khx")); + yxzfje = Util.null2String(rs.getString("yxzfje")); + yxzh = Util.null2String(rs.getString("yxzh")); + } + //联合通用报销临时修改 + if ("lhtybx".equals(unNumberNew) || "xgtyfk".equals(unNumberNew)||"xgtybx".equals(unNumberNew)){ + if (StringUtils.isBlank(khx) || StringUtils.isBlank(yxzh)) { + tips.add("请核实收款方银行账号信息"); + }else if (!yxzh.matches(checkBank)){//限定在数字、字母和-,字符数限制5-35 + tips.add("请核实收款方银行账号信息"); + } + }else{ + if (StringUtils.isBlank(khx) || khx.contains(",") || LuhnUtil.checkString(khx.replaceAll(" ", "")) || StringUtils.isBlank(yxzh)) { + tips.add("请核实收款方银行账号信息"); + }else if (!yxzh.matches(checkBank)){//限定在数字、字母和-,字符数限制5-35 + tips.add("请核实收款方银行账号信息"); + } + } + if (yxzfje.equals("0") || StringUtils.isBlank(yxzfje)){ + tips=tips.stream().filter(v ->!v.contains("请核实收款方银行账号信息")).collect(Collectors.toList()); + } + PaDetail pd = new PaDetail(); + pd.setInfo("收款单位银行账户校验"); + pd.setCheck(CollectionUtils.isEmpty(tips)); + pd.setTips(String.join(",", tips)); + return pd; + } + + /** + * 8、收款单位银行账户字符格式,限定在数字、字母和-,字符数限制5-35(差旅) + * 适用范围:付款流程、报销流程、差旅报销 + * 控制:不允许提交 + * 提示信息: + * (当银行账户格式错误或者长度小于5或大于35时)请核实收款方银行账号信息 + */ + private PaDetail buildBankNumCheckCl() throws Exception { + List tips = new ArrayList<>(); + String sql = "SELECT khx,yxzfje,yxzh FROM " + tablename + "_DT10 WHERE MAINID = ?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, mainid); + String khx = ""; + String yxzfje = ""; + String yxzh = ""; + String checkBank = "^[a-zA-Z0-9]{5,35}$"; + if (rs.next()) { + khx = Util.null2String(rs.getString("khx")); + yxzfje = Util.null2String(rs.getString("yxzfje")); + yxzh = Util.null2String(rs.getString("yxzh")); + } + //联合差旅报销临时修改 + if ("clbx".equals(unNumberNew)){ + if (StringUtils.isBlank(khx) || StringUtils.isBlank(yxzh)) { + tips.add("请核实收款方银行账号信息"); + }else if (!yxzh.matches(checkBank)){//限定在数字、字母和-,字符数限制5-35 + tips.add("请核实收款方银行账号信息"); + } + }else{ + if (StringUtils.isBlank(khx) || LuhnUtil.checkString(khx.replaceAll(" ", "")) || StringUtils.isBlank(yxzh)) { + tips.add("请核实收款方银行账号信息"); + }else if (!yxzh.matches(checkBank)){//限定在数字、字母和-,字符数限制5-35 + tips.add("请核实收款方银行账号信息"); + } + } + if (yxzfje.equals("0") || StringUtils.isBlank(yxzfje)){ + tips=tips.stream().filter(v ->!v.contains("请核实收款方银行账号信息")).collect(Collectors.toList()); + } + PaDetail pd = new PaDetail(); + pd.setInfo("收款单位银行账户校验"); + pd.setCheck(CollectionUtils.isEmpty(tips)); + pd.setTips(String.join(",", tips)); + return pd; + } + + /** + * 空转0 + * + * @param str + * @return + */ + private String blank2Zero(String str) { + if ("".equals(str)) { + return "0.00"; + } else { + try { + return new BigDecimal(str).toString(); + } catch (Exception e) { + return "0.00"; + } + } + } + + /** + * 9、特殊要求的附件专区未上传附件。 + * 适用范围:付款流程、报销流程、差旅报销 + * 控制:仅提示,允许发起流程 + * 提示信息: + * (当存在未上传的附件专区时,进行提示)请根据附件要求,在专区上传相应审核附件。 + */ + public PaDetail buildAttachmentCheck() { + List tips = new ArrayList<>(); + //目前总部通用付款,分支机构通用付款,托收业务流程,分支机构通用报销,总部通用报销进行此校验,其他流程默认通过 + if ("zbtyfk".equals(unNumberNew)||"fzjgtyfk".equals(unNumberNew)||"fyft".equals(unNumberNew) ||"fzjgtybx".equals(unNumberNew)||"zbtybx".equals(unNumberNew)||"jjhtyfk".equals(unNumberNew)||"zgtyfk".equals(unNumberNew)){ + String sql = "SELECT YSKM FROM " + tablename + "_DT8 WHERE MAINID = ?"; + String sql1 = "select %s from %s where id = ?"; + RecordSet rs = new RecordSet(); + RecordSet rs1 = new RecordSet(); + rs.executeQuery(sql, mainid); + List kmList = Arrays.asList(km); + List fjfieldList = Arrays.asList(fjfield); + + boolean flag = true; + while (rs.next()) { + String yskm = Util.null2String(rs.getString("YSKM")); + if (kmList.contains(yskm)) { + String fjField = fjfieldList.get(kmList.indexOf(yskm)); //list等长 + String sqlNew = String.format(sql1, fjField, tablename); + rs1.executeQuery(String.format(sql1, fjField, tablename), mainid); + rs1.next(); + if ("".equals(Util.null2String(rs1.getString(fjField)))) { + flag = false; + break; + } + } + } + + if (!flag) { + tips.add("请根据附件要求,在专区上传相应审核附件"); + } + } + + PaDetail pd = new PaDetail(); + pd.setInfo("科目与附件信息校验"); + pd.setCheck(CollectionUtils.isEmpty(tips)); + pd.setTips(String.join(",", tips)); + return pd; + } + + /** + * 10、表单必填项为空 + * 适用范围:付款流程、报销流程、差旅报销 + * 控制:不允许提交 + * 提示信息: + * (当表单上存在必填项未填写时)”xxxxx”未填写,请核实后再提交流程 + */ + public PaDetail buildNeedValueCheck() { + List tips; + tips = hasNeedInputField(Integer.parseInt(rid), Integer.parseInt(workflowid)); + if(!"xgtyfk".equals(unNumberNew)){ + if(tips.contains("银行账户") || tips.contains("开户行") || tips.contains("省市") || tips.contains("收款单位") || tips.contains("银行账号")){ + //支付明细表 + //先清空 + tips=tips.stream().filter(v ->!v.contains("银行账户")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("开户行")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("省市")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("收款单位")).collect(Collectors.toList()); + //联合通用付款 + if("lhtyfk".equals(unNumberNew)){ + tips=tips.stream().filter(v ->!v.contains("银行账号")).collect(Collectors.toList()); + } + //判断是本币支付还是外币支付,本币支付且银行支付金额大于0时,银行账户,开户行,省市必填;外币支付时银行账户必填。 + RecordSet sqlFindNum = new RecordSet(); + Integer num8 = 0; + Integer num9 = 0; + String sqlNum = "SELECT num8,num9 FROM (SELECT count(*)num8 FROM "+tablename+"_dt8 WHERE mainid = "+mainid+" ),\n" + + "(SELECT count(*)num9 FROM "+tablename+"_dt9 WHERE mainid = "+mainid+" )"; + sqlFindNum.execute(sqlNum); + if (sqlFindNum.next()){ + num8 = Util.getIntValue(sqlFindNum.getString("num8")); + num9 = Util.getIntValue(sqlFindNum.getString("num9")); + } + + String sql = "SELECT t.SKDW,t.YXZH,t.KHX,t.SS,t.yxzfje FROM "+tablename+"_DT11 t WHERE t.mainid = "+mainid+" ORDER BY t.ID ASC "; + List> query = CommonAPI.query(sql); + for(int i =0;i0){ + //本币支付时银行支付金额不为0时控制银行账户,开户行,省市必填 + if (StringUtils.isBlank(yxzh)){ + if(!"lhtyfk".equals(unNumberNew)){ + tips.add("第"+hh+"行银行账户"); + }else{ + tips.add("第"+hh+"行银行账号"); + } + } + if (StringUtils.isBlank(khx)){ + tips.add("第"+hh+"行开户行"); + } + if (StringUtils.isBlank(ss)){ + tips.add("第"+hh+"行省市"); + } + }else if(!"0".equals(yxzfje) && StringUtils.isNotBlank(yxzfje) && num9>0){ + //外币支付时银行支付金额不为0时控制银行账户必填 + if(!"lhtyfk".equals(unNumberNew)){ + tips.add("第"+hh+"行银行账户"); + }else{ + tips.add("第"+hh+"行银行账号"); + } + } + if (StringUtils.isBlank(skdw)){ + tips.add("第"+hh+"行收款单位"); + } + } + } + }else { + //香港通用付款处理 + tips = tips.stream().filter(v -> !v.contains("银行账户")).collect(Collectors.toList()); + tips = tips.stream().filter(v -> !v.contains("开户行")).collect(Collectors.toList()); + tips = tips.stream().filter(v -> !v.contains("收款单位")).collect(Collectors.toList()); + String sql = "SELECT t.SKDW,t.YXZH,t.KHX,t.yxzfje FROM " + tablename + "_DT11 t WHERE t.mainid = " + mainid + " ORDER BY t.ID ASC "; + List> query = CommonAPI.query(sql); + for (int i = 0; i < query.size(); i++) { + String skdw = query.get(i).get("skdw"); + String yxzh = query.get(i).get("yxzh"); + String khx = query.get(i).get("khx"); + String yxzfje = query.get(i).get("yxzfje"); + Integer hh = i + 1; + if (!"0".equals(yxzfje) && StringUtils.isNotBlank(yxzfje)&&!"0.00".equals(yxzfje)) { + //本币支付时银行支付金额不为0时控制银行账户,开户行,省市必填 + if (StringUtils.isBlank(yxzh)) { + tips.add("第" + hh + "行银行账户"); + } + if (StringUtils.isBlank(khx)) { + tips.add("第" + hh + "行开户行"); + } + } + if (StringUtils.isBlank(skdw)) { + tips.add("第" + hh + "行收款单位"); + } + } + } + //联合通用付款特殊处理 + if ("lhtyfk".equals(unNumberNew)) { + if (tips.contains("费用归口部门") || tips.contains("预算项目") || tips.contains("是否投行项目") || tips.contains("税率") + || tips.contains("部门负责人")) { + //预算信息表 + //先清空 + tips = tips.stream().filter(v -> !v.contains("费用归口部门")).collect(Collectors.toList()); + tips = tips.stream().filter(v -> !v.contains("预算项目")).collect(Collectors.toList()); + tips = tips.stream().filter(v -> !v.contains("是否投行项目")).collect(Collectors.toList()); + tips = tips.stream().filter(v -> !v.contains("税率")).collect(Collectors.toList()); + tips = tips.stream().filter(v -> !v.contains("部门负责人")).collect(Collectors.toList()); + //判断本币,联合通用付款没有外币 + String sql = "SELECT t.fysjcdbm,t.sftxxm,t.yskmid,t.yskm,t.sl,t.gsxm FROM " + tablename + "_Dt8 t WHERE mainid = " + mainid + " ORDER BY t.ID ASC"; + List> query = CommonAPI.query(sql); + for (int i = 0; i < query.size(); i++) { + //费用归口部门 + String fysjcdbm = query.get(i).get("fysjcdbm"); + //是否投行项目 + String sftxxm = query.get(i).get("sftxxm"); + //预算项目 + String yskmid = query.get(i).get("yskmid"); + //预算科目编码 + String yskm = query.get(i).get("yskm"); + //公司项目 + String gsxm = query.get(i).get("gsxm"); + //税率 + String sl = query.get(i).get("sl"); + //行号 + Integer hh = i + 1; + if (StringUtils.isBlank(fysjcdbm)) { + tips.add("第" + hh + "行费用归口部门"); + } + if (StringUtils.isBlank(sftxxm)) { + tips.add("第" + hh + "行是否投行项目"); + } + if (StringUtils.isBlank(yskmid)) { + tips.add("第" + hh + "行预算项目"); + } + if (StringUtils.isBlank(sl)) { + tips.add("第" + hh + "行税率"); + } + //是否投行项目为是时,公司项目为必填 + if ("0".equals(sftxxm)) { + if (StringUtils.isBlank(gsxm)) { + tips.add("第" + hh + "行公司项目"); + } + } + } + //会签部门明细表 + String sqlHq = "SELECT t.bmfzr FROM " + tablename + "_Dt10 t WHERE mainid = " + mainid + " ORDER BY t.ID ASC"; + List> queryHq = CommonAPI.query(sqlHq); + for (int i = 0; i < queryHq.size(); i++) { + //部门负责人 + String bmfzr = queryHq.get(i).get("bmfzr"); + //行号 + Integer hh = i + 1; + if (StringUtils.isBlank(bmfzr)) { + tips.add("第" + hh + "行部门负责人"); + } + } + } + } else { + if(tips.contains("费用承担部门") || tips.contains("部门负责人") || tips.contains("预算科目") || tips.contains("预算科目编码") || tips.contains("费用承担部门负责人") + || tips.contains("事由")){ + //预算信息表 + //先清空 + tips=tips.stream().filter(v ->!v.contains("费用承担部门")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("部门负责人")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("预算科目")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("预算科目编码")).collect(Collectors.toList()); + if ("zbitfk".equals(unNumberNew)){ + tips=tips.stream().filter(v ->!v.contains("费用承担部门负责人")).collect(Collectors.toList()); + } + if ("fzjgtyfk".equals(unNumberNew) || "jjhtyfk".equals(unNumberNew)){ + tips=tips.stream().filter(v ->!v.contains("事由")).collect(Collectors.toList()); + } + //先判断本币 + String sql = "SELECT t.fysjcdbm,t.fycdbmfzr,t.yskmid,t.yskm,t.sy FROM "+tablename+"_Dt8 t WHERE mainid = "+mainid+" ORDER BY t.ID ASC"; + List> query = CommonAPI.query(sql); + for(int i =0;i> queryDt9 = CommonAPI.query(sqlDt9); + for(int i =0;i> queryHq = CommonAPI.query(sqlHq); + for(int i =0;i !v.contains("员工姓名")).collect(Collectors.toList()); + tips = tips.stream().filter(v -> !v.contains("部门")).collect(Collectors.toList()); + tips = tips.stream().filter(v -> !v.contains("银行账户")).collect(Collectors.toList()); + tips = tips.stream().filter(v -> !v.contains("开户行")).collect(Collectors.toList()); + tips = tips.stream().filter(v -> !v.contains("省市")).collect(Collectors.toList()); + tips = tips.stream().filter(v -> !v.contains("银行支付金额")).collect(Collectors.toList()); + + RecordSet numrs = new RecordSet(); + String numsql = "SELECT num8,num9,num13 FROM (SELECT count(*)num8 FROM "+tablename+"_dt8 WHERE mainid = "+mainid+" ),\n" + + "(SELECT count(*)num9 FROM "+tablename+"_dt9 WHERE mainid = "+mainid+" ),\n" + + "(SELECT count(*)num13 FROM "+tablename+"_Dt13 WHERE mainid = "+mainid+" )"; + numrs.executeQuery(numsql); + Integer num8 = 0; + Integer num9 = 0; + Integer num13 = 0; + if (numrs.next()){ + num8 = Util.getIntValue(numrs.getString("num8")); + num9 = Util.getIntValue(numrs.getString("num9")); + num13 = Util.getIntValue(numrs.getString("num13")); + } + + //先判断本币 + String dt8sql = "SELECT t.fysjcdbm FROM "+tablename+"_Dt8 t WHERE mainid = "+mainid+" ORDER BY t.ID ASC"; + List> query = CommonAPI.query(dt8sql); + for(int i =0;i> queryDt9 = CommonAPI.query(sqlDt9); + for(int i =0;i> dt13query = CommonAPI.query(dt13sql); + String dt11sql = "SELECT t.YXZH,t.KHX,t.SS,t.yxzfje FROM "+tablename+"_DT11 t WHERE t.mainid = "+mainid+" ORDER BY t.ID ASC "; + List> dt11query = CommonAPI.query(dt11sql); + for(int i =0;i0){ + //本币支付时银行支付金额不为0时控制银行账户,开户行,省市必填 + if (StringUtils.isBlank(yxzh)){ + tips.add("第"+hh+"行银行账户"); + } + if (StringUtils.isBlank(khx)){ + tips.add("第"+hh+"行开户行"); + } + if (StringUtils.isBlank(ss)){ + tips.add("第"+hh+"行省市"); + } + }else if(!"0".equals(yxzfje) && StringUtils.isNotBlank(yxzfje) && num9>0){ + //外币支付时银行支付金额不为0时控制银行账户必填 + if (StringUtils.isBlank(yxzh)){ + tips.add("第"+hh+"行银行账户"); + } + } + + } + for(int i =0;i0){ + //本银行支付金额不为0时控制银行账户,开户行,省市必填 + if (StringUtils.isBlank(yxzh)){ + tips.add("第"+hh+"行银行账户"); + } + if (StringUtils.isBlank(khx)){ + tips.add("第"+hh+"行开户行"); + } + if (StringUtils.isBlank(ss)){ + tips.add("第"+hh+"行省市"); + } + } + } + } + + //联合通用付款特殊处理 + if ("lhtyfk".equals(unNumberNew) || "zgtyfk".equals(unNumberNew)) { + //查询主表 + tips = tips.stream().filter(v -> !v.contains("加急原因")).collect(Collectors.toList()); + RecordSet findMain = new RecordSet(); + String sql = "SELECT jjcd,jjyy,fklxx,nbsh FROM " + tablename + " WHERE id = ?"; + findMain.executeQuery(sql, mainid); + if (findMain.next()) { + //缓急程度 + String jjcd = Util.null2String(findMain.getString("jjcd")); + //加急原因 + String jjyy = Util.null2String(findMain.getString("jjyy")); + //付款类型 + String fklxx = Util.null2String(findMain.getString("fklxx")); + //内部审核 + String nbsh = Util.null2String(findMain.getString("nbsh")); + //加急原因处理逻辑,当紧急状态是紧急、特急的时候加急原因为必填 + if ("1".equals(jjcd) || "2".equals(jjcd)) { + if (StringUtils.isBlank(jjyy)) { + tips.add("加急原因"); + } + } + //HTO-11188 当付款类型选择“投行业务保证金”时,“内部审核”字段必填。 + if ("FKLX013".equals(fklxx)) { + if (StringUtils.isBlank(nbsh)) { + tips.add("内部审核"); + } + } + } + } else { + //查询主表 + tips = tips.stream().filter(v -> !v.contains("加急原因")).collect(Collectors.toList()); + RecordSet findMain = new RecordSet(); + String sql = "SELECT bmjb,szbm,bmfzrggfys,ejbmfzrggfys,ngrgh,jjcd,jjyy FROM " + tablename + " WHERE id = ?"; + findMain.executeQuery(sql, mainid); + if (findMain.next()) { + //部门级别 + String bmjb = Util.null2String(findMain.getString("bmjb")); + //所属部门 + String szbm = Util.null2String(findMain.getString("szbm")); + //一级部门领导 + String bmfzrggfys = Util.null2String(findMain.getString("bmfzrggfys")); + //二级部门领导 + String ejbmfzrggfys = Util.null2String(findMain.getString("ejbmfzrggfys")); + //缓急程度 + String jjcd = Util.null2String(findMain.getString("jjcd")); + //加急原因 + String jjyy = Util.null2String(findMain.getString("jjyy")); + //流程处理人部门负责人逻辑,只针对总部通用付款,总部IT付款 + if ("zbitfk".equals(unNumberNew) || "zbtyfk".equals(unNumberNew) || "zbghfk".equals(unNumberNew)) { + tips = tips.stream().filter(v -> !v.contains("拟稿二级部门负责人")).collect(Collectors.toList()); + tips = tips.stream().filter(v -> !v.contains("拟稿部门负责人")).collect(Collectors.toList()); + if ("1".equals(bmjb)) { + //一级部门时 + if ("16".equals(szbm)) { + //所属部门为计划财务部 + tips = tips.stream().filter(v -> !v.contains("部门领导")).collect(Collectors.toList()); + } else { + if (StringUtils.isBlank(bmfzrggfys)) { + tips.add("部门领导"); + } + } + } else if ("2".equals(bmjb)) { + //二级部门时 + //先清空 + tips = tips.stream().filter(v -> !v.contains("部门领导")).collect(Collectors.toList()); + if ("16".equals(szbm)) { + if (StringUtils.isBlank(bmfzrggfys)) { + tips.add("部门领导"); + } + } else { + if (StringUtils.isBlank(ejbmfzrggfys)) { + tips.add("部门领导"); + } + } + + } + } + //分支机构通用付款区别于总部 + if ("fzjgtyfk".equals(unNumberNew)) { + if (StringUtils.isBlank(ejbmfzrggfys)) { + tips.add("部门负责人"); + } + } + + //加急原因处理逻辑,当紧急状态是紧急、特急的时候加急原因为必填 + if ("1".equals(jjcd) || "2".equals(jjcd)) { + if (StringUtils.isBlank(jjyy)) { + tips.add("加急原因"); + } + } + } + } + + //香港通用付款特殊处理 + if("xgtyfk".equals(unNumberNew)){ + tips=tips.stream().filter(v ->!v.contains("所属机构")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("部门负责人")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("预算科目")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("金额")).collect(Collectors.toList()); + + String xgDt8 = "SELECT t.ssjg,t.je,t.yskm,t.fysjcdbm FROM "+tablename+"_Dt8 t WHERE mainid = "+mainid+" ORDER BY t.ID ASC"; + List> queryDt8 = CommonAPI.query(xgDt8); + for(int i = 0;i!v.contains("一级部门负责人(显示)")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("二级部门负责人(显示)")).collect(Collectors.toList()); + //部门级别 + String deptDepth = Util.null2String(findMainJb.getString("deptDepth")); + if ("16".equals(szbm)){ + //所在部门为计划财务部 + }else{ + if ("1".equals(deptDepth)){ + //一级部门时 + if (StringUtils.isBlank(yjbmfzrxs)){ + tips.add("部门领导"); + } + }else if ("2".equals(deptDepth)){ + //二级部门时 + if (StringUtils.isBlank(ejbmfzrxs)){ + tips.add("部门领导"); + } + } + } + } + } + } + PaDetail pd = new PaDetail(); + pd.setInfo("表单必填校验"); + pd.setCheck(CollectionUtils.isEmpty(tips)); + tips = tips.stream().map(tip -> tip += "为必填项").collect(Collectors.toList()); + pd.setTips(String.join(",", tips)); + return pd; + } + + /** + * 10、表单必填项为空(报销) + * 适用范围:付款流程、报销流程、差旅报销 + * 控制:不允许提交 + * 提示信息: + * (当表单上存在必填项未填写时)”xxxxx”未填写,请核实后再提交流程 + */ + public PaDetail buildNeedValueCheckBx() { + List tips; + tips = hasNeedInputField(Integer.parseInt(rid), Integer.parseInt(workflowid)); + if(!"xgtybx".equals(unNumberNew)){ + if(tips.contains("银行账号") || tips.contains("开户行") || tips.contains("省市") || tips.contains("员工姓名")){ + //支付明细表 + //先清空 + tips=tips.stream().filter(v ->!v.contains("银行账号")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("开户行")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("省市")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("员工姓名")).collect(Collectors.toList()); + //判断是本币支付还是外币支付,本币支付且银行支付金额大于0时,银行账户,开户行,省市必填;外币支付时银行账户必填。 + RecordSet sqlFindNum = new RecordSet(); + Integer num8 = 0; + Integer num9 = 0; + String sqlNum = "SELECT num8,num9 FROM (SELECT count(*)num8 FROM "+tablename+"_dt8 WHERE mainid = "+mainid+" ),\n" + + "(SELECT count(*)num9 FROM "+tablename+"_dt9 WHERE mainid = "+mainid+" )"; + sqlFindNum.execute(sqlNum); + if (sqlFindNum.next()){ + num8 = Util.getIntValue(sqlFindNum.getString("num8")); + num9 = Util.getIntValue(sqlFindNum.getString("num9")); + } + + String sql = "SELECT t.ygxm,t.YXZH,t.KHX,t.SS,t.yxzfje FROM "+tablename+"_DT11 t WHERE t.mainid = "+mainid+" ORDER BY t.ID ASC "; + List> query = CommonAPI.query(sql); + for(int i =0;i0){ + //本币支付时银行支付金额不为0时控制银行账户,开户行,省市必填 + if (StringUtils.isBlank(yxzh)){ + tips.add("第"+hh+"行银行账号"); + } + if (StringUtils.isBlank(khx)){ + tips.add("第"+hh+"行开户行"); + } + if (StringUtils.isBlank(ss)){ + tips.add("第"+hh+"行省市"); + } + }else if(!"0".equals(yxzfje) && StringUtils.isNotBlank(yxzfje) && num9>0){ + //外币支付时银行支付金额不为0时控制银行账户必填 + if (StringUtils.isBlank(yxzh)){ + tips.add("第"+hh+"行银行账号"); + } + } + if (StringUtils.isBlank(ygxm)){ + tips.add("第"+hh+"行员工姓名"); + } + + } + } + }else { + //香港通用报销特殊处理,无本币和外币区分 + tips = tips.stream().filter(v -> !v.contains("银行账户")).collect(Collectors.toList()); + tips = tips.stream().filter(v -> !v.contains("开户行")).collect(Collectors.toList()); + String sql = "SELECT t.YXZH,t.KHX,t.yxzfje FROM " + tablename + "_DT11 t WHERE t.mainid = " + mainid + " ORDER BY t.ID ASC "; + List> query = CommonAPI.query(sql); + for (int i = 0; i < query.size(); i++) { + //银行支付金额 + String yxzfje = query.get(i).get("yxzfje"); + //开户行 + String khx = query.get(i).get("khx"); + //银行账号 + String yxzh = query.get(i).get("yxzh"); + Integer hh = i + 1; + if (!"0".equals(yxzfje) && StringUtils.isNotBlank(yxzfje)&&!"0.00".equals(yxzfje)) { + if (StringUtils.isBlank(yxzh)) { + tips.add("第" + hh + "行银行账户"); + } + if (StringUtils.isBlank(khx)) { + tips.add("第" + hh + "行开户行"); + } + } + } + } + + if(tips.contains("报销人") || tips.contains("费用承担部门") || tips.contains("预算科目") || tips.contains("预算科目编码") || tips.contains("报销人部门领导") + || tips.contains("事由")|| tips.contains("部门负责人")){ + //预算信息表 + //先清空 + tips=tips.stream().filter(v ->!v.contains("报销人")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("费用承担部门")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("预算科目")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("预算科目编码")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("费用承担部门负责人")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("事由")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("部门负责人")).collect(Collectors.toList()); + //先判断本币 + String sql = "SELECT t.bxr,t.fysjcdbm,t.fycdbmfzr,t.yskmid,t.yskm,t.sy FROM "+tablename+"_Dt8 t WHERE mainid = "+mainid+" ORDER BY t.ID ASC"; + List> query = CommonAPI.query(sql); + for(int i =0;i> queryDt9 = CommonAPI.query(sqlDt9); + for(int i =0;i> queryHq = CommonAPI.query(sqlHq); + for(int i =0;i> queryHq = CommonAPI.query(sqlHq); + for(int i =0;i!v.contains("报销人部门领导")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("所属机构")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("费用承担部门")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("费用发生日期")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("预算科目")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("金额")).collect(Collectors.toList()); + + String dt8sql = "SELECT t.bxrbmld,t.ssjg,t.fysjcdbm,t.fyfsrq,t.yskmid,t.je FROM "+tablename+"_Dt8 t WHERE mainid = "+mainid+" ORDER BY t.ID ASC"; + List> queryDt8 = CommonAPI.query(dt8sql); + for(int i = 0;i !v.contains("部门领导")).collect(Collectors.toList()); + //明细表8和明细表9 + String sqlDt8 = "SELECT t.bxrbm,t.bxr,t.fycdbmfzr FROM " + tablename + "_Dt8 t WHERE mainid = "+mainid+" ORDER BY t.ID ASC"; + List> queryDt8 = CommonAPI.query(sqlDt8); + String sqlDt9 = "SELECT t.bxrbm,t.bxr,t.fycdbmfzr FROM " + tablename + "_Dt9 t WHERE mainid = "+mainid+" ORDER BY t.ID ASC"; + List> queryDt9 = CommonAPI.query(sqlDt9); + queryDt8.addAll(queryDt9); + + //查询主表 + RecordSet findNgr = new RecordSet(); + String sql = "SELECT ngr , bmfzr_kf FROM "+tablename+" WHERE id = ?"; + findNgr.executeQuery(sql,mainid); + //拟稿人 + String ngr = ""; + //部门领导 + String bmfzr_kf = ""; + if(findNgr.next()){ + ngr = Util.null2String(findNgr.getString("ngr")); + bmfzr_kf = Util.null2String(findNgr.getString("bmfzr_kf")); + } + + List bxrs = new ArrayList<>(); + for(int i =0;i!v.contains("费用发生日期")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("报销人部门领导")).collect(Collectors.toList()); + String sql1 = "SELECT t.bxrbm ,t.fyfsrq,t.fycdbmfzr FROM "+tablename+"_Dt8 t WHERE mainid = "+mainid+" ORDER BY t.ID ASC"; + List> query = CommonAPI.query(sql1); + for(int i =0;i!v.contains("费用发生日期")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("是否投行项目")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("税率")).collect(Collectors.toList()); + String sql = "SELECT t.fyfsrq,t.sftxxm,t.sl,t.txxm FROM "+tablename+"_Dt8 t WHERE mainid = "+mainid+" ORDER BY t.ID ASC"; + List> query = CommonAPI.query(sql); + for(int i =0;i tip += "为必填项").collect(Collectors.toList()); + pd.setTips(String.join(",", tips)); + return pd; + } + + /** + * 10、表单必填项为空(差旅) + * 适用范围:付款流程、报销流程、差旅报销 + * 控制:不允许提交 + * 提示信息: + * (当表单上存在必填项未填写时)”xxxxx”未填写,请核实后再提交流程 + */ + public PaDetail buildNeedValueCheckCl() { + List tips; + tips = hasNeedInputField(Integer.parseInt(rid), Integer.parseInt(workflowid)); + if ("clbx".equals(unNumberNew)){ + //联合差旅报销特殊处理 + //查询主表 + RecordSet findMain = new RecordSet(); + String sql = "SELECT sfldbx,bxry,bxfs FROM "+tablename+" WHERE id = ?"; + findMain.executeQuery(sql,mainid); + if (findMain.next()){ + //是否领导报销 + String sfldbx = Util.null2String(findMain.getString("sfldbx")); + //报销人员 + String bxry = Util.null2String(findMain.getString("bxry")); + //报销方式 + String bxfs = Util.null2String(findMain.getString("bxfs")); + + //领导报销时,报销人员必填 + if ("1".equals(sfldbx)){ + if (StringUtils.isBlank(bxry)){ + tips.add("报销人员"); + } + } + + //根据报销方式判断是个人报销还是月结对公 + if("0".equals(bxfs)){ + //个人报销 + //先清空 + tips=tips.stream().filter(v ->!v.contains("银行账号")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("开户行")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("省市")).collect(Collectors.toList()); +// tips=tips.stream().filter(v ->!v.contains("部门")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("报销人")).collect(Collectors.toList()); + String sqlGr = "SELECT t.YXZH,t.KHX,t.SS,t.bm,t.bxr,t.yxzfje FROM "+tablename+"_DT10 t WHERE t.mainid = "+mainid+" ORDER BY t.ID ASC "; + List> query = CommonAPI.query(sqlGr); + for(int i =0;i!v.contains("收款单位")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("开户行")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("收款账户")).collect(Collectors.toList()); + String sqlYj = "SELECT t.skdw,t.khx,t.skzh,t.zffs,t.zfje FROM "+tablename+"_DT19 t WHERE t.mainid = "+mainid+" ORDER BY t.ID ASC "; + List> query = CommonAPI.query(sqlYj); + for(int i =0;i!v.contains("银行账号")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("开户行")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("省市")).collect(Collectors.toList()); + //差旅类流程,银行支付金额大于0时,银行账户,开户行,省市必填 + String sql = "SELECT t.YXZH,t.KHX,t.SS,t.yxzfje FROM "+tablename+"_DT10 t WHERE t.mainid = "+mainid+" ORDER BY t.ID ASC "; + List> query = CommonAPI.query(sql); + for(int i =0;i!v.contains("是否海外")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("部门负责人")).collect(Collectors.toList()); + //总部差旅报销特殊处理 + if ("zbclbx".equals(unNumberNew)){ + tips=tips.stream().filter(v ->!v.contains("出差人部门负责人")).collect(Collectors.toList()); + tips=tips.stream().filter(v ->!v.contains("出差类型")).collect(Collectors.toList()); + } + // + String sql = "SELECT t.sfhw,t.ccrbmfzr,t.cclx FROM "+tablename+"_Dt12 t WHERE mainid = "+mainid+" ORDER BY t.ID ASC"; + List> query = CommonAPI.query(sql); + for(int i =0;i> queryHq = CommonAPI.query(sqlHq); + for(int i =0;i> queryHq = CommonAPI.query(sqlHq); + for(int i =0;i> query = CommonAPI.query(sql); + for(int i =0;i!v.contains("费用承担部门")).collect(Collectors.toList()); + // + String sql = "SELECT t.fycdbm FROM "+tablename+"_Dt9 t WHERE mainid = "+mainid+" ORDER BY t.ID ASC"; + List> queryFT = CommonAPI.query(sql); + for(int i =0;i tip += "为必填项").collect(Collectors.toList()); + pd.setTips(String.join(",", tips)); + return pd; + } + + + /** + * 11、报销人=收款人 + * 适用范围:报销流程、差旅报销 + * 控制:仅提示,允许发起流程 + * 提示信息: + * (当报销人与收款人不一致时)当报销人与收款人不一致,请确认是否无误 + */ + public PaDetail buildHrmCheck() { + List tips = new ArrayList<>(); + String sql = "SELECT YGXM FROM " + tablename + "_DT11 WHERE MAINID =?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, mainid); + List ysxms = new ArrayList<>(); + while (rs.next()) { + ysxms.add(Util.null2String(rs.getString("YGXM"))); + } + sql = "SELECT BXR FROM " + tablename + "_DT8 WHERE MAINID =?"; + rs.executeQuery(sql, mainid); + while (rs.next()) { + String bxr = Util.null2String(rs.getString("BXR")); + if (!ysxms.contains(bxr)) { + tips.add("当前报销人和收款人不一致,请确认是否无误"); + break; + } + } + if (CollectionUtils.isEmpty(ysxms)) { + tips = new ArrayList<>(); + tips.add("请先填写报销人信息"); + } + PaDetail pd = new PaDetail(); + pd.setInfo("报销人和收款人校验"); + pd.setCheck(CollectionUtils.isEmpty(tips)); + pd.setTips(String.join(",", tips)); + return pd; + } + + /** + * 11、报销人=收款人(差旅) + * 适用范围:报销流程、差旅报销 + * 控制:仅提示,允许发起流程 + * 提示信息: + * (当报销人与收款人不一致时)当报销人与收款人不一致,请确认是否无误 + */ + public PaDetail buildHrmCheckCl() { + List tips = new ArrayList<>(); + boolean isLdbx = getIsLdbx(tablename,rid); + RecordSet rs = new RecordSet(); + List ysxms = new ArrayList<>(); + if ("zbclbx".equals(unNumberNew)||"clbx".equals(unNumberNew)){ + String bxrysql = ""; + if(isLdbx){ + bxrysql = "SELECT bxry FROM " + tablename + " WHERE requestid =?"; + rs.executeQuery(bxrysql, rid); + if (rs.next()) { + ysxms = Arrays.asList(Util.null2String(rs.getString("bxry")).split(",")); + } + String bxrsql = "SELECT bxr FROM " + tablename + "_DT10 WHERE MAINID =?"; + rs.executeQuery(bxrsql, mainid); + while (rs.next()) { + String bxr = Util.null2String(rs.getString("bxr")); + if (!ysxms.contains(bxr)) { + tips.add("当前报销人和收款人不一致,请确认是否无误"); + break; + } + } + if (CollectionUtils.isEmpty(ysxms)) { + tips = new ArrayList<>(); + tips.add("请先填写报销人信息"); + } + }else { + String ccr = ""; + String bxr = ""; + String bxrsql = "SELECT bxr FROM "+tablename+"_Dt10 t WHERE mainid = ?"; + rs.executeQuery(bxrsql, mainid); + while ((rs.next())){ + bxr = Util.null2String(rs.getString("bxr")); + } + String ccrsql = "SELECT ccr FROM " + tablename + "_DT12 WHERE MAINID = "+mainid; + List> query = CommonAPI.query(ccrsql); + for(int i =0;i(); + tips.add("请先填写出差人信息"); + } + } + }else { + String bxrysql = "SELECT bxry FROM " + tablename + " WHERE requestid =?"; + rs.executeQuery(bxrysql, rid); + if (rs.next()) { + ysxms = Arrays.asList(Util.null2String(rs.getString("bxry")).split(",")); + } + String ccrsql = "SELECT ccr FROM " + tablename + "_DT10 WHERE MAINID =?"; + rs.executeQuery(ccrsql, mainid); + while (rs.next()) { + String ccr = Util.null2String(rs.getString("ccr")); + if (!ysxms.contains(ccr)) { + tips.add("当前报销人和收款人不一致,请确认是否无误"); + break; + } + } + if (CollectionUtils.isEmpty(ysxms)) { + tips = new ArrayList<>(); + tips.add("请先填写报销人信息"); + } + } + PaDetail pd = new PaDetail(); + pd.setInfo("报销人和收款人校验"); + pd.setCheck(CollectionUtils.isEmpty(tips)); + pd.setTips(String.join(",", tips)); + return pd; + } + + private boolean getIsLdbx(String tablename, String rid) { + String sfldbx = "0"; + RecordSet rs = new RecordSet(); + String sql = "SELECT sfldbx FROM " + tablename + " WHERE requestid = '"+rid+"'"; + rs.executeQuery(sql); + while (rs.next()){ + sfldbx = Util.null2String(rs.getString("sfldbx")); + } + return "0".equals(sfldbx); + } + + /** + * 12、预算信息-预算科目字段根据发票上传后自动填单,未进行更改。 + * 适用范围:付款流程、报销流程、差旅报销 + * 控制:仅提示,允许发起流程 + * 提示信息: + * (将自动填单规则计算出的预算科目存一个副本,当表单上的预算科目与副本相同时)预算科目根据发票税目自动填写,请注意核对无误后,再提交流程 + */ + public PaDetail buildAutoFillFormCheck() { + List tips = new ArrayList<>(); + RecordSet sqlCheck = new RecordSet(); + Integer countDt5 = 0; + Integer countDt6 = 0; + String sqlDt5 = "SELECT count(*) AS count FROM "+tablename+"_DT5 WHERE mainid = ?"; + sqlCheck.executeQuery(sqlDt5,mainid); + if (sqlCheck.next()){ + countDt5 = Util.getIntValue(sqlCheck.getString("count")); + } + String sqlDt6 = "SELECT count(*) AS count FROM "+tablename+"_DT6 WHERE mainid = ?"; + sqlCheck.executeQuery(sqlDt6,mainid); + if (sqlCheck.next()){ + countDt6 = Util.getIntValue(sqlCheck.getString("count")); + } + if(countDt5>0 || countDt6>0){ + String sql = "SELECT YSKM,YSKMBY FROM " + tablename + "_DT8 WHERE MAINID = ?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, mainid); + while (rs.next()) { + if (Util.null2String(rs.getString("YSKM")) + .equals(Util.null2String(rs.getString("YSKMBY")))) { + tips.add("预算科目根据发票税目自动填写,请注意核对无误后,再提交流程"); + break; + } + } + } + PaDetail pd = new PaDetail(); + pd.setInfo("自动填单预算科目校验"); + pd.setCheck(CollectionUtils.isEmpty(tips)); + pd.setTips(String.join(",", tips)); + return pd; + } + + /** + * 13、收款单位=发票开具单位=合同对手方(合同流程中信息) + * 适用范围:付款流程 + * 控制:仅提示,允许发起流程 + * 提示信息: + * (当支付信息中“收款单位”与发票信息中“销方名称”或关联合同中“合同对手方”不一致时) 收款单位“xxxx”与发票开具单位名称/合同对手方名称不一致,请核实信息是否无误 + */ + public PaDetail buildInvoicedEqualsContractCheck() { + List tips = new ArrayList<>(); + String sql = "SELECT skdw FROM " + tablename + "_DT11 WHERE MAINID = ?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, mainid); + String skdw = ""; + + if (rs.next()) { + skdw = Util.null2String(rs.getString("skdw")); + } + //分支机构通用付款收款单位为多行文本框,空格替换 + if ("fzjgtyfk".equals(unNumberNew)){ + skdw = skdw.replaceAll(" "," "); + } + String swdbc = toDbc(skdw);//收文单位转半角 + if (StringUtils.isNotEmpty(skdw)) { + sql = "SELECT xfmc FROM " + tablename + "_DT5 WHERE MAINID = ?"; + rs.executeQuery(sql, mainid); + boolean flag = true; + boolean ifNull = true; //判断是否有发票 + while (rs.next()) { + ifNull = false; + String xfmc = Util.null2String(rs.getString("xfmc")); + String fpdbc = toDbc(xfmc);//发票销方名称转半角 + if (fpdbc.equals(swdbc)) { + flag = false; + break; + } + } + + + + if (flag && !ifNull) { //skdw != xfmc + tips.add("收款单位“" + skdw + "”与发票开具单位名称/合同对手方名称不一致,请核实信息是否无误"); + } else { + flag = true; //重置状态位 + sql = "SELECT htdsf FROM " + tablename + "_DT4 WHERE MAINID = ?"; + rs.executeQuery(sql, mainid); + String htdsf = ""; + if (rs.next()) { + htdsf = Util.null2String(rs.getString("htdsf")); + } + String dsfdbc = toDbc(htdsf);//合同对手方转半角 + if (StringUtils.isNotEmpty(htdsf)) { + List htdsfList = Arrays.stream(dsfdbc.split(",")).collect(Collectors.toList()); + if (htdsfList.contains(swdbc)) { + flag = false; + } + }else{ + flag = false; + } + + if (flag) { + tips.add("收款单位“" + skdw + "”与发票开具单位名称/合同对手方名称不一致,请核实信息是否无误"); + }else if (ifNull && StringUtils.isEmpty(htdsf)){//发票开具单位和合同对手方都为空 +// tips.add("收款单位“" + skdw + "”与发票开具单位名称/合同对手方名称不一致,请核实信息是否无误"); + } + } + } else { + tips.add("收款单位为空与发票开具单位名称/合同对手方名称不一致,请核实信息是否无误"); + } + + PaDetail pd = new PaDetail(); + pd.setInfo("收款单位,发票开具单位及合同对手方校验"); + pd.setCheck(CollectionUtils.isEmpty(tips)); + pd.setTips(String.join(",", tips)); + return pd; + } + + /** + * 14、根据收款单位名称,校对银行账户是否与历史付款流程一致。 + * 适用范围:付款流程 + * 控制:仅提示,允许发起流程 + * 提示信息: + * (根据收款单位名称,搜索历史付款成功信息中该单位对应使用过的银行账户信息,校对本次付款银行账户是否存在,若该收款单位未使用过此银行账户,则提醒)该银行账号与该单位历史付款信息不符,请核实收款方银行账号信息 + */ + public PaDetail buildHistoryPayCheck() { + List tips = new ArrayList<>(); + String sql = "SELECT SKDW,YXZH FROM " + tablename + "_DT11 WHERE MAINID = ?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, mainid); + String skdw = ""; + String yxzh = ""; + if (rs.next()) { + skdw = Util.null2String(rs.getString("SKDW")); + yxzh = Util.null2String(rs.getString("YXZH")); + } + if (StringUtils.isEmpty(skdw) || StringUtils.isEmpty(yxzh)) { + tips.add("该银行账号与该单位历史付款信息不符,请核实收款方银行账号信息"); + } else { + sql = "SELECT SKDW,YXZH FROM " + tablename + "_DT11 WHERE SKDW = ? AND YXZH = ?"; + rs.executeQuery(sql, skdw, yxzh); + if (rs.getCounts() < 2) { + tips.add("该银行账号与该单位历史付款信息不符,请核实收款方银行账号信息"); + } + sql = "SELECT SKDW,YXZH FROM " + tablename + "_DT11 WHERE SKDW = ? "; + rs.executeQuery(sql, skdw); + if (rs.getCounts() == 1){ + //如果该收款单位除了自己外并无其他历史记录,则通过 + tips=tips.stream().filter(v ->!v.contains("该银行账号与该单位历史付款信息不符,请核实收款方银行账号信息")).collect(Collectors.toList()); + } + } + + PaDetail pd = new PaDetail(); + pd.setInfo("历史付款流程校验"); + pd.setCheck(CollectionUtils.isEmpty(tips)); + pd.setTips(String.join(",", tips)); + return pd; + } + + /** + * 检查必填项名称 + * + * @param requestid + * @param workflowid + * @return boolean + */ + public List hasNeedInputField(int requestid, int workflowid) { + List needInputFields = new ArrayList<>(); + RecordSet rs3 = new RecordSet(); + int nodeid = -1; + String sql = "SELECT nodeid FROM workflow_flownode WHERE workflowid=" + workflowid + " AND nodetype='0'"; + rs3.execute(sql); + if (rs3.next()) { + nodeid = Util.getIntValue(rs3.getString("nodeid")); + } + + List lstDetailFields = null; + Map mainTblFields = null; + try { + WorkflowComInfo workflowTool = new WorkflowComInfo(); + int isBill = Util.getIntValue(workflowTool.getIsBill(String.valueOf(workflowid))); + int formID = Util.getIntValue(workflowTool.getFormId(String.valueOf(workflowid))); + FieldInfo fieldTool = new FieldInfo(); + fieldTool.setRequestid(requestid); + fieldTool.GetManTableField(formID, isBill, 7); + fieldTool.GetDetailTblFields(formID, isBill, 7); + + mainTblFields = fieldTool.getMainFieldValues(); + lstDetailFields = fieldTool.getDetailFieldValues(); + } catch (Exception e) { + logger.info("Catch a exception during instantiate the WorkflowComInfo.", e); + return needInputFields; + } + + sql = "select a.ismode,a.showdes from workflow_flownode a where a.workflowid=" + workflowid + " and a.nodeid=" + nodeid; + rs3.executeSql(sql); + if (rs3.next()) { + int ismode = Util.getIntValue(rs3.getString("ismode"), 0); + int showdes = Util.getIntValue(rs3.getString("showdes"), 0); + if (ismode == 0 || ismode == 2 || (ismode == 1 && showdes == 1)) {//一般模式 + sql = "select fieldid from workflow_nodeform where ismandatory='1' and nodeid=" + nodeid; + } else {//模板模式 + sql = "select fieldid from workflow_modeview where ismandatory='1' and nodeid=" + nodeid; + } + rs3.executeSql(sql); + while (rs3.next()) { + String fieldid = rs3.getString("fieldid"); + //是否为主表单字段 + if (mainTblFields.containsKey(fieldid)) { + String fieldValue = mainTblFields.get(fieldid); + if (fieldValue == null || "".equals(fieldValue)) { + needInputFields.add(getLabelName(fieldid)); + } + } else { + //主表单中不存在该字段,则对多明细字段进行循环。 + for (int i = 0; i < lstDetailFields.size(); i++) { + List tmpList = (List) lstDetailFields.get(i); + for (int j = 0; j < tmpList.size(); j++) { + Map mapDetailFields = (Map) tmpList.get(j); + if (!mapDetailFields.containsKey(fieldid)) { + break; + } else { + String fieldValue = mapDetailFields.get(fieldid); + if (fieldValue == null || "".equals(fieldValue)) { + needInputFields.add(getLabelName(fieldid)); + } + } + } + } + } + } + + } + return needInputFields.stream().filter(StringUtil::isNotEmpty).collect(Collectors.toList()); + } + + /** + * 获取label name + * + * @param fieldId 字段id + * @return 中文名称 + */ + private String getLabelName(String fieldId) { + String sql = "select t2.labelname from workflow_billfield t1\n" + + "left join htmllabelinfo t2\n" + + "on t2.indexid = t1.fieldlabel \n" + + "where t2.labelname is not null and t1.id = ?"; + return CommonAPI.querySingleFieldWithPlaceholder(sql, "labelname", fieldId); + } + + + + /** + * 15、发票合计金额=费用明细合计金额 + * 适用范围:付款流程、报销流程、差旅报销 + * 控制:仅提示,允许发起流程 + * * 提示信息: + * (“票据信息-票据汇总-价税合计总额汇总金额”与“预算信息-合计金额”不同时)发票合计金额与费用明细合计金额不符,请核实后再提交流程 + */ + public PaDetail buildFpOrFyHjCheck() { + List tips = new ArrayList<>(); + RecordSet sqlFindDt7 = new RecordSet(); + String hjxxjeitxmf = ""; + String jshjzeAll = ""; + int djzs = -1; + String sql = "SELECT hjxxjeitxmf,djzs FROM "+tablename+" WHERE requestid = ?"; + sqlFindDt7.executeQuery(sql,rid); + if (sqlFindDt7.next()){ + DecimalFormat df = new DecimalFormat("0.00"); + hjxxjeitxmf = df.format(Double.parseDouble(Util.null2String(sqlFindDt7.getString("hjxxjeitxmf")))); + djzs = Integer.parseInt(Util.null2String(sqlFindDt7.getString("djzs"))); + } + if (djzs > 0) { + sql = "SELECT JSHJZE FROM " + tablename + "_DT7 fmd WHERE MAINID = ?"; + sqlFindDt7.executeQuery(sql, mainid); + while (sqlFindDt7.next()) { + String jshjzeNew = Util.null2String(sqlFindDt7.getString("JSHJZE")); + jshjzeAll = DoubleUtil.add(blank2Zero(jshjzeAll), blank2Zero(jshjzeNew), 2).toString(); + } + if (sqlFindDt7.getCounts() > 0) { + if (!new BigDecimal(hjxxjeitxmf).equals(new BigDecimal(jshjzeAll))) { + tips.add("发票合计金额与费用明细合计金额不符,请核实后再提交流程"); + } + } + } + PaDetail pd = new PaDetail(); + pd.setInfo("发票合计金额与费用明细合计金额校验"); + pd.setCheck(CollectionUtils.isEmpty(tips)); + pd.setTips(String.join(",", tips)); + return pd; + } + + /** + * 15、发票合计金额=费用明细合计金额(差旅) + * 适用范围:付款流程、报销流程、差旅报销 + * 控制:仅提示,允许发起流程 + * * 提示信息: + * (“票据信息-票据汇总-价税合计总额汇总金额”与“预算信息-合计金额 - 补贴金额”不同时)发票合计金额与费用明细合计金额不符,请核实后再提交流程 + */ + public PaDetail buildFpOrFyHjCheckCl() { + List tips = new ArrayList<>(); + RecordSet sqlFindDt7 = new RecordSet(); + String hzhjjshjze = ""; + String clfy = ""; + int djzs = -1; + String sql = "SELECT clfyhj,hzhjjshjze,djzs,mxbthj FROM "+tablename+" WHERE requestid = ?"; + sqlFindDt7.executeQuery(sql,rid); + if (sqlFindDt7.next()){ + DecimalFormat df = new DecimalFormat("0.00"); + hzhjjshjze = df.format(Double.parseDouble(Util.null2String(sqlFindDt7.getString("hzhjjshjze")))); + djzs = Integer.parseInt(Util.null2String(sqlFindDt7.getString("djzs"))); + //差旅费用明细-合计金额 - 差旅费用明细-补贴合计 + clfy = df.format(Double.parseDouble(Util.null2String(sqlFindDt7.getString("clfyhj"))) - Double.parseDouble(Util.null2String(sqlFindDt7.getString("mxbthj")))); + } + if(sqlFindDt7.getCounts()>0 && djzs > 0){ + if (!new BigDecimal(clfy).equals(new BigDecimal(hzhjjshjze))){ + tips.add("发票合计金额与费用明细合计金额不符,请核实后再提交流程"); + } + } + PaDetail pd = new PaDetail(); + pd.setInfo("发票合计金额与费用明细合计金额校验"); + pd.setCheck(CollectionUtils.isEmpty(tips)); + pd.setTips(String.join(",", tips)); + return pd; + } + + /** + * 半角转全角 + * @param input + * @return + */ + public String toSbc(String input){ + char[] c = input.toCharArray(); + for (int i=0;i65280 && c[i] <65375){ + c[i] = (char) (c[i] - 65248); + } + } + return new String(c); + } +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/PurchasingMallServiceImpl.java b/src/main/java/com/engine/htsc/payment/service/impl/PurchasingMallServiceImpl.java new file mode 100644 index 0000000..c1e34ca --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/PurchasingMallServiceImpl.java @@ -0,0 +1,40 @@ +package com.engine.htsc.payment.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.financialadjustment.util.BizUtil; +import com.engine.htsc.payment.service.PaymentService; +import com.engine.htsc.payment.service.PurchasingMallService; +import org.apache.commons.lang3.Validate; +import weaver.general.BaseBean; +import weaver.workflow.action.ESBNewAction; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +public class PurchasingMallServiceImpl extends Service implements PurchasingMallService { + @Override + public Map> getBatchKj(String yskms) throws Exception { + Validate.notEmpty(yskms, "预算科目为空,查询失败"); + Map> res = new HashMap<>(); + PaymentService ps = new PaymentServiceImpl(); + Arrays.stream(yskms.split(",")).forEach(item -> { + Map itemMap = new HashMap<>(); + try { + String accountCode = ps.getAccountCode(item.split("_")[1]); + String[] split = accountCode.split("@"); + itemMap.put("value", split[0]); + itemMap.put("name", split[1]); + res.put(item, itemMap); + } catch (Exception e) { + itemMap.put("value", ""); + itemMap.put("name", ""); + res.put(item, itemMap); + new BaseBean().writeLog(e); + } + }); + return res; + } + + +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/SaveIntoFinancePaymentServiceImpl.java b/src/main/java/com/engine/htsc/payment/service/impl/SaveIntoFinancePaymentServiceImpl.java new file mode 100644 index 0000000..741dca3 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/SaveIntoFinancePaymentServiceImpl.java @@ -0,0 +1,506 @@ +package com.engine.htsc.payment.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.payment.service.SaveIntoFinancePaymentService; +import com.engine.integration.util.StringUtils; +import weaver.conn.RecordSet; +import weaver.conn.RecordSetDataSource; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.payment.SaveIntoFinanceAction; +import weaver.interfaces.htsc.payment.WorkFlowNameConvertor; +import weaver.interfaces.workflow.action.Action; + +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import weaver.soa.workflow.request.RequestInfo; +import weaver.workflow.request.RequestManager; + +import static weaver.hrm.common.ReflectUtil.writeLog; + +public class SaveIntoFinancePaymentServiceImpl extends Service implements SaveIntoFinancePaymentService { + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss"); + + @Override + public String saveIntoFinance(List requestidList) throws Exception { + String result = ""; + //根据requestid写入资金系统 + for(String requestId : requestidList){ + JAVATools.writelog("requestId: "+requestId+" 根据requestId写入资金系统 saveIntoFinance"); + String tableName = ""; + String code = ""; + String lcbh = ""; + + //获取流程类型获取其主表名 + String sql = "select t1.tablename, t2.ECOLOGY_PINYIN_SEARCH as code,t2.WORKFLOWNAME\n" + + " from workflow_bill t1, workflow_base t2, workflow_requestbase t3\n" + + " where t1.id = t2.formid\n" + + " and t2.id = t3.workflowid\n" + + " and t3.requestid = " + requestId; + RecordSet rs = new RecordSet(); + JAVATools.writelog("requestId:" + requestId + "根据requestId获取流程类型和主表名Sql: " + sql); + rs.executeQuery(sql); + if (rs.next()){ + tableName = Util.null2String(rs.getString("tableName")); + code = Util.null2String(rs.getString("code")); + } + + //判断是否已经写入资金系统,有则不再进行写入 + if(!"".equals(tableName)) { + String sqlMain = "select lcbh from " + tableName + " where requestId = "+requestId; + rs.execute(sqlMain); + if (rs.next()){ + lcbh = Util.null2String(rs.getString("lcbh")); + } + RecordSetDataSource rsdM = new RecordSetDataSource("FinanceM"); + String sqlF = "select OAFKZJB_ZDDW,OAFKZJB_SQSJ,OAFKZJB_OABH,OAFKZJB_OAID from OAFKZJB where OAFKZJB_OAID = '"+lcbh+"'"; + rsdM.execute(sqlF); + if (rsdM.next()){ + result = lcbh+ " 该流程已写入资金系统"; + }else { + if("zbghfk".equals(code)||"yfkfyqr".equals(code)||"zbitfk".equals(code)||"zbtyfk".equals(code)||"fzjgtyfk".equals(code)){ + //通用付款 + result = tygkSaveIntoFinance(requestId,tableName); + }else if("zbtybx".equals(code)||"fzjgtybx".equals(code)){ + //通用报销 + result = tybxSaveIntoFinance(requestId,tableName); + }else if("zbclbx".equals(code)||"fzjgclbx".equals(code)){ + //差旅报销 + result = clbxSaveIntoFinance(requestId,tableName); + }else if("zbsljsfk".equals(code)||"fzjgsljsfk".equals(code)){ + SaveIntoFinanceAction saveIntoFinanceAction = new SaveIntoFinanceAction(); + RequestInfo requestInfo=new RequestInfo(); + requestInfo.setRequestid(requestId); + RequestManager requestManager=new RequestManager(); + requestManager.setBilltablename(tableName); + requestInfo.setRequestManager(requestManager); + result = saveIntoFinanceAction.execute(requestInfo); + } + } + } + } + return result; + } + + private String clbxSaveIntoFinance(String requestId, String mainTableName) { + try { + //拼接获取明细表名 + String detailTableName = mainTableName + "_dt10"; + if(isFZF(requestId, mainTableName)) { + JAVATools.writelog("requestId:" + requestId + " 全是非自付费用 不写资金表"); + return "SUCCESS"; + } + JAVATools.writelog("requestId:" + requestId + " 开始写入资金系统表,差旅报销名:" + mainTableName); + Map map = getOAMainData(requestId, mainTableName); + innserttable(map, "OAFKZJB"); + JAVATools.writelog("requestId:" + requestId + " 写入资金中间表主表完成"); + List> insertList = getOADetailData(requestId, mainTableName, detailTableName); + String sqlTable = "OAFKZJBMX_OABH,OAFKZJBMX_DFDWMC,OAFKZJBMX_DFYHZH,OAFKZJBMX_DFHM,OAFKZJBMX_BXRGH," + + "OAFKZJBMX_DFKHH,OAFKZJBMX_DFSF,OAFKZJBMX_DFCS,OAFKZJBMX_JE,OAFKZJBMX_JSZT"; + String sqlTableE = "?,?,?,?,?,?,?,?,?,?"; + insertList(sqlTable, sqlTableE, insertList, "FinanceM", "OAFKZJBMX"); + JAVATools.writelog("requestId:" + requestId + " 写入资金中间表明细表完成"); + }catch(Exception e) { + e.printStackTrace(); + writeLog(e); + return "FAIL"; + } + return "SUCCESS"; + } + + private String tybxSaveIntoFinance(String requestId, String mainTableName) { + try { + //拼接获取明细表名 + String detailTableName = mainTableName + "_dt11"; + writeLog("requestId:" + requestId + " 开始写入资金系统表,通用报销主表名:" + mainTableName); + Map map = getOAMainData(requestId, mainTableName); + innserttable(map, "OAFKZJB"); + writeLog("requestId:" + requestId + " 写入资金中间表主表完成"); + + List> insertList = getOATYBXDetailData(requestId, mainTableName, detailTableName); + String sqlTable = "OAFKZJBMX_OABH,OAFKZJBMX_DFDWMC,OAFKZJBMX_DFYHZH,OAFKZJBMX_DFHM,OAFKZJBMX_BXRGH," + + "OAFKZJBMX_DFKHH,OAFKZJBMX_DFSF,OAFKZJBMX_DFCS,OAFKZJBMX_JE,OAFKZJBMX_JSZT"; + String sqlTableE = "?,?,?,?,?,?,?,?,?,?"; + insertList(sqlTable, sqlTableE, insertList, "FinanceM", "OAFKZJBMX"); + writeLog("requestId:" + requestId + " 写入资金中间表明细表完成"); + }catch(Exception e) { + e.printStackTrace(); + writeLog(e); + return "FAIL"; + } + return "SUCCESS"; + } + + private String tygkSaveIntoFinance(String requestId, String tableName) { + String lcbh ="";//业务流程编号 + //拼接获取明细表名 + String tableNameDt = tableName + "_dt11"; + //工会付款时存在dt13表 + String tableNameDt13 = tableName + "_dt13"; + + JAVATools.SetCmdwritelog("写入资金系统表","主表为"+tableName); + RecordSet rs = new RecordSet(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss"); + try { + String sqlMain = "select r.id ,r.requestid,r.lcbh,r.requestId,r.szbm,r.bz,r.ngsj,r.ngr ,d.DEPARTMENTNAME,d.DEPARTMENTCODE,s.LASTNAME,s.workcode " + + "from " + tableName +" r,hrmdepartment d,hrmresource s where r.szbm = d.id and s.id = r.ngr and REQUESTID = "+requestId+""; + rs.execute(sqlMain); + JAVATools.SetCmdwritelog("查询" + tableName + "语句:" + sqlMain); + if(rs.next()){ + Map map = new HashMap<>(); + String mainId = Util.null2String(rs.getString("id")); + map.put("OAFKZJB_OAID", Util.null2String(rs.getString("lcbh"))); + lcbh = Util.null2String(rs.getString("lcbh")); + map.put("OAFKZJB_OABH", WorkFlowNameConvertor.getEN_Lcbh(Util.null2String(rs.getString("lcbh")))); + map.put("OAFKZJB_ZDDW", Util.null2String(rs.getString("DEPARTMENTCODE"))); + map.put("OAFKZJB_DWBH", Util.null2String(rs.getString("DEPARTMENTCODE"))); + map.put("OAFKZJB_FKBMMC",Util.null2String(rs.getString("DEPARTMENTNAME"))); + map.put("OAFKZJB_BZ",Util.null2String(rs.getString("bz"))); + String timeStr = Util.null2String(rs.getString("ngsj")); + timeStr = timeStr + ":00"; + String[] timeStrs = timeStr.split(" "); + String[] dataStrs = timeStrs[0].split("-"); + map.put("OAFKZJB_SQRQ",dataStrs[0]+dataStrs[1]+dataStrs[2]); + map.put("OAFKZJB_SQSJ",timeStrs[1]); + map.put("OAFKZJB_JSZT","0"); + //拟稿人 + map.put("OAFKZJB_SQR",Util.null2String(rs.getString("LASTNAME"))); + //拟稿人工号 + map.put("OAFKZJB_SQRGH",Util.null2String(rs.getString("workcode"))); + String date = sdf.format(new Date()); + String[] newDates = date.split(" "); + map.put("OAFKZJB_BJRQ",newDates[0]); + map.put("OAFKZJB_BJSJ",newDates[1]); + innserttable(map,"OAFKZJB"); + String sqlDetail = "select d.skdw,d.yxzh,d.khx,d.ss,d.dfkje,d.khxmc,d.bz,d.yxzfje from "+tableNameDt+" d where mainid = "+mainId+" and d.yxzh is not null and d.yxzfje !=0 and d.yxzfje !=0.00"; + JAVATools.SetCmdwritelog("查询" + tableNameDt + "语句:" + sqlDetail); + rs.execute(sqlDetail); + List> insertList = new ArrayList<>(); + while (rs.next()){ + List list = new ArrayList<>(); + HashMap detailMap = new HashMap(); + list.add(WorkFlowNameConvertor.getEN_Lcbh(lcbh)); + //对skdw 进行格式化处理去除
+ String skdw = Util.null2String(rs.getString("skdw")).replace("
",""); + skdw = skdw.replace(" ",""); + list.add(skdw); + String regEx="[^(0-9)]"; + Pattern p = Pattern.compile(regEx); + Matcher m = p.matcher(Util.null2String(rs.getString("yxzh"))); + list.add(m.replaceAll("").trim()); + list.add(skdw); + list.add(""); + list.add(Util.null2String(rs.getString("khxmc"))); + String area = Util.null2String(rs.getString("ss")); + List areaArray = cityCodeToName(area); + if (null!=areaArray&&areaArray.size()>0){ + list.add(areaArray.get(0)); + if (areaArray.size()>1){ + list.add(areaArray.get(1)); + }else { + list.add(""); + } + }else { + list.add(""); + list.add(""); + } + list.add(Util.null2String(rs.getString("yxzfje"))); + list.add("0"); + list.add("0"); + list.add(Util.null2String(rs.getString("bz"))); + insertList.add(list); + } + + String sqlIsGH = "select * from workflow_base t1 where t1.formid in (" + + " select t2.id from workflow_bill t2 where tablename = '" + tableName.toLowerCase(Locale.ROOT) + "' ) " + + " and t1.unnumber = 'zbghfk'" ; + rs.execute(sqlIsGH); + if(rs.next()) { + String sqlDetail13 = "select s.lastname,d.yxzh,d.khx,d.ss,d.yxzfje,d.khxmc,d.bz from " + tableNameDt13 + " d ," + + " hrmresource s where d.ygxm=s.id and d.mainid = " + mainId + " and d.yxzfje !=0 "; + JAVATools.SetCmdwritelog("查询" + tableNameDt13 + "语句:" + sqlDetail13); + rs.execute(sqlDetail13); + while (rs.next()) { + List list = new ArrayList<>(); + HashMap detailMap = new HashMap(); + list.add(WorkFlowNameConvertor.getEN_Lcbh(lcbh)); + list.add(Util.null2String(rs.getString("lastname"))); + String regEx="[^(0-9)]"; + Pattern p = Pattern.compile(regEx); + Matcher m = p.matcher(Util.null2String(rs.getString("yxzh"))); + list.add(m.replaceAll("").trim()); + list.add(Util.null2String(rs.getString("lastname"))); + list.add(""); + list.add(Util.null2String(rs.getString("khxmc"))); + String area = Util.null2String(rs.getString("ss")); + List areaArray = cityCodeToName(area); + if (null != areaArray && areaArray.size() > 0) { + list.add(areaArray.get(0)); + if (areaArray.size() > 1) { + list.add(areaArray.get(1)); + } else { + list.add(""); + } + } else { + list.add(""); + list.add(""); + } + list.add(Util.null2String(rs.getString("yxzfje"))); + list.add("0"); + list.add("0"); + list.add(Util.null2String(rs.getString("bz"))); + insertList.add(list); + } + } + String sqlTable = "OAFKZJBMX_OABH,OAFKZJBMX_DFDWMC,OAFKZJBMX_DFYHZH,OAFKZJBMX_DFHM,OAFKZJBMX_BXRGH," + + "OAFKZJBMX_DFKHH,OAFKZJBMX_DFSF,OAFKZJBMX_DFCS,OAFKZJBMX_JE,OAFKZJBMX_DJZT,OAFKZJBMX_JSZT,OAFKZJBMX_YHBZ"; + String sqlTableE = "?,?,?,?,?,?,?,?,?,?,?,?"; + insertList(sqlTable,sqlTableE,insertList,"FinanceM","OAFKZJBMX"); + + } + + } catch (Exception e) { + e.printStackTrace(); + return "FAIL"; + } + return "SUCCESS"; + } + + //批量插入表单,切换数据源 + public boolean insertList(String sqlTableS,String sqlTableE,List> insertList,String sqlData,String tablename){ + boolean flag = true; + try { + RecordSet rs = new RecordSet(); + JAVATools.SetCmdwritelog("新表插入:", "表名" + tablename + "数据源为" + sqlData); + JAVATools.SetCmdwritelog("sql:" + String.format("insert into %s (" + sqlTableS + ") values(" + sqlTableE + ") ", tablename)); + JAVATools.SetCmdwritelog("数据:" + insertList); + //批量插入并切换数据源 + flag = rs.executeBatchSql(String.format("insert into %s (" + sqlTableS + ") values(" + sqlTableE + ") ", tablename), insertList, sqlData); + }catch (Exception exo){ + flag=false; + exo.printStackTrace(); + JAVATools.writelog("插入明细表失败:"+exo.getMessage()); + } + return flag; + } + + //插入表 + public static boolean innserttable(Map mapvalue, String tablename){ + boolean flag=true; + String dttablename=""; + String dttablenvalue=""; + List list=new ArrayList<>(); + JAVATools.SetCmdwritelog("新表插入:","表名"+tablename); + for (Map.Entry entry : mapvalue.entrySet()) + { + String fieldname = Util.null2String(entry.getKey()); + String fieldvalue = Util.null2String(entry.getValue()); + JAVATools.SetCmdwritelog(" key: "+fieldname+" value:"+fieldvalue); + dttablename += dttablename == "" ? fieldname : "," + fieldname; + dttablenvalue += dttablenvalue == "" ? "'"+Lengthmax(fieldvalue.replace("\r\n",""),150)+"'" : ",'"+Lengthmax(fieldvalue.replace("\r\n",""),150)+"'"; + } + String sql = "insert into "+tablename+"("+dttablename+") values("+dttablenvalue+")"; + JAVATools.SetCmdwritelog(" sql: "+sql); + JAVATools.SetCmdwritelog(" sql: "+list.toString()); + try { + RecordSetDataSource rsdM = new RecordSetDataSource("FinanceM"); + flag = rsdM.execute(sql); + }catch (Exception exo){ + flag=false; + exo.printStackTrace(); + new BaseBean().writeLog("插入明细表失败:"+exo.getMessage()); + } + return flag; + } + + public static String Lengthmax(String value,Integer sum){ + if("".equals(value)) return ""; + if(value.length()>sum){ + value=value.substring(0,sum-1); + } + return value; + } + + public static List cityCodeToName(String code){ + RecordSet rs = new RecordSet(); + List resultList = new ArrayList<>(); + if (StringUtils.isBlank(code)){ + return resultList; + } + String[] desInfo = code.split(","); + String ids = Arrays.stream(desInfo).map(s -> "\'" + s +"\'").collect(Collectors.joining(",")); + String sql = "select name from uf_city where code in (" + ids + ") order by instr('" + code + "',code)"; + rs.executeQuery(sql); + while (rs.next()){ + resultList.add(rs.getString("name")); + } + return resultList; + } + + /** + * 获取资金表主表数据 + * @param requestId + * @param mainTableName + * @return + */ + Map getOAMainData(String requestId, String mainTableName) { + RecordSet rs = new RecordSet(); + Map map = new HashMap<>(); + String sqlMain = " select r.id ,r.requestid,r.lcbh,r.requestId,r.szbm,r.bz,r.ngsj,r.ngr ,d.DEPARTMENTNAME,d.DEPARTMENTCODE,s.LASTNAME,s.workcode " + + " from "+mainTableName+" r,hrmdepartment d,hrmresource s where r.szbm = d.id and s.id = r.ngr and REQUESTID = '"+requestId+"'"; + JAVATools.writelog("requestId:"+requestId+" 关联查询查询主表sql:"+sqlMain); + rs.execute(sqlMain); + if(rs.next()){ + String mainId = Util.null2String(rs.getString("id")); + map.put("OAFKZJB_OAID", Util.null2String(rs.getString("lcbh"))); + map.put("OAFKZJB_OABH", WorkFlowNameConvertor.getEN_Lcbh(Util.null2String(rs.getString("lcbh")))); + map.put("OAFKZJB_ZDDW", Util.null2String(rs.getString("DEPARTMENTCODE"))); + map.put("OAFKZJB_DWBH", Util.null2String(rs.getString("DEPARTMENTCODE"))); + map.put("OAFKZJB_FKBMMC",Util.null2String(rs.getString("DEPARTMENTNAME"))); + map.put("OAFKZJB_BZ",Util.null2String(rs.getString("bz"))); + String timeStr = Util.null2String(rs.getString("ngsj")); + timeStr = timeStr + ":00"; + String[] timeStrs = timeStr.split(" "); + String[] dataStrs = timeStrs[0].split("-"); + map.put("OAFKZJB_SQRQ",dataStrs[0]+dataStrs[1]+dataStrs[2]); + map.put("OAFKZJB_SQSJ",timeStrs[1]); + map.put("OAFKZJB_JSZT","0"); + map.put("OAFKZJB_SQR",Util.null2String(rs.getString("LASTNAME"))); + map.put("OAFKZJB_SQRGH",Util.null2String(rs.getString("workcode"))); + String date = sdf.format(new Date()); + String[] newDates = date.split(" "); + map.put("OAFKZJB_BJRQ",newDates[0]); + map.put("OAFKZJB_BJSJ",newDates[1]); + } + return map; + } + + /** + * 获取资金表明细表数据 + * @param requestId + * @param mainTableName + * @param dtTableName + * @return + */ + List> getOADetailData(String requestId, String mainTableName, String dtTableName) { + RecordSet rs = new RecordSet(); + List> insertList = new ArrayList<>(); + String sqlDetail = " select t0.requestid,t1.lastname,d.yxzh,t1.lastname,d.khxmc,d.ss,t1.workcode, d.yxzfje,d.xjzfje,t0.lcbh " + + " from "+dtTableName + " d,"+ mainTableName +" t0,hrmresource t1 where t0.id = d.mainid and d.bxr = t1.id and t0.requestid = '"+requestId+"'"; + JAVATools.writelog("requestId:"+requestId+" 关联查询查询明细表sql:"+sqlDetail); + rs.execute(sqlDetail); + while(rs.next()) { + List list = new ArrayList<>(); + list.add(WorkFlowNameConvertor.getEN_Lcbh(Util.null2String(rs.getString("lcbh")))); + list.add(Util.null2String(rs.getString("lastname"))); + String regEx="[^(0-9)]"; + Pattern p = Pattern.compile(regEx); + Matcher m = p.matcher(Util.null2String(rs.getString("yxzh"))); + list.add(m.replaceAll("").trim()); + list.add(Util.null2String(rs.getString("lastname"))); + list.add(Util.null2String(rs.getString("workcode"))); + list.add(Util.null2String(rs.getString("khxmc"))); + //list.add(Util.null2String(rs.getString("shzxs")));// 省或直辖市 + //list.add(Util.null2String(rs.getString("cs")));// 城市 + String area = Util.null2String(rs.getString("ss")); + List areaArray = cityCodeToName(area); + if (null!=areaArray&&areaArray.size()>0){ + list.add(areaArray.get(0)); + if (areaArray.size()>1){ + list.add(areaArray.get(1)); + }else { + list.add(""); + } + }else { + list.add(""); + list.add(""); + } + BigDecimal b =BigDecimal.valueOf(StringUtils.isEmpty(rs.getString("yxzfje")) ? 0.00 :Double.parseDouble(rs.getString("yxzfje"))); + //b.add(BigDecimal.valueOf(StringUtils.isEmpty(rs.getString("xjzfje")) ? 0.00 :Double.parseDouble(rs.getString("xjzfje")))); //周伟说现金支付不写明细表 + list.add(b.setScale(2, BigDecimal.ROUND_HALF_UP).toString()); + list.add("0"); + //金额为0的情况不写入资金明细表 且 银行账户不为空 + if(b.compareTo(BigDecimal.ZERO)>0&&null!=rs.getString("yxzh")&&org.apache.commons.lang.StringUtils.isNotEmpty(rs.getString("yxzh"))) { + insertList.add(list); + } + } + return insertList; + } + + + + List> getOATYBXDetailData(String requestId, String mainTableName, String dtTableName) { + RecordSet rs = new RecordSet(); + List> insertList = new ArrayList<>(); + String sqlDetail = " select t0.requestid,t1.lastname,d.yxzh,t1.lastname,d.khxmc,d.ss,t1.workcode, "+ + " d.yxzfje,d.xjzfje,t0.lcbh "+ + " from "+dtTableName+" d, "+ mainTableName +" t0,hrmresource t1 where t0.id = d.mainid and d.ygxm = t1.id and t0.requestid = '"+requestId+"'"; + writeLog("requestId:"+requestId+" 关联查询查询明细表sql:"+sqlDetail); + rs.execute(sqlDetail); + while(rs.next()) { + List list = new ArrayList<>(); + list.add(WorkFlowNameConvertor.getEN_Lcbh(Util.null2String(rs.getString("lcbh")))); + list.add(Util.null2String(rs.getString("lastname"))); +// list.add(Util.null2String(rs.getString("yxzh"))); + String regEx="[^(0-9)]"; + Pattern p = Pattern.compile(regEx); + Matcher m = p.matcher(Util.null2String(rs.getString("yxzh"))); + list.add(m.replaceAll("").trim()); + list.add(Util.null2String(rs.getString("lastname"))); + list.add(Util.null2String(rs.getString("workcode"))); + list.add(Util.null2String(rs.getString("khxmc"))); + String area = Util.null2String(rs.getString("ss")); + List areaArray = cityCodeToName(area); + if (null!=areaArray&&areaArray.size()>0){ + list.add(areaArray.get(0)); + if (areaArray.size()>1){ + list.add(areaArray.get(1)); + }else { + list.add(""); + } + }else { + list.add(""); + list.add(""); + } + BigDecimal b =BigDecimal.valueOf(StringUtils.isEmpty(rs.getString("yxzfje")) ? 0.00 :Double.parseDouble(rs.getString("yxzfje"))); + //b.add(BigDecimal.valueOf(StringUtils.isEmpty(rs.getString("xjzfje")) ? 0.00 :Double.parseDouble(rs.getString("xjzfje")))); //周伟说现金支付不写明细表 + list.add(b.setScale(2, BigDecimal.ROUND_HALF_UP).toString()); + list.add("0"); + //金额为0的情况不写入资金明细表 且 银行账户不为空 + if(b.compareTo(BigDecimal.ZERO)>0&&null!=rs.getString("yxzh")&&org.apache.commons.lang.StringUtils.isNotEmpty(rs.getString("yxzh"))) { + insertList.add(list); + } + } + return insertList; + } + + + /** + * 判断是是否是非自付(非自付不写资金表) + * @param requestId + * @param mainTableName + */ + public boolean isFZF (String requestId, String mainTableName) { + RecordSet rs = new RecordSet(); + String querySql = " select t.xj from "+mainTableName+"_dt12 t where t.mainid in ( select id from "+mainTableName+" t where t.requestid = '"+requestId+"' )"; + JAVATools.writelog("requestId:"+requestId+" 查询是否为全部非自付SQL:"+querySql); + BigDecimal totalZFB = new BigDecimal("0.00"); + rs.executeQuery(querySql); + while(rs.next()) { + BigDecimal tempB = (new BigDecimal(StringUtils.isEmpty(rs.getString("xj")) ? 0.00 :Double.parseDouble(rs.getString("xj")))).setScale(2, BigDecimal.ROUND_HALF_UP); + JAVATools.writelog("requestId:"+requestId+" 查询是否为全部非自付小计金额tempB:"+tempB); + totalZFB = (totalZFB.add(tempB).setScale(2, BigDecimal.ROUND_HALF_UP)); + } + JAVATools.writelog("requestId:"+requestId+" 自付费用汇总金额 totalZFB:"+totalZFB); + if(totalZFB.compareTo(BigDecimal.ZERO)==0) { + return true;//没有自付费用 + } + return false; + } +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/SettlePaymentCommand.java b/src/main/java/com/engine/htsc/payment/service/impl/SettlePaymentCommand.java new file mode 100644 index 0000000..5eeb68b --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/SettlePaymentCommand.java @@ -0,0 +1,301 @@ +package com.engine.htsc.payment.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.engine.htsc.payment.enums.BudgetWF; +import com.engine.htsc.payment.pojo.*; +import com.engine.htsc.payment.service.BudgetCommand; +import com.engine.htsc.payment.service.BudgetStrategy; +import com.engine.htsc.payment.service.SettlePaymentFlowService; +import com.engine.htsc.payment.util.BizUtils; +import com.engine.htsc.payment.util.BudgetStrategyFactory; +import com.engine.htsc.payment.util.IpUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.joda.time.DateTime; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.interfaces.htsc.cus.HTUtil; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class SettlePaymentCommand implements BudgetCommand { + private final Log log = LogFactory.getLog(HeadPaymentBudgetCommand.class); + + private final BudgetStrategy bg = BudgetStrategyFactory.getBudgetStrategyForCgscPayment( + BudgetWF.CGSCPAYMENT.getCode()); + SettlePaymentFlowService settlePaymentFlowService = new SettlePaymentFlowServiceImpl(); + @Override + public String submit(String requestNo, String billStatus) throws Exception { + assert bg != null; + BizUtils bizUtils = new BizUtils(); + //1,获取预算信息 + BudgetDTO budgetDTO = bg.buildNewBudgetParamFromWorkflowDB(requestNo, billStatus); + Map stringObjectMap = bizUtils.convertDtoToMap(budgetDTO); + log.info("\n 执行采购商城付款预算 >>> 当前状态submit"); + log.info("\n 调用预算参数(状态:" + billStatus + ") >>> \n " + JSON.toJSONString(stringObjectMap)); + //2,记录日志信息 + WbLog wbLog = new WbLog(); + DateTime today = new DateTime(); + wbLog.setRequestNo(requestNo); + wbLog.setTime(today.toString("yyyy-MM-dd HH:mm:ss")); + wbLog.setUrl(String.format("%s/cwbase/JTGL/BudgetProcess.asmx?wsdl", + Util.null2String(new PropBean().getPropName("budgetIp")))); + wbLog.setMethod("weaver.interfaces.htsc.cus.HTUtil.budgetCommit"); + wbLog.setIp(IpUtils.getHostIp()); + try { + //3,提交预算,调用接口 + String resp = new HTUtil().budgetCommit(stringObjectMap); + log.info("\n 调用预算返回(状态:" + billStatus + ") >>> \n " + resp); + //4,更新预算记录表,UF_YSJLB + bizUtils.refreshBudgetRecord(requestNo, billStatus, JSON.toJSONString(budgetDTO), "0"); + //5,跟新中间表 +// boolean b = bizUtils.updateBudgetMidTable(requestNo, billStatus); + boolean isUpdate = settlePaymentFlowService.doBudgetMiddleTable(requestNo, billStatus); + + log.info("\n 调用预算更新中间表返回 >>> \n " + isUpdate); + wbLog.setResponse(resp); + if ("F1001".equals(resp)) { + wbLog.setResult("预算成功"); + } else { + wbLog.setResult("预算失败,返回值:" + resp); + } + wbLog.setRequest(JSON.toJSONString(stringObjectMap)); + return resp; //F1001 + } catch (Exception e) { + //记录日志 + wbLog.setResponse(""); + wbLog.setResult("预算失败"); + wbLog.setRequest(JSON.toJSONString(stringObjectMap)); + throw new Exception("预算失败"); + } finally { + BizUtils.saveLog(wbLog); + } + } + + @Override + public String reSubmit(String requestNo) throws Exception { + String reject = reject(requestNo); + if ("F1001".equalsIgnoreCase(reject)) { + return submit(requestNo, "3"); //重新预占 + } else { + return reject; + } + } + + @Override + public String reject(String requestNo) throws Exception { + assert bg != null; + BizUtils bizUtils = new BizUtils(); + BudgetDTO lastBudgetDTO = bg.getLastBudgetParamFromModeDB(requestNo, "0"); + if(null!=lastBudgetDTO){ + log.info("\n 从建模表中获取的参数@ \n" + JSON.toJSONString(lastBudgetDTO)); + lastBudgetDTO.setBillStatus("2"); //回退 + Map stringObjectMap = bizUtils.convertDtoToMap(lastBudgetDTO); + log.info("\n 执行总部通用付款预算 >>> 当前状态reject"); + log.info("\n 调用预算参数(回退) >>> \n " + JSON.toJSONString(stringObjectMap)); + //记录日志信息 + WbLog wbLog = new WbLog(); + DateTime today = new DateTime(); + wbLog.setRequestNo(requestNo); + wbLog.setTime(today.toString("yyyy-MM-dd HH:mm:ss")); + wbLog.setUrl(String.format("%s/cwbase/JTGL/BudgetProcess.asmx?wsdl", + Util.null2String(new PropBean().getPropName("budgetIp")))); + wbLog.setMethod("weaver.interfaces.htsc.cus.HTUtil.budgetCommit"); + wbLog.setIp(IpUtils.getHostIp()); + try { + String resp = new HTUtil().budgetCommit(stringObjectMap); + log.info("\n 调用预算返回(回退) >>> \n " + resp); + //4,更新预算记录表,UF_YSJLB] + bizUtils.refreshBudgetRecord(requestNo, "2", JSON.toJSONString(lastBudgetDTO), "0"); + + boolean isUpdate = settlePaymentFlowService.doBudgetMiddleTable(requestNo, "2"); + log.info("\n 调用预算更新中间表返回(回退) >>> \n " + isUpdate); + //记录日志 + wbLog.setResponse(resp); + wbLog.setResult("预算成功"); + wbLog.setRequest(JSON.toJSONString(stringObjectMap)); + return resp; + } catch (Exception e) { + //记录日志 + wbLog.setResponse(""); + wbLog.setResult("预算失败"); + wbLog.setRequest(JSON.toJSONString(stringObjectMap)); + throw new Exception("预算失败"); + } finally { + BizUtils.saveLog(wbLog); + } + }else { + return "F1001"; + } + + } + + @Override + public String finish(String requestNo) throws Exception { + return submit(requestNo, "1"); + } + + + /** + * 取消发票关联 + */ + public void cancelInvLink(String requestId) throws Exception { + RecordSet rs = new RecordSet(); + String tableName = JAVATools.getMaintable(requestId); + String sql = "SELECT ID,NGRGH,LCBH FROM " + tableName + " WHERE REQUESTID = ?"; + rs.executeQuery(sql, requestId); + String ngrgh = ""; + String lcbh = ""; + String mainId = ""; + if (rs.next()) { + ngrgh = Util.null2String(rs.getString("NGRGH")); + lcbh = Util.null2String(rs.getString("LCBH")); + mainId = Util.null2String(rs.getString("ID")); + } + rs.writeLog(String.format(" 取消发票关联, requestid:%s; lcbh:%s, ngrgh:%s", requestId, lcbh, ngrgh)); + if (StringUtils.isNotBlank(ngrgh) && StringUtils.isNotBlank(lcbh)) { + //删除uf表中所关联的发票数据 + String delSql = "delete from UF_PJXXGL where REQUESTID=?"; + boolean b = rs.executeUpdate(delSql, requestId); + rs.writeLog(String.format("删除uf表中所关联的发票数据: boolean:%s", b)); + //调用浪潮发票重置接口 + cancelInvLink4Lang(mainId, tableName + "_dt5", ngrgh, lcbh); + cancelInvLink4Lang(mainId, tableName + "_dt6", ngrgh, lcbh); + if (lcbh.contains("差旅")) { + cancelInvLink4Lang(mainId, tableName + "_dt4", ngrgh, lcbh); + } + } + } + + /** + * cancelInvLink4Lang,重置浪潮发票关联 + */ + private void cancelInvLink4Lang(String mainId, String dtTableName, String ngrgh, String lcbh) { + RecordSet rs = new RecordSet(); + rs.writeLog(String.format("开始重置明细表: %s; mainid:%s", dtTableName, mainId)); + HTUtil ht = new HTUtil(); + String sql = "SELECT WJID,FPHM,FPDM FROM " + dtTableName + " WHERE MAINID = ?"; + rs.executeQuery(sql, mainId); + while (rs.next()) { + Map params = new HashMap<>(); + params.put("UserCode", ngrgh); + params.put("BillID", lcbh); + params.put("FileID", Util.null2String(rs.getString("WJID"))); + params.put("InvoiceNum", Util.null2String(rs.getString("FPHM"))); + params.put("InvoiceCode", Util.null2String(rs.getString("FPDM"))); + String s = ht.resetImageAndBill(params); + rs.writeLog("cancelInvLink4Lang: response:%s", JSONObject.toJSONString(s)); + } + + } + + public CostAccountDto generateCommonReimbData(String requestid, String wftype) { + CostAccountDto costAccDto = new CostAccountDto(); + DepartmentComInfo dc = new DepartmentComInfo(); + RecordSet rs = new RecordSet(); + String tablename = JAVATools.getMaintable(requestid); + rs.executeQuery(" select id,ngr,szbm,lcbh,djzs,ngrq from " + tablename + " where requestid=? ", new Object[]{requestid}); + if (rs.next()) { + try { + String id = Util.null2String(rs.getString("id")); + String ngr = Util.null2String(rs.getString("ngr")); + String szbm = Util.null2String(rs.getString("szbm")); + String lcbh = Util.null2String(rs.getString("lcbh")); + String djzs = Util.null2String(rs.getString("djzs")); + String ngsj = Util.null2String(rs.getString("ngrq")) + ":00"; + + DepartmentComInfo deptComInfo = new DepartmentComInfo(); + String szbmmc = deptComInfo.getDepartmentName(szbm); + String szbmbm = deptComInfo.getDepartmentCode(szbm); + + ResourceComInfo resourceComInfo = new ResourceComInfo(); + String ngrmc = resourceComInfo.getWorkcode(ngr); + + rs.executeQuery(" select requestname from workflow_requestbase where requestid=? ", new Object[]{requestid}); + rs.next(); + String requestname = Util.null2String(rs.getString("requestname")); + + costAccDto.setType(wftype); + costAccDto.setNgrDept(szbmmc); + costAccDto.setNgrDeptCode(szbmbm); + costAccDto.setNgrName(ngrmc); + costAccDto.setRequestMark(lcbh); + costAccDto.setRequestId(lcbh); + costAccDto.setAttachmentNum(djzs); + costAccDto.setLocationName(""); + costAccDto.setTitle(requestname); + costAccDto.setCurrency("RMB"); + costAccDto.setCreateDate(ngsj); + costAccDto.setReimbursementWay(""); + costAccDto.setPayOrderNo(lcbh); + + List kjDetailList = new ArrayList<>(); + String dt12Sql = " select fysjcdbm,JE,SY,HJKM,YSKM from " + tablename + "_dt12 where mainid=? "; + rs.executeQuery(dt12Sql, new Object[]{id}); + while (rs.next()) { + KjDetail kjDetail = new KjDetail(); + BudgetData budgetData = new BudgetData(); //预算科目 + SubjectData subjectData = new SubjectData(); //会计科目 + String fysjcdbm = Util.null2String(rs.getString("fysjcdbm")); //费用承担部门 + String je = Util.null2String(rs.getString("JE")); + String sy = Util.null2String(rs.getString("SY")); + String hjkmmc = Util.null2String(""); + String hjkmbm = Util.null2String(rs.getString("HJKM")); + subjectData.setItemCode(hjkmbm); + subjectData.setItemName(hjkmmc); + String dyyskm = Util.null2String(rs.getString("YSKM")); + String dyysmc = ""; + budgetData.setRelationCode(hjkmbm); + budgetData.setItemCode(dyyskm); + budgetData.setItemName(dyysmc); + kjDetail.setExpenseDeptCode(dc.getDepartmentCode(fysjcdbm)); + kjDetail.setExpenseDept(dc.getDepartmentmark(fysjcdbm)); + kjDetail.setExpenseBadge(""); + kjDetail.setExpensePerson(""); + kjDetail.setSubjectData(subjectData); + kjDetail.setBudgetData(budgetData); + kjDetail.setPriceRMB(je); + kjDetail.setMoney(je); + kjDetail.setProjectCode(""); + kjDetail.setProject(""); + kjDetail.setReason(sy); + kjDetailList.add(kjDetail); + } + costAccDto.setKjDetails(kjDetailList); + + List zfdtList = new ArrayList(); + String dt11Sql = " select yxzfje,xjzfje,khx,yxzh,skdw from " + tablename + "_dt11 where mainid=? "; + rs.executeQuery(dt11Sql, new Object[]{id}); + while (rs.next()) { + String yxzfje = Util.null2String(rs.getString("yxzfje")); + String xjzfje = Util.null2String(rs.getString("xjzfje")); + String khxmc = Util.null2String(rs.getString("khx")); + String yxzh = Util.null2String(rs.getString("yxzh")); + String skdw = Util.null2String(rs.getString("skdw")); + PayDetail payitem = new PayDetail(); + payitem.setPayByBank(yxzfje); + payitem.setPayByCash(xjzfje); + payitem.setBankName(khxmc); + payitem.setBankAccount(yxzh); + payitem.setEmployeeDept(""); + payitem.setEmployeeName(""); + payitem.setPayee(skdw); + zfdtList.add(payitem); + } + costAccDto.setPayDetails(zfdtList); + } catch (Exception e) { + e.printStackTrace(); + } + } + return costAccDto; + } +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/SettlePaymentFlowServiceImpl.java b/src/main/java/com/engine/htsc/payment/service/impl/SettlePaymentFlowServiceImpl.java new file mode 100644 index 0000000..a3cf9ea --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/SettlePaymentFlowServiceImpl.java @@ -0,0 +1,2186 @@ +package com.engine.htsc.payment.service.impl; + +import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.engine.core.impl.Service; +import com.engine.htsc.ReimbursementFlow.model.NewUser; +import com.engine.htsc.branch.approvalChain.tools.ServiceTools; +import com.engine.htsc.branchpayment.enums.OperateMsg; +import com.engine.htsc.branchpayment.pojo.UfCash; +import com.engine.htsc.branchpayment.service.impl.BranchCostDTOFactory; +import com.engine.htsc.branchpayment.utils.BranchBizUtil; +import com.engine.htsc.payment.dao.BudgetDao; +import com.engine.htsc.payment.dao.UfCgsplDao; +import com.engine.htsc.payment.enums.Sequences; +import com.engine.htsc.payment.pojo.*; +import com.engine.htsc.payment.service.SettlePaymentFlowService; +import com.engine.htsc.payment.util.BizUtils; +import com.engine.htsc.payment.util.CoWfUtil; +import com.engine.htsc.payment.util.HttpUtil; +import com.engine.htsc.payment.util.PayUtil; +import com.engine.htsc.subcompany.model.ZgsDept; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.StringUtils; +import weaver.conn.RecordSet; +import weaver.conn.RecordSetDataSource; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.company.DepartmentComInfo; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.interfaces.htsc.cus.HTUtil; +import weaver.interfaces.htsc.payment.SettlePaymentInvoke; +import weaver.soa.workflow.request.*; +import weaver.workflow.request.RequestManager; +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; + +public class SettlePaymentFlowServiceImpl extends Service implements SettlePaymentFlowService { + + private static final String IsNextFlow = "1"; + //办公品,耗材 + private static final String bgphcType = "'C1018681','C1018682'"; + //宣传品 C1018684 + private static final String xcpType = "'C1018684'"; + //电子设备 C1018683 和 IT标准硬件 ITBZYJ + private static final String dzsbType = "'C1018683','ITBZYJ'"; + + protected UfCgsplDao ufCgsplDao = new UfCgsplDao(); + + protected ServiceTools serviceTools = new ServiceTools(); + + private final PropBean pp = new PropBean(); + + private final BudgetDao budgetDao = new BudgetDao(); + + @Override + public List getParam(String requestid) throws Exception { + List result = new ArrayList<>(); + JAVATools.writelog("requestid:"+requestid+" 根据商城费用确认自动创建采购商城结算付款流程开始"); + String ngsj = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")); + String[] tempArr = ngsj.split("-"); + RecordSet rs = new RecordSet(); + PropBean propBean = new PropBean(); + //费用确认流程id + String workflowId = propBean.getPropName("SCFYQR_WORKFLOWID");//46021 + //结算付款流程id + String workflowIdNew = propBean.getPropName("CGSCJSFK_WORKFLOWID");//47021 + + String sql = "select t.WORKFLOWNAME,t.UNNUMBER,abs(t.formid) as formid from workflow_base t where ID=?"; + rs.executeQuery(sql, workflowId); + String oldTbaleName = "formtable_main_"; + if (rs.next()) { + oldTbaleName = oldTbaleName + Util.getIntValues(rs.getString("formid")); + } + String mainSelectSQL = "select * from "+oldTbaleName+" where requestid = '"+requestid+"'"; + JAVATools.writelog("商城费用确认requestid: "+requestid+" 获取费用确认主表内容 "+mainSelectSQL); + rs.execute(mainSelectSQL); + if (rs.next()) { + String mainid = Util.null2String(rs.getString("id"));//主表id + String szbm = Util.null2String(rs.getString("szbm"));//所属部门 + String szjg = Util.null2String(rs.getString("szjg"));//所属机构 + String lxfs = Util.null2String(rs.getString("lxfs"));//联系方式 + String jjyy = Util.null2String(rs.getString("jjyy"));//加急原因 + String tzyddxhz = Util.null2String(rs.getString("tzyddxhz"));//已添加通知阅读对象 + String tzydyy = Util.null2String(rs.getString("tzydyy"));//通知阅读原因 + String qttzyddx = Util.null2String(rs.getString("qttzyddx"));//通知阅读对象 + String tybty = Util.null2String(rs.getString("tybty"));//同意不同意 +// String shfs = Util.null2String(rs.getString("shfs"));//审核方式 + String bz = Util.null2String(rs.getString("bz"));//备注 + String gllc = Util.null2String(rs.getString("requestid"));//关联流程,requestid + String hj = Util.null2String(rs.getString("hj"));//合计 + String jjcd = Util.null2String(rs.getString("jjcd"));//紧急程度 + String fyly = Util.null2String(rs.getString("fyly"));//区分总部还是分支 + String ngr = ""; + String scglysh = Util.null2String(rs.getString("scglysh"));//商城管理员 + String fgscwjlsh = Util.null2String(rs.getString("fgscwjlsh"));//分公司部门负责人 + if("zb".equals(fyly)){ + ngr = scglysh; + } else if("fzjg".equals(fyly)){ + ngr = fgscwjlsh; + } + String dbjg = Util.null2String(rs.getString("bdjg"));//对比结果 + if("".equals(dbjg)){ + dbjg = "0.00"; + } + String ngsj1 = Util.null2String(rs.getString("ngsj"));//商城费用确认拟稿时间 + String[] tempArrngsj1 = ngsj1.split("-"); + String dbyf = tempArrngsj1[1];//对比月份 + + Map mapDt5 = ufCgsplDao.getDt5(mainid,oldTbaleName); + //办公品 C1018681 + Double bgp = 0.0; + if (!"".equals(Util.null2String(mapDt5.get("C1018681")))){ + bgp = Util.getDoubleValue(mapDt5.get("C1018681")); + } + //耗材 C1018682 + Double hc = 0.0; + if (!"".equals(Util.null2String(mapDt5.get("C1018682")))){ + hc = Util.getDoubleValue(mapDt5.get("C1018682")); + } + //办公品,耗材 mtrTypeId=1 + Double bgyphc = bgp + hc; + if (!"".equals(Util.null2String(mapDt5.get("C1018681")))||!"".equals(Util.null2String(mapDt5.get("C1018682")))){ + //获取流程编号 + String requestMark = ""; + requestMark = CoWfUtil.getRequestMarkByUnNumber("cgscjsfk", Sequences.NET_REI_WORKFLOW_SEQ_ZB); + //办公品,耗材 主表 + Map mainMap = new HashMap<>(); + mainMap.put("splb","1"); + mainMap.put("ngsj",ngsj);//拟稿时间 + mainMap.put("fj","");//附件 + mainMap.put("ngr",ngr);//拟稿人 + mainMap.put("szbm",szbm);//所属部门 + mainMap.put("dbjg",dbjg);//对比结果 + mainMap.put("dbyf",dbyf);//对比月份 + if (!"".equals(szjg)){ + mainMap.put("szjg",szjg);//所属机构 + } + mainMap.put("lxfs",lxfs);//联系方式 + mainMap.put("jjyy",jjyy);//加急原因 + mainMap.put("tzyddxhz",tzyddxhz);//已添加通知阅读对象 + mainMap.put("tzydyy",tzydyy);//通知阅读原因 + mainMap.put("qttzyddx",qttzyddx);//通知阅读对象 + mainMap.put("tybty",tybty);//同意不同意 + mainMap.put("djzs","0");//单据张数默认为0 + mainMap.put("sfxfkhtgfp","1");//x先付款后提供发票默认为1 + mainMap.put("bz",bz);//备注 + mainMap.put("gllc",gllc);//关联流程 + mainMap.put("glfyqrlc",gllc);//关联的费用确认流程 + mainMap.put("hjxxjeitxmf",bgyphc.toString());//合计 + mainMap.put("jjcd",jjcd);//紧急程度 + mainMap.put("lcbh",requestMark);//流程编号 + mainMap.put("jszfmx","点我计算"); + mainMap.put("ngrgh",JAVATools.gethrmidtoworkcode(ngr));//拟稿人工号 + mainMap.put("ngrq",ngsj);//拟稿时间 + mainMap.put("fyly",fyly);//区分分支或总部 + if("zb".equals(fyly)){ + mainMap.put("scglysh",scglysh); + } else if("fzjg".equals(fyly)){ + mainMap.put("fgscwjlsh",fgscwjlsh); + } + SettlePayAutoRequestParam param = new SettlePayAutoRequestParam(); + param.setRelateStaffRid(gllc); + param.setCreatorUid(ngr); + param.setWorkflowId(workflowIdNew); + param.setIsNextFlow(IsNextFlow); + String requestName = "采购商城结算付款" + tempArr[0] + "年" + tempArr[1] + "月费用月结-办公用品、耗材"; + param.setRequestName(requestName); + param.setMain(mainMap); + Map>> map = getDt4AndDt11(mainid,oldTbaleName,bgphcType); + List> dt11rows = map.get("dt11"); + List> dt4rows = map.get("dt4"); + List> dt8rows = getDt8(mainid,oldTbaleName,bgphcType); + List> dt9rows = getDt9(mainid,oldTbaleName,bgphcType); + List> dt10rows = getDt10(mainid,oldTbaleName,bgphcType); + List> dt12rows = getDt12(dt8rows); + param.setDt4(dt4rows); + param.setDt8(dt8rows); + param.setDt9(dt9rows); + param.setDt10(dt10rows); + param.setDt11(dt11rows); + param.setDt12(dt12rows); + JAVATools.writelog(String.format("自动触发采购商城结算付款流程, 构造参数:%s", JSONObject.toJSONString(param))); + result.add(param); + } + //宣传品 C1018684 mtrTypeId=2 + Double xcp = 0.0; + if (!"".equals(Util.null2String(mapDt5.get("C1018684")))){ + //获取流程编号 + String requestMark = ""; + requestMark = CoWfUtil.getRequestMarkByUnNumber("cgscjsfk", Sequences.NET_REI_WORKFLOW_SEQ_ZB); + xcp = Util.getDoubleValue(mapDt5.get("C1018684")); + Map mainMap = new HashMap<>(); + mainMap.put("splb","2"); + mainMap.put("ngsj",ngsj);//拟稿时间 + mainMap.put("fj","");//附件 + mainMap.put("ngr",ngr);//拟稿人 + mainMap.put("szbm",szbm);//所属部门 + mainMap.put("dbjg",dbjg);//对比结果 + mainMap.put("dbyf",dbyf);//对比月份 + if (!"".equals(szjg)){ + mainMap.put("szjg",szjg);//所属机构 + } + mainMap.put("lxfs",lxfs);//联系方式 + mainMap.put("jjyy",jjyy);//加急原因 + mainMap.put("tzyddxhz",tzyddxhz);//已添加通知阅读对象 + mainMap.put("tzydyy",tzydyy);//通知阅读原因 + mainMap.put("qttzyddx",qttzyddx);//通知阅读对象 + mainMap.put("tybty",tybty);//同意不同意 + mainMap.put("djzs","0");//单据张数默认为0 + mainMap.put("sfxfkhtgfp","1");//x先付款后提供发票默认为1 + mainMap.put("bz",bz);//备注 + mainMap.put("gllc",gllc);//关联流程 + mainMap.put("glfyqrlc",gllc);//关联的费用确认流程 + mainMap.put("hjxxjeitxmf",xcp.toString());//合计 + mainMap.put("jjcd",jjcd);//紧急程度 + mainMap.put("lcbh",requestMark);//流程编号 + mainMap.put("jszfmx",xcp.toString());//计算(支付明细 + mainMap.put("ngrgh",JAVATools.gethrmidtoworkcode(ngr));//拟稿人工号 + mainMap.put("ngrq",ngsj);//拟稿时间 + mainMap.put("fyly",fyly);//区分分支或总部 + if("zb".equals(fyly)){ + mainMap.put("scglysh",scglysh); + } else if("fzjg".equals(fyly)){ + mainMap.put("fgscwjlsh",fgscwjlsh); + } + SettlePayAutoRequestParam param = new SettlePayAutoRequestParam(); + param.setRelateStaffRid(gllc); + param.setCreatorUid(ngr); + param.setWorkflowId(workflowIdNew); + param.setIsNextFlow(IsNextFlow); + String requestName = "采购商城结算付款" + tempArr[0] + "年" + tempArr[1] + "月费用月结-宣传品"; + param.setRequestName(requestName); + param.setMain(mainMap); + Map>> map = getDt4AndDt11(mainid,oldTbaleName,xcpType); + List> dt11rows = map.get("dt11"); + List> dt4rows = map.get("dt4"); + List> dt8rows = getDt8(mainid,oldTbaleName,xcpType); + List> dt9rows = getDt9(mainid,oldTbaleName,xcpType); + List> dt10rows = getDt10(mainid,oldTbaleName,xcpType); + List> dt12rows = getDt12(dt8rows); + param.setDt4(dt4rows); + param.setDt8(dt8rows); + param.setDt9(dt9rows); + param.setDt10(dt10rows); + param.setDt11(dt11rows); + param.setDt12(dt12rows); + JAVATools.writelog(String.format("自动触发采购商城结算付款流程, 构造参数:%s", JSONObject.toJSONString(param))); + result.add(param); + } + //电子设备 C1018683 mtrTypeId=3 + Double dzsb = 0.0; + if (!"".equals(Util.null2String(mapDt5.get("C1018683")))){ + dzsb = Util.getDoubleValue(mapDt5.get("C1018683")); + } + //IT标准硬件 ITBZYJ mtrTypeId=4 + Double ityj = 0.0; + if (!"".equals(Util.null2String(mapDt5.get("ITBZYJ")))){ + ityj = Util.getDoubleValue(mapDt5.get("ITBZYJ")); + } + Double dzit = dzsb+ityj; + if (!"".equals(Util.null2String(mapDt5.get("C1018683")))||!"".equals(Util.null2String(mapDt5.get("ITBZYJ")))){ + //获取流程编号 + String requestMark = ""; + requestMark = CoWfUtil.getRequestMarkByUnNumber("cgscjsfk", Sequences.NET_REI_WORKFLOW_SEQ_ZB); + Map mainMap = new HashMap<>(); + mainMap.put("splb","3"); + mainMap.put("ngsj",ngsj);//拟稿时间 + mainMap.put("fj","");//附件 + mainMap.put("ngr",ngr);//拟稿人 + mainMap.put("szbm",szbm);//所属部门 + mainMap.put("dbjg",dbjg);//对比结果 + mainMap.put("dbyf",dbyf);//对比月份 + if (!"".equals(szjg)){ + mainMap.put("szjg",szjg);//所属机构 + } + mainMap.put("lxfs",lxfs);//联系方式 + mainMap.put("jjyy",jjyy);//加急原因 + mainMap.put("tzyddxhz",tzyddxhz);//已添加通知阅读对象 + mainMap.put("tzydyy",tzydyy);//通知阅读原因 + mainMap.put("qttzyddx",qttzyddx);//通知阅读对象 + mainMap.put("tybty",tybty);//同意不同意 + mainMap.put("djzs","0");//单据张数默认为0 + mainMap.put("sfxfkhtgfp","1");//x先付款后提供发票默认为1 + mainMap.put("bz",bz);//备注 + mainMap.put("gllc",gllc);//关联流程 + mainMap.put("glfyqrlc",gllc);//关联的费用确认流程 + mainMap.put("hjxxjeitxmf",dzit.toString());//合计 + mainMap.put("jjcd",jjcd);//紧急程度 + mainMap.put("lcbh",requestMark);//流程编号 + mainMap.put("jszfmx",dzit.toString());//计算(支付明细 + mainMap.put("ngrgh",JAVATools.gethrmidtoworkcode(ngr));//拟稿人工号 + mainMap.put("ngrq",ngsj);//拟稿时间 + mainMap.put("fyly",fyly);//区分分支或总部 + if("zb".equals(fyly)){ + mainMap.put("scglysh",scglysh); + } else if("fzjg".equals(fyly)){ + mainMap.put("fgscwjlsh",fgscwjlsh); + } + SettlePayAutoRequestParam param = new SettlePayAutoRequestParam(); + param.setRelateStaffRid(gllc); + param.setCreatorUid(ngr); + param.setWorkflowId(workflowIdNew); + param.setIsNextFlow(IsNextFlow); + String requestName = "采购商城结算付款" + tempArr[0] + "年" + tempArr[1] + "月费用月结-电子设备、IT标准硬件"; + param.setRequestName(requestName); + param.setMain(mainMap); + Map>> map = getDt4AndDt11(mainid,oldTbaleName,dzsbType); + List> dt11rows = map.get("dt11"); + List> dt4rows = map.get("dt4"); + List> dt8rows = getDt8(mainid,oldTbaleName,dzsbType); + List> dt9rows = getDt9(mainid,oldTbaleName,dzsbType); + List> dt10rows = getDt10(mainid,oldTbaleName,dzsbType); + List> dt12rows = getDt12(dt8rows); + param.setDt4(dt4rows); + param.setDt8(dt8rows); + param.setDt9(dt9rows); + param.setDt10(dt10rows); + param.setDt11(dt11rows); + param.setDt12(dt12rows); + JAVATools.writelog(String.format("自动触发采购商城结算付款流程, 构造参数:%s", JSONObject.toJSONString(param))); + result.add(param); + } + } + return result; + } + + private List> getDt12(List> dt8rows) { + PaymentServiceImpl paymentService = new PaymentServiceImpl(); + String accountTreeId = pp.getPropName("accountTreeId"); + //获取进项税 + String jxs = ufCgsplDao.getkjkm("进项税"); + String jxsid = ""; + if (!"".equals(Util.null2String(jxs))){ + jxsid = accountTreeId+"_"+jxs; + } + List> dt12List = new ArrayList<>(); + if (null!=dt8rows&&dt8rows.size()>0){ + for (Map map:dt8rows){ + String hlStr = ufCgsplDao.getHl("0"); + Double hl = Util.getDoubleValue(hlStr); + String yskm = map.get("yskm"); + String yskmid = map.get("yskmid"); + Double jshjje = Util.getDoubleValue(map.get("jshjje")); + Double sj = Util.getDoubleValue(map.get("sj")); + Double bhsje = Util.getDoubleValue(map.get("bhsje")); + String fysjcdbm = map.get("fysjcdbm"); + Double sjrmb = sj*hl; + Double bhsrmb = bhsje*hl; + Double hsrmb = jshjje*hl; + String kjkm = ""; + String kjkmid = ""; + String kjkmValue = paymentService.getAccountCode(yskm); + if (!"".equals(kjkmValue)){ + kjkm = kjkmValue.split("_")[1].split("@")[0]; + kjkmid = kjkmValue.split("@")[0]; + } + if (sj>0){ + Map dt8sj = new LinkedHashMap<>(); + dt8sj.put("fysjcdbm",fysjcdbm); + dt8sj.put("yskm",yskm); + dt8sj.put("je",sj.toString()); + dt8sj.put("sjbz","0"); + dt8sj.put("hl",hlStr); + dt8sj.put("zhrmb",sjrmb.toString()); + dt8sj.put("hjkmid",jxsid); + dt8sj.put("hjkm",jxs); + dt12List.add(dt8sj); + Map dt8 = new LinkedHashMap<>(); + dt8.put("fysjcdbm",fysjcdbm); + dt8.put("yskm",yskm); + dt8.put("je",bhsje.toString()); + dt8.put("sjbz","0"); + dt8.put("hl",hlStr); + dt8.put("zhrmb",bhsrmb.toString()); + dt8.put("hjkmid",kjkmid); + dt8.put("hjkm",kjkm); + dt12List.add(dt8); + }else { + Map dt8 = new LinkedHashMap<>(); + dt8.put("fysjcdbm",fysjcdbm); + dt8.put("yskm",yskm); + dt8.put("je",jshjje.toString()); + dt8.put("sjbz","0"); + dt8.put("hl",hlStr); + dt8.put("zhrmb",hsrmb.toString()); + dt8.put("hjkmid",kjkmid); + dt8.put("hjkm",kjkm); + dt12List.add(dt8); + } + } + } + return dt12List; + } + + @Override + public String createWorkflowMain(List paramList) throws Exception { + String result = ""; + String fyqr = ""; + String jsfk = ""; + for (SettlePayAutoRequestParam param:paramList){ + RequestInfo requestInfo = new RequestInfo(); + requestInfo.setCreatorid(param.getCreatorUid()); + requestInfo.setWorkflowid(param.getWorkflowId()); + requestInfo.setDescription(param.getRequestName()); + requestInfo.setIsNextFlow(param.getIsNextFlow()); + Map main = param.getMain(); + //主表数据 + MainTableInfo mainTableInfo = new MainTableInfo(); + Property[] propertyArray = new Property[main.size()]; + int p = 0; + for (Map.Entry entry : main.entrySet()) { + propertyArray[p] = new Property(); + propertyArray[p].setName(Util.null2String(entry.getKey())); + propertyArray[p].setValue(Util.null2String(entry.getValue())); + p++; + } + mainTableInfo.setProperty(propertyArray); + requestInfo.setMainTableInfo(mainTableInfo); + + //工会主表名 + String tableName = PayUtil.getTableNameByUnNumber("cgscjsfk"); + + //从表字段 + DetailTableInfo detailTableInfo = new DetailTableInfo(); + //表4 + List> dt4 = param.getDt4(); + if (CollectionUtils.isNotEmpty(dt4)) { + DetailTable detailTable4 = addDtRow(dt4); + detailTable4.setId("4"); + detailTable4.setTableDBName(tableName + "_dt4"); + detailTableInfo.addDetailTable(detailTable4); + } + //表8 + List> dt8 = param.getDt8(); + if (CollectionUtils.isNotEmpty(dt8)) { + DetailTable detailTable8= addDtRow(dt8); + detailTable8.setId("8"); + detailTable8.setTableDBName(tableName + "_dt8"); + detailTableInfo.addDetailTable(detailTable8); + } + //表9 + List> dt9 = param.getDt9(); + if (CollectionUtils.isNotEmpty(dt9)) { + DetailTable detailTable9 = addDtRow(dt9); + detailTable9.setId("9"); + detailTable9.setTableDBName(tableName + "_dt9"); + detailTableInfo.addDetailTable(detailTable9); + } + //表10 + List> dt10 = param.getDt10(); + if (CollectionUtils.isNotEmpty(dt10)) { + DetailTable detailTable10 = addDtRow(dt10); + detailTable10.setId("10"); + detailTable10.setTableDBName(tableName + "_dt10"); + detailTableInfo.addDetailTable(detailTable10); + } + //表11 + List> dt11 = param.getDt11(); + if (CollectionUtils.isNotEmpty(dt11)) { + DetailTable detailTable11 = addDtRow(dt11); + detailTable11.setId("11"); + detailTable11.setTableDBName(tableName + "_dt11"); + detailTableInfo.addDetailTable(detailTable11); + } + //表12 + List> dt12 = param.getDt12(); + if (CollectionUtils.isNotEmpty(dt12)) { + DetailTable detailTable12 = addDtRow(dt12); + detailTable12.setId("12"); + detailTable12.setTableDBName(tableName + "_dt12"); + detailTableInfo.addDetailTable(detailTable12); + } + + requestInfo.setDetailTableInfo(detailTableInfo); + RequestService service = new RequestService(); + String requestId = service.createRequest(requestInfo); + if(!requestId.contains("-")){ + //更新uf_ShoppingMalPool + ufCgsplDao.updateShoppingMalPool(main.get("gllc")); + //更新workflow_requestbase + ufCgsplDao.updateRequestbase(requestId,main.get("lcbh")); + result+=result==""?requestId:","+requestId; + //调用审批链 + HashMap reqMap = getSplParam(requestId); + reqMap.put("requestid",requestId); + saveSubCompanySpl(reqMap); + //预占 + RequestInfo requestInfoReq = new RequestInfo(); + RequestManager requestManager = new RequestManager(); + requestManager.setSrc(""); + requestInfoReq.setRequestManager(requestManager); + requestInfoReq.setRequestid(requestId); + SettlePaymentInvoke settlePaymentInvoke = new SettlePaymentInvoke(); + settlePaymentInvoke.setBillStatus("3"); + settlePaymentInvoke.execute(requestInfoReq); + fyqr = main.get("gllc"); + jsfk += jsfk==""?requestId:","+requestId; + } +// //生成requestId后单独插入明细8和明细13的数据 +// boolean flag = batchInsertDetails(requestId, tableName, param); + } + //调用updatepayStatus接口,采购商城订单付款状态同步 + updatepayStatus(fyqr,jsfk,"2"); + return result; + } + + private List> getDt9(String id, String oldTbaleName,String type ) { + RecordSet rs = new RecordSet(); + List> dt9List = new ArrayList<>(); + //获取费用确认明细表3的数据 + String olddt3SelectSQL = "select * from "+oldTbaleName+"_dt3 where mainid = '"+id+"'"; + rs.execute(olddt3SelectSQL); + while (rs.next()){ + if (bgphcType.equals(type)){ + Map dt9 = new LinkedHashMap<>(); + dt9.put("bm",Util.null2String(rs.getString("bm")));//华泰部门编码 + dt9.put("htbmbm",Util.null2String(rs.getString("htbmbm")));//华泰部门编码 + dt9.put("htbmmc",new ZgsDept(Util.null2String(rs.getString("bm"))).getDepName());//华泰部门名称 + dt9.put("bgyp",Util.null2String(rs.getString("bgypfyamount")));//办公用品费用amount + dt9.put("bgypmtrtypeid",Util.null2String(rs.getString("bgypfymtrtypeid")));//办公用品费用mtrTypeId + dt9.put("hcmtrtypeid",Util.null2String(rs.getString("hcfymtrtypeid")));//耗材费用mtrTypeId + dt9.put("hc",Util.null2String(rs.getString("hcfyamount")));//耗材费用amount + Double bgypfyamount = 0.0; + if (!"".equals(Util.null2String(rs.getString("bgypfyamount")))){ + bgypfyamount = Double.parseDouble(Util.null2String(rs.getString("bgypfyamount"))); + } + Double hcfyamount = 0.0; + if (!"".equals(Util.null2String(rs.getString("hcfyamount")))){ + hcfyamount = Double.parseDouble(Util.null2String(rs.getString("hcfyamount"))); + } + Double hjje = 0.0; + if (bgypfyamount>0){ + hjje = hjje+bgypfyamount; + } + if (hcfyamount>0){ + hjje = hjje+hcfyamount; + } + if (hjje>0){ + dt9.put("hjje",hjje.toString());//合计金额 + dt9List.add(dt9); + } + dt9.put("itbzyj","0.0");//IT标准硬件费用amount + dt9.put("xcp","0.0");//宣传品费用amount + dt9.put("dzsb","0.0");//电子设备费用amount + } + if (xcpType.equals(type)){ + Map dt9 = new LinkedHashMap<>(); + dt9.put("bm",Util.null2String(rs.getString("bm")));//华泰部门编码 + dt9.put("htbmbm",Util.null2String(rs.getString("htbmbm")));//华泰部门编码 + dt9.put("htbmmc",new ZgsDept(Util.null2String(rs.getString("bm"))).getDepName());//华泰部门名称 + dt9.put("xcpmtrtypeid",Util.null2String(rs.getString("xcpfymtrtypeid")));//宣传品费用mtrTypeId + dt9.put("xcp",Util.null2String(rs.getString("xcpfyamount")));//宣传品费用amount + if (!"".equals(Util.null2String(rs.getString("xcpfyamount")))){ + Double hjje = Double.parseDouble(Util.null2String(rs.getString("xcpfyamount"))); + if (hjje>0){ + dt9.put("hjje",hjje.toString());//合计金额 + dt9List.add(dt9); + } + } + dt9.put("bgyp","0.0");//办公用品费用amount + dt9.put("itbzyj","0.0");//IT标准硬件费用amount + dt9.put("dzsb","0.0");//电子设备费用amount + dt9.put("hc","0.0");//耗材费用amount + } + if (dzsbType.equals(type)){ + Map dt9 = new LinkedHashMap<>(); + dt9.put("bm",Util.null2String(rs.getString("bm")));//华泰部门编码 + dt9.put("htbmbm",Util.null2String(rs.getString("htbmbm")));//华泰部门编码 + dt9.put("htbmmc",new ZgsDept(Util.null2String(rs.getString("bm"))).getDepName());//华泰部门名称 + dt9.put("dzsbmtrtypeid",Util.null2String(rs.getString("dzsbfymtrtypeid")));//电子设备费用mtrTypeId + dt9.put("dzsb",Util.null2String(rs.getString("dzsbfyamount")));//电子设备费用amount + dt9.put("itbzyjmtrtypeid",Util.null2String(rs.getString("itbzyjfymtrtypeid")));//IT标准硬件费用mtrTypeId + dt9.put("itbzyj",Util.null2String(rs.getString("itbzyjfyamount")));//IT标准硬件费用amount + Double hjje = 0.0; + if (!"".equals(Util.null2String(rs.getString("dzsbfyamount")))){ + Double dzsbfyamount = Double.parseDouble(Util.null2String(rs.getString("dzsbfyamount"))); + if (dzsbfyamount>0){ + hjje = hjje+dzsbfyamount; + } + } + if (!"".equals(Util.null2String(rs.getString("itbzyjfyamount")))){ + Double itbzyjfyamount = Double.parseDouble(Util.null2String(rs.getString("itbzyjfyamount"))); + if (itbzyjfyamount>0){ + hjje = hjje+itbzyjfyamount; + } + } + if (hjje>0){ + dt9.put("hjje",hjje.toString());//合计金额 + dt9List.add(dt9); + } + dt9.put("bgyp","0.0");//办公用品费用amount + dt9.put("hc","0.0");//耗材费用amount + dt9.put("xcp","0.0");//宣传品费用amount + } + } + return dt9List; + } + + private List> getDt10(String id, String oldTbaleName,String type ) { + RecordSet rs = new RecordSet(); + List> dt10List = new ArrayList<>(); + //获取费用确认明细表4的数据 + String olddt4SelectSQL = "select * from "+oldTbaleName+"_dt4 where mainid = '"+id+"' and mtrtypecode in ("+type+")"; + rs.execute(olddt4SelectSQL); + while (rs.next()){ + Map dt10 = new LinkedHashMap<>(); + dt10.put("sqdbh",Util.null2String(rs.getString("billNo")));//申请单编号 sqdbh + dt10.put("spflid",Util.null2String(rs.getString("mtrTypeCode")));//商品分类ID spflid + dt10.put("spflmc",Util.null2String(rs.getString("mtrTypeName")));//商品分类名称 spflmc + dt10.put("spwlid",Util.null2String(rs.getString("mtrValueCode")));//商品物料ID spwlid + dt10.put("spwlmc",Util.null2String(rs.getString("mtrValue")));//商品物料名称 spwlmc + dt10.put("spbm",Util.null2String(rs.getString("chanGoodsId")));//商品编码 spbm + dt10.put("spmc",Util.null2String(rs.getString("cmmdtyName")));//商品名称 spmc + dt10.put("pp",Util.null2String(rs.getString("brandName")));//品牌 pp + dt10.put("xh",Util.null2String(rs.getString("model")));//型号 xh + dt10.put("spdw",Util.null2String(rs.getString("spdw")));//商品单位 spdw + dt10.put("bhsdj",Util.null2String(rs.getString("bhsdj")));//不含税单价 bhsdj + dt10.put("sl",Util.null2String(rs.getString("shuil")));//税率 sl + dt10.put("hsdj",Util.null2String(rs.getString("hsdj")));//含税单价 hsdj + dt10.put("count",Util.null2String(rs.getString("sl")));//数量 count + dt10.put("bhszj",Util.null2String(rs.getString("bhszj")));//不含税总价 bhszj + dt10.put("hszj",Util.null2String(rs.getString("hszj")));//含税总价 hszj + dt10.put("gysbh",Util.null2String(rs.getString("channelCode")));//供应商编号 gysbh + dt10.put("gysmc",Util.null2String(rs.getString("channelName")));//供应商名称 gysmc + dt10.put("xdsj",Util.null2String(rs.getString("effectiveOrderTime")));//下单时间 xdsj + dt10.put("dwbh",Util.null2String(rs.getString("dwbh")));//单位编号 dwbh + dt10.put("dwmc",Util.null2String(rs.getString("dwmc")));//单位名称 dwmc + dt10.put("xdrgh",Util.null2String(rs.getString("empNo")));//下单人工号 xdrgh + dt10.put("xdrxm",Util.null2String(rs.getString("xdrxm")));//下单人姓名 xdrxm + dt10.put("grcgxqh",Util.null2String(rs.getString("grcgxqh")));//个人采购需求号 grcgxqh + dt10.put("grcgxqyggh",Util.null2String(rs.getString("grcgxqyggh")));//个人采购需求员工工号 grcgxqyggh + dt10.put("grcgxqygxm",Util.null2String(rs.getString("grcgxqygxm")));//个人采购需求员工姓名 grcgxqygxm + dt10List.add(dt10); + } + return dt10List; + } + + private List> getDt8(String id, String oldTbaleName,String type) { + RecordSet rs = new RecordSet(); + List> dt8List = new ArrayList<>(); + //获取费用确认明细表4的数据 + String olddt4SelectSQL = "select sum(hszj) as hszj, sum(bhszj) as bhszj, BUDGETITEMCODE, bmcode from "+oldTbaleName+"_dt4 where mainid = '"+id+"' and MTRTYPECODE in ("+type+") group by BUDGETITEMCODE, bmcode"; + rs.execute(olddt4SelectSQL); + while (rs.next()){ + Map dt8 = new LinkedHashMap<>(); + ZgsDept dept = new ZgsDept(Util.null2String(rs.getString("bmcode")),"depCode"); + dt8.put("fysjcdbm",dept.getDepId());//费用承担部门 fysjcdbm + PropBean propBean = new PropBean(); + String kmbmCode = propBean.getPropName("kmbmCode");//46021 + dt8.put("yskm",Util.null2String(rs.getString("BUDGETITEMCODE")));//预算科目 yskmid + dt8.put("yskmid",kmbmCode+Util.null2String(rs.getString("BUDGETITEMCODE")));//预算科目 yskm 加前缀 + String hszjValue = Util.null2String(rs.getString("hszj"));//含税总价 + String bhsjeValue = Util.null2String(rs.getString("bhszj"));//不含税总价 + Double hszj = 0.0; + if (!"".equals(hszjValue)){ + hszj = Double.parseDouble(hszjValue); + } + Double bhsje = hszj; + if (!"".equals(bhsjeValue)){ + bhsje = Double.parseDouble(bhsjeValue); + } + Map getCysParams = new HashMap<>(); + getCysParams.put("deptNum", dept.getDepCode()); + getCysParams.put("deptType", dept.getDepTypeCode()); + getCysParams.put("Bgitem", Util.null2String(rs.getString("mtrTypeCode"))); + BigDecimal cysje = getBigDecimalCys(getCysParams); + //超预算标识 0 未超预算 1 超预算 2未处理数据 + BigDecimal bhsjeBig = new BigDecimal(bhsje); + int cys = getCys(bhsjeBig, cysje); + Double sj = 0.0; + if (hszj>0&&bhsje>0){ + sj = hszj-bhsje; + } + String sl = "0.00"; + if (sj>0&&hszj>0){ + DecimalFormat df=new DecimalFormat("0.00"); + sl = df.format(sj/hszj); + } + dt8.put("bhsje",bhsje.toString());//不含税金额 bhsje + dt8.put("sj",sj.toString());//税金 sj + dt8.put("jshjje",hszj.toString());//价税合计金额 jshjje + + dt8.put("sl",getSl(sl));//税率 sl + dt8.put("cys", String.valueOf(cys));//超预算 cys +// dt8.put("sy",Util.null2String(rs.getString("sy")));//事由 sy + dt8.put("slz",sl);//税率值 slz + dt8.put("fycdbmfzr",dept.getDirectorId());//部门负责人 fycdbmfzr + dt8List.add(dt8); + } + return dt8List; + } + + private String getSl(String slz) { + String sl = "10"; + if("0.06".equals(slz)){ + sl = "0"; + }else if ("0.09".equals(slz)){ + sl = "1"; + }else if ("0.17".equals(slz)){ + sl = "2"; + }else if ("0.16".equals(slz)){ + sl = "3"; + }else if ("0.13".equals(slz)){ + sl = "4"; + }else if ("0.11".equals(slz)){ + sl = "5"; + }else if ("0.10".equals(slz)){ + sl = "6"; + }else if ("0.05".equals(slz)){ + sl = "7"; + }else if ("0.03".equals(slz)){ + sl = "8"; + }else if ("0.01".equals(slz)){ + sl = "9"; + }else if ("0.00".equals(slz)){ + sl = "10"; + } + return sl; + } + + //获取合同信息 + private Map>> getDt4AndDt11(String id, String oldTbaleName,String type) throws Exception { + RecordSet rs = new RecordSet(); + List> dt4List = new ArrayList<>(); + List> dt11List = new ArrayList<>(); + //获取费用确认明细表4的数据 + String olddt5SelectSQL = "select sum(hszj) as hszj, contractCode from "+oldTbaleName+"_dt4 where mainid = "+id+" and mtrtypecode in ( "+type+" ) group by contractCode"; + rs.execute(olddt5SelectSQL); + while (rs.next()){ + String contractCode = Util.null2String(rs.getString("contractCode"));//合同编号 htbh + String hszjStr = Util.null2String(rs.getString("hszj"));//含税合计以合同统计,本次申请金额; + Map dt4 = new LinkedHashMap<>(); + Map htxxMap = ufCgsplDao.getHtxx(contractCode); + ContractRequestParam param = new ContractRequestParam(); + param.setCode(contractCode); + param.setUserCode(htxxMap.get("jbr"));//暂定 + if (!"".equals(contractCode)){ + PaymentServiceImpl paymentServiceImpl = new PaymentServiceImpl(); + ContractInfoVo contractInfoVo = paymentServiceImpl.queryContractPagination(param); + List data = contractInfoVo.getData(); + dt4.put("htbh",contractCode);//合同编号 htbh + dt4.put("bqzfje",hszjStr);//本次申请金额 bqzfje + if (data.size()>0){ + ContractVo contractVo = data.get(0); + Double je = 0.0; + if (!StringUtils.isEmpty(contractVo.getTtl()) && !"0".equals(contractVo.getTtl())){ + je = Double.parseDouble(contractVo.getTtl()); + } + dt4.put("htmc",contractVo.getName());//合同名称 htmc + dt4.put("htze",je.toString());//合同总额 htze + String yfjeRes = paymentServiceImpl.queryContractPaidMoney(contractCode,data.get(0).getName());//调用接口获取已付金额 + Double yfje = 0.0; + if(StringUtils.isNotBlank(yfjeRes)){ + JSONObject yfObject = JSONObject.parseObject(yfjeRes); + String isSuccess = yfObject.getString("isSuccess"); + //已付接口请求失败 + if(isSuccess.equalsIgnoreCase("true")){ + if (!"".equals(yfObject.getString("data"))){ + yfje = Double.parseDouble(yfObject.getString("data")); + } + } + } + dt4.put("yfjebhbq",yfje.toString());//已付金额(不含本期) yfjebhbq + Double wfje = je - yfje; + dt4.put("wfjebhbq",wfje.toString());//未付金额(不含本期) wfjebhbq + dt4.put("bz",getBz(contractVo.getCurrency()));//币种 bz + dt4.put("ckhtxx",contractVo.getProcessCode());//操作,接口获取的流程编号 + //一个合同对应一个收款单位 + if (data.size()>0){ +// List bankFormationList = contractVo.getData(); +// if(null!=bankFormationList&&bankFormationList.size()>0){ +// BankFormation bankFormation = bankFormationList.get(0); + HashMap dt11 = new HashMap<>(); +// dt11.put("khxmc",Util.null2String(bankFormation.getBankName()));//开户行名称 +// dt11.put("ss",bankFormation.getOaPayUrl()); //省市数据暂无 + dt11.put("yxzfje",hszjStr);//银行支付为本次申请金额 + dt11.put("xjzfje","0");//现金支付 + dt11.put("dfkje",hszjStr);//合计金额已付金额 + dt11.put("skdw", Util.null2String(htxxMap.get("skdw")));//收款单位 + //暂定: + dt11.put("yxzh",Util.null2String(htxxMap.get("yxzh")));//银行账户 + dt11.put("khx",Util.null2String(htxxMap.get("khx")));//开户行 + dt11.put("khxmc",Util.null2String(htxxMap.get("khx")));//开户行名称 +// if("".equals(bankFormation.getBankAccount())){ +// dt11.put("yxzh","3705 0161 5552 0000 0726");//银行账户 +// } +// if("".equals(bankFormation.getBankName())){ +// dt11.put("khx","开户行");//银行账户 +// dt11.put("khxmc","开户行名称");//银行账户 +// } +// String ss = ufCgsplDao.getSs(dt11.get("yxzh")); +// if (!"".equals(Util.null2String(ss))){ +// ss = "32,3202"; +// } + dt11.put("ss",htxxMap.get("ss"));//省市 + dt11List.add(dt11); + dt4.put("skdw",Util.null2String(htxxMap.get("skdw"))); + dt4.put("yxzh",dt11.get("yxzh")); + dt4.put("khx",dt11.get("khx")); + dt4.put("ss",dt11.get("ss")); +// } + } + } + dt4List.add(dt4); + } + } + Map>> map = new HashMap<>(); + map.put("dt4",dt4List); + map.put("dt11",dt11List); + return map; + } + + private String getBz(String bzString) { + String bz = null; + if (bzString.contains("港币")){ + bz = "1"; + }else if (bzString.contains("美元")) { + bz = "2"; + }else if (bzString.contains("欧元")) { + bz = "3"; + }else if (bzString.contains("英镑")) { + bz = "4"; + }else if (bzString.contains("日元")) { + bz = "5"; + }else if (bzString.contains("人民币")) { + bz = "0"; + }else if (bzString.contains("新加坡币")) { + bz = "6"; + } + return bz; + } + + public DetailTable addDtRow(List> dt) { + DetailTable dtRows = new DetailTable(); + if (CollectionUtils.isNotEmpty(dt)) { + for (Map map : dt) { + Row row = new Row(); + for (String key : map.keySet()) { + Cell cell = new Cell(); + cell.setName(key); + cell.setValue(map.get(key)); + row.addCell(cell); + } + dtRows.addRow(row); + } + } + return dtRows; + } + + public static boolean getDoubleIsNull(double i){ + boolean flag=true; + if(i<0){ + flag=false; + } + return flag; + } + + //批量插入表单,切换数据源 + public boolean insertList(String sqlTableS,String sqlTableE,List insertList,String tablename){ + boolean flag = true; + try { + RecordSet rs = new RecordSet(); + JAVATools.SetCmdwritelog("新表插入:", "表名" + tablename ); + JAVATools.SetCmdwritelog("sql:" + String.format("insert into %s (" + sqlTableS + ") values(" + sqlTableE + ") ", tablename)); + JAVATools.SetCmdwritelog("数据:" + insertList); + //批量插入并切换数据源 + flag = rs.executeBatchSql(String.format("insert into %s (" + sqlTableS + ") values(" + sqlTableE + ") ", tablename), insertList); + }catch (Exception exo){ + exo.printStackTrace(); + new BaseBean().writeLog("插入明细表失败:"+exo.getMessage()); + } + return flag; + } + + + @Override + public HashMap getSplParam(String requestid) { + HashMap reqMap = new HashMap<>(); + List newDepartList = new ArrayList<>(); + RecordSet rs = new RecordSet(); + String mainTableName = JAVATools.getMaintable(requestid); + String unumbercode = JAVATools.getmainunnumber(requestid); + String fyly = ""; + Double hj = 0.0; + Double hjxxjeitxmf = 0.0; + String mainid = ""; + String ngr = ""; + String mainSelectSQL = "select * from "+mainTableName+" where requestid = '"+requestid+"'"; + rs.execute(mainSelectSQL); + if (rs.next()){ + fyly = Util.null2String(rs.getString("fyly"));//区分总部还是分支 + if (!"".equals(Util.null2String(rs.getString("hj")))) { + hj = Double.parseDouble(Util.null2String(rs.getString("hj"))); + } + if (!"".equals(Util.null2String(rs.getString("hjxxjeitxmf")))) { + hjxxjeitxmf = Double.parseDouble(Util.null2String(rs.getString("hjxxjeitxmf"))); + } + mainid = Util.null2String(rs.getString("id"));//主表id + ngr = Util.null2String(rs.getString("ngr"));//主表id + } + if ("".equals(fyly)){ + NewUser user = new NewUser(ngr); + boolean isSub="010803".equals(user.getWorkCode())&&"ZZ001".equals(user.getDepCode()); + if (isSub){ + fyly = "zb"; + }else { + fyly = "fzjg"; + } + } + reqMap.put("sslc",unumbercode); //所属流程 + reqMap.put("fqbmlx",fyly); //发起部门流程,区分总部还是分支 + //查询初步符合条件的审批链 + List settlePaymentSplList = ufCgsplDao.getUfCgspl(reqMap); + if ("cgscfyqr".equals(unumbercode)){ + //采购商城费用确认 + String sqlDetail = "select * from "+mainTableName+"_dt3 where mainid = '"+mainid+"'"; + rs.execute(sqlDetail); + reqMap.put("zfmxhj",hj.toString()); //支付明细合计 + String cgbm = "";//单项超过10万的部门 + while (rs.next()){ + String bm = Util.null2String(rs.getString("bm"));//部门 + newDepartList.add(new ZgsDept(bm)); + if(!"".equals(Util.null2String(rs.getString("dzje")))) { + Double hjje = Util.getDoubleValue(Util.null2String(rs.getString("dzje"))); + if(hjje>=100000){ + cgbm+=cgbm==""?bm:","+bm; + } + } + } + reqMap.put("cgbm",cgbm); + //获取物资类型 + String typeSql = "select sum(a.bgypfyamount) as bgypfyamount,sum(a.hcfyamount)as hcfyamount ,sum(a.xcpfyamount) as xcpfyamount ,sum(a.dzsbfyamount) as dzsbfyamount,sum(a.itbzyjfyamount) as itbzyjfyamount from "+mainTableName+"_dt3 a where mainid = "+mainid ; + rs.execute(typeSql); + if (rs.next()){ + String bgypValue = Util.null2String(rs.getString("bgypfyamount")); + String hcValue = Util.null2String(rs.getString("hcfyamount")); + String xcpValue = Util.null2String(rs.getString("xcpfyamount")); + String dzsbValue = Util.null2String(rs.getString("dzsbfyamount")); + String itbzyjValue = Util.null2String(rs.getString("itbzyjfyamount")); + if (!"".equals(bgypValue)&&Double.parseDouble(bgypValue)>0){ + reqMap.put("mtrTypeId","1"); //办公品 + reqMap.put("C1018681","C1018681"); + } + if (!"".equals(hcValue)&&Double.parseDouble(hcValue)>0){ + reqMap.put("mtrTypeId","1"); //耗材 + reqMap.put("C1018682","C1018682"); + } + if (!"".equals(itbzyjValue)&&Double.parseDouble(itbzyjValue)>0){ + reqMap.put("mtrTypeId","3"); //IT标准硬件 + reqMap.put("ITBZYJ","ITBZYJ"); + } + if (!"".equals(xcpValue)&&Double.parseDouble(xcpValue)>0){ + reqMap.put("mtrTypeId","2"); //宣传品 + reqMap.put("C1018684","C1018684"); + } + if (!"".equals(dzsbValue)&&Double.parseDouble(dzsbValue)>0){ + reqMap.put("mtrTypeId","3"); //电子设备 + reqMap.put("C1018683","C1018683"); + } + } + }else if ("cgscjsfk".equals(unumbercode)){ + //采购商城结算付款 + String sqlDetail = "select sum(a.bgyp) as bgypsum,sum(a.hc)as hcsum ,sum(a.xcp) as xcpsum ,sum(a.dzsb) as dzsbsum,sum(a.itbzyj) as itbzyjsum from "+mainTableName+"_dt9 a where a.mainid = '"+mainid+"'"; + rs.execute(sqlDetail); + reqMap.put("zfmxhj",hjxxjeitxmf.toString()); //支付明细合计 + if (rs.next()){ + //采购商城结算付款 + String sqltype = "select sum(bgyp) as bgyp,sum(hc) as hc,sum(xcp) as xcp,sum(dzsb) as dzsb,sum(itbzyj) as itbzyj from "+mainTableName+"_dt9 a where mainid = "+mainid; + rs.execute(sqltype); + while (rs.next()){ + String bgypValue = Util.null2String(rs.getString("bgyp")); + String hcValue = Util.null2String(rs.getString("hc")); + String xcpValue = Util.null2String(rs.getString("xcp")); + String dzsbValue = Util.null2String(rs.getString("dzsb")); + String itbzyjValue = Util.null2String(rs.getString("itbzyj")); + if (!"".equals(bgypValue)&&Double.parseDouble(bgypValue)>0){ + reqMap.put("mtrTypeId","1"); //办公品 + reqMap.put("C1018681","C1018681"); + } + if (!"".equals(hcValue)&&Double.parseDouble(hcValue)>0){ + reqMap.put("mtrTypeId","1"); //耗材 + reqMap.put("C1018682","C1018682"); + } + if (!"".equals(itbzyjValue)&&Double.parseDouble(itbzyjValue)>0){ + reqMap.put("mtrTypeId","3"); //IT标准硬件 + reqMap.put("ITBZYJ","ITBZYJ"); + } + if (!"".equals(xcpValue)&&Double.parseDouble(xcpValue)>0){ + reqMap.put("mtrTypeId","2"); //宣传品 + reqMap.put("C1018684","C1018684"); + } + if (!"".equals(dzsbValue)&&Double.parseDouble(dzsbValue)>0){ + reqMap.put("mtrTypeId","3"); //电子设备 + reqMap.put("C1018683","C1018683"); + } + } + //获取部门 + String bmSql = " select bm,count(1) from "+mainTableName+"_dt9 where mainid = "+mainid+" group by bm"; + rs.execute(bmSql); + while (rs.next()){ + String bm = Util.null2String(rs.getString("bm"));//部门 + newDepartList.add(new ZgsDept(bm)); + } + } + } + //条件过滤并赋值 + List settlePaymentSplVOList = convertModelToVO(settlePaymentSplList,reqMap,newDepartList); + //将settlePaymentSplVOList去重相加转换为map + HashMap mapRes = removeDuplicateCommon(settlePaymentSplVOList); + JAVATools.writelog("审批链Id:"+ mapRes.get("id")); + JAVATools.writelog("预算管理员审核:"+ mapRes.get("bmysglysh")); + JAVATools.writelog("营业部负责人审核:"+ mapRes.get("yybfzrsh")); + JAVATools.writelog("部门负责人审核:"+ mapRes.get("wzcggkbmfzr")); + JAVATools.writelog("物资采购对接人员审核:"+ mapRes.get("wzcgdjrysh")); + JAVATools.writelog("财务中心会计审核:"+ mapRes.get("cwzxjl")); + JAVATools.writelog("分公司财务经理审核:"+ mapRes.get("fgscwjlsh")); + JAVATools.writelog("分公司负责人审批:"+ mapRes.get("fgsfzrsh")); + JAVATools.writelog("分管领导审核:"+ mapRes.get("fgldsh")); + JAVATools.writelog("分公司财务经理办结:"+ mapRes.get("fgscwjlbj")); + JAVATools.writelog("总裁审批:"+ mapRes.get("zc")); + JAVATools.writelog("预算管理员终审:"+ mapRes.get("ysglyzs")); + JAVATools.writelog("费用会计审核:"+ mapRes.get("fyhj")); + JAVATools.writelog("财务负责人审核:"+ mapRes.get("cwfzrsp")); + JAVATools.writelog("财务总监审核:"+ mapRes.get("cwzj")); + JAVATools.writelog("出纳:"+ mapRes.get("cn")); + JAVATools.writelog("商城管理员审核:"+ mapRes.get("ysglycs")); + return mapRes; + } + + protected List convertModelToVO(List settlePaymentSplList, HashMap reqMap,List newDepartList) { + List resultList = new ArrayList<>(); + List respUfCgsplList = new ArrayList<>(); + for (UfCgspl ufCgspl:settlePaymentSplList){ + //判断条件 + if(null!=ufCgspl.getTj()&&!"".equals(ufCgspl.getTj())){ + if(!serviceTools.getConitionParams(ufCgspl.getTj(),reqMap)){ + continue; + } + } + respUfCgsplList.add(ufCgspl); + } + for (UfCgspl ufCgspl:respUfCgsplList){ + SettlePaymentSplVO settlePaymentSplVO = getVo(ufCgspl,reqMap,newDepartList); + resultList.add(settlePaymentSplVO); + } + return resultList; + } + + protected HashMap removeDuplicateCommon(List settlePaymentSplVOList) { + HashMap mapRes = new HashMap<>(); + String id = ""; //id + String ysglycs = ""; //商城管理员审核 + String fgscwjlsh = ""; //分公司财务经理审核 + String wzcgdjrysh = ""; //物资采购对接人员审核 + String bmysglysh = ""; //预算管理员审核 + String yybfzrsh = ""; //营业部负责人审核 + String bmfzrsh = ""; //部门负责人审核 + String wzcggkbmfzr = ""; //物资采购归口部门负责人 + String cwzxhj = ""; //财务中心会计审核 + String fyhj = ""; //费用会计审核 + String cwzxjl = ""; //财务中心经理审核 + String cwfzrsp = ""; //财务负责人审核 + String cwzj = ""; //财务总监审核 + String fgsfzrsh = ""; //分公司负责人审批 + String fgldsh = ""; //分管领导审核 + String zc = ""; //总裁审批 + String cn = ""; //出纳 + String ysglyzs = ""; //预算管理员终审,商城管理员办结 + String fgscwjlbj = ""; //分公司财务经理办结 + for (SettlePaymentSplVO vo:settlePaymentSplVOList){ + id = addIds(id, Util.null2String(vo.getId())); + fgscwjlsh = addIds(fgscwjlsh,Util.null2String(vo.getFgscwjlsh())); + wzcgdjrysh = addIds(wzcgdjrysh,Util.null2String(vo.getWzcgdjrysh())); + bmysglysh = addIds(bmysglysh, Util.null2String(vo.getBmysglysh())); + yybfzrsh = addIds(yybfzrsh, Util.null2String(vo.getYybfzrsh())); + bmfzrsh = addIds(bmfzrsh, Util.null2String(vo.getBmfzrsh())); + fgsfzrsh = addIds(fgsfzrsh, Util.null2String(vo.getFgsfzrsh())); + fgldsh = addIds(fgldsh, Util.null2String(vo.getFgldsh())); + ysglyzs = addIds(ysglyzs, Util.null2String(vo.getYsglyzs())); + fyhj = addIds(fyhj, Util.null2String(vo.getFyhj())); + cwfzrsp = addIds(cwfzrsp, Util.null2String(vo.getCwfzrsp())); + cn = addIds(cn, Util.null2String(vo.getCn())); + ysglycs = addIds(ysglycs, Util.null2String(vo.getYsglycs())); + wzcggkbmfzr = addIds(wzcggkbmfzr, Util.null2String(vo.getWzcggkbmfzr())); + wzcgdjrysh = addIds(wzcgdjrysh, Util.null2String(vo.getWzcgdjrysh())); + cwzxhj = addIds(cwzxhj, Util.null2String(vo.getCwzxhj())); + cwzxjl = addIds(cwzxjl, Util.null2String(vo.getCwzxjl())); + cwzj = addIds(cwzj, Util.null2String(vo.getCwzj())); + zc = addIds(zc, Util.null2String(vo.getZc())); + fgscwjlbj = addIds(fgscwjlbj, Util.null2String(vo.getFgscwjlbj())); + } + //分管领导和总裁去重 + fgldsh = distinctById(fgldsh,zc); + String cnrygh = JAVATools.gethrmidtoworkcode(cn); + mapRes.put("id",id); + mapRes.put("bmysglysh",bmysglysh); + mapRes.put("yybfzrsh",yybfzrsh); + mapRes.put("bmfzrsh",bmfzrsh); + mapRes.put("fgsfzrsh",fgsfzrsh); + mapRes.put("fgldsh",fgldsh); + mapRes.put("ysglyzs",ysglyzs); + mapRes.put("fyhj",fyhj); + mapRes.put("cwfzrsp",cwfzrsp); + mapRes.put("cn",cn); + mapRes.put("ysglycs",ysglycs); + mapRes.put("cnrygh",cnrygh); + mapRes.put("fgscwjlsh",fgscwjlsh); + mapRes.put("wzcgdjrysh",wzcgdjrysh); + mapRes.put("wzcggkbmfzr",wzcggkbmfzr); + mapRes.put("cwzxhj",cwzxhj); + mapRes.put("cwzxjl",cwzxjl); + mapRes.put("cwzj",cwzj); + mapRes.put("zc",zc); + mapRes.put("fgscwjlbj",fgscwjlbj); + + return mapRes; + } + + private String distinctById(String param, String base) { + String result = ""; + if (null!=base&&!"".equals(base)){ + List baseArray = Arrays.asList(base.split(",")); + if (null!=param&&!"".equals(param)){ + List paramArray = Arrays.asList(param.split(",")); + for (String str:paramArray){ + if (!baseArray.contains(str)){ + result+=result==""?str:","+str; + } + } + } + }else { + result = param; + } + return result; + } + + @Override + public String saveSubCompanySpl(HashMap reqMap) { + try { + String tableName = JAVATools.getMaintable(reqMap.get("requestid"));//主表名 + String unumbercode = JAVATools.getmainunnumber(reqMap.get("requestid")); + if ("cgscfyqr".equals(unumbercode)){ + //采购商城费用确认 + ufCgsplDao.updateMainFyqr(reqMap,tableName); + }else if ("cgscjsfk".equals(unumbercode)){ + //采购商城结算付款 + ufCgsplDao.updateMainJsfk(reqMap,tableName); + } + } catch (Exception e) { + e.printStackTrace(); + return "FAIL"; + } + return "SUCCESS"; + } + + @Override + public String getSplNgr(String flowType,String orgCode) { + String ngr = ""; + if ("zb".equals(flowType)){ + //总部 为郭逸凡 + String zbkjjl = new PropBean().getPropName("ZBKJJL"); + ngr = JAVATools.gethrmworkcodetoid(zbkjjl); + }else if("fzjg".equals(flowType)){ + RecordSet rs = new RecordSet(); + ZgsDept fzjgDept = new ZgsDept(orgCode,""); + String sql = "select kjjl from uf_fzjgfkgwpp where bm = "+ fzjgDept.getDepId(); + rs.execute(sql); + if (rs.next()){ + ngr = Util.null2String(rs.getString("kjjl")); + } + } + return ngr; + } + + + + private SettlePaymentSplVO getVo(UfCgspl ufCgspl, HashMap reqMap,List newDepartList) { + SettlePaymentSplVO settlePaymentSplVO = new SettlePaymentSplVO(); + settlePaymentSplVO.setId(ufCgspl.getId()); + settlePaymentSplVO.setSslc(ufCgspl.getSslc()); + settlePaymentSplVO.setFqbmlx(ufCgspl.getFqbmlx()); + settlePaymentSplVO.setTj(ufCgspl.getTj()); + + List DepartList = getDepartList(newDepartList); //获取JGLX04,JGLX02营业部其上级部门和非营业部bmid + //获取财务信息 + List fgsDepartList = getfgsDepartList(DepartList); + Map cwMap = ufCgsplDao.getCwMap(DepartList,reqMap.get("fqbmlx")); + settlePaymentSplVO.setBmysglysh(getBmysglysh(Util.null2String(ufCgspl.getBmysglysh()),newDepartList));//部门预算管理员审核 + settlePaymentSplVO.setYybfzrsh(getYybfzrsh(Util.null2String(ufCgspl.getYybfzrsh()),newDepartList));//营业部负责人审核 + settlePaymentSplVO.setBmfzrsh(getBmfzrsh(Util.null2String(ufCgspl.getBmfzrsh()),newDepartList));//部门负责人审核 + settlePaymentSplVO.setFgsfzrsh(getFgsfzrsh(Util.null2String(ufCgspl.getFgsfzrsh()),fgsDepartList));//分公司负责人审核 + settlePaymentSplVO.setFgldsh(getFgldsh(Util.null2String(ufCgspl.getFgldsh()),newDepartList,reqMap.get("cgbm")));//分管领导审核 + settlePaymentSplVO.setYsglyzs(getYsglyzs(Util.null2String(ufCgspl.getYsglyzs()),newDepartList));//预算管理员终审 + settlePaymentSplVO.setFyhj(getNormal(Util.null2String(ufCgspl.getFyhj()),newDepartList));//费用会计 + settlePaymentSplVO.setCwfzrsp(getNormal(Util.null2String(ufCgspl.getCwfzrsp()),newDepartList));//财务负责人审批 + settlePaymentSplVO.setCn(getNormal(Util.null2String(ufCgspl.getCn()),newDepartList));//出纳 + settlePaymentSplVO.setYsglycs(getNormal(Util.null2String(ufCgspl.getYsglycs()),newDepartList));//预算管理员初审 + settlePaymentSplVO.setFgscwjlsh(getfgscwjlsh(Util.null2String(ufCgspl.getFgscwjlsh()),cwMap));//分公司财务经理审核 + settlePaymentSplVO.setWzcgdjrysh(getWzcgdjrysh(Util.null2String(ufCgspl.getWzcgdjrysh()),reqMap));//物资采购对接人员审核 + settlePaymentSplVO.setWzcggkbmfzr(getNormal(Util.null2String(ufCgspl.getWzcggkbmfzr()),newDepartList));//物资采购归口部门负责人 + settlePaymentSplVO.setCwzxhj(getCwzxhj(Util.null2String(ufCgspl.getCwzxhj()),cwMap)); + settlePaymentSplVO.setCwzxjl(getCwzxjl(Util.null2String(ufCgspl.getCwzxjl()),cwMap)); + settlePaymentSplVO.setCwzj(getNormal(Util.null2String(ufCgspl.getCwzj()),newDepartList));//财务总监审核 + settlePaymentSplVO.setZc(getNormal(Util.null2String(ufCgspl.getZc()),newDepartList));//财务总监审核 + settlePaymentSplVO.setCn(getCn(Util.null2String(ufCgspl.getCn()),cwMap));//出纳 + settlePaymentSplVO.setFgscwjlbj(getFgscwjlbj(Util.null2String(ufCgspl.getFgscwjlbj()),cwMap));//分公司财务经理办结 + return settlePaymentSplVO; + } + + private String getFgscwjlbj(String value, Map cwMap) { + String hrmids=""; + if("".equals(value)){ + return hrmids; + } + for (String hrmst:value.split(",") ) { + String hrmid=getHrmType(hrmst); + //不是指定WK_则判断是否为1 + if("".equals(hrmid)){ + if ("1".equals(hrmst)){ + hrmids+=hrmids==""?Util.null2String(cwMap.get("kjjl")):","+Util.null2String(cwMap.get("kjjl")); + } + }else{ + hrmids+=hrmids==""?hrmid:","+hrmid; + } + } + return hrmids ; + } + + private String getCn(String value, Map cwMap) { + String hrmids=""; + if("".equals(value)){ + return hrmids; + } + for (String hrmst:value.split(",") ) { + String hrmid=getHrmType(hrmst); + //不是指定WK_则判断是否为1 + if("".equals(hrmid)){ + if ("1".equals(hrmst)){ + hrmids+=hrmids==""?Util.null2String(cwMap.get("cn")):","+Util.null2String(cwMap.get("cn")); + } + }else{ + hrmids+=hrmids==""?hrmid:","+hrmid; + } + } + return hrmids ; + } + + + private List getfgsDepartList(List departList) { + List list = new ArrayList<>(); + HashSet set = new HashSet<>(departList); + for (String bm : set){ + ZgsDept depart = new ZgsDept(bm); + list.add(depart); + } + return list; + } + + private String getCwzxjl(String value, Map cwMap) { + String hrmids=""; + if("".equals(value)){ + return hrmids; + } + for (String hrmst:value.split(",") ) { + String hrmid=getHrmType(hrmst); + //不是指定WK_则判断是否为1 + if("".equals(hrmid)){ + if ("1".equals(hrmst)){ + hrmids+=hrmids==""?Util.null2String(cwMap.get("kjjl")):","+Util.null2String(cwMap.get("kjjl")); + } + }else{ + hrmids+=hrmids==""?hrmid:","+hrmid; + } + } + return hrmids ; + } + + private String getCwzxhj(String value, Map cwMap) { + String hrmids=""; + if("".equals(value)){ + return hrmids; + } + for (String hrmst:value.split(",") ) { + String hrmid=getHrmType(hrmst); + //不是指定WK_则判断是否为1 + if("".equals(hrmid)){ + if ("1".equals(hrmst)){ + hrmids+=hrmids==""?Util.null2String(cwMap.get("kj")):","+Util.null2String(cwMap.get("kj")); + } + }else{ + hrmids+=hrmids==""?hrmid:","+hrmid; + } + } + return hrmids ; + } + + //获取JGLX04,JGLX02营业部其上级部门和非营业部bmid + private List getDepartList(List newDepartList) { + List deppartList = new ArrayList<>(); + for (ZgsDept Depart:newDepartList){ + if ("JGLX02".equals(Depart.getDepTypeCode())||"JGLX04".equals(Depart.getDepTypeCode())){ + deppartList.add(Depart.getParentDepId()); + }else { + deppartList.add(Depart.getDepId()); + } + } + return deppartList; + } + + private String getWzcgdjrysh(String value, HashMap reqMap) { + String hrmids=""; + if("".equals(value)){ + return hrmids; + } + List hrmidList = new ArrayList<>(); + for (String hrmst:value.split(",") ) { + String hrmid=getHrmType(hrmst); + hrmidList.add(hrmid); + } + if (hrmidList.size()>=3){ + // 办公品 C1018681 + // 耗材 C1018682 + if ("C1018681".equals(Util.null2String(reqMap.get("C1018681")))||"C1018682".equals(Util.null2String(reqMap.get("C1018682")))){ + //陈刚 + hrmids+=hrmids==""?hrmidList.get(0):","+hrmidList.get(0); + } + // 宣传品 C1018684 + if ("C1018684".equals(Util.null2String(reqMap.get("C1018684")))){ + //潘王志 + hrmids+=hrmids==""?hrmidList.get(1):","+hrmidList.get(1); + } + // IT标准硬件 ITBZYJ + // 电子设备 C1018683 + if ("ITBZYJ".equals(Util.null2String(reqMap.get("ITBZYJ")))||"C1018683".equals(Util.null2String(reqMap.get("C1018683")))){ + //肖化铸 + hrmids+=hrmids==""?hrmidList.get(2):","+hrmidList.get(2); + } + }else { + for (String hrmst:value.split(",") ) { + String hrmid=getHrmType(hrmst); + //不是指定WK_则判断是否为1 + if("".equals(hrmid)){ + if ("1".equals(hrmst)){ +// 办公品 C1018681 +// 耗材 C1018682 + if ("C1018681".equals(Util.null2String(reqMap.get("C1018681")))||"C1018682".equals(Util.null2String(reqMap.get("C1018682")))){ + //陈刚 + hrmids+=hrmids==""?JAVATools.gethrmworkcodetoid("001317"):","+JAVATools.gethrmworkcodetoid("001317"); + } +// 宣传品 C1018684 + if ("C1018684".equals(Util.null2String(reqMap.get("C1018684")))){ + //潘王志 + hrmids+=hrmids==""?JAVATools.gethrmworkcodetoid("016298"):","+JAVATools.gethrmworkcodetoid("016298"); + } +// IT标准硬件 ITBZYJ +// 电子设备 C1018683 + if ("ITBZYJ".equals(Util.null2String(reqMap.get("ITBZYJ")))||"C1018683".equals(Util.null2String(reqMap.get("C1018683")))){ + //肖化铸 + hrmids+=hrmids==""?JAVATools.gethrmworkcodetoid("012827"):","+JAVATools.gethrmworkcodetoid("012827"); + } + } + }else{ + hrmids+=hrmids==""?hrmid:","+hrmid; + } + } + } + return hrmids ; + } + + + private String getfgscwjlsh(String value, Map cwMap) { + String hrmids=""; + if("".equals(value)){ + return hrmids; + } + for (String hrmst:value.split(",") ) { + String hrmid=getHrmType(hrmst); + //不是指定WK_则判断是否为1 + if("".equals(hrmid)){ + if ("1".equals(hrmst)){ + hrmids+=hrmids==""?Util.null2String(cwMap.get("kjjl")):","+Util.null2String(cwMap.get("kjjl")); + } + }else{ + hrmids+=hrmids==""?hrmid:","+hrmid; + } + } + return hrmids ; + } + + + //根据type来获取人员 + public String getHrmType(String value){ + if("".equals(value)){ + return ""; + } + if(value.indexOf("WK_")>=0){ + String workcodeS=value.split("WK_")[1]; + String[] codeArray = workcodeS.split("_"); + String workcode = codeArray[0]; + if(codeArray.length>1){ + String deptcode = codeArray[1]; + return ufCgsplDao.getUserIdByCode(workcode,deptcode); + }else{ + return JAVATools.GetWorkcodetoid(workcode); + } + } + return ""; + } + + private String getYsglyzs(String value, List newDepartList) { + if("".equals(value)){ + return ""; + } + if(value.indexOf("WK_")>=0){ + String workcode=value.split("WK_")[1]; + return JAVATools.GetWorkcodetoid(workcode); + } + return ""; + } + + private String getBmysglysh(String value, List newDepartList) { + String hrmids=""; + if("".equals(value)){ + return hrmids; + } + for (String hrmst:value.split(",") ) { + String hrmid=getHrmType(hrmst); + //不是指定WK_则判断是否为1 + if("".equals(hrmid)){ + if ("1".equals(hrmst)){ + String bms = ""; + for (ZgsDept newDepart:newDepartList){ + bms+=bms==""?newDepart.getDepId():","+newDepart.getDepId(); + } + hrmid = ufCgsplDao.getBmysglysh(bms); + hrmids+=hrmids==""?hrmid:","+hrmid; + } + }else{ + hrmids+=hrmids==""?hrmid:","+hrmid; + } + } + return hrmids ; + } + + private String getYybfzrsh(String value, List newDepartList) { + String hrmids=""; + if("".equals(value)){ + return hrmids; + } + for (String hrmst:value.split(",") ) { + String hrmid=getHrmType(hrmst); + //不是指定WK_则判断是否为1 + if("".equals(hrmid)){ + //如果是1的情况下,DEPTDIRECTORS + if ("1".equals(hrmst)){ + for (ZgsDept newDepart:newDepartList){ + if ("JGLX02".equals(newDepart.getDepTypeCode())||"JGLX04".equals(newDepart.getDepTypeCode())){ + hrmids+=hrmids==""?newDepart.getDirectorId():","+newDepart.getDirectorId(); + } + } + } + }else{ + hrmids+=hrmids==""?hrmid:","+hrmid; + } + } + return hrmids ; + } + + private String getBmfzrsh(String value, List newDepartList) { + String hrmids=""; + if("".equals(value)){ + return hrmids; + } + for (String hrmst:value.split(",") ) { + String hrmid=getHrmType(hrmst); + //不是指定WK_则判断是否为1 + if("".equals(hrmid)){ + //如果是1的情况下,DEPTDIRECTORS + if ("1".equals(hrmst)){ + for (ZgsDept newDepart:newDepartList){ + hrmids+=hrmids==""?newDepart.getDirectorId():","+newDepart.getDirectorId(); + } + } + }else{ + hrmids+=hrmids==""?hrmid:","+hrmid; + } + } + return hrmids ; + } + + private String getFgsfzrsh(String value, List newDepartList) { + String hrmids=""; + if("".equals(value)){ + return hrmids; + } + for (String hrmst:value.split(",") ) { + String hrmid=getHrmType(hrmst); + //不是指定WK_则判断是否为1 + if("".equals(hrmid)){ + //如果是1的情况下,DEPTDIRECTORS + if ("1".equals(hrmst)){ + for (ZgsDept ZgsDept:newDepartList){ + hrmids+=hrmids==""?ZgsDept.getDirectorId():","+ZgsDept.getDirectorId(); + } + } + }else{ + hrmids+=hrmids==""?hrmid:","+hrmid; + } + } + return hrmids ; + } + + private String getFgldsh(String value, List newDepartList, String cgbm) { + + List newDepartCgbmList = new ArrayList<>(); + if(!StringUtils.isEmpty(cgbm)){ + List cgbmList = Arrays.asList(cgbm.split(",")); + for(String bm:cgbmList){ + newDepartCgbmList.add(new ZgsDept(bm)); + } + } + String hrmids=""; + if("".equals(value)){ + return hrmids; + } + for (String hrmst:value.split(",") ) { + String hrmid=getHrmType(hrmst); + //不是指定WK_则判断是否为1 + if("".equals(hrmid)){ + //如果是1的情况下,DEPTDIRECTORS + if ("1".equals(hrmst)){ + for (ZgsDept newDepart:newDepartCgbmList){ + if(!"".equals(newDepart.getLeaderId())){ + hrmids+=hrmids==""?newDepart.getLeaderId():","+newDepart.getLeaderId(); + } + } + } + }else{ + hrmids+=hrmids==""?hrmid:","+hrmid; + } + } + return hrmids ; + } + + //数据库直接配置人员类型 + private String getNormal(String value, List newDepartList) { + String hrmids=""; + if("".equals(value)){ + return hrmids; + } + for (String hrmst:value.split(",") ) { + String hrmid=getHrmType(hrmst); + hrmids+=hrmids==""?hrmid:","+hrmid; + } + return hrmids; + } + public String addIds(String ids,String value){ + if(value==null||"".equals(value)){ + List idArray = new ArrayList(Arrays.asList(ids.split(","))); + HashSet idSet = new HashSet(idArray); + ids = String.join(",", idSet); + return ids; + } + if(ids==null||"".equals(ids)){ + List valueArray = new ArrayList(Arrays.asList(value.split(","))); + HashSet valueSet = new HashSet(valueArray); + value = String.join(",", valueSet); + return value; + } + List idArray = new ArrayList(Arrays.asList(ids.split(","))); + List valueArray = new ArrayList(Arrays.asList(value.split(","))); + idArray.addAll(valueArray); + HashSet idSet = new HashSet(idArray); + String str = String.join(",", idSet); + return str; + } + + private BigDecimal getBigDecimalCys(Map getCysParams) { + HTUtil htUtil = new HTUtil(); + //默认返回为null + BigDecimal cysje = null; + String cysRes = htUtil.getBudget(getCysParams); + JSONObject budgetObject = null; + if (StringUtils.isNotBlank(cysRes)) { + budgetObject = JSONObject.parseObject(cysRes); + } + if (budgetObject != null) { + JSONObject levelObject = null; + if (budgetObject.getJSONObject("BudgetData") != null) { + levelObject = budgetObject.getJSONObject("BudgetData").getJSONObject("Level"); + } + if (levelObject != null && StringUtils.isNotBlank(levelObject.getString("FBgbanlance"))) { + try { + cysje = new BigDecimal(levelObject.getString("FBgbanlance")); + } catch (Exception e) { + JAVATools.writelog("FBgbanlance can not convert to number. FBgbanlance:"+levelObject.getString("FBgbanlance")); + } + } + } + return cysje; + } + + private int getCys(BigDecimal bhsje, BigDecimal cysje) { + int cys; + //超预算接口返回空返回为维护 + if (cysje==null) { + return 2; + } + int cysFlag = bhsje.compareTo(cysje); + //小于等于预算金额,则不超预算 + if (cysFlag <= 0) { + cys = 0; + } else { + cys = 1; + } + return cys; + } + + @Override + public boolean doBudgetMiddleTable(String requestNo, String billStatus) { + JAVATools.writelog("采购商城付款流程,预算中间表更新\n @requestNo=" + requestNo + ",billStatus=" + billStatus ); + RecordSet rs = new RecordSet(); + try { + String tableName = JAVATools.getMaintable(requestNo); + String sql = "select LCBH,FKLX from " + tableName + " where REQUESTID=" + requestNo; + rs.executeQuery(sql); + String bz = "0"; + String lx = ""; + String title = ""; + if (rs.next()) { + lx = rs.getString("FKLX"); + title = rs.getString("LCBH"); + } + String yskmTable = tableName + "_DT8"; +// return bds.doBudgetMiddleTable(title, billStatus,null, yskmTable, tableName, isItFlag); + //预算中间表外部数据源 + String budgetTableName = pp.getPropName("BudgetTableName"); + String nameIsExist = budgetDao.fNameIsExist(budgetTableName, title); + JAVATools.writelog("预算数据是否存在sql @" + nameIsExist + "@"); + RecordSetDataSource rsd = new RecordSetDataSource("BudgetRecords"); + rsd.execute(nameIsExist); + if (rsd.next() && org.apache.commons.lang3.StringUtils.isNotBlank(title)) { + String deleteAll = String.format("delete from %s where FNAME='%s'", + budgetTableName, title); + rsd.executeUpdateWithDatasource(deleteAll, "BudgetRecords"); + insertBudgetMiddleTable(title, billStatus, yskmTable, tableName); + } else { + insertBudgetMiddleTable(title, billStatus, yskmTable, tableName); + } + return true; + } catch (Exception e) { + JAVATools.writelog("\n 更新预算中间表出现异常 \n"); + JAVATools.writelog("catch: " + e.getMessage()); + e.printStackTrace(); + return false; + } + } + + @Override + public boolean insertBudgetMiddleTable(String requestMark, String billStatus,String yskmTable,String mainTable) throws Exception { + Map budgetBody = getBudgetBody(requestMark, mainTable, yskmTable); + List mainInfo = (List) budgetBody.get("main"); //主表数据 + List> dtInfo = (List>) budgetBody.get("dt"); //预算数据 + if (dtInfo.size() == 0) { + JAVATools.writelog("插入预算表中止,因为科目信息为空"); + return false; + } + DateTimeFormatter dfOnlyYear = DateTimeFormatter.ofPattern("yyyy"); //年 + DateTimeFormatter dfDateTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); //当前操作时间 + try { + String budgetTableName = new PropBean().getPropName("BudgetTableName"); + for (List singleValue : dtInfo) { + List insertValues = new ArrayList<>(); + insertValues.add(billStatus);//FBILLSTATUS + insertValues.addAll(mainInfo);//FNAME,FBILLTITLE,FPESONNAME + insertValues.add(dfOnlyYear.format(LocalDateTime.now()));//YSND + insertValues.add(dfDateTime.format(LocalDateTime.now()));//FBIZDATE + insertValues.addAll(singleValue); + String insert = budgetDao.insertMiddleTable(budgetTableName); + RecordSet recordSet = new RecordSet(); + recordSet.executeUpdateWithDatasource(insert, "BudgetRecords", insertValues); + } + return true; + } catch (Exception e) { + JAVATools.writelog("insertBudgetMiddleTable异常, [" + e + "]"); + return false; + } + } + + /** + * 获取插入表中的数据 + * + * @param requestMark 流程编号 + * @return map + */ + private Map getBudgetBody(String requestMark, String main, String budgetKmTable) throws Exception { + Map res = new HashMap<>(); + JAVATools.writelog("差旅报销流程表名: @" + main + "@"); + JAVATools.writelog("差旅报销预算表名: @" + budgetKmTable + "@"); + RecordSet rs = new RecordSet(); + String mainInfo = budgetDao.mainInfo(main, requestMark); + rs.executeQuery(mainInfo); + List mainValues = new ArrayList<>(); + String mainId = ""; //主副表关联id + if (rs.next()) { + mainValues.add(requestMark);//FNAME 流程编码 + mainValues.add(Util.null2String(rs.getString("REQUESTNAME"))); //流程名 FBILLTITLE + mainValues.add(Util.null2String(rs.getString("LASTNAME"))); //拟稿人名称 FPESONNAME + mainId = Util.null2String(rs.getString("ID")); + } + JAVATools.writelog("主表数据: @" + mainValues + "@"); + res.put("main", mainValues); + String budgetKmTableInfo = "select fysjcdbm,yskmid,bhsje,sj,jshjje,sl,cys,slz,fycdbmfzr,yskm from "+budgetKmTable+" where mainid = "+mainId; + DepartmentComInfo dc = new DepartmentComInfo(); + rs.execute(budgetKmTableInfo); + List> allDtValues = new ArrayList<>(); //所有明细科目数据 add dtValues 单行明细科目数据 + while (rs.next()) { + String yskm = Util.null2String(rs.getString("YSKM")); //科目 + String fycdbmfzr = Util.null2String(rs.getString("fycdbmfzr")); //费用承担部门负责人 + String fysjcdbm = Util.null2String(rs.getString("fysjcdbm")); //费用承担部门 + String JSHJJE = Util.null2String(rs.getString("jshjje"));//价税合计金额 + String BHSJE = Util.null2String(rs.getString("bhsje"));//不含税金额 + String SJ = Util.null2String(rs.getString("sj"));//税金 + String CYS = Util.null2String(rs.getString("CYS"));//超预算 + String sl = Util.null2String(rs.getString("sl"));//税率 + List dtValues = new ArrayList<>(); //单行明细科目数据 + dtValues.add(yskm);//FITEMDETAILNUM + dtValues.add(PayUtil.superBudgetSubject(yskm)); //一级预算科目 FCOSTITEMNUM + if ("".equals(JSHJJE)) { + dtValues.add(0.00); // 价税合计金额 FSJAMOUNT + } else { + dtValues.add(Double.parseDouble(JSHJJE)); // 价税合计金额 FSJAMOUNT + } + if ("".equals(BHSJE)) { + dtValues.add(0.00); // 未税金额 FNOTAXAMOUNT + } else { + dtValues.add(Double.parseDouble(BHSJE)); // 未税金额 FNOTAXAMOUNT + } + if ("".equals(SJ)) { + dtValues.add(0.00); //FTAXAMOUNT + } else { + dtValues.add(Double.parseDouble(SJ)); //税金 FTAXAMOUNT + } + dtValues.add(0.00); // 实际报销金额 FACTUALAMOUNT + dtValues.add(0.00); // 差旅标准金额 FSTANDARDAMOUNT + dtValues.add(PayUtil.overWeight(CYS)); // 是否超标 FOVERWEIGHT + dtValues.add("否");//ISITITEM + dtValues.add(""); // it项目编码 ITITEMCODE + dtValues.add(""); // it项目名称 ITITEMNAME + dtValues.add(dc.getDepartmentCode(fysjcdbm));//FDEPTNUMBER 取明细实际费用承担部门 + allDtValues.add(dtValues); + } + JAVATools.writelog("预算表数据" + budgetKmTable + " @" + allDtValues + "@"); + res.put("dt", allDtValues); + return res; + } + + @Override + public JSONObject getSettlePaymentSplWeb(HashMap reqMap) { + String unnumbercode = reqMap.get("unnumbercode").toString();//cgscfyqr,采购商城费用确认,cgscjsfk 采购商城结算付款 + String fyly = Util.null2String(reqMap.get("fyly")); +// String zfmxhj = Util.null2String(reqMap.get("zfmxhj")); + String bmValue = Util.null2String(reqMap.get("bm")); + String splb = Util.null2String(reqMap.get("splb")); + List bmIdList = Arrays.asList(bmValue.split(",")); + List newDepartList = new ArrayList<>(); + if(null!=bmIdList&&bmIdList.size()>0){ + for(String id:bmIdList){ + newDepartList.add(new ZgsDept(id)); + } + } + HashMap mapDao = new HashMap<>(); + mapDao.put("sslc",unnumbercode); //类型 + mapDao.put("fqbmlx",fyly); //发起部门流程,区分总部还是分支 + List settlePaymentSplList = ufCgsplDao.getUfCgspl(mapDao); + reqMap.put("fqbmlx",fyly); + reqMap.put("sslc",unnumbercode); //类型 + if ("1".equals(splb)){ + reqMap.put("mtrTypeId","1"); //办公品 + reqMap.put("C1018681","C1018681"); + reqMap.put("C1018682","C1018682");//耗材 + } + if ("3".equals(splb)){ + reqMap.put("mtrTypeId","3"); //IT标准硬件 + reqMap.put("ITBZYJ","ITBZYJ"); + reqMap.put("C1018683","C1018683");//电子设备 + } + if ("2".equals(splb)){ + reqMap.put("mtrTypeId","2"); //宣传品 + reqMap.put("C1018684","C1018684"); + } + //条件过滤并赋值 + List settlePaymentSplVOList = convertModelToVO(settlePaymentSplList,reqMap,newDepartList); + //将settlePaymentSplVOList去重相加转换为map + HashMap mapRes = removeDuplicateCommon(settlePaymentSplVOList); + JAVATools.writelog("审批链Id:"+ mapRes.get("id")); + JAVATools.writelog("预算管理员审核:"+ mapRes.get("bmysglysh")); + JAVATools.writelog("营业部负责人审核:"+ mapRes.get("yybfzrsh")); + JAVATools.writelog("部门负责人审核:"+ mapRes.get("wzcggkbmfzr")); + JAVATools.writelog("物资采购对接人员审核:"+ mapRes.get("wzcgdjrysh")); + JAVATools.writelog("财务中心会计审核:"+ mapRes.get("cwzxjl")); + JAVATools.writelog("分公司财务经理审核:"+ mapRes.get("fgscwjlsh")); + JAVATools.writelog("分公司负责人审批:"+ mapRes.get("fgsfzrsh")); + JAVATools.writelog("分管领导审核:"+ mapRes.get("fgldsh")); + JAVATools.writelog("分公司财务经理办结:"+ mapRes.get("fgscwjlbj")); + JAVATools.writelog("总裁审批:"+ mapRes.get("zc")); + JAVATools.writelog("预算管理员终审:"+ mapRes.get("ysglyzs")); + JAVATools.writelog("费用会计审核:"+ mapRes.get("fyhj")); + JAVATools.writelog("财务负责人审核:"+ mapRes.get("cwfzrsp")); + JAVATools.writelog("财务总监审核:"+ mapRes.get("cwzj")); + JAVATools.writelog("出纳:"+ mapRes.get("cn")); + JAVATools.writelog("商城管理员审核:"+ mapRes.get("ysglycs")); + JSONObject jsonObject = (JSONObject) JSONObject.toJSON(mapRes); + return jsonObject; + } + + + @Override + public Map doBudgetByBatchIdZb(String ids, String isDiscard) throws Exception { + Assert.notBlank(ids, "同步预算数据id为空"); + Assert.notBlank(isDiscard, "同步预算状态为空"); + + RecordSet rs = new RecordSet(); + rs.writeLog(String.format("同步预算数据,ids: %s; discard:%s, (-1为废弃)", ids, isDiscard)); + + BranchBizUtil biz = new BranchBizUtil(); + List ufCashList = getUfCashList(ids, "UF_ZBFK"); + + Map resp = new HashMap<>(); + for (UfCash uf : ufCashList) { + SettlePaymentCommand command = new SettlePaymentCommand(); + try { + String finish = ""; + if ("1".equals(isDiscard)) { + finish = Objects.requireNonNull(command).finish(uf.getRid()); + resp.put(uf.getrMark(), OperateMsg.BUDGET_SUCCESS.getMsg("返回值:" + finish)); + } else if ("-1".equals(isDiscard)) { + finish = Objects.requireNonNull(command).reject(uf.getRid()); + resp.put(uf.getrMark(), OperateMsg.BUDGET_CANCEL_SUCCESS.getMsg("返回值:" + finish)); + //废弃后更新发票关联关系: uf_pjxxgl 浪潮 + BizUtils bizUtils = new BizUtils(); + bizUtils.cancelInvLink(uf.getRid()); + } + //更新预算状态 + if ("F1001".equalsIgnoreCase(finish)) { + biz.updateBudgetStatus(uf.getId(), isDiscard, "UF_ZBFK"); + } + } catch (Exception e) { + rs.writeLog(e); + resp.put(uf.getrMark(), OperateMsg.BUDGET_FAIL.getMsg("异常消息:" + e.getMessage())); + } + + } + return resp; + } + + + + @Override + public Map doAccountByBatchIdZb(String ids) throws Exception { + Assert.notBlank(ids, "同步核算id为空"); + + RecordSet rs = new RecordSet(); + HTUtil ht = new HTUtil(); + rs.writeLog(String.format("同步核算数据ids:%s", ids)); + + BranchBizUtil biz = new BranchBizUtil(); + List ufCashList = biz.getUfCashList(ids, "UF_ZBFK"); + + Map resp = new HashMap<>(); + for (UfCash uf : ufCashList) { + try { + CostAccountDto costAccountDto = BranchCostDTOFactory.getSettlePaymentCostDTO(uf.getRid(), uf.getType()); + String costAccountDtoJsonStr = JSON.toJSONString(costAccountDto); + @SuppressWarnings("unchecked") + Map costDtoMap = JSONObject.parseObject(costAccountDtoJsonStr); + rs.writeLog(String.format("核算入参,%s", costDtoMap)); + String response = ht.saveFydj(costDtoMap); + if ("success".equalsIgnoreCase(response)) { + resp.put(uf.getrMark(), OperateMsg.ACCOUNTING_SUCCESS.getMsg()); + //更新核算状态 + biz.updateCostStatus(uf.getId(), uf.getRid(), "UF_ZBFK"); + } else { + resp.put(uf.getrMark(), OperateMsg.ACCOUNTING_FAIL.getMsg("返回值:" + response)); + } + } catch (Exception e) { + rs.writeLog(e); + resp.put(uf.getrMark(), OperateMsg.ACCOUNTING_FAIL.getMsg("异常消息:" + e.getMessage())); + } + } + return resp; + } + + + @Override + public Map doBudgetByBatchIdFzjg(String ids, String isDiscard) throws Exception { + Assert.notBlank(ids, "同步预算数据id为空"); + Assert.notBlank(isDiscard, "同步预算状态为空"); + + RecordSet rs = new RecordSet(); + rs.writeLog(String.format("同步预算数据,ids: %s; discard:%s, (-1为废弃)", ids, isDiscard)); + + BranchBizUtil biz = new BranchBizUtil(); + List ufCashList = getUfCashList(ids, "UF_FZJGFK"); + + Map resp = new HashMap<>(); + for (UfCash uf : ufCashList) { + SettlePaymentCommand command = new SettlePaymentCommand(); + try { + String finish = ""; + if ("1".equals(isDiscard)) { + finish = Objects.requireNonNull(command).finish(uf.getRid()); + resp.put(uf.getrMark(), OperateMsg.BUDGET_SUCCESS.getMsg("返回值:" + finish)); + } else if ("-1".equals(isDiscard)) { + finish = Objects.requireNonNull(command).reject(uf.getRid()); + resp.put(uf.getrMark(), OperateMsg.BUDGET_CANCEL_SUCCESS.getMsg("返回值:" + finish)); + //废弃后更新发票关联关系: uf_pjxxgl 浪潮 + command.cancelInvLink(uf.getRid()); + } + //更新预算状态 + if ("F1001".equalsIgnoreCase(finish)) { + biz.updateBudgetStatus(uf.getId(), isDiscard, "UF_FZJGFK"); + } + } catch (Exception e) { + rs.writeLog(e); + resp.put(uf.getrMark(), OperateMsg.BUDGET_FAIL.getMsg("异常消息:" + e.getMessage())); + } + + } + return resp; + } + + @Override + public Map doPaymentByBatchIdZb(String ids) throws Exception { + Assert.notBlank(ids, "同步预算数据id为空"); + + RecordSet rs = new RecordSet(); + rs.writeLog(String.format("同步付款数据, ids: %s", ids)); + + BranchBizUtil biz = new BranchBizUtil(); + HTUtil ht = new HTUtil(); + List ufCashList = biz.getUfCashList(ids, "UF_ZBFK"); + + Map resp = new HashMap<>(); + for (UfCash cash : ufCashList) { + //预算 + SettlePaymentCommand command = new SettlePaymentCommand(); + try { + String finish = Objects.requireNonNull(command).finish(cash.getRid()); + + resp.put(cash.getrMark(), OperateMsg.BUDGET_SUCCESS.getMsg("返回值:" + finish)); + //更新预算状态 + if ("F1001".equalsIgnoreCase(finish)) { + biz.updateBudgetStatus(cash.getId(), "1", "UF_ZBFK"); + } + } catch (Exception e) { + rs.writeLog(e); + resp.put(cash.getrMark(), String.join(",", + OperateMsg.BUDGET_FAIL.getMsg("异常消息:" + e.getMessage()), + OperateMsg.PAY_FAIL.getMsg())); + throw new Exception("预算执行失败,抛出异常:" + e.getMessage()); + } + + //核算 + try { + CostAccountDto costAccountDto = BranchCostDTOFactory.getCostDTOByType(cash.getRid(), cash.getType()); + String costAccountDtoJsonStr = JSON.toJSONString(costAccountDto); + @SuppressWarnings("unchecked") + Map costDtoMap = JSONObject.parseObject(costAccountDtoJsonStr); + rs.writeLog(String.format("核算入参,%s", costDtoMap)); + String response = ht.saveFydj(costDtoMap); + if ("success".equalsIgnoreCase(response)) { + resp.put(cash.getrMark(), OperateMsg.PAY_SUCCESS.getMsg()); + //更新核算状态 + biz.updateCostStatus(cash.getId(), cash.getRid(), "UF_ZBFK"); + //更新uf_ShoppingMalPool + String gllc = ufCgsplDao.getfkqr(cash.getRid()); + Boolean flag = getUpdatePoolFlag(gllc,cash.getRid()); + if(flag){ + ufCgsplDao.updateShoppingMalPoolEnd(gllc); + } + } else { + resp.put(cash.getrMark(), String.join(",", OperateMsg.BUDGET_SUCCESS.getMsg(), + OperateMsg.ACCOUNTING_FAIL.getMsg("返回值:" + response), + OperateMsg.PAY_FAIL.getMsg())); + } + } catch (Exception e) { + rs.writeLog(e); + resp.put(cash.getrMark(), String.join(",", OperateMsg.BUDGET_SUCCESS.getMsg(), + OperateMsg.ACCOUNTING_FAIL.getMsg("异常消息:" + e.getMessage()), + OperateMsg.PAY_FAIL.getMsg())); + } + + } + + return resp; + } + + public Boolean getUpdatePoolFlag(String gllc, String requestid) { + Boolean flag = true; + String mainTable = JAVATools.getMaintable(requestid); + RecordSet rs = new RecordSet(); + List ids = new ArrayList(); + String sql = "select requestid from " + mainTable + " where glfyqrlc = '"+gllc+"'"; + rs.execute(sql); + while (rs.next()) { + ids.add(Util.null2String(rs.getString("requestid"))); + } + String idJoin = String.join("','", ids); + String sqlFk = "select tbdlcyszt,tbdlczt,fkzt from UF_ZBFK where REQUTID in ('"+idJoin+"')"; + rs.execute(sqlFk); + while (rs.next()) { + if("1".equals(rs.getString("fkzt"))){ + flag = false; + } + } + return flag; + } + + @Override + public Map doPaymentByBatchIdFzjg(String ids) throws Exception { + Assert.notBlank(ids, "同步预算数据id为空"); + + RecordSet rs = new RecordSet(); + rs.writeLog(String.format("同步付款数据, ids: %s", ids)); + + BranchBizUtil biz = new BranchBizUtil(); + HTUtil ht = new HTUtil(); + List ufCashList = biz.getUfCashList(ids, "UF_FZJGFK"); + + Map resp = new HashMap<>(); + for (UfCash cash : ufCashList) { + //预算 + SettlePaymentCommand command = new SettlePaymentCommand(); + try { + String finish = Objects.requireNonNull(command).finish(cash.getRid()); + + resp.put(cash.getrMark(), OperateMsg.BUDGET_SUCCESS.getMsg("返回值:" + finish)); + //更新预算状态 + if ("F1001".equalsIgnoreCase(finish)) { + biz.updateBudgetStatus(cash.getId(), "1", "UF_ZBFK"); + } + } catch (Exception e) { + rs.writeLog(e); + resp.put(cash.getrMark(), String.join(",", + OperateMsg.BUDGET_FAIL.getMsg("异常消息:" + e.getMessage()), + OperateMsg.PAY_FAIL.getMsg())); + throw new Exception("预算执行失败,抛出异常:" + e.getMessage()); + } + + //核算 + try { + CostAccountDto costAccountDto = BranchCostDTOFactory.getCostDTOByType(cash.getRid(), cash.getType()); + String costAccountDtoJsonStr = JSON.toJSONString(costAccountDto); + @SuppressWarnings("unchecked") + Map costDtoMap = JSONObject.parseObject(costAccountDtoJsonStr); + rs.writeLog(String.format("核算入参,%s", costDtoMap)); + String response = ht.saveFydj(costDtoMap); + if ("success".equalsIgnoreCase(response)) { + resp.put(cash.getrMark(), OperateMsg.PAY_SUCCESS.getMsg()); + //更新核算状态 + biz.updateCostStatus(cash.getId(), cash.getRid(), "UF_ZBFK"); + //更新uf_ShoppingMalPool + String gllc = ufCgsplDao.getfkqr(cash.getRid()); + ufCgsplDao.updateShoppingMalPoolEnd(gllc); + } else { + resp.put(cash.getrMark(), String.join(",", OperateMsg.BUDGET_SUCCESS.getMsg(), + OperateMsg.ACCOUNTING_FAIL.getMsg("返回值:" + response), + OperateMsg.PAY_FAIL.getMsg())); + } + } catch (Exception e) { + rs.writeLog(e); + resp.put(cash.getrMark(), String.join(",", OperateMsg.BUDGET_SUCCESS.getMsg(), + OperateMsg.ACCOUNTING_FAIL.getMsg("异常消息:" + e.getMessage()), + OperateMsg.PAY_FAIL.getMsg())); + } + + } + + return resp; + } + + @Override + public String updateManualPaymentStatusZb(String rids) { + BranchBizUtil bizUtil = new BranchBizUtil(); + return bizUtil.updateManualPaymentStatus(rids, "UF_ZBFK"); + } + + @Override + public String updateManualPaymentStatusFzjg(String rids) { + BranchBizUtil bizUtil = new BranchBizUtil(); + return bizUtil.updateManualPaymentStatus(rids, "UF_FZJGFK"); + } + + + @Override + public Map doAccountByBatchIdFzjg(String ids) throws Exception { + Assert.notBlank(ids, "同步核算id为空"); + + RecordSet rs = new RecordSet(); + HTUtil ht = new HTUtil(); + rs.writeLog(String.format("同步核算数据ids:%s", ids)); + + BranchBizUtil biz = new BranchBizUtil(); + List ufCashList = biz.getUfCashList(ids, "UF_FZJGFK"); + + Map resp = new HashMap<>(); + for (UfCash uf : ufCashList) { + try { + CostAccountDto costAccountDto = BranchCostDTOFactory.getSettlePaymentCostDTO(uf.getRid(), uf.getType()); + String costAccountDtoJsonStr = JSON.toJSONString(costAccountDto); + @SuppressWarnings("unchecked") + Map costDtoMap = JSONObject.parseObject(costAccountDtoJsonStr); + rs.writeLog(String.format("核算入参,%s", costDtoMap)); + String response = ht.saveFydj(costDtoMap); + if ("success".equalsIgnoreCase(response)) { + resp.put(uf.getrMark(), OperateMsg.ACCOUNTING_SUCCESS.getMsg()); + //更新核算状态 + biz.updateCostStatus(uf.getId(), uf.getRid(), "UF_FZJGFK"); + } else { + resp.put(uf.getrMark(), OperateMsg.ACCOUNTING_FAIL.getMsg("返回值:" + response)); + } + } catch (Exception e) { + rs.writeLog(e); + resp.put(uf.getrMark(), OperateMsg.ACCOUNTING_FAIL.getMsg("异常消息:" + e.getMessage())); + } + } + return resp; + } + + /** + * 获取建模表里的数据 + */ + public List getUfCashList(String ids, String uf) { + RecordSet rs = new RecordSet(); + String idJoin = String.join("','", Arrays.asList(ids.split(","))); + rs.executeQuery("select ID,FKLX,REQUTID,LCBH from " + uf + " where REQUTID in ('" + idJoin + "')"); + List lists = new ArrayList<>(); + while (rs.next()) { + UfCash ufCash = new UfCash(); + ufCash.setId(Util.null2String(rs.getString("ID"))); + ufCash.setType(Util.null2String(rs.getString("FKLX"))); + ufCash.setRid(Util.null2String(rs.getString("REQUTID"))); + ufCash.setrMark(Util.null2String(rs.getString("LCBH"))); + lists.add(ufCash); + } + return lists; + } + + + //对接xp系统,调用updatepayStatus接口 + public String updatepayStatus(String fyqr, String jsfk ,String htPayStatus){ + String result = ""; + try { + PropBean pp = new PropBean(); + if ("".equals(fyqr)){ + fyqr = ufCgsplDao.getfkqr(jsfk); + } + List mallPayBizNo = ufCgsplDao.getJsfk(fyqr,jsfk); + String requestUrl = pp.getPropName("updatepayStatusUrl"); + MallUpdatePayStatusRequest mallUpdatePayStatusRequest = new MallUpdatePayStatusRequest(); + mallUpdatePayStatusRequest.setMallConfirmBizNo(ufCgsplDao.getLcbh(fyqr)); + mallUpdatePayStatusRequest.setMallPayBizModelList(mallPayBizNo); + mallUpdatePayStatusRequest.setHtPayStatus(htPayStatus); + HTUtil htUtil = new HTUtil(); + Map appHeader = htUtil.getUserHeader(pp.getPropName("ZBKJJL")); + JAVATools.writelog("getAppHeader@" + appHeader + "@"); + JAVATools.writelog("mallUpdatePayStatusRequest@" + JSON.toJSONString(mallUpdatePayStatusRequest) + "@"); + //新增token校验 + String resp = HttpUtil.postApplicationJson(requestUrl, JSON.toJSONString(mallUpdatePayStatusRequest), appHeader); + Map resultMap = JSON.parseObject(resp, HashMap.class); + result = Util.null2String(resultMap.get("data")); + JAVATools.writelog("updatepayStatus>>接口调用返回 resp : @" + resp + "@"); + } catch (Exception e) { + JAVATools.writelog("updatepayStatus接口返回异常:" + e); + e.printStackTrace(); + } + return result; + } + +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/StaffCodServiceImpl.java b/src/main/java/com/engine/htsc/payment/service/impl/StaffCodServiceImpl.java new file mode 100644 index 0000000..032f8f6 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/StaffCodServiceImpl.java @@ -0,0 +1,283 @@ +package com.engine.htsc.payment.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSONObject; +import com.engine.core.impl.Service; +import com.engine.htsc.payment.enums.Sequences; +import com.engine.htsc.payment.pojo.AutoRequestParam; +import com.engine.htsc.payment.service.StaffCodService; +import com.engine.htsc.payment.util.BizUtils; +import com.engine.htsc.payment.util.CoWfUtil; +import com.engine.htsc.payment.util.PayUtil; +import com.engine.htsc.payment.util.StaffCodUtil; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; +import org.joda.time.DateTime; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.soa.workflow.request.*; + +import javax.sound.midi.Sequence; +import java.util.*; +import java.util.stream.Collectors; + +public class StaffCodServiceImpl extends Service implements StaffCodService { + private static final String FAIL = "自动触发工会付款流程失败,error:"; + private static final String SUCCESS = "自动触发工会付款流程成功"; + + @Override + public AutoRequestParam generateAutoRequestParamByStaffCodRid(String rids) throws Exception { + Assert.notBlank(rids, "触发流程的requestIds为空"); + List ridsList = Arrays.stream(rids.split(",")).collect(Collectors.toList()); + PropBean propBean = new PropBean(); + String creatorUid = propBean.getPropName("StaffCodCreator"); //35201 + String workFlowId = propBean.getPropName("StaffCodWorkFlowId"); // 18523 + + //关联流程主表数据,sql获取附件 + String ygwwsq = PayUtil.getTableNameByUnNumber("ygwwsq"); + String sql = "select WM_CONCAT_OLD(FJ) as fjs from "+ygwwsq+" where REQUESTID in ('" + rids.replace(",", "','") + "') order by FJ"; + Map mainMap = BizUtils.select2Map(sql); + String fjs = Util.null2String(mainMap.get("fjs")); + + //生成流程编号,工会付款 + String requestMark = CoWfUtil.getRequestMarkByUnNumber("zbghfk", Sequences.NET_REI_WORKFLOW_SEQ_ZB); + + //main + Map main = new HashMap<>(); + ResourceComInfo rc = new ResourceComInfo(); + DateTime today = new DateTime(); + String szbm = rc.getDepartmentID(creatorUid); + main.put("NGR", creatorUid); + main.put("LCBH", requestMark); + main.put("SZBM", szbm); + main.put("JJCD", "0"); + main.put("NGSJ", today.toString("yyyy-MM-dd HH:mm")); + main.put("GLYGWWSQLC", rids); + main.put("YWHT", "1"); + main.put("JSZFMX", "点我计算"); + main.put("LXFS", rc.getMobile(creatorUid)); + main.put("NGRGH", rc.getWorkcode(creatorUid)); + main.put("FJ", fjs); + main.put("GGFYQTFY", "1"); + main.put("GLLC", rids); + main.put("FKLX", "2"); //工会付款付款类型 + main.put("FZZD", "1"); + main.put("FZZD1", "0"); + +// 新添加bmjb字段 + RecordSet rsbm = new RecordSet(); + String getbmjbSql = "select deptdepth from hrmdepartmentdefined where deptid = '"+szbm+"'"; + rsbm.execute(getbmjbSql); + if (rsbm.next()){ + main.put("bmjb".toUpperCase(),rsbm.getString("deptdepth")); + } + + List> dt8rows = StaffCodUtil.getDt8s(rids); //明细8汇总一次 + List> dt13rows = StaffCodUtil.getDt13s(rids); //明细13汇总一次 + List> dt5rows = new ArrayList<>(); + List> dt6rows = new ArrayList<>(); + List> dt7rows = new ArrayList<>(); + for (String rid : ridsList) { + dt5rows.addAll(StaffCodUtil.getDt5s(rid)); + dt6rows.addAll(StaffCodUtil.getDt6s(rid)); + dt7rows.addAll(StaffCodUtil.getDt7s(rid)); + } + + AutoRequestParam param = new AutoRequestParam(); + param.setRelateStaffRid(rids); + param.setCreatorUid(creatorUid); + param.setWorkflowId(workFlowId); + param.setIsNextFlow("0"); + param.setRequestName("家庭变故和生病、生育、结婚员工慰问" + today.toString("yyyyMM")); + + main.put("DJZS", String.valueOf(dt5rows.size() + dt6rows.size())); + param.setMain(main); + param.setDt5(dt5rows); + param.setDt6(dt6rows); + param.setDt7(dt7rows); + param.setDt8(dt8rows); + param.setDt13(dt13rows); + BaseBean baseBean = new BaseBean(); + baseBean.writeLog(String.format("自动触发工会流程, 构造慰问参数:%s", JSONObject.toJSONString(param))); + return param; + } + + @Override + public Map autoTriggerLaborUnionPayment(AutoRequestParam param) throws Exception { + Assert.isTrue(param.isValid(), FAIL + "流程数据缺失," + JSONObject.toJSONString(param)); + RequestInfo requestInfo = new RequestInfo(); + requestInfo.setCreatorid(param.getCreatorUid()); + requestInfo.setWorkflowid(param.getWorkflowId()); + requestInfo.setDescription(param.getRequestName()); + requestInfo.setIsNextFlow(param.getIsNextFlow()); + + Map main = param.getMain(); + Assert.isTrue(MapUtils.isNotEmpty(main), FAIL + "主表数据为空"); + + //主表数据 + MainTableInfo mainTableInfo = new MainTableInfo(); + Property[] propertyArray = new Property[main.size()]; + int p = 0; + for (Map.Entry entry : main.entrySet()) { + propertyArray[p] = new Property(); + propertyArray[p].setName(Util.null2String(entry.getKey())); + propertyArray[p].setValue(Util.null2String(entry.getValue())); + p++; + } + mainTableInfo.setProperty(propertyArray); + requestInfo.setMainTableInfo(mainTableInfo); + + //工会主表名 + String tableName = PayUtil.getTableNameByUnNumber("zbghfk"); + + //从表字段 + DetailTableInfo detailTableInfo = new DetailTableInfo(); + //表5 + List> dt5 = param.getDt5(); + if (CollectionUtils.isNotEmpty(dt5)) { + DetailTable detailTable5 = addDtRow(dt5); + detailTable5.setId("5"); + detailTable5.setTableDBName(tableName + "_dt5"); + detailTableInfo.addDetailTable(detailTable5); + } + //表6 + List> dt6 = param.getDt6(); + if (CollectionUtils.isNotEmpty(dt6)) { + DetailTable detailTable6 = addDtRow(dt6); + detailTable6.setId("6"); + detailTable6.setTableDBName(tableName + "_dt6"); + detailTableInfo.addDetailTable(detailTable6); + } + //表7 + List> dt7 = param.getDt7(); + if (CollectionUtils.isNotEmpty(dt7)) { + DetailTable detailTable7 = addDtRow(dt7); + detailTable7.setId("7"); + detailTable7.setTableDBName(tableName + "_dt7"); + detailTableInfo.addDetailTable(detailTable7); + } + //表8 +// List> dt8 = param.getDt8(); +// if (CollectionUtils.isNotEmpty(dt8)) { +// DetailTable detailTable8 = addDtRow(dt8); +// detailTable8.setId("8"); +// detailTable8.setTableDBName(tableName + "_dt8"); +// detailTableInfo.addDetailTable(detailTable8); +// } + //表13 +// List> dt13 = param.getDt13(); +// if (CollectionUtils.isNotEmpty(dt13)) { +// DetailTable detailTable13 = addDtRow(dt13); +// detailTable13.setId("13"); +// detailTable13.setTableDBName(tableName + "_dt13"); +// detailTableInfo.addDetailTable(detailTable13); +// } + + requestInfo.setDetailTableInfo(detailTableInfo); + RequestService service = new RequestService(); + String requestId = service.createRequest(requestInfo); + + //生成requestId后单独插入明细8和明细13的数据 + boolean flag = batchInsertDetails(requestId, tableName, param); + + Map map = new HashMap<>(); + if (flag) { + RecordSet rs = new RecordSet(); + String ridss = param.getMain().getOrDefault("GLLC",""); + String[] ridsList = ridss.split(","); + String whereSql = ""; + for (int i = 0; i < ridsList.length; i++) { + if (i!=ridsList.length-1){ + whereSql += "requid = '"+ridsList[i]+"' or "; + }else { + whereSql += "requid = '"+ridsList[i]+"'"; + } + } + String updateSql = "UPDATE uf_wwsqhz SET FKZT = 1 where " +whereSql; + new BaseBean().writeLog("即将执行的update代码是:"+updateSql); + System.out.println("---即将执行的update代码是:"+updateSql); + boolean updateResult = rs.executeUpdate(updateSql); + if (updateResult){ + map.put(param.getRelateStaffRid(), SUCCESS + ", 新建流程id:" + requestId); + }else { + throw new Exception(FAIL + ", 付款状态更新失败"); + } + } else { + throw new Exception(FAIL + ", 更新明细表失败"); + } + return map; + } + + public DetailTable addDtRow(List> dt) { + DetailTable dtRows = new DetailTable(); + if (CollectionUtils.isNotEmpty(dt)) { + for (Map map : dt) { + Row row = new Row(); + for (String key : map.keySet()) { + Cell cell = new Cell(); + cell.setName(key); + cell.setValue(map.get(key)); + row.addCell(cell); + } + dtRows.addRow(row); + } + } + return dtRows; + } + + /** + * 批量插入流程的明细数据 + * + * @param requestId 流程rid + */ + public boolean batchInsertDetails(String requestId, String tableName, AutoRequestParam param) throws Exception { + RecordSet rs = new RecordSet(); + String sql = String.format("select ID from %s WHERE REQUESTID=?", tableName); + rs.executeQuery(sql, requestId); + rs.next(); + String mainId = Util.null2String(rs.getString("ID")); + List> dt8s = param.getDt8(); + if (CollectionUtils.isNotEmpty(dt8s)) { + List paramList = new ArrayList(); + String insertDt8 = String.format("insert into %s " + + "(mainid, bhsje, sj, jshjje, sy, fysjcdbm, sl, slz, htbh, fycdbmfzr, cys, mxfzzd, yskm, yskmid, yskz) " + + "values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", tableName + "_dt8"); + for (LinkedHashMap dt8 : dt8s) { + List valueList = new ArrayList(); + valueList.add(mainId); + for (Map.Entry entry : dt8.entrySet()) { + valueList.add(entry.getValue()); + } + paramList.add(valueList); + } + rs.executeBatchSql(insertDt8, paramList); + } + + List> dt13s = param.getDt13(); + if (CollectionUtil.isNotEmpty(dt13s)) { + List paramList = new ArrayList(); + String insertDt13 = String.format("insert into %s " + + "( mainid, ygxm, bm, ss, yxzh, yxzfje, khx, lsxx, bz, khxmc, fycdbm, szjg, yggh) " + + "values(?,?,?,?,?,?,?,?,?,?,?,?,?)", tableName + "_dt13"); + for (LinkedHashMap dt13 : dt13s) { + List valueList = new ArrayList(); + valueList.add(mainId); + for (Map.Entry entry : dt13.entrySet()) { + valueList.add(entry.getValue()); + } + paramList.add(valueList); + } + rs.executeBatchSql(insertDt13, paramList); + } + + + return true; + + } + +// public +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/UnionPaymentServiceImpl.java b/src/main/java/com/engine/htsc/payment/service/impl/UnionPaymentServiceImpl.java new file mode 100644 index 0000000..0c0d045 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/UnionPaymentServiceImpl.java @@ -0,0 +1,61 @@ +package com.engine.htsc.payment.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.payment.service.UnionPaymentService; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.Validate; +import weaver.conn.RecordSet; +import weaver.general.Util; + +import java.util.HashMap; +import java.util.Map; + +public class UnionPaymentServiceImpl extends Service implements UnionPaymentService { + + @Override + public Map getApprovalLinkByDept(Map params) throws Exception { + String department = Util.null2String(params.get("department")); + Validate.notEmpty(department, "department为空"); + Map resp = new HashMap<>(); + String sql = "SELECT t1.spr,t2.LASTNAME FROM uf_htlhbmxgld t1\n" + + "LEFT JOIN HRMRESOURCE t2\n" + + "ON t1.spr = t2 .id\n" + + "WHERE bm=?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, department); + String id = ""; + String name = ""; + if (rs.next()) { + id = Util.null2String(rs.getString("spr")); + name = Util.null2String(rs.getString("LASTNAME")); + Map body = new HashMap<>(); + body.put("id", id); + body.put("name", name); + resp.put("needFilled", "xgldsp"); + resp.put("detail", body); + return resp; + } + if (StringUtils.isEmpty(id)) { + sql = "select d.DEPTLEADERS,h.LASTNAME from hrmdepartmentdefined d\n" + + "LEFT JOIN HRMRESOURCE h\n" + + "ON d.DEPTLEADERS = h.ID \n" + + "where d.deptid =?"; + rs.executeQuery(sql, department); + if (rs.next()) { + id = Util.null2String(rs.getString("DEPTLEADERS")); + name = Util.null2String(rs.getString("LASTNAME")); + Map body = new HashMap<>(); + body.put("id", id); + body.put("name", name); + resp.put("needFilled", "fgldsp"); + resp.put("detail", body); + return resp; + } + } + if (MapUtils.isEmpty(resp)) { + throw new Exception("该部门没有对应的审批连 department code:" + department); + } + return resp; + } +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/ZjBxBudgetCommand.java b/src/main/java/com/engine/htsc/payment/service/impl/ZjBxBudgetCommand.java new file mode 100644 index 0000000..bd911e7 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/ZjBxBudgetCommand.java @@ -0,0 +1,155 @@ +package com.engine.htsc.payment.service.impl; + +import com.alibaba.fastjson.JSON; +import com.engine.htsc.payment.enums.BudgetWF; +import com.engine.htsc.payment.pojo.BxBudgetDTO; +import com.engine.htsc.payment.pojo.WbLog; +import com.engine.htsc.payment.service.BudgetCommand; +import com.engine.htsc.payment.service.BudgetStrategy; +import com.engine.htsc.payment.service.BxBudgetService; +import com.engine.htsc.payment.util.AssertUtil; +import com.engine.htsc.payment.util.BizUtils; +import com.engine.htsc.payment.util.BudgetStrategyFactory; +import com.engine.htsc.payment.util.IpUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.joda.time.DateTime; +import weaver.general.Util; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.interfaces.htsc.cus.HTUtil; + +import java.util.Arrays; +import java.util.Map; + + +/* +bywf +20210805 +重载HeadBxBudgetCommand + +* */ +public class ZjBxBudgetCommand implements BudgetCommand { + + private final Log log = LogFactory.getLog(ZjBxBudgetCommand.class); + + private final BudgetStrategy bg = BudgetStrategyFactory.getBxBudgetStrategyForPayment( + BudgetWF.ZJBXBUDGET.getCode()); + + BxBudgetService bxBudgetService = new BxBudgetServiceImpl(); + + @Override + public String submit(String requestNo, String billStatus) throws Exception { + assert bg != null; + BizUtils bizUtils = new BizUtils(); + BxBudgetDTO budgetDTO = bg.buildNewBudgetParamFromWorkflowDB(requestNo, billStatus); + String table = bizUtils.getTableNameByRequestId(requestNo); + String yskmTable = table + "_dt8"; + String wbYskmTable = table + "_dt9"; + Map stringObjectMap = bizUtils.convertDtoToMap(budgetDTO); + log.info("\n 执行报销预算 >>> 当前状态submit"); + log.info("\n 调用预算参数(状态:" + billStatus + ") >>> \n " + JSON.toJSONString(stringObjectMap)); + //记录日志信息 + WbLog wbLog = new WbLog(); + DateTime today = new DateTime(); + wbLog.setRequestNo(requestNo); + wbLog.setTime(today.toString("yyyy-MM-dd HH:mm:ss")); + wbLog.setUrl(String.format("%s/cwbase/JTGL/BudgetProcess.asmx?wsdl", + Util.null2String(new PropBean().getPropName("budgetIp")))); + wbLog.setMethod("weaver.interfaces.htsc.cus.HTUtil.budgetCommit"); + wbLog.setIp(IpUtils.getHostIp()); + try { + //调用接口,提交预算 + String resp = new HTUtil().budgetCommit(stringObjectMap); + log.info("\n 调用预算返回(状态:" + billStatus + ") >>> \n " + resp); + //更新预算记录表,记录入参 + bizUtils.refreshBudgetRecord(requestNo, billStatus, JSON.toJSONString(budgetDTO), "0"); + //更新中间表,应该不是通用的 +// boolean b = bizUtils.updateBudgetMidTable(requestNo, billStatus); + boolean isUpdate = bxBudgetService.doBudgetMiddleTable(budgetDTO.getBillName(), billStatus,null, Arrays.asList(yskmTable, wbYskmTable), table); + log.info("\n 调用预算更新中间表返回 >>> \n " + isUpdate); + //记录日志 + wbLog.setResponse(resp); + if ("F1001".equals(resp)) { + wbLog.setResult("预算成功"); + } else { + wbLog.setResult("预算失败,返回值:" + resp); + } + wbLog.setRequest(JSON.toJSONString(stringObjectMap)); + return resp; //F1001 + } catch (Exception e) { + //记录日志 + wbLog.setResponse(""); + wbLog.setResult("预算失败"); + wbLog.setRequest(JSON.toJSONString(stringObjectMap)); + throw new Exception("预算失败"); + } finally { + BizUtils.saveLog(wbLog); + } + } + + @Override + public String reSubmit(String requestNo) throws Exception { + String reject = reject(requestNo); + if ("F1001".equalsIgnoreCase(reject)) { + return submit(requestNo, "3"); //重新预占 + } else { + return reject; + } + } + + @Override + public String reject(String requestNo) throws Exception { + assert bg != null; + BizUtils bizUtils = new BizUtils(); + BxBudgetDTO lastBudgetDTO = bg.getLastBudgetParamFromModeDB(requestNo, "0"); + if (AssertUtil.isEmpty(lastBudgetDTO)) { + // 为不影响后面的逻辑,默认返回成功F1001 + log.info(String.format("UF_YSJLB无requestno=%s的预算数据", requestNo)); + return "F1001"; + } + String table = bizUtils.getTableNameByRequestId(requestNo); + String yskmTable = table + "_dt8"; + String wbYskmTable = table + "_dt9"; + log.info("\n 从建模表中获取的参数@ \n" + JSON.toJSONString(lastBudgetDTO)); + lastBudgetDTO.setBillStatus("2"); //回退 + Map stringObjectMap = bizUtils.convertDtoToMap(lastBudgetDTO); + log.info("\n 执行总部通用报销预算 >>> 当前状态reject"); + log.info("\n 调用预算参数(回退) >>> \n " + JSON.toJSONString(stringObjectMap)); + //记录日志信息 + WbLog wbLog = new WbLog(); + DateTime today = new DateTime(); + wbLog.setRequestNo(requestNo); + wbLog.setTime(today.toString("yyyy-MM-dd HH:mm:ss")); + wbLog.setUrl(String.format("%s/cwbase/JTGL/BudgetProcess.asmx?wsdl", + Util.null2String(new PropBean().getPropName("budgetIp")))); + wbLog.setMethod("weaver.interfaces.htsc.cus.HTUtil.budgetCommit"); + wbLog.setIp(IpUtils.getHostIp()); + try { + String resp = new HTUtil().budgetCommit(stringObjectMap); + bizUtils.refreshBudgetRecord(requestNo, "2", JSON.toJSONString(lastBudgetDTO), "0"); + log.info("\n 调用预算返回(回退) >>> \n " + resp); + //更新中间表 不是通用表 + boolean isUpdate = bxBudgetService.doBudgetMiddleTable(lastBudgetDTO.getBillName(), "2",null, Arrays.asList(yskmTable, wbYskmTable), table); + log.info("\n 调用预算更新中间表返回(回退) >>> \n " + isUpdate); + //记录日志 + wbLog.setResponse(resp); + wbLog.setResult("预算成功"); + wbLog.setRequest(JSON.toJSONString(stringObjectMap)); + return resp; + } catch (Exception e) { + //记录日志 + wbLog.setResponse(""); + wbLog.setResult("预算失败"); + wbLog.setRequest(JSON.toJSONString(stringObjectMap)); + throw new Exception("预算失败"); + } finally { + BizUtils.saveLog(wbLog); + } + + } + + @Override + public String finish(String requestNo) throws Exception { + return submit(requestNo, "1"); + } +} diff --git a/src/main/java/com/engine/htsc/payment/service/impl/ZjBxBudgetStrategy.java b/src/main/java/com/engine/htsc/payment/service/impl/ZjBxBudgetStrategy.java new file mode 100644 index 0000000..43556f6 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/service/impl/ZjBxBudgetStrategy.java @@ -0,0 +1,155 @@ +package com.engine.htsc.payment.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.engine.htsc.payment.dao.BudgetDao; +import com.engine.htsc.payment.pojo.BudgetList; +import com.engine.htsc.payment.pojo.BxBudgetDTO; +import com.engine.htsc.payment.service.BudgetStrategy; +import com.engine.htsc.payment.util.BizUtils; +import com.engine.htsc.payment.util.PayUtil; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.resource.ResourceComInfo; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.UUID; + +public class ZjBxBudgetStrategy implements BudgetStrategy { + private final Log log = LogFactory.getLog(ZjBxBudgetStrategy.class); + + @Override + public BxBudgetDTO buildNewBudgetParamFromWorkflowDB(String requestNo, String billStatus) throws Exception { + log.info("====报销流程预算开始"); + log.info("====报销流程预算流程id@" + requestNo + "@"); + RecordSet rs = new RecordSet(); + BizUtils bizUtils = new BizUtils(); + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + ResourceComInfo resourceComInfo = new ResourceComInfo(); + DepartmentComInfo departmentComInfo = new DepartmentComInfo(); + String table = bizUtils.getTableNameByRequestId(requestNo); + log.info("====报销流程表名@" + table + "@"); + BudgetDao budgetDao = new BudgetDao(); + String sql = budgetDao.mainBXFieldParam(table, requestNo); + log.info("====查询报销SQL" + sql); + rs.executeQuery(sql); + BxBudgetDTO budgetDTO = new BxBudgetDTO(); + String lcbh = ""; + String requestname = ""; + String ngr = ""; + String mainId = ""; + if (rs.next()) { + lcbh = Util.null2String(rs.getString("lcbh")); + ngr = Util.null2String(rs.getString("ngr")); + mainId = Util.null2String(rs.getString("id")); + requestname = Util.null2String(rs.getString("requestname")); + } + budgetDTO.setBillNum(requestNo); + budgetDTO.setBillName(lcbh); + budgetDTO.setWorkFlowNum(lcbh); + budgetDTO.setBillStatus(billStatus); + budgetDTO.setBillTitle(requestname); + budgetDTO.setBizDate(df.format(LocalDateTime.now())); + budgetDTO.setPesonName(resourceComInfo.getLastname(ngr)); + //获取明细表 dt8和 + String yskmTable = table + "_dt8"; + String bbYskmTableFieldParam = budgetDao.bxBBYskmTableFieldParam(yskmTable, mainId); + log.info("====查询报销明细表SQL" + bbYskmTableFieldParam); + rs.executeQuery(bbYskmTableFieldParam); + //uuid现在放在循环外 + String uuid = UUID.randomUUID().toString(); + int i = 1; + ArrayList list = new ArrayList<>(); + while (rs.next()) { + BudgetList budgetList = new BudgetList(); + String fysjcdbm = Util.null2String(rs.getString("fysjcdbm")); //费用承担部门 + String yskm = Util.null2String(rs.getString("yskm")); //预算科目 + String yskmid = Util.null2String(rs.getString("yskmid")); //预算科目 + String[] yskmidArray = yskmid.split("_"); + if (null==yskm||"".equals(yskm)){ + yskm = yskmidArray[1]; + } + String JSHJJE = Util.null2String(rs.getString("jshjje")); + String BHSJE = Util.null2String(rs.getString("bhsje")); + String SJ = Util.null2String(rs.getString("sj")); + // budgetList.setDeptNum(departmentComInfo.getDepartmentCode(fysjcdbm)); //费用承担部门编号 + budgetList.setDeptNum(fysjcdbm); //费用承担部门编号 + + budgetList.setBgItem(PayUtil.superBudgetSubject(yskm)); //项目编码 + budgetList.setItemEntryNum(yskm); //明细项目编码 + budgetList.setBgElement("0101"); //费用类型编码 + budgetList.setBillEntryID(uuid); + budgetList.setAmount(JSHJJE);//金额 + budgetList.setNoTaxAmount(BHSJE); // 不含价税金额 + budgetList.setTaxAmount(SJ); //税金 + i++; + list.add(budgetList); + } + log.info("====查询报销SQL" + JSONObject.toJSONString(list)); + //外币 + String wbYskmTable = table + "_dt9"; + String wbYskmTableFieldParam = budgetDao.bxWBYskmTableFieldParam(wbYskmTable, mainId); + log.info("====查询报销明细表SQL" + wbYskmTableFieldParam); + rs.executeQuery(wbYskmTableFieldParam); + while (rs.next()) { + BudgetList budgetList = new BudgetList(); + String fysjcdbm = Util.null2String(rs.getString("fysjcdbm")); //费用承担部门 + String yskm = Util.null2String(rs.getString("yskm")); //预算科目 + String yskmid = Util.null2String(rs.getString("yskmid")); //预算科目 + String[] yskmidArray = yskmid.split("_"); + if (null==yskm||"".equals(yskm)){ + yskm = yskmidArray[1]; + } + String rmbje = Util.null2String(rs.getString("rmbje")); + // budgetList.setDeptNum(departmentComInfo.getDepartmentCode(fysjcdbm)); //费用承担部门编号 + budgetList.setDeptNum(fysjcdbm); //费用承担部门编号 + budgetList.setBgItem(PayUtil.superBudgetSubject(yskm)); //项目编码 + budgetList.setItemEntryNum(yskm); //明细项目编码 + budgetList.setBgElement("0101"); //费用类型编码 + budgetList.setBillEntryID(uuid); + budgetList.setAmount(rmbje);//金额 + budgetList.setNoTaxAmount(rmbje); // 不含价税金额 + budgetList.setTaxAmount("0"); //税金 + i++; + list.add(budgetList); + } + budgetDTO.setList(list); //分录汇总 + return budgetDTO; + } + + @Override + public String queryBudgetSqlFromDetailTable(String bz, String table, String detailId) { + String sql = ""; + if ("0".equals(bz)) { + //dt8 + sql = "select FYCDBMFZR,FYSJCDBM,YSKM,BHSJE,SJ,JSHJJE from " + table + "_DT8 where MAINID=" + detailId; + } else if ("1".equals(bz)) { + //dt9 + sql = "select FYCDBMFZR,FYSJCDBM,YSKM,RMBJE from " + table + "_DT9 where MAINID=" + detailId; + } + return sql; + } + + @Override + public BxBudgetDTO getLastBudgetParamFromModeDB(String requestNo, String itFlag) { + RecordSet rs = new RecordSet(); + rs.executeQuery("select YSQQCS from UF_YSJLB where ITFLAG=? and LCID=?", itFlag, requestNo); + String lastOperateBudgetParam = ""; + if (rs.next()) { + lastOperateBudgetParam = Util.null2String(rs.getString("YSQQCS")); + } + //decode + BxBudgetDTO budgetDTO = null; + try { + budgetDTO = JSONObject.parseObject(lastOperateBudgetParam, BxBudgetDTO.class); + } catch (Exception e) { + new BizUtils().log(e.getMessage()); + } + return budgetDTO; + } + +} diff --git a/src/main/java/com/engine/htsc/payment/util/BudgetStrategyFactory.java b/src/main/java/com/engine/htsc/payment/util/BudgetStrategyFactory.java new file mode 100644 index 0000000..0fd414b --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/util/BudgetStrategyFactory.java @@ -0,0 +1,82 @@ +package com.engine.htsc.payment.util; + +import com.engine.htsc.payment.enums.BudgetWF; +import com.engine.htsc.payment.pojo.BudgetDTO; +import com.engine.htsc.payment.pojo.BxBudgetDTO; +import com.engine.htsc.payment.service.BudgetStrategy; + +public class BudgetStrategyFactory { + + /** + * 预算入参为 BudgetDTO + * @param code code + * @return BudgetStrategy + */ + public static BudgetStrategy getBudgetStrategyForPayment(String code) { + try { + return (BudgetStrategy) Class.forName(BudgetWF.getClassNameByCode(code)).newInstance(); + } catch (InstantiationException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + return null; + } + + /** + * 报销预算入参为 BxBudgetDTO + * @param code code + * @return BudgetStrategy + */ + public static BudgetStrategy getBxBudgetStrategyForPayment(String code) { + try { + return (BudgetStrategy) Class.forName(BudgetWF.getClassNameByCode(code)).newInstance(); + } catch (InstantiationException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + return null; + } + + /** + * 差旅报销预算入参为 BxBudgetDTO + * @param code code + * @return BudgetStrategy + */ + public static BudgetStrategy getClBxBudgetStrategyForPayment(String code) { + try { + return (BudgetStrategy) Class.forName(BudgetWF.getClassNameByCode(code)).newInstance(); + } catch (InstantiationException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + return null; + } + + /** + * 采购商城付款预算入参为 BxBudgetDTO + * @param code code + * @return BudgetStrategy + */ + public static BudgetStrategy getBudgetStrategyForCgscPayment(String code) { + try { + return (BudgetStrategy) Class.forName(BudgetWF.getClassNameByCode(code)).newInstance(); + } catch (InstantiationException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/engine/htsc/payment/util/CoWfUtil.java b/src/main/java/com/engine/htsc/payment/util/CoWfUtil.java new file mode 100644 index 0000000..7d21093 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/util/CoWfUtil.java @@ -0,0 +1,138 @@ +package com.engine.htsc.payment.util; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Assert; +import com.engine.htsc.payment.enums.Sequences; +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.formmode.setup.ModeRightInfo; +import weaver.general.BaseBean; +import weaver.general.Util; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Date; +import java.util.UUID; + +public class CoWfUtil extends BaseBean { + + /** + * 从序列中获取流水号 + * + * @param sequences {@link Sequences} + * @return 流水号(000001-999999) + */ + private static String getSerialNoFromSequence(Sequences sequences) throws Exception { + RecordSet rs = new RecordSet(); + rs.executeQuery(String.format("select %s.nextval from DUAL", sequences.toString())); + String serialNo = ""; + if (rs.next()) { + serialNo = rs.getString("nextval"); + } + StringBuffer mark = new StringBuffer(serialNo); + while (mark.length() < 6) { + mark.insert(0, "0"); + } + return mark.toString(); + + } + + /** + * 网报流程通用流程编号 + * 序列实现: NET_REI_WORKFLOW_SEQ + * + * @param unNumber 流程简称 如:总部通用付款-zbtyfk + * @return 流程中文名称+yyyyMM+流水号(000001-999999) + */ + public static String getRequestMarkByUnNumber(String unNumber, Sequences sequences) throws Exception { + Assert.notBlank(unNumber, "unNumber为空,流程编号生成失败"); + + String workFlowName = ""; + RecordSet rs = new RecordSet(); + String sql = "select WORKFLOWNAME from workflow_base where ISVALID=1 and UNNUMBER=?"; + rs.executeQuery(sql, unNumber.toLowerCase()); + if (rs.next()) { + workFlowName = Util.null2String(rs.getString("WORKFLOWNAME")); + } + Assert.notBlank(workFlowName, "workFlowName为空,流程编号生成失败"); + String ym = DateUtil.format(new Date(), "yyyyMM"); + + return String.join("", workFlowName, ym, getSerialNoFromSequence(sequences)); + + + } + + /** + * 生成网报流程编号 + * + * @param workFlowId 流程id + * @return 流程编号 + */ + public synchronized String createFundBusinessPayRequestMark(String workFlowId) throws Exception { + try { + if (StringUtils.isBlank(workFlowId)) { + throw new Exception("参数workFlowId为空"); + } + + RecordSet rs = new RecordSet(); + int formModeId = PayUtil.getFormModeIdByCubeName("uf_fklcbh"); + String sql = "select WORKFLOWNAME,UNNUMBER from workflow_base where isvalid=1 and ID=?"; + rs.executeQuery(sql, workFlowId); + String name = ""; //流程中文名称 + String unNumber = ""; //流程唯一字符标识 + if (rs.next()) { + name = rs.getString("WORKFLOWNAME"); + unNumber = rs.getString("UNNUMBER"); + } + + if (StringUtils.isBlank(name)) { + throw new Exception("workFlowId没有对应的流程标题"); + } + + StringBuilder mark = new StringBuilder(); //流程编码 + String modeUuid = ""; //建模同步uuid + + LocalDateTime now = LocalDateTime.now(); + String yM = now.format(DateTimeFormatter.ofPattern("yyyyMM")); + rs.executeQuery("select id,lsh,MODEUUID from uf_fklcbh where ny = '" + yM + "' and LCLX='" + unNumber + "'"); + if (rs.next()) { + //更新 + int num = Util.getIntValue(rs.getString("lsh")) + 1; + int id = Util.getIntValue(rs.getString("id")); + modeUuid = Util.null2String(rs.getString("MODEUUID")); + String updateSql = "update uf_fklcbh set lsh=? where id=?"; + rs.executeUpdate(updateSql, num, id); + mark = new StringBuilder(num + ""); + while (mark.length() < 6) { + mark.insert(0, "0"); + } + mark = new StringBuilder(name + now.format(DateTimeFormatter.ofPattern("yyyyMM")) + mark); + } else { + String userId = ""; + String userType = "0"; + String createDate = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + String createTime = now.format(DateTimeFormatter.ofPattern("HH:mm:ss")); + String insertSql = "insert into uf_fklcbh" + + "(FORMMODEID,MODEDATACREATER,MODEDATACREATERTYPE,MODEDATACREATEDATE," + + "MODEDATACREATETIME,MODEUUID,LSH,NY,LCLX) \n" + + "values(?,?,?,?,?,?,?,?,?)"; + String uuid = UUID.randomUUID().toString(); + modeUuid = uuid; + rs.executeUpdate(insertSql, formModeId, userId, userType, + createDate, createTime, uuid, "1", yM, unNumber); + mark = new StringBuilder(name + now.format(DateTimeFormatter.ofPattern("yyyyMM")) + "000001"); + } + + //建模权限重构 + int dataId = PayUtil.getDataIdByUUID(modeUuid); + ModeRightInfo modeRightInfo = new ModeRightInfo(); + modeRightInfo.editModeDataShare(1, formModeId, dataId); + + return mark.toString(); + } catch (Exception e) { + writeLog("生成流程编号失败,catch:" + e.getMessage()); + throw new Exception(e.getMessage()); + } + + } +} diff --git a/src/main/java/com/engine/htsc/payment/util/CommonAPI.java b/src/main/java/com/engine/htsc/payment/util/CommonAPI.java new file mode 100644 index 0000000..b6356c9 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/util/CommonAPI.java @@ -0,0 +1,187 @@ +package com.engine.htsc.payment.util; + +import cn.hutool.core.lang.Assert; +import org.apache.commons.collections4.CollectionUtils; +import weaver.conn.RecordSet; +import weaver.general.Util; + +import java.util.*; + +/** + * 所有模块都可以使用此接口简化开发 + * + * @author ruan4261 + */ +public final class CommonAPI { + + /** + * 返回首个字段
+ * RecordSet结果集下标从1开始 + * + * @since 1.1.11 + */ + public static String querySingleField(String sql) { + Assert.notEmpty(sql, "sql"); + RecordSet rs = new RecordSet(); + rs.execute(sql); + rs.next(); + return rs.getString(1); + } + + /** + * 通过一条sql语句查询一个字段 + * 查询不到则返回空字符串 + */ + public static String querySingleField(final String sql, final String field) { + Assert.notEmpty(sql, "execute sql"); + Assert.notEmpty(sql, "field"); + RecordSet rs = new RecordSet(); + rs.execute(sql); + rs.next(); + return Util.null2String(rs.getString(field)); + } + + /** + * 通过一条sql语句查询一个字段 + * 查询不到则返回空字符串 + */ + public static String querySingleFieldWithPlaceholder(final String sql, final String field, Object... params) { + Assert.notEmpty(sql, "execute sql"); + Assert.notEmpty(sql, "field"); + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, params); + rs.next(); + return Util.null2String(rs.getString(field)); + } + + /** + * 返回一条记录
+ * RecordSet结果集下标从1开始 + * + * @since 1.1.11 + */ + public static Map querySingleRow(String sql) { + Assert.notEmpty(sql, "sql"); + RecordSet rs = new RecordSet(); + rs.executeQuery(sql); + rs.next(); + return mapFromRecordRow(rs); + } + + public static Map querySingleRow(String sql, Object... params) { + Assert.notEmpty(sql, "sql"); + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, params); + rs.next(); + return mapFromRecordRow(rs); + } + + /** + * 从RecordSet当前行读取一张键值映射表 + *
+ * 所有键值将会使用小写!! + */ + public static Map mapFromRecordRow(RecordSet rs) { + Assert.notNull(rs, "RecordSet"); + String[] cols = rs.getColumnName(); + Map result = new HashMap(cols.length + (cols.length >> 1)); + for (String key : cols) { + if (key != null && !key.equals("")) { + String value = Util.null2String(rs.getString(key)); + result.put(key.toLowerCase(), value); + } + } + return result; + } + + /** + * @param table 目标表名 + * @param fields 目标字段名, 为空时默认获取所有字段 + * @param conditions 查询字符串: xx='xx' 自动用anid连接 + */ + public static List> query(String table, String fields, String... conditions) { + Assert.notEmpty(table); + if (fields == null || fields.equals("")) + fields = "*"; + + StringBuilder builder = null; + if (conditions != null && conditions.length > 0) { + builder = new StringBuilder(" where "); + for (int i = 0; i < conditions.length; i++) { + if (i > 0) + builder.append(" and "); + + builder.append(conditions[i]); + } + } + + return query("select " + fields + " from " + table + (builder == null ? "" : builder.toString())); + } + + /** + * @param table 目标表名 + * @param fields 目标字段名, 为空时默认获取所有字段 + * @param conditions 查询字符串: xx='xx' 自动用and连接 + */ + public static List> queryWithPlaceholder(String table, String fields, String conditions, Object... params) { + Assert.notEmpty(table); + if (fields == null || fields.equals("")) + fields = "*"; + + StringBuilder builder = null; + List conditionList = Arrays.asList(conditions.split(",")); + if (CollectionUtils.isNotEmpty(conditionList)) { + builder = new StringBuilder(" where "); + for (int i = 0; i < conditionList.size(); i++) { + if (i > 0) { + builder.append(" and "); + } + builder.append(conditionList.get(i)).append("=?"); + } + } + + return queryWithPlaceholder("select " + fields + " from " + table + (builder == null ? "" : builder.toString()), params); + } + + public static List> query(String sql) { + RecordSet rs = new RecordSet(); + rs.execute(sql); + return query(rs); + } + + public static List> queryWithOrder(String sql) { + RecordSet rs = new RecordSet(); + rs.execute(sql); + return query(rs); + } + + public static List> queryWithPlaceholder(String sql, Object... conditions) { + RecordSet rs = new RecordSet(); + if (conditions != null && conditions.length > 0) { + rs.executeQuery(sql, conditions); + } else { + rs.executeQuery(sql); + } + + return query(rs); + } + + public static List> query(RecordSet rs) { + List> result = new ArrayList>(); + while (rs.next()) { + result.add(mapFromRecordRow(rs)); + } + + return result; + } + + public static List> queryWithOrder(RecordSet rs) { + List> result = new ArrayList>(); + while (rs.next()) { + result.add(mapFromRecordRow(rs)); + } + + return result; + } + +} diff --git a/src/main/java/com/engine/htsc/payment/util/HsFactory.java b/src/main/java/com/engine/htsc/payment/util/HsFactory.java new file mode 100644 index 0000000..75ba65c --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/util/HsFactory.java @@ -0,0 +1,35 @@ +package com.engine.htsc.payment.util; + +import com.engine.htsc.payment.enums.HsType; +import com.engine.htsc.payment.pojo.CostAccountDto; +import com.engine.htsc.payment.service.impl.SettlePaymentCommand; +import com.engine.htsc.subpayment.enums.SubPay; +import org.apache.commons.lang3.StringUtils; +import weaver.general.BaseBean; + +/** + * 核算方法工厂 + * K1810012 + */ +public class HsFactory extends BaseBean { + + public CostAccountDto getHsService(String requestId, String id) { + if (StringUtils.isEmpty(requestId) || StringUtils.isEmpty(id)) { + writeLog("@获取核算数据失败,原因:requestId或id为空"); + writeLog("@requestId:" + requestId + "@id:" + id); + return null; + } + BizUtils bu = new BizUtils(); + SettlePaymentCommand settlePaymentCommand = new SettlePaymentCommand(); + if (HsType.ZBPTBX.getId().equals(id)) { + return bu.generateCommonReimbData(requestId, HsType.ZBPTBX.getType()); + } + if (HsType.ZBCLBX.getId().equals(id)) { + return bu.generateTravelReimbData(requestId, HsType.ZBCLBX.getType()); + } + if (HsType.CGSCFK.getId().equals(id)) { + return settlePaymentCommand.generateCommonReimbData(requestId, HsType.CGSCFK.getType()); + } + return null; + } +} diff --git a/src/main/java/com/engine/htsc/payment/util/HttpUtil.java b/src/main/java/com/engine/htsc/payment/util/HttpUtil.java new file mode 100644 index 0000000..5145e37 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/util/HttpUtil.java @@ -0,0 +1,614 @@ +package com.engine.htsc.payment.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import okhttp3.*; + +import java.io.*; +import java.lang.reflect.Method; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +public class HttpUtil { + public static boolean LOG = true; // 设定是否打印请求日志。 + + private static Object getLogger() { + try { + Class aClass = Class.forName("org.slf4j.LoggerFactory"); + Method getLogger = aClass.getDeclaredMethod("getLogger", Class.class); + getLogger.setAccessible(true); + return getLogger.invoke(aClass, HttpUtil.class); + } catch (Exception ignore) { } + return null; + } + private static void log(Object logger, String type, String msg) { + try{ + Method declaredMethod = logger.getClass().getDeclaredMethod(type, String.class); + declaredMethod.setAccessible(true); + declaredMethod.invoke(logger, msg); + }catch (Exception ignore) {} + } + private static Object logger = getLogger(); + private static String CHARSET = "UTF-8"; + private static final MediaType APPLICATION_JSON = MediaType.parse("application/json"); + private static final MediaType APPLICATION_XML = MediaType.parse("application/xml"); + private static final MediaType X_WWW_FORM_URLENCODED = MediaType.parse("application/x-www-form-urlencoded; charset=utf-8"); + private static OkHttpClient __httpClient; + private static OkHttpClient getHttpClient() { + if (__httpClient == null) { + __httpClient = new OkHttpClient + .Builder() + .connectTimeout(20, TimeUnit.SECONDS) + .readTimeout(20, TimeUnit.SECONDS) + .writeTimeout(20, TimeUnit.SECONDS) + .build(); + } + return __httpClient; + } + private static String newRequestId() {return UUID.randomUUID().toString().substring(0, 5);} + private static Response _requestForResponse(String requestId, Request request) throws NetException { + Call call = getHttpClient().newCall(request); // 使用请求数据建立请求。 + Response response = null; // 发起请求。 + try { + response = call.execute(); + if (response.code() != 200) { + throw new Exception(request.method() + " error:" + request.url() + " [" + response.code() + "] " + response.message()); + } + } catch (Exception e) { + int code = -1; + if (response != null) { + code = response.code(); + } + throw new NetException(e.getMessage(), code); + } + + return response; + } + private static String _requestForString(String requestId, Request request) throws NetException { + Response response = _requestForResponse(requestId, request); + String resStr = ""; + try { + resStr = response.body().string(); + } catch (IOException e) { + e.printStackTrace(); + } + info(requestId, "response:" + resStr, null); + return resStr; + } + private static String _makeParamUrl(String requestId, String url, Map params) { + String queryString = map2wwwUrlFormEncode(params); + if (queryString.length() > 0) { + info(requestId, "send param:" + queryString, null); + if (url.contains("?")) { + url = url + "&" + queryString; + } else { + url = url + "?" + queryString; + } + } + return url; + } + private static void _putHearderInRequestBuilder(String requestId, Request.Builder builder, Map headers) { + if (headers != null && headers.size() > 0) { + Set> entries = headers.entrySet(); + for (Map.Entry entry : entries) { + builder.addHeader(entry.getKey(), entry.getValue()); + debug(requestId, "send header:" + entry.getKey() + "=" + entry.getValue(), null); + } + } + } + private static Request _makeGetRequest(String requestId, String url, Map params, Map headers) { + Request.Builder builder = new Request.Builder(); + builder.url(_makeParamUrl(requestId, url, params)); + _putHearderInRequestBuilder(requestId, builder, headers); + builder.get(); + return builder.build(); + } + private static void mapForEach(Map map, Fun fun) throws Exception { + if (map == null || map.size() <= 0 || fun == null) { + return; + } + Set> entries = map.entrySet(); + for (Map.Entry entry : entries) { + fun.d0fun(entry.getKey(), entry.getValue()); + } + } + private static void debug(String requestId, String msg, Exception e) { + if (!LOG) return; + if (logger != null) { + log(logger, "debug", String.format("[%s] %s", requestId, msg)); + } + } + private static void info(String requestId, String msg, Exception e) { + if (!LOG) return; + if (logger != null) { + log(logger, "info", String.format("[%s] %s", requestId, msg)); + } + } + private static void error(String requestId, String msg, Exception e){ + if (!LOG) return; + } + private static void warn(String requestId, String msg, Exception e) { + if (!LOG) return; + } + + /** + * 使用 get方法 请求某地址。 + * + * @param url [Y] 要请求的地址 + * @param params [N] 请求参数 + * @param headers [N] 请求头 + * @return 请求返回的字符串 + */ + public static String get(String url, Map params, Map headers) throws Exception { + String requestId = newRequestId(); + info(requestId, "get url:" + url, null); + return _requestForString(requestId, _makeGetRequest(requestId, url, params, headers)); + } + + /** + * 使用 get方法 请求某地址。 + * + * @param url [Y] 要请求的地址。 + * @param params [N] 请参数。 + * @return 请求结果。 + * @throws Exception 错误。 + */ + public static String get(String url, Map params) throws Exception { + return get(url, params, null); + } + + /** + * 使用 get 方法请求某地址 + * + * @param url [Y] 请求地址。 + * @return 结果 + * @throws Exception 错误 + */ + public static String get(String url) throws Exception { + return get(url, null); + } + + /** + * 使用 POST方法 请求某url + * + * @param url [Y] 要请求的地址 + * @param bodyBytes [N] 数据体 + * @param headers [N] 请求头 + * @return 结果 + * @throws Exception 错误 + */ + public static String post(String url, final MediaType contentType, final byte[] bodyBytes, Map headers) throws Exception { + String requestId = newRequestId(); + info(requestId, "post url:" + url, null); + Request.Builder builder = new Request.Builder(); + builder.url(url); + _putHearderInRequestBuilder(requestId, builder, headers); + builder.post(RequestBody.create(contentType, bodyBytes)); + Request request = builder.build(); // 建立请求数据。 + Call call = getHttpClient().newCall(request); // 使用请求数据建立请求。 + Response response = call.execute(); + if (response.code() != 200) { + throw new NetException("post error:" + url + " [" + response.code() + "] " + response.message()+"body:"+response.body().string(), response.code()); + } + String retStr = response.body().string(); + info(requestId, "response:" + retStr, null); + return retStr; + } + + /** + * 使用 post方法 请求某url + * + * @param url [Y] 要请求的 url + * @param params [N] 请求参数 + * @param headers [N] 请求头 + * @return 结果 + * @throws Exception 错误 + */ + public static String postFormUrlEncode(String url, Map params, Map headers) throws Exception { + return post(url, X_WWW_FORM_URLENCODED, map2wwwUrlFormEncode(params).getBytes(CHARSET), headers); + } + + /** + * 使用 post方法 请求某url + * + * @param url [Y] 要请求的 url + * @param params [N] 请求参数 + * @return 结果 + * @throws Exception 错误 + */ + public static String postFormUrlEncode(String url, Map params) throws Exception { + return postFormUrlEncode(url, params, null); + } + + /** + * 使用 post方法 请求某url + * + * @param url [Y] 要请求的 url + * @param params [N] 请求参数 + * @param headers [N] 请求头 + * @return 结果 + * @throws Exception 错误 + */ + public static String postApplicationJson(String url, Map params, Map headers) throws Exception { + return postApplicationJson(url, JSON.toJSONString(params), headers); + } + + /** + * 使用 post方法 请求某url + * + * @param url [Y] 要请求的 url + * @param params [N] 请求参数 + * @return 结果 + * @throws Exception 错误 + */ + public static String postApplicationJson(String url, Map params) throws Exception { + return postApplicationJson(url, params, null); + } + + /** + * 使用 post方法 请求某url + * + * @param url [Y] 要请求的 url + * @param jsonObject [N] 请求参数 + * @param headers [N] 请求头 + * @return 结果 + * @throws Exception 错误 + */ + public static String postApplicationJson(String url, JSONObject jsonObject, Map headers) throws Exception { + return postApplicationJson(url, jsonObject.toJSONString(), headers); + } + + /** + * 使用 post方法 请求某url + * + * @param url [Y] 要请求的 url + * @param jsonObject [N] 请求参数 + * @return 结果 + * @throws Exception 错误 + */ + public static String postApplicationJson(String url, JSONObject jsonObject) throws Exception { + return postApplicationJson(url, jsonObject.toJSONString(), null); + } + + /** + * 使用 post方法 请求某url + * + * @param url [Y] 要请求的 url + * @param jsonStr [N] 请求参数 + * @param headers [N] 请求头 + * @return 结果 + * @throws Exception 错误 + */ + public static String postApplicationJson(String url, String jsonStr, Map headers) throws Exception { + return post(url, APPLICATION_JSON, jsonStr.getBytes(CHARSET), headers); + } + + /** + * 使用 post方法 请求某url + * + * @param url [Y] 要请求的 url + * @param jsonStr [N] 请求参数 + * @return 结果 + * @throws Exception 错误 + */ + public static String postApplicationJson(String url, String jsonStr) throws Exception { + return postApplicationJson(url, jsonStr, null); + } + + /** + * 使用 post方法 请求某 url + * + * @param url [Y] 要请求的 url + * @param xmlStr [N] xml字符串 + * @param headers [N] 请求头 + * @return 结果 + * @throws Exception 错误 + */ + public static String postApplicationXml(String url, String xmlStr, Map headers) throws Exception { + return post(url, APPLICATION_XML, xmlStr.getBytes(CHARSET), headers); + } + + /** + * 使用 post方法 请求某 url + * + * @param url [Y] 要请求的 url + * @param xmlStr [N] xml字符串 + * @return 结果 + * @throws Exception 错误 + */ + public static String postApplicationXml(String url, String xmlStr) throws Exception { + return postApplicationXml(url, xmlStr, null); + } + + /** + * 上传文件到指定的 url. + * 此方法将使用 + * + * @param url [Y] 地址 + * @param params [N] 参数 + * @param headers [N] 参数 + * @param files [N] 文件 + * @return 上传完成后,服务器返回的字符串 + * @throws Exception 错误 + */ + public static String upload(String url, Map params, Map headers, File... files) throws Exception { + String requestId = newRequestId(); + info(requestId, "upload url:" + url, null); + Request.Builder builder = new Request.Builder(); + builder.url(url); + _putHearderInRequestBuilder(requestId, builder, headers); + final MultipartBody.Builder multipartBodyBuilder = new MultipartBody.Builder(); + multipartBodyBuilder.setType(MultipartBody.FORM); + + if (params != null && params.size() > 0) { + mapForEach(params, new Fun() { + public void d0fun(String key, String value) { + multipartBodyBuilder.addFormDataPart(key, value); + } + }); + } + + if (files != null && files.length > 0) { + int index = 0; + for (File file : files) { + multipartBodyBuilder.addFormDataPart( + "file" + (index > 0 ? index : ""), + file.getName(), + RequestBody.create(MediaType.parse("*/*"), file) + ); + index = index + 1; + } + } + + builder.post(multipartBodyBuilder.build()); + Request request = builder.build(); // 建立请求数据。 + Call call = getHttpClient().newCall(request); // 使用请求数据建立请求。 + Response response = call.execute(); + if (response.code() != 200) { + throw new NetException("upload error:" + url + " [" + response.code() + "] " + response.message(), response.code()); + } + String retStr = response.body().string(); + info(requestId, "response:" + retStr, null); + return retStr; + } + + /** + * 上传文件到指定的 url. + * 此方法将使用 + * + * @param url [Y] 地址 + * @param params [N] 参数 + * @param files [N] 文件 + * @return 上传完成后,服务器返回的字符串 + * @throws Exception 错误信息 + */ + public static String upload(String url, Map params, File... files) throws Exception { + return upload(url, params, null, files); + } + + /** + * 上传文件到指定的 url. + * 此方法将使用 + * + * @param url [Y] 地址 + * @param files [N] 文件 + * @return 上传完成后,服务器返回的字符串 + * @throws Exception 错误 + */ + public static String upload(String url, File... files) throws Exception { + return upload(url, null, files); + } + + /** + * 下载文件.如果指定的文件已存在,将会覆盖。 + * + * @param url [Y] 下载路径 + * @param params [N] 参数 + * @param headers [N] 请求头 + * @param fileOrDir [N] 下载目录或直接对应文件。 + * @return 下载完成后对应的文件 + */ + public static File download(String url, Map params, Map headers, File fileOrDir) throws Exception { + String requestId = newRequestId(); + info(requestId, "download url:" + url, null); + Response response = _requestForResponse(requestId, _makeGetRequest(requestId, url, params, headers)); + + if (fileOrDir == null || fileOrDir.isDirectory()) { + + // 处理要保存的文件路径。 + String fileName = ""; + + // 从响应头获取一个文件名: + String contentdisposition = response.header("Content-Disposition"); + if (contentdisposition != null && contentdisposition.length() > 0) { + try { + // 解析内容。 + String[] split = contentdisposition.split(";"); + + for (String kv : split) { + String[] kvs = kv.split("="); + kvs[0] = kvs[0].trim(); + + if ("filename*".equalsIgnoreCase(kvs[0])) { + String value = kvs[1]; + if (value != null && value.length() > 0) { + + String mCharset = CHARSET; + + if (value.contains("'")) { + String[] strings = value.split("'"); + mCharset = strings[0]; + value = URLDecoder.decode(strings[strings.length - 1], mCharset); + } else { + value = URLDecoder.decode(value, mCharset); + } + fileName = value; + } + } + + if (fileName != null && fileName.length() > 0) { + break; + } + + if ("filename".equalsIgnoreCase(kvs[0])) { + String value = URLDecoder.decode(kvs[1], CHARSET); + if (value != null && value.length() > 0) { + value = value.replace("\"", ""); + } + fileName = value; + } + } + }catch (Exception ignore){/* 忽略这个错误。 */ fileName = "";} + } + + // 没有获取到文件名则从url中解析文件名。 + if (fileName.length() < 1) { + // 从 url 检索一个文件名: + String[] split = url.split("\\?")[0].split("/"); + fileName = split[split.length - 1]; + } + + // 依然没有文件名,只有使用时间戳来命名了。 + if (fileName.length() < 1) { + fileName = String.valueOf(System.currentTimeMillis()); + } + + if (!fileName.contains(".")) { + // 如果文件中没有 . ,说明没有后缀 + // 尝试从header中获取后缀 + // 使用时间戳命名,文件后缀从 Content-Type 中获取。 + String fileEnd = response.header("Content-Type"); + if (fileEnd != null && fileEnd.length() > 0) { + if (fileEnd.contains(";")) { + fileEnd = fileEnd.substring(fileEnd.indexOf("/") + 1, fileEnd.indexOf(";")); + } else { + fileEnd = fileEnd.substring(fileEnd.indexOf("/") + 1); + } + } else { + fileEnd = "httputildownload"; + } + fileName = fileName + "." + fileEnd; + } + + if (fileOrDir == null) { + // 如果没有指定,那么将文件保存到临时目录 + File tempDir = new File(System.getProperty("java.io.tmpdir")); + fileOrDir = new File(tempDir, fileName); + } else { + // 指定的是目录 + fileOrDir = new File(fileOrDir, fileName); + } + } + + // 开始下载 + InputStream inputStream = response.body().byteStream(); // 下载输入流获取到。 + + FileOutputStream outputStream = new FileOutputStream(fileOrDir); + BufferedOutputStream bfo = new BufferedOutputStream(outputStream); + + byte[] data = new byte[1024]; + int dataSize; + + while ((dataSize = inputStream.read(data)) != -1) { + bfo.write(data, 0, dataSize); + } + + bfo.flush(); + outputStream.flush(); + outputStream.close(); + inputStream.close(); + + return fileOrDir; + } + + /** + * 将 url 的文件下载到 fileOrDir 指定的路径。如果指定的文件已存在,将会覆盖。 + * + * @param url [Y] url下载路径 + * @param fileOrDir [N] 目录或文件保存路径,如果不传,将保存在零时目录 + * @return 下载完成后对应的文件 + */ + public static File download(String url, File fileOrDir) throws Exception { + return download(url, null, null, fileOrDir); + } + + /** + * 将 url 的文件下载到 fileOrDir 指定的路径。如果指定的文件已存在,将会覆盖。 + * + * @param url [Y] url下载路径 + * @param fileOrDirPath [N] 目录或文件保存路径,如果不传,将保存在零时目录 + * @return 下载完成后对应的文件 + */ + public static File download(String url, String fileOrDirPath) throws Exception { + return download(url, new File(fileOrDirPath)); + } + + /** + * 下载 url 对应的文件。 文件将被保存到零时文件夹。如果指定的文件已存在,将会覆盖。 + * + * @param url [Y] 下载路径 + * @return 下载完成后对应的文件 + * @throws Exception 错误 + */ + public static File download(String url) throws Exception { + return download(url, (File) null); + } + + /** + * 将 map 集合转换为 www-url-form-encoded 格式的字符串。 + * + * @param params [N] 要转换的集合map + * @param charSet [Y] 编码方式 + * @return 结果 + */ + public static String map2wwwUrlFormEncode(Map params, String charSet) { + if (params == null || params.size() < 1) { + return ""; + } + + StringBuilder stringBuilder = new StringBuilder(); + Set> entries = params.entrySet(); + for (Map.Entry entry : entries) { + String value = null; + try { + value = URLEncoder.encode(entry.getValue().toString(), charSet); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + stringBuilder.append(entry.getKey()).append("=").append(value).append("&"); + } + return stringBuilder.toString(); + } + + /** + * 将 map 集合转换为 www-url-form-encoded 格式的字符串。。 默认使用 UTF-8 编码 + * + * @param params [N] 要转换的集合map + * @return 结果 + */ + public static String map2wwwUrlFormEncode(Map params) { + return map2wwwUrlFormEncode(params, CHARSET); + } + + // 持有2个泛型定义和一个方法的接口 + private interface Fun { + void d0fun(A a, B b) throws Exception; + } + + public static class NetException extends Exception { + private int code; + + public NetException(int code) { + this("net error", code); + } + + public NetException(String msg, int code) { + super(msg); + this.code = code; + } + } +} diff --git a/src/main/java/com/engine/htsc/payment/util/InterfaceLogUtil.java b/src/main/java/com/engine/htsc/payment/util/InterfaceLogUtil.java new file mode 100644 index 0000000..a41b244 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/util/InterfaceLogUtil.java @@ -0,0 +1,179 @@ +package com.engine.htsc.payment.util; + +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSON; +import com.engine.htsc.payment.enums.ThirdInterfaceEnum; +import com.engine.htsc.payment.pojo.InterfaceLogDTO; +import com.engine.htsc.payment.service.impl.HeadPaymentBudgetCommand; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.conn.RecordSet; +import weaver.conn.RecordSetTrans; +import weaver.general.TimeUtil; +import weaver.general.Util; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.comInfo.PropBean; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public final class InterfaceLogUtil { + + private static final Log log = LogFactory.getLog(InterfaceLogUtil.class); + + private static final BizUtils bz = new BizUtils(); + + /** + * aop替换方式,直接传入参数实现日志存库 + * @param paras 方法入参 + */ + public static void saveLogWithMapParams(Map paras, Object response, String methodName) { + try { + log.info(String.format("平台调用第三方日志记录,方法名称:%s; 方法参数:%s; 方法返回值:%s", + methodName, paras, response)); + InterfaceLogDTO interfaceLog = new InterfaceLogDTO(); + //预算接口 + if ("budgetCommit".equals(methodName)) { + String requestId = JSONUtil.parseObj(paras.get("data")).getStr("billnum"); + interfaceLog = InterfaceLogUtil.collectLog(requestId); + interfaceLog.setJkmc(""); + interfaceLog.setDydfdz(String.format("%s/cwbase/JTGL/BudgetProcess.asmx?wsdl", + Util.null2String(new PropBean().getPropName("budgetIp")))); + interfaceLog.setDyff(methodName); + interfaceLog.setJklb(ThirdInterfaceEnum.YS.toString()); + interfaceLog.setFwywjg("预算失败"); + if ("F1001".equals(response)) { + interfaceLog.setFwywjg("预算成功"); + } + } + + //核算接口 + if ("saveFydj".equals(methodName)) { + String requestMark = (String) paras.get("fkdh"); + String requestId = JAVATools.getRequestidByRequestMark(requestMark); + interfaceLog = InterfaceLogUtil.collectLog(requestId); + interfaceLog.setJkmc(""); + interfaceLog.setDydfdz(String + .format("%s/cwbase/service/jtgl/zqfyjk.asmx?wsdl + %s/cwbase/JTGL/ZQFYJK.asmx", + Util.null2String(new PropBean().getPropName("LangChaoSlaveIp")), + Util.null2String(new PropBean().getPropName("LangChaoMasterIp")))); + interfaceLog.setDyff(methodName); + interfaceLog.setJklb(ThirdInterfaceEnum.HS.toString()); + interfaceLog.setFwywjg("核算失败"); + if ("F1001".equals(response)) { + interfaceLog.setFwywjg("核算成功"); + } + } + + //云票夹关联 + if ("connectInvAndBill".equals(methodName)) { + String requestMark = (String) paras.get("BillID"); + String requestId = JAVATools.getRequestidByRequestMark(requestMark); + interfaceLog = InterfaceLogUtil.collectLog(requestId); + interfaceLog.setJkmc(""); + interfaceLog.setDydfdz(String + .format("%s/cwbase/sg/v1/ERP/JTCW/HTZQ/API_JTCW_IMAGESYS/ConnectInvAndBill", + Util.null2String(new PropBean().getPropName("langChaoIp")) + .replace("\"", ""))); + interfaceLog.setDyff(methodName); + interfaceLog.setJklb(ThirdInterfaceEnum.YPJ_GL.toString()); + interfaceLog.setFwywjg("发票关联失败"); + if (StringUtils.isNotBlank((String) response) && ((String) response).contains("成功")) { + interfaceLog.setFwywjg("发票关联成功"); + } + } + + //云票夹取消关联 + if ("resetImageAndBill".equals(methodName)) { + String requestMark = (String) paras.get("BillID"); + String requestId = JAVATools.getRequestidByRequestMark(requestMark); + interfaceLog = InterfaceLogUtil.collectLog(requestId); + interfaceLog.setJkmc(""); + interfaceLog.setDydfdz(String + .format("%s/cwbase/sg/v1/ERP/JTCW/HTZQ/API_JTCW_IMAGESYS/ResetImageAndBill", + Util.null2String(new PropBean().getPropName("langChaoIp")) + .replace("\"", ""))); + interfaceLog.setDyff(methodName); + interfaceLog.setJklb(ThirdInterfaceEnum.YPJ_RESET_GL.toString()); + interfaceLog.setFwywjg("发票取消关联失败"); + if (StringUtils.isNotBlank((String) response) && ((String) response).contains("成功")) { + interfaceLog.setFwywjg("发票取消关联成功"); + } + } + + if (StringUtils.isNotBlank(interfaceLog.getRequestId())) { + interfaceLog.setRc(JSON.toJSONString(paras)); + interfaceLog.setCc((String) response); + interfaceLog.setDysj(TimeUtil.getCurrentTimeString()); + interfaceLog.setFwjqip(IpUtils.getHostIp()); + + InterfaceLogUtil.saveLog(interfaceLog); + } + + } catch (Exception e) { + log.error("saveLogWithMapParams catch error:" + e); + } + + } + + /** + * 从表单中收集日志 + */ + public static InterfaceLogDTO collectLog(String requestId) throws Exception { + InterfaceLogDTO ifl = new InterfaceLogDTO(); + ResourceComInfo rc = new ResourceComInfo(); + RecordSet rs = new RecordSet(); + String sql = String.format( + "SELECT LCBH,NGR FROM %s WHERE REQUESTID = ?", + bz.getTableNameByRequestId(requestId)); + rs.executeQuery(sql, requestId); + if (rs.next()) { + String ngr = Util.null2String(rs.getString("NGR")); + ifl.setRequestId(requestId); + ifl.setDyrgh(rc.getWorkcode(ngr)); + ifl.setDyrmc(rc.getLastname(ngr)); + ifl.setLcbh(Util.null2String(rs.getString("LCBH"))); + } + return ifl; + } + + /** + * 保存调用第三方日志 + * @param interfaceLogDTO 收集后的日志数据 + */ + public static void saveLog(InterfaceLogDTO interfaceLogDTO) { + List> updateParams = new ArrayList<>(); + List record = new ArrayList<>(); + record.add(Util.null2String(interfaceLogDTO.getRequestId())); + record.add(Util.null2String(interfaceLogDTO.getLcbh())); + record.add(Util.null2String(interfaceLogDTO.getRqsj())); + record.add(Util.null2String(interfaceLogDTO.getJkmc())); + record.add(Util.null2String(interfaceLogDTO.getRc())); + record.add(Util.null2String(interfaceLogDTO.getCc())); + record.add(Util.null2String(interfaceLogDTO.getDyrgh())); + record.add(Util.null2String(interfaceLogDTO.getDyrmc())); + record.add(Util.null2String(interfaceLogDTO.getDysj())); + record.add(Util.null2String(interfaceLogDTO.getFwjqip())); + record.add(Util.null2String(interfaceLogDTO.getDydfdz())); + record.add(Util.null2String(interfaceLogDTO.getDyff())); + record.add(Util.null2String(interfaceLogDTO.getFwywjg())); + record.add(Util.null2String(interfaceLogDTO.getJklb())); + updateParams.add(record); + log.info("日志数据: " + JSON.toJSONString(interfaceLogDTO)); + String insertSql = "INSERT INTO UF_INTERFACELOG " + + "(REQUESTID,LCBH,RQSJ,JKMC,RC,CC,DYRGH,DYRMC,DYSJ,FWJQIP,DYDFDZ,DYFF,FWYWJG,JKLB) \n" + + "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; + RecordSetTrans rst = new RecordSetTrans(); + try { + rst.setAutoCommit(false); + rst.executeBatchSql(insertSql, updateParams); + rst.commit(); + } catch (Exception e) { + rst.rollback(); + rst.writeLog("保存调用第三方日志失败,catch error:" + e); + } + } +} diff --git a/src/main/java/com/engine/htsc/payment/util/IpUtils.java b/src/main/java/com/engine/htsc/payment/util/IpUtils.java new file mode 100644 index 0000000..bebc9c7 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/util/IpUtils.java @@ -0,0 +1,184 @@ +package com.engine.htsc.payment.util; + +import java.net.InetAddress; +import java.net.UnknownHostException; +import javax.servlet.http.HttpServletRequest; + +/** + * 获取IP方法 + * + * @author ruoyi + */ +public class IpUtils +{ + public static String getIpAddr(HttpServletRequest request) + { + if (request == null) + { + return "unknown"; + } + String ip = request.getHeader("x-forwarded-for"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getHeader("X-Forwarded-For"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getHeader("X-Real-IP"); + } + + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getRemoteAddr(); + } + + return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip; + } + + public static boolean internalIp(String ip) + { + byte[] addr = textToNumericFormatV4(ip); + return internalIp(addr) || "127.0.0.1".equals(ip); + } + + private static boolean internalIp(byte[] addr) + { + final byte b0 = addr[0]; + final byte b1 = addr[1]; + // 10.x.x.x/8 + final byte SECTION_1 = 0x0A; + // 172.16.x.x/12 + final byte SECTION_2 = (byte) 0xAC; + final byte SECTION_3 = (byte) 0x10; + final byte SECTION_4 = (byte) 0x1F; + // 192.168.x.x/16 + final byte SECTION_5 = (byte) 0xC0; + final byte SECTION_6 = (byte) 0xA8; + switch (b0) + { + case SECTION_1: + return true; + case SECTION_2: + if (b1 >= SECTION_3 && b1 <= SECTION_4) + { + return true; + } + case SECTION_5: + switch (b1) + { + case SECTION_6: + return true; + } + default: + return false; + } + } + + /** + * 将IPv4地址转换成字节 + * + * @param text IPv4地址 + * @return byte 字节 + */ + public static byte[] textToNumericFormatV4(String text) + { + if (text.length() == 0) + { + return null; + } + + byte[] bytes = new byte[4]; + String[] elements = text.split("\\.", -1); + try + { + long l; + int i; + switch (elements.length) + { + case 1: + l = Long.parseLong(elements[0]); + if ((l < 0L) || (l > 4294967295L)) + return null; + bytes[0] = (byte) (int) (l >> 24 & 0xFF); + bytes[1] = (byte) (int) ((l & 0xFFFFFF) >> 16 & 0xFF); + bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 2: + l = Integer.parseInt(elements[0]); + if ((l < 0L) || (l > 255L)) + return null; + bytes[0] = (byte) (int) (l & 0xFF); + l = Integer.parseInt(elements[1]); + if ((l < 0L) || (l > 16777215L)) + return null; + bytes[1] = (byte) (int) (l >> 16 & 0xFF); + bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 3: + for (i = 0; i < 2; ++i) + { + l = Integer.parseInt(elements[i]); + if ((l < 0L) || (l > 255L)) + return null; + bytes[i] = (byte) (int) (l & 0xFF); + } + l = Integer.parseInt(elements[2]); + if ((l < 0L) || (l > 65535L)) + return null; + bytes[2] = (byte) (int) (l >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 4: + for (i = 0; i < 4; ++i) + { + l = Integer.parseInt(elements[i]); + if ((l < 0L) || (l > 255L)) + return null; + bytes[i] = (byte) (int) (l & 0xFF); + } + break; + default: + return null; + } + } + catch (NumberFormatException e) + { + return null; + } + return bytes; + } + + public static String getHostIp() + { + try + { + return InetAddress.getLocalHost().getHostAddress(); + } + catch (UnknownHostException e) + { + } + return "127.0.0.1"; + } + + public static String getHostName() + { + try + { + return InetAddress.getLocalHost().getHostName(); + } + catch (UnknownHostException e) + { + } + return "未知"; + } +} \ No newline at end of file diff --git a/src/main/java/com/engine/htsc/payment/util/LuhnUtil.java b/src/main/java/com/engine/htsc/payment/util/LuhnUtil.java new file mode 100644 index 0000000..272ee9b --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/util/LuhnUtil.java @@ -0,0 +1,89 @@ +package com.engine.htsc.payment.util; + +/** + * Luhn算法工具类 + *

+ * Luhn算法在ISO/IEC 7812-1中定义,使用Luhn算法进行字符串的校验以及生成校验数字 + *

+ * + */ +public class LuhnUtil { + + /** + * 校验字符串 + *

+ * 1. 从右边第1个数字(校验数字)开始偶数位乘以2;
+ * 2. 把在步骤1种获得的乘积的各位数字与原号码中未乘2的各位数字相加;
+ * 3. 如果在步骤2得到的总和模10为0,则校验通过。 + *

+ * + * @param withCheckDigitString 含校验数字的字符串 + * @return true - 校验通过
+ * false-校验不通过 + * @throws IllegalArgumentException 如果字符串为空或不是8~19位的数字 + */ + public static boolean checkString(String withCheckDigitString) { + if (withCheckDigitString == null) { + throw new IllegalArgumentException(); + } + // 6位IIN+最多12位自定义数字+1位校验数字 + // 注意ISO/IEC 7812-1:2017中重新定义8位IIN+最多10位自定义数字+1位校验数字 + // 这里为了兼容2017之前的版本,使用8~19位数字校验 + if (!withCheckDigitString.matches("^\\d{8,19}$")) { + throw new IllegalArgumentException(); + } + return sum(withCheckDigitString) % 10 == 0; + } + + /** + * 计算校验数字 + *

+ * 1. 从右边第1个数字(校验数字)开始偶数位乘以2;
+ * 2. 把在步骤1种获得的乘积的各位数字与原号码中未乘2的各位数字相加;
+ * 3. 用10减去在步骤2得到的总和模10,得到校验数字。 + *

+ * + * @param withoutCheckDigitString 不含校验数字的字符串 + * @return 校验数字 + * @throws IllegalArgumentException 如果字符串为空或不是7~18位的数字 + */ + public static int computeCheckDigit(String withoutCheckDigitString) { + if (withoutCheckDigitString == null) { + throw new IllegalArgumentException(); + } + // 6位IIN+最多12位自定义数字 + // 注意ISO/IEC 7812-1:2017中重新定义8位IIN+最多10位自定义数字 + // 这里为了兼容2017之前的版本,使用7~18位数字校验 + if (!withoutCheckDigitString.matches("^\\d{7,18}$")) { + throw new IllegalArgumentException(); + } + // 因为是不含校验数字的字符串,为了统一sum方法,在后面补0,不会影响计算 + return 10 - sum(withoutCheckDigitString + "0") % 10; + } + + /** + * 根据Luhn算法计算字符串各位数字之和 + *

+ * 1. 从右边第1个数字(校验数字)开始偶数位乘以2;
+ * 2. 把在步骤1种获得的乘积的各位数字与原号码中未乘2的各位数字相加。
+ *

+ * + * @param str + * @return + */ + private static int sum(String str) { + char[] strArray = str.toCharArray(); + int n = strArray.length; + int sum = 0; + for (int i = n; i >= 1; i--) { + int a = strArray[n - i] - '0'; + // 偶数位乘以2 + if (i % 2 == 0) { + a *= 2; + } + // 十位数和个位数相加,如果不是偶数位,不乘以2,则十位数为0 + sum = sum + a / 10 + a % 10; + } + return sum; + } +} \ No newline at end of file diff --git a/src/main/java/com/engine/htsc/payment/util/MyCollectors.java b/src/main/java/com/engine/htsc/payment/util/MyCollectors.java new file mode 100644 index 0000000..fe52648 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/util/MyCollectors.java @@ -0,0 +1,89 @@ +package com.engine.htsc.payment.util; + +import java.math.BigDecimal; +import java.util.Collections; +import java.util.Set; +import java.util.function.BiConsumer; +import java.util.function.BinaryOperator; +import java.util.function.Function; +import java.util.function.Supplier; +import java.util.stream.Collector; + +public class MyCollectors { + + private MyCollectors () { + } + + + // BigDecimal 类型的集合求和 + public static Collector summingBigDecimal(ToBigDecimalFunction mapper) { + return new CollectorImpl<>( + () -> new BigDecimal[] { BigDecimal.ZERO }, + (a, t) -> a[0] = a[0].add(mapper.applyAsInt(t)), + (a, b) -> { + a[0] = a[0].add(b[0]); + return a; + }, + a -> a[0], + Collections.emptySet() + ); + } + + static class CollectorImpl implements Collector { + // 创建一个计算用的容器 + private final Supplier supplier; + // 计算逻辑 + private final BiConsumer accumulator; + // 合并逻辑 + private final BinaryOperator combiner; + // 返回最终计算值 + private final Function finisher; + // 空Set + private final Set characteristics; + + CollectorImpl(Supplier supplier, BiConsumer accumulator, BinaryOperator combiner, + Function finisher, Set characteristics) { + this.supplier = supplier; + this.accumulator = accumulator; + this.combiner = combiner; + this.finisher = finisher; + this.characteristics = characteristics; + } + + CollectorImpl(Supplier supplier, BiConsumer accumulator, BinaryOperator combiner, + Set characteristics) { + this(supplier, accumulator, combiner, castingIdentity(), characteristics); + } + + @Override + public BiConsumer accumulator() { + return accumulator; + } + + @Override + public Supplier supplier() { + return supplier; + } + + @Override + public BinaryOperator combiner() { + return combiner; + } + + @Override + public Function finisher() { + return finisher; + } + + @Override + public Set characteristics() { + return characteristics; + } + } + + @SuppressWarnings("unchecked") + private static Function castingIdentity() { + return i -> (R) i; + } + +} \ No newline at end of file diff --git a/src/main/java/com/engine/htsc/payment/util/PayCommonUtil.java b/src/main/java/com/engine/htsc/payment/util/PayCommonUtil.java new file mode 100644 index 0000000..e37bfc2 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/util/PayCommonUtil.java @@ -0,0 +1,50 @@ +package com.engine.htsc.payment.util; + +import cn.hutool.core.lang.Assert; +import weaver.conn.RecordSet; +import weaver.general.Util; + +import java.util.HashMap; +import java.util.Map; + +public final class PayCommonUtil { + + /** + * 从总部出纳建模表 uf_zbfk 中获取requestId对应的建模id + * + * @param reqId 总部流程的requestId + * @return ufId + */ + public static String trans2Id(String reqId) throws Exception { + RecordSet rs = new RecordSet(); + rs.executeQuery("SELECT ID FROM UF_ZBFK uz WHERE uz.REQUTID = ?", reqId); + if (rs.next()) { + return Util.null2String(rs.getString("ID")); + } else { + throw new Exception("requestid:" + reqId + ",没有对应的流程ID"); + } + } + + /** + * getUnNumberByRequestId + * + * @param requestMark requestMark + * @return unNumber + */ + public static Map getUnNumberByRequestId(String requestMark) throws Exception { + Assert.notBlank(requestMark, "requestMark不能为空"); + RecordSet rs = new RecordSet(); + Map resp = new HashMap<>(); + rs.executeQuery("SELECT wb.UNNUMBER,wr.REQUESTID FROM WORKFLOW_BASE wb\n" + + "LEFT JOIN WORKFLOW_REQUESTBASE wr \n" + + "ON wb.ID = wr.WORKFLOWID \n" + + "WHERE wr.REQUESTMARK = ?", requestMark); + if (rs.next()) { + resp.put("UNNUMBER", Util.null2String(rs.getString("UNNUMBER"))); + resp.put("REQUESTID", Util.null2String(rs.getString("REQUESTID"))); + return resp; + } else { + throw new IllegalArgumentException("requestMark:" + requestMark + " ,没有对应的流程唯一标识"); + } + } +} diff --git a/src/main/java/com/engine/htsc/payment/util/PayUtil.java b/src/main/java/com/engine/htsc/payment/util/PayUtil.java new file mode 100644 index 0000000..226fe22 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/util/PayUtil.java @@ -0,0 +1,693 @@ +package com.engine.htsc.payment.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.engine.htsc.payment.dao.BudgetDao; +import com.engine.htsc.payment.dao.PaymentDao; +import com.engine.htsc.payment.pojo.OaPaymentBizRequest; +import com.engine.htsc.trip.util.WeaverUtil; + +import java.text.DecimalFormat; + +import org.apache.commons.lang.math.NumberUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.conn.RecordSet; +import weaver.conn.RecordSetDataSource; +import weaver.general.Util; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.interfaces.htsc.cus.DepartmentUtils; +import weaver.interfaces.htsc.cus.HTUtil; +import weaver.interfaces.workflow.action.Action; + +import java.lang.reflect.Field; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + + +/** + * 付款流程通用工具类 + */ +public class PayUtil { + + private static final Log log = LogFactory.getLog(PayUtil.class.getName()); + private static final RecordSet rs = new RecordSet(); + + public static String getTbNameByRid(String requestId) throws Exception { + String sql = "select t1.tablename from workflow_bill t1,workflow_base t2,workflow_requestbase t3 \n" + + " where t1.id =t2.formid and t2.id = t3.workflowid and t3.requestid =?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, requestId); + if (rs.next()) { + return Util.null2String(rs.getString("tablename")); + } else { + throw new Exception(String.format("requestId:%s; 没有对应的流程表名", requestId)); + } + } + + public static String getDeptTypeCode(String deptId) { + String code = ""; + String sql = "select depttypecode from hrmdepartmentdefined where deptid=?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, deptId); + while (rs.next()) { + code = rs.getString("depttypecode"); + break; + } + return code; + } + + /** + * 费用承担部门负责人 逗号分隔后获取loginId再拼接 + * + * @return 费用承担部门负责人loginId + */ + public static String splitBmfzrThenJoin(String fzrWithDelimiter, ResourceComInfo rc) { + List fzrIdList = Arrays.asList(fzrWithDelimiter.split(",")); + List fzrLoginIdList = fzrIdList.stream().map(rc::getLoginID).collect(Collectors.toList()); + return StringUtils.join(fzrLoginIdList, ","); + } + + /** + * 获取预算科目上级预算科目 + * + * @return 上级预算科目code + */ + public static String superBudgetSubject(String subBudgetCode) { + RecordSet rs = new RecordSet(); + BudgetDao budgetDao = new BudgetDao(); + String sql = budgetDao.superiorBudgetSubject(subBudgetCode); + rs.executeQuery(sql); + String superBudgetCode = ""; + if (rs.next()) { + superBudgetCode = rs.getString(Util.null2String("sjyskm")); + } + return superBudgetCode; + } + + /** + * 三级预算科目取上级预算科目名称 二级预算科目取当前值 + * + * @param subBudgetCode + * @return + */ + public static String getSuperBudgetCode(String subBudgetCode) { + RecordSet rs = new RecordSet(); + String sql = "select sjyskm,kmjb from uf_kmpz where fc= 0 and yskmbm = ?"; + rs.executeQuery(sql, subBudgetCode); + String superBudgetCode = ""; + String kmjb = ""; + if (rs.next()) { + kmjb = Util.null2String(rs.getString("kmjb")); + superBudgetCode = Util.null2String(rs.getString("sjyskm")); + } + if (!"3".equals(kmjb)) { + superBudgetCode = subBudgetCode; + } + if ("".equals(superBudgetCode)) { + //为空就返回入参 + superBudgetCode = subBudgetCode; + } + return superBudgetCode; + } + + /** + * 三级预算科目取上级预算科目名称 二级预算科目取当前值 + * + * @param subBudgetCode 预算科目 + * @return 上级预算 + */ + public static String getSuperBudgetCodeLh(String subBudgetCode) { + RecordSet rs = new RecordSet(); + String sql = "select sjyskm,kmjb from uf_lhkmpz where fc= 0 and yskmbm = ?"; + rs.executeQuery(sql, subBudgetCode); + String superBudgetCode = ""; + String kmjb = ""; + if (rs.next()) { + kmjb = Util.null2String(rs.getString("kmjb")); + superBudgetCode = Util.null2String(rs.getString("sjyskm")); + } + if (!"3".equals(kmjb)) { + superBudgetCode = subBudgetCode; + } + if ("".equals(superBudgetCode)) { + //为空就返回入参 + superBudgetCode = subBudgetCode; + } + return superBudgetCode; + } + + /** + * 超预算id转字符串 + * + * @param cys 超预算id + * @return 每次 + */ + public static String overWeight(String cys) { + String c = ""; + switch (cys) { + case "0": + c = "否"; + break; + case "1": + c = "是"; + break; + default: + c = "预算数据未维护"; + } + return c; + } + + /** + * 根据unNumber获取表明 + * + * @param unNumber 唯一标识 + * @return sql + */ + public static String getTableNameByUnNumber(String unNumber) { + rs.executeQuery("select t1.TABLENAME from workflow_bill t1\n" + + "LEFT JOIN workflow_base t2\n" + + "on t1.ID=t2.FORMID\n" + + "where t2.ISVALID=1 and UNNUMBER='" + unNumber + "'"); + rs.next(); + return rs.getString("TABLENAME"); + } + + /** + * 根据建模表名获取formModeId + * + * @param cubeName 建模表明 + * @return int formModeId + */ + public static int getFormModeIdByCubeName(String cubeName) { + rs.executeQuery("select t1.id from modeinfo t1\n" + + " left join workflow_bill t2\n" + + " on t1.formid=t2.id\n" + + " where t2.tablename='" + cubeName + "'"); + rs.next(); + return rs.getInt("id"); + } + + /** + * 获取省市code对应的省市名称 + * + * @param code 省市code + * @return 省市名 + */ + public static String getProvinceAndCityNameByCode(String code) { + RecordSetDataSource rsd = new RecordSetDataSource("Travel"); //城市 + if (StringUtils.isBlank(code)) { + return ""; + } + String[] desInfo = code.split(","); //省市区 + String ids = Arrays.stream(desInfo).map(s -> "\'" + s + "\'").collect(Collectors.joining(",")); + rsd.executeSql("select name from travel_area where code in (" + ids + ") order by instr('" + code + "',code)"); + List names = new ArrayList<>(); + while (rsd.next()) { + names.add(rsd.getString("name")); + } + return String.join(",", names); + + } + + /** + * 根据uuid获取建模的数据id,常用于建模的权限重构 + * + * @param uuid modeUuid + * @return dataId + */ + public static int getDataIdByUUID(String uuid) { + int dataid = -1; + String sql = "select id from uf_zfmx where modeuuid = ?"; + if (rs.executeQuery(sql, uuid) && rs.next()) { + dataid = Util.getIntValue(rs.getString(1)); + } + return dataid; + } + + /** + * 获取UnNumber by 流程id + * + * @param workFlowId 流程id + * @return string + */ + public static String getUnNumberByWorkFlowId(int workFlowId) { + String sql = "select workflowname,id,unnumber from workflow_base where isvalid=1 and id=?"; + if (rs.executeQuery(sql, workFlowId)) { + rs.next(); + return Util.null2String(rs.getString("unnumber")); + } else { + return ""; + } + } + + /** + * 获取部门负责人 + * + * @param deptIds 部门id + * @return 人员id + */ + public static String getDivisionHead(String deptIds) { + if (StringUtils.isBlank(deptIds)) { + return ""; + } + PaymentDao paymentDao = new PaymentDao(); + String sql = paymentDao.getDivisonHead(deptIds); + rs.executeQuery(sql); + log.info(sql + "==" + deptIds); + List heads = new ArrayList<>(); + while (rs.next()) { + heads.add(Util.null2String(rs.getString("deptleaders"))); + } + return heads.stream().filter(StringUtils::isNotBlank).distinct() + .collect(Collectors.joining(",")); + } + + /** + * 根据流程表单获取投行项目 + * + * @param reqId 流程id + * @return map + */ + public static Map getItItemByReqId(String reqId) { + Map item = new HashMap<>(); + RecordSet recordSet = new RecordSet(); + String ccsqTable = WeaverUtil.getTableNameByRequestId(reqId, recordSet); + if ("".equals(ccsqTable)) { + return item; + } + String thxm_sql = "select xmjc from " + ccsqTable; + recordSet.executeQuery(thxm_sql); + recordSet.next(); + String xmjc = Util.null2String(recordSet.getString("xmjc")); + if ("".equals(xmjc)) { + Map paras = new HashMap<>(); + paras.put("projectId", xmjc); + String projectById = new HTUtil().getProjectById(paras); + if ("".equals(projectById)) { + return item; + } + JSONObject jsonObject = JSONObject.parseObject(projectById); + String shortName = jsonObject.getString("shortName"); + item.put("id", xmjc); + item.put("shortName", shortName); + item.put("isItProj", shortName); + } else { + item.put("id", ""); + item.put("shortName", ""); + item.put("isItProj", "否"); + } + return item; + } + + /** + * 将Object对象里面的属性和值转化成Map对象 + * + * @param obj + * @return + * @throws IllegalAccessException + */ + public static Map objectToMap(Object obj) throws IllegalAccessException { + Map map = new HashMap(); + Class clazz = obj.getClass(); + for (Field field : clazz.getDeclaredFields()) { + field.setAccessible(true); + String fieldName = field.getName(); + Object value = nvl(field.get(obj), ""); + map.put(fieldName, value); + } + return map; + } + + /** + * 获取参数不为空值 + * + * @param value defaultValue 要判断的value + * @return value 返回值 + */ + public static T nvl(T value, T defaultValue) { + return value != null ? value : defaultValue; + } + + /** + * 预算明细表8或9 取科目对应数据 + * 金额,是否超标,实际金额,标准金额,不含税价金额,税金 + * + * @param budgetKmTable 预算明细表 + * @param mainId 流程mainId + * @param isIt 是否it付款 + * @return map + */ + public static JSONObject getKjKmCharges(String budgetKmTable, String mainId, boolean isIt) { + RecordSet rs = new RecordSet(); + JSONObject subParam = new JSONObject(); + BudgetDao budgetDao = new BudgetDao(); + String yskmAmountParam = budgetDao.budgetKmTableInfo(budgetKmTable, mainId, isIt); + rs.executeQuery(yskmAmountParam); + if (rs.next()) { + if (budgetKmTable.toLowerCase().contains("dt8")) { + String JSHJJE = Util.null2String(rs.getString("JSHJJE")); + String BHSJE = Util.null2String(rs.getString("BHSJE")); + String SJ = Util.null2String(rs.getString("SJ")); + //格式化金额 + JSHJJE = new DecimalFormat("0.00").format(NumberUtils.toDouble(JSHJJE)); + // 金额 + subParam.put("amount", JSHJJE); + // 不含价税金额 + subParam.put("notaxAmount", BHSJE); + //税金 + subParam.put("taxAmount", SJ); + // 非IT付款的情况下,价税合计不为0 不含税为0的情况下 不含税金额改成和价税合计一样的金额 + if (!isIt) { + if (StringUtils.isNotBlank(JSHJJE) && !"0".equals(JSHJJE) && !"0.00".equals(JSHJJE) && ( + StringUtils.isBlank(BHSJE) || "0".equals(BHSJE) || "0.00".equals(BHSJE))) { + // 不含价税金额 + subParam.put("notaxAmount", JSHJJE); + } + } + } else { + // 人民币金额 + String JSHJJE = Util.null2String(rs.getString("rmbje")); + //格式化金额 + JSHJJE = new DecimalFormat("0.00").format(NumberUtils.toDouble(JSHJJE)); + // 金额 + subParam.put("amount", JSHJJE); + // 不含价税金额 + subParam.put("notaxAmount", "0.00"); + //税金 + subParam.put("taxAmount", "0.00"); + } + } + return subParam; + } + + /** + * 更新合同付款信息到华泰 + * + * @param requestId 流程id + * @return 是否成功 + */ + public static boolean updatePaymentInfoToHuaTai(String requestId) { + log.info("====更新合同付款信息到华泰"); + log.info("====通用付款流程id@" + requestId + "@"); + if ("".equals(requestId)) { + log.info("====流程requestId为空,更新合同信息终止"); + return false; + } + PropBean propBean = new PropBean(); + String updateProjectsUrl = propBean.getPropName("updatePaymentInfo"); + //合同跳转到oa的url前缀 + String contractForwardOaUrlPre = propBean.getPropName("contractForwardOaUrlPre"); + OaPaymentBizRequest oaPaymentBizRequest = new OaPaymentBizRequest(); + RecordSet rs = new RecordSet(); + String table = WeaverUtil.getTableNameByRequestId(requestId, rs); + if ("".equals(table)) { + log.info("====根据流程requestId无法获取表名,更新合同信息终止"); + return false; + } + try { + rs.executeQuery("select t1.LCBH,t2.CKHTXX,t1.hjxxjezfmx,t2.HTBH from " + table + " t1\n" + + " left join " + table + "_DT4 t2\n" + + " on t1.ID=t2.MAINID\n" + + " where REQUESTID=" + requestId); + if (rs.next()) { + oaPaymentBizRequest.setOaPayUrl(contractForwardOaUrlPre + requestId); + oaPaymentBizRequest.setOaCode(Util.null2String(rs.getString("LCBH"))); + oaPaymentBizRequest.setCtrctCode(Util.null2String(rs.getString("HTBH"))); + oaPaymentBizRequest.setPaymentMoney(Util.null2String(rs.getString("hjxxjezfmx"))); + oaPaymentBizRequest.setPaymentDate(LocalDateTime.now().toString()); + oaPaymentBizRequest.setProcessCode(Util.null2String(rs.getString("CKHTXX"))); + oaPaymentBizRequest.setSysCode("OA"); + oaPaymentBizRequest.setModuleCode("CTRCT"); + } + } catch (Exception e) { + log.info("明细表4不存在,直接返回"); + return true; + } + + try { + //判断是否有合同数据 + if (AssertUtil.isEmpty(oaPaymentBizRequest.getCtrctCode())) { + log.info("当前流程无合同信息,直接返回; requestid:" + requestId); + return true; + } + log.info("====更新合同付款信息url@" + updateProjectsUrl + "@"); + log.info("====更新合同付款信息请求参数@" + oaPaymentBizRequest + "@"); + HTUtil htUtil = new HTUtil(); + Map appHeader = htUtil.getAppHeader(); + log.info("getAppHeader@" + appHeader + "@"); + String response = HttpUtil.postApplicationJson(updateProjectsUrl, JSON.toJSONString(oaPaymentBizRequest), appHeader); + log.info("====更新合同付款信息返回参数@" + response + "@"); + JSONObject jsonObject = JSONObject.parseObject(response); + return (boolean) jsonObject.get("isSuccess"); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 更新合同付款信息到华泰,关联多个合同的情况 + * + * @param requestId 流程id + * @return 是否成功 + */ + public static boolean updatePaymentInfoListToHuaTai(String requestId) { + log.info("====更新合同付款信息到华泰"); + log.info("====通用付款流程id@" + requestId + "@"); + if ("".equals(requestId)) { + log.info("====流程requestId为空,更新合同信息终止"); + return false; + } + PropBean propBean = new PropBean(); + String updateProjectsUrl = propBean.getPropName("updatePaymentInfo"); + //合同跳转到oa的url前缀 + String contractForwardOaUrlPre = propBean.getPropName("contractForwardOaUrlPre"); + RecordSet rs = new RecordSet(); + String table = WeaverUtil.getTableNameByRequestId(requestId, rs); + if ("".equals(table)) { + log.info("====根据流程requestId无法获取表名,更新合同信息终止"); + return false; + } + List oaPaymentBizRequestList = new ArrayList<>(); + rs.executeQuery("select t1.LCBH,t2.CKHTXX,t1.hjxxjezfmx,t2.HTBH from " + table + " t1\n" + + " left join " + table + "_DT4 t2\n" + + " on t1.ID=t2.MAINID\n" + + " where REQUESTID=" + requestId); + while (rs.next()) { + OaPaymentBizRequest oaPaymentBizRequest = new OaPaymentBizRequest(); + oaPaymentBizRequest.setOaPayUrl(contractForwardOaUrlPre + requestId); + oaPaymentBizRequest.setOaCode(Util.null2String(rs.getString("LCBH"))); + oaPaymentBizRequest.setCtrctCode(Util.null2String(rs.getString("HTBH"))); + oaPaymentBizRequest.setPaymentMoney(Util.null2String(rs.getString("hjxxjezfmx"))); + oaPaymentBizRequest.setPaymentDate(LocalDateTime.now().toString()); + oaPaymentBizRequest.setProcessCode(Util.null2String(rs.getString("CKHTXX"))); + oaPaymentBizRequest.setSysCode("OA"); + oaPaymentBizRequest.setModuleCode("CTRCT"); + //判断是否有合同数据 + if (!"".equals(oaPaymentBizRequest.getCtrctCode())) { + oaPaymentBizRequestList.add(oaPaymentBizRequest); + } + } + try { + //判断是否有合同数据 + if (oaPaymentBizRequestList.size()==0) { + log.info("当前流程无合同信息,直接返回; requestid:" + requestId); + return true; + } + log.info("====更新合同付款信息url@" + updateProjectsUrl + "@"); + log.info("====更新合同付款信息请求参数@" + JSON.toJSONString(oaPaymentBizRequestList) + "@"); + JSONObject jsonObject = new JSONObject(); + boolean flag = true; + for (OaPaymentBizRequest oaPaymentBizRequest:oaPaymentBizRequestList){ + HTUtil htUtil = new HTUtil(); + Map appHeader = htUtil.getAppHeader(); + log.info("getAppHeader@" + appHeader + "@"); + String response = HttpUtil.postApplicationJson(updateProjectsUrl, JSON.toJSONString(oaPaymentBizRequest), appHeader); + log.info("====更新合同付款信息返回参数@" + response + "@"); + jsonObject = JSONObject.parseObject(response); + if (!(boolean) jsonObject.get("isSuccess")){ + flag = false; + } + } + return flag; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 更新it合同信息信息 + * + * @param requestId 流程id + * @return 是否成功 + */ + public static boolean updateItPaymentInfoToHT(String requestId, String workflowTable) throws Exception { + log.info("====更新it合同付款信息到华泰@requestId" + requestId + "@workflowTable:" + workflowTable); + //根据主表字段fkxx判断当前流程是否为付款付款 + try { + RecordSet rs = new RecordSet(); + RecordSet rs2 = new RecordSet(); + Map dataMap = new HashMap<>(); + ResourceComInfo resourceComInfo = new ResourceComInfo(); + List costDetails = new ArrayList<>(); + rs.executeQuery(" select id,ngr,lcbh,xmfzr from " + workflowTable + " where requestid=? ", new Object[]{requestId}); + boolean flag = false; + if (rs.next()) { + int mainid = rs.getInt("id"); + String lcbh = Util.null2String(rs.getString("lcbh")); + String ngr = resourceComInfo.getWorkcode(Util.null2String(rs.getString("ngr"))); + String xmfzr = resourceComInfo.getWorkcode(Util.null2String(rs.getString("xmfzr"))); + + rs.executeQuery(" select htbh,htmc from " + workflowTable + "_dt4 where mainid=? and rownum=1 order by id ", new Object[]{mainid}); + rs.next(); + String htbh = Util.null2String(rs.getString("htbh")); + String htmc = Util.null2String(rs.getString("htmc")); + + + rs.executeQuery(" select skdw from " + workflowTable + "_dt11 where mainid=? and rownum=1 order by id ", new Object[]{mainid}); + rs.next(); + String skdw = Util.null2String(rs.getString("skdw")); + + + rs.executeQuery(" select ID,projectcode from " + workflowTable + "_dt8 where mainid=? ", new Object[]{mainid}); + while (rs.next()) { + String xmjdid = Util.null2String(rs.getString("projectcode")); + String id = Util.null2String(rs.getString("ID")); + List itemList = new ArrayList<>(); + + String dataSql = " select bhsje,jshjje,fysjcdbmbm,sy,ghxm,yskm,fysjcdbm from " + workflowTable + "_dt8 where mainid=? and ID=? "; + rs2.executeQuery(dataSql, new Object[]{mainid, id}); + while (rs2.next()) { + String bhsje = Util.null2String(rs2.getString("bhsje")); + String jshjje = Util.null2String(rs2.getString("jshjje")); + String fysjcdbmbm = Util.null2String(rs2.getString("fysjcdbmbm"));//费用承担部门编码 + String fysjcdbm = Util.null2String(rs2.getString("fysjcdbm"));//费用实际承担部门id + String sy = Util.null2String(rs2.getString("sy")); + String ghxm = Util.null2String(rs2.getString("ghxm")); + String yskm = getBudgetItemName(Util.null2String(rs2.getString("yskm"))); + + if(StringUtils.isEmpty(fysjcdbmbm)) {//非空判断 + fysjcdbmbm = DepartmentUtils.getDeptCode(Integer.valueOf(fysjcdbm)); + } + + Map itemMap = new HashMap(); + itemMap.put("budgetAcct", yskm); + itemMap.put("contractAmtNoTax", bhsje); + itemMap.put("contractAmtWithTax", jshjje); + itemMap.put("contractName", htmc); + itemMap.put("contractSN", htbh); + itemMap.put("isPlanNing", ghxm); + itemMap.put("payee", skdw); + itemMap.put("paymentDep", fysjcdbmbm); + itemMap.put("paymentNote", sy); + + itemList.add(itemMap); + + } + + Map costDetailsMap = new HashMap<>(); + costDetailsMap.put("costDetails", itemList); + costDetailsMap.put("projectCode", xmjdid); + + costDetails.add(costDetailsMap); + + } + + + dataMap.put("costDetails", costDetails); + dataMap.put("drafter", ngr); + dataMap.put("projectDirectorId", xmfzr); + dataMap.put("workFlowNum", lcbh); + rs.writeLog("UpdatePaymentDataAction====params====, " + JSON.toJSONString(dataMap)); + + HTUtil htUtil = new HTUtil(); + Map appHeader = htUtil.getAppHeader(); + rs.writeLog("getAppHeader@{}@", appHeader); + String requestUrl = new PropBean().getPropName("UpdatePaymentDataUrl"); + //添加app header + String responseData = HttpUtil.postApplicationJson(requestUrl, JSON.toJSONString(dataMap), appHeader); + rs.writeLog("UpdatePaymentDataAction====result==== " + responseData); + JSONObject resJson = JSON.parseObject(responseData); + if ("0000".equals(resJson.getString("retCode"))) { + rs.writeLog("====更新it合同信息成功@" + requestId); + flag = true; + } else { + rs.writeLog("====更新it合同信息失败@" + requestId); + flag = false; + } + + } + return flag; + } catch (Exception e) { + rs.writeLog("====更新it合同信息方法执行异常@" + requestId); + return false; + } + } + + /** + * @param code 例如: code=32,3201 + * @return name=江苏省,江苏南京市 + */ + public static String cityCodeToName(String code) { + RecordSet rs = new RecordSet(); + if (StringUtils.isBlank(code)) { + return ""; + } + String[] desInfo = code.split(","); //省市 + String ids = Arrays.stream(desInfo).map(s -> "\'" + s + "\'").collect(Collectors.joining(",")); + rs.executeQuery("select name from uf_city where code in (" + ids + ") order by instr('" + code + "',code)"); + List names = new ArrayList<>(); + while (rs.next()) { + names.add(rs.getString("name")); + } + return String.join(",", names); + } + + /** + * 根据流程编号判断调用核算接口的入参 + * lb:费用核算类别 用于区分不同类别的费用核算,可选参数如下: + *

+ * htcl:总部差旅报销费用核算 + * htpt:总部普通报销费用核算 + * htfk:总部付款费用核算 + * + * @param requestMark + * @return + */ + public static String switchBudgetParamByRequestMark(String requestMark) { + if (StringUtils.isBlank(requestMark)) { + return ""; + } + if (requestMark.startsWith("总部IT付款") || requestMark.startsWith("总部通用付款") || requestMark.startsWith("总部工会付款")) { + return "htfk"; + } else { + return ""; + } + + + } + + /** + * 查询预算科目名称 + * + * @param code + * @return + */ + private static String getBudgetItemName(String code) { + String budgetItemName = ""; + RecordSet rs = new RecordSet(); + rs.executeQuery(" select yskmmc from uf_kmpz where yskmbm=? ", new Object[]{code}); + if (rs.next()) { + budgetItemName = Util.null2String(rs.getString("yskmmc")); + } + return budgetItemName; + + } + +} diff --git a/src/main/java/com/engine/htsc/payment/util/StaffCodUtil.java b/src/main/java/com/engine/htsc/payment/util/StaffCodUtil.java new file mode 100644 index 0000000..fcc5868 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/util/StaffCodUtil.java @@ -0,0 +1,227 @@ +package com.engine.htsc.payment.util; + +import com.engine.htsc.common.utils.DoubleUtil; +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.htsc.comInfo.PropBean; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +public class StaffCodUtil extends BaseBean { + + private static final String tableName; + + static { + tableName = PayUtil.getTableNameByUnNumber("ygwwsq"); + } + + public static List> getDt5s(String rid) throws Exception { + RecordSet rs = new RecordSet(); + List> resp = new ArrayList<>(); + String sql = String.format("select " + + "t1.fplx, t1.fpdm, t1.fphm, t1.jshj, t1.xfmc, t1.gfmc, t1.fpfl, t1.fpmc, t1.se, t1.kpsj, t1.yz, t1.pjly, t1.fplxid, t1.wjid, t1.htdelete, t1.fpckid\n" + + "from %s t1\n" + + "left join %s t2\n" + + "on t1.mainid=t2.id\n" + + "where t2.requestid=?", tableName + "_dt5", tableName); + rs.executeQuery(sql, rid); + while (rs.next()) { + Map dt5 = new HashMap<>(); + dt5.put("fplx", Util.null2String(rs.getString("fplx"))); + dt5.put("fpdm", Util.null2String(rs.getString("fpdm"))); + dt5.put("fphm", Util.null2String(rs.getString("fphm"))); + dt5.put("jshj", Util.null2String(rs.getString("jshj"))); + dt5.put("xfmc", Util.null2String(rs.getString("xfmc"))); + dt5.put("gfmc", Util.null2String(rs.getString("gfmc"))); + dt5.put("fpfl", Util.null2String(rs.getString("fpfl"))); + dt5.put("fpmc", Util.null2String(rs.getString("fpmc"))); + dt5.put("se", Util.null2String(rs.getString("se"))); + dt5.put("kpsj", Util.null2String(rs.getString("kpsj"))); + dt5.put("yz", Util.null2String(rs.getString("yz"))); + dt5.put("pjly", Util.null2String(rs.getString("pjly"))); + dt5.put("fplxid", Util.null2String(rs.getString("fplxid"))); + dt5.put("wjid", Util.null2String(rs.getString("wjid"))); + dt5.put("htdelete", Util.null2String(rs.getString("htdelete"))); + dt5.put("fpckid", Util.null2String(rs.getString("fpckid"))); + resp.add(dt5); + } + return resp; + } + + public static List> getDt6s(String rid) throws Exception { + RecordSet rs = new RecordSet(); + List> resp = new ArrayList<>(); + String sql = String.format("select " + + "t1.wjid, t1.fpdm, t1.fphm, t1.kpje, t1.kpf, t1.fpfl, t1.htdelete, t1.fpckid, t1.zt, t1.kpsj, t1.fplx, t1.se, t1.wsje, t1.fplxid, t1.dyfp, t1.sj, t1.zjid, t1.pjly\n" + + "from %s t1\n" + + "left join %s t2\n" + + "on t1.mainid=t2.id\n" + + "where t2.requestid=?", tableName + "_dt6", tableName); + rs.executeQuery(sql, rid); + while (rs.next()) { + Map dt6 = new HashMap<>(); + dt6.put("wjid", Util.null2String(rs.getString("wjid"))); + dt6.put("fpdm", Util.null2String(rs.getString("fpdm"))); + dt6.put("fphm", Util.null2String(rs.getString("fphm"))); + dt6.put("kpje", Util.null2String(rs.getString("kpje"))); + dt6.put("kpf", Util.null2String(rs.getString("kpf"))); + dt6.put("fpfl", Util.null2String(rs.getString("fpfl"))); + dt6.put("htdelete", Util.null2String(rs.getString("htdelete"))); + dt6.put("fpckid", Util.null2String(rs.getString("fpckid"))); + dt6.put("zt", Util.null2String(rs.getString("zt"))); + dt6.put("kpsj", Util.null2String(rs.getString("kpsj"))); + dt6.put("fplx", Util.null2String(rs.getString("fplx"))); + dt6.put("se", Util.null2String(rs.getString("se"))); + dt6.put("wsje", Util.null2String(rs.getString("wsje"))); + dt6.put("fplxid", Util.null2String(rs.getString("fplxid"))); + dt6.put("dyfp", Util.null2String(rs.getString("dyfp"))); + dt6.put("sj", Util.null2String(rs.getString("sj"))); + dt6.put("zjid", Util.null2String(rs.getString("zjid"))); + dt6.put("pjly", Util.null2String(rs.getString("pjly"))); + resp.add(dt6); + } + return resp; + } + + public static List> getDt7s(String rid) throws Exception { + RecordSet rs = new RecordSet(); + List> resp = new ArrayList<>(); + String sql = String.format("select t1.jshjze, t1.sjhj, t1.bhshj, t1.pjlx\n" + + "from %s t1\n" + + "left join %s t2\n" + + "on t1.mainid=t2.id\n" + + "where t2.requestid=?", tableName + "_dt7", tableName); + rs.executeQuery(sql, rid); + while (rs.next()) { + Map dt6 = new HashMap<>(); + dt6.put("jshjze", Util.null2String(rs.getString("jshjze"))); + dt6.put("sjhj", Util.null2String(rs.getString("sjhj"))); + dt6.put("bhshj", Util.null2String(rs.getString("bhshj"))); + dt6.put("pjlx", Util.null2String(rs.getString("pjlx"))); + resp.add(dt6); + } + return resp; + } + + /** + * 明细8只汇总一条数据 + * + * @param rids 流程id,逗号分隔 + */ + public static List> getDt8s(String rids) throws Exception { + RecordSet rs = new RecordSet(); + PropBean pp = new PropBean(); + List> resp = new ArrayList<>(); + String replace = rids.replaceAll(",", "','"); + String sql = "select SQJE from UF_WWSQHZ where REQUID in ('" + replace + "')"; + rs.executeQuery(sql); + BigDecimal sum = BigDecimal.ZERO; + while (rs.next()) { + String sqje = Util.null2String(rs.getString("SQJE")); + sum = DoubleUtil.add(sum, new BigDecimal(sqje), 2); + } + ResourceComInfo rc = new ResourceComInfo(); + String creatorUid = pp.getPropName("StaffCodCreator"); + String prefix = pp.getPropName("UnionBudgetAccountPrefix"); + if (StringUtils.isEmpty(prefix)) { + throw new Exception("预算前缀值没有维护,请检查配置项:UnionBudgetAccountPrefix"); + } + String departmentID = rc.getDepartmentID(creatorUid); + LinkedHashMap dt8 = new LinkedHashMap<>(); + dt8.put("bhsje", sum.toString()); + dt8.put("sj", "0"); + dt8.put("jshjje", sum.toString()); + dt8.put("sy", ""); +// dt8.put("fysjcdbm", departmentID); + dt8.put("fysjcdbm", "1001"); //总部工会 + dt8.put("sl", "10"); + dt8.put("slz", "0.00"); + dt8.put("htbh", ""); + dt8.put("fycdbmfzr", getDepartLeader("1001")); +// dt8.put("fycdbmfzr", "35775"); + dt8.put("cys", ""); + dt8.put("mxfzzd", ""); + dt8.put("yskm", "50104"); //职工集体福利支出 + dt8.put("yskmid", prefix + "_50104"); + dt8.put("yskz", ""); + resp.add(dt8); + return resp; + } + + /** + * 只汇总一次明细13 + * + * @param rids 流程id,逗号分隔 + */ + public static List> getDt13s(String rids) throws Exception { + RecordSet rs = new RecordSet(); + String replace = rids.replaceAll(",", "','"); + String sql = "select t1.SQR,t2.LOGINID from UF_WWSQHZ t1\n" + + " left join HRMRESOURCE t2\n" + + " on t1.SQR=t2.ID where t1.REQUID in ('" + replace + "')"; + rs.executeQuery(sql); + List applies = new ArrayList<>(); + while (rs.next()) { + applies.add(Util.null2String(rs.getString("LOGINID"))); + } + return applies.stream() + .filter(StringUtils::isNotBlank) + .distinct() + .map(item -> StaffCodUtil.getBanks(item, rids)) + .collect(Collectors.toList()); + } + + public static String getDepartLeader(String departmentId) { + String sql = "select f.deptdirectors from hrmdepartmentdefined f where f.deptid = ?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, departmentId); + if (rs.next()) { + return rs.getString("deptdirectors"); + } + return ""; + } + + public static LinkedHashMap getBanks(String workCode, String rids) { + RecordSet rs = new RecordSet(); + LinkedHashMap resp = new LinkedHashMap<>(); + try { + ResourceComInfo rc = new ResourceComInfo(); + String uid = rc.getUserIdByLoginId(workCode); + String departmentID = rc.getDepartmentID(uid); + String replace = rids.replaceAll(",", "','"); + String sqlje = "select SQJE from UF_WWSQHZ where REQUID in ('" + replace + "') and sqr=?"; + rs.executeQuery(sqlje, uid); + BigDecimal sum = BigDecimal.ZERO; + while (rs.next()) { + String sqje = Util.null2String(rs.getString("SQJE")); + sum = DoubleUtil.add(sum, new BigDecimal(sqje), 2); + } + + String sql = "select GH,YXZH,KHX,SS,KHXMC from UF_ZBYGYHXX where GH=?"; + rs.executeQuery(sql, workCode); + rs.next(); + resp.put("ygxm", Util.null2String(uid)); + resp.put("bm", Util.null2String(departmentID)); + resp.put("ss", Util.null2String(rs.getString("SS"))); + resp.put("yxzh", Util.null2String(rs.getString("YXZH"))); + resp.put("yxzfje", sum.toString()); + resp.put("khx", Util.null2String(rs.getString("KHX"))); + resp.put("lsxx", ""); + resp.put("bz", ""); + resp.put("khxmc", Util.null2String(rs.getString("KHXMC"))); + resp.put("fycdbm", Util.null2String(departmentID)); + resp.put("szjg", ""); + resp.put("yggh", workCode); + + return resp; + } catch (Exception e) { + rs.writeLog(e.getMessage()); + } + return resp; + } +} diff --git a/src/main/java/com/engine/htsc/payment/util/StringUtil.java b/src/main/java/com/engine/htsc/payment/util/StringUtil.java new file mode 100644 index 0000000..b089217 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/util/StringUtil.java @@ -0,0 +1,57 @@ +package com.engine.htsc.payment.util; + +/** + * 字符串工具类 + * @author mage + * + */ +public class StringUtil { + + /** + * 判断是否是空 + * @param str + * @return + */ + public static boolean isEmpty(String str){ + if(str==null||"".equals(str.trim())){ + return true; + }else{ + return false; + } + } + + /** + * 判断是否不是空 + * @param str + * @return + */ + public static boolean isNotEmpty(String str){ + if((str!=null)&&!"".equals(str.trim())){ + return true; + }else{ + return false; + } + } + + + /** + * 生成四位编号 + * @param code + * @return + */ + public static String formatCode(String code){ + try { + int length = code.length(); + Integer num = Integer.valueOf(code.substring(length-4,length))+1; + String codenum = num.toString(); + int codelength = codenum.length(); + for (int i = 4; i > codelength; i--) { + codenum = "0"+codenum; + } + return codenum; + } catch (NumberFormatException e) { + return "0100"; + } + } + +} diff --git a/src/main/java/com/engine/htsc/payment/util/ToBigDecimalFunction.java b/src/main/java/com/engine/htsc/payment/util/ToBigDecimalFunction.java new file mode 100644 index 0000000..fe97161 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/util/ToBigDecimalFunction.java @@ -0,0 +1,8 @@ +package com.engine.htsc.payment.util; + +import java.math.BigDecimal; + +@FunctionalInterface +public interface ToBigDecimalFunction { + BigDecimal applyAsInt(T value); +} \ No newline at end of file diff --git a/src/main/java/com/engine/htsc/payment/util/TreeUtil.java b/src/main/java/com/engine/htsc/payment/util/TreeUtil.java new file mode 100644 index 0000000..99ec31f --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/util/TreeUtil.java @@ -0,0 +1,36 @@ +package com.engine.htsc.payment.util; + +import com.engine.htsc.payment.pojo.TreeNode; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.List; + +/** + * 树型数据工具类 + */ +public class TreeUtil { + + + public static List tree2list(List list, TreeNode node) { + List result = new ArrayList<>(); + for (TreeNode pNode : list) { + if (node != null) { + pNode.setPid(node.getId()); + pNode.setpCode(node.getProjectCode()); + pNode.setpName(node.getName()); + pNode.setKey(String.join("#", pNode.getId(), pNode.getType())); + } + List childrenNode = pNode.getChildren(); + if (CollectionUtils.isEmpty(childrenNode)) { + pNode.setKey(String.join("#", pNode.getId(), pNode.getType())); + pNode.setChildren(null); + result.add(pNode); + } else { + result.addAll(tree2list(childrenNode, pNode)); + } + } + return result; + } +} diff --git a/src/main/java/com/engine/htsc/payment/util/WorkflowCreateUtil.java b/src/main/java/com/engine/htsc/payment/util/WorkflowCreateUtil.java new file mode 100644 index 0000000..3b4edbf --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/util/WorkflowCreateUtil.java @@ -0,0 +1,85 @@ +package com.engine.htsc.payment.util; + +import com.weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.resource.ResourceComInfo; +import weaver.soa.workflow.request.MainTableInfo; +import weaver.soa.workflow.request.Property; +import weaver.soa.workflow.request.RequestInfo; +import weaver.soa.workflow.request.RequestService; +import weaver.workflow.request.RequestComInfo; +import weaver.workflow.workflow.WorkflowComInfo; + +import java.util.Map; + +public class WorkflowCreateUtil { + + /** + * + * @Title: 自动创建流程 + * @param @param creatorId 创建人Id + * @param @param workflowId 流程Id + * @param @param requestName 请求标题 + * @param @param IsNextFlow 是否提交到下一节点 + * @param @param requestMap Map格式的主表数据=<字段名称,字段值> + * @param @return 设定文件 + * @return String 返回类型 + * @throws + */ + public static String workflowCreateByRequestMap(String creatorId,String workflowId, + String requestName,String IsNextFlow, + Map requestMainMap) { + BaseBean bs = new BaseBean(); + String requestid = ""; + RequestInfo requestInfo = new RequestInfo(); + requestInfo.setCreatorid(creatorId);//创建人Id + requestInfo.setWorkflowid(workflowId);//工作流Id + requestInfo.setDescription(requestName);//请求标题 + if(!"".equals(IsNextFlow)) + { + requestInfo.setIsNextFlow(IsNextFlow); + } + //主表字段 + MainTableInfo mainTableInfo = new MainTableInfo(); + Property[] propertyArray = new Property[requestMainMap.size()]; + int p = 0; + for (Map.Entry entry : requestMainMap.entrySet()) + { + propertyArray[p] = new Property(); + propertyArray[p].setName(Util.null2String(entry.getKey())); + propertyArray[p].setValue(Util.null2String(entry.getValue())); + bs.writeLog("\r\n---p="+p+"---Key="+entry.getKey()+"---Value="+entry.getValue()); + p++; + } + bs.writeLog("-----创建流程传递的参数个数p="+p); + mainTableInfo.setProperty(propertyArray); + requestInfo.setMainTableInfo(mainTableInfo); + RequestService service = new RequestService(); + try { + //流程 + try { + requestid = service.createRequest(requestInfo);//创建请求id + } catch (Exception e) { + bs.writeLog("======="+e.getMessage()); + } + //String userId = requestInfo.getLastoperator();//请求最后的操作者 + //记录日志 + StringBuffer sbf = new StringBuffer("\r\n-----xwd创建工作流记录日志开始"); + WorkflowComInfo wfcif =new WorkflowComInfo(); + RequestComInfo rcif = new RequestComInfo(); + ResourceComInfo rscif = new ResourceComInfo(); + sbf.append("\r\n-----姓名:"+rscif.getLastname(rcif.getRequestCreater(requestid))); + sbf.append("\r\n-----时间:"+rcif.getRequestCreateTime(requestid)); + sbf.append("\r\n-----创建流程:"+wfcif.getWorkflowname(workflowId)); + sbf.append("\r\n-----请求:"+rcif.getRequestname(requestid)); + sbf.append("\r\n-----请求:"+requestid); + sbf.append("\r\n-----创建工作流记录日志结束"); + bs.writeLog(sbf.toString()); + System.out.println(""+sbf.toString()); + } catch (Exception e) { + bs.writeLog("错误:" + e); + System.out.println("错误:" + e); + } + return requestid; + } +} diff --git a/src/main/java/com/engine/htsc/payment/util/ZipUtils.java b/src/main/java/com/engine/htsc/payment/util/ZipUtils.java new file mode 100644 index 0000000..8c38f2f --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/util/ZipUtils.java @@ -0,0 +1,197 @@ +package com.engine.htsc.payment.util; + + +import cn.hutool.extra.pinyin.PinyinUtil; +import com.alibaba.fastjson.JSONObject; +import com.engine.htsc.payment.pojo.ZipModel; +import net.lingala.zip4j.io.outputstream.ZipOutputStream; +import net.lingala.zip4j.model.ZipParameters; +import net.lingala.zip4j.model.enums.AesKeyStrength; +import net.lingala.zip4j.model.enums.CompressionLevel; +import net.lingala.zip4j.model.enums.CompressionMethod; +import net.lingala.zip4j.model.enums.EncryptionMethod; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.interfaces.htsc.download.FileStream; + +import java.io.*; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +/** + * 附件下载 + */ +public class ZipUtils extends BaseBean { + + /** + * 根据分类目录获取文件集合 + * + * @param categoryName 分类目录名称 + * @param parentPath 父路径 + * @return file list + */ + public List getFilesByCategory(String categoryName, String parentPath) throws Exception { + RecordSet rs = new RecordSet(); + //按照目录路径配置 + String pinyinCategoryName = PinyinUtil.getFirstLetter(categoryName, ""); +// String sql = "SELECT t4.CATEGORYNAME,t3.IMAGEFILENAME,t3.FILEREALPATH,t3.IMAGEFILEID,t3.ISZIP,t2.DOCID,t3.IMAGEFILEID FROM DOCDETAIL t1\n" + +// "LEFT JOIN DOCIMAGEFILE t2\n" + +// "ON t1.ID = t2.DOCID \n" + +// "LEFT JOIN IMAGEFILE t3\n" + +// "ON t2.IMAGEFILEID = t3.IMAGEFILEID \n" + +// "LEFT JOIN DOCSECCATEGORY t4\n" + +// "ON t1.SECCATEGORY = t4.ID \n" + +// "WHERE t4.CATEGORYNAME = ?"; +// rs.executeQuery(sql, categoryName); +// List zips = new ArrayList<>(); +// while (rs.next()) { +// ZipModel zip = new ZipModel(parentPath + File.separator + pinyinCategoryName); +// zip.setDocId(Util.null2String(rs.getString("DOCID"))); +// zip.setImageFileId(Util.null2String(rs.getString("IMAGEFILEID"))); +// zip.setRealName(Util.null2String(rs.getString("IMAGEFILENAME"))); +// zip.setRealPath(Util.null2String(rs.getString("FILEREALPATH"))); +// zip.setIsZip(Util.null2String(rs.getString("ISZIP"))); +// zips.add(zip); +// } + + //从报销流程中获取数据 zbtybx,zbclbx,fzjgtybx,fzjgclbx + List tableUnNumber = Arrays.asList("zbtybx", "zbclbx", "fzjgtybx", "fzjgclbx"); + List categoryFromWfTable = getCategoryFromWfTable(tableUnNumber, pinyinCategoryName); + rs.writeLog("从报销流程中获取数据docid: zbtybx,zbclbx,fzjgtybx,fzjgclbx :" + JSONObject.toJSONString(categoryFromWfTable)); + List zips = new ArrayList<>(); + for (int i = 0; i < categoryFromWfTable.size(); i += 998) { + List con = categoryFromWfTable.stream() + .skip(i) + .limit(998) + .filter(StringUtils::isNotBlank) + .collect(Collectors.toList()); + String sql = "SELECT t3.IMAGEFILENAME,t3.FILEREALPATH,t3.IMAGEFILEID,t3.ISZIP,t2.DOCID,t3.IMAGEFILEID FROM DOCDETAIL t1\n" + + "LEFT JOIN DOCIMAGEFILE t2\n" + + "ON t1.ID = t2.DOCID \n" + + "LEFT JOIN IMAGEFILE t3\n" + + "ON t2.IMAGEFILEID = t3.IMAGEFILEID \n" + + "WHERE t2.DOCID in ('" + String.join(",", con).replace(",", "','") + "')"; + rs.executeQuery(sql); + while (rs.next()) { + ZipModel zip = new ZipModel(parentPath + File.separator + pinyinCategoryName); + zip.setDocId(Util.null2String(rs.getString("DOCID"))); + zip.setImageFileId(Util.null2String(rs.getString("IMAGEFILEID"))); + zip.setRealName(Util.null2String(rs.getString("IMAGEFILENAME"))); + zip.setRealPath(Util.null2String(rs.getString("FILEREALPATH"))); + zip.setIsZip(Util.null2String(rs.getString("ISZIP"))); + zips.add(zip); + } + } + + //判断CATEGORYNAME下是否有附件 + if (CollectionUtils.isEmpty(zips)) { + rs.writeLog(String.format("附件路径 %s 下没有附件,请检查目录是否维护", categoryName)); + } + //相同附件取最新版本 + zips = zips.stream().sorted(Comparator.comparingInt(z -> Integer.parseInt(z.getImageFileId()))) + .filter(distinctByName(ZipModel::getDocId)) + .collect(Collectors.toList()); + //生成写入的路径 + String path = parentPath + File.separator + pinyinCategoryName; // /app/ecology/filesystem/temp/zip/分类拼音简称 + File dir = new File(path); + if (dir.exists()) { + dir.delete(); + } + dir.setWritable(true, false); + dir.mkdirs(); + Runtime.getRuntime().exec("chmod -R 777" + path); + //生成目标文件集合 + List sourceFile = new ArrayList<>(); + for (ZipModel zip : zips) { + FileStream fileStream = new FileStream(zip.getRealPath(), "1"); + File file = new File(zip.getNewRealPathName()); + try (OutputStream os = new FileOutputStream(file)) { + fileStream.write(os); + } + sourceFile.add(file); + } + return sourceFile; + } + + /** + * 获取打包的文件夹 + * + * @param outputZipFile 输出zip文件 + * @param filesToAdd 需要打包的文件 + * @return zip file + */ + public File zipFiles(File outputZipFile, List filesToAdd) throws IOException { + ZipParameters zipParameters = buildZipParameters(CompressionMethod.DEFLATE, CompressionLevel.NORMAL, + false, + EncryptionMethod.ZIP_STANDARD, + null); + byte[] buff = new byte[4096]; + int readLen; + + try (ZipOutputStream zos = initializeZipOutputStream(outputZipFile, false, null)) { + for (File fileToAdd : filesToAdd) { + if (zipParameters.getCompressionMethod() == CompressionMethod.STORE) { + zipParameters.setEntrySize(fileToAdd.length()); + } + + zipParameters.setFileNameInZip(fileToAdd.getName()); + zos.putNextEntry(zipParameters); + + try (InputStream inputStream = new FileInputStream(fileToAdd)) { + while ((readLen = inputStream.read(buff)) != -1) { + zos.write(buff, 0, readLen); + } + } + zos.closeEntry(); + } + return outputZipFile; + } + } + + private ZipOutputStream initializeZipOutputStream(File outputZipFile, boolean encrypt, char[] password) + throws IOException { + FileOutputStream fos = new FileOutputStream(outputZipFile); + if (encrypt) { + return new ZipOutputStream(fos, password); + } + return new ZipOutputStream(fos); + } + + private ZipParameters buildZipParameters(CompressionMethod compressionMethod, CompressionLevel compressionLevel, + boolean encrypt, + EncryptionMethod encryptionMethod, AesKeyStrength aesKeyStrength) { + ZipParameters zipParameters = new ZipParameters(); + zipParameters.setCompressionMethod(compressionMethod); + zipParameters.setCompressionLevel(compressionLevel); + zipParameters.setEncryptionMethod(encryptionMethod); + zipParameters.setAesKeyStrength(aesKeyStrength); + zipParameters.setEncryptFiles(encrypt); + return zipParameters; + } + + private Predicate distinctByName(Function keyExtractor) { + Set seen = ConcurrentHashMap.newKeySet(); + return t -> seen.add(keyExtractor.apply(t)); + } + + private List getCategoryFromWfTable(List tablesUnNumber, String categoryNamePinYin) { + RecordSet rs = new RecordSet(); + rs.writeLog("table unnumber :" + tablesUnNumber); + List con = new ArrayList<>(); + String sql = "SELECT wm_concat_old(%s) AS docid FROM %s"; + for (String tableUnNumber : tablesUnNumber) { + String table = PayUtil.getTableNameByUnNumber(tableUnNumber); + rs.executeQuery(String.format(sql, categoryNamePinYin, table)); + if (rs.next()) { + con.add(Util.null2String(rs.getString("docid"))); + } + } + return con; + } +} diff --git a/src/main/java/com/engine/htsc/payment/util/pdf/HtmlToPdfUtil.java b/src/main/java/com/engine/htsc/payment/util/pdf/HtmlToPdfUtil.java new file mode 100644 index 0000000..96d6209 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/util/pdf/HtmlToPdfUtil.java @@ -0,0 +1,315 @@ +package com.engine.htsc.payment.util.pdf; + +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.RuntimeUtil; +import cn.hutool.core.util.ZipUtil; +import com.engine.htsc.payment.eusp.EUSPWsSoapClient; +import com.engine.htsc.payment.eusp.EUSPWsSoapClient2; +import org.apache.commons.lang3.StringUtils; +import sun.misc.BASE64Encoder; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.interfaces.htsc.download.FileStream; + +import java.io.*; + +public class HtmlToPdfUtil { + private static final BaseBean log = new BaseBean(); + private static final String logPre = " ===eusp=== "; + + // wkhtmltopdf在windows系统中的路径 + private static final String WKHTMLTOPDF_WINDOWS_URL = + "D:\\ecology\\wkhtmltopdf\\windows\\bin\\wkhtmltopdf.exe"; + // wkhtmltopdf在linux系统中的路径 + private static final String WKHTMLTOPDF_LINUX_URL = "wkhtmltopdf"; + + //临时解压文件存放路径 + private static final String TEMP_FILE_DIR = "/app/ecology/filesystem/temp/html2pdf"; + //静态文件访问路径 + private static final String STATIC_FILE_DIR = "/app/ecologystatic/htoa/interface/htsc/html2pdf"; + + private static final String RENAME = "temp.html"; + + /** + * 根据流程编号,获取流程pdf件 + * @param title 流程标题 + * @return pdf文件地址 + */ + public static synchronized String get(String title) throws Exception { + RecordSet rs = new RecordSet(); + rs.executeQuery(String.format("SELECT\n" + + "\tt1.imageFileId,\n" + + "\tt1.imageFileName,\n" + + "\tt1.fileRealPath,\n" + + "\tt1.isZip,\n" + + "\tt1.filesize\n" + + "FROM\n" + + "\tImageFile t1\n" + + "LEFT JOIN DocImageFile t2 ON\n" + + "\tt1.imagefileid = t2.imagefileid\n" + + "WHERE\n" + + "\tt2.IMAGEFILENAME = '%s_offline_pdf.pdf' ORDER BY IMAGEFILEID DESC ", title)); + String fileRealPath = ""; + String imageFileName = ""; + if (rs.next()) { + fileRealPath = Util.null2String(rs.getString("fileRealPath")); + imageFileName = Util.null2String(rs.getString("imageFileName")); + } + Assert.notBlank(fileRealPath, "流程附件信息为空:fileRealPath title : " + title); + Assert.notBlank(imageFileName, "流程附件信息为空:imageFileName title : " + title); + //生成临时文件路径 + File dir = new File(TEMP_FILE_DIR); + if (dir.exists()) { + dir.delete(); + } + dir.setWritable(true, false); + dir.mkdirs(); + File file = new File(TEMP_FILE_DIR + File.separator + imageFileName); //zip文件 + Runtime.getRuntime().exec("chmod -R 777" + file); + //系统解密解压 + FileStream fileStream; + try { + log.writeLog("执行第一次获取nas pdf文件"); + + fileStream = new FileStream(fileRealPath, "1"); + try (OutputStream os = new FileOutputStream(file)) { + fileStream.write(os); + return file.getAbsolutePath(); + } catch (Exception e) { + throw new Exception(e); + } + + } catch (Exception e) { + + try { + log.writeLog("执行第二次获取nas pdf文件"); + + fileStream = new FileStream(fileRealPath, "1"); + try (OutputStream os = new FileOutputStream(file)) { + fileStream.write(os); + return file.getAbsolutePath(); + } catch (Exception e1) { + throw new Exception(e1); + } + + } catch (Exception ex) { + throw new Exception("系统文件获取失败", ex); + } + + } + } + + /** + * 根据流程编号,获取流程pdf件 + * @param title 流程标题 + * @return pdf文件地址 + */ + public static synchronized String getPdfPathByTitle(String title) throws Exception { + RecordSet rs = new RecordSet(); + rs.executeQuery(String.format("SELECT\n" + + "\tt1.imageFileId,\n" + + "\tt1.imageFileName,\n" + + "\tt1.fileRealPath,\n" + + "\tt1.isZip,\n" + + "\tt1.filesize\n" + + "FROM\n" + + "\tImageFile t1\n" + + "LEFT JOIN DocImageFile t2 ON\n" + + "\tt1.imagefileid = t2.imagefileid\n" + + "WHERE\n" + + "\tt2.IMAGEFILENAME = '%s_offline_pdf.pdf' ORDER BY IMAGEFILEID DESC ", title)); + String fileRealPath = ""; + String imageFileName = ""; + if (rs.next()) { + fileRealPath = Util.null2String(rs.getString("fileRealPath")); + imageFileName = Util.null2String(rs.getString("imageFileName")); + } + Assert.notBlank(fileRealPath, "流程附件信息为空:fileRealPath title : " + title); + Assert.notBlank(imageFileName, "流程附件信息为空:imageFileName title : " + title); + //生成临时文件路径 + File dir = new File(TEMP_FILE_DIR); + if (dir.exists()) { + dir.delete(); + } + dir.setWritable(true, false); + dir.mkdirs(); + File file = new File(TEMP_FILE_DIR + File.separator + imageFileName); //zip文件 + Runtime.getRuntime().exec("chmod -R 777" + file); + //系统解密解压 + FileStream fileStream; + try { + log.writeLog("执行第一次获取nas pdf文件"); + + fileStream = new FileStream(fileRealPath, "1"); + try (OutputStream os = new FileOutputStream(file)) { + fileStream.write(os); + return file.getAbsolutePath(); + } catch (Exception e) { + throw new Exception(e); + } + + } catch (Exception e) { + + try { + log.writeLog("执行第二次获取nas pdf文件"); + + fileStream = new FileStream(fileRealPath, "1"); + try (OutputStream os = new FileOutputStream(file)) { + fileStream.write(os); + return file.getAbsolutePath(); + } catch (Exception e1) { + throw new Exception(e1); + } + + } catch (Exception ex) { + throw new Exception("系统文件获取失败", ex); + } + + } + } + + /** + * 同步pdf附件到新意平台 + */ + public static void sendPdfToEusp(String requestMark, String fileStream) { + EUSPWsSoapClient client = new EUSPWsSoapClient(); + + client.sendOAFile(requestMark, "pdf", fileStream); + + EUSPWsSoapClient2 client2 = new EUSPWsSoapClient2(); + + client2.sendOAFile(requestMark, "pdf", fileStream); + } + + /** + * 生成PDF文件 + * + * @param destPath 保存pdf地址 + */ + public static boolean toPdf(String destPath, String cmd) throws IOException { + File dir = new File(destPath); + if (dir.exists()) { + dir.delete(); + } + dir.setWritable(true, false); + dir.mkdirs(); + Runtime.getRuntime().exec("chmod -R 777" + dir); + log.writeLog("转pdf命令行:" + cmd); + boolean result = true; + try { + String response = RuntimeUtil.execForStr(cmd); + log.writeLog(response); + } catch (Exception e) { + result = false; + e.printStackTrace(); + } + + return result; + } + + /** + * 根据流程标题获取html文件路径 + * + * @param title 流程标题 + */ + public static void getHtmlPathByTitle(String title) throws Exception { + RecordSet rs = new RecordSet(); + rs.executeQuery(String.format("SELECT\n" + + "\tt1.imageFileId,\n" + + "\tt1.imageFileName,\n" + + "\tt1.fileRealPath,\n" + + "\tt1.isZip,\n" + + "\tt1.filesize\n" + + "FROM\n" + + "\tImageFile t1\n" + + "LEFT JOIN DocImageFile t2 ON\n" + + "\tt1.imagefileid = t2.imagefileid\n" + + "WHERE\n" + + "\tt2.IMAGEFILENAME = '%s_offline_html.zip'", title)); + String fileRealPath = ""; + String imageFileName = ""; + if (rs.next()) { + fileRealPath = Util.null2String(rs.getString("fileRealPath")); + imageFileName = Util.null2String(rs.getString("imageFileName")); + } + //系统解密解压 + FileStream fileStream = new FileStream(fileRealPath, "1"); + File file = new File(TEMP_FILE_DIR + File.separator + imageFileName); //zip文件 + try (OutputStream os = new FileOutputStream(file)) { + fileStream.write(os); + } + //zip文件解压到 /app/ecologystatic/htoa/interface/htsc/html2pdf/ + File dir = new File(STATIC_FILE_DIR); + if (dir.exists()) { + dir.delete(); + } + dir.setWritable(true, false); + dir.mkdirs(); + Runtime.getRuntime().exec("chmod -R 777" + dir); + File unzipFolder = ZipUtil.unzip(file.getAbsolutePath(), STATIC_FILE_DIR); + //html文件需要重命名 + File htmlFile = fileTypeUnderFolder(unzipFolder, ".html"); + renameFile(htmlFile); + //完整访问路径 "http://eipsit.htsc.com.cn/htoa/interface/htsc/html2pdf/temp.html" + } + + /** + * 指定路径下的html文件,解压后文件只存在一个html文件 + * + * @param file 指定文件夹 + * @return html文件绝对路径 + */ + private static File fileTypeUnderFolder(File file, String fileType) throws Exception { + File[] fs = file.listFiles(); + Assert.notNull(fs, "html所在文件夹为空"); + for (File f : fs) { + if (f.isDirectory()) //若是目录,跳过 + continue; + if (f.isFile() && f.getAbsolutePath().contains(fileType)) { //若是文件,返回文件 + return f; + } + } + return null; + } + + /** + * 文件重命名 + */ + private static void renameFile(File oldFile) throws Exception { + File newFile = new File(oldFile.getParentFile() + File.separator + RENAME); + //重命名文件不存在 + if (oldFile.exists()) { + boolean flag = oldFile.renameTo(newFile); + log.writeLog("文件重命名:" + flag); + } + } + + /** + * 文件流转string + */ + public static String read2String(String filePath) { + String ioStr = ""; + FileInputStream is = null; + try { + is = new FileInputStream(filePath); + byte[] in = new byte[is.available()]; + is.read(in, 0, in.length); + return new BASE64Encoder().encode(in); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (null != is) { + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return null; + + } + + +} diff --git a/src/main/java/com/engine/htsc/payment/web/BudgetInterfacelWeb.java b/src/main/java/com/engine/htsc/payment/web/BudgetInterfacelWeb.java new file mode 100644 index 0000000..9652b81 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/web/BudgetInterfacelWeb.java @@ -0,0 +1,447 @@ +package com.engine.htsc.payment.web; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.engine.htsc.payment.dao.BudgetDao; +import com.engine.htsc.payment.model.LeaderViewBaseModel; +import com.engine.htsc.payment.model.LeaderViewModel; +import com.engine.htsc.payment.service.BudgetService; +import com.engine.htsc.payment.service.impl.BudgetServiceImpl; +import com.engine.htsc.payment.service.impl.BxBudgetServiceImpl; +import com.engine.htsc.payment.service.impl.ClBxBudgetServiceImpl; +import com.engine.htsc.payment.util.PayUtil; +import com.engine.htsc.trip.util.AjaxResult; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.conn.RecordSetDataSource; +import weaver.general.Util; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.interfaces.htsc.cus.HTUtil; +import weaver.interfaces.htsc.cwtz.AddBudgetMidTable; +import weaver.interfaces.htsc.payment.PrePaymentInterfaceInvoke; +import weaver.soa.workflow.request.RequestInfo; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; + +/** + * 预算接口, 帆帆 + */ +public class BudgetInterfacelWeb { + + + //入参日期格式 + static DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + + BudgetDao budgetDao = new BudgetDao(); + + + /** + * 同步财务调增到预算系统中间表 + * @return + */ + @POST + @Path("/reSyncFinancialAdjustToBudgetMiddle") + public AjaxResult reSyncFinancialAdjust(){ + try { + AddBudgetMidTable addBudgetMidTable = new AddBudgetMidTable(); + RecordSet rs = new RecordSet(); + String sql = "select t.reqid,t.lcbh from uf_dsrwdb t where t.rwlx='CWTZYS'"; + rs.executeQuery(sql); + while (rs.next()){ + RequestInfo requestInfo = new RequestInfo(); + requestInfo.setRequestid(Util.null2String(rs.getString("reqid"))); + addBudgetMidTable.execute(requestInfo); + } + return AjaxResult.ok("success"); + }catch (Exception e){ + e.printStackTrace(); + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 查询领导者视图 + * @return + */ + @POST + @Path("/queryLeaderView") + @Produces({MediaType.APPLICATION_JSON}) + public AjaxResult> queryLeaderView(@Context HttpServletRequest request){ + //当前操作者id + List leaderViewModelList = new ArrayList<>(); + String operator = Util.null2String(request.getParameter("operatorId")); + String requestId = Util.null2String(request.getParameter("requestId")); + /** + * 测试时的代码 + */ +// requestId = "5776780"; +// operator = "26377"; + //生产删除 + List bmidList = new ArrayList<>(); +// String queryBmid = " select deptid from HRMDEPARTMENTDEFINED t where ','||t.deptdirectors||',' like '%," + operator + ",%' "; + String queryBmid = " select departmentid from hrmresource t where t.id= " + operator; + RecordSet rs = new RecordSet(); + rs.executeQuery(queryBmid); + while (rs.next()){ + bmidList.add(Util.null2String(rs.getString("departmentid"))); + } + Map allBudget = JAVATools.getAllBudget(); + Map> leaderViewMap = new HashMap<>(); + String queryLeaderView = " select t.REQUESTID,t.LCBH,t.YSKMBM,t.YSKMMC,t.YSKMBMLJ,t.YSKMMCLJ,t.LJYZS,t.LJZXS,t.YSS,t.LJYYBFB,t.BMID,t.BMMC,t.BMBM,t.groupid from uf_leaderView t"; + rs.execute(queryLeaderView); + while (rs.next()){ + Map leaderView = new HashMap<>(); + leaderView.put("YSKMBM",rs.getString("YSKMBM")); + leaderView.put("YSKMMC",rs.getString("YSKMMC")); + leaderView.put("YSKMBMLJ",rs.getString("YSKMBMLJ")); + leaderView.put("YSKMMCLJ",rs.getString("YSKMMCLJ")); + leaderView.put("LJYZS",rs.getString("LJYZS")); + leaderView.put("LJZXS",rs.getString("LJZXS")); + leaderView.put("YSS",rs.getString("YSS")); + leaderView.put("LJYYBFB",rs.getString("LJYYBFB")); + leaderView.put("BMID",rs.getString("BMID")); + leaderView.put("BMMC",rs.getString("BMMC")); + leaderView.put("BMBM",rs.getString("BMBM")); + leaderViewMap.put(rs.getString("YSKMBM") + "-" + rs.getString("BMID"), leaderView); + } + + RecordSet rst = new RecordSet(); + if(CollectionUtils.isNotEmpty(bmidList)) { + String bmIdStr = StringUtils.join(bmidList, "','"); + String sql = " select t.REQUESTID,t.LCBH,t.YSKMBM,t.YSKMMC,t.YSKMBMLJ,t.YSKMMCLJ,t.BMID,t.BMMC,t.BMBM,t.groupid " + + " from uf_leaderViewBase t where requestid = " + requestId +" and bmid in ('" + bmIdStr + "')"; + JAVATools.writelog("queryLeaderViewBase endSql :" + sql); + rst.executeQuery(sql); + while (rst.next()){ + LeaderViewModel leaderViewModel = new LeaderViewModel(); + String YSKMBMLJ = Util.null2String(rst.getString("YSKMBMLJ")); + String level2Code = YSKMBMLJ.split("-")[1]; + String bmid = Util.null2String(rst.getString("BMID")); + leaderViewModel.setYskmbm(level2Code); + leaderViewModel.setYskmmc(allBudget.get(level2Code)); + leaderViewModel.setDeptId(bmid); + leaderViewModel.setDeptCode(Util.null2String(rst.getString("BMBM"))); + leaderViewModel.setDeptName(Util.null2String(rst.getString("BMMC"))); + Map stringObjectMap = leaderViewMap.get(level2Code + "-" + bmid); + leaderViewModel.setTotalBudget(stringObjectMap.get("YSS").toString()); + leaderViewModel.setPreUsedBudget(stringObjectMap.get("LJYZS").toString()); + leaderViewModel.setUsedBudget(stringObjectMap.get("LJZXS").toString()); + leaderViewModel.setUsedPercent(stringObjectMap.get("LJYYBFB").toString()); +// + List baseModelList = new ArrayList<>(); + String groupid = rst.getString("groupid"); + String sqlGroup = " select t.REQUESTID,t.LCBH,t.YSKMBM,t.YSKMMC,t.YSKMBMLJ,t.YSKMMCLJ,t.BMID,t.BMMC,t.BMBM,t.groupid " + + " from uf_leaderViewBase t where groupid ='" + groupid + "' and t.REQUESTID is null order by id"; + RecordSet rstq = new RecordSet(); + rstq.executeQuery(sqlGroup); + while (rstq.next()){ + LeaderViewBaseModel baseModel = new LeaderViewBaseModel(); + String yskmbm = Util.null2String(rstq.getString("YSKMBM")); + baseModel.setYskmbm(yskmbm); + baseModel.setYskmmc(Util.null2String(rstq.getString("YSKMMC"))); + baseModel.setUsedPercent(Util.null2String(rstq.getString("LJYYBFB"))); + Map stringObjectMapsub = leaderViewMap.get(yskmbm + "-" + bmid); + baseModel.setTotalBudget(stringObjectMapsub.get("YSS").toString()); + baseModel.setPreUsedBudget(stringObjectMapsub.get("LJYZS").toString()); + baseModel.setUsedBudget(stringObjectMapsub.get("LJZXS").toString()); + baseModel.setUsedPercent(stringObjectMapsub.get("LJYYBFB").toString()); + baseModelList.add(baseModel); + } + leaderViewModel.setYskmList(baseModelList); + leaderViewModelList.add(leaderViewModel); + + } + return AjaxResult.ok(leaderViewModelList); + } + + return AjaxResult.error(); + + } + + @POST + @Path("/reSyncHesuan") + @Produces(MediaType.APPLICATION_JSON) + public String reSyncHesuan(@Context HttpServletRequest request) throws Exception{ + String requestIds = Util.null2String(request.getParameter("requestIds")); + String tableName = Util.null2String(request.getParameter("tableName")); + String[] requestIdList = requestIds.split(","); + PrePaymentInterfaceInvoke prePaymentInterfaceInvoke = new PrePaymentInterfaceInvoke(); + for(String reqId : requestIdList){ + prePaymentInterfaceInvoke.doBudgetCost(reqId, tableName); + } + return "success"; + } + + + @POST + @Path("/reSyncMiddle") + @Produces(MediaType.APPLICATION_JSON) + public String reSyncBudgetMiddle(@Context HttpServletRequest request) { + String requestIds = Util.null2String(request.getParameter("requestIds")); + List requestIdList = Arrays.asList(requestIds.split(",")); + BudgetServiceImpl budgetService = new BudgetServiceImpl(); + BxBudgetServiceImpl bxBudgetService = new BxBudgetServiceImpl(); + ClBxBudgetServiceImpl clBxBudgetService = new ClBxBudgetServiceImpl(); + for (String requestId : requestIdList) { + String tableName = ""; + String code = ""; + String lcbh = ""; + //获取流程类型获取其主表名 + String sql = "select t1.tablename, t2.ECOLOGY_PINYIN_SEARCH as code,t2.WORKFLOWNAME\n" + + " from workflow_bill t1, workflow_base t2, workflow_requestbase t3\n" + + " where t1.id = t2.formid\n" + + " and t2.id = t3.workflowid\n" + + " and t3.requestid = " + requestId; + RecordSet rs = new RecordSet(); + JAVATools.writelog("requestId:" + requestId + "根据requestId获取流程类型和主表名Sql: " + sql); + rs.executeQuery(sql); + if (rs.next()) { + tableName = Util.null2String(rs.getString("tableName")); + code = Util.null2String(rs.getString("code")); + } + if (StringUtils.isNotEmpty(tableName)) { + String sqlMain = "select lcbh from " + tableName + " where requestId = " + requestId; + rs.execute(sqlMain); + if (rs.next()) { + lcbh = Util.null2String(rs.getString("lcbh")); + } + } + RecordSetDataSource rsdM = new RecordSetDataSource("BudgetRecords"); + String budgetTableName = new PropBean().getPropName("BudgetTableName"); + String sql1 = "select t.FBILLSTATUS,t.FBIZDATE from " + budgetTableName + " t where t.FNAME = '" + lcbh + "'"; + String status = ""; + String fdate=""; + rsdM.execute(sql1); + if (rsdM.next()) { + status = Util.null2String(rsdM.getString("fbillstatus")); + fdate = Util.null2String(rsdM.getString("fbizdate")); + } + if (StringUtils.isNotEmpty(status)) { + if ("zbghfk".equals(code) || "yfkfyqr".equals(code) || "zbitfk".equals(code) || "zbtyfk".equals(code) || "fzjgtyfk".equals(code) || "fyft".equals(code)) { + //通用付款 + JAVATools.writelog("requestId:" + requestId + "lcbh: " + lcbh + "status:" + status); + String sqlFK = "select fkxx,fklx from " + tableName + " where requestId = " + requestId; + rs.execute(sqlFK); + String fkxx = ""; + boolean isItFlag = false; + if (rs.next()) { + fkxx = Util.null2String(rs.getString("fkxx")); + isItFlag = "1".equals(Util.null2String(rs.getString("fklx"))); + } + String dtTable = "0".equals(fkxx) ? tableName + "_dt8" : tableName + "_dt9"; + budgetService.doBudgetMiddleTable(lcbh, status, fdate, dtTable, tableName, isItFlag); + } else if ("zbtybx".equals(code) || "fzjgtybx".equals(code)) { + //通用报销 + JAVATools.writelog("requestId:" + requestId + "lcbh: " + lcbh + "status:" + status); + bxBudgetService.doBudgetMiddleTable(lcbh, status,fdate, Arrays.asList(tableName + "_dt8", tableName + "_dt9"), tableName); + } else if ("zbclbx".equals(code) || "fzjgclbx".equals(code)) { + //差旅报销 + JAVATools.writelog("requestId:" + requestId + "lcbh: " + lcbh + "status:" + status); + clBxBudgetService.doBudgetMiddleTable(lcbh, status,fdate, Arrays.asList(tableName + "_dt9"), tableName); + } + } + } + return "success"; + } + + @POST + @Path("/SyncbugetLC") + @Produces(MediaType.APPLICATION_JSON) + public String SyncbugetLC(@Context HttpServletRequest request) { + JSONObject returnobject = new JSONObject(); + String requestids = Util.null2String(request.getParameter("requestid")); + String modetable = Util.null2String(request.getParameter("modetable")); + String billStatus = Util.null2String(request.getParameter("billStatus")); + String datavalue = ""; + // RequestManager requestManager = requestInfo.getRequestManager(); + try { + if ("".equals(requestids) || "".equals(modetable)) { + returnobject.put("code", "201"); + returnobject.put("error", "没有传参"); + return returnobject.toJSONString(); + } + //get参数放sql注入 + modetable = JAVATools.getpreventsql(modetable); + requestids = JAVATools.getpreventsql(requestids); + + + // 主表 + + for (String requestId : requestids.split(",")) { + + String tableName = JAVATools.getMaintable(requestId);// requestManager.getBillTableName(); + + boolean flag = service(requestId, tableName, billStatus, modetable); + if (!flag) { + datavalue += requestId + ","; + } + + } + if (!"".equals(datavalue) && datavalue.length() > 1) { + datavalue = datavalue.substring(0, datavalue.length() - 1); + } + returnobject.put("code", "200"); + returnobject.put("data", datavalue); + + + return returnobject.toJSONString(); + } catch (Exception e) { + + returnobject.put("code", "500"); + returnobject.put("error", "发生异常:" + e.getMessage()); + return returnobject.toJSONString(); + } + } + + private Boolean service(String requestId, String tableName, String billStatus, String ModeTable) throws Exception { + JSONObject params = new JSONObject(); + JSONObject returnobject = new JSONObject(); + RecordSet rs = new RecordSet(); + Boolean flag = true; + ResourceComInfo rc = new ResourceComInfo(); + DepartmentComInfo dc = new DepartmentComInfo(); + + // String requestId = requestInfo.getRequestid(); + String budgetInvokeParam = budgetDao.mainFieldParam(tableName, requestId); + rs.executeQuery(budgetInvokeParam); + String bz = "0"; //对应fkxx字段 + String lcbh = ""; + String requestname = ""; + String ngr = ""; + String mainId = ""; + if (rs.next()) { + lcbh = Util.null2String(rs.getString("lcbh")); + ngr = Util.null2String(rs.getString("ngr")); + mainId = Util.null2String(rs.getString("id")); + bz = Util.null2String(rs.getString("fkxx")); + requestname = Util.null2String(rs.getString("requestname")); + + } + + + String yskmTable = tableName + "_dt8"; //预算科目表,本币dt8,外币dt9,主表字段fkxx区分 + if ("1".equals(bz)) { + yskmTable = tableName + "_dt9"; + } + params.put("billnum", requestId); + params.put("billname", lcbh); + params.put("billstatus", billStatus); + params.put("billtitle", requestname); + params.put("personName", rc.getLastname(ngr)); + params.put("bizdate", df.format(LocalDateTime.now())); + JAVATools.SetCmdwritelog("同步到浪潮预算", ">>主表字段获取: @" + params + "@"); + rs.executeQuery(budgetDao.isItPay(tableName, lcbh)); + + boolean isItFlag = false; + if (rs.next()) { + if ("1".equals(Util.null2String(rs.getString("FKLX")))) { + isItFlag = true; + } + } + JSONArray levelList = new JSONArray(); + + String yskmTableFieldParam = budgetDao.yskmTableFieldParam(yskmTable, mainId); + rs.executeQuery(yskmTableFieldParam); + int i = 1; + while (rs.next()) { + JSONObject level = new JSONObject(); + String fycdbmfzr = Util.null2String(rs.getString("fycdbmfzr")); //费用承担部门负责人 + String fysjcdbm = Util.null2String(rs.getString("fysjcdbm")); //费用承担部门 + String yskm = Util.null2String(rs.getString("yskm")); //预算科目 + level.put("employeeNum", PayUtil.splitBmfzrThenJoin(fycdbmfzr, rc)); + level.put("deptNum", fysjcdbm); + level.put("bgitem", PayUtil.superBudgetSubject(yskm)); //上级科目编码 + level.put("bgElement", "0101"); // 费用类型编码(默认传0101) + level.put("billEntryID", UUID.randomUUID().toString() + "#" + i); + level.put("itemEntryNum", yskm); + //科目对应金额 + level.putAll(getKjKmCharges(yskmTable, mainId, isItFlag)); + levelList.add(level); + i++; + } + if (i == 1) { + //没有明细 + JAVATools.SetCmdwritelog("同步到浪潮预算" + requestId, "没有分摊的预算科目,流程提交"); + return true; + } + params.put("list", levelList); + Map dataMap = new HashMap<>(); + dataMap.put("data", params); + JAVATools.SetCmdwritelog("同步到浪潮预算" + requestId, ">>预算接口调用参数 params : @" + params + "@"); + String resp = new HTUtil().budgetCommit(dataMap); + JAVATools.SetCmdwritelog("同步到浪潮预算" + requestId, ">>预算接口调用返回 resp : @" + resp + "@"); + if (!"F1001".equals(resp)) { + flag = false; + JAVATools.SetCmdwritelog("同步到浪潮预算" + requestId, "预算接口执行失败!返回值" + resp); + } else { + BudgetService bds = new BudgetServiceImpl(); + boolean isUpdate = true; + // bds.doBudgetMiddleTable(lcbh, billStatus, yskmTable, tableName, isItFlag); + isUpdate = bds.dobugetModeUpdateYs(requestId, ModeTable); + + + if (isUpdate) { + + flag = true; + } else { + JAVATools.SetCmdwritelog("同步到浪潮预算:" + requestId, "节点后附加操作更新预算表失败!返回值"); + flag = false; + } + } + + return flag; + } + + /** + * 预算明细表8或9 取科目对应数据 + * 金额,是否超标,实际金额,标准金额,不含税价金额,税金 + * + * @param budgetKmTable 预算明细表 + * @param mainId 流程mainId + * @param isIt 是否it付款 + * @return map + */ + public JSONObject getKjKmCharges(String budgetKmTable, String mainId, boolean isIt) { + RecordSet rs = new RecordSet(); + JSONObject subParam = new JSONObject(); + String yskmAmountParam = budgetDao.budgetKmTableInfo(budgetKmTable, mainId, isIt); + rs.executeQuery(yskmAmountParam); + if (rs.next()) { + if (budgetKmTable.toLowerCase().contains("dt8")) { + String JSHJJE = Util.null2String(rs.getString("JSHJJE")); + String CYS = Util.null2String(rs.getString("CYS")); + String BHSJE = Util.null2String(rs.getString("BHSJE")); + String SJ = Util.null2String(rs.getString("SJ")); + subParam.put("amount", JSHJJE); // 金额 + subParam.put("overweight", PayUtil.overWeight(CYS)); // 是否超标 + subParam.put("actualAmount", ""); // 实际金额 + subParam.put("standardAmount", ""); // 标准金额 + subParam.put("notaxAmount", BHSJE); // 不含价税金额 + subParam.put("taxAmount", SJ); //税金 + } else { + String JSHJJE = Util.null2String(rs.getString("rmbje")); // 人民币金额 + String CYS = Util.null2String(rs.getString("CYS")); + subParam.put("amount", JSHJJE); // 金额 + subParam.put("overweight", PayUtil.overWeight(CYS)); // 是否超标 + subParam.put("actualAmount", ""); // 实际金额 + subParam.put("standardAmount", ""); // 标准金额 + subParam.put("notaxAmount", "0.00"); // 不含价税金额 + subParam.put("taxAmount", "0.00"); //税金 + } + + } + return subParam; + } +} diff --git a/src/main/java/com/engine/htsc/payment/web/DownLoadPaymentTemplateAction.java b/src/main/java/com/engine/htsc/payment/web/DownLoadPaymentTemplateAction.java new file mode 100644 index 0000000..fdeb91e --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/web/DownLoadPaymentTemplateAction.java @@ -0,0 +1,61 @@ +package com.engine.htsc.payment.web; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLDecoder; +import java.net.URLEncoder; + +public class DownLoadPaymentTemplateAction extends HttpServlet { + private static final long serialVersionUID = 1L; + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) + throws ServletException, IOException { + this.doPost(req, resp); + } + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) + throws ServletException, IOException { + OutputStream outputStream =null; + InputStream inputStream =null; + try { + req.setCharacterEncoding("utf-8"); + String fileName = req.getParameter("fileName"); + String fileName_cn = "付款明细模板.xlsx";//req.getParameter("fileNameCN"); + fileName= URLDecoder.decode(fileName,"UTF-8"); + String filePath = System.getProperty("sysRootDir") + File.separator + "WEB-INF" + File.separator + "paymenttemplate" + File.separator + fileName; + File file = new File(filePath); + if(file.exists()){ + if (req.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) { + fileName_cn = URLEncoder.encode(fileName_cn, "UTF-8"); + } else { + fileName_cn = new String(fileName_cn.getBytes("UTF-8"), "ISO8859-1"); + } + resp.setHeader("Content-Disposition","attachment;filename=\""+fileName_cn+"\""); + outputStream = resp.getOutputStream(); + inputStream = new FileInputStream(file); + byte b [] =new byte[1024]; + int length=0; + while (-1!=(length=inputStream.read(b, 0, b.length))) { + outputStream.write(b,0,length); + } + resp.flushBuffer(); + }else{ + resp.setContentType("text/html;charset=utf-8"); +// resp.setCharacterEncoding("utf-8"); + resp.getWriter().write("

没有找到需要的文件

"); + resp.flushBuffer(); + } + } catch (Exception e) { + }finally{ + if(null!=inputStream){ + inputStream.close(); + } + if(null!=outputStream){ + outputStream.close(); + } + } + } +} diff --git a/src/main/java/com/engine/htsc/payment/web/GeneralPaymentAction.java b/src/main/java/com/engine/htsc/payment/web/GeneralPaymentAction.java new file mode 100644 index 0000000..bd170b8 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/web/GeneralPaymentAction.java @@ -0,0 +1,372 @@ +package com.engine.htsc.payment.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.payment.enums.Sequences; +import com.engine.htsc.payment.pojo.BudgetReqDto; +import com.engine.htsc.payment.service.PaymentService; +import com.engine.htsc.payment.service.impl.HeadPaymentBudgetCommand; +import com.engine.htsc.payment.service.impl.PaymentServiceImpl; +import com.engine.htsc.payment.util.CoWfUtil; +import com.engine.htsc.trip.util.AjaxResult; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.Validate; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.resource.ResourceComInfo; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.*; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author K1810012 + * 通用付款 + */ +public class GeneralPaymentAction { + + public GeneralPaymentAction() { + } + + /** + * 预算service + * + * @return BudgetService + */ + private PaymentService getServices() { + return ServiceUtil.getService(PaymentServiceImpl.class); + } + + @GET + @Path("/getWorkflowInfos") + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult> getWorkflowInfos(@QueryParam("requestmark") String lcbh) { + try { + Map resp = new HashMap<>(); + Validate.notEmpty(lcbh, "流程编号为空"); + String sql = "SELECT REQUESTID,WORKFLOWID,REQUESTNAME FROM workflow_requestbase WHERE requestmark=?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, lcbh); + if (rs.next()) { + resp.put("REQUESTID", Util.null2String(rs.getString("REQUESTID"))); + resp.put("WORKFLOWID", Util.null2String(rs.getString("WORKFLOWID"))); + resp.put("REQUESTNAME", Util.null2String(rs.getString("REQUESTNAME"))); + } + if (resp.isEmpty()) { + return AjaxResult.failed("单号不存在或已删除!"); + } + return AjaxResult.ok(resp); + } catch (Exception e) { + return AjaxResult.error("获取流程信息,发生异常:" + e.getMessage()); + } + } + + @GET + @Path("/check/requestMark") + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult checkRequestMark(@QueryParam("lcbh") String lcbh, + @QueryParam("type") String type, + @QueryParam("unNumber") String unNumber) { + try { + //检查流程编号唯一性 + String newRequestMark = this.getServices().checkRequestMark(lcbh, type, unNumber); + return AjaxResult.ok(newRequestMark); + } catch (Exception e) { + return AjaxResult.error("生成流程编号失败,发生异常:" + e.getMessage()); + } + } + + @GET + @Path("/create/requestMark") + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult createReqMark(@QueryParam("unNumber") String unNumber, + @QueryParam("type") String type) { + try { + Sequences sequences = null; + if ("zb".equalsIgnoreCase(type)) { + sequences = Sequences.NET_REI_WORKFLOW_SEQ_ZB; + } else if ("fz".equalsIgnoreCase(type)) { + sequences = Sequences.NET_REI_WORKFLOW_SEQ_FZ; + } else if ("zgs".equalsIgnoreCase(type)) { + sequences = Sequences.NET_REI_WORKFLOW_SEQ_ZGS; + } else { + throw new Exception("流程类型没有匹配"); + } + String requestMarkByUnNumber = CoWfUtil.getRequestMarkByUnNumber(unNumber, sequences); + return AjaxResult.ok(requestMarkByUnNumber); + } catch (Exception e) { + return AjaxResult.error("生成流程编号失败,发生异常:" + e.getMessage()); + } + } + + /** + * @param bgReq + * @return + */ + @POST + @Path("/travel/controlBudget") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult> travelControlBudget(BudgetReqDto bgReq) { + try { + Map resp = this.getServices().controlBudget(bgReq); + return AjaxResult.ok(resp); + } catch (Exception e) { + return AjaxResult.error("总部差旅报销超预算控制,发生异常:" + e.getMessage()); + } + } + + + /** + * 流程终止取消预算 + * + * @return msg + */ + @POST + @Path("/doBudget/terminate") + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult wfCancelBudgetWhenTermination(@Context HttpServletRequest request) { + try { + Map reqParams = ParamUtil.request2Map(request); + String requestNo = (String) reqParams.getOrDefault("requestNo", ""); + HeadPaymentBudgetCommand command = new HeadPaymentBudgetCommand(); + String reject = command.reject(requestNo); + return AjaxResult.ok(reject); //f1001成功 + } catch (Exception e) { + return AjaxResult.error("总部差旅报销超预算控制,发生异常:" + e.getMessage()); + } + } + + /** + * 出纳付款,付款明细导出状态修改 + * + * @return msg + */ + @POST + @Path("/doExport") + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult doExport(@Context HttpServletRequest request) { + try { + Map request2Map = ParamUtil.request2Map(request); + String id = (String) request2Map.getOrDefault("id", ""); + String type = (String) request2Map.getOrDefault("type", ""); + String msg = getServices().doExport(id, type); + return AjaxResult.ok(msg); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("catch exception:" + e); + } + } + + /** + * 出纳付款,点击手动付款按钮更新状态 + * + * @return ContractInfoVo + */ + @GET + @Path("/doManualPayment") + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult doPaymentByManual(@QueryParam("id") String id) { + try { + String resultStr = getServices().updateManualPaymentStatus(id); + return AjaxResult.ok(resultStr); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("catch exception:" + e); + } + } + + + /** + * 通用付款流程,对应流程生成流程编号 + * 调用时确保为创建 isCreate=1 + * + * @return ContractInfoVo + */ + @GET + @Path("/generator/requestMark") + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult getGeneratedRequestMark(@Context HttpServletRequest request) { + try { + String mark = getServices().generateRequestMark(request); + return AjaxResult.ok(mark); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("catch exception:" + e); + } + } + + /** + * 通用付款流程,核算接口调用 + * + * @return 核算接口返回值 + */ + @POST + @Path("/cost/account") + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult> doCostAccounting(@Context HttpServletRequest request) { + try { + String res = ""; + Map request2Map = ParamUtil.request2Map(request); + String ids = Util.null2String(request2Map.get("ids")); //勾选核算id + if (StringUtils.isNotBlank(ids)) { + List> maps = getServices().doCostAccount(ids); + return AjaxResult.ok(mergeValue(maps), "核算接口返回成功"); + } else { + throw new Exception("请勾选相关流程进行核算"); + } + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("catch exception: " + e); + } + } + + /** + * 通用付款流程,付款接口调用 付款=预算+核算 + * + * @return 付款接口返回值 + */ + @POST + @Path("/doPayment") + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult> doPayment(@Context HttpServletRequest request) { + try { + List> res = new ArrayList<>(); + Map request2Map = ParamUtil.request2Map(request); + String ids = Util.null2String(request2Map.get("ids")); //勾选核算id + if (StringUtils.isNotBlank(ids)) { + res = getServices().doPayment(ids); + } else { + throw new Exception("请勾选相关流程进行核算"); + } + return AjaxResult.ok(mergeValue(res), "付款接口返回成功"); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("catch exception: " + e); + } + } + + @POST + @Path("/doBudget") + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult> doBudget(@Context HttpServletRequest request) { + try { + Map param = ParamUtil.request2Map(request); + String ids = Util.null2String(param.getOrDefault("ids", "")); + String discard = Util.null2String(param.getOrDefault("discard", "")); + List> resp = new ArrayList<>(); + Map mp = this.getServices().doBudget(ids, discard); + resp.add(mp); + //汇总list + return AjaxResult.ok(mergeValue(resp)); + } catch (Exception e) { + return AjaxResult.error("发生异常,请联系管理员,异常信息" + e.getMessage() + ""); + } + } + + /** + * 通用付款流程功能 + * 判断部门等级, + * =1, 取当前部门负责人 + * =2, 取上级部门负责人 + * + * @return 负责人 浏览按钮 + */ + @GET + @Path("/check/deptLevel/{id}") + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult> checkDeptLevel(@PathParam("id") String id) { + Map res = new HashMap<>(); + try { + ResourceComInfo rc = new ResourceComInfo(); + RecordSet rs = new RecordSet(); + String deptLevel = ""; + String deptDirectors = ""; + rs.executeQuery("select DEPTDEPTH,DEPTDIRECTORS\n" + + " from hrmdepartmentdefined m\n" + + " where DEPTID = " + id); + if (rs.next()) { + deptLevel = Util.null2String(rs.getString("DEPTDEPTH")); + deptDirectors = Util.null2String(rs.getString("DEPTDIRECTORS")); + } + List> specialObj = new ArrayList<>(); + if ("1".equals(deptLevel)) { + //当前部门等级为1级,直接取 deptDirectors + res.put("value", deptDirectors); + String[] directors = deptDirectors.split(","); + for (String director : directors) { + Map map = new HashMap<>(); + map.put("id", director); + map.put("name", rc.getLastname(director)); + specialObj.add(map); + } + res.put("specialobj", specialObj); + } else if ("2".equals(deptLevel)) { + //当前部门等级为2级,取上级 deptDirectors + rs.executeQuery("select DEPTDIRECTORS\n" + + " from hrmdepartmentdefined m\n" + + " where m.deptid in (select t.SUPDEPID\n" + + " from hrmdepartment t\n" + + " where t.id = " + id + ")"); + if (rs.next()) { + deptDirectors = Util.null2String(rs.getString("DEPTDIRECTORS")); + } + res.put("value", deptDirectors); + String[] directors = deptDirectors.split(","); + for (String director : directors) { + Map map = new HashMap<>(); + map.put("id", director); + map.put("name", rc.getLastname(director)); + specialObj.add(map); + } + res.put("specialobj", specialObj); + + } else { + res.put("value", ""); + res.put("specialobj", specialObj); + } + return AjaxResult.ok(res, "判断部门等级,联动负责人"); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("catch exception: " + e); + } + } + + public static Map mergeValue(List> sources) { + return sources.stream() + .flatMap(m -> m.entrySet().stream()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a, b) -> String.join(";", a, b))); + } + + /* + * 总部付款建模付款成功后同步更新流程主表中的付款状态流程 + * 目前只针对总部IT付款流程 + * */ + @POST + @Path("/upitmainfkzt") + public String upItMainFKZT(@Context HttpServletRequest request){ + BaseBean bb = new BaseBean(); + bb.writeLog("=================付款成功,准备同步更新主表的付款状态字段为0============="); + Map result; + Map paramsMap = new HashMap<>(); + paramsMap.put("ids",Util.null2String(request.getParameter("ids"))); + result = getServices().upMainFKZT(paramsMap); + return JSONObject.toJSONString(result); + } +} + + diff --git a/src/main/java/com/engine/htsc/payment/web/HeadGeneralPaymentAction.java b/src/main/java/com/engine/htsc/payment/web/HeadGeneralPaymentAction.java new file mode 100644 index 0000000..05f3c4e --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/web/HeadGeneralPaymentAction.java @@ -0,0 +1,280 @@ +package com.engine.htsc.payment.web; + +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.payment.pojo.*; +import com.engine.htsc.payment.service.PaymentService; +import com.engine.htsc.payment.service.impl.PaymentServiceImpl; +import com.engine.htsc.payment.util.PayUtil; +import com.engine.htsc.trip.util.AjaxResult; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.*; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 总部付款restful接口 + */ +public class HeadGeneralPaymentAction { + public HeadGeneralPaymentAction() { + } + + private PaymentService getServices() { + return ServiceUtil.getService(PaymentServiceImpl.class); + } + + /** + * 提交时校验银行账户(多行) + * + * @param dtdata 明细11数据 + * @return true or false + */ + @POST + @Path("/queryHistoryPayRecordWithSubmit") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult queryHistoryPayRecordWithSubmit(Map> dtdata) { + try { + String resp = this.getServices().queryHistoryPayRecordWithSubmit(dtdata); + return AjaxResult.ok(resp); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 获取汇率值 + * + * @param request 请求 + * @return 汇率对应关系 + */ + @POST + @Path("/queryExchangeRate") + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult> queryExchangeRate(@Context HttpServletRequest request) { + try { + Map resp = this.getServices().queryExchangeRate(); + return AjaxResult.ok(resp); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 查询合同已付金额 + * + * @param contractCode 合同编码 + * @param processCode 合同流程编码 + * @return json + */ + @GET + @Path("/queryContractPaidMoney") + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult queryContractPaid( + @QueryParam("contractCode") String contractCode, + @QueryParam("processCode") String processCode + ) { + try { + String reJson = this.getServices().queryContractPaidMoney(contractCode, processCode); + return AjaxResult.ok(reJson); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error(e.getMessage()); + } + } + + @GET + @Path("/queryVirtualDepartment") + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult> queryVirtualDepartment(@QueryParam("fycdbm") String fycdbm) { + Map result = new HashMap<>(); + try { + String s = this.getServices().queryVirtualDepartment(fycdbm); + result.put("fycdbm", fycdbm); + result.put("virtualdept", s); + return AjaxResult.ok(result); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 查询合同信息 + * + * @param contractRequestParam 请求参数dto + * @return ContractInfoVo + */ + @POST + @Path("/queryContract") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public ContractInfoVo queryContract(ContractRequestParam contractRequestParam) { + ContractInfoVo info = new ContractInfoVo(); + try { + info = this.getServices().queryContractPagination(contractRequestParam); + return info; + } catch (Exception e) { + e.printStackTrace(); + return info; + } + } + + /** + * 查询it项目信息 + * + * @param condition 请求dto + * @return ItProjectVo + */ + @POST + @Path("/queryItProject") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public ItProjectVo queryItProject(ItProjectQueryCondition condition) { + ItProjectVo itProjectVo = new ItProjectVo(); + try { + itProjectVo = this.getServices().queryItProject(condition); + } catch (Exception e) { + e.printStackTrace(); + itProjectVo.setOk(false); + itProjectVo.setMsg("error: " + e); + } + return itProjectVo; + } + + + /** + * 查询部门负责人 + * + * @param deptIds 部门ids,逗号分隔 + * @return 对应部门负责人的ids(去空,去重) + */ + @GET + @Path("/getDivisionHead") + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult getDivisionHead(@QueryParam("deptIds") String deptIds) { + try { + String heads = PayUtil.getDivisionHead(deptIds); + return AjaxResult.ok(heads); + } catch (Exception e) { + return AjaxResult.error("error: " + e); + } + + } + + /** + * 付款明细预算科目带出会计明细会计科目 + * + * @param budgetCode 预算code + * @return aja + */ + @GET + @Path("/getBrowser") + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult getBrowserValue(@QueryParam("budgetCode") String budgetCode) { + try { + String browserValue = this.getServices().getAccountCode(budgetCode); + return AjaxResult.ok(browserValue); + } catch (Exception e) { + return AjaxResult.error("error: " + e); + } + + } + + /** + * 付款明细预算科目带出会计明细会计科目(联合) + * + * @param budgetCode 预算code + * @return aja + */ + @GET + @Path("/getBrowser4Lh") + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult getBrowserValue4Lh(@QueryParam("budgetCode") String budgetCode) { + try { + String browserValue = this.getServices().getAccountCode4Lh(budgetCode); + return AjaxResult.ok(browserValue); + } catch (Exception e) { + return AjaxResult.error("error: " + e); + } + + } + + /* 付款明细预算科目带出会计明细会计科目(香港) + * + * @param budgetCode 预算code + * @return aja + */ + @GET + @Path("/getBrowser4HK") + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult getBrowserValue4HK(@QueryParam("budgetCode") String budgetCode) { + try { + String browserValue = this.getServices().getAccountCode4HK(budgetCode); + return AjaxResult.ok(browserValue); + } catch (Exception e) { + return AjaxResult.error("error: " + e); + } + + } + + + + /** + * 发票关联后,校验该发票是否已存在于之前的流程当中 + * fphm + fpdm = 唯一标识 + * + * @param fphm 发票号码 + * @param fpdm 发票代码 + * @return json + */ + @GET + @Path("/queryInvoiceOnce") + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult> queryInvoiceOnce(@QueryParam("fphm") String fphm, @QueryParam("fpdm") String fpdm) { + try { + Map res = this.getServices().queryInvoiceOnce(fphm, fpdm); + return AjaxResult.ok(res); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("发票关联后,校验该发票是否已存在接口报错: " + e); + } + } + + /** + * 历史付款记录查验 + * + * @param bankAccount + * @param payeeDept + * @param bankName + * @param city + * @return map + * res.put("flag", "0"); //0 = 不允许提交 1 = 允许提交 + * res.put("isTrueAccount", "1"); // 1 正确的银行账户 0 不正确 + * res.put("addition", ""); 附加信息 + */ + @GET + @Path("/queryHistoryPayRecord") + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult> queryHistoryPayRecord( + @QueryParam("yhzh") String bankAccount, + @QueryParam("skdw") String payeeDept, + @QueryParam("khh") String bankName, + @QueryParam("city") String city + ) { + try { + Map res = this.getServices().queryHistoryPayRecord(bankAccount, payeeDept, bankName, city); + return AjaxResult.ok(res); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("发票关联后,校验该发票是否已存在接口报错: " + e); + } + } + + +} diff --git a/src/main/java/com/engine/htsc/payment/web/ITPaymentAction.java b/src/main/java/com/engine/htsc/payment/web/ITPaymentAction.java new file mode 100644 index 0000000..fdbbf81 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/web/ITPaymentAction.java @@ -0,0 +1,93 @@ +package com.engine.htsc.payment.web; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.engine.htsc.payment.util.HttpUtil; +import weaver.general.Util; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.interfaces.htsc.cus.HTUtil; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.*; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 总部付款restful接口 + */ +public class ITPaymentAction { + + /** + * 查询it付款项目详细信息 + * + * @param request + * @param response + * @return + */ + @GET + @Path("/projectDetailInfo") + @Produces({MediaType.TEXT_PLAIN}) + public String getWfSigns(@Context HttpServletRequest request, @Context HttpServletResponse response) { + JSONObject resultJson = new JSONObject(); + try { + String[] itprojects = Util.null2String(request.getParameter("itprojects")).split(","); + List paramsList = new ArrayList(); + for (int i = 0; i < itprojects.length; i++) { + String[] itproject = itprojects[i].split("#"); + Map itprjMap = new HashMap(); + itprjMap.put("id", itproject[0]); + itprjMap.put("type", itproject[1]); + paramsList.add(itprjMap); + + } + + String requestUrl = new PropBean().getPropName("PaymentDetailsUrl"); + HTUtil htUtil = new HTUtil(); + Map appHeader = htUtil.getAppHeader(); + String data = HttpUtil.postApplicationJson(requestUrl, JSON.toJSONString(paramsList), appHeader); + JSONArray dataJson = JSONObject.parseArray(data); + resultJson.put("data", dataJson); + resultJson.put("success", true); + + } catch (Exception e) { + e.printStackTrace(); + resultJson.put("success", false); + } + + return JSON.toJSONString(resultJson, SerializerFeature.WriteMapNullValue); + } + + + public static void main(String[] args) throws Exception { + JSONObject resultJson = new JSONObject(); + String[] itprojects = "29#1,50#1,54#1".split(","); + List paramsList = new ArrayList(); + for (int i = 0; i < itprojects.length; i++) { + String[] itproject = itprojects[i].split("#"); + Map itprjMap = new HashMap(); + itprjMap.put("id", itproject[0]); + itprjMap.put("type", itproject[1]); + paramsList.add(itprjMap); + + } + + HTUtil htUtil = new HTUtil(); + Map appHeader = htUtil.getAppHeader(); + String requestUrl = "http://168.61.69.225:8080/jtxt/weaver/itmanage/getPaymentDetails"; + String data = HttpUtil.postApplicationJson(requestUrl, JSON.toJSONString(paramsList), appHeader); + System.out.println(data); + JSONArray dataJson = JSONObject.parseArray(data); + resultJson.put("data", dataJson); + resultJson.put("success", true); + System.out.println(JSON.toJSONString(resultJson, SerializerFeature.WriteMapNullValue)); + } + + +} diff --git a/src/main/java/com/engine/htsc/payment/web/PaymentCommonAction.java b/src/main/java/com/engine/htsc/payment/web/PaymentCommonAction.java new file mode 100644 index 0000000..c08c586 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/web/PaymentCommonAction.java @@ -0,0 +1,88 @@ +package com.engine.htsc.payment.web; + +import com.alibaba.fastjson.JSON; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.payment.pojo.SyncVo; +import com.engine.htsc.payment.service.PaymentCommonService; +import com.engine.htsc.payment.service.impl.PaymentCommonServiceImpl; +import com.engine.htsc.trip.util.AjaxResult; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.activation.MimetypesFileTypeMap; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.*; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.io.File; +import java.net.URLEncoder; +import java.util.List; +import java.util.Map; + +public class PaymentCommonAction extends BaseBean { + + private PaymentCommonService getServices() { + return ServiceUtil.getService(PaymentCommonServiceImpl.class); + } + + @GET + @Path("/download/attachments/zip") + public Response attachmentsZip(@Context HttpServletRequest request, @Context HttpServletResponse response) { + try { + writeLog("/download/attachments/zip"); + User user = HrmUserVarify.getUser(request, response); + File zipFile = getServices().buildAttachmentsZipFile(); + String mt = new MimetypesFileTypeMap().getContentType(zipFile); + return Response.ok(zipFile, mt) + .header("Content-disposition", "attachment;filename=" + URLEncoder.encode(zipFile.getName(), "UTF-8")) + .header("Cache-Control", "no-cache").build(); + } catch (Exception e) { + return Response.status(Response.Status.BAD_REQUEST).entity(e.getMessage()).build(); + } + } + + @GET + @Path("/sync/contract") + public Response updateContractInfo(@Context HttpServletRequest request) { + try { + Map params = ParamUtil.request2Map(request); + String fromDB = (String) params.getOrDefault("fromDB", ""); + StringBuilder rids = new StringBuilder((String) params.getOrDefault("rids", "")); + String syncIt = (String) params.getOrDefault("syncIt", ""); + if("true".equals(fromDB)){ + RecordSet rs = new RecordSet(); + rids = new StringBuilder(); + rs.executeQuery("select distinct reqid from uf_reSync_Payment t "); + while (rs.next()){ + rids.insert(0, Util.null2String(rs.getString("reqid")) + ","); + } + } + String resp = getServices().syncContractInfo(syncIt, rids.toString()); + return Response.ok(resp).build(); + } catch (Exception e) { + return Response.status(Response.Status.BAD_REQUEST).entity(e.getMessage()).build(); + } + } + + @POST + @Path("/sync/fundStatus/all") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult>> syncFundAllStatus(Map params) { + writeLog("sync fund status starting... params: " + JSON.toJSONString(params)); + try { + List> responseMsg = this.getServices() + .syncFundAllStatus(Util.null2String(params.get("requestMarks"), "")); + return AjaxResult.ok(responseMsg); + } catch (Exception e) { + writeLog("sync fund status fail, catch error: ", e); + return AjaxResult.error(e.getMessage()); + } + } +} diff --git a/src/main/java/com/engine/htsc/payment/web/PaymentCubeAction.java b/src/main/java/com/engine/htsc/payment/web/PaymentCubeAction.java new file mode 100644 index 0000000..bc0d3c2 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/web/PaymentCubeAction.java @@ -0,0 +1,78 @@ +package com.engine.htsc.payment.web; + +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.payment.service.PaymentCubeService; +import com.engine.htsc.payment.service.impl.PaymentCubeServiceImpl; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.*; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +public class PaymentCubeAction { + + private Log log = LogFactory.getLog(this.getClass()); + private PaymentCubeService getService(User user){ + return ServiceUtil.getService(PaymentCubeServiceImpl.class,user); + } + + + /** + * 建模总部出纳付款更新流程阅读状态01 + * @param request + * @param response + * @return + */ + @POST + @Path("/updateReadStatus") + @Produces({MediaType.APPLICATION_JSON}) + public Map updateReadStatus(@Context HttpServletRequest request, + @Context HttpServletResponse response, + @QueryParam("requestid") String requestid){ + Map apidatas = new HashMap<>(); + try { + User user = HrmUserVarify.getUser(request, response); + apidatas = this.getService(user).updateReadStatus(requestid); + apidatas.put("api_status", 1); + }catch (Exception e){ + e.printStackTrace(); + apidatas.put("api_status",-1); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return apidatas; + } + + + /** + * 建模总部出纳付款更新流程打印状态01 + * @param request + * @param response + * @return + */ + @POST + @Path("/updatePrintStatus") + @Produces({MediaType.APPLICATION_JSON}) + public Map updatePrintStatus(@Context HttpServletRequest request, + @Context HttpServletResponse response, + @QueryParam("ids") String ids){ + Map apidatas = new HashMap<>(); + try { + User user = HrmUserVarify.getUser(request, response); + apidatas = this.getService(user).updatePrintStatus(ids); + apidatas.put("success", true); + }catch (Exception e){ + e.printStackTrace(); + apidatas.put("success",false); + apidatas.put("errormsg", "catch exception : " + e.getMessage()); + } + return apidatas; + } +} diff --git a/src/main/java/com/engine/htsc/payment/web/PaymentExcelTemplateAction.java b/src/main/java/com/engine/htsc/payment/web/PaymentExcelTemplateAction.java new file mode 100644 index 0000000..ef515ea --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/web/PaymentExcelTemplateAction.java @@ -0,0 +1,74 @@ +package com.engine.htsc.payment.web; + +import com.alibaba.fastjson.JSONArray; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.payment.pojo.HTPaymentCostDetail; +import com.engine.htsc.payment.service.PaymentExcelTemplateService; +import com.engine.htsc.payment.service.impl.PaymentExcelTemplateServiceImpl; +import com.engine.htsc.trip.util.AjaxResult; +import weaver.general.BaseBean; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.util.List; +import java.util.Map; + +public class PaymentExcelTemplateAction { + + private PaymentExcelTemplateService getService(User user) { + return ServiceUtil.getService(PaymentExcelTemplateServiceImpl.class, user); + } + + + @GET + @Path("/getDetailByExcel") + @Produces({MediaType.APPLICATION_JSON}) + public AjaxResult> getDetailByExcel(@Context HttpServletRequest request, + @Context HttpServletResponse response) { + try { + User user = HrmUserVarify.getUser(request, response); + List resultStr = this.getService(user).getDetailByExcel(ParamUtil.request2Map(request)); + return AjaxResult.ok(resultStr); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error(e.getMessage()); + } + + } + + /** + * 联合通用付款导入Excel + * @param request + * @param response + * @return + */ + @POST + @Path("/getUnionDetailByExcel") + @Produces({MediaType.APPLICATION_JSON}) + public Response getLhDetailByExcel(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map map = ParamUtil.request2Map(request); + try { + User user = HrmUserVarify.getUser(request, response); + int imageId = Integer.parseInt((String) map.get("imageId")); + String ngrid = (String) map.get("ngrid"); + JSONArray jsonArray = this.getService(user).readByImageId(imageId,ngrid); + return Response.ok(jsonArray) + .build(); + } catch (Exception e) { + new BaseBean().writeLog(e.getMessage()); + e.printStackTrace(); + return Response.status(Response.Status.BAD_REQUEST).entity(e.getMessage()).build(); + } + + } +} diff --git a/src/main/java/com/engine/htsc/payment/web/PaymentQueryDetailAction.java b/src/main/java/com/engine/htsc/payment/web/PaymentQueryDetailAction.java new file mode 100644 index 0000000..5ce9833 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/web/PaymentQueryDetailAction.java @@ -0,0 +1,41 @@ +package com.engine.htsc.payment.web; + +import com.engine.common.util.ParamUtil; +import com.engine.htsc.payment.service.PaymentQueryDetailService; +import com.engine.htsc.payment.service.impl.PaymentQueryDetailServiceImpl; +import java.util.List; +import java.util.Map; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; +import com.engine.common.util.ServiceUtil; +public class PaymentQueryDetailAction { + private Log log = LogFactory.getLog(this.getClass()); + private PaymentQueryDetailService getService(User user){ + return ServiceUtil.getService(PaymentQueryDetailServiceImpl.class,user); + } + + + @GET + @Path("/queryDetailInfo") + @Produces({MediaType.APPLICATION_JSON}) + public List> createBusinessTravelWorkflow(@Context HttpServletRequest request, + @Context HttpServletResponse response){ + try { + User user = HrmUserVarify.getUser(request, response); + List> result = this.getService(user).getDetailInfo(ParamUtil.request2Map(request)); + return result; + }catch (Exception e){ + log.info(String.format("query detail failed!"),e); + } + return null; + } +} diff --git a/src/main/java/com/engine/htsc/payment/web/PaymentSyncWeb.java b/src/main/java/com/engine/htsc/payment/web/PaymentSyncWeb.java new file mode 100644 index 0000000..d454751 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/web/PaymentSyncWeb.java @@ -0,0 +1,33 @@ +package com.engine.htsc.payment.web; + +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.payment.service.PaymentSyncService; +import com.engine.htsc.payment.service.impl.PaymentSyncServiceImpl; +import com.engine.htsc.trip.util.AjaxResult; + +import javax.ws.rs.Consumes; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +public class PaymentSyncWeb { + + private PaymentSyncService getService() { + return ServiceUtil.getService(PaymentSyncServiceImpl.class); + } + + @POST + @Path("/old/processPdfAndAllAppendix") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult syncOld() { + try { + this.getService() + .syncProcessPdfAndAllAppendix(); + return AjaxResult.ok("同步成功"); + } catch (Exception e) { + return AjaxResult.error("catch error: " + e); + } + } +} diff --git a/src/main/java/com/engine/htsc/payment/web/PaymentWorkflowAction.java b/src/main/java/com/engine/htsc/payment/web/PaymentWorkflowAction.java new file mode 100644 index 0000000..94f5874 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/web/PaymentWorkflowAction.java @@ -0,0 +1,145 @@ +package com.engine.htsc.payment.web; + + +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.payment.pojo.TripPaymentRequest; +import com.engine.htsc.payment.service.PaymentWorkflowService; +import com.engine.htsc.payment.service.impl.PaymentWorkflowServiceImpl; +import java.util.Objects; +import javax.ws.rs.POST; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +public class PaymentWorkflowAction { + private Log log = LogFactory.getLog(this.getClass()); + private PaymentWorkflowService getService(User user){ + return ServiceUtil.getService(PaymentWorkflowServiceImpl.class,user); + } + + private PaymentWorkflowService getService(){ + return ServiceUtil.getService(PaymentWorkflowServiceImpl.class); + } + + + + /** + * 获取所有虚拟部门数据 + * @param request + * @param response + * @return + */ + @GET + @Path("/getVirtualDept") + @Produces({MediaType.APPLICATION_JSON}) + public Map getVirtualDept(@Context HttpServletRequest request, + @Context HttpServletResponse response){ + Map apidatas = new HashMap<>(); + try { + User user = HrmUserVarify.getUser(request, response); + apidatas = this.getService(user).getVirtualDept(); + //postman测试 + //apidatas = ServiceUtil.getService(PaymentWorkflowServiceImpl.class).getVirtualDept(); + apidatas.put("api_status", 1); + }catch (Exception e){ + e.printStackTrace(); + apidatas.put("api_status",-1); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + log.error("isPostion catch exception"); + } + return apidatas; + } + + /** + * 总部智能商旅付款自动构建OA流程 + * @param request + * @return + */ + @POST + @Path("/creatWorkflow") + @Produces({MediaType.APPLICATION_JSON}) + public Map createBusinessTravelWorkflow(TripPaymentRequest request){ + Map apidatas = new HashMap<>(); + try { + apidatas = this.getService().createBusinessTravelWorkflow(request); + apidatas.put("code", 200); + apidatas.put("message","接口调用成功"); + }catch (Exception e){ + e.printStackTrace(); + apidatas.put("code",-1); + apidatas.put("message","接口调用失败"); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + log.error("isPostion catch exception"); + } + return apidatas; + } + + + /** + * 总部智能商旅付款修改明细接口,参数中需包含requestid + * @param request + * @return + */ + @POST + @Path("/updateDetailInfo") + @Produces({MediaType.APPLICATION_JSON}) + public Map saveDetailInfo(TripPaymentRequest request){ + Map apidatas = new HashMap<>(); + try { + if(Objects.isNull(request) || Objects.isNull(request.getRequestId()) || request.getRequestId()<=0){ + apidatas.put("code", 400); + apidatas.put("message","参数非法,request不可为空"); + } + this.getService().saveDetailInfo(request); + apidatas.put("code", 200); + apidatas.put("message","接口调用成功"); + }catch (Exception e){ + e.printStackTrace(); + apidatas.put("code",-1); + apidatas.put("message","接口调用失败"); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + log.error("isPostion catch exception"); + } + return apidatas; + } + + /** + * 总部通用报销二级部门报销默认费用承担部门为一级部门负责人 + * @param request + * @param response + * @return + */ + @GET + @Path("/getLevelDept") + @Produces({MediaType.APPLICATION_JSON}) + public Map getLevelDeparment(@Context HttpServletRequest request, + @Context HttpServletResponse response, + @QueryParam("deptid") String deptid){ + Map apidatas = new HashMap<>(); + try { + User user = HrmUserVarify.getUser(request, response); + apidatas = this.getService(user).getLevelDept(deptid); + apidatas.put("api_status", 1); + }catch (Exception e){ + e.printStackTrace(); + apidatas.put("api_status",-1); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return apidatas; + } + +} diff --git a/src/main/java/com/engine/htsc/payment/web/PreApprovalAction.java b/src/main/java/com/engine/htsc/payment/web/PreApprovalAction.java new file mode 100644 index 0000000..6e3e565 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/web/PreApprovalAction.java @@ -0,0 +1,41 @@ +package com.engine.htsc.payment.web; + +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.payment.pojo.PreApproval; +import com.engine.htsc.payment.service.PreApprovalService; +import com.engine.htsc.payment.service.impl.PreApprovalServiceImpl; +import com.engine.htsc.trip.util.AjaxResult; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; +import java.util.List; + +public class PreApprovalAction { + private final Log log = LogFactory.getLog(this.getClass()); + + private PreApprovalService getServices() { + return ServiceUtil.getService(PreApprovalServiceImpl.class); + } + + @GET + @Path("/assertFp") + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult> checkRequestMark(@QueryParam("requestid") String requestid) { + try { + List preAplInfos = getServices().getPreAplInfos(requestid); + return AjaxResult.ok(preAplInfos); + } catch (Exception e) { + log.error(e.getMessage()); + e.printStackTrace(); + return AjaxResult.error(":" + e.getMessage()); + } + } + + + +} diff --git a/src/main/java/com/engine/htsc/payment/web/PurchasingMallWeb.java b/src/main/java/com/engine/htsc/payment/web/PurchasingMallWeb.java new file mode 100644 index 0000000..40feb9d --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/web/PurchasingMallWeb.java @@ -0,0 +1,46 @@ +package com.engine.htsc.payment.web; + +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.payment.service.PurchasingMallService; +import com.engine.htsc.payment.service.impl.PurchasingMallServiceImpl; +import com.engine.htsc.trip.util.AjaxResult; +import weaver.general.BaseBean; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +public class PurchasingMallWeb extends BaseBean { + + private PurchasingMallService getService() { + return ServiceUtil.getService(PurchasingMallServiceImpl.class); + } + + /** + * 批量获取会计科目信息 + * @param yskm ,分隔的预算科目 + * @return ajax + */ + @GET + @Path("/getBatchKjkm") + @Produces({MediaType.APPLICATION_JSON}) + public AjaxResult>> getVirtualDept( + @QueryParam("yskm") String yskm){ + try { + Map> batchKj = getService().getBatchKj(yskm); + return AjaxResult.ok(batchKj); + }catch (Exception e){ + writeLog("getBatchKjkm catch error:" + e.getMessage()); + errorLog("getBatchKjkm catch error:" , e); + return AjaxResult.error(e.getMessage()); + } + } +} diff --git a/src/main/java/com/engine/htsc/payment/web/SaveIntoFinancePaymentAction.java b/src/main/java/com/engine/htsc/payment/web/SaveIntoFinancePaymentAction.java new file mode 100644 index 0000000..fd66238 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/web/SaveIntoFinancePaymentAction.java @@ -0,0 +1,120 @@ +package com.engine.htsc.payment.web; + +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.payment.service.SaveIntoFinancePaymentService; +import com.engine.htsc.payment.service.impl.SaveIntoFinancePaymentServiceImpl; +import com.engine.htsc.trip.util.AjaxResult; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.cus.SaveTrip4SubAction; +import weaver.interfaces.htsc.cus.UpdateReimbursement4SubAction; +import weaver.soa.workflow.request.RequestInfo; +import weaver.workflow.request.RequestManager; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; +import java.util.Arrays; + +public class SaveIntoFinancePaymentAction { + + + private SaveIntoFinancePaymentService getServices() { + return ServiceUtil.getService(SaveIntoFinancePaymentServiceImpl.class); + } + /** + * 根据requestid写入资金系统 + * @param requestids + * @return + */ + @GET + @Path("/saveIntoFinance") + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult saveIntoFinanceDB(@QueryParam("requestid") String requestids) { + String result = ""; + try { + if(!"".equals(Util.null2String(requestids))){ + JAVATools.writelog("根据requestid写入资金系统 saveIntoFinance 入参: "+ requestids); + result = this.getServices().saveIntoFinance(Arrays.asList(requestids.split(","))); + }else{ + result = "请选择需要写入资金系统的流程!"; + } + return AjaxResult.ok(result); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 根据requestid写入资金系统 + * @return + */ + @GET + @Path("/saveLhbxIntoJourney") + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult saveHtlhBxIntoJourney() { + String result = ""; + try { + UpdateReimbursement4SubAction action1 = new UpdateReimbursement4SubAction(); + String sql = " select * from uf_dsrwdb t where t.rwlx='LHBX'"; + RecordSet rs = new RecordSet(); + RecordSet rs1 = new RecordSet(); + rs.executeQuery(sql); + while (rs.next()){ + String reqid = Util.null2String(rs.getString("reqid")); + String sql1 = "select s.requestname from workflow_requestbase s where s.requestid='"+reqid+"'"; + rs1.executeQuery(sql1); + String reqName = ""; + if(rs1.next()){ + reqName = Util.null2String(rs1.getString("requestname")); + } + RequestInfo requestInfo = new RequestInfo(); + RequestManager requestManager = new RequestManager(); + requestManager.setRequestname(reqName); + requestInfo.setRequestid(reqid); + requestInfo.setRequestManager(requestManager); + action1.setStatus("FINISH"); + action1.execute(requestInfo); + } + return AjaxResult.ok(result); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 根据requestid写入资金系统 + * @return + */ + @GET + @Path("/saveLhccIntoJourney") + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult saveHtlhCcIntoJourney() { + String result = ""; + try { + SaveTrip4SubAction action1 = new SaveTrip4SubAction(); + String sql = " select * from uf_dsrwdb t where t.rwlx='LHCC'"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql); + while (rs.next()){ + String reqid = Util.null2String(rs.getString("reqid")); + RequestInfo requestInfo = new RequestInfo(); + RequestManager requestManager = new RequestManager(); + requestManager.setBilltablename("formtable_main_43"); + requestInfo.setRequestid(reqid); + requestInfo.setRequestManager(requestManager); + action1.execute(requestInfo); + } + return AjaxResult.ok(result); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error(e.getMessage()); + } + } + +} diff --git a/src/main/java/com/engine/htsc/payment/web/SettlePaymentFlowAction.java b/src/main/java/com/engine/htsc/payment/web/SettlePaymentFlowAction.java new file mode 100644 index 0000000..d35e473 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/web/SettlePaymentFlowAction.java @@ -0,0 +1,339 @@ +package com.engine.htsc.payment.web; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.payment.pojo.SettlePayAutoRequestParam; +import com.engine.htsc.payment.pojo.SettlePaymentSplLinkReq; +import com.engine.htsc.payment.service.SettlePaymentFlowService; +import com.engine.htsc.payment.service.impl.SettlePaymentFlowServiceImpl; +import com.engine.htsc.subcompany.dao.UfZgssplDao; +import com.engine.htsc.subcompany.model.SubCompanySplLinkReq; +import com.engine.htsc.trip.util.AjaxResult; +import com.informix.lang.JavaToIfxType; +import weaver.general.Util; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.payment.SettlePaymentInvoke; +import weaver.soa.workflow.request.RequestInfo; +import weaver.workflow.request.RequestManager; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.*; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class SettlePaymentFlowAction { + + + private SettlePaymentFlowService getServices() { + return ServiceUtil.getService(SettlePaymentFlowServiceImpl.class); + } + + protected UfZgssplDao ufZgssplDao = new UfZgssplDao(); + + + /** + * 采购商城结算付款自动构建结算付款流程 + * @param requestid + * @return + */ + @POST + @Path("/createFlow") + @Produces({MediaType.APPLICATION_JSON}) + public Map createBusinessTravelWorkflow(@QueryParam("requestid") String requestid){ + Map apidatas = new HashMap<>(); + try { +// apidatas = this.getService().createWorkflow(ids); + JAVATools.SetCmdwritelog("requestid: ", requestid+" 采购商城结算付款自动构建结算付款流程 "); + List paramList = this.getServices().getParam(requestid); + String requestidNew = this.getServices().createWorkflowMain(paramList); + if (!requestidNew.contains("-")&&!"".equals(requestidNew)){ + apidatas.put("code", 200); + apidatas.put("message","接口调用成功 新流程requestid:"+requestidNew); + }else { + apidatas.put("code", -1); + apidatas.put("message","创建流程失败"); + } + }catch (Exception e){ + e.printStackTrace(); + apidatas.put("code",-1); + apidatas.put("message","接口调用失败"); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return apidatas; + } + + /** + * 采购商城结算付款调用审批链接口,保存到主表 + * @param requestid + * @return + */ + @POST + @Path("/getSettlePaymentSpl") + @Produces(MediaType.TEXT_PLAIN) + public String getSettlePaymentSpl(@QueryParam("requestid") String requestid) { + Map apidatas = new HashMap(); + try { + JAVATools.SetCmdwritelog("requestid: ", requestid+" 采购商城系统发起节点提交,调用审批链接口,保存到主表 "); + if(!"".equals(Util.null2String(requestid))){ + HashMap reqMap = this.getServices().getSplParam(requestid); + reqMap.put("requestid",requestid); + this.getServices().saveSubCompanySpl(reqMap); + apidatas.put("success",true); + apidatas.put("msg","========更新成功========"); + apidatas.put("requestid",requestid); + }else{ + apidatas.put("success",false); + apidatas.put("msg","requestid存在空"); + } + } catch (Exception e) { + e.printStackTrace(); + apidatas.put("success", false); + apidatas.put("msg", "系统内部错误"); + } + return JSONObject.toJSONString(apidatas); + } + + + /** + * 采购商城预算接口 + * @param requestid + * @return + */ + @POST + @Path("/paymentOccupation") + @Produces(MediaType.TEXT_PLAIN) + public String paymentOccupation(@QueryParam("requestid") String requestid, @QueryParam("billStatus") String billStatus, @QueryParam("src") String src) { + Map apidatas = new HashMap(); + try { + JAVATools.SetCmdwritelog("requestid: ", requestid+" 采购商城预占,流程状态: "+src); + if(!"".equals(Util.null2String(requestid))){ + RequestInfo requestInfo = new RequestInfo(); + RequestManager requestManager = new RequestManager(); + requestManager.setSrc(src); + requestInfo.setRequestManager(requestManager); + requestInfo.setRequestid(requestid); + SettlePaymentInvoke settlePaymentInvoke = new SettlePaymentInvoke(); + settlePaymentInvoke.setBillStatus(billStatus); + String result = settlePaymentInvoke.execute(requestInfo); + SettlePaymentFlowServiceImpl settlePaymentFlowService = new SettlePaymentFlowServiceImpl(); + settlePaymentFlowService.updatepayStatus("",requestid,"5"); + apidatas.put("msg",result); + }else{ + apidatas.put("success",false); + apidatas.put("msg","requestid存在空"); + } + } catch (Exception e) { + e.printStackTrace(); + apidatas.put("success", false); + apidatas.put("msg", "系统内部错误"); + } + return JSONObject.toJSONString(apidatas); + } + + + /** + * 预算实占、废弃 总部 + * + * @param request 请求体 + * @return 消息体 + */ + @POST + @Path("/doBudgetZb") + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult> doBudgetZb(@Context HttpServletRequest request) { + try { + Map requestParam = ParamUtil.request2Map(request); + String rid = Util.null2String(requestParam.getOrDefault("rid", "")); + String discard = Util.null2String(requestParam.getOrDefault("discard", "")); + return AjaxResult.ok(this.getServices().doBudgetByBatchIdZb(rid, discard)); + } catch (Exception e) { + JAVATools.writelog(e.getMessage()); + return AjaxResult.error(e.getMessage()); + + } + } + + /** + * 核算 总部 + * + * @param request 请求体 + * @return 消息体 + */ + @POST + @Path("/doAccountZb") + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult> doAccountZb(@Context HttpServletRequest request) { + try { + Map requestParam = ParamUtil.request2Map(request); + String id = Util.null2String(requestParam.getOrDefault("id", "")); + return AjaxResult.ok(this.getServices().doAccountByBatchIdZb(id)); + } catch (Exception e) { + JAVATools.writelog(e.getMessage()); + return AjaxResult.error(e.getMessage()); + + } + } + + + + /** + * 预算实占、废弃 分支 + * + * @param request 请求体 + * @return 消息体 + */ + @POST + @Path("/doBudgetFzjg") + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult> doBudgetFzjg(@Context HttpServletRequest request) { + try { + Map requestParam = ParamUtil.request2Map(request); + String rid = Util.null2String(requestParam.getOrDefault("rid", "")); + String discard = Util.null2String(requestParam.getOrDefault("discard", "")); + return AjaxResult.ok(this.getServices().doBudgetByBatchIdFzjg(rid, discard)); + } catch (Exception e) { + JAVATools.writelog(e.getMessage()); + return AjaxResult.error(e.getMessage()); + + } + } + + /** + * 核算 分支 + * + * @param request 请求体 + * @return 消息体 + */ + @POST + @Path("/doAccountFzjg") + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult> doAccountFzjg(@Context HttpServletRequest request) { + try { + Map requestParam = ParamUtil.request2Map(request); + String id = Util.null2String(requestParam.getOrDefault("id", "")); + return AjaxResult.ok(this.getServices().doAccountByBatchIdFzjg(id)); + } catch (Exception e) { + JAVATools.writelog(e.getMessage()); + return AjaxResult.error(e.getMessage()); + + } + } + + + /** + * 页面获取审批链数据 + * @param settlePaymentSplLinkReq + * @return + */ + @POST + @Path("/getSettlePaymentSplWeb") + @Produces({MediaType.TEXT_PLAIN}) + @Consumes({MediaType.APPLICATION_JSON}) + public String getSettlePaymentSplWeb(SettlePaymentSplLinkReq settlePaymentSplLinkReq){ + String unnumber = com.weaver.general.Util.null2String(settlePaymentSplLinkReq.getUnnumber()); + String unnumbercode = com.weaver.general.Util.null2String(settlePaymentSplLinkReq.getUnnumbercode()); + JSONObject jsonObject = settlePaymentSplLinkReq.getValue(); + if(jsonObject==null||"".equals(jsonObject)){ + return JAVATools.Apiretrun("400","参数为空"); + } + JAVATools.writelog("获取审批链入参: unnumber:"+unnumber+" unnumbercode:"+unnumbercode+" value:"+jsonObject.toJSONString()); + HashMap req = JSON.parseObject(jsonObject.toString(),HashMap.class); + req.put("unnumber", unnumber); + req.put("unnumbercode",unnumbercode); + JSONObject res = this.getServices().getSettlePaymentSplWeb(req); + return JAVATools.Apiretrun("200", res); + } + + /** + * 付款 总部 + * + * @param request 请求体 + * @return 消息体 + */ + @POST + @Path("/doPaymentZb") + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult> doPaymentZb(@Context HttpServletRequest request) { + try { + Map requestParam = ParamUtil.request2Map(request); + String id = Util.null2String(requestParam.getOrDefault("id", "")); + return AjaxResult.ok(this.getServices().doPaymentByBatchIdZb(id)); + } catch (Exception e) { + JAVATools.writelog(e.getMessage()); + return AjaxResult.error(e.getMessage()); + + } + } + + /** + * 手动付款 总部 + */ + @POST + @Path("/doManualPaymentZb") + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult doManualPaymentZb(@Context HttpServletRequest request) { + try { + Map requestParam = ParamUtil.request2Map(request); + String id = Util.null2String(requestParam.getOrDefault("id", "")); + return AjaxResult.ok(this.getServices().updateManualPaymentStatusZb(id)); + } catch (Exception e) { + JAVATools.writelog(e.getMessage()); + return AjaxResult.error(e.getMessage()); + + } + } + + /** + * 付款 分支 + * + * @param request 请求体 + * @return 消息体 + */ + @POST + @Path("/doPaymentFzjg") + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult> doPaymentFzjg(@Context HttpServletRequest request) { + try { + Map requestParam = ParamUtil.request2Map(request); + String id = Util.null2String(requestParam.getOrDefault("id", "")); + return AjaxResult.ok(this.getServices().doPaymentByBatchIdFzjg(id)); + } catch (Exception e) { + JAVATools.writelog(e.getMessage()); + return AjaxResult.error(e.getMessage()); + + } + } + + /** + * 手动付款 分支 + */ + @POST + @Path("/doManualPaymentFzjg") + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult doManualPaymentFzjg(@Context HttpServletRequest request) { + try { + Map requestParam = ParamUtil.request2Map(request); + String id = Util.null2String(requestParam.getOrDefault("id", "")); + return AjaxResult.ok(this.getServices().updateManualPaymentStatusFzjg(id)); + } catch (Exception e) { + JAVATools.writelog(e.getMessage()); + return AjaxResult.error(e.getMessage()); + + } + } + + +} diff --git a/src/main/java/com/engine/htsc/payment/web/StaffCondolencesAction.java b/src/main/java/com/engine/htsc/payment/web/StaffCondolencesAction.java new file mode 100644 index 0000000..8a74c91 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/web/StaffCondolencesAction.java @@ -0,0 +1,39 @@ +package com.engine.htsc.payment.web; + + +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.payment.pojo.AutoRequestParam; +import com.engine.htsc.payment.service.StaffCodService; +import com.engine.htsc.payment.service.impl.StaffCodServiceImpl; +import com.engine.htsc.trip.util.AjaxResult; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.Map; + +public class StaffCondolencesAction { + + private StaffCodService getService(){ + return ServiceUtil.getService(StaffCodServiceImpl.class); + } + + @POST + @Path("/autoTriggerLaborUnionPayment") + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult> travelControlBudget(@Context HttpServletRequest request) { + try { + Map params = ParamUtil.request2Map(request); + String rids = (String) params.getOrDefault("rids", ""); + AutoRequestParam autoRequestParam = getService().generateAutoRequestParamByStaffCodRid(rids); + Map resp = this.getService().autoTriggerLaborUnionPayment(autoRequestParam); + return AjaxResult.ok(resp); + } catch (Exception e) { + return AjaxResult.error("自动触发工会流程,发生异常:" + e.getMessage()); + } + } +} diff --git a/src/main/java/com/engine/htsc/payment/web/UnionPaymentAction.java b/src/main/java/com/engine/htsc/payment/web/UnionPaymentAction.java new file mode 100644 index 0000000..62f74de --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/web/UnionPaymentAction.java @@ -0,0 +1,36 @@ +package com.engine.htsc.payment.web; + +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.payment.service.UnionPaymentService; +import com.engine.htsc.payment.service.impl.UnionPaymentServiceImpl; +import com.engine.htsc.trip.util.AjaxResult; +import weaver.general.BaseBean; + +import javax.ws.rs.Consumes; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +public class UnionPaymentAction extends BaseBean { + + private UnionPaymentService getService() { + return ServiceUtil.getService(UnionPaymentServiceImpl.class); + } + + @POST + @Path("/getApprovalLinkByDept") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult> getApprovalLink(HashMap params) { + try { + Map approvalLinkByDept = this.getService().getApprovalLinkByDept(params); + return AjaxResult.ok(approvalLinkByDept); + } catch (Exception e) { + writeLog("catch error" + e); + return AjaxResult.error("catch error:" + e.getMessage()); + } + } +} diff --git a/src/main/java/com/engine/htsc/portal/cmd/ParticipateListCmd.java b/src/main/java/com/engine/htsc/portal/cmd/ParticipateListCmd.java new file mode 100644 index 0000000..05769c6 --- /dev/null +++ b/src/main/java/com/engine/htsc/portal/cmd/ParticipateListCmd.java @@ -0,0 +1,267 @@ +package com.engine.htsc.portal.cmd; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import com.engine.htsc.itcglc.cmd.ItcglcLdspInfoCmd; +import com.engine.htsc.portal.util.QueryTools; +import com.engine.htsc.response.enums.ResultEnum; +import com.engine.htsc.response.exception.ResultException; +import com.weaver.general.Util; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.conn.RecordSet; +import weaver.general.GCONST; +import weaver.hrm.User; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.htsc.comInfo.PropBean; + +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.temporal.TemporalAdjusters; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class ParticipateListCmd extends AbstractCommonCommand> { + + public ParticipateListCmd(){} + public ParticipateListCmd(Map params, User user) { + this.user = user; + this.params = params; + } + + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + Map datas = new HashMap<>(); + RecordSet rs = new RecordSet(); + PropBean pb = new PropBean(); + + String usercode = Util.null2String((String) params.get("userid")); + int page = Util.getIntValue(Util.null2String((String) params.get("page")),1); + int size = Util.getIntValue(Util.null2String((String) params.get("size")),20); + + List> list = new ArrayList>(); + Map map = null; + ResourceComInfo resourceComInfo = null; + DepartmentComInfo departmentComInfo = null; + try + { + String xzUrl = pb.getPropName("xz_portal_url") ; + String dbUrl = pb.getPropName("db_portal_url") ; + String rwUrl = pb.getPropName("rw_portal_url") ; + + Map xzMap = new HashMap(); + String xz_zt_fieldid = "" ; + String v_sql = " select k.id from workflow_billfield k\n" + + " inner join workflow_bill l on l.id = k.billid\n" + + " where l.tablename = 'uf_xzsy' and fieldname = 'xzzt' " ; + rs.executeQuery(v_sql); + if(rs.next()){ + xz_zt_fieldid = Util.null2String(rs.getString("id")); + } + if(!"".equals(xz_zt_fieldid)){ + + v_sql = " select selectvalue,selectname from workflow_selectitem where fieldid ="+xz_zt_fieldid; + rs.execute(v_sql); + while (rs.next()) + { + String selectvalue = weaver.general.Util.null2String(rs.getString("selectvalue")); + String selectname = weaver.general.Util.null2String(rs.getString("selectname")); + xzMap.put(selectvalue,selectname); + } + + } + + Map rwMap = new HashMap(); + String rw_zt_fieldid = "" ; + v_sql = " select k.id from workflow_billfield k\n" + + " inner join workflow_bill l on l.id = k.billid\n" + + " where l.tablename = 'uf_rw' and fieldname = 'rwzt' " ; + rs.executeQuery(v_sql); + if(rs.next()){ + rw_zt_fieldid = Util.null2String(rs.getString("id")); + } + if(!"".equals(rw_zt_fieldid)){ + v_sql = " select selectvalue,selectname from workflow_selectitem where fieldid ="+rw_zt_fieldid; + rs.execute(v_sql); + while (rs.next()) + { + String selectvalue = weaver.general.Util.null2String(rs.getString("selectvalue")); + String selectname = weaver.general.Util.null2String(rs.getString("selectname")); + rwMap.put(selectvalue,selectname); + } + } + + Map dbMap = new HashMap(); + String db_zt_fieldid = "" ; + v_sql = " select k.id from workflow_billfield k\n" + + " inner join workflow_bill l on l.id = k.billid\n" + + " where l.tablename = 'uf_xzsx' and fieldname = 'xzzt' " ; + rs.executeQuery(v_sql); + if(rs.next()){ + db_zt_fieldid = Util.null2String(rs.getString("id")); + } + if(!"".equals(xz_zt_fieldid)){ + + v_sql = " select selectvalue,selectname from workflow_selectitem where fieldid ="+db_zt_fieldid; + rs.execute(v_sql); + while (rs.next()) + { + String selectvalue = weaver.general.Util.null2String(rs.getString("selectvalue")); + String selectname = weaver.general.Util.null2String(rs.getString("selectname")); + dbMap.put(selectvalue,selectname); + } + } + + + + + int count= 0; + resourceComInfo = new ResourceComInfo(); + departmentComInfo = new DepartmentComInfo(); + String where = "" ; + if(!"".equals(usercode)) + { + String sql = " select id from hrmresource where workcode='"+usercode+"'and status=1 "; + rs.executeQuery(sql); + while(rs.next()){ + String id = Util.null2String(rs.getString("id")); + where += where=="" ? " instr(',' || tzydzzhyc || ',', ',"+id+",') > 0 " : " or instr(',' ||tzydzzhyc || ',', ',"+id+",') > 0\n" ; + } + } + + if(!"".equals(where)){ + where = " and ( "+where+" ) " ; + } + + String sql1 =" select id, bt,cjr,to_char(jbr) as jbr,substr(cjrq, 0, 16) cjrq,xzzt as zt,'1' as lx " + + " from uf_xzsy\n" + + " where cjzt = 1 " + where + + " union all "+ + " select id,rwbt as bt,cjr,to_char(jbr) as jbr,substr(cjrq, 0, 16) cjrq,rwzt as zt,'2' as lx\n" + + " from uf_rw \n" + + " where cjzt = 1 " + where + + " union all "+ + " select id,bt,cjr,to_char(jbr) as jbr,substr(cjrq, 0, 16) cjrq,xzzt,'3' as lx\n" + + " from uf_xzsx \n" + + " where cjzt = 1 " + where ; + + String countsql = " select count(1) as cou from (" + + sql1+ + " ) p1 "; + + rs.executeQuery(countsql); + if (rs.next()){ + count = Util.getIntValue(Util.null2String(rs.getString("cou"))); + } + System.out.println("count:"+count); + String sql =" select *\n" + + " from (select p.*, rownum as xh\n" + + " from ( \n" + + " select l.* from ( " + sql1 + " ) l order by substr(l.cjrq, 0, 16) desc\n" + + " ) p\n" + + " ) w\n" + + " where w.xh > " + ((page-1) *size) + + " and w.xh <= " + (page*size) ; + rs.executeQuery(sql); + while (rs.next()){ + String id = Util.null2String(rs.getString("id")); + String bt = Util.null2String(rs.getString("bt")); + String cjr = Util.null2String(rs.getString("cjr")); + String jbr = Util.null2String(rs.getString("jbr")); + String cjrq = Util.null2String(rs.getString("cjrq")); + String zt = Util.null2String(rs.getString("zt")); + String ztmc = "" ; + + String lx = Util.null2String(rs.getString("lx")); + String url = "" ; + if("1".equals(lx)){ + url = xzUrl +"&billid="+id; + + if(!"".equals(zt)){ + ztmc = xzMap.get(zt); + } + + }else if("2".equals(lx)){ + url = rwUrl +"&billid="+id; + + if(!"".equals(zt)){ + ztmc = rwMap.get(zt); + } + + }else if("3".equals(lx)){ + url = dbUrl +"&billid="+id; + if(!"".equals(zt)){ + ztmc = dbMap.get(zt); + } + } + + String jbrname = "" ; + String cjrname = "" ; + String cjrbm = "" ; + String cjrbmname = "" ; + if(!"".equals(jbr)){ + jbrname = resourceComInfo.getLastnames(jbr); + cjrbm = resourceComInfo.getDepartmentID(jbr); + + } + + if(!"".equals(cjrbm)){ + cjrbmname = departmentComInfo.getDepartmentName(cjrbm); + } + if(!"".equals(cjr)){ + cjrname = resourceComInfo.getLastname(cjr); + } + map = new HashMap(); + map.put("id",id); + map.put("bt",bt); + map.put("cjr",cjr); + map.put("zxr",jbr); + map.put("cjrq",cjrq); + map.put("zt",zt); + map.put("cjrname",cjrname); + map.put("cjrbmname",cjrbmname); + map.put("zxrname",jbrname); + map.put("ztmc",ztmc); + map.put("url",url); + list.add(map); + } + + datas.put("data",list); + datas.put("count",count); + }catch (Exception e){ + e.printStackTrace(); + } + return datas; + } + + + public static void main(String[] args) { + GCONST.setRootPath("WEB-INF/"); + GCONST.setServerName("ecology"); + Map params=new HashMap<>(); + params.put("userid","012901"); + params.put("page","1"); + params.put("size","10"); + User user = new User(); + user.setUid(11260); + ParticipateListCmd ParticipateListCmd = new ParticipateListCmd(params,user); + CommandContext ceshi= new CommandContext(null,null); + ParticipateListCmd.execute(ceshi); + } + + + + + + +} diff --git a/src/main/java/com/engine/htsc/portal/cmd/PortalTransactionCmd.java b/src/main/java/com/engine/htsc/portal/cmd/PortalTransactionCmd.java new file mode 100644 index 0000000..0d3d867 --- /dev/null +++ b/src/main/java/com/engine/htsc/portal/cmd/PortalTransactionCmd.java @@ -0,0 +1,66 @@ +package com.engine.htsc.portal.cmd; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import com.engine.htsc.portal.util.QueryTools; +import com.engine.htsc.response.enums.ResultEnum; +import com.engine.htsc.response.exception.ResultException; +import com.weaver.general.Util; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.hrm.User; + +import java.util.HashMap; +import java.util.Map; + +public class PortalTransactionCmd extends AbstractCommonCommand> { + + private Log log = LogFactory.getLog(this.getClass()); + + public PortalTransactionCmd(){} + public PortalTransactionCmd(Map params, User user) { + this.user = user; + this.params = params; + } + + + + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + Map datas = new HashMap<>(); + try { + if (user == null) { + throw new ResultException(ResultEnum.DEPT_EXIST_USER); + } + int userid = user.getUID(); + String condition = Util.null2String((String) params.get("condition")); + + //1.由我执行 + int perform = QueryTools.getPerformCount(userid,condition); + + //2.我参与的 + int participate = QueryTools.getParticipateCount(userid, condition); + + //3.我创建的 + int create = QueryTools.getCreateCount(userid, condition); + + //4.已完成 + int all = QueryTools.getAllCount(userid, condition); + + datas.put("perform",perform); + datas.put("participate",participate); + datas.put("create",create); + datas.put("all",all); + + }catch (Exception e){ + e.printStackTrace(); + } + return datas; + } +} diff --git a/src/main/java/com/engine/htsc/portal/service/PortalTransactionService.java b/src/main/java/com/engine/htsc/portal/service/PortalTransactionService.java new file mode 100644 index 0000000..f9c9511 --- /dev/null +++ b/src/main/java/com/engine/htsc/portal/service/PortalTransactionService.java @@ -0,0 +1,11 @@ +package com.engine.htsc.portal.service; + +import java.util.Map; + +public interface PortalTransactionService { + + Map getStatisticalCount(Map params); + + Map getParticipateList(Map params); +} + diff --git a/src/main/java/com/engine/htsc/portal/service/impl/PortalTransactionServiceImpl.java b/src/main/java/com/engine/htsc/portal/service/impl/PortalTransactionServiceImpl.java new file mode 100644 index 0000000..4aee83d --- /dev/null +++ b/src/main/java/com/engine/htsc/portal/service/impl/PortalTransactionServiceImpl.java @@ -0,0 +1,25 @@ +package com.engine.htsc.portal.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.portal.cmd.ParticipateListCmd; +import com.engine.htsc.portal.cmd.PortalTransactionCmd; +import com.engine.htsc.portal.service.PortalTransactionService; +import java.util.Map; + +public class PortalTransactionServiceImpl extends Service implements PortalTransactionService { + + /** + * 协同中心首页 + * @param params + * @return + */ + @Override + public Map getStatisticalCount(Map params) { + return commandExecutor.execute(new PortalTransactionCmd(params, user)); + } + + @Override + public Map getParticipateList(Map params) { + return commandExecutor.execute(new ParticipateListCmd(params, user)); + } +} diff --git a/src/main/java/com/engine/htsc/portal/util/QueryTools.java b/src/main/java/com/engine/htsc/portal/util/QueryTools.java new file mode 100644 index 0000000..9b4634d --- /dev/null +++ b/src/main/java/com/engine/htsc/portal/util/QueryTools.java @@ -0,0 +1,165 @@ +package com.engine.htsc.portal.util; + +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.upgradetool.wscheck.Util; + +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.temporal.TemporalAdjusters; + + +/** + * 协同中心首页查询工具 + */ +public class QueryTools { + + /** + * 由我执行 + * @param userid + * @param condition + * @return + */ + public static int getPerformCount(int userid,String condition){ + //1.协作 + int collaboration = generalQueryTool(userid, condition, "uf_xzsy", "jbrzzhyc","xzzt"); + //2.督办 + int oversee = generalQueryTool(userid, condition, "uf_xzsx", "jbrzzhyc","xzzt"); + //3.任务 + int task = generalQueryTool(userid, condition, "uf_rw", "jbrzzhyc","rwzt"); + + return collaboration+oversee+task; + } + + /** + * 我参与的 + * @param userid + * @param condition + * @return + */ + public static int getParticipateCount(int userid,String condition){ + //1.协作 + int collaboration = generalQueryTool(userid, condition, "uf_xzsy", "tzydzzhyc","xzzt"); + //2.督办 + int oversee = generalQueryTool(userid, condition, "uf_xzsx", "tzydzzhyc","xzzt"); + //3.任务 + int task = generalQueryTool(userid, condition, "uf_rw", "tzydzzhyc","rwzt"); + + return collaboration+oversee+task; + } + + /** + * 我创建的 + * @param userid + * @param condition + * @return + */ + public static int getCreateCount(int userid,String condition){ + //1.协作 + int collaboration = generalQueryTool(userid, condition, "uf_xzsy", "cjrzczhyc","xzzt"); + //2.督办 + int oversee = generalQueryTool(userid, condition, "uf_xzsx", "cjrzczhyc","xzzt"); + //3.任务 + int task = generalQueryTool(userid, condition, "uf_rw", "cjrzczhyc","rwzt"); + + return collaboration+oversee+task; + } + + /** + * 全部 + * @param userid + * @param condition + * @return + */ + public static int getAllCount(int userid,String condition){ + //1.协作 + int collaboration = allQueryTool(userid, condition, "uf_xzsy", "xzzt"); + //2.督办 + int oversee = allQueryTool(userid, condition, "uf_xzsx", "xzzt"); + //3.任务 + int task = allQueryTool(userid, condition, "uf_rw", "rwzt"); + + return collaboration+oversee+task; + } + + /** + * 查询通用方法 + * @param userid + * @param condition + * @param tablename + * @param field + * @return + */ + public static int generalQueryTool(int userid,String condition,String tablename,String field, + String status) { + int count = 0; + try { + RecordSet rs = new RecordSet(); + String value = "2"; + if ("cjrzczhyc".equals(field)){ + value = "0,2"; + } + StringBuffer general = new StringBuffer("select count(1) as count from "+tablename+" where " + + "instr(','||"+field+"||',',',"+userid+",') > 0 and cjzt = 1 and "+status+" in ("+value+") "); + + LocalDate today = LocalDate.now(); + String startDate = ""; + String endDate = ""; + if (StringUtils.isNotEmpty(condition)) { + switch (condition) { + case "0": //本周 + startDate = today.with(DayOfWeek.MONDAY).toString(); + endDate = today.with(DayOfWeek.SUNDAY).toString(); + break; + case "1": //本月 + startDate = LocalDate.of(today.getYear(),today.getMonth(),1).toString(); + endDate = today.with(TemporalAdjusters.lastDayOfMonth()).toString(); + break; + case "2": //本年 + startDate = today.with(TemporalAdjusters.firstDayOfYear()).toString(); + endDate = today.with(TemporalAdjusters.lastDayOfYear()).toString(); + break; + default: //自定义日期 + startDate = condition.substring(0,condition.indexOf("/")); + endDate = condition.substring(condition.lastIndexOf("/")+1); + } + general.append(" and to_char(to_date(modedatacreatedate,'yyyy-MM-dd'),'yyyy-MM-dd') " + + "between '"+startDate+"' and '"+endDate+"'"); + } + + rs.executeQuery(general.toString()); + rs.next(); + count = Util.getIntValue(rs.getString("count")); + + }catch (Exception e) { + e.printStackTrace(); + } + return count; + } + + /** + * 已完成查询统计 + * @param userid + * @param condition + * @param tablename + * @param status + * @return + */ + public static int allQueryTool(int userid,String condition,String tablename,String status) { + int count = 0; + try { + RecordSet rs = new RecordSet(); + rs.executeQuery("select count(1) as count from (select jbrzzhyc||','||tzydzzhyc||','||cjrzczhyc as qb," + + " "+status+",cjzt from "+tablename+") where instr(','||qb||',',',"+userid+",') > 0 and "+status+" = 3 and cjzt = 1"); + rs.next(); + count = Util.getIntValue(rs.getString("count")); + + }catch (Exception e){ + e.printStackTrace(); + } + return count; + } + + + +} diff --git a/src/main/java/com/engine/htsc/portal/web/PortalTransactionAction.java b/src/main/java/com/engine/htsc/portal/web/PortalTransactionAction.java new file mode 100644 index 0000000..83feb95 --- /dev/null +++ b/src/main/java/com/engine/htsc/portal/web/PortalTransactionAction.java @@ -0,0 +1,61 @@ +package com.engine.htsc.portal.web; + +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.portal.service.PortalTransactionService; +import com.engine.htsc.portal.service.impl.PortalTransactionServiceImpl; +import com.engine.htsc.response.utils.ResultVoUtil; +import com.engine.htsc.response.vo.ResultVo; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.*; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + + +/** + * 协同中心接口 + */ +public class PortalTransactionAction { + + + private PortalTransactionService getService(User user){ + return ServiceUtil.getService(PortalTransactionServiceImpl.class,user); + } + + + @GET + @Path("/center") + @Produces({MediaType.APPLICATION_JSON}) + public ResultVo coordinationCenter(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = new HashMap<>(); + try { + User user = HrmUserVarify.getUser(request, response); + apidatas = getService(user).getStatisticalCount(ParamUtil.request2Map(request)); + }catch (Exception e){ + e.printStackTrace(); + } + return ResultVoUtil.success("操作成功",apidatas); + } + + + @GET + @Path("/getparticipatelist") + @Produces({MediaType.APPLICATION_JSON}) + public ResultVo getParticipateList(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = new HashMap<>(); + try { + User user = HrmUserVarify.getUser(request, response); + apidatas = getService(user).getParticipateList(ParamUtil.request2Map(request)); + }catch (Exception e){ + e.printStackTrace(); + } + return ResultVoUtil.success("操作成功",apidatas); + } + +} diff --git a/src/main/java/com/engine/htsc/receipt/service/ReceiptAgentService.java b/src/main/java/com/engine/htsc/receipt/service/ReceiptAgentService.java new file mode 100644 index 0000000..8e41003 --- /dev/null +++ b/src/main/java/com/engine/htsc/receipt/service/ReceiptAgentService.java @@ -0,0 +1,66 @@ +package com.engine.htsc.receipt.service; + +import com.engine.core.impl.Service; +import org.apache.commons.lang.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.resource.ResourceComInfo; + +import java.util.*; + +public class ReceiptAgentService extends Service { + + public Map getAgent(String requestid, String fieldvalue){ + BaseBean bs = new BaseBean(); + RecordSet rs = new RecordSet(); + ResourceComInfo resourceComInfo = null; + Map resultMap = new HashMap<>(); + + try{ + resourceComInfo = new ResourceComInfo(); + List valueList = new ArrayList<>(); + List> agentList = new ArrayList<>(); + List useridList = Arrays.asList(fieldvalue.split(",")); + for(String userid:useridList){ + Map agentMap = new HashMap<>(); + String userName = resourceComInfo.getLastname(userid); + String sql = "select * from (select agentorbyagentid,agenttype from workflow_currentoperator t " + + "where agenttype in (1,2) and requestid = '"+requestid+"' and userid = '"+userid+"' " + + "order by t.receivedate desc,t.receivetime desc) where ROWNUM <= 1 "; + bs.writeLog(sql); + rs.executeQuery(sql); + if(rs.next()){ + String agentorbyagentid = Util.null2String(rs.getString("agentorbyagentid")); + String agenttype = Util.null2String(rs.getString("agenttype")); + String agentName = resourceComInfo.getLastname(agentorbyagentid); + bs.writeLog("agentorbyagentid:"+agentorbyagentid); + bs.writeLog("agentName:"+agentName); + bs.writeLog("agenttype:"+agenttype); + if("1".equals(agenttype)){ + valueList.add(agentorbyagentid); + agentMap.put("id",agentorbyagentid); + agentMap.put("name",agentName+"("+userName+"授权)"); + }else{ + valueList.add(userid); + agentMap.put("id",userid); + agentMap.put("name",userName+"("+agentName+"授权)"); + } + }else { + valueList.add(userid); + agentMap.put("id",userid); + agentMap.put("name",userName); + } + agentList.add(agentMap); + } + resultMap.put("value", StringUtils.join(valueList, ",")); + resultMap.put("specialobj",agentList); + resultMap.put("api_status",true); + }catch(Exception e){ + e.printStackTrace(); + resultMap.put("api_status",false); + resultMap.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return resultMap; + } +} diff --git a/src/main/java/com/engine/htsc/receipt/service/ReceiptDirectorService.java b/src/main/java/com/engine/htsc/receipt/service/ReceiptDirectorService.java new file mode 100644 index 0000000..f58bc4b --- /dev/null +++ b/src/main/java/com/engine/htsc/receipt/service/ReceiptDirectorService.java @@ -0,0 +1,93 @@ +package com.engine.htsc.receipt.service; + +import com.engine.core.impl.Service; +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.resource.ResourceComInfo; + +import java.util.*; + +public class ReceiptDirectorService extends Service { + + /** + * 根据部门编号和安全等级获取人员 + * @param deptid + * @param secLevelMix + * @param secLevelMax + * @return + */ + public List> getDirectorByDeptid(String deptid,int secLevelMix,int secLevelMax){ + BaseBean bs = new BaseBean(); + RecordSet rs = new RecordSet(); + List> directorList = new ArrayList<>(); + + String sql = "select id,lastname from HRMRESOURCE where departmentid = '"+deptid+"' and seclevel >= "+secLevelMix+" and seclevel <= "+secLevelMax; + bs.writeLog(sql); + rs.executeQuery(sql); + while(rs.next()){ + Map director = new HashMap<>(); + director.put("id", Util.null2String(rs.getString("id"))); + director.put("name", Util.null2String(rs.getString("lastname"))); + directorList.add(director); + } + return directorList; + } + + /** + * 根据userid和安全等级获取所在部门的人员 + * @param userid + * @param secLevelMix + * @param secLevelMax + * @return + */ + public List> getDirectorByUserid(String userid,int secLevelMix,int secLevelMax){ + BaseBean bs = new BaseBean(); + RecordSet rs = new RecordSet(); + + String deptid = ""; + String sql = "select departmentid from HRMRESOURCE where id = '"+userid+"'"; + bs.writeLog(sql); + rs.executeQuery(sql); + if (rs.next()){ + deptid = Util.null2String(rs.getString("departmentid")); + } + return getDirectorByDeptid(deptid,secLevelMix,secLevelMax); + } + + /** + * 根据userids获取所在部门名称 + * @param userids + * @return + */ + public Map getDepts(String userids){ + BaseBean bs = new BaseBean(); + RecordSet rs = new RecordSet(); + Map resultMap = new HashMap<>(); + + try{ + ResourceComInfo resourceComInfo = new ResourceComInfo(); + DepartmentComInfo departInfo = new DepartmentComInfo(); + + Set deptSet = new LinkedHashSet<>(); + for(String userid:userids.split(",")){ + deptSet.add(resourceComInfo.getDepartmentID(userid)); + } + List> deptMapList = new ArrayList<>(); + for(String deptid:deptSet){ + Map deptMap = new HashMap<>(); + deptMap.put("id",deptid); + deptMap.put("name",departInfo.getDepartmentmark(deptid)); + deptMapList.add(deptMap); + } + resultMap.put("dept",deptMapList); + resultMap.put("deptids", StringUtils.join(deptSet, ",")); + }catch (Exception e){ + e.printStackTrace(); + } + + return resultMap; + } +} diff --git a/src/main/java/com/engine/htsc/receipt/service/ReceiptService.java b/src/main/java/com/engine/htsc/receipt/service/ReceiptService.java new file mode 100644 index 0000000..ffebc97 --- /dev/null +++ b/src/main/java/com/engine/htsc/receipt/service/ReceiptService.java @@ -0,0 +1,414 @@ +package com.engine.htsc.receipt.service; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.engine.core.impl.Service; +import com.engine.htsc.workflow.util.WorkflowUtil; +import com.weaver.general.Util; +import org.apache.commons.lang.StringUtils; +import weaver.conn.RecordSet; +import weaver.docs.docs.DocManager; +import weaver.general.BaseBean; +import weaver.hrm.company.DepartmentComInfo; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.interfaces.htsc.cus.HTUtil; + +import java.text.SimpleDateFormat; +import java.util.*; + +public class ReceiptService extends Service { + + /** + * 复制无水印附件 + * @param userid + * @param docids + * @param oldPair + * @param type + * @return + */ + public Map getCopyDocid(String userid, String docids, String oldPair, String type){ + BaseBean bs = new BaseBean(); + PropBean pb = new PropBean(); + RecordSet rs = new RecordSet(); + Map resultMap = new HashMap<>(); + + try{ + List> pairMapList = new ArrayList<>(); + List> filenameMapList = new ArrayList<>(); + JSONArray jsonArray = JSONObject.parseArray(oldPair); + String gssw_fj_secid = pb.getPropName("gssw_fj"); + String gssw_wsyfj_secid = pb.getPropName("gssw_wsyfj"); + + for(String docid:docids.split(",")){ + bs.writeLog("docid:"+docid); + String imgfileName = ""; + String sql = "select imagefilename from docimagefile where docid = '"+docid+"'"; + bs.writeLog(sql); + rs.executeQuery(sql); + if(rs.next()){ + imgfileName = Util.null2String(rs.getString("imagefilename")); + } + + if(StringUtils.isNotEmpty(imgfileName)){ + bs.writeLog("imgfileName:"+imgfileName); + String pairDocid = ""; + if("1".equals(type)){//附件到无水印附件 + boolean flag = false; + if(jsonArray.size()>0){ + for(int i=0;i pairMap = new HashMap<>(); + pairMap.put("fjDocid",docid); + pairMap.put("wsyfjDocid",pairDocid); + pairMapList.add(pairMap); + Map filenameMap = new HashMap<>(pairMap); + filenameMap.put("imgfileName",imgfileName); + filenameMapList.add(filenameMap); + }else if("2".equals(type)){//无水印附件到附件 + boolean flag = false; + if(jsonArray.size()>0){ + for(int i=0;i pairMap = new HashMap<>(); + pairMap.put("fjDocid",pairDocid); + pairMap.put("wsyfjDocid",docid); + pairMapList.add(pairMap); + Map filenameMap = new HashMap<>(pairMap); + filenameMap.put("imgfileName",imgfileName); + filenameMapList.add(filenameMap); + } + }else{ + resultMap.put("status",false); + resultMap.put("error","没有找到对应文件:"+docid); + return resultMap; + } + } + + bs.writeLog("pairMapList:"+JSON.toJSONString(pairMapList)); + bs.writeLog("filenameMapList:"+JSON.toJSONString(filenameMapList)); + resultMap.put("status",true); + resultMap.put("pairMapList", pairMapList); + resultMap.put("filenameMapList", filenameMapList); + + }catch (Exception e){ + e.printStackTrace(); + resultMap.put("status",false); + resultMap.put("error","复制文件失败"); + return resultMap; + } + + return resultMap; + } + + + /** + * 刷新无水印附件历史数据 + * @param requestids + * @return + */ + public Map copyAllFile(String requestids){ + BaseBean bs = new BaseBean(); + PropBean pb = new PropBean(); + RecordSet rs = new RecordSet(); + Map resultMap = new HashMap<>(); + List successList = new ArrayList<>(); + List failList = new ArrayList<>(); + + try{ + String workflowid = pb.getWorkflowIdsByUnNumber("gssw"); + String gssw_wsyfj_secid = pb.getPropName("gssw_wsyfj"); + HTUtil ht = new HTUtil(); + String tablename = ht.getTableNameByWfid(Integer.parseInt(workflowid)); + + List requestidList = new ArrayList<>(); + if(StringUtils.isNotEmpty(requestids)){ + requestidList = Arrays.asList(requestids.split(",")); + }else { + String sql = "select requestid from workflow_requestbase where workflowid = '"+workflowid+"'"; + bs.writeLog(sql); + rs.executeQuery(sql); + while (rs.next()){ + requestidList.add(Util.null2String(rs.getString("requestid"))); + } + } + + for(String requestid:requestidList){ + try{ + String fj = ""; + String sql = "select fj from "+tablename+" where requestid = '"+requestid+"'"; + bs.writeLog(sql); + rs.executeQuery(sql); + if(rs.next()){ + fj = Util.null2String(rs.getString("fj")); + } + + if(StringUtils.isNotEmpty(fj)){ + List wsyfjidList = new ArrayList<>(); + List> pairMapList = new ArrayList<>(); + for(String docid:fj.split(",")){ + bs.writeLog("docid:"+docid); + String imgfileName = ""; + String operateuserid = ""; + sql = "select imagefilename,operateuserid from docimagefile where docid = '"+docid+"'"; + bs.writeLog(sql); + rs.executeQuery(sql); + if(rs.next()){ + imgfileName = Util.null2String(rs.getString("imagefilename")); + operateuserid = Util.null2String(rs.getString("operateuserid")); + } + + if(StringUtils.isNotEmpty(imgfileName)) { + bs.writeLog("imgfileName:"+imgfileName); + DocManager docmanager = new DocManager(); + docmanager.setId(Integer.parseInt(docid)); + docmanager.setSeccategory(Integer.parseInt(gssw_wsyfj_secid)); + docmanager.setDocsubject(imgfileName); + docmanager.setUserid(Integer.parseInt(operateuserid)); + docmanager.setUsertype("1"); + docmanager.setDoccreaterid(Integer.parseInt(operateuserid)); + int newdocid = docmanager.copyDoc(); + bs.writeLog("newdocid:"+newdocid); + String pairDocid = String.valueOf(newdocid); + wsyfjidList.add(pairDocid); + + Map pairMap = new HashMap<>(); + pairMap.put("fjDocid",docid); + pairMap.put("wsyfjDocid",pairDocid); + pairMapList.add(pairMap); + } + } + + bs.writeLog("wsyfjidList:"+JSON.toJSONString(wsyfjidList)); + bs.writeLog("pairMapList:"+JSON.toJSONString(pairMapList)); + String wsyfj = org.apache.commons.lang3.StringUtils.join(wsyfjidList, ","); + String ppxx = JSON.toJSONString(pairMapList); + String update_sql = "update "+tablename+" set wsyfj = '"+wsyfj+"', ppxx = '"+ppxx+"' where requestid = '"+requestid+"'"; + bs.writeLog(update_sql); + rs.executeUpdate(update_sql); + successList.add(requestid); + } + }catch (Exception e){ + e.printStackTrace(); + failList.add(requestid); + } + } + }catch (Exception e){ + e.printStackTrace(); + resultMap.put("status",false); + resultMap.put("error","复制文件失败"); + return resultMap; + } + + resultMap.put("successList",successList); + resultMap.put("failList",failList); + return resultMap; + } + + public Map refreshInfo(String requestids){ + BaseBean bs = new BaseBean(); + PropBean pb = new PropBean(); + RecordSet rs = new RecordSet(); + Map resultMap = new HashMap<>(); + List successList = new ArrayList<>(); + List failList = new ArrayList<>(); + + try{ + String workflowid = pb.getWorkflowIdsByUnNumber("gssw"); + HTUtil ht = new HTUtil(); + String tablename = ht.getTableNameByWfid(Integer.parseInt(workflowid)); + + List requestidList = new ArrayList<>(); + if(StringUtils.isNotEmpty(requestids)){ + requestidList = Arrays.asList(requestids.split(",")); + }else { + String sql = "select requestid from workflow_requestbase where workflowid = '"+workflowid+"'"; + bs.writeLog(sql); + rs.executeQuery(sql); + while (rs.next()){ + requestidList.add(Util.null2String(rs.getString("requestid"))); + } + } + + for(String requestid:requestidList){ + try{ + String mainid = ""; + String sql = "select id from "+tablename+" where requestid = '"+requestid+"'"; + bs.writeLog(sql); + rs.executeQuery(sql); + if(rs.next()){ + mainid = Util.null2String(rs.getString("id")); + } + + //主办部门领导 + String zbbmld = ""; + sql = "select bmld from "+tablename+"_dt6 where mainid = '"+mainid+"'"; + bs.writeLog(sql); + rs.executeQuery(sql); + if(rs.next()){ + zbbmld = Util.null2String(rs.getString("bmld")); + } + + //协办部门人员 + String xbbmry = ""; + List xbbmryList = new ArrayList<>(); + sql = "select bmld from "+tablename+"_dt8 where mainid = '"+mainid+"'"; + bs.writeLog(sql); + rs.executeQuery(sql); + while(rs.next()){ + xbbmryList.add(Util.null2String(rs.getString("bmld"))); + } + if(xbbmryList.size()>0){ + xbbmry = StringUtils.join(xbbmryList,","); + } + + //看阅部门人员 + String kybmry = ""; + List kybmryList = new ArrayList<>(); + sql = "select bmld from "+tablename+"_dt10 where mainid = '"+mainid+"'"; + bs.writeLog(sql); + rs.executeQuery(sql); + while(rs.next()){ + kybmryList.add(Util.null2String(rs.getString("bmld"))); + } + if(kybmryList.size()>0){ + kybmry = StringUtils.join(kybmryList,","); + } + + String update_sql = "update "+tablename+" set zbbmld = '"+zbbmld+"', xbbmry = '"+xbbmry+"', kybmry = '"+kybmry+"' where requestid = '"+requestid+"'"; + bs.writeLog(update_sql); + rs.executeUpdate(update_sql); + + //更新子流程数据 + List subRequestidList = new ArrayList<>(); + sql = "select subrequestid from WORKFLOW_SUBWFREQUEST where mainrequestid = '"+requestid+"'"; + bs.writeLog(sql); + rs.executeQuery(sql); + while(rs.next()){ + subRequestidList.add(Util.null2String(rs.getString("subrequestid"))); + } + for(String subRequestid:subRequestidList) { + String subTablename = JAVATools.getMaintable(subRequestid); + update_sql = "update " + subTablename + " set zbbmld = '" + zbbmld + "', xbbmry = '" + xbbmry + "', kybmry = '" + kybmry + "' where requestid = '" + subRequestid + "'"; + bs.writeLog(update_sql); + rs.executeUpdate(update_sql); + } + + successList.add(requestid); + }catch (Exception e){ + e.printStackTrace(); + failList.add(requestid); + } + } + }catch (Exception e){ + e.printStackTrace(); + resultMap.put("status",false); + resultMap.put("error","刷新失败"); + return resultMap; + } + + resultMap.put("successList",successList); + resultMap.put("failList",failList); + return resultMap; + } + + public String updateDeptName(String requestid, String ids, String spDeptid, String spDeptName, String startTime){ + BaseBean bs = new BaseBean(); + RecordSet rs = new RecordSet(); + RecordSet rs1 = new RecordSet(); + RecordSet rs2 = new RecordSet(); + + try { + DepartmentComInfo departmentComInfo = new DepartmentComInfo(); + String tableName = JAVATools.getMaintable(requestid); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + + String sql = "select t1.id,t1.fsbm,t1.bm,t2.ngrq from "+tableName+"_dt11 t1, "+tableName+" t2 where t2.id = t1.mainid"; + if (StringUtils.isNotBlank(ids)) { + sql += " and t1.id in (" + ids + ")"; + } + bs.writeLog(sql); + rs.executeQuery(sql); + while (rs.next()) { + String id = Util.null2String(rs.getString("id")); + String fsbm = Util.null2String(rs.getString("fsbm")); + String bm = Util.null2String(rs.getString("bm")); + String ngrq = Util.null2String(rs.getString("ngrq")); + if (StringUtils.isNotBlank(fsbm) && StringUtils.isBlank(bm)) { + List deptNameList = new ArrayList<>(); + for (String deptid : fsbm.split(",")) { + String showName = ""; + if(deptid.equals(spDeptid)&&(StringUtils.isBlank(startTime)||sdf.parse(ngrq).before(sdf.parse(startTime)))){ + showName = spDeptName; + }else{ + showName = departmentComInfo.getDepartmentname(deptid); + } + String orgid = ""; + sql = " select l.id from (select t.id from HrmDepartment t where t.supdepid is null or t.supdepid = 0 start with t.id=" + deptid + " connect by prior t.supdepid=t.id ) l"; + rs1.execute(sql); + if (rs1.next()) { + orgid = com.weaver.general.Util.null2String(rs1.getString("id")); + } + if (!deptid.equals(orgid)) { + String orgName = WorkflowUtil.getTopDeptShortName(orgid); + showName = showName + "(" + orgName + ")"; + } + deptNameList.add(showName); + } + String deptNameStr = String.join(" ", deptNameList); + + String update_sql = "update " + tableName + "_dt11 set bm = '" + deptNameStr + "' where id = '" + id + "'"; + bs.writeLog(update_sql); + rs2.executeUpdate(update_sql); + } + } + }catch (Exception e){ + e.printStackTrace(); + return "error"; + } + return "success"; + } +} diff --git a/src/main/java/com/engine/htsc/receipt/service/ReceiptWaitService.java b/src/main/java/com/engine/htsc/receipt/service/ReceiptWaitService.java new file mode 100644 index 0000000..7a922d1 --- /dev/null +++ b/src/main/java/com/engine/htsc/receipt/service/ReceiptWaitService.java @@ -0,0 +1,102 @@ +package com.engine.htsc.receipt.service; + +import com.engine.core.impl.Service; +import dm.jdbc.util.StringUtil; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.TimeUtil; +import weaver.general.Util; + +import java.util.HashMap; +import java.util.Map; + +public class ReceiptWaitService extends Service { + + /** + * 更新收文等待状态 + * @param requestid + * @param userid + * @param type + * @return + */ + public Map updateWait(String requestid, String userid, String type){ + BaseBean bs = new BaseBean(); + RecordSet rs = new RecordSet(); + Map apidatas = new HashMap(); + + String showName = "收文等待"; + String colorval = "#C576BA"; + String operatedate = TimeUtil.getCurrentDateString(); + String operatetime = TimeUtil.getOnlyCurrentTimeString(); + String id = ""; + String sql = "select id from workflow_attentionTypeSet where userid = "+userid+" and SHOWNAME ='"+showName+"'"; + bs.writeLog(sql); + rs.executeQuery(sql); + if(rs.next()){ + id = Util.null2String(rs.getString("id")); + }else{ + String insertSql = "insert into WORKFLOW_ATTENTIONTYPESET(userid,usertype,showname,colorval,showorder,operatedate,operatetime) values(?,?,?,?,?,?,?)"; + rs.executeUpdate(insertSql,new Object[]{userid,0,showName,colorval,-1,operatedate,operatetime}); + sql = "select id from workflow_attentionTypeSet where userid = "+userid+" and SHOWNAME ='"+showName+"'"; + bs.writeLog(sql); + rs.executeQuery(sql); + if(rs.next()){ + id = Util.null2String(rs.getString("id")); + } + } + if("add".equals(type)){ + sql = "select * from workflow_attention where userid= "+userid+" and usertype= 0 and requestid = "+requestid+" and atypeid = "+id; + bs.writeLog(sql); + rs.execute(sql); + if (rs.next()){ + }else { + String addSql = "insert into workflow_attention(userid,usertype,requestid,atypeid,operatedate,operatetime) values(?,?,?,?,?,?)"; + rs.executeUpdate(addSql,new Object[]{userid,0,requestid,id,operatedate,operatetime}); + } + }else if("delete".equals(type)){ + String delsql = "delete from workflow_attention where userid= "+userid+" and usertype= 0 and requestid = "+requestid+" and atypeid = "+id; + bs.writeLog(delsql); + rs.executeUpdate(delsql); + } + return apidatas; + } + + /** + * 查询收文等待状态 + * @param requestid + * @param userid + * @return + */ + public Map getWaitStatus(String requestid, String userid){ + BaseBean bs = new BaseBean(); + RecordSet rs = new RecordSet(); + Map apidatas = new HashMap(); + + String showName = "收文等待"; + String id = ""; + String sql = "select id from workflow_attentionTypeSet where userid = "+userid+" and SHOWNAME ='"+showName+"'"; + bs.writeLog(sql); + rs.executeQuery(sql); + if(rs.next()){ + id = Util.null2String(rs.getString("id")); + } + + if(StringUtil.isNotEmpty(id)){ + String attentionid = ""; + sql = "select id from workflow_attention where userid= "+userid+" and usertype= 0 and requestid = "+requestid+" and atypeid = "+id; + bs.writeLog(sql); + rs.executeQuery(sql); + if(rs.next()){ + attentionid = Util.null2String(rs.getString("id")); + } + if(StringUtil.isNotEmpty(attentionid)){ + apidatas.put("waitStatus",true); + }else{ + apidatas.put("waitStatus",false); + } + }else { + apidatas.put("waitStatus",false); + } + return apidatas; + } +} diff --git a/src/main/java/com/engine/htsc/receipt/web/ReceiptAction.java b/src/main/java/com/engine/htsc/receipt/web/ReceiptAction.java new file mode 100644 index 0000000..6f6899d --- /dev/null +++ b/src/main/java/com/engine/htsc/receipt/web/ReceiptAction.java @@ -0,0 +1,122 @@ +package com.engine.htsc.receipt.web; + +import com.alibaba.fastjson.JSON; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.receipt.service.ReceiptService; +import weaver.general.BaseBean; +import weaver.general.Util; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +public class ReceiptAction { + + ReceiptService getService() { + return ServiceUtil.getService(ReceiptService.class); + } + + @POST + @Path("/getCopyDocid") + @Produces({MediaType.TEXT_PLAIN}) + public String getCopyDocid(@Context HttpServletRequest request, @Context HttpServletResponse response){ + BaseBean bs = new BaseBean(); + Map apidatas = new HashMap(); + bs.writeLog("----ReceiptAction-----"); + try{ + Map param = ParamUtil.request2Map(request); + String userid = Util.null2String(param.get("userid")); + String type = Util.null2String(param.get("type")); + String docids = Util.null2String(param.get("docids")); + String oldPair = Util.null2String(param.get("oldPair")); + + ReceiptService service = getService(); + apidatas = service.getCopyDocid(userid,docids,oldPair,type); + }catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + + return JSON.toJSONString(apidatas); + } + + + @POST + @Path("/copyAllFile") + @Produces({MediaType.TEXT_PLAIN}) + public String copyAllFile(@Context HttpServletRequest request, @Context HttpServletResponse response){ + BaseBean bs = new BaseBean(); + Map apidatas = new HashMap(); + bs.writeLog("----ReceiptAction-----"); + try{ + Map param = ParamUtil.request2Map(request); + String requestids = Util.null2String(param.get("requestids")); + + ReceiptService service = getService(); + apidatas = service.copyAllFile(requestids); + }catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + + return JSON.toJSONString(apidatas); + } + + @POST + @Path("/refreshInfo") + @Produces({MediaType.TEXT_PLAIN}) + public String refreshInfo(@Context HttpServletRequest request, @Context HttpServletResponse response){ + BaseBean bs = new BaseBean(); + Map apidatas = new HashMap(); + bs.writeLog("----ReceiptAction-----"); + try{ + Map param = ParamUtil.request2Map(request); + String requestids = Util.null2String(param.get("requestids")); + + ReceiptService service = getService(); + apidatas = service.refreshInfo(requestids); + }catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + + return JSON.toJSONString(apidatas); + } + + @POST + @Path("/updateDeptName") + @Produces({MediaType.TEXT_PLAIN}) + public String updateDeptName(@Context HttpServletRequest request, @Context HttpServletResponse response){ + BaseBean bs = new BaseBean(); + Map apidatas = new HashMap(); + bs.writeLog("----ReceiptAction-----"); + try{ + Map param = ParamUtil.request2Map(request); + String requestid = Util.null2String(param.get("requestid")); + String ids = Util.null2String(param.get("ids")); + String spDeptid = Util.null2String(param.get("spDeptid")); + String spDeptName = Util.null2String(param.get("spDeptName")); + String startTime = Util.null2String(param.get("startTime")); + + ReceiptService service = getService(); + apidatas.put("message",service.updateDeptName(requestid,ids,spDeptid,spDeptName,startTime)); + }catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + + return JSON.toJSONString(apidatas); + } + +} diff --git a/src/main/java/com/engine/htsc/receipt/web/ReceiptAgentAction.java b/src/main/java/com/engine/htsc/receipt/web/ReceiptAgentAction.java new file mode 100644 index 0000000..62dbfa4 --- /dev/null +++ b/src/main/java/com/engine/htsc/receipt/web/ReceiptAgentAction.java @@ -0,0 +1,45 @@ +package com.engine.htsc.receipt.web; + +import com.alibaba.fastjson.JSON; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.receipt.service.ReceiptAgentService; +import weaver.general.BaseBean; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +public class ReceiptAgentAction { + + ReceiptAgentService getService(){ + return ServiceUtil.getService(ReceiptAgentService.class); + } + + @POST + @Path("/getAgent") + @Produces({MediaType.TEXT_PLAIN}) + public String getAgent(@Context HttpServletRequest request, @Context HttpServletResponse response){ + BaseBean bs = new BaseBean(); + Map apidatas = new HashMap(); + bs.writeLog("----receipt-----"); + try{ + String requestid = request.getParameter("requestid"); + String fieldvalue = request.getParameter("fieldvalue"); + + ReceiptAgentService receiptAgentService = getService(); + apidatas = receiptAgentService.getAgent(requestid,fieldvalue); + }catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + + return JSON.toJSONString(apidatas); + } +} diff --git a/src/main/java/com/engine/htsc/receipt/web/ReceiptDirectorAction.java b/src/main/java/com/engine/htsc/receipt/web/ReceiptDirectorAction.java new file mode 100644 index 0000000..8da3278 --- /dev/null +++ b/src/main/java/com/engine/htsc/receipt/web/ReceiptDirectorAction.java @@ -0,0 +1,75 @@ +package com.engine.htsc.receipt.web; + +import com.alibaba.fastjson.JSON; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.receipt.service.ReceiptDirectorService; +import weaver.general.BaseBean; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * create by PTY + */ +public class ReceiptDirectorAction { + + ReceiptDirectorService getService(){ + return ServiceUtil.getService(ReceiptDirectorService.class); + } + + @POST + @Path("/getDirector") + @Produces({MediaType.TEXT_PLAIN}) + public String getDirector(@Context HttpServletRequest request, @Context HttpServletResponse response){ + BaseBean bs = new BaseBean(); + Map apidatas = new HashMap(); + bs.writeLog("----receipt-----"); + try{ + String userid = request.getParameter("userid"); + int secLevelMix = Integer.parseInt(request.getParameter("secLevelMix")); + int secLevelMax = Integer.parseInt(request.getParameter("secLevelMax")); + + ReceiptDirectorService receiptDirectorService = getService(); + List> directorList = receiptDirectorService.getDirectorByUserid(userid,secLevelMix,secLevelMax); + apidatas.put("directorList",directorList); + }catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + + return JSON.toJSONString(apidatas); + } + + @POST + @Path("/getDepts") + @Produces({MediaType.TEXT_PLAIN}) + public String getDepts(@Context HttpServletRequest request, @Context HttpServletResponse response){ + BaseBean bs = new BaseBean(); + Map apidatas = new HashMap(); + bs.writeLog("----receipt-----"); + try{ + String userids = request.getParameter("userids"); + + ReceiptDirectorService receiptDirectorService = getService(); + apidatas = receiptDirectorService.getDepts(userids); + }catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + + return JSON.toJSONString(apidatas); + } +} diff --git a/src/main/java/com/engine/htsc/receipt/web/ReceiptWaitAction.java b/src/main/java/com/engine/htsc/receipt/web/ReceiptWaitAction.java new file mode 100644 index 0000000..f167c39 --- /dev/null +++ b/src/main/java/com/engine/htsc/receipt/web/ReceiptWaitAction.java @@ -0,0 +1,75 @@ +package com.engine.htsc.receipt.web; + +import com.alibaba.fastjson.JSON; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.receipt.service.ReceiptDirectorService; +import com.engine.htsc.receipt.service.ReceiptWaitService; +import weaver.general.BaseBean; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * create by PTY + */ +public class ReceiptWaitAction { + + ReceiptWaitService getService(){ + return ServiceUtil.getService(ReceiptWaitService.class); + } + + @POST + @Path("/updateWait") + @Produces({MediaType.TEXT_PLAIN}) + public String updateWait(@Context HttpServletRequest request, @Context HttpServletResponse response){ + BaseBean bs = new BaseBean(); + Map apidatas = new HashMap(); + bs.writeLog("----receipt-----"); + try{ + String userid = request.getParameter("userid"); + String requestid = request.getParameter("requestid"); + String type = request.getParameter("type"); + + ReceiptWaitService receiptWaitService = getService(); + receiptWaitService.updateWait(requestid,userid,type); + apidatas.put("api_status",true); + }catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + + return JSON.toJSONString(apidatas); + } + + @POST + @Path("/getWaitStatus") + @Produces({MediaType.TEXT_PLAIN}) + public String getWaitStatus(@Context HttpServletRequest request, @Context HttpServletResponse response){ + BaseBean bs = new BaseBean(); + Map apidatas = new HashMap(); + bs.writeLog("----receipt-----"); + try{ + String userid = request.getParameter("userid"); + String requestid = request.getParameter("requestid"); + + ReceiptWaitService receiptWaitService = getService(); + apidatas = receiptWaitService.getWaitStatus(requestid,userid); + apidatas.put("api_status",true); + }catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + + return JSON.toJSONString(apidatas); + } +} diff --git a/src/main/java/com/engine/htsc/response/constant/StatusConst.java b/src/main/java/com/engine/htsc/response/constant/StatusConst.java new file mode 100644 index 0000000..3cad403 --- /dev/null +++ b/src/main/java/com/engine/htsc/response/constant/StatusConst.java @@ -0,0 +1,14 @@ +package com.engine.htsc.response.constant; + +/** + * 数据状态常量 + */ +public class StatusConst { + + /** 正常状态码 */ + public static final byte OK = 1; + + /** 删除状态码 */ + public static final byte DELETE = 2; + +} diff --git a/src/main/java/com/engine/htsc/response/enums/ResultEnum.java b/src/main/java/com/engine/htsc/response/enums/ResultEnum.java new file mode 100644 index 0000000..c2be94f --- /dev/null +++ b/src/main/java/com/engine/htsc/response/enums/ResultEnum.java @@ -0,0 +1,63 @@ +package com.engine.htsc.response.enums; + +import com.engine.htsc.response.exception.interfaces.ResultInterface; + +public enum ResultEnum implements ResultInterface { + + /** + * 通用状态 + */ + SUCCESS(200, "成功"), + ERROR(400, "错误"), + + /** + * 账户问题 + */ + USER_EXIST(401, "用户不存在"), + + /** + * 角色问题 + */ + ROLE_EXIST(401, "该角色标识已经存在,不允许重复!"), + + /** + * 部门问题 + */ + DEPT_EXIST_USER(401, "部门存在用户,无法删除"), + + /** + * 字典问题 + */ + DICT_EXIST(401, "该字典标识已经存在,不允许重复!"), + + /** + * 非法操作 + */ + STATUS_ERROR(401, "非法操作:状态有误"), + + /** + * 权限问题 + */ + NO_PERMISSIONS(401, "权限不足!"), + ; + + private Integer code; + + private String message; + + ResultEnum(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + + public String getMessage() { + return message; + } + +} + diff --git a/src/main/java/com/engine/htsc/response/enums/StatusEnum.java b/src/main/java/com/engine/htsc/response/enums/StatusEnum.java new file mode 100644 index 0000000..eb8a459 --- /dev/null +++ b/src/main/java/com/engine/htsc/response/enums/StatusEnum.java @@ -0,0 +1,33 @@ +package com.engine.htsc.response.enums; + +import com.engine.htsc.response.constant.StatusConst; + +public enum StatusEnum { + + /** + * 正常的数据 + */ + OK(StatusConst.OK, "启用"), + + /** + * 数据已被删除 + */ + DELETE(StatusConst.DELETE, "删除"); + + private Byte code; + + private String message; + + StatusEnum(Byte code, String message) { + this.code = code; + this.message = message; + } + + public Byte getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/src/main/java/com/engine/htsc/response/exception/ResultException.java b/src/main/java/com/engine/htsc/response/exception/ResultException.java new file mode 100644 index 0000000..ee919dc --- /dev/null +++ b/src/main/java/com/engine/htsc/response/exception/ResultException.java @@ -0,0 +1,44 @@ +package com.engine.htsc.response.exception; + +import com.engine.htsc.response.enums.ResultEnum; +import com.engine.htsc.response.exception.interfaces.ResultInterface; + +/** + * 自定义异常对象 + */ +public class ResultException extends RuntimeException { + + private Integer code; + + /** + * 统一异常处理 + * @param resultEnum 状态枚举 + */ + public ResultException(ResultEnum resultEnum) { + super(resultEnum.getMessage()); + this.code = resultEnum.getCode(); + } + + /** + * 统一异常处理 + * @param resultEnum 枚举类型,需要实现结果枚举接口 + */ + public ResultException(ResultInterface resultEnum) { + super(resultEnum.getMessage()); + this.code = resultEnum.getCode(); + } + + /** + * 统一异常处理 + * @param code 状态码 + * @param message 提示信息 + */ + public ResultException(Integer code, String message) { + super(message); + this.code = code; + } + + public Integer getCode() { + return code; + } +} diff --git a/src/main/java/com/engine/htsc/response/exception/interfaces/ResultInterface.java b/src/main/java/com/engine/htsc/response/exception/interfaces/ResultInterface.java new file mode 100644 index 0000000..bda4b14 --- /dev/null +++ b/src/main/java/com/engine/htsc/response/exception/interfaces/ResultInterface.java @@ -0,0 +1,19 @@ +package com.engine.htsc.response.exception.interfaces; + +/** + * 结果枚举接口 + */ +public interface ResultInterface { + + /** + * 获取状态编码 + * @return 编码 + */ + Integer getCode(); + + /** + * 获取提示信息 + * @return 提示信息 + */ + String getMessage(); +} diff --git a/src/main/java/com/engine/htsc/response/utils/ResultVoUtil.java b/src/main/java/com/engine/htsc/response/utils/ResultVoUtil.java new file mode 100644 index 0000000..ebd4a4b --- /dev/null +++ b/src/main/java/com/engine/htsc/response/utils/ResultVoUtil.java @@ -0,0 +1,73 @@ +package com.engine.htsc.response.utils; + +import com.engine.htsc.response.enums.ResultEnum; +import com.engine.htsc.response.vo.ResultVo; + +/** + * 响应数据(结果)最外层对象工具 + */ +public class ResultVoUtil { + + public static ResultVo SAVE_SUCCESS = success("保存成功"); + + + /** + * 操作成功 + * @param msg 提示信息 + * @param object 对象 + */ + public static ResultVo success(String msg, Object object){ + ResultVo resultVo = new ResultVo<>(); + resultVo.setMsg(msg); + resultVo.setCode(ResultEnum.SUCCESS.getCode()); + resultVo.setData(object); + return resultVo; + } + + /** + * 操作成功,使用默认的提示信息 + * @param object 对象 + */ + public static ResultVo success(Object object){ + String message = ResultEnum.SUCCESS.getMessage(); + return success(message,object); + } + + /** + * 操作成功,返回提示信息,不返回数据 + */ + public static ResultVo success(String msg){ + Object object = null; + return success(msg,object); + } + + /** + * 操作成功,不返回数据 + */ + public static ResultVo success(){ + return success(null); + } + + /** + * 操作有误 + * @param code 错误码 + * @param msg 提示信息 + */ + public static ResultVo error(Integer code, String msg){ + ResultVo resultVo = new ResultVo(); + resultVo.setMsg(msg); + resultVo.setCode(code); + return resultVo; + } + + /** + * 操作有误,使用默认400错误码 + * @param msg 提示信息 + */ + public static ResultVo error(String msg){ + Integer code = ResultEnum.ERROR.getCode(); + return error(code,msg); + } + +} + diff --git a/src/main/java/com/engine/htsc/response/vo/ResultVo.java b/src/main/java/com/engine/htsc/response/vo/ResultVo.java new file mode 100644 index 0000000..af11a26 --- /dev/null +++ b/src/main/java/com/engine/htsc/response/vo/ResultVo.java @@ -0,0 +1,60 @@ +package com.engine.htsc.response.vo; + +/** + * 响应数据(结果)最外层对象 + * @param + */ + +public class ResultVo { + + /** 状态码 */ + private Integer code; + + /** 提示信息 */ + private String msg; + + /** 响应数据 */ + private T data; + + public ResultVo() { + } + + public ResultVo(Integer code, String msg, T data) { + this.code = code; + this.msg = msg; + this.data = data; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } + + @Override + public String toString() { + return "ResultVo{" + + "code=" + code + + ", msg='" + msg + '\'' + + ", data=" + data + + '}'; + } +} diff --git a/src/main/java/com/engine/htsc/sendimage/cmd/SendImageCmd.java b/src/main/java/com/engine/htsc/sendimage/cmd/SendImageCmd.java new file mode 100644 index 0000000..47d5c0a --- /dev/null +++ b/src/main/java/com/engine/htsc/sendimage/cmd/SendImageCmd.java @@ -0,0 +1,70 @@ +package com.engine.htsc.sendimage.cmd; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.htsc.cus.HTUtil; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Author:DTY-PC + * Date:2020/10/22 20:39 + * Description: + * Copyright:上海泛微网络科技股份有限公司 + */ +public class SendImageCmd extends AbstractCommonCommand> { + + public SendImageCmd(User user,Map params) { + this.user = user; + this.params = params; + } + + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + Map apidatas = new HashMap<>(); + BaseBean bb = new BaseBean(); + int uid = user.getUID(); + try { + ResourceComInfo rc = new ResourceComInfo(); + String workcode = rc.getWorkcode(uid+"");//工号 + String fileids = Util.null2String(params.get("fileids"));//新增文件id + String billid = Util.null2String(params.get("billid"));//流程编号 + String filetype = Util.null2String(params.get("filetype"));//文件类型 0:非票据 1:票据 + HTUtil ht = new HTUtil(); + List fileidsList = Util.splitString2List(fileids,","); + Map para = new HashMap<>(); + para.put("workcode",workcode); + para.put("billid",billid); + para.put("filetype",filetype); + JSONArray array = new JSONArray(); + for(String ids : fileidsList){ + JSONObject jsonObject = new JSONObject(); + para.put("fileids",ids); + String datas = ht.SendImage(para); + jsonObject.put("datas",datas); + jsonObject.put("ids",ids); + array.add(jsonObject); + } + apidatas.put("datas",array); + } catch (Exception e) { + e.printStackTrace(); + return apidatas; + } + return apidatas; + } + +} diff --git a/src/main/java/com/engine/htsc/sendimage/service/SendImageService.java b/src/main/java/com/engine/htsc/sendimage/service/SendImageService.java new file mode 100644 index 0000000..d6a023e --- /dev/null +++ b/src/main/java/com/engine/htsc/sendimage/service/SendImageService.java @@ -0,0 +1,18 @@ +package com.engine.htsc.sendimage.service; + +import java.util.Map; + +/** + * Author:DTY-PC + * Date:2020/10/22 20:37 + * Description: + * Copyright:上海泛微网络科技股份有限公司 + */ +public interface SendImageService { + /** + * 调用影像验真接口 + * @param params 参数 + * @return + */ + Map doSendImage(Map params); +} diff --git a/src/main/java/com/engine/htsc/sendimage/service/impl/SendImageServiceImpl.java b/src/main/java/com/engine/htsc/sendimage/service/impl/SendImageServiceImpl.java new file mode 100644 index 0000000..3103c4d --- /dev/null +++ b/src/main/java/com/engine/htsc/sendimage/service/impl/SendImageServiceImpl.java @@ -0,0 +1,20 @@ +package com.engine.htsc.sendimage.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.sendimage.cmd.SendImageCmd; +import com.engine.htsc.sendimage.service.SendImageService; + +import java.util.Map; + +/** + * Author:DTY-PC + * Date:2020/10/22 20:38 + * Description: + * Copyright:上海泛微网络科技股份有限公司 + */ +public class SendImageServiceImpl extends Service implements SendImageService { + @Override + public Map doSendImage(Map params) { + return commandExecutor.execute(new SendImageCmd(user,params)); + } +} diff --git a/src/main/java/com/engine/htsc/sendimage/web/SendImageAction.java b/src/main/java/com/engine/htsc/sendimage/web/SendImageAction.java new file mode 100644 index 0000000..439dd60 --- /dev/null +++ b/src/main/java/com/engine/htsc/sendimage/web/SendImageAction.java @@ -0,0 +1,54 @@ +package com.engine.htsc.sendimage.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.sendimage.service.SendImageService; +import com.engine.htsc.sendimage.service.impl.SendImageServiceImpl; +import weaver.general.BaseBean; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +/** + * Author:DTY-PC + * Date:2020/10/26 15:15 + * Description: + * Copyright:上海泛微网络科技股份有限公司 + */ +public class SendImageAction { + private SendImageService getService(User user){ + return ServiceUtil.getService(SendImageServiceImpl.class,user); + } + + @GET + @Path("/doSendImage") + @Produces({MediaType.TEXT_PLAIN}) + public String sendImage(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = new HashMap<>(); + try { + //获取当前用户 + User user = HrmUserVarify.getUser(request, response); + Map para = ParamUtil.request2Map(request); + BaseBean bb = new BaseBean(); + apidatas.putAll(getService(user).doSendImage(para)); + apidatas.put("api_status", true); + } catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return JSONObject.toJSONString(apidatas); + + + } +} diff --git a/src/main/java/com/engine/htsc/sfxzdj/service/SfxzdjService.java b/src/main/java/com/engine/htsc/sfxzdj/service/SfxzdjService.java new file mode 100644 index 0000000..b663649 --- /dev/null +++ b/src/main/java/com/engine/htsc/sfxzdj/service/SfxzdjService.java @@ -0,0 +1,20 @@ +package com.engine.htsc.sfxzdj.service; + +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.lhfxhgtysp.service.impl.LhfxhgtyspServiceImpl; +import com.engine.htsc.sfxzdj.service.impl.SfxzdjServiceImpl; + +import java.util.Map; + +public interface SfxzdjService { + + Map getdoneworkflow(Map request2Map); + + Map getNg(Map request2Map); + + Map getZhhm(Map request2Map); + + Map updateState(Map request2Map); + + Map triggerFlow(Map request2Map); +} diff --git a/src/main/java/com/engine/htsc/sfxzdj/service/impl/SfxzdjServiceImpl.java b/src/main/java/com/engine/htsc/sfxzdj/service/impl/SfxzdjServiceImpl.java new file mode 100644 index 0000000..fdfbfe3 --- /dev/null +++ b/src/main/java/com/engine/htsc/sfxzdj/service/impl/SfxzdjServiceImpl.java @@ -0,0 +1,560 @@ +package com.engine.htsc.sfxzdj.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.sfxzdj.service.SfxzdjService; +import com.weaver.general.TimeUtil; +import org.apache.commons.lang.StringUtils; +import weaver.conn.RecordSet; +import weaver.conn.RecordSetDataSource; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.GlobatTools.workflow.WorkflowCreateHandler; +import weaver.interfaces.htsc.comInfo.PropBean; + +import java.text.SimpleDateFormat; +import java.util.*; + +public class SfxzdjServiceImpl extends Service implements SfxzdjService { + @Override + public Map getdoneworkflow(Map map) { + PropBean pb = new PropBean(); + String requestid=Util.null2String(map.get("requestid")); + Map resultMap = new HashMap<>(); + String xzdcdj_xgbmhq_unnumber = pb.getPropName("xzdcdj.nodeunnumber.xzdcdj_xgbmhq"); + + List> xgbmhq = getPassUserByNodeid(requestid,xzdcdj_xgbmhq_unnumber); + resultMap.put("xgbmhq",xgbmhq); + + + + return resultMap; + + } + + @Override + public Map getNg(Map map) { + HashMap result = new HashMap<>(); + String nodeid = (String)map.get("nodeid"); + String workflowid = (String)map.get("workflowid"); + String requestid = (String)map.get("requestid"); + String sql = "select * from WORKFLOW_REQUESTLOG where workflowid = "+workflowid+" and requestid = "+requestid+" and nodeid = "+nodeid + " and logtype = 2"; + RecordSet rs = new RecordSet(); + rs.execute(sql); + result.put("size",rs.getCounts()); + return result; + } + + @Override + public Map getZhhm(Map map) { + String khhm = (String)map.get("zhhm"); + HashMap result = new HashMap<>(); + //测试环境 +// RecordSet rs = new RecordSet(); + RecordSetDataSource rs = new RecordSetDataSource("sfxzdj"); + String sql = " select * from JTXTDATAUSER_CLIENT where client_id = " +khhm; + rs.execute(sql); + if(rs.next()){ + result.put("client_id",rs.getString("client_id")); + result.put("client_name",rs.getString("client_name")); + } + return result; + } + + @Override + public Map updateState(Map map) { + String ids = (String)map.get("ids"); + JAVATools.writelog("更新明细表7ids" + ids); + RecordSet rs = new RecordSet(); + PropBean pb = new PropBean(); + String tablename = pb.getPropName("sfxzdj_tablename_dt7"); + for (String id :ids.split(",") ) { + if(StringUtils.isNotBlank(id)){ + String yySql = "select * from workflow_requestbase where requestid = "+ id ; + rs.execute(yySql); + rs.next(); + String flowid = rs.getString("workflowid"); + String currentnodeid = rs.getString("currentnodeid"); + String requestname = rs.getString("requestname"); + String currentnodetype = rs.getString("currentnodetype").equals("3")?"已办结":"进行中"; + yySql = "select * from workflow_currentoperator where nodeid = "+currentnodeid+" and requestid = "+id; + rs.execute(yySql); + rs.next(); + String userid = rs.getString("userid"); + + String nodeSql = "select * from workflow_nodebase where id = "+currentnodeid; + rs.execute(nodeSql); + rs.next(); + String nodename = rs.getString("nodename"); + String updateSql = "update "+tablename+" set zt = '"+currentnodetype+"', dqclr = '"+userid+"',jd='"+nodename+"' where lcid = '"+id+"'"; + JAVATools.writelog("更新明细表7updateSql" + updateSql); + rs.execute(updateSql); + + } + } + return null; + } + + @Override + public Map triggerFlow(Map param) { + PropBean pb = new PropBean(); + HashMap result = new HashMap<>(); + String requestids = ""; + String requestid = (String)param.get("requestid");//请求ID + JAVATools.writelog("会签部门触发流程action开始"); + JAVATools.writelog("会签部门触发流程 requestid"+requestid); + String tablename = pb.getPropName("sfxzdj_tablename"); + JAVATools.writelog("会签部门触发流程 tablename"+tablename); + String usr = (String)param.get("user");//获取当前操作用户对象 + String sql = "select * from " + tablename+ " where requestid = " + requestid; + RecordSet rs = new RecordSet(); + RecordSet deptrs = new RecordSet(); +// RecordSet deptrs = new RecordSet(); + rs.execute(sql); + while(rs.next()){ + String mainid = rs.getString("id"); + String ngr = rs.getString("ngr"); + String cxjg = rs.getString("cxjg");//查询机关 + String szbm = rs.getString("szbm"); + String dt6Sql = "select * from "+tablename+"_dt6" + " where lcid = "+ requestid+" and to_char(dqczz) = "+usr; + JAVATools.writelog("会签部门触发流程 dt6Sql"+dt6Sql); + rs.execute(dt6Sql); + while(rs.next()){ + String dt6Dqczz = rs.getString("dqczz"); + JAVATools.writelog("会签部门触发流程 dt6Dqczz"+dt6Dqczz); + String dt6Zdclr = rs.getString("zdclr"); + JAVATools.writelog("会签部门触发流程 dt6Zdclr"+dt6Zdclr); + String depttypecode = getcode(ngr); + JAVATools.writelog("会签部门触发流程 depttypecode"+depttypecode); + + String Sql = "select * from hrmdepartmentdefined where deptid = "+szbm; + deptrs.execute(Sql); + deptrs.next(); + String code = deptrs.getString("depttypecode"); + //判断拟稿人所在部门类型 + String cfbm ="0"; + String sfxzdj_zbcode = pb.getPropName("sfxzdj_zbcode"); + if(sfxzdj_zbcode.indexOf(code)>-1){ + cfbm="1"; + + } + JAVATools.writelog("会签部门触发流程 sfxzdj_zbcode"+sfxzdj_zbcode); + if(sfxzdj_zbcode.indexOf(depttypecode)>-1){ + //判断当前处理人是否是总部,是则生成总部用印,不是分支机构 + String dt6depttypecode = getcode(dt6Dqczz); + JAVATools.writelog("会签部门触发流程 dt6depttypecode"+dt6depttypecode); + if(sfxzdj_zbcode.indexOf(dt6depttypecode)>-1){ + String sfxzdj_zbworkflowid =pb.getPropName("sfxzdj_zbworkflowid"); + String[] split = dt6Zdclr.split(","); + JAVATools.writelog("会签部门触发流程 split"+split.toString()); + for (String id :split ) { + if (StringUtils.isNotBlank(id)) { + Map hrm = getHrm(id); + JAVATools.writelog("会签部门触发流程 hrm"+hrm.toString()); +// 总部用印 +// 上级部门审批sjbmsp——否1 +// 内部送阅sfnbsy——是0 +// 申报文件标题sbwjbt——正文 +// 是否编号sfbh——check框0 +// 是否排版编号sfpbbh——check框0 +// 签章标记qzbj——#华泰签章标记符# +// 审核方式shfs——并发审核1 +// 领导审批方式ldspsdfs ——依次审批0 +// 领导审批方式2ldspsdfs2——依次审批0 +// 提示1ts1——文件类型将影响流程审批,请根据具体内容选择正确的适用范围 +// 证照用途zzyongtu——仅用于办理XX事宜 +// 是否授权简化sfsqjh——否1 +// 流程类型编号lclxbh——自定义浏览按钮:总部用印申请 +// 是否送过执行秘书sfsgzxms——check框0 +// 是否送过合规审核sfsghgsh——check框0 +// 落款日期特殊要求lkrqtsyq——否1 +// 提示2ts2——所有需要用印的文件不论格式请上传入用印文件,附件仅作为说明性文档供参考 + + HashMap map = new HashMap<>(); + +// 总部用印: +// 1、带出部门领导,根据hrmdepartmentdefined表中的deptid匹配主表所在部门,deptdirectors赋值部门领导审核bmldsh +// 2、所在部门带出部门类型,根据hrmdepartmentdefined表中的deptid匹配所在部门,depttypecode赋值部门类型deptTypeCode + String deptfinedSql = "select * from hrmdepartmentdefined where deptid = "+hrm.get("departmentid"); + JAVATools.writelog("触发总部用印deptfinedSql"+deptfinedSql); + deptrs.execute(deptfinedSql); + JAVATools.writelog("触发总部用印deptfinedSql"+deptfinedSql); + if(deptrs.next()){ + String deptdirectors = deptrs.getString("deptdirectors"); + String typecode = deptrs.getString("depttypecode"); + if(StringUtils.isNotBlank(deptdirectors) && !deptdirectors.contains(",")){ + map.put("bmldsh",deptdirectors); + } + map.put("deptTypeCode",typecode); + } +// 是否外部触发sfwbcf,check框,赋值1 +// 触发来源cfly,选择框,赋值0 + map.put("wjlb","3"); + map.put("wjlx","16"); + map.put("sfwbcf","1"); + map.put("cfly","0"); + map.put("sjbmsp","1"); + map.put("sfnbsy","0"); + map.put("sbwjbt","正文"); + map.put("sfbh","0"); + map.put("sfpbbh","0"); + map.put("qzbj","#华泰签章标记符#"); + map.put("shfs","1"); + map.put("ldspsdfs","0"); + map.put("ldspsdfs2","0"); + map.put("ts1","文件类型将影响流程审批,请根据具体内容选择正确的适用范围"); + map.put("zzyongtu","仅用于办理XX事宜"); + map.put("sfsqjh","1"); + map.put("lclxbh","zbyy"); + map.put("sfsgzxms","0"); + map.put("sfsghgsh","0"); + map.put("lkrqtsyq","1"); + map.put("ts2","所有需要用印的文件不论格式请上传入用印文件,附件仅作为说明性文档供参考"); + map.put("bt","关于协助"+cxjg+"查询的用印申请"); + map.put("ngr",id); + map.put("szbm",hrm.get("departmentid")); + map.put("szjg",hrm.get("supdepid")); + map.put("jjcd","0"); + map.put("lxfs",hrm.get("phone")); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + map.put("ngrq",format.format(new Date())); + map.put("qttzyddx",ngr); + map.put("gllc",requestid); + WorkflowCreateHandler wfl=new WorkflowCreateHandler(); + String s = wfl.WorkflowCreateByRequestMap(id,sfxzdj_zbworkflowid,"关于协助"+cxjg+"查询的用印申请","0",map); + JAVATools.writelog("会签部门触发流程 requestid"+s); + requestids = requestids+s+","; + //给总部用印的拟稿人添加一个协助登记流程的通知阅读 + addReadingUser(requestid,id); + } + } + }else{ + String sfxzdj_fzworkflowid =pb.getPropName("sfxzdj_fzworkflowid"); + String[] split = dt6Zdclr.split(","); + JAVATools.writelog("会签部门触发流程 split"+split.toString()); + + RecordSet deptRs = new RecordSet(); + String deptSql = "select * from HRMDEPARTMENT where departmentcode = 'ZZ001041'"; + deptRs.execute(deptSql); + deptRs.next(); + String deptid = deptRs.getString("id"); + for (String id :split ) { + if (StringUtils.isNotBlank(id)) { +// 分支机构用印 +// 上级部门审批sjbmsp——否1 +// 内部送阅sfnbsy——是0 +// 申报文件标题sbwjbt——正文 +// 是否编号sfbh——check框0 +// 是否排版编号sfpbbh——check框0 +// 签章标记qzbj——#华泰签章标记符# +// 审核方式shfs——并发审核1 +// 领导审批方式ldspsdfs ——依次审批0 +// 领导审批方式2ldspsdfs2——依次审批0 +// 提示1ts1——文件类型将影响流程审批,请根据具体内容选择正确的适用范围 +// 证照用途zzyongtu——仅用于办理XX事宜 +// 是否授权简化sfsqjh——否1 +// 是否送过执行秘书sfsgzxms——check框0 +// 是否送过合规审核sfsghgsh——check框0 +// 落款日期特殊要求lkrqtsyq——否1 +// 财富管理部cfglb——浏览按钮-部门:财富管理部 +// 选择流程xzlc——自定义浏览按钮:分支机构用印申请 +// 提示2ts2——所有需要用印的文件不论格式请上传入用印文件,附件仅作为说明性文档供参考 +// 流程类型编号lclxbh——自定义浏览按钮:分支机构用印申请 + Map hrm = getHrm(id); + JAVATools.writelog("会签部门触发流程 hrm"+hrm.toString()); + HashMap map = new HashMap<>(); + // 1、带出部门领导,根据hrmdepartmentdefined表中的deptid匹配主表所在部门,deptdirectors赋值部门领导审核bmldsh +// +// 2、所在部门带出部门类型、部门类别,根据hrmdepartmentdefined表中的deptid匹配主表所在部门,depttypecode赋值部门类型deptTypeCode,deptscalelevelcode赋值部门类别bmlbcode +// 5、带出私行中心,根据hrmdepartmentdefined表中的deptid匹配主表所在部门,sfsxzx赋值是否私行中心 sfsxzx + String deptfinedSql = "select * from hrmdepartmentdefined where deptid = "+hrm.get("departmentid"); + deptrs.execute(deptfinedSql); + JAVATools.writelog("触发分支机构用印deptfinedSql"+deptfinedSql); + if(deptrs.next()){ + String deptdirectors = deptrs.getString("deptdirectors"); + String typecode = deptrs.getString("depttypecode"); + String sfsxzx = deptrs.getString("sfsxzx"); + String deptscalelevelcode = deptrs.getString("deptscalelevelcode"); + + if(StringUtils.isNotBlank(deptdirectors) && !deptdirectors.contains(",")){ + map.put("bmldsh",deptdirectors); + } + map.put("deptTypeCode",typecode); + if(StringUtils.isNotBlank(sfsxzx)){ + map.put("sfsxzx",sfsxzx); + } + if(StringUtils.isNotBlank(deptscalelevelcode)){ + map.put("bmlbcode",deptscalelevelcode); + } + } +// 3、文件类型带出业务主管部门,根据*uf_fzjgyysyfw*表中的wjlx匹配文件类型,wjlb匹配文件类别, +// ywzgbm赋值业务主管部门ywzgbm,fgsglg赋值分公司管理岗位fgsglgw,ywzgbmsfbj赋值业务主管部门负责人是否必经ywzgbmfzrsfbj, +// sqjh赋值授权号sqh,sfsqjh赋值是否授权简化sfsqjh,ywzgbmbjns赋值业务主管部门必经内审ywzgbmbjns, +// fgsbjjd赋值分公司必经节点fgsbjjd + String uf_fzjgyysyfw_sql = "select * from uf_fzjgyysyfw where wjlx = 93 and wjlb = 2"; + JAVATools.writelog("触发分支机构用印uf_fzjgyysyfw_sql"+uf_fzjgyysyfw_sql); + deptrs.execute(uf_fzjgyysyfw_sql); + String fgsglg = ""; + String ywzgbm = ""; + if(deptrs.next()){ + if(StringUtils.isNotBlank(deptrs.getString("ywzgbm"))){ + map.put("ywzgbm",deptrs.getString("ywzgbm")); + ywzgbm= deptrs.getString("ywzgbm"); + JAVATools.writelog("触发分支机构用印ywzgbm"+ywzgbm); + } + if(StringUtils.isNotBlank(deptrs.getString("fgsglg"))){ + fgsglg= deptrs.getString("fgsglg"); + map.put("fgsglgw",deptrs.getString("fgsglg")); + } + if(StringUtils.isNotBlank(deptrs.getString("ywzgbmsfbj"))){ + map.put("ywzgbmfzrsfbj",deptrs.getString("ywzgbmsfbj")); + } + if(StringUtils.isNotBlank(deptrs.getString("sqjh"))){ + map.put("sqh",deptrs.getString("sqjh")); + } + if(StringUtils.isNotBlank(deptrs.getString("sfsqjh"))){ + map.put("sfsqjh",deptrs.getString("sfsqjh")); + } + if(StringUtils.isNotBlank(deptrs.getString("ywzgbmbjns"))){ + map.put("ywzgbmbjns",deptrs.getString("ywzgbmbjns")); + } + if(StringUtils.isNotBlank(deptrs.getString("fgsbjjd"))){ + map.put("fgsbjjd",deptrs.getString("fgsbjjd")); + } + } +// 4、带出邮寄对象,根据uf_fzjgcysjr表中ssjg匹配所在部门,sjrxm赋值寄送对象jsdx + String uf_fzjgcysjr_sql = "select * from uf_fzjgcysjr where ssjg = " + hrm.get("departmentid"); + JAVATools.writelog("触发分支机构用印uf_fzjgcysjr_sql"+uf_fzjgcysjr_sql); + deptrs.execute(uf_fzjgcysjr_sql); + if(deptrs.next()){ + if(StringUtils.isNotBlank(deptrs.getString("sjrxm"))){ + map.put("jsdx",deptrs.getString("sjrxm")); + } + } +// + +// 6、分公司带出部门负责人,根据hrmdepartmentdefined表中的deptid匹配主表所属分公司 ,deptdirectors赋值部门负责人bmfzr1。(所属分公司是sql代码带出。) + String fgsSql = "select DECODE(de.deptTypeCode,'JGLX04',d.supdepid,'JGLX09',d.supdepid,'JGLX03',d.id) as cid from hrmdepartment d,hrmdepartmentdefined de,hrmresource h where d.id=de.deptid and h.departmentid=de.deptid and h.id= " +id; + JAVATools.writelog("触发分支机构用印fgsSql"+fgsSql); + deptrs.execute(fgsSql); + if(deptrs.next() && StringUtils.isNotBlank(deptrs.getString("cid"))){ + String fgsfzrsql = " select * from hrmdepartmentdefined where deptid = " + deptrs.getString("cid"); + deptrs.execute(fgsfzrsql); + deptrs.next(); + if(StringUtils.isNotBlank(deptrs.getString("deptdirectors"))){ + map.put("bmfzr1",deptrs.getString("deptdirectors")); + } + } +// 7、分公司管理岗带出人员,根据uf_lcgwry表中的xzlc匹配选择流程,xzgw匹配分公司管理岗位,jg匹配所属机构,ry赋值分公司管理岗人员fgsglgry + if(StringUtils.isNotBlank(fgsglg)){ + String uf_lcgwry_sql = "select * from uf_lcgwry where xzgw = '"+fgsglg+"' and jg ="+hrm.get("supdepid") +" and xzlc = 'fzjgyy'"; + JAVATools.writelog("触发分支机构用印uf_lcgwry_sql"+uf_lcgwry_sql); + deptrs.execute(uf_lcgwry_sql); + if(deptrs.next() && StringUtils.isNotBlank(deptrs.getString("ry"))){ + map.put("fgsglgry",deptrs.getString("ry")); + } + } + +// 8、业务主管部门带出部门负责人,根据hrmdepartmentdefined表中的deptid匹配主表业务主管部门,deptdirectors赋值部门负责人-业务主管部门bmfzrywzgbm + if(StringUtils.isNotBlank(ywzgbm)){ + String ywzgbmSql = "select * from hrmdepartmentdefined where deptid = " + ywzgbm; + JAVATools.writelog("触发分支机构用印ywzgbmSql"+ywzgbmSql); + deptrs.execute(ywzgbmSql); + if(deptrs.next() && StringUtils.isNotBlank(deptrs.getString("deptdirectors"))){ + map.put("bmfzrywzgbm",deptrs.getString("deptdirectors")); + } + } + + // 是否外部触发sfwbcf,check框,赋值1 +// 触发来源cfly,选择框,赋值0 + map.put("wjlb","2"); + map.put("wjlx","93"); + map.put("sfwbcf","1"); + map.put("cfly","0"); + map.put("cfbm",cfbm);//触发部门 + map.put("sjbmsp","1"); + map.put("sfnbsy","0"); + map.put("sbwjbt","正文"); + map.put("sfbh","0"); + map.put("sfpbbh","0"); + map.put("qzbj","#华泰签章标记符#"); + map.put("shfs","1"); + map.put("ldspsdfs","0"); + map.put("ldspsdfs2","0"); + map.put("ts1","文件类型将影响流程审批,请根据具体内容选择正确的适用范围"); + map.put("zzyongtu","仅用于办理XX事宜"); + map.put("sfsqjh","1"); + map.put("xzlc","fzjgyy"); + map.put("sfsgzxms","0"); + map.put("sfsghgsh","0"); + map.put("lkrqtsyq","1"); + map.put("ts2","所有需要用印的文件不论格式请上传入用印文件,附件仅作为说明性文档供参考"); + map.put("cfglb",deptid); + map.put("lclxbh","fzjgyy"); + map.put("bt","关于协助"+cxjg+"查询的用印申请"); + map.put("ngr",id); + map.put("szbm",hrm.get("departmentid")); + map.put("szjg",hrm.get("supdepid")); + map.put("jjcd","0"); + map.put("lxfs",hrm.get("phone")); + map.put("sfzzfyjyy","1"); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + map.put("ngrq",format.format(new Date())); + map.put("qttzyddx",ngr); + map.put("gllc",requestid); + WorkflowCreateHandler wfl=new WorkflowCreateHandler(); + String s = wfl.WorkflowCreateByRequestMap(id, sfxzdj_fzworkflowid, "关于协助" + cxjg + "查询的用印申请", "0", map); + JAVATools.writelog("会签部门触发流程 requestid"+s); + requestids = requestids+s+","; + //给分支机构用印的拟稿人添加一个协助登记流程的通知阅读 + addReadingUser(requestid,id); + } + } + } + + }else { + JAVATools.writelog("会签部门触发流程不触发"); + } + JAVATools.writelog("会签部门触发流程 dt6Dqczz"+dt6Dqczz); + saveDt7(requestids,tablename,mainid); + } + } + result.put("msg","success"); + result.put("code","200"); + return result; + + } + public void saveDt7(String requestids,String tablename ,String mainid){ + RecordSet rs = new RecordSet(); + String[] split = requestids.split(","); + for (String id:split) { + //通过用印流程的requestid查询用印的数据保存到建模中 + if(StringUtils.isNotBlank(id)){ + String yySql = "select * from workflow_requestbase where requestid = "+ id ; + rs.execute(yySql); + rs.next(); + String flowid = rs.getString("workflowid"); + String currentnodeid = rs.getString("currentnodeid"); + String requestname = rs.getString("requestname"); + String currentnodetype = rs.getString("currentnodetype").equals("3")?"已办结":"进行中"; + yySql = "select * from workflow_currentoperator where nodeid = "+currentnodeid+" and requestid = "+id; + rs.execute(yySql); + rs.next(); + String userid = rs.getString("userid"); + String dt7Sql = "insert into " + tablename+"_dt7 (lcid,zt,lcbt,dqclr,mainid) values ('"+id+"','"+currentnodetype+"','"+requestname+"','"+userid+"','"+mainid+"')"; + rs.execute(dt7Sql); + } + + + + + } + } + public String getcode(String ngr){ + RecordSet rs = new RecordSet(); + String hrmSql = "select * from hrmresource where id = "+ngr; + rs.execute(hrmSql); + rs.next(); + String departmentid = rs.getString("departmentid"); + String deptSql = "select * from hrmdepartmentdefined where deptid = "+departmentid; + rs.execute(deptSql); + rs.next(); + + String depttypecode = rs.getString("depttypecode"); + return depttypecode; + } + public Map getHrm(String ngr){ + HashMap result = new HashMap<>(); + RecordSet rs = new RecordSet(); + String hrmSql = "select * from hrmresource where id = "+ngr; + rs.execute(hrmSql); + rs.next(); + String departmentid = rs.getString("departmentid"); + result.put("phone",rs.getString("mobile")); + result.put("departmentid",departmentid); + String deptSql = "select * from hrmdepartment where id = "+departmentid; + rs.execute(deptSql); + rs.next(); + result.put("supdepid",rs.getString("supdepid")); + return result; + } + + private List> getPassUserByNodeid(String requestid, String nodenumbber) { + RecordSet rs = new RecordSet(); + BaseBean bs = new BaseBean(); + List> userMapList = new ArrayList<>(); + + ArrayList useridSet = new ArrayList(); + String sql = "select operator,agentorbyagentid,logtype from workflow_requestlog where requestid = '"+requestid+"' " + + " and nodeid in ( select id from workflow_nodebase where unnumber='"+nodenumbber+"') order by to_date((operatedate || ' ' || OPERATETIME),'yyyy-MM-dd hh24:mi:ss') asc"; + bs.writeLog("司法协助sql"+sql); + System.out.println(sql); + rs.executeQuery(sql); + while(rs.next()){ + String agentorbyagentid = Util.null2String(rs.getString("agentorbyagentid")); + if("-1".equals(agentorbyagentid)){//授权,获取原处理人 + String operator = Util.null2String(rs.getString("operator")); + useridSet.add(operator+","+rs.getString("logtype")); + }else{ + useridSet.add(agentorbyagentid+","+rs.getString("logtype")); + } + } + + for(String userid:useridSet){ + String[] split = userid.split(","); + if(StringUtils.isNotEmpty(split[0])){ + Map userMap = new HashMap<>(); + sql = "select t1.id as userid,t1.lastname,t2.id as deptid,t2.departmentname from hrmresource t1,hrmdepartment t2 where t1.departmentid = t2.id and t1.id = '"+split[0]+"'"; + bs.writeLog(sql); + rs.executeQuery(sql); + if(rs.next()){ + userMap.put("id",Util.null2String(rs.getString("userid"))); + userMap.put("name",Util.null2String(rs.getString("lastname"))); + userMap.put("deptid",Util.null2String(rs.getString("deptid"))); + userMap.put("deptname",Util.null2String(rs.getString("departmentname"))); + } + userMap.put("logtype",split[1]); + userMapList.add(userMap); + } + } + + return userMapList; + } + + /** + * 添加通知阅读人 + * @param requestid + * @param userId + */ + public void addReadingUser(String requestid,String userId){ + BaseBean bb = new BaseBean(); + RecordSet rs = new RecordSet(); + String sql = "select * from workflow_requestbase where requestid = "+requestid; + bb.writeLog("添加通知阅读人workflow_requestbase:"+sql); + rs.execute(sql); + rs.next(); + String workflowid = rs.getString("workflowid"); + String nodeid = rs.getString("currentnodeid"); + sql = "select * from workflow_base where id = "+workflowid; + bb.writeLog("添加通知阅读人workflow_base:"+sql); + rs.execute(sql); + rs.next(); + String workflowtype = rs.getString("workflowtype"); + + char flag = com.weaver.general.Util.getSeparator(); + String operatorgroup = "0"; + String creatertype = "0"; + String currentdate = TimeUtil.getCurrentDateString(); + String currenttime = TimeUtil.getCurrentTimeString().substring(11,19); + String isremarktemp = "9"; + String lastnodeid = ""+nodeid; + String groupdetailid = "-1"; + String useridtemp = userId;//抄送人 + String Procparatemp = "" + requestid + flag + useridtemp + flag + operatorgroup + flag + workflowid + flag + + workflowtype + flag + creatertype + flag + isremarktemp + flag + lastnodeid + flag + -1 + + flag + "0" + flag + -1 + flag + groupdetailid+flag+currentdate+flag+currenttime; + bb.writeLog("司法协助登记抄送Procparatemp====="+Procparatemp); + boolean executesuccess = rs.executeProc("workflow_CurrentOperator_I2", Procparatemp); + } + +} diff --git a/src/main/java/com/engine/htsc/sfxzdj/web/SfxzdjAction.java b/src/main/java/com/engine/htsc/sfxzdj/web/SfxzdjAction.java new file mode 100644 index 0000000..653ec05 --- /dev/null +++ b/src/main/java/com/engine/htsc/sfxzdj/web/SfxzdjAction.java @@ -0,0 +1,137 @@ +package com.engine.htsc.sfxzdj.web; + +import com.alibaba.fastjson.JSON; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.sfxzdj.service.SfxzdjService; +import com.engine.htsc.sfxzdj.service.impl.SfxzdjServiceImpl; +import weaver.general.BaseBean; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +public class SfxzdjAction { + private SfxzdjService getSfxzdjService() + { + return ServiceUtil.getService(SfxzdjServiceImpl.class); + } + //获取已送的,明细表中处理人是否处理 + @POST + @Path("/getdoneworkflow") + @Produces({MediaType.TEXT_PLAIN}) + public String getdoneworkflow(@Context HttpServletRequest request, @Context HttpServletResponse response){ + BaseBean bs = new BaseBean(); + Map apidatas = new HashMap(); + bs.writeLog("----UnionSealApplicationAction-----"); + try{ + apidatas = getSfxzdjService().getdoneworkflow(ParamUtil.request2Map(request)); + }catch (Exception e) { + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + + return JSON.toJSONString(apidatas); + } + + @POST + @Path("/getNg") + @Produces({MediaType.TEXT_PLAIN}) + public String getNg(@Context HttpServletRequest request, @Context HttpServletResponse response){ + BaseBean bs = new BaseBean(); + Map apidatas = new HashMap(); + bs.writeLog("----UnionSealApplicationAction-----"); + try{ + apidatas = getSfxzdjService().getNg(ParamUtil.request2Map(request)); + apidatas.put("code","200"); + apidatas.put("msg","success"); + }catch (Exception e) { + e.printStackTrace(); + apidatas.put("code","500"); + apidatas.put("msg",e.getMessage()); + } + + return JSON.toJSONString(apidatas); + } + + /** + * 获取客户号码 + * @param request + * @param response + * @return + */ + @POST + @Path("/getZhhm") + @Produces({MediaType.TEXT_PLAIN}) + public String getZhhm(@Context HttpServletRequest request, @Context HttpServletResponse response){ + BaseBean bs = new BaseBean(); + Map apidatas = new HashMap(); + bs.writeLog("----UnionSealApplicationAction-----"); + try{ + apidatas = getSfxzdjService().getZhhm(ParamUtil.request2Map(request)); + apidatas.put("code","200"); + apidatas.put("msg","success"); + }catch (Exception e) { + e.printStackTrace(); + apidatas.put("code","500"); + apidatas.put("msg",e.getMessage()); + } + + return JSON.toJSONString(apidatas); + } + + /** + * 更新明细表七中用印流程的状态 + * @param request + * @param response + * @return + */ + @POST + @Path("/updateState") + @Produces({MediaType.TEXT_PLAIN}) + public String updateState(@Context HttpServletRequest request, @Context HttpServletResponse response){ + BaseBean bs = new BaseBean(); + Map apidatas = new HashMap(); + bs.writeLog("----UnionSealApplicationAction-----"); + try{ + apidatas = getSfxzdjService().updateState(ParamUtil.request2Map(request)); + apidatas.put("code","200"); + apidatas.put("msg","success"); + }catch (Exception e) { + e.printStackTrace(); + apidatas.put("code","500"); + apidatas.put("msg",e.getMessage()); + } + + return JSON.toJSONString(apidatas); + } + /** + * 触发会签节点用印triggerFlow + */ + @POST + @Path("/triggerFlow") + @Produces({MediaType.TEXT_PLAIN}) + public String triggerFlow(@Context HttpServletRequest request, @Context HttpServletResponse response){ + BaseBean bs = new BaseBean(); + Map apidatas = new HashMap(); + bs.writeLog("----UnionSealApplicationAction-----"); + try{ + apidatas = getSfxzdjService().triggerFlow(ParamUtil.request2Map(request)); + + }catch (Exception e) { + e.printStackTrace(); + apidatas.put("code","500"); + apidatas.put("msg",e.getMessage()); + } + + return JSON.toJSONString(apidatas); + } + +} diff --git a/src/main/java/com/engine/htsc/smsd/dao/DataIsAddCmd.java b/src/main/java/com/engine/htsc/smsd/dao/DataIsAddCmd.java new file mode 100644 index 0000000..f33a9bb --- /dev/null +++ b/src/main/java/com/engine/htsc/smsd/dao/DataIsAddCmd.java @@ -0,0 +1,83 @@ +package com.engine.htsc.smsd.dao; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.workflow.logging.Logger; +import weaver.workflow.logging.LoggerFactory; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class DataIsAddCmd extends AbstractCommonCommand> { + Logger logger = LoggerFactory.getLogger(DataIsAddCmd.class); + + @Override + public BizLogContext getLogContext() { + return null; + } + public DataIsAddCmd(Map params){ + this.params = params; + } + + @Override + public Map execute(CommandContext commandContext) { + logger.info("进入CMD层,获取的参数是:"+ JSONObject.toJSONString(params)); + Map result = new HashMap<>(); + try { + String bmid = Util.null2String(params.get("bmid")); + String lclx = Util.null2String(params.get("lclx")); + Map okNeed = dataCanAdd(bmid,lclx); + if ("true".equals(okNeed.get("status"))){ + result.put("isSuccess","true"); + result.put("message","true"); + }else { + result.put("isSuccess","false"); + result.put("message",okNeed.get("message")); + } + }catch (Exception e){ + result.put("isSuccess","false"); + result.put("message",e.getMessage()); + } + return result; + } + + private Map dataCanAdd(String bmid, String lclx) { + logger.info("==========进入查询的是否数据可以添加的方法=============="); + String isExist = ""; + List hasExitBmmc = new ArrayList<>(); + Map result = new HashMap<>(); + RecordSet rs = new RecordSet(); + String sql = "SELECT wm_concat_old(bmmc) as allbmmc from uf_CodeScanRec where LCLX = ?"; + rs.executeQuery(sql,lclx); + if (rs.next()){ + isExist = Util.null2String(rs.getString("allbmmc")); + } + if ("".equals(isExist)){ + result.put("status","true"); + }else { + for (String oneBmid : bmid.split(",")) { + if (isExist.contains(oneBmid)){ + sql = "select DEPARTMENTNAME from HRMDEPARTMENT where id = ?"; + rs.executeQuery(sql,oneBmid); + if (rs.next()){ + hasExitBmmc.add(rs.getString("DEPARTMENTNAME")); + } + } + } + if (hasExitBmmc.size() == 0){ + result.put("status","true"); + }else { + result.put("status","false"); + result.put("message", StringUtils.join(hasExitBmmc,",")+"已添加到配置表"); + } + } + return result; + } +} diff --git a/src/main/java/com/engine/htsc/smsd/dao/IsSuitCmd.java b/src/main/java/com/engine/htsc/smsd/dao/IsSuitCmd.java new file mode 100644 index 0000000..f888510 --- /dev/null +++ b/src/main/java/com/engine/htsc/smsd/dao/IsSuitCmd.java @@ -0,0 +1,54 @@ +package com.engine.htsc.smsd.dao; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; + +import java.util.HashMap; +import java.util.Map; + +public class IsSuitCmd extends AbstractCommonCommand> { + @Override + public BizLogContext getLogContext() { + return null; + } + + public IsSuitCmd(Map params) { + this.params = params; + } + + @Override + public Map execute(CommandContext commandContext) { + BaseBean bb = new BaseBean(); + Map back = new HashMap<>(); + RecordSet rs = new RecordSet(); + String sql = ""; +// 需求更改为默认为否,没有权限 + String isSuit = "1"; + bb.writeLog("========成功进入查询是否适用的扫码收单的dao层代码======"); + bb.writeLog("=====接受到的参数是:" + JSONObject.toJSONString(params)); + try { + String bmmc = Util.null2String(params.get("bmmc")); + String lclx = Util.null2String(params.get("lclx")); + sql = "select sfsysmsd from uf_CodeScanRec where ',' || bmmc || ',' like '%,"+bmmc+",%' and lclx = ?"; + bb.writeLog("即将执行的SQL是:"+sql); + rs.executeQuery(sql, lclx); + if (rs.next()) { + bb.writeLog("=======sql执行结果是:" + rs.getString("sfsysmsd")); + isSuit = "0".equals(rs.getString("sfsysmsd")) ? "0" : "1"; + } + back.put("status", "success"); + back.put("isSuit", isSuit); + } catch (Exception e) { + e.getMessage(); + back.put("status", "defeated"); + back.put("isSuit", isSuit); + } + + return back; + } +} diff --git a/src/main/java/com/engine/htsc/smsd/service/IsSuitService.java b/src/main/java/com/engine/htsc/smsd/service/IsSuitService.java new file mode 100644 index 0000000..15d7ed2 --- /dev/null +++ b/src/main/java/com/engine/htsc/smsd/service/IsSuitService.java @@ -0,0 +1,9 @@ +package com.engine.htsc.smsd.service; + +import java.util.Map; + +public interface IsSuitService { + Map getIsSuit(Map params); + + Map dataIsAddService(Map params); +} diff --git a/src/main/java/com/engine/htsc/smsd/service/impl/IsSuitServiceImpl.java b/src/main/java/com/engine/htsc/smsd/service/impl/IsSuitServiceImpl.java new file mode 100644 index 0000000..85307e3 --- /dev/null +++ b/src/main/java/com/engine/htsc/smsd/service/impl/IsSuitServiceImpl.java @@ -0,0 +1,20 @@ +package com.engine.htsc.smsd.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.smsd.dao.DataIsAddCmd; +import com.engine.htsc.smsd.dao.IsSuitCmd; +import com.engine.htsc.smsd.service.IsSuitService; + +import java.util.Map; + +public class IsSuitServiceImpl extends Service implements IsSuitService { + @Override + public Map getIsSuit(Map params) { + return commandExecutor.execute(new IsSuitCmd(params)); + } + + @Override + public Map dataIsAddService(Map params) { + return commandExecutor.execute(new DataIsAddCmd(params)); + } +} diff --git a/src/main/java/com/engine/htsc/smsd/web/IsSuitAction.java b/src/main/java/com/engine/htsc/smsd/web/IsSuitAction.java new file mode 100644 index 0000000..5ec7a4a --- /dev/null +++ b/src/main/java/com/engine/htsc/smsd/web/IsSuitAction.java @@ -0,0 +1,65 @@ +package com.engine.htsc.smsd.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.smsd.service.IsSuitService; +import com.engine.htsc.smsd.service.impl.IsSuitServiceImpl; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.workflow.logging.Logger; +import weaver.workflow.logging.LoggerFactory; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +public class IsSuitAction { + Logger logger = LoggerFactory.getLogger(IsSuitAction.class); + private IsSuitService getService() { + return ServiceUtil.getService(IsSuitServiceImpl.class); + } + + + /** + * 根据部门编码以及流程类型获取当前流程是否适用扫码收单 + */ + @GET + @Path("/getissuit") + @Produces({MediaType.APPLICATION_JSON}) + public String getIsSuit(@Context HttpServletRequest request) { + BaseBean bb = new BaseBean(); + bb.writeLog("=====================调用接口成功,进入查询是否适用扫码收单方法体================="); + String bmmc = Util.null2String(request.getParameter("bmmc")); + String lclx = Util.null2String(request.getParameter("lclx")); + bb.writeLog("==================接收到的参数是:bmmc:" + bmmc + ",lclx:" + lclx + "================"); + Map params = new HashMap<>(); + params.put("bmmc",bmmc); + params.put("lclx",lclx); + Map isSuit = getService().getIsSuit(params); + String back = JSONObject.toJSONString(isSuit); + bb.writeLog("=========================即将传给前端的参数是:"+ back); + return back; + } + + @GET + @Path("/dataisadd") + @Produces({MediaType.APPLICATION_JSON}) + public String dataIsAdd(@Context HttpServletRequest request){ + logger.info("===========判断数据是否可以添加================"); + String bmid = Util.null2String(request.getParameter("bmid")); + String lclx = Util.null2String(request.getParameter("lclx")); + logger.info("==================接收到的参数是:bmmc:" + bmid + ",lclx:" + lclx + "================"); + Map params = new HashMap<>(); + params.put("bmid",bmid); + params.put("lclx",lclx); + Map result = getService().dataIsAddService(params); + String back = JSONObject.toJSONString(result); + logger.info("=========================即将传给前端的参数是:"+ back); + return back; + } +} diff --git a/src/main/java/com/engine/htsc/trip/cmd/BudgetCommitCmd.java b/src/main/java/com/engine/htsc/trip/cmd/BudgetCommitCmd.java new file mode 100644 index 0000000..98559fc --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/cmd/BudgetCommitCmd.java @@ -0,0 +1,36 @@ +package com.engine.htsc.trip.cmd; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import java.util.HashMap; +import java.util.Map; +import weaver.hrm.User; +import weaver.interfaces.htsc.cus.HTUtil; + +public class BudgetCommitCmd extends AbstractCommonCommand> { + + public BudgetCommitCmd(User user, Map params) { + this.user = user; + this.params = params; + } + + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + Map apidatas = new HashMap<>(); + try { + HTUtil ht = new HTUtil(); + String datas = ht.budgetCommit(params); + apidatas.put("datas", datas); + } catch (Exception e) { + e.printStackTrace(); + return apidatas; + } + return apidatas; + } +} diff --git a/src/main/java/com/engine/htsc/trip/cmd/ConnectInvAndBillCmd.java b/src/main/java/com/engine/htsc/trip/cmd/ConnectInvAndBillCmd.java new file mode 100644 index 0000000..7496949 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/cmd/ConnectInvAndBillCmd.java @@ -0,0 +1,37 @@ +package com.engine.htsc.trip.cmd; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import java.util.HashMap; +import java.util.Map; +import weaver.hrm.User; +import weaver.interfaces.htsc.cus.HTUtil; + +public class ConnectInvAndBillCmd extends AbstractCommonCommand> { + + public ConnectInvAndBillCmd(User user, Map params) { + this.user = user; + this.params = params; + } + + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + Map apidatas = new HashMap<>(); + try { + HTUtil ht = new HTUtil(); + String datas = ht.connectInvAndBill(params); + apidatas.put("datas", datas); + } catch (Exception e) { + e.printStackTrace(); + return apidatas; + } + return apidatas; + + } +} diff --git a/src/main/java/com/engine/htsc/trip/cmd/GetBudgetCmd.java b/src/main/java/com/engine/htsc/trip/cmd/GetBudgetCmd.java new file mode 100644 index 0000000..3594c3f --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/cmd/GetBudgetCmd.java @@ -0,0 +1,67 @@ +package com.engine.htsc.trip.cmd; + +import com.alibaba.fastjson.JSON; +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import java.util.HashMap; +import java.util.Map; + +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.hrm.company.DepartmentComInfo; +import weaver.interfaces.htsc.cus.HTUtil; + +public class GetBudgetCmd extends AbstractCommonCommand> { + + public GetBudgetCmd(User user, Map params) { + this.user = user; + this.params = params; + } + + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + Map apidatas = new HashMap<>(); + try { + HTUtil ht = new HTUtil(); + writeLog("====进入GetBudgetCmd"); + writeLog("====入参@" + JSON.toJSONString(params)); + String deptid = Util.null2String(params.get("deptid")); + String Bgitem = Util.null2String(params.get("Bgitem")); + String BgPeriod = Util.null2String(params.get("BgPeriod")); + DepartmentComInfo dc = new DepartmentComInfo(); + String bmCode = dc.getDepartmentCode(deptid); + Map param = new HashMap<>(); + param.put("deptNum", bmCode); + param.put("deptType", getDeptTypeCode(deptid)); + param.put("Bgitem", Bgitem); + param.put("BgPeriod", BgPeriod.split(" ")[0]); + writeLog("====getBudget入参@" + JSON.toJSONString(param)); + String datas = ht.getBudget(param); + writeLog("====getBudget返回值@" + datas); + apidatas.put("datas", datas); + } catch (Exception e) { + e.printStackTrace(); + return apidatas; + } + return apidatas; + } + + private String getDeptTypeCode(String deptId) { + String code = ""; + String sql = "select depttypecode from hrmdepartmentdefined where deptid=?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, deptId); + while (rs.next()) { + code = rs.getString("depttypecode"); + break; + } + return code; + } +} diff --git a/src/main/java/com/engine/htsc/trip/cmd/GetCustCmd.java b/src/main/java/com/engine/htsc/trip/cmd/GetCustCmd.java new file mode 100644 index 0000000..fbd5321 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/cmd/GetCustCmd.java @@ -0,0 +1,36 @@ +package com.engine.htsc.trip.cmd; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import java.util.HashMap; +import java.util.Map; +import weaver.hrm.User; +import weaver.interfaces.htsc.cus.HTUtil; + +public class GetCustCmd extends AbstractCommonCommand> { + + public GetCustCmd(User user, Map params) { + this.user = user; + this.params = params; + } + + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + Map apidatas = new HashMap<>(); + try { + HTUtil ht = new HTUtil(); + String datas = ht.getCust(params); + apidatas.put("datas", datas); + } catch (Exception e) { + e.printStackTrace(); + return apidatas; + } + return apidatas; + } +} diff --git a/src/main/java/com/engine/htsc/trip/cmd/GetImageCmd.java b/src/main/java/com/engine/htsc/trip/cmd/GetImageCmd.java new file mode 100644 index 0000000..63951a4 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/cmd/GetImageCmd.java @@ -0,0 +1,36 @@ +package com.engine.htsc.trip.cmd; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import java.util.HashMap; +import java.util.Map; +import weaver.hrm.User; +import weaver.interfaces.htsc.cus.HTUtil; + +public class GetImageCmd extends AbstractCommonCommand> { + + public GetImageCmd(User user, Map params) { + this.user = user; + this.params = params; + } + + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + Map apidatas = new HashMap<>(); + try { + HTUtil ht = new HTUtil(); + String datas = ht.getImage(params); + apidatas.put("datas", datas); + } catch (Exception e) { + e.printStackTrace(); + return apidatas; + } + return apidatas; + } +} diff --git a/src/main/java/com/engine/htsc/trip/cmd/GetProjectByPageCmd.java b/src/main/java/com/engine/htsc/trip/cmd/GetProjectByPageCmd.java new file mode 100644 index 0000000..d7b5e99 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/cmd/GetProjectByPageCmd.java @@ -0,0 +1,35 @@ +package com.engine.htsc.trip.cmd; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import java.util.HashMap; +import java.util.Map; +import weaver.hrm.User; +import weaver.interfaces.htsc.cus.HTUtil; + +public class GetProjectByPageCmd extends AbstractCommonCommand> { + + public GetProjectByPageCmd(User user, Map params){ + this.user = user; + this.params = params; + } + + @Override + public BizLogContext getLogContext() { + return null; + } + @Override + public Map execute(CommandContext commandContext) { + Map apidatas = new HashMap<>(); + try { + HTUtil ht = new HTUtil(); + String datas = ht.getProjectByPage(params); + apidatas.put("datas", datas); + } catch (Exception e) { + e.printStackTrace(); + return apidatas; + } + return apidatas; + } +} diff --git a/src/main/java/com/engine/htsc/trip/cmd/GetProjectCmd.java b/src/main/java/com/engine/htsc/trip/cmd/GetProjectCmd.java new file mode 100644 index 0000000..7ccc3c3 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/cmd/GetProjectCmd.java @@ -0,0 +1,36 @@ +package com.engine.htsc.trip.cmd; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import java.util.HashMap; +import java.util.Map; +import weaver.hrm.User; +import weaver.interfaces.htsc.cus.HTUtil; + +public class GetProjectCmd extends AbstractCommonCommand> { + + public GetProjectCmd(User user, Map params) { + this.user = user; + this.params = params; + } + + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + Map apidatas = new HashMap<>(); + try { + HTUtil ht = new HTUtil(); + String datas = ht.getProject(params); + apidatas.put("datas", datas); + } catch (Exception e) { + e.printStackTrace(); + return apidatas; + } + return apidatas; + } +} diff --git a/src/main/java/com/engine/htsc/trip/cmd/QueryInvoiceCmd.java b/src/main/java/com/engine/htsc/trip/cmd/QueryInvoiceCmd.java new file mode 100644 index 0000000..ce6b213 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/cmd/QueryInvoiceCmd.java @@ -0,0 +1,36 @@ +package com.engine.htsc.trip.cmd; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import java.util.HashMap; +import java.util.Map; +import weaver.hrm.User; +import weaver.interfaces.htsc.cus.HTUtil; + +public class QueryInvoiceCmd extends AbstractCommonCommand> { + + public QueryInvoiceCmd(User user, Map params) { + this.user = user; + this.params = params; + } + + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + Map apidatas = new HashMap<>(); + try { + HTUtil ht = new HTUtil(); + String datas = ht.queryInvoice(params); + apidatas.put("datas", datas); + } catch (Exception e) { + e.printStackTrace(); + return apidatas; + } + return apidatas; + } +} diff --git a/src/main/java/com/engine/htsc/trip/cmd/ResetImageAndBillCmd.java b/src/main/java/com/engine/htsc/trip/cmd/ResetImageAndBillCmd.java new file mode 100644 index 0000000..9f7b03c --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/cmd/ResetImageAndBillCmd.java @@ -0,0 +1,36 @@ +package com.engine.htsc.trip.cmd; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import java.util.HashMap; +import java.util.Map; +import weaver.hrm.User; +import weaver.interfaces.htsc.cus.HTUtil; + +public class ResetImageAndBillCmd extends AbstractCommonCommand> { + + public ResetImageAndBillCmd(User user, Map params) { + this.user = user; + this.params = params; + } + + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + Map apidatas = new HashMap<>(); + try { + HTUtil ht = new HTUtil(); + String datas = ht.resetImageAndBill(params); + apidatas.put("datas", datas); + } catch (Exception e) { + e.printStackTrace(); + return apidatas; + } + return apidatas; + } +} diff --git a/src/main/java/com/engine/htsc/trip/cmd/SaveFydjCmd.java b/src/main/java/com/engine/htsc/trip/cmd/SaveFydjCmd.java new file mode 100644 index 0000000..db54f62 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/cmd/SaveFydjCmd.java @@ -0,0 +1,36 @@ +package com.engine.htsc.trip.cmd; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import java.util.HashMap; +import java.util.Map; +import weaver.hrm.User; +import weaver.interfaces.htsc.cus.HTUtil; + +public class SaveFydjCmd extends AbstractCommonCommand> { + + public SaveFydjCmd(User user, Map params) { + this.user = user; + this.params = params; + } + + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + Map apidatas = new HashMap<>(); + try { + HTUtil ht = new HTUtil(); + String datas = ht.saveFydj(params); + apidatas.put("datas", datas); + } catch (Exception e) { + e.printStackTrace(); + return apidatas; + } + return apidatas; + } +} diff --git a/src/main/java/com/engine/htsc/trip/pojo/JourneyEntity.java b/src/main/java/com/engine/htsc/trip/pojo/JourneyEntity.java new file mode 100644 index 0000000..6a23215 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/pojo/JourneyEntity.java @@ -0,0 +1,41 @@ +package com.engine.htsc.trip.pojo; + +public class JourneyEntity { + + private String beginTime; + private String endTime; + private String beginCity; + private String endCity; + + public String getBeginTime() { + return beginTime; + } + + public void setBeginTime(String beginTime) { + this.beginTime = beginTime; + } + + public String getEndTime() { + return endTime; + } + + public void setEndTime(String endTime) { + this.endTime = endTime; + } + + public String getBeginCity() { + return beginCity; + } + + public void setBeginCity(String beginCity) { + this.beginCity = beginCity; + } + + public String getEndCity() { + return endCity; + } + + public void setEndCity(String endCity) { + this.endCity = endCity; + } +} diff --git a/src/main/java/com/engine/htsc/trip/pojo/OrderEntity.java b/src/main/java/com/engine/htsc/trip/pojo/OrderEntity.java new file mode 100644 index 0000000..5e62f72 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/pojo/OrderEntity.java @@ -0,0 +1,41 @@ +package com.engine.htsc.trip.pojo; + +public class OrderEntity { + + private String beginTime; + private String endTime; + private String beginCity; + private String endCity; + + public String getBeginTime() { + return beginTime; + } + + public void setBeginTime(String beginTime) { + this.beginTime = beginTime; + } + + public String getEndTime() { + return endTime; + } + + public void setEndTime(String endTime) { + this.endTime = endTime; + } + + public String getBeginCity() { + return beginCity; + } + + public void setBeginCity(String beginCity) { + this.beginCity = beginCity; + } + + public String getEndCity() { + return endCity; + } + + public void setEndCity(String endCity) { + this.endCity = endCity; + } +} diff --git a/src/main/java/com/engine/htsc/trip/pojo/ReiMAInfo.java b/src/main/java/com/engine/htsc/trip/pojo/ReiMAInfo.java new file mode 100644 index 0000000..af00c7c --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/pojo/ReiMAInfo.java @@ -0,0 +1,138 @@ +package com.engine.htsc.trip.pojo; + + +import com.engine.htsc.trip.service.impl.ReimbursementServiceImpl; +import org.apache.commons.lang3.builder.EqualsBuilder; +import org.apache.commons.lang3.builder.HashCodeBuilder; + +import java.io.Serializable; + +/** + * 月结差补主数据封装 + * @see ReimbursementServiceImpl + */ +public class ReiMAInfo implements Serializable { + String ccr; + String requestId; + String ngr; + String requestMark; + String requestName; + //关联出差申请流程 + String relCcReqMark; + //流程最后修改日期 + String lastOperateDate; + + public ReiMAInfo() { + } + + public ReiMAInfo(String ccr, String requestId, String ngr, String requestMark, String requestName, String relCcReqMark, String lastOperateDate) { + this.ccr = ccr; + this.requestId = requestId; + this.ngr = ngr; + this.requestMark = requestMark; + this.requestName = requestName; + this.relCcReqMark = relCcReqMark; + this.lastOperateDate = lastOperateDate; + } + + public String getCcr() { + return ccr; + } + + public void setCcr(String ccr) { + this.ccr = ccr; + } + + public String getRequestId() { + return requestId; + } + + public void setRequestId(String requestId) { + this.requestId = requestId; + } + + public String getNgr() { + return ngr; + } + + public void setNgr(String ngr) { + this.ngr = ngr; + } + + public String getRequestMark() { + return requestMark; + } + + public void setRequestMark(String requestMark) { + this.requestMark = requestMark; + } + + public String getRequestName() { + return requestName; + } + + public void setRequestName(String requestName) { + this.requestName = requestName; + } + + public String getRelCcReqMark() { + return relCcReqMark; + } + + public void setRelCcReqMark(String relCcReqMark) { + this.relCcReqMark = relCcReqMark; + } + + public String getLastOperateDate() { + return lastOperateDate; + } + + public void setLastOperateDate(String lastOperateDate) { + this.lastOperateDate = lastOperateDate; + } + + @Override + public String toString() { + return "ReiMAInfo{" + + "ccr='" + ccr + '\'' + + ", requestId='" + requestId + '\'' + + ", ngr='" + ngr + '\'' + + ", requestMark='" + requestMark + '\'' + + ", requestName='" + requestName + '\'' + + ", relCcReqMark='" + relCcReqMark + '\'' + + ", lastOperateDate='" + lastOperateDate + '\'' + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + + if (o == null || getClass() != o.getClass()) return false; + + ReiMAInfo reiMAInfo = (ReiMAInfo) o; + + return new EqualsBuilder() + .append(ccr, reiMAInfo.ccr) + .append(requestId, reiMAInfo.requestId) + .append(ngr, reiMAInfo.ngr) + .append(requestMark, reiMAInfo.requestMark) + .append(requestName, reiMAInfo.requestName) + .append(relCcReqMark, reiMAInfo.relCcReqMark) + .append(lastOperateDate, reiMAInfo.lastOperateDate) + .isEquals(); + } + + @Override + public int hashCode() { + return new HashCodeBuilder(17, 37) + .append(ccr) + .append(requestId) + .append(ngr) + .append(requestMark) + .append(requestName) + .append(relCcReqMark) + .append(lastOperateDate) + .toHashCode(); + } +} diff --git a/src/main/java/com/engine/htsc/trip/pojo/UnionStroke.java b/src/main/java/com/engine/htsc/trip/pojo/UnionStroke.java new file mode 100644 index 0000000..99e2fb3 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/pojo/UnionStroke.java @@ -0,0 +1,192 @@ +package com.engine.htsc.trip.pojo; + +import com.alibaba.excel.annotation.ExcelProperty; + +import java.io.Serializable; + +public class UnionStroke implements Serializable { + + private static final long serialVersionUID = 581529993329624751L; + + @ExcelProperty("出差申请编号") + private String lcbh; + @ExcelProperty("出差申请标题") + private String requestName; + @ExcelProperty("拟稿人") + private String ngr; + @ExcelProperty("拟稿时间") + private String ngrq; + @ExcelProperty("出差类型") + private String cclxzxx; + @ExcelProperty("投行项目名称") + private String txxmjc; + @ExcelProperty("投行项目编码") + private String txmxbh; + @ExcelProperty("crm客户名称") + private String khmc; + @ExcelProperty("crm客户编码") + private String khbm; + @ExcelProperty("出差情况") + private String ccqk; + @ExcelProperty("修订返回时间") + private String xdfhsj; + + @ExcelProperty("餐费自理") + private String sfbx; + @ExcelProperty("出发地国内") + private String cfdgn; + @ExcelProperty("目的地国内") + private String mddgn; + @ExcelProperty("出发地海外") + private String cfdhw; + @ExcelProperty("目的地海外") + private String mddhw; + @ExcelProperty("出发时间") + private String cfsj; + @ExcelProperty("返回时间") + private String fhsj; + + public String getLcbh() { + return lcbh; + } + + public void setLcbh(String lcbh) { + this.lcbh = lcbh; + } + + public String getRequestName() { + return requestName; + } + + public void setRequestName(String requestName) { + this.requestName = requestName; + } + + public String getNgr() { + return ngr; + } + + public void setNgr(String ngr) { + this.ngr = ngr; + } + + public String getNgrq() { + return ngrq; + } + + public void setNgrq(String ngrq) { + this.ngrq = ngrq; + } + + public String getCclxzxx() { + return cclxzxx; + } + + public void setCclxzxx(String cclxzxx) { + this.cclxzxx = cclxzxx; + } + + public String getTxxmjc() { + return txxmjc; + } + + public void setTxxmjc(String txxmjc) { + this.txxmjc = txxmjc; + } + + public String getTxmxbh() { + return txmxbh; + } + + public void setTxmxbh(String txmxbh) { + this.txmxbh = txmxbh; + } + + public String getKhmc() { + return khmc; + } + + public void setKhmc(String khmc) { + this.khmc = khmc; + } + + public String getKhbm() { + return khbm; + } + + public void setKhbm(String khbm) { + this.khbm = khbm; + } + + public String getCcqk() { + return ccqk; + } + + public void setCcqk(String ccqk) { + this.ccqk = ccqk; + } + + public String getXdfhsj() { + return xdfhsj; + } + + public void setXdfhsj(String xdfhsj) { + this.xdfhsj = xdfhsj; + } + + public String getSfbx() { + return sfbx; + } + + public void setSfbx(String sfbx) { + this.sfbx = sfbx; + } + + public String getCfdgn() { + return cfdgn; + } + + public void setCfdgn(String cfdgn) { + this.cfdgn = cfdgn; + } + + public String getMddgn() { + return mddgn; + } + + public void setMddgn(String mddgn) { + this.mddgn = mddgn; + } + + public String getCfdhw() { + return cfdhw; + } + + public void setCfdhw(String cfdhw) { + this.cfdhw = cfdhw; + } + + public String getMddhw() { + return mddhw; + } + + public void setMddhw(String mddhw) { + this.mddhw = mddhw; + } + + public String getCfsj() { + return cfsj; + } + + public void setCfsj(String cfsj) { + this.cfsj = cfsj; + } + + public String getFhsj() { + return fhsj; + } + + public void setFhsj(String fhsj) { + this.fhsj = fhsj; + } +} diff --git a/src/main/java/com/engine/htsc/trip/pojo/UnionTraveler.java b/src/main/java/com/engine/htsc/trip/pojo/UnionTraveler.java new file mode 100644 index 0000000..f1821d0 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/pojo/UnionTraveler.java @@ -0,0 +1,213 @@ +package com.engine.htsc.trip.pojo; + +import com.alibaba.excel.annotation.ExcelProperty; + +import java.io.Serializable; + +public class UnionTraveler implements Serializable { + + private static final long serialVersionUID = -6660355148806278836L; + + @ExcelProperty("出差申请编号") + private String lcbh; + @ExcelProperty("出差申请标题") + private String requestName; + @ExcelProperty("拟稿人") + private String ngr; + @ExcelProperty("拟稿时间") + private String ngrq; + @ExcelProperty("出差类型") + private String cclxzxx; + @ExcelProperty("投行项目名称") + private String txxmjc; + @ExcelProperty("投行项目编码") + private String txmxbh; + @ExcelProperty("crm客户名称") + private String khmc; + @ExcelProperty("crm客户编码") + private String khbm; + @ExcelProperty("出差情况") + private String ccqk; + @ExcelProperty("修订返回时间") + private String xdfhsj; + + + @ExcelProperty("出差人工号") + private String ccrgh; + @ExcelProperty("出差人姓名") + private String xm; + @ExcelProperty("出差人部门") + private String bm; + @ExcelProperty("出差人部门负责人") + private String bmfzr; + @ExcelProperty("费用承担部门") + private String fycdbm; + @ExcelProperty("费用承担部门负责人") + private String fycdbmfzr; + @ExcelProperty("工作地") + private String gzd; + @ExcelProperty("职级") + private String zj; + @ExcelProperty("报销地") + private String bxd; + + public String getLcbh() { + return lcbh; + } + + public void setLcbh(String lcbh) { + this.lcbh = lcbh; + } + + public String getRequestName() { + return requestName; + } + + public void setRequestName(String requestName) { + this.requestName = requestName; + } + + public String getNgr() { + return ngr; + } + + public void setNgr(String ngr) { + this.ngr = ngr; + } + + public String getNgrq() { + return ngrq; + } + + public void setNgrq(String ngrq) { + this.ngrq = ngrq; + } + + public String getCclxzxx() { + return cclxzxx; + } + + public void setCclxzxx(String cclxzxx) { + this.cclxzxx = cclxzxx; + } + + public String getTxxmjc() { + return txxmjc; + } + + public void setTxxmjc(String txxmjc) { + this.txxmjc = txxmjc; + } + + public String getTxmxbh() { + return txmxbh; + } + + public void setTxmxbh(String txmxbh) { + this.txmxbh = txmxbh; + } + + public String getKhmc() { + return khmc; + } + + public void setKhmc(String khmc) { + this.khmc = khmc; + } + + public String getKhbm() { + return khbm; + } + + public void setKhbm(String khbm) { + this.khbm = khbm; + } + + public String getCcqk() { + return ccqk; + } + + public void setCcqk(String ccqk) { + this.ccqk = ccqk; + } + + public String getXdfhsj() { + return xdfhsj; + } + + public void setXdfhsj(String xdfhsj) { + this.xdfhsj = xdfhsj; + } + + public String getCcrgh() { + return ccrgh; + } + + public void setCcrgh(String ccrgh) { + this.ccrgh = ccrgh; + } + + public String getXm() { + return xm; + } + + public void setXm(String xm) { + this.xm = xm; + } + + public String getBm() { + return bm; + } + + public void setBm(String bm) { + this.bm = bm; + } + + public String getBmfzr() { + return bmfzr; + } + + public void setBmfzr(String bmfzr) { + this.bmfzr = bmfzr; + } + + public String getFycdbm() { + return fycdbm; + } + + public void setFycdbm(String fycdbm) { + this.fycdbm = fycdbm; + } + + public String getFycdbmfzr() { + return fycdbmfzr; + } + + public void setFycdbmfzr(String fycdbmfzr) { + this.fycdbmfzr = fycdbmfzr; + } + + public String getGzd() { + return gzd; + } + + public void setGzd(String gzd) { + this.gzd = gzd; + } + + public String getZj() { + return zj; + } + + public void setZj(String zj) { + this.zj = zj; + } + + public String getBxd() { + return bxd; + } + + public void setBxd(String bxd) { + this.bxd = bxd; + } +} diff --git a/src/main/java/com/engine/htsc/trip/service/BtService.java b/src/main/java/com/engine/htsc/trip/service/BtService.java new file mode 100644 index 0000000..069c9c6 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/BtService.java @@ -0,0 +1,24 @@ +package com.engine.htsc.trip.service; + +import java.util.List; + +/** + * Created by qlk + */ +public interface BtService { + + /** + * 获取差旅标准 + * @param travelers 出差人 + * @param destinations 出差地 + * @return List + */ + List getTravelStandard(String travelers, String destinations); + + Boolean checkNames(String names); + + Boolean checkDeptAndName(String dept, String name); + + String getDirectors(String dept, String expDept); + +} diff --git a/src/main/java/com/engine/htsc/trip/service/BudgetCommitService.java b/src/main/java/com/engine/htsc/trip/service/BudgetCommitService.java new file mode 100644 index 0000000..e8a0f55 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/BudgetCommitService.java @@ -0,0 +1,8 @@ +package com.engine.htsc.trip.service; + +import java.util.Map; + +public interface BudgetCommitService { + + Map budgetCommit(Map params); +} diff --git a/src/main/java/com/engine/htsc/trip/service/ConnectInvAndBillService.java b/src/main/java/com/engine/htsc/trip/service/ConnectInvAndBillService.java new file mode 100644 index 0000000..96feefe --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/ConnectInvAndBillService.java @@ -0,0 +1,8 @@ +package com.engine.htsc.trip.service; + +import java.util.Map; + +public interface ConnectInvAndBillService { + + Map connectInvAndBill(Map params); +} diff --git a/src/main/java/com/engine/htsc/trip/service/GetBudgetService.java b/src/main/java/com/engine/htsc/trip/service/GetBudgetService.java new file mode 100644 index 0000000..7b46f91 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/GetBudgetService.java @@ -0,0 +1,8 @@ +package com.engine.htsc.trip.service; + +import java.util.Map; + +public interface GetBudgetService { + + Map getBudget(Map params); +} diff --git a/src/main/java/com/engine/htsc/trip/service/GetCustService.java b/src/main/java/com/engine/htsc/trip/service/GetCustService.java new file mode 100644 index 0000000..6b3dc45 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/GetCustService.java @@ -0,0 +1,8 @@ +package com.engine.htsc.trip.service; + +import java.util.Map; + +public interface GetCustService { + + Map getCust(Map params); +} diff --git a/src/main/java/com/engine/htsc/trip/service/GetImageService.java b/src/main/java/com/engine/htsc/trip/service/GetImageService.java new file mode 100644 index 0000000..122d5a7 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/GetImageService.java @@ -0,0 +1,8 @@ +package com.engine.htsc.trip.service; + +import java.util.Map; + +public interface GetImageService { + + Map getImage(Map params); +} diff --git a/src/main/java/com/engine/htsc/trip/service/GetProjectService.java b/src/main/java/com/engine/htsc/trip/service/GetProjectService.java new file mode 100644 index 0000000..ac04866 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/GetProjectService.java @@ -0,0 +1,10 @@ +package com.engine.htsc.trip.service; + +import java.util.Map; + +public interface GetProjectService { + + Map getProject(Map params); + + Map getProjectByPage(Map params); +} diff --git a/src/main/java/com/engine/htsc/trip/service/GetStandardService.java b/src/main/java/com/engine/htsc/trip/service/GetStandardService.java new file mode 100644 index 0000000..fc65477 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/GetStandardService.java @@ -0,0 +1,10 @@ +package com.engine.htsc.trip.service; + +import java.util.List; +import java.util.Map; + +public interface GetStandardService { + + List> getReimbursementStandard(List> reqList); + +} diff --git a/src/main/java/com/engine/htsc/trip/service/QueryInvoiceService.java b/src/main/java/com/engine/htsc/trip/service/QueryInvoiceService.java new file mode 100644 index 0000000..f1783c7 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/QueryInvoiceService.java @@ -0,0 +1,8 @@ +package com.engine.htsc.trip.service; + +import java.util.Map; + +public interface QueryInvoiceService { + + Map queryInvoice(Map params); +} diff --git a/src/main/java/com/engine/htsc/trip/service/ReimbursementService.java b/src/main/java/com/engine/htsc/trip/service/ReimbursementService.java new file mode 100644 index 0000000..0f3a58e --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/ReimbursementService.java @@ -0,0 +1,142 @@ +package com.engine.htsc.trip.service; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; +import java.util.Map; + +/** + * Created by qlk + */ +public interface ReimbursementService { + + /** + * 带出费用明细 + * @param formTable + * @param requestIds + * @return + */ + List> bringDt12(String formTable, String requestIds); + + /** + * 带出行程明细 + * @param formTable + * @param requestIds + * @return + */ + List> bringDt13(String formTable, String requestIds); + + /** + * 报销人带出 + * @param formTable + * @param requestIds + * @return + */ + Map bringClaimant(String formTable, String requestIds); + + /** + * 是否领导报销 + * @param ngr 拟稿人 + * @return boolean + */ + Boolean checkLeader(String ngr); + + /** + * 关联出差申请的报销次数 + * @param lcs 流程按逗号 + * @return 流程名称和报销次数 + */ + List> getApInfo(String lcs); + + /** + * 多部门浏览按钮 + * @param ccr 出差人 + * @param lc 流程编号 + * @return map + */ + Map getBrowserBtn(String ccr, String lc); + + /** + * 获取用户账户信息 + * @param ngr 拟稿人 + * @param bxr 报销人 + * @return 银行信息 + */ + Map getBankInfo(String ngr, String bxr); + + /** + * 单个明细行的差旅标准 + * @param traveler 出差人 + * @param destination 省市区,逗号分隔 + * @return 差标 + */ + List getTravelStandardForSingle(String traveler, String destination); + + /** + * 获取关联出差流程的投行项目 + * @param ccr 出差人 + * @param lc 流程号 + * @return 浏览按钮 + */ + Map getGsxmBrowserBtn(String ccr, String lc); + + /** + * 根据报销地确认报销地费用会计 + * @param bxd 报销地点 + * @return List + */ + List getAccountingByLocation(String bxd); + + /** + * 获取出差流程的出差人对应补贴标准值 + * @param requestid 流程编号 + * @return map key:出差人code value:标准补贴 + */ + List> getSubsidyStandard(String requestid); + + /** + * 通过工号从建模中获取银行信息 + * @param hrmId 人员id + * @return 银行信息map + * yxmc:银行名称 + * yxkh:银行卡号 + */ + Map getBankInfoFormOADB(String hrmId); + + /** + * 出差流程已关联报销单次数 + * @param lcs 出差流程字符串 + * @return map + * key:出差流程编号(string) + * value:已关联过的报销编号(list) + */ + Map> getRelatedInfo(String lcs); + + /** + * 预算接口 出纳建模按钮 + * @param requestid 申请流程id + * @param billStatus 实占 1 + * @return + */ + String doBudgetCommit(String requestid, String billStatus); + + /** + * 预算接口,同步写入预算中间表 + * @param reqMap 数据信息 + * @return 是否成功 + */ + Boolean doBudgetMiddleTable(Map reqMap); + + /** + * 月度补贴 + * @param request2Map 条件 + * @return 按人员组成list + */ + List> monthlyAllowance(Map request2Map); + + /** + * 月度补贴 -- 出差申请 + * @param queryParam 条件 + * @return 按人员,出差申请维度 + */ + List> monthlyAllowance4BusinessTrip(Map queryParam) throws Exception; +} diff --git a/src/main/java/com/engine/htsc/trip/service/ResetImageAndBillService.java b/src/main/java/com/engine/htsc/trip/service/ResetImageAndBillService.java new file mode 100644 index 0000000..f951c25 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/ResetImageAndBillService.java @@ -0,0 +1,8 @@ +package com.engine.htsc.trip.service; + +import java.util.Map; + +public interface ResetImageAndBillService { + + Map resetImageAndBill(Map params); +} diff --git a/src/main/java/com/engine/htsc/trip/service/SaveFydjService.java b/src/main/java/com/engine/htsc/trip/service/SaveFydjService.java new file mode 100644 index 0000000..650e5f2 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/SaveFydjService.java @@ -0,0 +1,8 @@ +package com.engine.htsc.trip.service; + +import java.util.Map; + +public interface SaveFydjService { + + Map saveFydj(Map params); +} diff --git a/src/main/java/com/engine/htsc/trip/service/TripExcelOutService.java b/src/main/java/com/engine/htsc/trip/service/TripExcelOutService.java new file mode 100644 index 0000000..64ee073 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/TripExcelOutService.java @@ -0,0 +1,18 @@ +package com.engine.htsc.trip.service; + +import com.engine.core.impl.Service; +import com.engine.htsc.trip.pojo.UnionStroke; +import com.engine.htsc.trip.pojo.UnionTraveler; +import org.apache.poi.ss.usermodel.Workbook; + +import java.util.List; + +public interface TripExcelOutService { + + Workbook getExportData(String startTime, String endTime) throws Exception; + + List getTravelerData(String sql) throws Exception; + + List getStrokeData(String sql) throws Exception; + +} diff --git a/src/main/java/com/engine/htsc/trip/service/impl/BtServiceImpl.java b/src/main/java/com/engine/htsc/trip/service/impl/BtServiceImpl.java new file mode 100644 index 0000000..bf3f485 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/impl/BtServiceImpl.java @@ -0,0 +1,309 @@ +package com.engine.htsc.trip.service.impl; + +import com.engine.htsc.trip.service.BtService; +import com.engine.core.impl.Service; +import java.util.HashSet; +import java.util.Set; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.interfaces.htsc.comInfo.PropBean; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * Created by qlk + */ +public class BtServiceImpl extends Service implements BtService { + + private final Logger log = LoggerFactory.getLogger(BtServiceImpl.class); + private final RecordSet rs = new RecordSet(); + + @Override + public List getTravelStandard(String travelers, String destinations) { + //回传信息 + String msg = null; + String[] checkTravelers = travelers.split(","); + String[] checkDestinations = destinations.split(","); + List standardMsg = new ArrayList<>(checkTravelers.length * checkDestinations.length); + //城市信息 + //甲类城市 + String[] cityA = {"34", "112", "246", "248", "128", "338", "284", "99"}; + List cityAList = Arrays.asList(cityA); + //乙类城市 + String[] cityB = {"75", "118", "283", "287", "357", "289", "434273726", "180", "935078239", "179", "157", "197", "30002", "216", "231", "321", "81095659", "126111795", "387", "35", "158", "381", "30003", "311", "49", "346", "74", "89", "114", "129"}; + List cityBList = Arrays.asList(cityB); + //丙类城市 不包含a,b的 + //人员信息 + //公司领导(董事会487,执行委员会489,党委713)+2 + List deptLeader = new ArrayList<>(); + String sql_dept = "SELECT id FROM hrmresource WHERE departmentid IN ('487','489','713') AND id IS NOT NULL"; + rs.execute(sql_dept); + while (rs.next()) { + deptLeader.add(rs.getString("id")); + } + deptLeader.add("6633"); //合规总监,李洪涛 + deptLeader.add("5891"); //宁敖 + //判断标识,匹配金额 + //获取后台部门 + PropBean pp = new PropBean(); + String backdept = pp.getPropName("backdept"); + log.info("====获取配置表中数据:{}", backdept); + int code = 2; + for (String traveler : checkTravelers) { + if (deptLeader.contains(traveler)) { + //traveler是实报实销的 + for (String checkDestination : checkDestinations) { + standardMsg.add(null + "|" + null); + } + continue; + } else { + //需要判断逻辑,给traveler赋一个code + //中后台部门 id >> '495','671','717','493','494' + String sql_traveler_isNot_middle_backstage = "SELECT COUNT(*) AS cnt FROM hrmresource WHERE departmentid IN (" + backdept + ") AND id = ?"; + rs.executeQuery(sql_traveler_isNot_middle_backstage, new Object[]{traveler}); + rs.next(); + if (rs.getInt("cnt") == 1) { //属于中后台 + RecordSet recordSet = new RecordSet(); + String sql_SD_D = "SELECT t1.ID,t1.field9 as field,t2.LOGINID FROM cus_fielddata t1\n" + + " left join HRMRESOURCE t2\n" + + " on t1.ID=t2.ID\n" + + " WHERE t1.scopeid=1 and t1.ID = ?"; + recordSet.executeQuery(sql_SD_D, new Object[]{traveler}); + log.info("==当前人员为中后台"); + if (recordSet.next()) { + String field = recordSet.getString("field"); + String loginid = recordSet.getString("LOGINID"); + log.info("==当前人员:{},当前职级{}", traveler, field); + if ("MD".equals(field) || "ED".equals(field) || "SD".equals(field) || "D".equals(field)) { + code = 1; //traveler属于SD,D + log.info("==匹配人员code:{}", code); + } else { + code = 2; // SS及以下 + //判断是否为实习生 + if (loginid.startsWith("sx")) { + code = 3; + } + log.info("==匹配人员code:{}", code); + } + } + } else { + //属于前台 + RecordSet recordSet = new RecordSet(); + String sql_MD_ED = "SELECT t1.ID,t1.field9 as field,t2.LOGINID FROM cus_fielddata t1\n" + + " left join HRMRESOURCE t2\n" + + " on t1.ID=t2.ID\n" + + " WHERE t1.scopeid=1 and t1.ID = ?"; + recordSet.executeQuery(sql_MD_ED, new Object[]{traveler}); + log.info("==当前人员为前台"); + if (recordSet.next()) { + String field = recordSet.getString("field"); + String loginid = recordSet.getString("LOGINID"); + log.info("==当前人员:{},当前职级{}", traveler, field); + if ("MD".equals(field) || "ED".equals(field)) { + code = 1; //属于SD,D + log.info("==匹配人员code:{}", code); + } else { + code = 2; //D及以下 + //判断是否为实习生 + if (loginid.startsWith("sx")) { + code = 3; + } + log.info("==匹配人员code:{}", code); + } + } + } + } + //根据业务,新增L3P差标 + //获取匹配L3P差标人员配置 + Set l3pTravelStandardSet = new HashSet<>(Arrays.asList(pp.getPropName("travel_standard_l3p").split(","))); + //获取出差人员的华泰工号 + String htWorkCode = ""; + String getHTWorkCodeSql = "select workcode from hrmresource where id = ?"; + rs.executeQuery(getHTWorkCodeSql,traveler); + while (rs.next()){ + htWorkCode = rs.getString("workcode"); + } + if(l3pTravelStandardSet.contains(htWorkCode)){ + for (String destination : checkDestinations) { + if (cityAList.contains(destination)) { + msg = "1680"; + } else if (cityBList.contains(destination)) { + msg = "1200"; + } else { + msg = "960"; + } + //提高机票差标 + msg = String.join("|", msg, "软卧、一等座", "商务舱", "二等舱"); + standardMsg.add(msg); + } + }else{ + //code和地区信息组合 + if (code == 1) { + for (String destination : checkDestinations) { + if (cityAList.contains(destination)) { + msg = "1680"; + } else if (cityBList.contains(destination)) { + msg = "1200"; + } else { + msg = "960"; + } + //交通 + if (!"6483".equals(traveler) || !"6579".equals(traveler) || !"2906".equals(traveler)) { //协管领导 + msg = String.join("|", msg, "软卧、一等座", "经济舱", "二等舱"); + } else { + msg += "|" + null; + } + standardMsg.add(msg); + } + } else if (code == 2) { + for (String destination : checkDestinations) { + if (cityAList.contains(destination)) { + msg = "1200"; + } else if (cityBList.contains(destination)) { + msg = "840"; + } else { + msg = "672"; + } + //交通 + if (!"6483".equals(traveler) || !"6579".equals(traveler) || !"2906".equals(traveler)) { //协管领导 + msg = String.join("|", msg, "软卧、一等座", "经济舱", "二等舱"); + } else { + msg += "|" + null; + } + standardMsg.add(msg); + msg = null; + } + } else if (code == 3) { + //实习生 + for (String destination : checkDestinations) { + if (cityAList.contains(destination)) { + msg = "1000"; + } else if (cityBList.contains(destination)) { + msg = "700"; + } else { + msg = "560"; + } + //交通 + if (!"6483".equals(traveler) || !"6579".equals(traveler) || !"2906".equals(traveler)) { //协管领导 + msg = String.join("|", msg, "硬座、二等座", "无","三等舱"); + } else { + msg += "|" + null; + } + standardMsg.add(msg); + msg = null; + } + } + } + + } + return standardMsg; + } + + @Override + public Boolean checkNames(String names) { + String[] checkName = names.split(","); + List nameSpace = new ArrayList<>(); //姓名空间 + //特定人员 + nameSpace.add("18879"); //党委书记,江禹 + nameSpace.add("21749"); //党委副书记 +// nameSpace.add("6633"); //合规总监 + nameSpace.add("5891"); //宁敖 + for (String name : checkName) { + if (nameSpace.contains(name)) { + return true; + } + } + nameSpace.clear(); + //特定部门(董事会487,执行委员会489,党委713,投资银行业务线/专职合规管理666,债券业务线/专职合规管理667) +// String sql_SpecifyDept = "SELECT DISTINCT id FROM hrmresource WHERE departmentid IN ('666','667','487','489','713') AND id IS NOT NULL"; + //移除 专职合规管理666,专职合规管理667所在部门人员 + String sql_SpecifyDept = "SELECT DISTINCT id FROM hrmresource WHERE departmentid IN ('487','489','713') AND id IS NOT NULL"; + rs.execute(sql_SpecifyDept); + while (rs.next()) { + nameSpace.add(rs.getString("id")); + } + for (String name : checkName) { + if (nameSpace.contains(name)) { + return true; + } + } + //部门负责人 + nameSpace.clear(); + for (String s : checkName) { +// String sql_deptDirectors = "SELECT DISTINCT deptDirectors AS id FROM matrixtable_2 WHERE deptDirectors IS NOT NULL and deptDirectors like '%" + s + "%'"; +// rs.executeQuery(sql_deptDirectors); +// if (rs.next() && rs.getCounts() > 0) { +// String id = Util.null2String(rs.getString("id")); +// return Arrays.asList(id.split(",")).contains(s); +// } + if (isDirector(s)) { + return true; + } + + + + + } + return false; + } + + @Override + public Boolean checkDeptAndName(String dept, String name) { + String[] checkDept = dept.split(","); + String[] checkName = name.split(","); + List deptSpace = new ArrayList<>(); //部门空间 + List nameSpace = new ArrayList<>(); //人员空间 + deptSpace.add("487"); //董事会 + deptSpace.add("489"); //执行委员会 + deptSpace.add("713"); //执行委员会 + for (String d : checkDept) { + if (deptSpace.contains(d)) { + return true; + } + } + nameSpace.add("18879"); //党委书记,江禹 + nameSpace.add("21749"); //党委副书记(人),曹海涛 + nameSpace.add("6633"); //合规总监,李洪涛 + for (String n : checkName) { + if (nameSpace.contains(n)) { + return true; + } + } + return false; + } + + @Override + public String getDirectors(String dept, String expDept) { + String sql_deptDirectors = "SELECT DISTINCT deptDirectors AS leader FROM matrixtable_2 WHERE id IN (?)"; + StringBuilder deptLeader = new StringBuilder(); + rs.executeQuery(sql_deptDirectors, new Object[]{dept}); + while (rs.next()) { + deptLeader.append(rs.getString("leader")); + } + StringBuilder expDeptLeader = new StringBuilder(); + rs.executeQuery(sql_deptDirectors, new Object[]{expDept}); + while (rs.next()) { + expDeptLeader.append(rs.getString("leader")); + } + return String.join("|", deptLeader.toString(), expDeptLeader.toString()); + } + + + public boolean isDirector(String uid) { + String sql = "SELECT h2.DEPARTMENTID,h.DEPTDIRECTORS,h2.ID FROM HRMDEPARTMENTDEFINED h \n" + + "LEFT JOIN HRMRESOURCE h2 \n" + + "ON h2.DEPARTMENTID=h.DEPTID\n" + + "WHERE h2.ID = ?"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql, uid); + String directors = ""; + if (rs.next()) { + directors = Util.null2String(rs.getString("DEPTDIRECTORS")); + } + return directors.contains(uid); + } +} diff --git a/src/main/java/com/engine/htsc/trip/service/impl/BudgetCommitServiceImpl.java b/src/main/java/com/engine/htsc/trip/service/impl/BudgetCommitServiceImpl.java new file mode 100644 index 0000000..3890cc2 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/impl/BudgetCommitServiceImpl.java @@ -0,0 +1,14 @@ +package com.engine.htsc.trip.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.trip.cmd.BudgetCommitCmd; +import com.engine.htsc.trip.service.BudgetCommitService; +import java.util.Map; + +public class BudgetCommitServiceImpl extends Service implements BudgetCommitService { + + @Override + public Map budgetCommit(Map params) { + return commandExecutor.execute(new BudgetCommitCmd(user, params)); + } +} diff --git a/src/main/java/com/engine/htsc/trip/service/impl/ConnectInvAndBillServiceImpl.java b/src/main/java/com/engine/htsc/trip/service/impl/ConnectInvAndBillServiceImpl.java new file mode 100644 index 0000000..5f036f9 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/impl/ConnectInvAndBillServiceImpl.java @@ -0,0 +1,14 @@ +package com.engine.htsc.trip.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.trip.cmd.ConnectInvAndBillCmd; +import com.engine.htsc.trip.service.ConnectInvAndBillService; +import java.util.Map; + +public class ConnectInvAndBillServiceImpl extends Service implements ConnectInvAndBillService { + + @Override + public Map connectInvAndBill(Map params) { + return commandExecutor.execute(new ConnectInvAndBillCmd(user, params)); + } +} diff --git a/src/main/java/com/engine/htsc/trip/service/impl/GeneratePrintLogInterceptor.java b/src/main/java/com/engine/htsc/trip/service/impl/GeneratePrintLogInterceptor.java new file mode 100644 index 0000000..df54584 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/impl/GeneratePrintLogInterceptor.java @@ -0,0 +1,43 @@ +package com.engine.htsc.trip.service.impl; + +import com.engine.htsc.trip.util.LogUtil; +import com.weaverboot.frame.ioc.anno.classAnno.WeaIocReplaceComponent; +import com.weaverboot.frame.ioc.anno.methodAnno.WeaReplaceBefore; +import com.weaverboot.frame.ioc.handler.replace.weaReplaceParam.impl.WeaBeforeReplaceParam; +import weaver.conn.RecordSet; +import weaver.general.Util; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Map; + +@WeaIocReplaceComponent("generatePrintLogInterceptor") +public class GeneratePrintLogInterceptor { + + private final LogUtil logUtil = new LogUtil(); + + @WeaReplaceBefore(value = "/htoa/api/workflow/reqform/generatePrintLog", order = 1, description = "拦截调用打印接口前") + public void before(WeaBeforeReplaceParam weaBeforeReplaceParam) { + logUtil.writeLog("===GeneratePrintLogInterceptor, 拦截调用打印接口前==="); + Map paramMap = weaBeforeReplaceParam.getParamMap(); + String requestid = (String) paramMap.getOrDefault("requestid", ""); + logUtil.writeLog("[requestid]: (" + requestid + ")"); + RecordSet rs = new RecordSet(); + rs.executeQuery("select ismultiprint from workflow_requestbase where requestid=" + requestid); + String ismultiprint = ""; //打印标识 + if (rs.next()) { + ismultiprint = Util.null2String(rs.getString("ismultiprint")); + } + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + if (!"1".equals(ismultiprint)) { + String now = df.format(LocalDateTime.now()); + rs.executeUpdate("update uf_zfmx set dyzt=0,dysj='" + now + "' where reqid=" + requestid); + logUtil.writeLog("已更新"); + } else { + String now = df.format(LocalDateTime.now()); + rs.executeUpdate("update uf_zfmx set dysj='" + now + "' where reqid=" + requestid); + logUtil.writeLog("打印时间已更新"); + } + + } +} diff --git a/src/main/java/com/engine/htsc/trip/service/impl/GetBudgetServiceImpl.java b/src/main/java/com/engine/htsc/trip/service/impl/GetBudgetServiceImpl.java new file mode 100644 index 0000000..fc629a2 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/impl/GetBudgetServiceImpl.java @@ -0,0 +1,16 @@ +package com.engine.htsc.trip.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.trip.cmd.GetBudgetCmd; +import com.engine.htsc.trip.cmd.ResetImageAndBillCmd; +import com.engine.htsc.trip.service.GetBudgetService; +import com.engine.htsc.trip.service.ResetImageAndBillService; +import java.util.Map; + +public class GetBudgetServiceImpl extends Service implements GetBudgetService { + + @Override + public Map getBudget(Map params) { + return commandExecutor.execute(new GetBudgetCmd(user, params)); + } +} diff --git a/src/main/java/com/engine/htsc/trip/service/impl/GetCustServiceImpl.java b/src/main/java/com/engine/htsc/trip/service/impl/GetCustServiceImpl.java new file mode 100644 index 0000000..cf1d1dc --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/impl/GetCustServiceImpl.java @@ -0,0 +1,14 @@ +package com.engine.htsc.trip.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.trip.cmd.GetCustCmd; +import com.engine.htsc.trip.service.GetCustService; +import java.util.Map; + +public class GetCustServiceImpl extends Service implements GetCustService { + + @Override + public Map getCust(Map params) { + return commandExecutor.execute(new GetCustCmd(user, params)); + } +} diff --git a/src/main/java/com/engine/htsc/trip/service/impl/GetImageServiceImpl.java b/src/main/java/com/engine/htsc/trip/service/impl/GetImageServiceImpl.java new file mode 100644 index 0000000..5b65e51 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/impl/GetImageServiceImpl.java @@ -0,0 +1,14 @@ +package com.engine.htsc.trip.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.trip.cmd.GetImageCmd; +import com.engine.htsc.trip.service.GetImageService; +import java.util.Map; + +public class GetImageServiceImpl extends Service implements GetImageService { + + @Override + public Map getImage(Map params) { + return commandExecutor.execute(new GetImageCmd(user, params)); + } +} diff --git a/src/main/java/com/engine/htsc/trip/service/impl/GetProjectServiceImpl.java b/src/main/java/com/engine/htsc/trip/service/impl/GetProjectServiceImpl.java new file mode 100644 index 0000000..3a2ca05 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/impl/GetProjectServiceImpl.java @@ -0,0 +1,20 @@ +package com.engine.htsc.trip.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.trip.cmd.GetProjectByPageCmd; +import com.engine.htsc.trip.cmd.GetProjectCmd; +import com.engine.htsc.trip.service.GetProjectService; +import java.util.Map; + +public class GetProjectServiceImpl extends Service implements GetProjectService { + + @Override + public Map getProject(Map params) { + return commandExecutor.execute(new GetProjectCmd(user, params)); + } + + @Override + public Map getProjectByPage(Map params) { + return commandExecutor.execute(new GetProjectByPageCmd(user, params)); + } +} diff --git a/src/main/java/com/engine/htsc/trip/service/impl/GetStandardServiceImpl.java b/src/main/java/com/engine/htsc/trip/service/impl/GetStandardServiceImpl.java new file mode 100644 index 0000000..462f727 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/impl/GetStandardServiceImpl.java @@ -0,0 +1,481 @@ +package com.engine.htsc.trip.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.trip.service.GetStandardService; +import weaver.conn.RecordSet; +import weaver.conn.RecordSetDataSource; +import weaver.general.Util; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.comInfo.PropBean; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; +import java.util.*; + +public class GetStandardServiceImpl extends Service implements GetStandardService { + + @Override + public List> getReimbursementStandard(List> reqList) { List> resultList = new ArrayList<>(); + RecordSet rs = new RecordSet(); + try { + PropBean propBean = new PropBean(); + String departmentStr = propBean.getPropName("travelexpense_dept"); + String[] departmentList = departmentStr.split(","); + int mapSize = 0; +// String sqlDepartmentSum = ""; + for(Map reqMap : reqList){ + String city = reqMap.get("cityId"); + String travelCode = reqMap.get("travelCode"); + String startTime = reqMap.get("startTime"); + String mapSql = ""; + String endTime = reqMap.get("endTime"); + mapSql = "t1.id = "+reqMap.get("userId")+" "; + String sqlDepartment = "select t1.id as userId,"+"'"+city+"'"+ " as cityReq,"+"t1.lastname,t2.id as departmentId,t2.departmentcode,t2.departmentname,t3.Field9 \n" + + " from hrmresource t1 left join hrmdepartment t2 on t1.DEPARTMENTID = t2.ID left join cus_fielddata t3 on t1.id = t3.id \n" + + " where t3.SCOPEID = '1' and " + mapSql + " "; + JAVATools.SetCmdwritelog("查询人员职级" + "语句:" + sqlDepartment); + rs.execute(sqlDepartment); + //获取人员的业务部门id,总部党委,董事会,经营管理层三个部门时报时销,不在后端判断 + if (rs.next()){ + HashMap resultMap = new HashMap<>(); + //部门id + String departmentId = Util.null2String(rs.getString("departmentId")); + //部门是否是业务部门 0是 1否 + String bmsx = "0"; + if (Arrays.asList(departmentList).contains(departmentId)){ + bmsx = "1"; + } + //职级 + String level = Util.null2String(rs.getString("Field9")); + //判断是否是否为业务部门 + String userId = Util.null2String(rs.getString("userId")); + //获取城市等级 +// HashMap cityMap = getCityUtil(city); + String[] areas = city.split(","); + String citySql = "select t.uuid,t.code,t.EXPENSE_LIMIT_TYPE from travel_area t,travel_area t2 where t.parent_code = t2.code and t2.code = '" + +areas[0]+ "' and t.code = '"+areas[1]+"'"; + RecordSetDataSource rsdM = new RecordSetDataSource("Travel"); + rsdM.execute(citySql); + if (rsdM.next()) { + String cityId = Util.null2String(rsdM.getString("uuid")); + String cityCode = Util.null2String(rsdM.getString("code")); + String cityLevel = Util.null2String(rsdM.getString("EXPENSE_LIMIT_TYPE")); + resultMap = getStandard(userId, cityId, level, cityLevel, bmsx, city,travelCode,startTime,endTime); + resultList.add(resultMap); + } + } + } + if (null!=resultList){ + resultList = getRealStandard(resultList); + resultList = getTimeStandard(resultList); + } + }catch (Exception e) { + e.printStackTrace(); + } + return resultList; + } + + private List> getTimeStandard(List> resultList) { + List> result = new ArrayList<>(); + //计算出每个入参所对应的差标 + for(Map map: resultList){ + if (!"".equals(Util.null2String(map.get("standard")))&&!"".equals(Util.null2String(map.get("time")))){ + double time = Double.valueOf(map.get("time")); + double standard = Double.valueOf(map.get("standard")); + double value = time * standard; + map.put("standard",String.valueOf(value)); + } + } + //计算出travelCode,userId对应的拆标 + Map> paramMap = new HashMap<>(); + for(Map map: resultList){ + String codeAndId = map.get("travelCode")+"====="+map.get("userId"); + if (null==paramMap.get(codeAndId)){ + paramMap.put(codeAndId,new HashMap()); + Map param = new HashMap<>(); + param.put("travelCode",map.get("travelCode")); + param.put("userId",map.get("userId")); + param.put("standard",map.get("standard")); + param.put("bmsx",map.get("bmsx")); + param.put("fj",map.get("fj")); + param.put("lc",map.get("lc")); + param.put("jttl",map.get("jttl")); + param.put("level",map.get("level")); + param.put("cityLevel",map.get("cityLevel")); + param.put("cityId",map.get("cityId")); + param.put("standardLevel",map.get("standardLevel")); + param.put("cityName",map.get("cityName")); + paramMap.put(codeAndId,param); + }else { + double standardSum = Double.valueOf(paramMap.get(codeAndId).get("standard")); + double standard = Double.valueOf(map.get("standard")); + paramMap.get(codeAndId).put("standard",String.valueOf(standardSum+standard)); + } + } + for (String key : paramMap.keySet()){ + result.add(paramMap.get(key)); + } + return result; + } + + + + //获取城市信息和城市等级 + public HashMap getCityUtil(String cityReq){ + HashMap cityMap = new HashMap<>(); + String[] cityArray = cityReq.split("-"); + if (cityArray.length<2){ + cityArray = cityReq.split(" "); + } + String area = cityReq.substring(0,2); + String city = cityArray[1].replace("市",""); + cityMap.put("area",area); + cityMap.put("city",city); + return cityMap; + } + + //处理结果 + private List> getRealStandard(List> resultList) { + + String sql = "select BXRZJ, CBDJ, BMSX, JLCSCB, YLCSCB, BLCSCB, FJ, LC, JTTL from uf_zbcbbz where CBDJ in ('BE4','BE3','BE2','BE1','FE3','FE2','FE1')"; + RecordSet rs = new RecordSet(); + //按照travelCode进行分类,判断是否是同行的人 + Map>> mapCount = new HashMap<>(); + for(Map map:resultList){ + if (null!=mapCount.get(map.get("travelCode"))&&mapCount.get(map.get("travelCode")).size()>0){ + mapCount.get(map.get("travelCode")).add(map); + }else { + mapCount.put(map.get("travelCode"),new ArrayList<>()); + mapCount.get(map.get("travelCode")).add(map); + } + } + + //获取可能因MD随行修改的四种情况和未包含的特殊情况 + Map> mapAll = new HashMap(); + try { + JAVATools.SetCmdwritelog("查询剩余部分差标" + "语句:" + sql); + rs.execute(sql); + while (rs.next()){ + HashMap resultMap = new HashMap<>(); + resultMap.put("level",Util.null2String(rs.getString("bxrzj"))); + resultMap.put("bmsx",Util.null2String(rs.getString("bmsx"))); + resultMap.put("standardLevel",Util.null2String(rs.getString("CBDJ"))); + resultMap.put("standardj",Util.null2String(rs.getString("JLCSCB"))); + resultMap.put("standardy",Util.null2String(rs.getString("YLCSCB"))); + resultMap.put("standardb",Util.null2String(rs.getString("BLCSCB"))); + resultMap.put("fj",Util.null2String(rs.getString("FJ"))); + resultMap.put("lc",Util.null2String(rs.getString("LC"))); + resultMap.put("jttl",Util.null2String(rs.getString("JTTL"))); + mapAll.put(resultMap.get("standardLevel"),resultMap); + } + if (null!=mapAll&&mapAll.size()>0){ + //更据出差单号进行分组遍历,判断是否需要升级 ,对每组进行分析 + for(String code:mapCount.keySet()){ + //判断同行需要升级情况获取最高等级 + String highestLevel = getHighestLevel(mapCount.get(code)); + + //存在随行领导,最高FE1 + if ("FE1".equals(highestLevel)) { + for (Map map : mapCount.get(code)) { + String cityLevel = map.get("cityLevel"); + if ("FE2".equals(map.get("standardLevel"))||"BE1".equals(map.get("standardLevel"))||"BE2".equals(map.get("standardLevel"))||"FE3".equals(map.get("standardLevel"))||"BE3".equals(map.get("standardLevel"))){ + //FE2、BE1、BE2、BE3、FE3全部升级为FE1 + map.put("standardLevel","FE1"); + //A级城市 + if (null!=cityLevel&&"A".equals(cityLevel)){ + map.put("standard",mapAll.get("FE1").get("standardj")); + }else if(null!=cityLevel&&"B".equals(cityLevel)){ + map.put("standard",mapAll.get("FE1").get("standardy")); + }else { + map.put("standard",mapAll.get("FE1").get("standardb")); + } + map.put("fj",mapAll.get("FE1").get("fj")); + map.put("lc",mapAll.get("FE1").get("lc")); + map.put("jttl",mapAll.get("FE1").get("jttl")); + }else if("BE4".equals(map.get("standardLevel"))){ + //BE4升级为FE2 + map.put("standardLevel","FE2"); + //A级城市 + if (null!=cityLevel&&"A".equals(cityLevel)){ + map.put("standard",mapAll.get("FE2").get("standardj")); + }else if(null!=cityLevel&&"B".equals(cityLevel)){ + map.put("standard",mapAll.get("FE2").get("standardy")); + }else { + map.put("standard",mapAll.get("FE2").get("standardb")); + } + map.put("fj",mapAll.get("FE2").get("fj")); + map.put("lc",mapAll.get("FE2").get("lc")); + map.put("jttl",mapAll.get("FE2").get("jttl")); + } + } + } + //存在随行领导,最高FE2 + if ("FE2".equals(highestLevel)) { + for (Map map : mapCount.get(code)) { + String cityLevel = map.get("cityLevel"); + if ("BE2".equals(map.get("standardLevel"))||"BE3".equals(map.get("standardLevel"))||"BE4".equals(map.get("standardLevel"))||"FE3".equals(map.get("standardLevel"))){ + //BE2、BE3、BE4、FE3升级为FE2 + map.put("standardLevel","FE2"); + //A级城市 + if (null!=cityLevel&&"A".equals(cityLevel)){ + map.put("standard",mapAll.get("FE2").get("standardj")); + }else if(null!=cityLevel&&"B".equals(cityLevel)){ + map.put("standard",mapAll.get("FE2").get("standardy")); + }else { + map.put("standard",mapAll.get("FE2").get("standardb")); + } + map.put("fj",mapAll.get("FE2").get("fj")); + map.put("lc",mapAll.get("FE2").get("lc")); + map.put("jttl",mapAll.get("FE2").get("jttl")); + }else if("BE1".equals(map.get("standardLevel"))){ + //BE1升级为FE1 + map.put("standardLevel","FE1"); + //A级城市 + if (null!=cityLevel&&"A".equals(cityLevel)){ + map.put("standard",mapAll.get("FE1").get("standardj")); + }else if(null!=cityLevel&&"B".equals(cityLevel)){ + map.put("standard",mapAll.get("FE1").get("standardy")); + }else { + map.put("standard",mapAll.get("FE1").get("standardb")); + } + map.put("fj",mapAll.get("FE1").get("fj")); + map.put("lc",mapAll.get("FE1").get("lc")); + map.put("jttl",mapAll.get("FE1").get("jttl")); + } + } + } + //存在随行领导,最高BE1 + if ("BE1".equals(highestLevel)) { + for (Map map : mapCount.get(code)) { + String cityLevel = map.get("cityLevel"); + if ("BE2".equals(map.get("standardLevel"))||"BE3".equals(map.get("standardLevel"))||"FE3".equals(map.get("standardLevel"))){ + //BE2、BE3、FE3升级为BE1 + map.put("standardLevel","BE1"); + //A级城市 + if (null!=cityLevel&&"A".equals(cityLevel)){ + map.put("standard",mapAll.get("BE1").get("standardj")); + }else if(null!=cityLevel&&"B".equals(cityLevel)){ + map.put("standard",mapAll.get("BE1").get("standardy")); + }else { + map.put("standard",mapAll.get("BE1").get("standardb")); + } + map.put("fj",mapAll.get("BE1").get("fj")); + map.put("lc",mapAll.get("BE1").get("lc")); + map.put("jttl",mapAll.get("BE1").get("jttl")); + }else if("BE4".equals(map.get("standardLevel"))){ + //BE4升级为BE2 + map.put("standardLevel","BE2"); + //A级城市 + if (null!=cityLevel&&"A".equals(cityLevel)){ + map.put("standard",mapAll.get("BE2").get("standardj")); + }else if(null!=cityLevel&&"B".equals(cityLevel)){ + map.put("standard",mapAll.get("BE2").get("standardy")); + }else { + map.put("standard",mapAll.get("BE2").get("standardb")); + } + map.put("fj",mapAll.get("BE2").get("fj")); + map.put("lc",mapAll.get("BE2").get("lc")); + map.put("jttl",mapAll.get("BE2").get("jttl")); + } + } + } + //存在随行领导,最高BE2 + if ("BE2".equals(highestLevel)) { + for (Map map : mapCount.get(code)) { + String cityLevel = map.get("cityLevel"); + if ("FE3".equals(map.get("standardLevel"))||"BE3".equals(map.get("standardLevel"))||"BE4".equals(map.get("standardLevel"))){ + //FE3、BE3、BE4升级为BE2 + map.put("standardLevel","BE2"); + //A级城市 + if (null!=cityLevel&&"A".equals(cityLevel)){ + map.put("standard",mapAll.get("BE2").get("standardj")); + }else if(null!=cityLevel&&"B".equals(cityLevel)){ + map.put("standard",mapAll.get("BE2").get("standardy")); + }else { + map.put("standard",mapAll.get("BE2").get("standardb")); + } + map.put("fj",mapAll.get("BE2").get("fj")); + map.put("lc",mapAll.get("BE2").get("lc")); + map.put("jttl",mapAll.get("BE2").get("jttl")); + } + } + } + //存在随行领导,最高FE3 + if ("FE3".equals(highestLevel)) { + for (Map map : mapCount.get(code)) { + String cityLevel = map.get("cityLevel"); + if ("BE3".equals(map.get("standardLevel"))||"BE4".equals(map.get("standardLevel"))){ + //BE3、BE4升级为FE3 + map.put("standardLevel","FE3"); + //A级城市 + if (null!=cityLevel&&"A".equals(cityLevel)){ + map.put("standard",mapAll.get("FE3").get("standardj")); + }else if(null!=cityLevel&&"B".equals(cityLevel)){ + map.put("standard",mapAll.get("FE3").get("standardy")); + }else { + map.put("standard",mapAll.get("FE3").get("standardb")); + } + map.put("fj",mapAll.get("FE3").get("fj")); + map.put("lc",mapAll.get("FE3").get("lc")); + map.put("jttl",mapAll.get("FE3").get("jttl")); + } + } + } + //存在随行领导,最高BE3 + if ("BE3".equals(highestLevel)) { + for (Map map : mapCount.get(code)) { + String cityLevel = map.get("cityLevel"); + if ("BE4".equals(map.get("standardLevel"))){ + //BE4升级为BE3 + map.put("standardLevel","BE3"); + //A级城市 + if (null!=cityLevel&&"A".equals(cityLevel)){ + map.put("standard",mapAll.get("BE3").get("standardj")); + }else if(null!=cityLevel&&"B".equals(cityLevel)){ + map.put("standard",mapAll.get("BE3").get("standardy")); + }else { + map.put("standard",mapAll.get("BE3").get("standardb")); + } + map.put("fj",mapAll.get("BE3").get("fj")); + map.put("lc",mapAll.get("BE3").get("lc")); + map.put("jttl",mapAll.get("BE3").get("jttl")); + } + } + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return resultList; + } + + private String getHighestLevel(ArrayList> maps) { + String highestLevel = ""; + for (Map map:maps){ + if ("FE1".equals(Util.null2String(map.get("standardLevel")))&&"".equals(highestLevel)){ + highestLevel = "FE1"; + } + } + for (Map map:maps){ + if ("FE2".equals(Util.null2String(map.get("standardLevel")))&&"".equals(highestLevel)){ + highestLevel = "FE2"; + } + } + for (Map map:maps){ + if ("BE1".equals(Util.null2String(map.get("standardLevel")))&&"".equals(highestLevel)){ + highestLevel = "BE1"; + } + } + for (Map map:maps){ + if ("BE2".equals(Util.null2String(map.get("standardLevel")))&&"".equals(highestLevel)){ + highestLevel = "BE2"; + } + } + for (Map map:maps){ + if ("FE3".equals(Util.null2String(map.get("standardLevel")))&&"".equals(highestLevel)){ + highestLevel = "FE3"; + } + } + for (Map map:maps){ + if ("BE3".equals(Util.null2String(map.get("standardLevel")))&&"".equals(highestLevel)){ + highestLevel = "BE3"; + } + } + return highestLevel; + } + + //初步获取差标 + public HashMap getStandard(String userId,String cityId,String level,String cityLevel,String bmsx,String cityReq,String travelCode,String startTime,String endTime){ + HashMap resultMap = new HashMap<>(); + String sqlDV = "select BXRZJ, CBDJ, BMSX, JLCSCB, YLCSCB, BLCSCB, FJ, LC, JTTL from uf_zbcbbz where CBDJ in ('BE4','FE3')"; + JAVATools.SetCmdwritelog("查询差标BE4,FE3"+ " uf_zbcbbz " + "语句:" + sqlDV); + RecordSet rs = new RecordSet(); + rs.execute(sqlDV); + Map> mapAll = new HashMap(); + while (rs.next()){ + HashMap map = new HashMap<>(); + map.put("level",Util.null2String(rs.getString("bxrzj"))); + map.put("bmsx",Util.null2String(rs.getString("bmsx"))); + map.put("standardLevel",Util.null2String(rs.getString("CBDJ"))); + map.put("standardj",Util.null2String(rs.getString("JLCSCB"))); + map.put("standardy",Util.null2String(rs.getString("YLCSCB"))); + map.put("standardb",Util.null2String(rs.getString("BLCSCB"))); + map.put("fj",Util.null2String(rs.getString("FJ"))); + map.put("lc",Util.null2String(rs.getString("LC"))); + map.put("jttl",Util.null2String(rs.getString("JTTL"))); + mapAll.put(map.get("standardLevel"),map); + } + String sqlCb = "select BXRZJ, CBDJ, BMSX, JLCSCB, YLCSCB, BLCSCB, FJ, LC, JTTL" + + " from uf_zbcbbz where bmsx = " + bmsx + " and ','|| bxrzj||',' like '%,"+level+",%' "; + try { + JAVATools.SetCmdwritelog("查询差标"+ " uf_zbcbbz " + "语句:" + sqlCb); + rs.execute(sqlCb); + resultMap.put("userId",userId); + resultMap.put("cityId",cityId); + resultMap.put("level",level); + resultMap.put("bmsx",bmsx); + resultMap.put("cityLevel",cityLevel); + resultMap.put("cityName",cityReq); + resultMap.put("travelCode",travelCode); + resultMap.put("startTime",startTime); + resultMap.put("endTime",endTime); + DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + LocalDate dateS = LocalDate.parse(startTime, fmt); + LocalDate dateE = LocalDate.parse(endTime, fmt); + long daysDiff = ChronoUnit.DAYS.between(dateS, dateE); + resultMap.put("time", String.valueOf(daysDiff)); + if (rs.next()) { + resultMap.put("standardLevel",Util.null2String(rs.getString("CBDJ"))); + //A级城市 + if (null!=cityLevel&&"A".equals(cityLevel)){ + resultMap.put("standard",Util.null2String(rs.getString("JLCSCB"))); + }else if(null!=cityLevel&&"B".equals(cityLevel)){ + resultMap.put("standard",Util.null2String(rs.getString("YLCSCB"))); + }else { + resultMap.put("standard",Util.null2String(rs.getString("BLCSCB"))); + } + resultMap.put("fj",Util.null2String(rs.getString("FJ"))); + resultMap.put("lc",Util.null2String(rs.getString("LC"))); + resultMap.put("jttl",Util.null2String(rs.getString("JTTL"))); + }else { + //业务D以下 + if ("0".equals(bmsx)){ + resultMap.put("standardLevel","FE3"); + //A级城市 + if (null!=cityLevel&&"A".equals(cityLevel)){ + resultMap.put("standard",mapAll.get("FE3").get("standardj")); + }else if(null!=cityLevel&&"B".equals(cityLevel)){ + resultMap.put("standard",mapAll.get("FE3").get("standardy")); + }else { + resultMap.put("standard",mapAll.get("FE3").get("standardb")); + } + resultMap.put("fj",mapAll.get("FE3").get("fj")); + resultMap.put("lc",mapAll.get("FE3").get("lc")); + resultMap.put("jttl",mapAll.get("FE3").get("jttl")); + + }else { + //非业务VP以下 + resultMap.put("standardLevel","BE4"); + //A级城市 + //A级城市 + if (null!=cityLevel&&"A".equals(cityLevel)){ + resultMap.put("standard",mapAll.get("BE4").get("standardj")); + }else if(null!=cityLevel&&"B".equals(cityLevel)){ + resultMap.put("standard",mapAll.get("BE4").get("standardy")); + }else { + resultMap.put("standard",mapAll.get("BE4").get("standardb")); + } + resultMap.put("fj",mapAll.get("BE4").get("fj")); + resultMap.put("lc",mapAll.get("BE4").get("lc")); + resultMap.put("jttl",mapAll.get("BE4").get("jttl")); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return resultMap; + } + +} diff --git a/src/main/java/com/engine/htsc/trip/service/impl/QueryInvoiceServiceImpl.java b/src/main/java/com/engine/htsc/trip/service/impl/QueryInvoiceServiceImpl.java new file mode 100644 index 0000000..d65f3d9 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/impl/QueryInvoiceServiceImpl.java @@ -0,0 +1,15 @@ +package com.engine.htsc.trip.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.trip.cmd.ConnectInvAndBillCmd; +import com.engine.htsc.trip.cmd.QueryInvoiceCmd; +import com.engine.htsc.trip.service.QueryInvoiceService; +import java.util.Map; + +public class QueryInvoiceServiceImpl extends Service implements QueryInvoiceService { + + @Override + public Map queryInvoice(Map params) { + return commandExecutor.execute(new QueryInvoiceCmd(user, params)); + } +} diff --git a/src/main/java/com/engine/htsc/trip/service/impl/ReimbursementServiceImpl.java b/src/main/java/com/engine/htsc/trip/service/impl/ReimbursementServiceImpl.java new file mode 100644 index 0000000..6e8b1e5 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/impl/ReimbursementServiceImpl.java @@ -0,0 +1,1033 @@ +package com.engine.htsc.trip.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.api.htsc.businessMethod.SubUnionBizUtil; +import com.engine.core.impl.Service; +import com.engine.htsc.common.utils.DoubleUtil; +import com.engine.htsc.payment.util.PayUtil; +import com.engine.htsc.trip.pojo.AllowancePO; +import com.engine.htsc.trip.service.ReimbursementService; +import com.engine.htsc.trip.util.LogUtil; +import com.engine.htsc.trip.util.WeaverUtil; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import weaver.conn.RecordSet; +import weaver.conn.RecordSetDataSource; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.interfaces.htsc.cus.HTUtil; + +import java.math.BigDecimal; +import java.text.DateFormat; +import java.text.ParsePosition; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.stream.Collectors; + +/** + * Created by qlk + */ +public class ReimbursementServiceImpl extends Service implements ReimbursementService { + + private final Logger log = LoggerFactory.getLogger(ReimbursementServiceImpl.class); + + @Override + public List> bringDt12(String formTable, String requestIds) { + RecordSet rs = new RecordSet(); + RecordSet rs2 = new RecordSet(); + RecordSet rs3 = new RecordSet(); + if ("".equals(requestIds)) { + return null; + } + String[] requests = requestIds.split(","); + + String sql_bringOut_Bt_main = "SELECT id,sfhwcc,cclx,cclxzxx FROM " + formTable + " WHERE requestid = ?"; + String sql_bringOut_Bt_detail2 = "SELECT xm FROM " + formTable + "_dt2 WHERE mainid = ?"; + String sql_bringOut_Bt_detail2_name = "SELECT lastname FROM hrmresource WHERE id = ?"; + List> result = new ArrayList<>(); + List singleRequestInfo; + String id; + String name; + for (String request : requests) { + singleRequestInfo = new ArrayList<>(); + rs.executeQuery(sql_bringOut_Bt_main, new Object[]{request}); + if (rs.next()) { + singleRequestInfo.add(Util.null2String(rs.getString("sfhwcc"))); + singleRequestInfo.add(Util.null2String(rs.getString("cclx"))); + singleRequestInfo.add(Util.null2String(rs.getString("cclxzxx"))); + id = Util.null2String(rs.getString("id")); + rs2.executeQuery(sql_bringOut_Bt_detail2, new Object[]{id}); + while (rs2.next()) { + name = Util.null2String(rs2.getString("xm")); + singleRequestInfo.add(name); + rs3.executeQuery(sql_bringOut_Bt_detail2_name, new Object[]{name}); + if (rs3.next()) { + singleRequestInfo.add(rs3.getString("lastname")); + } + } + } + result.add(singleRequestInfo); + } + + return result; + } + + @Override + public List> bringDt13(String formTable, String requestIds) { + RecordSet rs = new RecordSet(); + String[] requests = requestIds.split(","); + String sql_bringOut_Bt_detail3 = "select c.lastname,d.cfsj,'9:00' as s,d.fhsj,'18:00' as s1,d.cfdgn,d.mddgn\n" + + " from formtable_main_27 a\n" + + " left join formtable_main_27_dt2 b\n" + + " on a.id=b.mainid\n" + + " left join hrmresource c\n" + + " on b.xm=c.id\n" + + " left join formtable_main_27_dt3 d\n" + + " on a.id=d.mainid\n" + + " where requestid=?"; + List> results = new ArrayList<>(); + ; + List info; + for (String request : requests) { + rs.executeQuery(sql_bringOut_Bt_detail3, new Object[]{request}); + while (rs.next()) { + info = new ArrayList<>(); + info.add(Util.null2String(rs.getString("lastname"))); + info.add(Util.null2String(rs.getString("cfsj"))); + info.add(Util.null2String(rs.getString("s"))); + info.add(Util.null2String(rs.getString("fhsj"))); + info.add(Util.null2String(rs.getString("s1"))); + info.add(Util.null2String(rs.getString("cfdgn"))); + info.add(Util.null2String(rs.getString("mddgn"))); + results.add(info); + } + } + return results; + } + + @Override + public Map bringClaimant(String formTable, String requestIds) { + String[] requests = requestIds.split(","); + RecordSet rs = new RecordSet(); + String sql_bringOut_Main_Claimant = "select c.lastname,c.id,c.loginid\n" + + " from" + formTable + "a \n" + + " left join " + formTable + "_dt2 b\n" + + " on a.id=b.mainid\n" + + " left join hrmresource c\n" + + " on b.xm=c.id\n" + + " where requestid in (" + StringUtils.join(requests, ",") + ")"; + + List hrmIds = new ArrayList<>(); + List hrmNames = new ArrayList<>(); + List hrmLoginIds = new ArrayList<>(); + rs.execute(sql_bringOut_Main_Claimant); + while (rs.next()) { + hrmIds.add(Util.null2String(rs.getString("id"))); + hrmNames.add(Util.null2String(rs.getString("lastname"))); + hrmLoginIds.add(Util.null2String(rs.getString("loginid"))); + } + + hrmIds = hrmIds.stream().distinct().collect(Collectors.toList()); + hrmNames = hrmNames.stream().distinct().collect(Collectors.toList()); + hrmLoginIds = hrmLoginIds.stream().distinct().collect(Collectors.toList()); + + Map result = new HashMap<>(); + result.put("value", hrmIds); + result.put("specialobj", hrmNames); + result.put("loginIds", hrmLoginIds); + return result; + } + + @Override + public Boolean checkLeader(String ngr) { + RecordSet rs = new RecordSet(); + String loginid = ""; + List leader = new ArrayList<>(); + leader.add("002257"); + leader.add("002501"); + leader.add("002603"); + leader.add("001903"); + leader.add("006446"); + leader.add("002151"); + leader.add("004209"); + leader.add("010301"); + leader.add("010524"); + leader.add("004919"); + leader.add("001526"); + leader.add("002509"); + leader.add("010480"); + leader.add("010517"); + + String sql_is_leader = "SELECT loginid FROM hrmresource WHERE id=" + ngr; + rs.execute(sql_is_leader); + while (rs.next()) { + loginid = Util.null2String(rs.getString("loginid")); + } + if ("".equals(loginid)) { + return false; + } + return leader.contains(loginid); + } + + @Override + public List> getApInfo(String lcs) { + RecordSet rs = new RecordSet(); + List> res = new ArrayList<>(); + String unionReWfid = Util.null2String(new PropBean().getPropName("unionReWfid")); + String unionReWfidstr = Util.null2String(new PropBean().getWorkflowIdsByUnNumber(unionReWfid)); + List unionReWfidWF = Arrays.asList(unionReWfidstr.split(",")); + String unionwfid = Util.null2String(new PropBean().getPropName("unionwfid")); + String unionwstr = Util.null2String(new PropBean().getWorkflowIdsByUnNumber(unionwfid)); + List unionwfidWF = Arrays.asList(unionwstr.split(",")); + //报销表单 + String tableNameRe = WeaverUtil.getTableNameByWfid(Util.getIntValue(unionReWfidWF.get(0))); + //出差表单 + String tableNameCc = WeaverUtil.getTableNameByWfid(Util.getIntValue(unionwfidWF.get(0))); + String[] lcArr = lcs.split(","); + String sql4name = ""; + String sql4times = ""; + Map item; + for (String lc : lcArr) { + item = new HashMap<>(); + sql4name = "select lcbh from " + tableNameCc + " where requestid=" + lc; + rs.execute(sql4name); + if (rs.next()) { + item.put("requestName", Util.null2String(rs.getString("lcbh"))); + } + sql4times = "select count(*) as n from " + tableNameRe + + " where glcclc like '%" + lc + "%'"; + rs.execute(sql4times); + if (rs.next()) { + item.put("requestTimes", Util.null2String(rs.getString("n"))); + } + res.add(item); + } + return res; + } + + @Override + public Map getBrowserBtn(String ccr, String lc) { + RecordSet rs = new RecordSet(); + Map addObj = new HashMap<>(); + if ("".equals(lc)) { + return addObj; + } + List lcs = Arrays.asList(lc.split(",")); //多条流程 + String tableName = ""; //根据流程id获取流程表名 + String query_tablename = "select t1.tablename from workflow_bill t1,workflow_base t2,workflow_requestbase t3\n" + + " where t1.id =t2.formid and t2.id = t3.workflowid and t3.requestid=" + lcs.get(0); + rs.execute(query_tablename); + if (rs.next()) { + tableName = Util.null2String(rs.getString("tablename")); + } + if ("".equals(tableName)) { + return addObj; + } + String sql = "select DISTINCT t1.id,departmentname from hrmdepartment t1\n" + + " left join " + tableName + "_dt2 t2\n" + + " on t2.fycdbm=t1.id\n" + + " left join " + tableName + " t3\n" + + " on t2.mainid=t3.id\n" + + " where t3.requestid in (" + lc + ") and t2.xm=" + ccr; + + List values = new ArrayList<>(); + List depNames = new ArrayList<>(); + rs.execute(sql); + while (rs.next()) { + values.add(rs.getString("id")); + depNames.add(rs.getString("departmentname")); + } + + + addObj.put("value", StringUtils.join(values, ",")); + + List> specialobj = new ArrayList<>(); + Map item; + for (int i = 0; i < values.size(); i++) { + item = new HashMap<>(); + item.put("id", values.get(i)); + item.put("name", depNames.get(i)); + specialobj.add(item); + } + addObj.put("specialobj", specialobj); + + return addObj; + } + + @Override + public Map getBankInfo(String ngr, String bxr) { + RecordSet rs = new RecordSet(); + Map res = new HashMap<>(); + //拟稿人工号 + String ngrLoginId = WeaverUtil.convertIdToLoginId(ngr, rs); + //报销人工号 + String bxrLoginId = WeaverUtil.convertIdToLoginId(bxr, rs); + RecordSetDataSource rsd = new RecordSetDataSource("BankInfo"); //银行信息数据源,华泰方提供 + String sql = "select DISTINCT t2.bankname,t2.cnaps,t3.cardno,t1.provinces,t1.city from emp_common_bankinfo t1\n" + + " left join t_depositbank t2\n" + + " on t1.id=t2.id\n" + + " left join t_bankAccount t3\n" + + " on t1.id=t3.id\n" + + " where t1.badge='" + bxrLoginId + "'" + + " and t1.defender='" + ngrLoginId + "'"; + rsd.execute(sql); + while (rsd.next()) { + res.put("khh", Util.null2String(rsd.getString("bankname"))); //开户行 + res.put("cnaps", Util.null2String(rsd.getString("cnaps"))); //开户行编码 + res.put("yhkh", Util.null2String(rsd.getString("cardno"))); //银行卡号 + res.put("province", Util.null2String(rsd.getString("provinces"))); //省或直辖市 + res.put("city", Util.null2String(rsd.getString("city"))); //市 + } + return res; + } + + @Override + public List getTravelStandardForSingle(String traveler, String destination) { + RecordSet rs = new RecordSet(); + String[] desInfo = destination.split(","); //省市区 + String ids = Arrays.asList(desInfo).stream().map(s -> "\'" + s + "\'").collect(Collectors.joining(",")); + List standardMsg = new ArrayList<>(); + //回传信息 + String msg = null; + //城市信息 + //甲类城市 + String[] cityA = {"34", "112", "246", "248", "128", "338", "284", "99"}; + List cityAList = Arrays.asList(cityA); + //乙类城市 + String[] cityB = {"75", "118", "283", "287", "357", "289", "434273726", "180", "935078239", "179", "157", "197", "30002", "216", "231", "321", "81095659", "126111795", "387", "35", "158", "381", "30003", "311", "49", "346", "74", "89", "114", "129"}; + List cityBList = Arrays.asList(cityB); + //丙类城市 不包含a,b的 + //人员信息 + //公司领导(董事会487,执行委员会489,党委713)+2 + //去除执行委员会 + List deptLeader = new ArrayList<>(); + String sql_dept = "SELECT id FROM hrmresource WHERE departmentid IN ('487','489','713') AND id IS NOT NULL"; + rs.execute(sql_dept); + while (rs.next()) { + deptLeader.add(rs.getString("id")); + } + deptLeader.add("6633"); //合规总监,李洪涛 + deptLeader.add("5891"); //宁敖 + //判断标识,匹配金额 + //获取后台部门 + PropBean pp = new PropBean(); + String backdept = pp.getPropName("backdept"); + log.info("====获取配置表中数据:{}", backdept); + int code = 2; + if (deptLeader.contains(traveler)) { + //traveler是实报实销的 + standardMsg.add(null + "|" + null); + return standardMsg; + } else { + //需要判断逻辑,给traveler赋一个code + //中后台部门 id >> '495','671','717','493','494' + String sql_traveler_isNot_middle_backstage = "SELECT COUNT(*) AS cnt FROM hrmresource WHERE departmentid IN (" + backdept + ") AND id = ?"; + rs.executeQuery(sql_traveler_isNot_middle_backstage, new Object[]{traveler}); + rs.next(); + if (rs.getInt("cnt") == 1) { //属于中后台 + RecordSet recordSet = new RecordSet(); + String sql_SD_D = "SELECT t1.ID,t1.field9 as field,t2.LOGINID FROM cus_fielddata t1\n" + + " left join HRMRESOURCE t2\n" + + " on t1.ID=t2.ID\n" + + " WHERE t1.scopeid=1 and t1.ID = ?"; + recordSet.executeQuery(sql_SD_D, new Object[]{traveler}); + log.info("==当前人员为中后台"); + if (recordSet.next()) { + String field = recordSet.getString("field"); + String loginid = recordSet.getString("LOGINID"); + log.info("==当前人员:{},当前职级{}", traveler, field); + if ("SD".equals(field) || "D".equals(field)) { + code = 1; //traveler属于SD,D + log.info("==匹配人员code:{}", code); + } else { + code = 2; // SS及以下 + //判断是否为实习生 + if (loginid.startsWith("sx")) { + code = 3; + } + log.info("==匹配人员code:{}", code); + } + } + } else { + //属于前台 + RecordSet recordSet = new RecordSet(); + String sql_MD_ED = "SELECT t1.ID,t1.field9 as field,t2.LOGINID FROM cus_fielddata t1\n" + + " left join HRMRESOURCE t2\n" + + " on t1.ID=t2.ID\n" + + " WHERE t1.scopeid=1 and t1.ID = ?"; + recordSet.executeQuery(sql_MD_ED, new Object[]{traveler}); + log.info("==当前人员为前台"); + if (recordSet.next()) { + String field = recordSet.getString("field"); + String loginid = recordSet.getString("LOGINID"); + log.info("==当前人员:{},当前职级{}", traveler, field); + if ("MD".equals(field) || "ED".equals(field)) { + code = 1; //属于SD,D + } else { + code = 2; //D及以下 + //判断是否为实习生 + if (loginid.startsWith("sx")) { + code = 3; + } + log.info("==匹配人员code:{}", code); + } + } + } + } + + //code和地区信息组合 + String city = desInfo[1]; //城市,匹配地区信息 + //根据业务,新增L3P差标 + //获取匹配L3P差标人员配置 + Set l3pTravelStandardSet = new HashSet<>(Arrays.asList(pp.getPropName("travel_standard_l3p").split(","))); + //获取出差人员的华泰工号 + String htWorkCode = ""; + String getHTWorkCodeSql = "select workcode from hrmresource where id = ?"; + rs.executeQuery(getHTWorkCodeSql, traveler); + while (rs.next()) { + htWorkCode = rs.getString("workcode"); + } + if (l3pTravelStandardSet.contains(htWorkCode)) { + if (cityAList.contains(city)) { + msg = "1680"; + } else if (cityBList.contains(city)) { + msg = "1200"; + } else { + msg = "960"; + } + //提高机票差标 + msg = String.join("|", msg, "软卧、一等座", "商务舱", "二等舱"); + } else { + if (code == 1) { + if (cityAList.contains(city)) { + msg = "1680"; + } else if (cityBList.contains(city)) { + msg = "1200"; + } else { + msg = "960"; + } + //交通 + if (!"6483".equals(traveler) || !"6579".equals(traveler) || !"2906".equals(traveler)) { //协管领导 L2:职级调整联合出差标准调整(董光启、王超) + msg = String.join("|", msg, "软卧、一等座", "经济舱", "二等舱"); + } else { + msg += "|" + null; + } + } else if (code == 2) { + if (cityAList.contains(city)) { + msg = "1200"; + } else if (cityBList.contains(city)) { + msg = "840"; + } else { + msg = "672"; + } + //交通 + if (!"7981".equals(traveler)) { //协管领导 + msg = String.join("|", msg, "软卧、一等座", "经济舱", "二等舱"); + } else { + msg += "|" + null; + } + } else if (code == 3) { + //实习生 + if (cityAList.contains(city)) { + msg = "1000"; + } else if (cityBList.contains(city)) { + msg = "700"; + } else { + msg = "560"; + } + //交通 + if (!"7981".equals(traveler)) { //协管领导 + msg = String.join("|", msg, "硬座、二等座", "无", "三等舱"); + } else { + msg += "|" + null; + } + } + } + + //遍历查询城市信息 + RecordSetDataSource rsd = new RecordSetDataSource("Travel"); //城市 + for (String des : desInfo) { + des += "','" + des; + } + String sql = "select name from travel_area where code in (" + ids + ") order by instr('" + destination + "',code)"; + List names = new ArrayList<>(); + rsd.execute(sql); + while (rsd.next()) { + names.add(rsd.getString("name")); + } + msg = String.join("|", msg, String.join(",", names)); + standardMsg.add(msg); + return standardMsg; + } + + @Override + public Map getGsxmBrowserBtn(String ccr, String lc) { + RecordSet rs = new RecordSet(); + Map addObj = new HashMap<>(); + if ("".equals(lc)) { + return addObj; + } + String tableName = ""; //根据流程id获取流程表名 + String query_tablename = "select t1.tablename from workflow_bill t1,workflow_base t2,workflow_requestbase t3\n" + + " where t1.id =t2.formid and t2.id = t3.workflowid and t3.requestid=" + lc; + rs.execute(query_tablename); + if (rs.next()) { + tableName = Util.null2String(rs.getString("tablename")); + } + if ("".equals(tableName)) { + return addObj; + } + String sql = "select t2.workcode,t1.xmjc from " + tableName + " t1\n" + + " left join hrmresource t2\n" + + " on t1.ngr=t2.id\n" + + " where t1.requestid=" + lc; + rs.execute(sql); + String workcode = ""; + String xmjc = ""; + if (rs.next()) { + workcode = Util.null2String(rs.getString("workcode")); + xmjc = Util.null2String(rs.getString("xmjc")); + } + if ("".equals(xmjc)) { + return addObj; + } + //xmjc=项目id + Map paras = new HashMap<>(); + paras.put("projectId", xmjc); + String res = new HTUtil().getProjectById(paras); + new BaseBean().writeLog("===getGsxmBrowserBtn===" + res); + if ("".equals(res)) { + return addObj; + } + JSONObject jsonObject = JSONObject.parseObject(res); + String shortName = jsonObject.getString("shortName"); + addObj.put("id", xmjc); + addObj.put("shortName", shortName); + return addObj; + } + + @Override + public List getAccountingByLocation(String bxd) { + RecordSet rs = new RecordSet(); + List res = new ArrayList<>(); + String sql = "select fyhj from uf_fykjjd where bgdd in (" + bxd + ") order by instr('" + bxd + "',bgdd)"; + rs.execute(sql); + while (rs.next()) { + res.add(Util.null2String(rs.getString("fyhj"))); + } + return res; + } + + @Override + public Map getBankInfoFormOADB(String hrmId) { + RecordSet rs = new RecordSet(); + String workcode = WeaverUtil.convertIdToLoginId(hrmId, rs); + Map returnMap = new HashMap<>(); + String sql = String.format("select * from (\n" + + "select to_date((MODEDATACREATEDATE ||' '|| MODEDATACREATETIME),'yyyy-mm-dd hh24:mi:ss') as datetime," + + "khr,yxmc,yxkh,ss,khx from uf_lhclyxxx where khr='%s' order by datetime desc \n" + + ") where rownum=1", workcode); + rs.execute(sql); + if (rs.next()) { + returnMap.put("yxmc", Util.null2String(rs.getString("yxmc"))); + returnMap.put("yxkh", Util.null2String(rs.getString("yxkh"))); + returnMap.put("ss", Util.null2String(rs.getString("ss"))); + returnMap.put("khx", Util.null2String(rs.getString("khx"))); + } + return returnMap; + } + + @Override + public Map> getRelatedInfo(String lcs) { + RecordSet rs = new RecordSet(); + List strings = Arrays.asList(lcs.split(",")); + String unionReWfid = Util.null2String(new PropBean().getPropName("unionReWfid")); + String unionReWfidstr = Util.null2String(new PropBean().getWorkflowIdsByUnNumber(unionReWfid)); + List unionReWfidWF = Arrays.asList(unionReWfidstr.split(",")); + String unionwfid = Util.null2String(new PropBean().getPropName("unionwfid")); + String unionwstr = Util.null2String(new PropBean().getWorkflowIdsByUnNumber(unionwfid)); + List unionwfidWF = Arrays.asList(unionwstr.split(",")); + //报销表 + String bxTable = WeaverUtil.getTableNameByWfid(Util.getIntValue(unionReWfidWF.get(0))); + //出差表 + String ccTable = WeaverUtil.getTableNameByWfid(Util.getIntValue(unionwfidWF.get(0))); + String lcSQL = "select lcbh from " + ccTable + " where requestid in (" + lcs + ")"; + rs.execute(lcSQL); + List lcList = new ArrayList<>(); + while (rs.next()) { + lcList.add(Util.null2String(rs.getString("lcbh"))); + } + String relateSQL = ""; + Map> data = new HashMap<>(); + List subData; + for (int i = 0; i < lcList.size(); i++) { + subData = new ArrayList<>(); + //统计所有不在拟稿节点的流程 + relateSQL = "select t1.lcbh from " + bxTable + " t1\n" + + " left join workflow_requestbase t2\n" + + " on t1.REQUESTID=t2.REQUESTID\n" + + " where t1.glcclc like '%" + strings.get(i) + "%' and t2.currentnodetype != '0'"; + rs.execute(relateSQL); + while (rs.next()) { + subData.add(Util.null2String(rs.getString("lcbh"))); + } + //单个流程的信息 + data.put(lcList.get(i), subData); + } + return data; + } + + @Override + public String doBudgetCommit(String requestid, String billStatus) { + RecordSet rs = new RecordSet(); + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + LogUtil logUtil = new LogUtil(); + logUtil.writeLog("===出纳按钮,调用预算接口==="); + + String tablename = WeaverUtil.getTableNameByRequestId(requestid, rs); + + logUtil.writeLog("[入参: requestid: " + requestid + ", " + + "tablename: " + tablename + ", billStatus:" + billStatus); + + JSONObject params = new JSONObject(); + HTUtil htUtil = new HTUtil(); + + try { + // 联合子公司通用报销,判断requestId是否属于该流程,true走通用报销逻辑;false走原逻辑 + if (SubUnionBizUtil.equalsTableName(requestid, SubUnionBizUtil.LHTYBX)) { + String flag = SubUnionBizUtil.doBudgetCommit4Union(requestid, billStatus); + rs.writeLog(String.format("联合子公司通用报销流程预算返回值: %s, requestid:%s", flag, requestid)); + if ("F1001".equalsIgnoreCase(flag)) { + rs.executeUpdate("update uf_zfmx set tbys=0 where reqid=" + requestid); + //如果核算同步,更新为已付款 + rs.executeUpdate("update uf_zfmx set fkzt=0 where reqid=" + requestid + " and tbhs=0"); + } + return flag; + } + // 联合通用付款流程,判断requestId是否属于该流程,true走通用付款逻辑;false走原逻辑 + if (SubUnionBizUtil.equalsTableName(requestid, SubUnionBizUtil.LHTYFK)) { + String flag = SubUnionBizUtil.doBudgetCommit4UnionFk(requestid, billStatus); + rs.writeLog(String.format("联合通用付款流程预算返回值: %s, requestid:%s", flag, requestid)); + if ("F1001".equalsIgnoreCase(flag)) { + rs.executeUpdate("update uf_zfmx set tbys=0 where reqid=" + requestid); + //如果核算同步,更新为已付款 + rs.executeUpdate("update uf_zfmx set fkzt=0 where reqid=" + requestid + " and tbhs=0"); + } + return flag; + } + + //原逻辑 + ResourceComInfo rc = new ResourceComInfo(); + DepartmentComInfo dc = new DepartmentComInfo(); + // 主表 + // 明细表 + String dt8TableName = tablename + "_dt8"; + String dt9TableName = tablename + "_dt9"; + logUtil.writeLog("=====预算接口调用execute,requestId: " + requestid + "===="); + String main_sql = "select t1.lcbh,t1.ngr,t1.id,t2.requestname from " + tablename + " t1\n" + + " left join workflow_requestbase t2\n" + + " on t1.requestid=t2.requestid\n" + + " where t1.requestid=" + requestid; + logUtil.writeLog("执行main_sql=== " + main_sql); + rs.execute(main_sql); + String lcbh = ""; + String requestname = ""; + String ngr = ""; + String mainId = ""; + if (rs.next()) { + lcbh = Util.null2String(rs.getString("lcbh")); + requestname = Util.null2String(rs.getString("requestname")); + ngr = Util.null2String(rs.getString("ngr")); + mainId = Util.null2String(rs.getString("id")); + } + params.put("billnum", requestid); + params.put("billname", lcbh); + params.put("billstatus", billStatus); + params.put("billtitle", requestname); + params.put("personName", rc.getLastname(ngr)); + params.put("bizdate", df.format(LocalDateTime.now())); + logUtil.writeLog("参数1" + params); + //list + JSONArray levelObjList = new JSONArray(); + JSONObject levelObj; + String dt8_sql = "select fycdr,yskm as km,ccsqlc from " + dt8TableName + " where mainid=" + mainId; + logUtil.writeLog("执行dt8_sql===" + dt8_sql); + rs.execute(dt8_sql); + int i = 1; + String km = ""; + String ccsqlc = ""; + while (rs.next()) { + levelObj = new JSONObject(); + String fycdr = Util.null2String(rs.getString("fycdr")); + levelObj.put("employeeNum", fycdr); + levelObj.put("deptNum", Util.null2String(dc.getDepartmentCode(rc.getDepartmentID(fycdr)))); + levelObj.put("bgitem", "86010503"); + levelObj.put("bgElement", "0101"); + levelObj.put("billEntryID", UUID.randomUUID().toString() + "#" + i); + km = Util.null2String(rs.getString("km")); + ccsqlc = Util.null2String(rs.getString("ccsqlc")); + levelObj.put("itemEntryNum", km); + //科目对应金额 + levelObj.putAll(WeaverUtil.getKjKmCharges(km, dt9TableName, ccsqlc, mainId)); + levelObjList.add(levelObj); + i++; + } + params.put("list", levelObjList); + logUtil.writeLog("[params]: [" + params + "]"); + Map dataMap = new HashMap<>(); + dataMap.put("data", params); + //预算接口调用 + String resp = htUtil.budgetCommit(dataMap); + logUtil.writeLog("[预算接口response]: 【" + resp + "】"); + if ("F1001".equals(resp)) { + //更新预算中间表 + Map reqMap = new HashMap<>(); + reqMap.put("lcbm", lcbh); + reqMap.put("billStatus", billStatus); + Boolean isUpdate = doBudgetMiddleTable(reqMap); + if (isUpdate) { + //更新uf_zfmx 同步预算,已同步 + String updateSql = "update uf_zfmx set tbys=0 where reqid=" + requestid; + logUtil.writeLog("====更新uf_zfmx, updateSql===" + updateSql); + rs.executeUpdate(updateSql); + //如果核算同步,更新为已付款 + rs.executeUpdate("update uf_zfmx set fkzt=0 where reqid=" + requestid + " and tbhs=0"); + } + } + return resp; + } catch (Exception e) { + logUtil.writeLog("[预算接口response异常]: " + e); + return ""; + } + } + + @Override + public Boolean doBudgetMiddleTable(Map reqMap) { + if (reqMap.containsKey("lcbm")) { + LogUtil logUtil = new LogUtil(); + String fname = Util.null2String(reqMap.get("lcbm")); //流程编号 + String billStatus = Util.null2String(reqMap.get("billStatus")); //单据状态 + if ("".equals(fname)) { + return false; + } + logUtil.writeLog("更新预算记录中间表, [" + fname + "]"); + RecordSetDataSource rsd = new RecordSetDataSource("BudgetRecords"); //中间表外部数据源 + String budgetTableName = new PropBean().getPropName("BudgetTableName"); + rsd.execute("select fname from " + budgetTableName + " where fname='" + fname + "'"); + if (rsd.next()) { + //更新历史数据 +// return WeaverUtil.updateBudgetMiddleTable(fname, billStatus, rsd); + String deleteAll = String.format("delete from %s where FNAME='%s'", budgetTableName, fname); + rsd.executeUpdateWithDatasource(deleteAll, "BudgetRecords"); + return WeaverUtil.insertBudgetMiddleTable(fname, billStatus, rsd); + } else { + //插入新数据 + return WeaverUtil.insertBudgetMiddleTable(fname, billStatus, rsd); + } + } else { + return false; + } + } + + + @Override + public List> monthlyAllowance(Map request2Map) { + RecordSet rs = new RecordSet(); + String mainTable = WeaverUtil.getTableNameByPropName("unionReWfid"); + String date = Util.null2String(request2Map.get("date")); + //1\判断哪些流程是代付的 + String sql1 = " select distinct t1.requestid from " + mainTable + " t1" + + " left join workflow_requestbase t2 on t1.requestid=t2.requestid" + + " left join " + mainTable + "_dt12 t3 on t1.id=t3.mainid" + + " where t3.xj<>t3.bt" + + " and t1.ngr !=1 and t2.currentnodetype=3 and substr(t2.LASTOPERATEDATE,1,7)='" + date + "'"; + //2\计算这些流程的补贴金额 + String sql2 = "select distinct tt1.requestid," + + " tt1.ngr," + + " tt1.lcbh," + + " tt2.requestname," + + " tt1.glcclc," + + " tt2.LASTOPERATEDATE," + + " tt4.bxr, (select workcode from hrmresource hr where hr.id= tt4.bxr ) as workcode, " + + " tt4.yxzh," + + " tt4.khx as khxmc," + + " tt4.yxzfje," + + " (select mt.departmentcode from HRMDEPARTMENT mt where mt.id=tt4.bm) as departmentcode, " + + " (select mt.departmentname from HRMDEPARTMENT mt where mt.id=tt4.bm) as departmentname, " + + " (select mt.departmentcode from HRMDEPARTMENT mt where mt.id=tt3.ccrsjfycdbm) as burdenDeptCode," + + " (select mt.departmentname from HRMDEPARTMENT mt where mt.id=tt3.ccrsjfycdbm) as burdenDeptName" + + " from " + mainTable + " tt1" + + " left join workflow_requestbase tt2 on tt1.requestid=tt2.requestid" + + " left join " + mainTable + "_dt12 tt3 on tt1.id=tt3.mainid" + + " left join " + mainTable + "_dt10 tt4 on tt1.id=tt4.mainid" + + " where tt1.ngr !=1 and tt2.currentnodetype=3 " + + " and tt3.ccr = tt4.bxr" + + " and substr(tt2.LASTOPERATEDATE,1,7)='" + date + "'" + + " and tt1.requestid not in ( " + sql1+" )"; + rs.executeQuery(sql2); + List> relateWfAllowancesarray = new ArrayList<>(); + while (rs.next()){ + String glcclcs = Util.null2String(rs.getString("glcclc")); + Map relateWfAllowancesObj = new HashMap<>(); + List tripMark = WeaverUtil.getAssociatedBusinessTripMark(glcclcs); + relateWfAllowancesObj.put("requestId", Util.null2String(rs.getString("requestid"))); + relateWfAllowancesObj.put("workflowNumber", Util.null2String(rs.getString("lcbh"))); + relateWfAllowancesObj.put("workflowName", Util.null2String(rs.getString("requestname"))); + relateWfAllowancesObj.put("travelApplicationBizNumList", String.join(",", tripMark)); + relateWfAllowancesObj.put("lastOperateTime",Util.null2String(rs.getString("lastoperatedate"))); + relateWfAllowancesObj.put("workcode", Util.null2String(rs.getString("workcode"))); + relateWfAllowancesObj.put("bankCardNum", Util.null2String(rs.getString("yxzh"))); + relateWfAllowancesObj.put("bankName", Util.null2String(rs.getString("khxmc"))); + relateWfAllowancesObj.put("allowance", Util.getDoubleValue(Util.null2String(rs.getString("yxzfje")))); + relateWfAllowancesObj.put("deptCode", Util.null2String(rs.getString("departmentcode"))); + relateWfAllowancesObj.put("deptName", Util.null2String(rs.getString("departmentname"))); + relateWfAllowancesObj.put("burdenDeptCode", Util.null2String(rs.getString("burdenDeptCode"))); + relateWfAllowancesObj.put("burdenDeptName", Util.null2String(rs.getString("burdenDeptName"))); + relateWfAllowancesarray.add(relateWfAllowancesObj); + } + return relateWfAllowancesarray; + } +// +// @Override +// public List> monthlyAllowance(Map request2Map) { +// String date = request2Map.get("date"); +// log.info("====差旅补贴接口开始"); +// log.info("====查询条件,日期@{}@", date); +// List> allAllowance = new ArrayList<>(); +// if (StringUtils.isEmpty(date)) { +// log.info("====查询条件,日期为空,方法结束"); +// return allAllowance; +// } +// //查询条件封装 +// String whereSql = " where t1.ngr !=1 and t2.currentnodetype=3 and substr(t2.LASTOPERATEDATE,1,7)='" + date + "'"; +// RecordSet rs = new RecordSet(); +// //差旅报销表 +// String mainTable = WeaverUtil.getTableNameByPropName("unionReWfid"); +// String dt12Table = mainTable + "_dt12"; +// //报销流程信息 +// String allowanceTableSql = "select distinct t1.requestid,t1.ngr,t1.lcbh,t2.requestname,t1.glcclc,t2.LASTOPERATEDATE,t3.ccr\n" + +// " from " + mainTable + " t1\n" + +// " left join workflow_requestbase t2\n" + +// " on t1.requestid=t2.requestid\n" + +// " left join " + dt12Table + " t3\n" + +// " on t1.id=t3.mainid\n" + whereSql; +// log.info("====所有出差信息sql@" + allowanceTableSql + "@"); +// //关联到的差补出差人 +// List allCcr = new ArrayList<>(); +// //关联到的报销流程信息 +// List reiMAInfos = new ArrayList<>(); +// rs.executeQuery(allowanceTableSql); +// while (rs.next()) { +// String ccr = Util.null2String(rs.getString("ccr")); //重复项 +// allCcr.add(ccr); +// ReiMAInfo rmi = new ReiMAInfo(); +// rmi.setRequestId(Util.null2String(rs.getString("requestid"))); +// rmi.setNgr(Util.null2String(rs.getString("ngr"))); +// rmi.setRequestMark(Util.null2String(rs.getString("lcbh"))); +// rmi.setRequestName(Util.null2String(rs.getString("requestname"))); +// rmi.setRelCcReqMark(Util.null2String(rs.getString("glcclc"))); +// rmi.setLastOperateDate(Util.null2String(rs.getString("LASTOPERATEDATE"))); +// rmi.setCcr(Util.null2String(rs.getString("ccr"))); +// reiMAInfos.add(rmi); +// } +// allCcr = allCcr.stream().distinct().collect(Collectors.toList()); +// log.info("====差补下关联到的出差人id,去重后@" + allCcr + "@"); +// log.info("====差补下关联到的报销流程信息,未对出差人去重@" + reiMAInfos + "@"); +// //出差人信息 +// Map personalInfo; +// //出差人相关流程的补贴 +// List> relateWfAllowances; +// for (String ccr : allCcr) { +// personalInfo = new HashMap<>(); +// relateWfAllowances = new ArrayList<>(); +// personalInfo.putAll(WeaverUtil.getBankInfoByNgrWorkCode(ccr, WeaverUtil.BX)); +// // ccr 匹配 reiMAInfos 中 ccr +// List matchReiInfo = reiMAInfos.stream().distinct().filter(rei -> rei.getCcr().equals(ccr)).collect(Collectors.toList()); +// log.info("====匹配到的报销信息行记录@" + matchReiInfo + "@"); +// //出差人单个流程补贴值 +// Map singleWfAllowance; +// String refundReqId; +// String glcclcs; +// double associatedBusinessAllowance; +// double allowances = 0.0; +// for (ReiMAInfo info : matchReiInfo) { +// singleWfAllowance = new HashMap<>(); +// glcclcs = info.getRelCcReqMark(); +// refundReqId = info.getRequestId(); +// singleWfAllowance.put("refundReqId", refundReqId); +// singleWfAllowance.put("refundMark", info.getRequestMark()); +// singleWfAllowance.put("refundName", info.getRequestName()); +// associatedBusinessAllowance = WeaverUtil.getAssociatedBusinessAllowance(glcclcs, refundReqId, mainTable); +// singleWfAllowance.put("allowances", associatedBusinessAllowance); +// allowances += associatedBusinessAllowance; +// singleWfAllowance.put("lastOperateTime", info.getLastOperateDate()); +// //新增费用承担部门字段信息(取自报销流程) +// singleWfAllowance.put("feeBurdenDeptCode", WeaverUtil.getFeeBurdenDept(mainTable, refundReqId)); +// singleWfAllowance.put("businessTripMark", +// WeaverUtil.getAssociatedBusinessTripMark(glcclcs, refundReqId, mainTable)); +// relateWfAllowances.add(singleWfAllowance); +// } +// personalInfo.put("allowanceCount", allowances); +// personalInfo.put("relateWfAllowances", relateWfAllowances); +// allAllowance.add(personalInfo); +// } +// return allAllowance; +// } + + @Override + public List> getSubsidyStandard(String requestid) { + RecordSet rs = new RecordSet(); + List> res = new ArrayList<>(); + String tableName = WeaverUtil.getTableNameByRequestId(requestid, rs); + rs.writeLog(tableName); + if (StringUtils.isBlank(tableName)) { + return res; + } + String sql_mainTable = "select id,cclxzxx,sfhwcc from " + tableName + " where requestid=" + requestid; + rs.execute(sql_mainTable); + //出差类型 0,1 对应商旅出差-业务出差;2 对应商旅出差-培训学习;3,4 不支付补助 + String ccType = ""; + String mainId = ""; //关联明细表 + String sfhwcc = ""; //是否海外出差,0为海外 + if (rs.next()) { + ccType = Util.null2String(rs.getString("cclxzxx")); + mainId = Util.null2String(rs.getString("id")); + sfhwcc = Util.null2String(rs.getString("sfhwcc")); + } + if (StringUtils.isBlank(ccType) || StringUtils.isBlank(mainId) || "0".equals(sfhwcc)) { + return res; + } + String sql_dt4 = "select cfsj,fhsj,mddgn,sfbc from " + tableName + "_dt4 where mainid=" + mainId; + rs.execute(sql_dt4); + while (rs.next()) { + Map item = new HashMap<>(); + item.put("cclx", ccType); + item.put("sfbc", Util.null2String(rs.getString("sfbc"))); + item.put("cfsj", Util.null2String(rs.getString("cfsj"))); + item.put("fhsj", Util.null2String(rs.getString("fhsj"))); + item.put("mddgn", Util.null2String(rs.getString("mddgn"))); + res.add(item); + } + + if (CollectionUtils.isEmpty(res)) { + String sql_dt3 = "select cfsj,fhsj,mddgn,sfbc from " + tableName + "_dt3 where mainid=" + mainId; + rs.execute(sql_dt3); + while (rs.next()) { + Map item = new HashMap<>(); + item.put("cclx", ccType); + item.put("sfbc", Util.null2String(rs.getString("sfbc"))); + item.put("cfsj", Util.null2String(rs.getString("cfsj"))); + item.put("fhsj", Util.null2String(rs.getString("fhsj"))); + item.put("mddgn", Util.null2String(rs.getString("mddgn"))); + res.add(item); + } + } + + return res; + } + + @Override + public List> monthlyAllowance4BusinessTrip(Map queryParam) throws Exception { + String startDate = queryParam.get("startDate"); + String endDate = queryParam.get("endDate"); + if (!isDate(startDate)) { + throw new Exception("开始日期格式错误"); + } + if (!isDate(endDate)) { + throw new Exception("结束日期格式错误"); + } + + //构造数据 + ResourceComInfo rc = new ResourceComInfo(); + DepartmentComInfo dc = new DepartmentComInfo(); + String tableName = PayUtil.getTableNameByUnNumber("ccsq"); + String sql = "select t2.REQUESTNAME,t1.LCBH,t1.REQUESTID,t3.XM,t3.FYCDBM,t1.TXXMBM,t1.TXXMJC,t1.KHMC,t1.KHBM,t1.CB,t2.LASTOPERATEDATE\n" + + "from " + tableName + " t1\n" + + "left join workflow_requestbase t2\n" + + "on t1.requestid=t2.requestid\n" + + "left join " + tableName + "_DT2 t3\n" + + "on t1.ID=t3.MAINID\n" + + "where t1.NGR !=1 and t2.currentnodetype=3 and t1.YWZFFYDBX=1\n" + + "and to_date(t2.LASTOPERATEDATE, 'yyyy-MM-dd')\n" + + "between to_date('" + startDate + "','yyyy-MM-dd') AND to_date('" + endDate + "','yyyy-MM-dd')"; + + log.info(String.format("monthlyAllowance4BusinessTrip查询sql:%s", sql)); + + RecordSet rs = new RecordSet(); + rs.executeQuery(sql); + List allAllowanceList = new ArrayList<>(); + while (rs.next()) { + AllowancePO apo = new AllowancePO(); + apo.setReqMark(Util.null2String(rs.getString("LCBH"))); + apo.setReqId(Util.null2String(rs.getString("REQUESTID"))); + apo.setReqTitle(Util.null2String(rs.getString("REQUESTNAME"))); + apo.setUid(rc.getWorkcode(Util.null2String(rs.getString("XM")))); + apo.setProjectCode(Util.null2String(rs.getString("TXXMBM"))); + apo.setProjectName(Util.null2String(rs.getString("TXXMJC"))); + apo.setCrmCode(Util.null2String(rs.getString("KHBM"))); + apo.setCrmName(Util.null2String(rs.getString("KHMC"))); + apo.setAllowance(Util.null2String(rs.getString("CB"))); + apo.setLastOperateTime(Util.null2String(rs.getString("LASTOPERATEDATE"))); + apo.setDeptCode(dc.getDepartmentCode(Util.null2String(rs.getString("FYCDBM")))); + allAllowanceList.add(apo); + } + + // group by workcode + Map> allowanceGroupByUid = allAllowanceList + .stream() + .collect(Collectors.groupingBy(AllowancePO::getUid)); + + List> resp = new ArrayList<>(); //构造data返回值 + Map singleWfAllowance; //构造差旅信息(出差维度默认为空) + Map singlePerson; //构造出差申请详情 + for (Map.Entry> entry : allowanceGroupByUid.entrySet()) { + String uid = entry.getKey(); + List ua = entry.getValue(); + + String sumAllowances = ua.stream() + .map(AllowancePO::getAllowance) + .reduce(String.valueOf(BigDecimal.ZERO), + (sum, data) -> String.valueOf(DoubleUtil.add(sum, "".equals(data) ? "0" : data, 2))); + + //构造 + singleWfAllowance = new HashMap<>(); + singleWfAllowance.put("refundReqId", ""); + singleWfAllowance.put("refundMark", ""); + singleWfAllowance.put("refundName", ""); + singleWfAllowance.put("allowances", sumAllowances); + singleWfAllowance.put("lastOperateTime", ""); + singleWfAllowance.put("feeBurdenDeptCode", ""); + singleWfAllowance.put("businessTripMark", ua); + + singlePerson = new HashMap<>(WeaverUtil.getBankInfoByNgrWorkCode(uid, WeaverUtil.CC)); //人员信息 + singlePerson.put("allowanceCount", sumAllowances); //补贴总额 + singlePerson.put("relateWfAllowances", singleWfAllowance); //相关出差流程 + + resp.add(singlePerson); //汇总单人数据 + + } + return resp; + } + + private static boolean isDate(String dat) { + DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + ParsePosition pos = new ParsePosition(0); + formatter.setLenient(false); + Date result = formatter.parse(dat, pos); + return !(pos.getIndex() == 0) && dat.equals(formatter.format(result)); + } + + public static void main(String[] args) { + boolean date = isDate("2020-08-21"); + System.out.println("date = " + date); + } +} + diff --git a/src/main/java/com/engine/htsc/trip/service/impl/ResetImageAndBillServiceImpl.java b/src/main/java/com/engine/htsc/trip/service/impl/ResetImageAndBillServiceImpl.java new file mode 100644 index 0000000..b6f092f --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/impl/ResetImageAndBillServiceImpl.java @@ -0,0 +1,14 @@ +package com.engine.htsc.trip.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.trip.cmd.ResetImageAndBillCmd; +import com.engine.htsc.trip.service.ResetImageAndBillService; +import java.util.Map; + +public class ResetImageAndBillServiceImpl extends Service implements ResetImageAndBillService { + + @Override + public Map resetImageAndBill(Map params) { + return commandExecutor.execute(new ResetImageAndBillCmd(user, params)); + } +} diff --git a/src/main/java/com/engine/htsc/trip/service/impl/SaveFydjServiceImpl.java b/src/main/java/com/engine/htsc/trip/service/impl/SaveFydjServiceImpl.java new file mode 100644 index 0000000..be2984f --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/impl/SaveFydjServiceImpl.java @@ -0,0 +1,14 @@ +package com.engine.htsc.trip.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.trip.cmd.SaveFydjCmd; +import com.engine.htsc.trip.service.SaveFydjService; +import java.util.Map; + +public class SaveFydjServiceImpl extends Service implements SaveFydjService { + + @Override + public Map saveFydj(Map params) { + return commandExecutor.execute(new SaveFydjCmd(user, params)); + } +} diff --git a/src/main/java/com/engine/htsc/trip/service/impl/TripExcelOutServiceImpl.java b/src/main/java/com/engine/htsc/trip/service/impl/TripExcelOutServiceImpl.java new file mode 100644 index 0000000..5eef020 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/impl/TripExcelOutServiceImpl.java @@ -0,0 +1,198 @@ +package com.engine.htsc.trip.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.engine.core.impl.Service; +import com.engine.htsc.payment.util.BizUtils; +import com.engine.htsc.payment.util.PayUtil; +import com.engine.htsc.trip.pojo.UnionStroke; +import com.engine.htsc.trip.pojo.UnionTraveler; +import com.engine.htsc.trip.service.TripExcelOutService; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.poi.ss.usermodel.Workbook; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.htsc.cus.HTUtil; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class TripExcelOutServiceImpl extends Service implements TripExcelOutService { + + private final Log log = LogFactory.getLog(TripExcelOutServiceImpl.class); + + @Override + public Workbook getExportData(String startTime, String endTime) throws Exception { + + //sheet1 + String sheetOneSql = "\n" + + "select t1.LCBH,t2.REQUESTNAME,t1.NGR,t1.NGRQ,\n" + + " t1.cclxzxx,\n" + + " t1.TXXMJC,t1.TXXMBH,t1.xmjc,\n" + + " t1.KHBM,t1.KHMC,\n" + + " t1.CCQK,\n" + + " t1.XDFHSJ,\n" + + "\n" + + " t3.CCRGH,\n" + + " t3.XM,\n" + + " t3.BM,t3.BMFZR,\n" + + " t3.FYCDBM,t3.FYCDBMFZR,\n" + + " t3.GZD,t3.ZJ,t3.BXD\n" + + "\n" + + "from FORMTABLE_MAIN_58 t1\n" + + "left join WORKFLOW_REQUESTBASE t2\n" + + "on t1.REQUESTID=t2.REQUESTID\n" + + "left join FORMTABLE_MAIN_58_DT2 t3\n" + + "on t1.ID=t3.MAINID\n" + + "where t1.LCBH is not null and t1.CCQK is not null and t1.CCLXZXX is not null\n" + + "and to_date(t1.NGRQ,'yyyy-MM-dd HH24:MI:SS')\n" + + "between to_date('" + startTime + "','yyyy-MM-dd') and to_date('" + endTime + "','yyyy-MM-dd')"; + List traveler = getTravelerData(sheetOneSql); +// sheet2 + String sheetTSql = "select t1.LCBH,t2.REQUESTNAME,t1.NGR,t1.NGRQ,\n" + + " t1.cclxzxx,\n" + + " t1.TXXMJC,t1.TXXMBH,t1.xmjc,\n" + + " t1.KHBM,t1.KHMC,\n" + + " t1.CCQK,\n" + + " t1.XDFHSJ,\n" + + "\n" + + " t3.SFBC,t3.CFDGN,t3.MDDGN,t3.CFDHW,t3.MDDHW,t3.CFSJ,t3.FHSJ\n" + + "\n" + + "from FORMTABLE_MAIN_58 t1\n" + + "left join WORKFLOW_REQUESTBASE t2\n" + + "on t1.REQUESTID=t2.REQUESTID\n" + + "left join FORMTABLE_MAIN_58_DT3 t3\n" + + "on t1.ID=t3.MAINID\n" + + "where t1.LCBH is not null and t1.CCQK is not null and t1.CCLXZXX is not null and\n" + + "to_date(t1.NGRQ,'yyyy-MM-dd HH24:MI:SS')\n" + + "between to_date('" + startTime + "','yyyy-MM-dd') and to_date('" + endTime + "','yyyy-MM-dd')"; + List stroke = getStrokeData(sheetTSql); + return null; + } + + @Override + public List getTravelerData(String sql) throws Exception { + log.info("获取出差人相关信息:" + sql); + RecordSet rs = new RecordSet(); + ResourceComInfo rc = new ResourceComInfo(); + DepartmentComInfo dc = new DepartmentComInfo(); + rs.executeQuery(sql); + + List list = new ArrayList<>(); + + while (rs.next()) { + String uid = Util.null2String(rs.getString("REQUESTNAME")); + String xmjc = Util.null2String(rs.getString("xmjc")); + String TXXMBH = Util.null2String(rs.getString("TXXMBH")); + UnionTraveler u = new UnionTraveler(); + + u.setLcbh(Util.null2String(rs.getString("LCBH"))); + u.setRequestName(Util.null2String(rs.getString("REQUESTNAME"))); + u.setNgr(rc.getLastname(uid)); + u.setNgrq(Util.null2String(rs.getString("NGRQ"))); + u.setCclxzxx(Util.null2String(rs.getString("cclxzxx"))); + u.setTxxmjc(xmjc); + if ("".equals(TXXMBH)) { + u.setTxmxbh(convertXmId2Name(xmjc)); + } else { + u.setTxmxbh(TXXMBH); + } + u.setKhmc(Util.null2String(rs.getString("KHBM"))); + u.setKhbm(Util.null2String(rs.getString("KHMC"))); + u.setCcqk(Util.null2String(rs.getString("CCQK"))); + u.setXdfhsj(Util.null2String(rs.getString("XDFHSJ"))); + + String ccruid = Util.null2String(rs.getString("XM")); + String bmid = Util.null2String(rs.getString("BM")); + String BMFZRuid = Util.null2String(rs.getString("BMFZR")); + String fycdbmid = Util.null2String(rs.getString("FYCDBM")); + String fycdbmfzruid = Util.null2String(rs.getString("FYCDBMFZR")); + + u.setCcrgh(rc.getWorkcode(ccruid)); + u.setXm(rc.getLastname(ccruid)); + u.setBm(dc.getDepartmentmark(bmid)); + + u.setBmfzr(rc.getLastname(BMFZRuid)); + u.setFycdbm(dc.getDepartmentmark(fycdbmid)); + u.setBmfzr(rc.getLastname(fycdbmfzruid)); + u.setGzd(Util.null2String(rs.getString("GZD"))); + u.setZj(Util.null2String(rs.getString("ZJ"))); + u.setBxd(Util.null2String(rs.getString("BXD"))); + + list.add(u); + + } + + return list; + } + + @Override + public List getStrokeData(String sql) throws Exception { + log.info("获取出差行程相关信息:" + sql); + RecordSet rs = new RecordSet(); + ResourceComInfo rc = new ResourceComInfo(); + DepartmentComInfo dc = new DepartmentComInfo(); + rs.executeQuery(sql); + + List list = new ArrayList<>(); + + while (rs.next()) { + String uid = Util.null2String(rs.getString("REQUESTNAME")); + String xmjc = Util.null2String(rs.getString("xmjc")); + String TXXMBH = Util.null2String(rs.getString("TXXMBH")); + UnionStroke u = new UnionStroke(); + + u.setLcbh(Util.null2String(rs.getString("LCBH"))); + u.setRequestName(Util.null2String(rs.getString("REQUESTNAME"))); + u.setNgr(rc.getLastname(uid)); + u.setNgrq(Util.null2String(rs.getString("NGRQ"))); + u.setCclxzxx(Util.null2String(rs.getString("cclxzxx"))); + u.setTxxmjc(xmjc); + if ("".equals(TXXMBH)) { + u.setTxmxbh(convertXmId2Name(xmjc)); + } else { + u.setTxmxbh(TXXMBH); + } + u.setLcbh(Util.null2String(rs.getString("LCBH"))); + u.setRequestName(Util.null2String(rs.getString("REQUESTNAME"))); + u.setNgr(rc.getLastname(uid)); + u.setNgrq(Util.null2String(rs.getString("NGRQ"))); + u.setCclxzxx(Util.null2String(rs.getString("cclxzxx"))); + u.setTxxmjc(Util.null2String(rs.getString("TXXMJC"))); + u.setTxmxbh(Util.null2String(rs.getString("TXXMBH"))); + u.setKhmc(Util.null2String(rs.getString("KHBM"))); + u.setKhbm(Util.null2String(rs.getString("KHMC"))); + u.setCcqk(Util.null2String(rs.getString("CCQK"))); + u.setXdfhsj(Util.null2String(rs.getString("XDFHSJ"))); + + u.setSfbx(Util.null2String(rs.getString("SFBC"))); + u.setCfdgn(PayUtil.cityCodeToName(Util.null2String(rs.getString("CFDGN")))); + u.setMddgn(PayUtil.cityCodeToName(Util.null2String(rs.getString("MDDGN")))); + u.setCfdhw(Util.null2String(rs.getString("CFDHW"))); + u.setMddhw(Util.null2String(rs.getString("MDDHW"))); + u.setCfsj(Util.null2String(rs.getString("CFSJ"))); + u.setFhsj(Util.null2String(rs.getString("FHSJ"))); + + list.add(u); + } + + return list; + } + + + public String convertXmId2Name(String xmId) { + Map project = new HashMap<>(); + project.put("projectId", xmId); + String res = new HTUtil().getProjectById(project); + if (StringUtils.isBlank(res)) { + return ""; + } + JSONObject jsonObject = JSONObject.parseObject(res); + return Util.null2String(jsonObject.get("shortName")); + } +} diff --git a/src/main/java/com/engine/htsc/trip/util/LogUtil.java b/src/main/java/com/engine/htsc/trip/util/LogUtil.java new file mode 100644 index 0000000..77f96a2 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/util/LogUtil.java @@ -0,0 +1,94 @@ +package com.engine.htsc.trip.util; + +import weaver.general.BaseBean; +import weaver.general.GCONST; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +/** + * 日志工具类 + */ +public class LogUtil { + + static DateTimeFormatter newDf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + static DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + + static BaseBean log = new BaseBean(); + private PrintWriter logPrint; + private String logPath = ""; + private boolean systemLog = false;// 是否写系统日记 + + public LogUtil() { + + } + + public LogUtil(String logPath, boolean systemLog) { + this.logPath = logPath; + this.systemLog = systemLog; + } + + private String getLogFile() { + // 获取当前系统路径 + String sysPath = GCONST.getRootPath(); + if (sysPath == null) { + sysPath = System.getProperty("user.dir"); + } + if (!"".equals(logPath)) { + if (logPath.endsWith("/")) { + sysPath += logPath + df.format(LocalDateTime.now()) + ".log"; + } else { + sysPath += logPath + "/" + df.format(LocalDateTime.now()) + ".log"; + } + } else { + sysPath += "/debugLog/" + df.format(LocalDateTime.now()) + ".log"; + } + return sysPath; + } + + private void newLog() { + String logFile = getLogFile(); + try { + logPrint = new PrintWriter(new FileWriter(logFile, true), true); + } catch (IOException e) { + try { + File file = new File(logFile); + if (!file.getParentFile().exists()) { + // 如果目标文件所在的目录不存在,则创建父目录 + if (file.getParentFile().mkdirs()) { + boolean newFile = file.createNewFile(); + } + } + logPrint = new PrintWriter(new FileWriter(logFile, true), true); + } catch (IOException ex) { + log.writeLog("Log记录出错了", ex); + } + } + } + + public void writeLog(Object msg) { + if (systemLog) { + log.writeLog(msg); + } + newLog(); + logPrint.println(newDf.format(LocalDateTime.now()) + ": " + msg); + logPrint.flush(); + logPrint.close(); + } + + public void writeLog(String msg, Throwable e) { + if (systemLog) { + log.writeLog(msg, e); + } + newLog(); + logPrint.println(newDf.format(LocalDateTime.now()) + ": " + msg); + e.printStackTrace(logPrint); + logPrint.flush(); + logPrint.close(); + } + +} diff --git a/src/main/java/com/engine/htsc/trip/util/WeaverUtil.java b/src/main/java/com/engine/htsc/trip/util/WeaverUtil.java new file mode 100644 index 0000000..816baf5 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/util/WeaverUtil.java @@ -0,0 +1,875 @@ +package com.engine.htsc.trip.util; + +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.http.HttpEntity; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import weaver.conn.RecordSet; +import weaver.conn.RecordSetDataSource; +import weaver.general.Util; +import weaver.hrm.company.DepartmentComInfo; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.interfaces.htsc.cus.HTUtil; + +import java.io.IOException; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; + +/** + * Created by qlk + */ +public class WeaverUtil { + + private final static LogUtil logUtil = new LogUtil(); + private final static Log log = LogFactory.getLog(WeaverUtil.class); + public final static String BX = "0"; + public final static String CC = "1"; + + /** + * 根据 UnNumber获取 TableName + * @param unNumber + * @return + */ + public static String getTableNameByUnNumber(String unNumber) { + RecordSet rs = new RecordSet(); + String sql = "select abs(FORMID) as FORMID from WORKFLOW_BASE where ISVALID=1 and UNNUMBER=?"; + rs.executeQuery(sql, unNumber); + String formId = ""; + if (rs.next()) { + formId = Util.null2String(rs.getString("FORMID")); + } + return String.join("_", "FORMTABLE_MAIN", formId); + } + + /** + * 根据流程表单获取投行项目 + * + * @param reqId 流程id + * @return map + */ + public static Map getItItemByReqId(String reqId) { + Map item = new HashMap<>(); + RecordSet recordSet = new RecordSet(); + String ccsqTable = getTableNameByRequestId(reqId, recordSet); + if ("".equals(ccsqTable)) { + return item; + } + String thxm_sql = "select xmjc from " + ccsqTable; + recordSet.executeQuery(thxm_sql); + recordSet.next(); + String xmjc = Util.null2String(recordSet.getString("xmjc")); + if ("".equals(xmjc)) { + Map paras = new HashMap<>(); + paras.put("projectId", xmjc); + String projectById = new HTUtil().getProjectById(paras); + if ("".equals(projectById)) { + return item; + } + JSONObject jsonObject = JSONObject.parseObject(projectById); + String shortName = jsonObject.getString("shortName"); + item.put("id", xmjc); + item.put("shortName", shortName); + item.put("isItProj", shortName); + } else { + item.put("id", ""); + item.put("shortName", ""); + item.put("isItProj", "否"); + } + return item; + } + + /** + * 获取插入表中的数据 + * + * @param fname 流程编号 + * @return map + */ + private static Map getBudgetBody(String fname) { + String unionReWfid = Util.null2String(new PropBean().getPropName("unionReWfid")); + String unionReWfidstr = Util.null2String(new PropBean().getWorkflowIdsByUnNumber(unionReWfid)); + List unionReWfidWF = Arrays.asList(unionReWfidstr.split(",")); + String mainTable = WeaverUtil.getTableNameByWfid(Util.getIntValue(unionReWfidWF.get(0))); + String dt8Table = mainTable + "_dt8"; + String dt9Table = mainTable + "_dt9"; + Map body = new HashMap<>(); + RecordSet rs = new RecordSet(); + String mainId = ""; + String main_sql = "select t1.id,t1.lcbh,t2.requestname,t3.lastname,t4.DEPARTMENTCODE " + + "from " + mainTable + " t1\n" + + "left join workflow_requestbase t2\n" + + "on t1.requestid=t2.requestid\n" + + "left join hrmresource t3\n" + + "on t1.ngr=t3.id\n" + + "left join hrmdepartment t4\n" + + "on t3.departmentid=t4.id\n" + + "where t1.lcbh='" + fname + "'"; + logUtil.writeLog("main_sql执行, " + main_sql); + rs.executeQuery(main_sql); + if (rs.next()) { + body.put("FNAME", fname); + body.put("FBILLTITLE", Util.null2String(rs.getString("requestname"))); + body.put("FPESONNAME", rs.getString("lastname")); + body.put("FDEPTNUMBER", rs.getString("DEPARTMENTCODE")); + mainId = Util.null2String(rs.getString("id")); + } + logUtil.writeLog("body数据主表基本信息, [" + body + "]"); + String dt8_sql = "select fycdr,yskm as km,ccsqlc from " + dt8Table + " where mainid=" + mainId; + logUtil.writeLog("dt8_sql执行, " + dt8_sql); + rs.executeQuery(dt8_sql); + String km = ""; + String ccsqlc = ""; + List> list = new ArrayList<>(); + while (rs.next()) { + km = Util.null2String(rs.getString("km")); //科目 + ccsqlc = Util.null2String(rs.getString("ccsqlc")); //出差申请流程reqId(获取it项目) + list.add(getKjKmChargesWithMap(km, dt9Table, ccsqlc, mainId)); + } + body.put("list", list); + logUtil.writeLog("list科目信息, [" + list + "]"); + logUtil.writeLog("body完整数据信息, [" + body + "]"); + return body; + } + + /** + * 插入中间表 + * + * @param fname 流程编号 + * @param billStatus 单据状态 + * @param rsd 外部数据源 + * @return 布尔 + */ + public static boolean insertBudgetMiddleTable(String fname, String billStatus, RecordSetDataSource rsd) { + Map budgetBody = getBudgetBody(fname); + logUtil.writeLog("插入预算表insertBudgetMiddleTable开始执行" + budgetBody); + List> list = (List>) budgetBody.get("list"); + if (list.size() == 0) { + logUtil.writeLog("插入预算表中止,因为科目信息为空"); + return false; + } + DateTimeFormatter dfOnlyDate = DateTimeFormatter.ofPattern("yyyy"); + DateTimeFormatter dfDateTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + String FBILLTITLE = (String) budgetBody.get("FBILLTITLE"); + String FPESONNAME = (String) budgetBody.get("FPESONNAME"); + int FBILLSTATUS = Integer.parseInt(billStatus); + String FDEPTNUMBER = (String) budgetBody.get("FDEPTNUMBER"); + String FCOSTITEMNUM = "86010503"; + String YSND = dfOnlyDate.format(LocalDateTime.now()); + String FBIZDATE = dfDateTime.format(LocalDateTime.now()); + String FITEMDETAILNUM; + double FSJAMOUNT = 0; + double FNOTAXAMOUNT; + double FTAXAMOUNT; + double FACTUALAMOUNT; + double FSTANDARDAMOUNT; + String FOVERWEIGHT = ""; + String ISITITEM = ""; + String ITITEMCODE = ""; + String ITITEMNAME = ""; + String insert_sql = ""; + try { + for (Map item : list) { + FITEMDETAILNUM = Util.null2String((String) item.get("FITEMDETAILNUM")); + FNOTAXAMOUNT = Util.getDoubleValue((String) item.get("FNOTAXAMOUNT")); + FTAXAMOUNT = Util.getDoubleValue((String) item.get("FTAXAMOUNT")); + FOVERWEIGHT = (String) item.get("FOVERWEIGHT"); + FACTUALAMOUNT = Util.getDoubleValue((String) item.get("FACTUALAMOUNT")); + FSTANDARDAMOUNT = Util.getDoubleValue((String) item.get("FSTANDARDAMOUNT")); + String budgetTableName = new PropBean().getPropName("BudgetTableName"); + insert_sql = "insert into " + budgetTableName + + " (FNAME,FBILLTITLE,FPESONNAME,FBILLSTATUS,FDEPTNUMBER,WDMC,FITEMDETAILNUM,FCOSTITEMNUM,YSND," + + "FBIZDATE,FSJAMOUNT,FNOTAXAMOUNT,FTAXAMOUNT,FOVERWEIGHT,FACTUALAMOUNT,FSTANDARDAMOUNT,ISITITEM," + + "ITITEMCODE,ITITEMNAME) " + + " values('" + fname + "','" + FBILLTITLE + "','" + FPESONNAME + "'," + FBILLSTATUS + ",'" + FDEPTNUMBER + "'," + + "'','" + FITEMDETAILNUM + "','" + FCOSTITEMNUM + "','" + YSND + "','" + FBIZDATE + "'," + FSJAMOUNT + "," + FNOTAXAMOUNT + "," + FTAXAMOUNT + "," + + "'" + FOVERWEIGHT + "'," + FACTUALAMOUNT + "," + FSTANDARDAMOUNT + ",'" + ISITITEM + "','" + ITITEMCODE + "','" + ITITEMNAME + "')"; + + rsd.executeSql(insert_sql); + logUtil.writeLog("insert_sql, [" + insert_sql + "]"); + } + return true; + } catch (Exception e) { + logUtil.writeLog("insertBudgetMiddleTable异常, [" + e + "]"); + return false; + } + } + + /** + * 更新预算表 + * + * @param fname 流程编号 + * @param billStatus 单据状态 + * @param rsd 外部数据源 + * @return 布尔 + */ + public static boolean updateBudgetMiddleTable(String fname, String billStatus, RecordSetDataSource rsd) { + Map budgetBody = getBudgetBody(fname); + logUtil.writeLog("更新预算表updateBudgetMiddleTable开始执行" + budgetBody); + List> list = (List>) budgetBody.get("list"); + if (list.size() == 0) { + logUtil.writeLog("更新预算表中止,因为科目信息为空"); + return false; + } + DateTimeFormatter dfOnlyDate = DateTimeFormatter.ofPattern("yyyy"); + DateTimeFormatter dfDateTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + String FBILLTITLE = (String) budgetBody.get("FBILLTITLE"); + String FPESONNAME = (String) budgetBody.get("FPESONNAME"); + int FBILLSTATUS = Integer.parseInt(billStatus); + String FDEPTNUMBER = (String) budgetBody.get("FDEPTNUMBER"); + String FCOSTITEMNUM = "86010503"; + String YSND = dfOnlyDate.format(LocalDateTime.now()); + String FBIZDATE = dfDateTime.format(LocalDateTime.now()); + String FITEMDETAILNUM; + double FSJAMOUNT = 0; + double FNOTAXAMOUNT; + double FTAXAMOUNT; + double FACTUALAMOUNT; + double FSTANDARDAMOUNT; + String FOVERWEIGHT = ""; + String ISITITEM = ""; + String ITITEMCODE = ""; + String ITITEMNAME = ""; + String update_sql = ""; + try { + for (Map item : list) { + FITEMDETAILNUM = Util.null2String((String) item.get("FITEMDETAILNUM")); + FNOTAXAMOUNT = Util.getDoubleValue((String) item.get("FNOTAXAMOUNT")); + FTAXAMOUNT = Util.getDoubleValue((String) item.get("FTAXAMOUNT")); + FOVERWEIGHT = (String) item.get("FOVERWEIGHT"); + FACTUALAMOUNT = Util.getDoubleValue((String) item.get("FACTUALAMOUNT")); + FSTANDARDAMOUNT = Util.getDoubleValue((String) item.get("FSTANDARDAMOUNT")); + String budgetTableName = new PropBean().getPropName("BudgetTableName"); + update_sql = "UPDATE " + budgetTableName + " SET " + + "FBILLSTATUS=" + FBILLSTATUS + ",FCOSTITEMNUM='" + FCOSTITEMNUM + "',YSND='" + YSND + "'," + + "FBIZDATE='" + FBIZDATE + "',FSJAMOUNT=" + FSJAMOUNT + ",FNOTAXAMOUNT=" + FNOTAXAMOUNT + ",FTAXAMOUNT=" + FTAXAMOUNT + "," + + "FOVERWEIGHT='" + FOVERWEIGHT + "',FACTUALAMOUNT=" + FACTUALAMOUNT + ",FSTANDARDAMOUNT=" + FSTANDARDAMOUNT + + "WHERE FNAME = '" + fname + "' and FITEMDETAILNUM='" + FITEMDETAILNUM + "'"; + rsd.executeSql(update_sql); + logUtil.writeLog("insert_sql, [" + update_sql + "]"); + } + return true; + } catch (Exception e) { + logUtil.writeLog("updateBudgetMiddleTable异常, [" + e + "]"); + return false; + } + } + + /** + * 转换人员id为登录id + * + * @param hrmId 人员id + * @param rs sql执行器 + * @return 人员登录id + */ + public static String convertIdToLoginId(String hrmId, RecordSet rs) { + String sql = "select loginid from hrmresource where id='" + hrmId + "'"; + rs.execute(sql); + return rs.next() ? rs.getString("loginid") : ""; + } + + /** + * get请求 + * + * @param url + * @param headers + * @param encode + * @return + */ + public static String httpGetRaw(String url, Map headers, String encode) { + if (encode == null) { + encode = "utf-8"; + } + String content = null; + CloseableHttpResponse httpResponse = null; + CloseableHttpClient closeableHttpClient = null; + try { + //HttpClients.createDefault()等价于 HttpClientBuilder.create().build(); + closeableHttpClient = HttpClients.createDefault(); + HttpGet httpGet = new HttpGet(url); + //设置header + httpGet.setHeader("Content-type", "application/json"); + if (headers != null && headers.size() > 0) { + for (Map.Entry entry : headers.entrySet()) { + httpGet.setHeader(entry.getKey(), entry.getValue()); + } + } + //响应信息 + httpResponse = closeableHttpClient.execute(httpGet); + HttpEntity entity = httpResponse.getEntity(); + content = EntityUtils.toString(entity, encode); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + httpResponse.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + try { //关闭连接、释放资源 + closeableHttpClient.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return content; + } + + /** + * 根据 流程ID获取主表名 + * + * @param wfid 流程id + * @return 表名 + */ + public static String getTableNameByWfid(int wfid) { + String tableName = ""; + try { + if (!"".equals(wfid)) { + String sql = "select t1.tablename from workflow_bill t1,workflow_base t2 where t1.id = t2.formid and t2.id = " + wfid; + RecordSet rs = new RecordSet(); + rs.execute(sql); + if (rs.next()) { + tableName = Util.null2String(rs.getString("tablename")); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return tableName; + } + + /** + * 根据流程号获取表名 + * + * @param requestId + * @param rs + * @return + */ + public static String getTableNameByRequestId(String requestId, RecordSet rs) { + String sql = "select t1.tablename from workflow_bill t1\n" + + " left join workflow_base t2\n" + + " on t1.id =t2.formid\n" + + " left join workflow_requestbase t3\n" + + " on t2.id = t3.workflowid\n" + + " where t3.requestid=" + requestId; + rs.writeLog("根据流程号获取表名@" + sql + "@"); + rs.execute(sql); + if (rs.next()) { + return Util.null2String(rs.getString("tablename")); + } else { + return ""; + } + } + + /** + * 获取流程当前状态 + * + * @param requestId 流程id + * @return String 流程status + */ + public static String getWorkflowStatus(String requestId) { + String statusSQL = String.format("select status from workflow_requestbase where requestid='%s'", requestId); + RecordSet recordSet = new RecordSet(); + recordSet.execute(statusSQL); + String status = ""; + if (recordSet.next()) { + status = Util.null2String(recordSet.getString("status")); + } + return status; + } + + /** + * 根据流程id查询流程编号 + * + * @param requestIds 流程id + * @return String 流程编号 + */ + public static String getLcBhbyrequestId(String requestIds) { + String unionwfid = Util.null2String(new PropBean().getPropName("unionwfid")); + String wfidstr = Util.null2String(new PropBean().getWorkflowIdsByUnNumber(unionwfid)); + List lisWF = Arrays.asList(wfidstr.split(",")); + HTUtil htUtil = new HTUtil(); + String tableName = htUtil.getTableNameByWfid(Util.getIntValue(lisWF.get(0))); //获取表单名 + String bhbySQL = "select lcbh from " + tableName + " where requestid in(" + requestIds + ")"; + RecordSet recordSet = new RecordSet(); + recordSet.execute(bhbySQL); + List lcbhs = new ArrayList(); + while (recordSet.next()) { + lcbhs.add(Util.null2String(recordSet.getString("lcbh"))); + } + return String.join(",", lcbhs); + } + + /** + * 明细表14取科目对应数据 + * 金额,是否超标,实际金额,标准金额,不含税价金额,税金 + * + * @param km 科目code + * @param dt9TableName 明细表9 + * @param ccsqlc 出差申请流程 + * @param mainId 流程id + * @return JSONObject + */ + public static JSONObject getKjKmCharges(String km, String dt9TableName, String ccsqlc, String mainId) { + RecordSet rs = new RecordSet(); + LogUtil logUtil = new LogUtil(); + logUtil.writeLog("[执行getKjKmCharges方法]"); + JSONObject subParam = new JSONObject(); + String dt9_sql = "select qzzsbhsje as zsbhs,zssj,sfcb,zscb,lkysbhsje as lkysbhs,lkyssj,qt from " + dt9TableName + " where mainid=" + mainId + " and ccsqlc=" + ccsqlc; + rs.execute(dt9_sql); + logUtil.writeLog("[执行dt9_sql]: [" + dt9_sql + "]"); + if (rs.next()) { + logUtil.writeLog("[km]: [" + km + "]"); + if ("8601050302".equals(km)) { // 其他 + String qt = Util.null2String(rs.getString("qt"), "0.00"); + subParam.put("amount", qt); // 金额 + subParam.put("overweight", "否"); // 是否超标 + subParam.put("actualAmount", qt); // 实际金额 + subParam.put("standardAmount", "0.00"); // 标准金额 + subParam.put("notaxAmount", qt); // 不含价税金额 + subParam.put("taxAmount", "0.00"); //税金 + + } else if ("8601050301".equals(km)) { // 交通费 (默认) + String lkysbhs = Util.null2String(rs.getString("lkysbhs"), "0.00"); + String lkyssj = Util.null2String(rs.getString("lkyssj"), "0.00"); + subParam.put("amount", lkyssj); + subParam.put("overweight", "否"); + subParam.put("actualAmount", lkyssj); + subParam.put("standardAmount", "0.00"); + subParam.put("notaxAmount", lkysbhs); + subParam.put("taxAmount", "0.00"); + + } else if ("8601050303".equals(km)) { // 住宿费 + String zsbhs = Util.null2String(rs.getString("zsbhs"), "0.00"); + String zssj = Util.null2String(rs.getString("zssj"), "0.00"); + String zscb = Util.null2String(rs.getString("zscb"), "0.00"); //住宿标准值 + subParam.put("amount", zssj); + subParam.put("overweight", Util.null2String(rs.getString("sfcb"), "否")); + subParam.put("actualAmount", zssj); + subParam.put("standardAmount", zscb); + subParam.put("notaxAmount", zsbhs); + subParam.put("taxAmount", "0.00"); + + } else { + subParam.put("amount", "0.00"); + subParam.put("overweight", "否"); + subParam.put("actualAmount", "0.00"); + subParam.put("standardAmount", "0.00"); + subParam.put("notaxAmount", "0.00"); + subParam.put("taxAmount", "0.00"); + } + + } + + logUtil.writeLog("===getKjKmCharges===, subParam: " + subParam); + return subParam; + } + + /** + * 明细表9取科目对应数据 + * 价税合计金额,未税金额,税金,是否超标,实际金额,标准金额,是否it项目,it编码,it名称 + * + * @param km 科目code + * @param dt9Table 明细表9 + * @param ccsqlc 出差申请流程 (获取投行项目) + * @param mainId 流程mainid + * @return map + */ + public static Map getKjKmChargesWithMap(String km, String dt9Table, String ccsqlc, String mainId) { + RecordSet rs = new RecordSet(); + LogUtil logUtil = new LogUtil(); + logUtil.writeLog("[执行getKjKmChargesWithMap方法]"); + Map subParam = new HashMap<>(); + Map itItemByReqId = getItItemByReqId(ccsqlc); //获取投行项目 + if (itItemByReqId.containsKey("id")) { + subParam.putAll(itItemByReqId); + } + String dt9_sql = "select qzzsbhsje as zsbhs,zssj,sfcb,zscb,lkysbhsje as lkysbhs,lkyssj,qt from " + dt9Table + " where mainid=" + mainId + " and ccsqlc=" + ccsqlc; + rs.execute(dt9_sql); + logUtil.writeLog("[执行dt9_sql]: [" + dt9_sql + "]"); + if (rs.next()) { + logUtil.writeLog("[km]: [" + km + "]"); + if ("8601050302".equals(km)) { // 其他 + String qt = Util.null2String(rs.getString("qt"), "0.00"); + subParam.put("FITEMDETAILNUM", km); // 科目 + subParam.put("FSJAMOUNT", qt); // 金额 + subParam.put("FOVERWEIGHT", "否"); // 是否超标 + subParam.put("FACTUALAMOUNT", qt); // 实际金额 + subParam.put("FSTANDARDAMOUNT", "0.00"); // 标准金额 + subParam.put("FNOTAXAMOUNT", qt); // 不含价税金额 + subParam.put("FTAXAMOUNT", "0.00"); //税金 + + } else if ("8601050301".equals(km)) { // 交通费 (默认) + String lkysbhs = Util.null2String(rs.getString("lkysbhs"), "0.00"); + String lkyssj = Util.null2String(rs.getString("lkyssj"), "0.00"); + subParam.put("FITEMDETAILNUM", km); // 科目 + subParam.put("FSJAMOUNT", lkyssj); + subParam.put("FOVERWEIGHT", "否"); + subParam.put("FACTUALAMOUNT", lkyssj); + subParam.put("FSTANDARDAMOUNT", "0.00"); + subParam.put("FNOTAXAMOUNT", lkysbhs); + subParam.put("FTAXAMOUNT", "0.00"); + + } else if ("8601050303".equals(km)) { // 住宿费 + String zsbhs = Util.null2String(rs.getString("zsbhs"), "0.00"); + String zssj = Util.null2String(rs.getString("zssj"), "0.00"); + String zscb = Util.null2String(rs.getString("zscb"), "0.00"); //住宿标准值 + subParam.put("FITEMDETAILNUM", km); // 科目 + subParam.put("FSJAMOUNT", zssj); + subParam.put("FOVERWEIGHT", Util.null2String(rs.getString("sfcb"), "否")); + subParam.put("FACTUALAMOUNT", zssj); + subParam.put("FSTANDARDAMOUNT", zscb); + subParam.put("FNOTAXAMOUNT", zsbhs); + subParam.put("FTAXAMOUNT", "0.00"); + + } else { + subParam.put("FSJAMOUNT", "0.00"); + subParam.put("FOVERWEIGHT", "否"); + subParam.put("FACTUALAMOUNT", "0.00"); + subParam.put("FSTANDARDAMOUNT", "0.00"); + subParam.put("FNOTAXAMOUNT", "0.00"); + subParam.put("FTAXAMOUNT", "0.00"); + } + + } + + logUtil.writeLog("===getKjKmChargesWithMap===, subParam: " + subParam); + return subParam; + } + + /** + * 配置表获取表明 + * + * @param propName + * @return + */ + public static String getTableNameByPropName(String propName) { + String wfidName = Util.null2String(new PropBean().getPropName(propName)); + String wfidNames = Util.null2String(new PropBean().getWorkflowIdsByUnNumber(wfidName)); + List wfidNameList = Arrays.asList(wfidNames.split(",")); + return WeaverUtil.getTableNameByWfid(Util.getIntValue(wfidNameList.get(0))); + } + + + /** + * 拟稿人获取银行信息,出差用的工号,报销用的id + * + * @param ngr 工号 + * @param type 类型, 0:联合报销; 1:联合出差 + * @return map + */ + public static Map getBankInfoByNgrWorkCode(String ngr, String type) { + Map bankInfo = new HashMap<>(); + if ("".equals(ngr)) { + logUtil.writeLog("[方法=WeaverUtil.getBankInfoByNgrWorkCode()], 指定拟稿人为空"); + bankInfo.put("workCode", ""); + bankInfo.put("subCompanyCode", ""); + bankInfo.put("deptCode", ""); + bankInfo.put("bankCardNum", ""); + bankInfo.put("bankOfDeposit", ""); + return bankInfo; + } + RecordSet rs = new RecordSet(); + String sql = ""; + if ("1".equals(type)) { + sql = "select * from (\n" + + " select t1.khr,t1.yxkh,t1.yxmc,t2.lastname,t3.DEPARTMENTCODE,t4.SUBCOMPANYCODE,\n" + + " to_date((t1.MODEDATACREATEDATE ||' '|| t1.MODEDATACREATETIME),'yyyy-mm-dd hh24:mi:ss') as datetime\n" + + " from uf_lhclyxxx t1\n" + + " left join hrmresource t2\n" + + " on t1.khr=t2.workcode\n" + + " left join hrmdepartment t3\n" + + " on t2.departmentid=t3.id\n" + + " left join hrmsubcompany t4\n" + + " on t4.id=t2.SUBCOMPANYID1\n" + + " where t2.workcode='" + ngr + "' order by datetime desc \n" + + ") where rownum=1"; + } else { + sql = "select * from (\n" + + " select t1.khr,t1.yxkh,t1.yxmc,t2.lastname,t3.DEPARTMENTCODE,t4.SUBCOMPANYCODE,\n" + + " to_date((t1.MODEDATACREATEDATE ||' '|| t1.MODEDATACREATETIME),'yyyy-mm-dd hh24:mi:ss') as datetime\n" + + " from uf_lhclyxxx t1\n" + + " left join hrmresource t2\n" + + " on t1.khr=t2.workcode\n" + + " left join hrmdepartment t3\n" + + " on t2.departmentid=t3.id\n" + + " left join hrmsubcompany t4\n" + + " on t4.id=t2.SUBCOMPANYID1\n" + + " where t2.id='" + ngr + "' order by datetime desc \n" + + ") where rownum=1"; + } + logUtil.writeLog("[方法=WeaverUtil.getBankInfoByNgrWorkCode()], " + sql); + rs.executeQuery(sql); + if (rs.next()) { + bankInfo.put("workCode", Util.null2String(rs.getString("khr"))); + bankInfo.put("subCompanyCode", Util.null2String(rs.getString("SUBCOMPANYCODE"))); + bankInfo.put("deptCode", Util.null2String(rs.getString("DEPARTMENTCODE"))); + bankInfo.put("bankCardNum", Util.null2String(rs.getString("yxkh"))); + bankInfo.put("bankOfDeposit", Util.null2String(rs.getString("yxmc"))); + logUtil.writeLog("[方法=WeaverUtil.getBankInfoByNgrWorkCode()], " + bankInfo); + } else { + logUtil.writeLog("[方法=WeaverUtil.getBankInfoByNgrWorkCode()], 指定拟稿人银行信息为空"); + bankInfo.put("workCode", ""); + bankInfo.put("subCompanyCode", ""); + bankInfo.put("deptCode", ""); + bankInfo.put("bankCardNum", ""); + bankInfo.put("bankOfDeposit", ""); + } + return bankInfo; + } + + + + public static List getAssociatedBusinessTripMark(String lcs) { + if ("".equals(lcs)) { + return new ArrayList<>(); + } + List glcclc = new ArrayList<>(); + String[] lcArr = lcs.split(","); + RecordSet rs = new RecordSet(); + for(String lc : lcArr){ + String sql = "select t.requestmark from workflow_requestbase t where t.requestid="+lc; + rs.executeQuery(sql); + if(rs.next()){ + glcclc.add(Util.null2String(rs.getString("requestmark"))); + } + } + return glcclc; + } + + /** + * 关联出差流程的编号 + * + * @param lcs + * @return + */ + public static List> getAssociatedBusinessTripMark(String lcs, String refundReqId, String tablename) { + List> markWithReqId = new ArrayList<>(); + if ("".equals(lcs)) { + return markWithReqId; + } + String[] lcArr = lcs.split(","); + RecordSet rs = new RecordSet(); + String sqlBx = "select * from " + tablename + "_DT14 t1\n" + + "left join " + tablename + " t2\n" + + "on t1.MAINID=t2.ID\n" + + "where t2.REQUESTID=? and t1.XJ != t1.BT"; + rs.executeQuery(sqlBx, refundReqId); + //如果存在数据,补贴都赋值为0 + boolean flag = false; + if (rs.next()) { + flag = true; + } + String sql = "select t1.REQUESTNAME,t1.REQUESTMARK,t2.BT from workflow_requestbase t1\n" + + "left join " + tablename + "_dt14 t2\n" + + "on t1.requestid=t2.ccsqlc\n" + + "left join " + tablename + " t3\n" + + "on t3.id=t2.mainid\n" + + "where to_char(t1.requestid)=? and to_char(t3.requestid)=? and t2.XJ=t2.BT and t2.BT != 0"; + Map businessTripMap; + String bt; + for (String lc : lcArr) { + businessTripMap = new HashMap<>(); + rs.executeQuery(sql, lc, refundReqId); + if (rs.next()) { + businessTripMap.put("reqId", lc); + businessTripMap.put("reqMark", Util.null2String(rs.getString("REQUESTMARK"))); + businessTripMap.put("reqTitle", Util.null2String(rs.getString("REQUESTNAME"))); + bt = Util.null2String(rs.getString("BT")); + if ("".equals(bt)) { + bt = "0.00"; + } + //添加出差申请 crmCode.. + if (flag) { + businessTripMap.put("allowance", Double.parseDouble("0.00")); + } else { + businessTripMap.put("allowance", Double.parseDouble(bt)); + } + Map projOrCrmInfoForSaveJourney = new HTUtil().getProjOrCrmInfoForSaveJourney(lc); + businessTripMap.putAll(projOrCrmInfoForSaveJourney); + } + markWithReqId.add(businessTripMap); + } + return markWithReqId; + } + + /** + * 关联出差流程的补贴 + * + * @param lcs + * @param refundReqId + * @return + */ + public static double getAssociatedBusinessAllowance(String lcs, String refundReqId, String tablename) { + double allowances = 0.0; + if ("".equals(lcs)) { + return allowances; + } + String[] lcArr = lcs.split(","); + RecordSet rs = new RecordSet(); + String sqlBx = "select * from " + tablename + "_DT14 t1\n" + + "left join " + tablename + " t2\n" + + "on t1.MAINID=t2.ID\n" + + "where t2.REQUESTID=? and t1.XJ != t1.BT"; + rs.executeQuery(sqlBx, refundReqId); + if (rs.next()) { + return 0; + } + //明细14,通过补贴和小计判断是否自费; 补贴等于小计即没有自费;取没有自费的补贴 + String sql = "select t1.REQUESTMARK,t2.BT from workflow_requestbase t1\n" + + "left join " + tablename + "_DT14 t2\n" + + "on t1.requestid=t2.ccsqlc\n" + + "left join " + tablename + " t3\n" + + "on t3.id=t2.mainid\n" + + "where to_char(t1.requestid)=? and to_char(t3.requestid)=? and t2.XJ=t2.BT and t2.BT != 0"; + for (String lc : lcArr) { + rs.executeQuery(sql, lc, refundReqId); + String bt = "0.00"; + if (rs.next()) { + bt = Util.null2String(rs.getString("spje")); + if (StringUtils.isBlank(bt)) { + bt = "0.00"; + } + } + allowances += Double.parseDouble(bt); + } + return allowances; + } + + /** + * 获取支付单号 + * + * @param nyr + * @return + */ + public static String getPaymentOrder(String nyr) { + int lc; + String dh = ""; + RecordSet rs = new RecordSet(); + rs.executeQuery("select * from (\n" + + " select to_number(substr(zfdh,-4)) ls,substr(zfdh,1,10) dh \n" + + " from uf_zfmx where substr(zfdh,-10,6)='" + nyr + "' \n" + + " order by to_date(MODEDATACREATETIME,'hh24:mi:ss') desc\n" + + ") where rownum=1"); + if (rs.next()) { + dh = rs.getString("dh"); + lc = Util.getIntValue(rs.getString("lc")) + 1; + } else { + dh = "HTLHBX0320"; + lc = 1; + } + String ls = lc + ""; + while (ls.length() < 4) { + ls = "0" + lc; + } + return dh + nyr + ls; + } + + /** + * 获取差旅报销费用承担部门code + * + * @return 部门code + */ + public static String getFeeBurdenDept(String main, String reqId) { + String sql = "select t2.FYCDBM from " + main + " t1\n" + + " left join " + main + "_dt9 t2\n" + + " on t1.ID=t2.MAINID\n" + + " where t1.REQUESTID=" + reqId; + DepartmentComInfo dc = new DepartmentComInfo(); + RecordSet rs = new RecordSet(); + rs.executeQuery(sql); + if (rs.next()) { + String deptId = Util.null2String(rs.getString("FYCDBM")); + if (StringUtils.isNotEmpty(deptId)) { + return dc.getDepartmentCode(deptId); + } + } + return ""; + } + + /** + * 根据人员id返回差标等级 + * + * @param hrmId 人员id + * @param backDeptList 后台部门 + * @return L1-L5 + */ + public static String getJobGradeStandard(String hrmId, List backDeptList) { + //L1 所属部门 (董事会,执行委员会,党委副书记) + List deptL1 = Arrays.asList("487", "489", "713"); + //L1 所属人员 (合规总监,宁敖) + List hrmL1 = Arrays.asList("6633", "5891"); + //L2 协管领导 (张冠峰) + //String hrmL2 = "6483"; + List hrmL2 = Arrays.asList("6483", "6579","2906"); + try { + PropBean pp = new PropBean(); + RecordSet rs = new RecordSet(); + String sql = "select t1.FIELD9,t2.WORKCODE,t2.DEPARTMENTID from cus_fielddata t1\n" + + "left join HRMRESOURCE t2\n" + + "on t1.ID=t2.ID\n" + + "where t1.scopeid = 1 and t2.id = ?"; + rs.executeQuery(sql, hrmId); + String field = ""; + String departmentID = ""; + String workCode = ""; + if (rs.next()) { + field = Util.null2String(rs.getString("field9")); + departmentID = Util.null2String(rs.getString("DEPARTMENTID")); + workCode = Util.null2String(rs.getString("WORKCODE")); + } + log.info("====hrmId@" + hrmId + "@"); + log.info("====hrmId部门id为@" + departmentID + "@"); + log.info("====hrmId的workCode为@" + workCode + "@"); + Set l3pTravelStandardSet = new HashSet<>(Arrays.asList(pp.getPropName("travel_standard_l3p").split(","))); + if(l3pTravelStandardSet.contains(workCode)){ + log.info(String.format("return L3P travel standard employee :",workCode)); + return "L3P"; + } + if (workCode.toUpperCase().startsWith("SX")) { + log.info("====hrmId为实习生"); + return "L5"; + } + if (deptL1.contains(departmentID) || hrmL1.contains(hrmId)) { + return "L1"; + } + if (hrmL2.contains(hrmId)) { + return "L2"; + } + + if ("".equals(field)) { + log.info("====未找到对应的职级"); + return ""; + } else { + field = field.toUpperCase(); + log.info("====当前人员职级@" + field + "@"); + } + if (backDeptList.contains(departmentID)) { + //后台部门 + if ("SD".equals(field) || "D".equals(field)) { + return "L3"; + } else { + //除去 sd 及 d 以外都是 ss及以下 + return "L4"; + } + } else { + //前台部门 + if ("MD".equals(field) || "ED".equals(field)) { + return "L3"; + } else { + return "L4"; + } + } + } catch (Exception e) { + log.info("====getJobGradeStandard异常:" + e); + return ""; + } + + } + +} diff --git a/src/main/java/com/engine/htsc/trip/web/BtAction.java b/src/main/java/com/engine/htsc/trip/web/BtAction.java new file mode 100644 index 0000000..88354ad --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/web/BtAction.java @@ -0,0 +1,144 @@ +package com.engine.htsc.trip.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.htsc.payment.enums.Sequences; +import com.engine.htsc.payment.util.CoWfUtil; +import com.engine.htsc.trip.service.BtService; +import com.engine.htsc.trip.service.impl.BtServiceImpl; +import com.engine.htsc.trip.util.AjaxResult; +import com.engine.common.util.ServiceUtil; +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; +import weaver.interfaces.htsc.cus.HTUtil; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.*; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by qlk + */ +public class BtAction { + public BtAction() { + } + + private BtService getServices(HttpServletRequest request, HttpServletResponse response) { + User user = HrmUserVarify.getUser(request, response); + return ServiceUtil.getService(BtServiceImpl.class, user); + } + + @GET + @Path("/update/bmldyjcc") + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult updateBmldyjcc(@QueryParam("xm") String dt2xm) { + try { + RecordSet rs = new RecordSet(); + rs.executeQuery("SELECT sfsp FROM uf_LedSP WHERE ccr=?", dt2xm); + rs.writeLog("联合出差申请,更新主表 bmldyjcc , dt2 xm(人员id):" + dt2xm); + String sfsp = ""; + if (rs.next()) { + sfsp = Util.null2String(rs.getString("sfsp")); + } + rs.writeLog("联合出差申请,更新主表 bmldyjcc , " + + "sql:\"SELECT sfsp FROM uf_LedSP WHERE ccr='" + dt2xm + "''"); + return AjaxResult.ok(sfsp); + } catch (Exception e) { + return AjaxResult.error("生成流程编号失败,发生异常:" + e.getMessage()); + } + } + + + @GET + @Path("/standard/{travelers}/{destinations}") + @Produces({MediaType.APPLICATION_JSON}) + public AjaxResult> standard( + @PathParam("travelers") String travelers, + @PathParam("destinations") String destinations, + @Context HttpServletRequest request, + @Context HttpServletResponse response) { + + List travelStandard = this.getServices(request, response).getTravelStandard(travelers, destinations); + return AjaxResult.ok(travelStandard, "人员和部门组合生成差旅信息标准"); + } + + @GET + @Path("/check/names/{names}") + @Produces({MediaType.APPLICATION_JSON}) + public AjaxResult checkNames( + @PathParam("names") String names, + @Context HttpServletRequest request, + @Context HttpServletResponse response) { + + Boolean isContain = this.getServices(request, response).checkNames(names); + return AjaxResult.ok(isContain, "校验明细字段姓名是否存在范围下"); + } + + @GET + @Path("/check/dept/name/{dept}/{name}") + @Produces({MediaType.APPLICATION_JSON}) + public AjaxResult checkDept( + @PathParam("dept") String dept, + @PathParam("name") String name, + @Context HttpServletRequest request, + @Context HttpServletResponse response) { + + Boolean isContain = this.getServices(request, response).checkDeptAndName(dept, name); + return AjaxResult.ok(isContain, "网约车字段是否显示"); + } + + @GET + @Path("/get/dept/directors/{dept}/{expDept}") + @Produces({MediaType.APPLICATION_JSON}) + public AjaxResult getDeptDirectors( + @PathParam("dept") String dept, + @PathParam("expDept") String expDept, + @Context HttpServletRequest request, + @Context HttpServletResponse response) { + + String directors = this.getServices(request, response).getDirectors(dept, expDept); + return AjaxResult.ok(directors, "获取部门和费用承担部门的部门负责人"); + } + + /** + * 根据项目id获取投行项目信息 code name + * + * @param projectId 项目id + * @return map => projectId projectCode projectName + */ + @GET + @Path("/getProjectInfo") + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult> getProjectById(@QueryParam("projectId") String projectId) { + Map projectParam = new HashMap<>(); + Map data = new HashMap<>(); + try { + if (StringUtils.isBlank(projectId)) { + return AjaxResult.failed("projectId is blank"); + } + projectParam.put("projectId", projectId); + String res = new HTUtil().getProjectById(projectParam); + if (StringUtils.isBlank(res)) { + return AjaxResult.failed("getProjectById api return blank"); + } + JSONObject jsonObject = JSONObject.parseObject(res); + data.put("projectId", projectId); + data.put("projectCode", Util.null2String(jsonObject.get("code"))); + data.put("projectName", Util.null2String(jsonObject.get("shortName"))); + return AjaxResult.ok(data); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("error: " + e); + } + + } + + +} diff --git a/src/main/java/com/engine/htsc/trip/web/BudgetCommitAction.java b/src/main/java/com/engine/htsc/trip/web/BudgetCommitAction.java new file mode 100644 index 0000000..808165c --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/web/BudgetCommitAction.java @@ -0,0 +1,43 @@ +package com.engine.htsc.trip.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.trip.service.BudgetCommitService; +import com.engine.htsc.trip.service.impl.BudgetCommitServiceImpl; +import java.util.HashMap; +import java.util.Map; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; + + +public class BudgetCommitAction { + + BudgetCommitService getService() { + return ServiceUtil.getService(BudgetCommitServiceImpl.class); + } + + @GET + @Path("/doBudgetCommit") + @Produces(MediaType.TEXT_PLAIN) + public String getBudget(@Context HttpServletRequest request, + @Context HttpServletResponse response) { + Map apidatas = new HashMap(); + try { + //实例化Service 并调用业务类处理 + apidatas = getService().budgetCommit(ParamUtil.request2Map(request)); + } catch (Exception e) { + //异常处理 + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + //数据转换 + return JSONObject.toJSONString(apidatas); + } +} diff --git a/src/main/java/com/engine/htsc/trip/web/ConnectInvAndBillAction.java b/src/main/java/com/engine/htsc/trip/web/ConnectInvAndBillAction.java new file mode 100644 index 0000000..2dd9098 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/web/ConnectInvAndBillAction.java @@ -0,0 +1,42 @@ +package com.engine.htsc.trip.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.trip.service.ConnectInvAndBillService; +import com.engine.htsc.trip.service.impl.ConnectInvAndBillServiceImpl; +import java.util.HashMap; +import java.util.Map; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; + +public class ConnectInvAndBillAction { + + ConnectInvAndBillService getService() { + return ServiceUtil.getService(ConnectInvAndBillServiceImpl.class); + } + + @GET + @Path("/doConnectInvAndBill") + @Produces(MediaType.TEXT_PLAIN) + public String connectInvAndBill(@Context HttpServletRequest request, + @Context HttpServletResponse response) { + Map apidatas = new HashMap(); + try { + //实例化Service 并调用业务类处理 + apidatas = getService().connectInvAndBill(ParamUtil.request2Map(request)); + } catch (Exception e) { + //异常处理 + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + //数据转换 + return JSONObject.toJSONString(apidatas); + } +} diff --git a/src/main/java/com/engine/htsc/trip/web/GetBudgetAction.java b/src/main/java/com/engine/htsc/trip/web/GetBudgetAction.java new file mode 100644 index 0000000..2e161f4 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/web/GetBudgetAction.java @@ -0,0 +1,45 @@ +package com.engine.htsc.trip.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.trip.service.GetBudgetService; +import com.engine.htsc.trip.service.ResetImageAndBillService; +import com.engine.htsc.trip.service.impl.GetBudgetServiceImpl; +import com.engine.htsc.trip.service.impl.ResetImageAndBillServiceImpl; +import java.util.HashMap; +import java.util.Map; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; + + +public class GetBudgetAction { + + GetBudgetService getService() { + return ServiceUtil.getService(GetBudgetServiceImpl.class); + } + + @GET + @Path("/doGetBudget") + @Produces(MediaType.TEXT_PLAIN) + public String getBudget(@Context HttpServletRequest request, + @Context HttpServletResponse response) { + Map apidatas = new HashMap(); + try { + //实例化Service 并调用业务类处理 + apidatas = getService().getBudget(ParamUtil.request2Map(request)); + } catch (Exception e) { + //异常处理 + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + //数据转换 + return JSONObject.toJSONString(apidatas); + } +} diff --git a/src/main/java/com/engine/htsc/trip/web/GetCustAction.java b/src/main/java/com/engine/htsc/trip/web/GetCustAction.java new file mode 100644 index 0000000..d2faa08 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/web/GetCustAction.java @@ -0,0 +1,43 @@ +package com.engine.htsc.trip.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.trip.service.GetCustService; +import com.engine.htsc.trip.service.impl.GetCustServiceImpl; +import java.util.HashMap; +import java.util.Map; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; + + +public class GetCustAction { + + GetCustService getService() { + return ServiceUtil.getService(GetCustServiceImpl.class); + } + + @GET + @Path("/doGetCust") + @Produces(MediaType.TEXT_PLAIN) + public String getCust(@Context HttpServletRequest request, + @Context HttpServletResponse response) { + Map apidatas = new HashMap(); + try { + //实例化Service 并调用业务类处理 + apidatas = getService().getCust(ParamUtil.request2Map(request)); + } catch (Exception e) { + //异常处理 + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + //数据转换 + return JSONObject.toJSONString(apidatas); + } +} diff --git a/src/main/java/com/engine/htsc/trip/web/GetImageAction.java b/src/main/java/com/engine/htsc/trip/web/GetImageAction.java new file mode 100644 index 0000000..a2b2b60 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/web/GetImageAction.java @@ -0,0 +1,42 @@ +package com.engine.htsc.trip.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.trip.service.GetImageService; +import com.engine.htsc.trip.service.impl.GetImageServiceImpl; +import java.util.HashMap; +import java.util.Map; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; + +public class GetImageAction { + + GetImageService getService() { + return ServiceUtil.getService(GetImageServiceImpl.class); + } + + @GET + @Path("/doGetImage") + @Produces(MediaType.TEXT_PLAIN) + public String getImage(@Context HttpServletRequest request, + @Context HttpServletResponse response) { + Map apidatas = new HashMap(); + try { + //实例化Service 并调用业务类处理 + apidatas = getService().getImage(ParamUtil.request2Map(request)); + } catch (Exception e) { + //异常处理 + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + //数据转换 + return JSONObject.toJSONString(apidatas); + } +} diff --git a/src/main/java/com/engine/htsc/trip/web/GetProjectAction.java b/src/main/java/com/engine/htsc/trip/web/GetProjectAction.java new file mode 100644 index 0000000..cdc0ed9 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/web/GetProjectAction.java @@ -0,0 +1,62 @@ +package com.engine.htsc.trip.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.trip.service.GetProjectService; +import com.engine.htsc.trip.service.impl.GetProjectServiceImpl; +import java.util.HashMap; +import java.util.Map; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; + + +public class GetProjectAction { + + GetProjectService getService() { + return ServiceUtil.getService(GetProjectServiceImpl.class); + } + + @GET + @Path("/doGetProject") + @Produces(MediaType.TEXT_PLAIN) + public String getProject(@Context HttpServletRequest request, + @Context HttpServletResponse response) { + Map apidatas = new HashMap(); + try { + //实例化Service 并调用业务类处理 + apidatas = getService().getProject(ParamUtil.request2Map(request)); + } catch (Exception e) { + //异常处理 + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + //数据转换 + return JSONObject.toJSONString(apidatas); + } + + @GET + @Path("/doGetProjectByPage") + @Produces(MediaType.TEXT_PLAIN) + public String getProjectByPage(@Context HttpServletRequest request, + @Context HttpServletResponse response) { + Map apidatas = new HashMap(); + try { + //实例化Service 并调用业务类处理 + apidatas = getService().getProjectByPage(ParamUtil.request2Map(request)); + } catch (Exception e) { + //异常处理 + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + //数据转换 + return JSONObject.toJSONString(apidatas); + } +} diff --git a/src/main/java/com/engine/htsc/trip/web/GetStandardAction.java b/src/main/java/com/engine/htsc/trip/web/GetStandardAction.java new file mode 100644 index 0000000..55ab123 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/web/GetStandardAction.java @@ -0,0 +1,51 @@ +package com.engine.htsc.trip.web; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.trip.service.GetStandardService; +import com.engine.htsc.trip.service.impl.GetStandardServiceImpl; +import weaver.general.Util; +import weaver.interfaces.htsc.GlobatTools.JAVATools; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.*; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class GetStandardAction { + + GetStandardService getService() { + return ServiceUtil.getService(GetStandardServiceImpl.class); + } + + /** + * 查询总部差旅报销标准 + */ + @POST + @Path("/doGetStandard") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public String getProject(List> param) { + Map apidatas = new HashMap(); + List> resultList = new ArrayList<>(); + try { + JAVATools.SetCmdwritelog("查询人员差标" + "入参:" + JSONObject.toJSONString(param)); + resultList = getService().getReimbursementStandard(param); + apidatas.put("datas", resultList); + } catch (Exception e) { + //异常处理 + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + //数据转换 + return JSONObject.toJSONString(apidatas); + } +} diff --git a/src/main/java/com/engine/htsc/trip/web/QueryInvoiceAction.java b/src/main/java/com/engine/htsc/trip/web/QueryInvoiceAction.java new file mode 100644 index 0000000..424dc62 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/web/QueryInvoiceAction.java @@ -0,0 +1,43 @@ +package com.engine.htsc.trip.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.trip.service.QueryInvoiceService; +import com.engine.htsc.trip.service.impl.QueryInvoiceServiceImpl; +import java.util.HashMap; +import java.util.Map; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; + +public class QueryInvoiceAction { + + QueryInvoiceService getService() { + return ServiceUtil.getService(QueryInvoiceServiceImpl.class); + } + + @GET + @Path("/doQueryInvoice") + @Produces(MediaType.TEXT_PLAIN) + public String queryInvoice(@Context HttpServletRequest request, + @Context HttpServletResponse response) { + Map apidatas = new HashMap(); + try { + //实例化Service 并调用业务类处理 + apidatas = getService().queryInvoice(ParamUtil.request2Map(request)); + } catch (Exception e) { + //异常处理 + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + //数据转换 + return JSONObject.toJSONString(apidatas); + } + +} diff --git a/src/main/java/com/engine/htsc/trip/web/ReimbursementAction.java b/src/main/java/com/engine/htsc/trip/web/ReimbursementAction.java new file mode 100644 index 0000000..0f4e4f5 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/web/ReimbursementAction.java @@ -0,0 +1,373 @@ +package com.engine.htsc.trip.web; + +import com.engine.common.util.ParamUtil; +import com.engine.htsc.trip.service.ReimbursementService; +import com.engine.htsc.trip.service.impl.ReimbursementServiceImpl; +import com.engine.htsc.trip.util.AjaxResult; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.trip.util.LogUtil; +import com.engine.htsc.trip.util.WeaverUtil; +import org.apache.commons.lang3.ArrayUtils; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; +import weaver.system.code.CodeBuild; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.*; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.*; +import java.util.stream.Collectors; + +/** + * Created by qlk + */ +public class ReimbursementAction { + public ReimbursementAction() { + } + + private ReimbursementService getServices(HttpServletRequest request, HttpServletResponse response) { + User user = HrmUserVarify.getUser(request, response); + return ServiceUtil.getService(ReimbursementServiceImpl.class, user); + } + + @GET + @Path("/self/pay") + @Produces({MediaType.APPLICATION_JSON}) + public AjaxResult getSelfPayMark(@QueryParam("requestid") String requestId) { + try { + RecordSet rs = new RecordSet(); + String tableName = WeaverUtil.getTableNameByRequestId(requestId, rs); + rs.executeQuery("select YWZFFYDBX from " + tableName + " where REQUESTID=?", requestId); + String selfPayMark = ""; + if (rs.next()) { + selfPayMark = Util.null2String(rs.getString("YWZFFYDBX")); + } + return AjaxResult.ok(selfPayMark); + } catch (Exception e) { + return AjaxResult.error(e.getMessage()); + } + + } + + @GET + @Path("/bring/dt12/{formTable}/{requestIds}") + @Produces({MediaType.APPLICATION_JSON}) + public AjaxResult>> getDt12( + @PathParam("formTable") String formTable, + @PathParam("requestIds") String requestIds, + @Context HttpServletRequest request, + @Context HttpServletResponse response) { + + List> details = this.getServices(request, response).bringDt12(formTable, requestIds); + return AjaxResult.ok(details, "报销带出费用明细"); + } + + @GET + @Path("/bring/dt13/{formTable}/{requestIds}") + @Produces({MediaType.APPLICATION_JSON}) + public AjaxResult>> getDt13( + @PathParam("formTable") String formTable, + @PathParam("requestIds") String requestIds, + @Context HttpServletRequest request, + @Context HttpServletResponse response) { + + List> details = this.getServices(request, response).bringDt13(formTable, requestIds); + return AjaxResult.ok(details, "报销带出行程明细"); + } + + @GET + @Path("/bring/claimant/{formTable}/{requestIds}") + @Produces({MediaType.APPLICATION_JSON}) + public AjaxResult> getClaimant( + @PathParam("formTable") String formTable, + @PathParam("requestIds") String requestIds, + @Context HttpServletRequest request, + @Context HttpServletResponse response) { + + Map details = this.getServices(request, response).bringClaimant(formTable, requestIds); + return AjaxResult.ok(details, "报销带出报销人"); + } + + @GET + @Path("/check/leader/{ngr}") + @Produces({MediaType.APPLICATION_JSON}) + public AjaxResult isLeader( + @PathParam("ngr") String ngr, + @Context HttpServletRequest request, + @Context HttpServletResponse response) { + + boolean isLeader = this.getServices(request, response).checkLeader(ngr); + return AjaxResult.ok(isLeader, "校验拟稿人是否为领导"); + } + + @GET + @Path("/get/apInfo/{gllc}") + @Produces({MediaType.APPLICATION_JSON}) + public AjaxResult>> getAssociationProcessInfo( + @PathParam("gllc") String lcs, + @Context HttpServletRequest request, + @Context HttpServletResponse response) { + if ("".equals(lcs)) { + return AjaxResult.failed(); + } + List> apInfo = this.getServices(request, response).getApInfo(lcs); + return AjaxResult.ok(apInfo, "获取关联流程信息,返回关联流程的名称和已报销次数"); + } + + @GET + @Path("/get/deptbrowserbtn/{ccr}/{lc}") + @Produces({MediaType.APPLICATION_JSON}) + public AjaxResult> getDbmBrowserBtn( + @PathParam("ccr") String ccr, + @PathParam("lc") String lc, + @Context HttpServletRequest request, + @Context HttpServletResponse response) { + + Map addObj = this.getServices(request, response).getBrowserBtn(ccr, lc); + return AjaxResult.ok(addObj, "获取多部门浏览按钮addObj对象"); + } + + @GET + @Path("/get/bankinfo/{ngr}/{bxr}") + @Produces({MediaType.APPLICATION_JSON}) + public AjaxResult> getBankInfo( + @PathParam("ngr") String ngr, + @PathParam("bxr") String bxr, + @Context HttpServletRequest request, + @Context HttpServletResponse response) { + + Map addObj = this.getServices(request, response).getBankInfo(ngr, bxr); + return AjaxResult.ok(addObj, "获取员工的银行账号、开户行信息"); + } + + @GET + @Path("/standard/trip/{traveler}/{destination}") + @Produces({MediaType.APPLICATION_JSON}) + public AjaxResult> standard( + @PathParam("traveler") String traveler, + @PathParam("destination") String destination, + @Context HttpServletRequest request, + @Context HttpServletResponse response) { + + List travelStandard = this.getServices(request, response).getTravelStandardForSingle(traveler, destination); + return AjaxResult.ok(travelStandard, "报销流程明细行差标"); + } + + @GET + @Path("/get/gsxmbrowserbtn/{ccr}/{lc}") + @Produces({MediaType.APPLICATION_JSON}) + public AjaxResult> getGsxm( + @PathParam("ccr") String ccr, + @PathParam("lc") String lc, + @Context HttpServletRequest request, + @Context HttpServletResponse response) { + + Map addObj = this.getServices(request, response).getGsxmBrowserBtn(ccr, lc); + return AjaxResult.ok(addObj, "获取关联出差申请的投行项目(报销明细表8)"); + } + + @GET + @Path("/get/Accounting/{bxd}") + @Produces({MediaType.APPLICATION_JSON}) + public AjaxResult> getAccountingByLocation( + @PathParam("bxd") String bxd, + @Context HttpServletRequest request, + @Context HttpServletResponse response) { + + List accounting = this.getServices(request, response).getAccountingByLocation(bxd); + return AjaxResult.ok(accounting, "报销地确认报销地费用会计"); + } + + @GET + @Path("/get/Subsidy/{requestid}") + @Produces({MediaType.APPLICATION_JSON}) + public AjaxResult>> getSubsidyStandard( + @PathParam("requestid") String requestid, + @Context HttpServletRequest request, + @Context HttpServletResponse response) { + + List> res = null; + try { + res = this.getServices(request, response).getSubsidyStandard(requestid); + return AjaxResult.ok(res, "获取出差补贴标准"); + } catch (Exception e) { + return AjaxResult.error(); + } + + } + + @GET + @Path("/get/bankinfomation/{hrmid}") + @Produces({MediaType.APPLICATION_JSON}) + public AjaxResult> getBankInfo( + @PathParam("hrmid") String hrmid, + @Context HttpServletRequest request, + @Context HttpServletResponse response + ) { + Map res; + try { + res = this.getServices(request, response).getBankInfoFormOADB(hrmid); + return AjaxResult.ok(res); + } catch (Exception e) { + return AjaxResult.error(); + } + } + + @GET + @Path("/get/getRelatedInfo/{gllc}") + @Produces({MediaType.APPLICATION_JSON}) + public AjaxResult>> getRelatedInfo( + @PathParam("gllc") String gllc, + @Context HttpServletRequest request, + @Context HttpServletResponse response + ) { + Map> relatedInfo; + try { + relatedInfo = this.getServices(request, response).getRelatedInfo(gllc); + return AjaxResult.ok(relatedInfo); + } catch (Exception e) { + return AjaxResult.error(); + } + } + + @GET + @Path("/doBudgerCommit") + @Produces({MediaType.APPLICATION_JSON}) + public AjaxResult> doBudgerCommit( + @QueryParam("requestid") String requsetid, + @QueryParam("billStatus") String billStatus, + @Context HttpServletRequest request, + @Context HttpServletResponse response + ) { + String res = ""; + Map resMap = new HashMap<>(); + try { + if ("".equals(requsetid)) { + return AjaxResult.failed("requestid为空"); + } + String[] reqids = requsetid.split(","); + for (String reqid : reqids) { + res = this.getServices(request, response).doBudgetCommit(reqid, billStatus); + resMap.put(reqid, res); + } + return AjaxResult.ok(resMap); + } catch (Exception e) { + return AjaxResult.failed("异常: [" + e + "]"); + } + } + + @GET + @Path("/doUpdateEnclosure") + @Produces({MediaType.TEXT_PLAIN}) + public String updateEnclosure( + @QueryParam("requestid") String requestid, + @QueryParam("fj") String fj, + @Context HttpServletRequest request, + @Context HttpServletResponse response + ) { + String res = ""; + try { + LogUtil logUtil = new LogUtil(); + RecordSet rs = new RecordSet(); + String tablename = WeaverUtil.getTableNameByRequestId(requestid, rs); + if (!"".equals(tablename)) { + //原始附件类型 + String select_fj_sql = "select fj from " + tablename + " where requestid=" + requestid; + logUtil.writeLog("doUpdateEnclosure fj_sql执行: [" + select_fj_sql + "]"); + String org_fj = ""; + rs.executeQuery(select_fj_sql); + if (rs.next()) { + org_fj = Util.null2String(rs.getString("fj")); + } + if (!"".equals(org_fj)) { + String fjs = org_fj + "," + fj; + List collect = Arrays.stream(fjs.split(",")).distinct().collect(Collectors.toList()); + fj = String.join(",", collect); + } + + String update_bx_sql = "update " + tablename + " set fj='" + fj + "' where requestid=" + requestid; + logUtil.writeLog("doUpdateEnclosure update_bx_sql执行: [" + update_bx_sql + "]"); + rs.executeUpdate(update_bx_sql); + return "更新表单成功"; + } else { + return "流程无对应表单"; + } + } catch (Exception e) { + return "异常"; + } + } + + @GET + @Path("/generateLcbh") + @Produces({MediaType.TEXT_PLAIN}) + public String generateLcbh( + @QueryParam("formid") int formid, + @QueryParam("requestid") int requestid, + @Context HttpServletRequest request, + @Context HttpServletResponse response + ) { + LogUtil logUtil = new LogUtil(); + logUtil.writeLog("[formid]: " + formid + " [requestid]: " + requestid); + CodeBuild cbuild = new CodeBuild(formid); + String flowCodeStr = cbuild.getFlowCodeStr(requestid, 1); + logUtil.writeLog("[flowCodeStr]: [" + flowCodeStr + "]"); + return flowCodeStr; + } + + @POST + @Path("/updateBudgetMiddleTable") + @Produces({MediaType.TEXT_PLAIN}) + public AjaxResult updateBudgetRecords( + @Context HttpServletRequest request, + @Context HttpServletResponse response + ) { + Boolean isOk = this.getServices(request, response).doBudgetMiddleTable(ParamUtil.request2Map(request)); + return AjaxResult.ok(isOk); + } + + @GET + @Path("/monthlyAllowance") + @Produces({MediaType.APPLICATION_JSON}) + public AjaxResult>> monthlyAllowance( + @QueryParam("date") String date, + @Context HttpServletRequest request, + @Context HttpServletResponse response + ) { + List> resp; + try { + Map params = new HashMap<>(); + params.put("date", date); + resp = this.getServices(request, response).monthlyAllowance(params); + return AjaxResult.ok(resp); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.failed("接口异常,"+ e); + } + } + + @GET + @Path("/monthlyAllowance/trip") + @Produces({MediaType.APPLICATION_JSON}) + public AjaxResult>> monthlyAllowance4Trip( + @QueryParam("startDate") String startDate, + @QueryParam("endDate") String endDate, + @Context HttpServletRequest request, + @Context HttpServletResponse response + ) { + List> resp; + try { + Map params = new HashMap<>(); + params.put("startDate", startDate); + params.put("endDate", endDate); + resp = this.getServices(request, response).monthlyAllowance4BusinessTrip(params); + return AjaxResult.ok(resp); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.failed("接口异常,"+ e); + } + } +} diff --git a/src/main/java/com/engine/htsc/trip/web/ResetImageAndBillAction.java b/src/main/java/com/engine/htsc/trip/web/ResetImageAndBillAction.java new file mode 100644 index 0000000..8f4d396 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/web/ResetImageAndBillAction.java @@ -0,0 +1,42 @@ +package com.engine.htsc.trip.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.trip.service.ResetImageAndBillService; +import com.engine.htsc.trip.service.impl.ResetImageAndBillServiceImpl; +import java.util.HashMap; +import java.util.Map; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; + +public class ResetImageAndBillAction { + + ResetImageAndBillService getService() { + return ServiceUtil.getService(ResetImageAndBillServiceImpl.class); + } + + @GET + @Path("/doResetImageAndBill") + @Produces(MediaType.TEXT_PLAIN) + public String resetImageAndBill(@Context HttpServletRequest request, + @Context HttpServletResponse response) { + Map apidatas = new HashMap(); + try { + //实例化Service 并调用业务类处理 + apidatas = getService().resetImageAndBill(ParamUtil.request2Map(request)); + } catch (Exception e) { + //异常处理 + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + //数据转换 + return JSONObject.toJSONString(apidatas); + } +} diff --git a/src/main/java/com/engine/htsc/trip/web/SaveFydjAction.java b/src/main/java/com/engine/htsc/trip/web/SaveFydjAction.java new file mode 100644 index 0000000..2b8aac2 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/web/SaveFydjAction.java @@ -0,0 +1,43 @@ +package com.engine.htsc.trip.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.trip.service.SaveFydjService; +import com.engine.htsc.trip.service.impl.SaveFydjServiceImpl; +import java.util.HashMap; +import java.util.Map; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; + + +public class SaveFydjAction { + + SaveFydjService getService() { + return ServiceUtil.getService(SaveFydjServiceImpl.class); + } + + @GET + @Path("/doSaveFydj") + @Produces(MediaType.TEXT_PLAIN) + public String saveFydj(@Context HttpServletRequest request, + @Context HttpServletResponse response) { + Map apidatas = new HashMap(); + try { + //实例化Service 并调用业务类处理 + apidatas = getService().saveFydj(ParamUtil.request2Map(request)); + } catch (Exception e) { + //异常处理 + e.printStackTrace(); + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + //数据转换 + return JSONObject.toJSONString(apidatas); + } +} diff --git a/src/main/java/com/engine/htsc/trip/web/SaveTripAgainAction.java b/src/main/java/com/engine/htsc/trip/web/SaveTripAgainAction.java new file mode 100644 index 0000000..34f3c3b --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/web/SaveTripAgainAction.java @@ -0,0 +1,80 @@ +package com.engine.htsc.trip.web; + +import com.engine.common.util.ParamUtil; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.interfaces.htsc.cus.HTUtil; +import weaver.interfaces.workflow.action.Action; +import weaver.soa.workflow.request.RequestInfo; +import weaver.workflow.request.RequestManager; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Author:DTY-PC + * Date:2020/10/21 18:26 + * Description: 提交时调用保存行程接口 + * Copyright:上海泛微网络科技股份有限公司 + */ +public class SaveTripAgainAction { + + private final Log log = LogFactory.getLog(SaveTripAgainAction.class.getName()); + + + @GET + @Path("/saveAgain") + @Produces(MediaType.TEXT_PLAIN) + public String saveAgain(@Context HttpServletRequest request, + @Context HttpServletResponse response) { + Map paras = ParamUtil.request2Map(request); + String requestIdList = Util.null2String(Util.null2String(paras.get("requestIdList"))); + String tableName = Util.null2String(Util.null2String(paras.get("tableMain"))); + String status = Util.null2String(Util.null2String(paras.get("status"))); + String[] requestIdLists = requestIdList.split(","); + for(String requestid:requestIdLists) { + try { + HTUtil htUtil = new HTUtil(); + Map para = new HashMap<>(); + para.put("requestid", requestid); + para.put("status", status); + RecordSet rs = new RecordSet(); + rs.executeQuery("select CCQK,LCBH,NGRGH from " + tableName + " where REQUESTID=" + requestid); + String ccqkValue = ""; + if (rs.next()) { + ccqkValue = rs.getString("CCQK"); + } + //取消行程到办结的行程不调用保存行程接口 + if ("3".equals(ccqkValue)) { + log.info("流程" + requestid + "已被取消"); + return null; + } + String res = htUtil.getSaveTripReqString(para); + if(StringUtils.isNotEmpty(res) && !"-1".equals(res)) { + boolean saveTrip = htUtil.saveTrip(res); + if (!saveTrip) { + log.info("流程" + requestid + "写入失败"); + } + } + log.info("入参: " + res); + } catch (Exception e) { + e.printStackTrace(); + return Action.FAILURE_AND_CONTINUE; + } + } + return Action.SUCCESS; + } +} diff --git a/src/main/java/com/engine/htsc/trip/web/TripExcelOutApiAction.java b/src/main/java/com/engine/htsc/trip/web/TripExcelOutApiAction.java new file mode 100644 index 0000000..de50d08 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/web/TripExcelOutApiAction.java @@ -0,0 +1,104 @@ +package com.engine.htsc.trip.web; + +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.trip.pojo.UnionStroke; +import com.engine.htsc.trip.pojo.UnionTraveler; +import com.engine.htsc.trip.service.TripExcelOutService; +import com.engine.htsc.trip.service.impl.TripExcelOutServiceImpl; +import com.engine.htsc.trip.util.AjaxResult; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.*; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.net.URLEncoder; +import java.util.List; + +public class TripExcelOutApiAction { + + private TripExcelOutService getService() { + return ServiceUtil.getService(TripExcelOutServiceImpl.class); + } + + @GET + @Path("/travel") + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult exportTravelStuff( + @QueryParam("startTime") @DefaultValue("2021-01-01") String startTime, + @QueryParam("endTime") String endTime, + @Context HttpServletRequest request, + @Context HttpServletResponse response) { + try { + String sheetOneSql = "\n" + + "select t1.LCBH,t2.REQUESTNAME,t1.NGR,t1.NGRQ,\n" + + " t1.cclxzxx,\n" + + " t1.TXXMJC,t1.TXXMBH,t1.xmjc,\n" + + " t1.KHBM,t1.KHMC,\n" + + " t1.CCQK,\n" + + " t1.XDFHSJ,\n" + + "\n" + + " t3.CCRGH,\n" + + " t3.XM,\n" + + " t3.BM,t3.BMFZR,\n" + + " t3.FYCDBM,t3.FYCDBMFZR,\n" + + " t3.GZD,t3.ZJ,t3.BXD\n" + + "\n" + + "from FORMTABLE_MAIN_58 t1\n" + + "left join WORKFLOW_REQUESTBASE t2\n" + + "on t1.REQUESTID=t2.REQUESTID\n" + + "left join FORMTABLE_MAIN_58_DT2 t3\n" + + "on t1.ID=t3.MAINID\n" + + "where t1.LCBH is not null and t1.CCQK is not null and t1.CCLXZXX is not null\n" + + "and to_date(t1.NGRQ,'yyyy-MM-dd HH24:MI:SS')\n" + + "between to_date('" + startTime + "','yyyy-MM-dd') and to_date('" + endTime + "','yyyy-MM-dd')"; + + + String sheetTSql = "select t1.LCBH,t2.REQUESTNAME,t1.NGR,t1.NGRQ,\n" + + " t1.cclxzxx,\n" + + " t1.TXXMJC,t1.TXXMBH,t1.xmjc,\n" + + " t1.KHBM,t1.KHMC,\n" + + " t1.CCQK,\n" + + " t1.XDFHSJ,\n" + + "\n" + + " t3.SFBC,t3.CFDGN,t3.MDDGN,t3.CFDHW,t3.MDDHW,t3.CFSJ,t3.FHSJ\n" + + "\n" + + "from FORMTABLE_MAIN_58 t1\n" + + "left join WORKFLOW_REQUESTBASE t2\n" + + "on t1.REQUESTID=t2.REQUESTID\n" + + "left join FORMTABLE_MAIN_58_DT3 t3\n" + + "on t1.ID=t3.MAINID\n" + + "where t1.LCBH is not null and t1.CCQK is not null and t1.CCLXZXX is not null and\n" + + "to_date(t1.NGRQ,'yyyy-MM-dd HH24:MI:SS')\n" + + "between to_date('" + startTime + "','yyyy-MM-dd') and to_date('" + endTime + "','yyyy-MM-dd')"; + + List travelerData = getService().getTravelerData(sheetOneSql); + List strokeData = getService().getStrokeData(sheetTSql); + + String excelName = "联合出差流程数据导出"; + // 指定下载的文件名--设置响应头 +// response.setContentType("application/vnd.ms-excel"); +// response.setCharacterEncoding("utf-8"); + // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系 +// excelName = URLEncoder.encode(excelName, "UTF-8"); +// response.setHeader("Content-disposition", "attachment;filename=" + excelName + ".xlsx"); + + //这里 需要指定写用哪个class去写 + String fileName = "/app/excel/" + excelName + ".xlsx"; + ExcelWriter excelWriter = EasyExcel.write(fileName).build(); + WriteSheet t = EasyExcel.writerSheet(0, "出差人").build(); + WriteSheet s = EasyExcel.writerSheet(1, "行程").build(); + excelWriter.write(travelerData, t).write(strokeData, s); + excelWriter.finish(); + + return AjaxResult.ok("success"); + } catch (Exception e) { + return AjaxResult.error(e.getMessage()); + } + } + + +} diff --git a/src/main/java/com/engine/htsc/tripInfo/cmd/TripInfoCmd.java b/src/main/java/com/engine/htsc/tripInfo/cmd/TripInfoCmd.java new file mode 100644 index 0000000..5e33075 --- /dev/null +++ b/src/main/java/com/engine/htsc/tripInfo/cmd/TripInfoCmd.java @@ -0,0 +1,207 @@ +package com.engine.htsc.tripInfo.cmd; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.htsc.cus.HTUtil; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Author:DTY-PC + * Date:2020/10/29 10:59 + * Description: + * Copyright:上海泛微网络科技股份有限公司 + */ +public class TripInfoCmd extends AbstractCommonCommand> { + private Log log = LogFactory.getLog(this.getClass()); + public TripInfoCmd(User user,Map params) { + this.user = user; + this.params = params; + } + + + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + Map apidatas = new HashMap<>(); + try { + HTUtil ht = new HTUtil(); + DepartmentComInfo dc = new DepartmentComInfo(); + String reqids = Util.null2String(params.get("reqids"));//请求id的拼接字符串 + List reqList = Util.splitString2List(reqids,","); + //联合出差流程的主表名 + String tableName = Util.null2String(ht.getTableNameByRequestid(reqList.get(0),"0")); + String tableDt2Name = tableName+"_dt2";//明细2 + String tableDt3Name = tableName+"_dt3";//明细3 + String tableDt4Name = tableName+"_dt4";//数据取值 明细4 + String sql = "select m.szjg,m.sfhwcc,m.cclx,m.cclxzxx,d.xm,d.bm,d.fycdbm,m.xmjc,m.custname,m.xmjc from "+tableName+" m," + +tableDt2Name+" d where m.id = d.mainid and m.requestid = ?"; + String sql_dt4 = "select h.lastname,d3.cfsj,'9:00' begintime,d3.fhsj,'18:00' endtime,d3.cfdgn,d3.mddgn,d3.cfdhw,d3.mddhw,d2.xm \n" + + " from "+tableName+" m\n" + + " left join "+tableDt2Name+" d2\n" + + " on m.id = d2.mainid\n" + + " left join hrmresource h\n" + + " on d2.xm = h.id\n" + + " left join "+tableDt4Name+" d3\n" + + " on m.id = d3.mainid\n" + + " where d3.CFSJ IS NOT NULL AND m.requestid = ?"; + RecordSet rs = new RecordSet(); + RecordSet rs_dt3 = new RecordSet(); + ResourceComInfo rc = new ResourceComInfo(); + JSONArray arrayFee = new JSONArray();//差旅费用 + JSONArray arrayTrip = new JSONArray();//行程信息 + Map mutilHrm = new HashMap<>();//提供给主表的多人的【报销人员】 + for(String reqid : reqList){ + rs.executeQuery(sql,new Object[]{reqid}); + while(rs.next()){ + JSONObject obj = new JSONObject(); + String szjg = Util.null2String(rs.getString("szjg"));//所在机构 + String sfhwcc = Util.null2String(rs.getString("sfhwcc"));//是否海外出差 + String cclx = Util.null2String(rs.getString("cclx"));//出差类型 + String cclxzxx = Util.null2String(rs.getString("cclxzxx"));//出差类型子选项 + String hrmid = Util.null2String(rs.getString("xm"));//出差人员ID + String bm = Util.null2String(rs.getString("bm"));//部门 + String fycdbm = Util.null2String(rs.getString("fycdbm"));//费用承担部门 + String lastname = Util.null2String(rc.getLastname(hrmid));//出差人员姓名 + String thxmbm = Util.null2String(rs.getString("xmjc"));//投行项目编码 + String custname = Util.null2String(rs.getString("custname"));//CRM客户 + String xmjc = Util.null2String(rs.getString("xmjc"));//投行项目 + + obj.put("sfhwcc",sfhwcc); + obj.put("cclx",cclx); + obj.put("cclxzxx",cclxzxx); + obj.put("hrmid",hrmid); + obj.put("lastname",lastname); + obj.put("reqid",reqid); + obj.put("bm",bm); + obj.put("bmname",dc.getDepartmentName(bm)); + obj.put("fycdbm",fycdbm); + obj.put("fycdbmname",dc.getDepartmentName(fycdbm)); + obj.put("szjg",szjg); + obj.put("szjgname",dc.getDepartmentName(szjg)); + obj.put("thxmbm",thxmbm); + obj.put("cust",custname); + obj.put("custname",dc.getDepartmentName(custname)); + obj.put("xmjc",xmjc); + obj.put("xmjcname",dc.getDepartmentName(xmjc)); + arrayFee.add(obj); + } + rs_dt3.executeQuery(sql_dt4,new Object[]{reqid}); + + while(rs_dt3.next()){ + JSONObject obj = new JSONObject(); + String lastname = Util.null2String(rs_dt3.getString("lastname")); + String cfsj = Util.null2String(rs_dt3.getString("cfsj")); + String begintime = Util.null2String(rs_dt3.getString("begintime")); + String fhsj = Util.null2String(rs_dt3.getString("fhsj")); + String endtime = Util.null2String(rs_dt3.getString("endtime")); + String cfdgn = Util.null2String(rs_dt3.getString("cfdgn")); + String mddgn = Util.null2String(rs_dt3.getString("mddgn")); + String cfdhw = Util.null2String(rs_dt3.getString("cfdhw")); + String mddhw = Util.null2String(rs_dt3.getString("mddhw")); + String hrmid = Util.null2String(rs_dt3.getString("xm")); + obj.put("lastname",lastname); + obj.put("hrmid",hrmid); + mutilHrm.put(hrmid,lastname); + obj.put("cfsj",cfsj); + obj.put("begintime",begintime); + obj.put("fhsj",fhsj); + obj.put("endtime",endtime); + obj.put("cfdgn",cfdgn); + obj.put("mddgn",mddgn); + obj.put("cfdhw",cfdhw); + obj.put("mddhw",mddhw); + obj.put("reqid",reqid); + arrayTrip.add(obj); + } + + if (CollectionUtils.isEmpty(arrayTrip)) { + //明细4里没有数据,取明细3; 适配历史数据 + String sql_dt3 = "select h.lastname,d3.cfsj,'9:00' begintime,d3.fhsj,'18:00' endtime,d3.cfdgn,d3.mddgn,d3.cfdhw,d3.mddhw,d2.xm \n" + + " from "+tableName+" m\n" + + " left join "+tableDt2Name+" d2\n" + + " on m.id = d2.mainid\n" + + " left join hrmresource h\n" + + " on d2.xm = h.id\n" + + " left join "+tableDt3Name+" d3\n" + + " on m.id = d3.mainid\n" + + " where m.requestid = ?"; + rs_dt3.executeQuery(sql_dt3,new Object[]{reqid}); + + while(rs_dt3.next()){ + JSONObject obj = new JSONObject(); + String lastname = Util.null2String(rs_dt3.getString("lastname")); + String cfsj = Util.null2String(rs_dt3.getString("cfsj")); + String begintime = Util.null2String(rs_dt3.getString("begintime")); + String fhsj = Util.null2String(rs_dt3.getString("fhsj")); + String endtime = Util.null2String(rs_dt3.getString("endtime")); + String cfdgn = Util.null2String(rs_dt3.getString("cfdgn")); + String mddgn = Util.null2String(rs_dt3.getString("mddgn")); + String cfdhw = Util.null2String(rs_dt3.getString("cfdhw")); + String mddhw = Util.null2String(rs_dt3.getString("mddhw")); + String hrmid = Util.null2String(rs_dt3.getString("xm")); + obj.put("lastname",lastname); + obj.put("hrmid",hrmid); + mutilHrm.put(hrmid,lastname); + obj.put("cfsj",cfsj); + obj.put("begintime",begintime); + obj.put("fhsj",fhsj); + obj.put("endtime",endtime); + obj.put("cfdgn",cfdgn); + obj.put("mddgn",mddgn); + obj.put("cfdhw",cfdhw); + obj.put("mddhw",mddhw); + obj.put("reqid",reqid); + arrayTrip.add(obj); + } + } + } + JSONObject mutiObj = new JSONObject(); + JSONArray specArr = new JSONArray(); + List keys = new ArrayList<>(); + for(Map.Entry entry : mutilHrm.entrySet()){ + keys.add(entry.getKey()); + JSONObject specObj = new JSONObject(); + specObj.put("id",entry.getKey()); + specObj.put("name",entry.getValue()); + specArr.add(specObj); + } + mutiObj.put("value",StringUtils.join(keys.toArray(),",")); + mutiObj.put("specialobj",specArr); + JSONObject info = new JSONObject(); + + info.put("travel",arrayFee); + info.put("mutiObj",mutiObj); + info.put("trip",arrayTrip); + apidatas.put("api_status",true); + apidatas.put("info",info); + }catch (Exception e){ + e.printStackTrace(); + apidatas.put("api_status",false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } + return apidatas; + } + + + +} diff --git a/src/main/java/com/engine/htsc/tripInfo/service/TripInfoService.java b/src/main/java/com/engine/htsc/tripInfo/service/TripInfoService.java new file mode 100644 index 0000000..1fa4739 --- /dev/null +++ b/src/main/java/com/engine/htsc/tripInfo/service/TripInfoService.java @@ -0,0 +1,20 @@ +package com.engine.htsc.tripInfo.service; + +import java.util.Map; + +/** + * Author:DTY-PC + * Date:2020/10/29 11:03 + * Description: + * Copyright:上海泛微网络科技股份有限公司 + */ +public interface TripInfoService { + /** + * 获取行程以及差旅信息 + * @param params + * @return + */ + Map getTripInfo(Map params); + + +} diff --git a/src/main/java/com/engine/htsc/tripInfo/service/impl/TripInfoServiceImpl.java b/src/main/java/com/engine/htsc/tripInfo/service/impl/TripInfoServiceImpl.java new file mode 100644 index 0000000..1eabe18 --- /dev/null +++ b/src/main/java/com/engine/htsc/tripInfo/service/impl/TripInfoServiceImpl.java @@ -0,0 +1,21 @@ +package com.engine.htsc.tripInfo.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.tripInfo.cmd.TripInfoCmd; +import com.engine.htsc.tripInfo.service.TripInfoService; + +import java.util.Map; + +/** + * Author:DTY-PC + * Date:2020/10/29 11:07 + * Description: 联合差旅报销带出出差流程的行程信息和差旅费用信息 + * Copyright:上海泛微网络科技股份有限公司 + */ +public class TripInfoServiceImpl extends Service implements TripInfoService { + @Override + public Map getTripInfo(Map params) { + return commandExecutor.execute(new TripInfoCmd(user,params)); + } + +} diff --git a/src/main/java/com/engine/htsc/tripInfo/web/TripInfoAction.java b/src/main/java/com/engine/htsc/tripInfo/web/TripInfoAction.java new file mode 100644 index 0000000..03a58ba --- /dev/null +++ b/src/main/java/com/engine/htsc/tripInfo/web/TripInfoAction.java @@ -0,0 +1,54 @@ +package com.engine.htsc.tripInfo.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.tripInfo.service.TripInfoService; +import com.engine.htsc.tripInfo.service.impl.TripInfoServiceImpl; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +/** + * Author:DTY-PC + * Date:2020/10/29 11:11 + * Description: + * Copyright:上海泛微网络科技股份有限公司 + */ +public class TripInfoAction { + private Log log = LogFactory.getLog(this.getClass()); + private TripInfoService getService(User user){ + return ServiceUtil.getService(TripInfoServiceImpl.class,user); + } + + @POST + @Path("/getTripInfo") + @Produces(MediaType.TEXT_PLAIN) + public String getTripInfo(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = new HashMap<>(); + try { + User user = HrmUserVarify.getUser(request, response); + Map para = ParamUtil.request2Map(request); + apidatas.putAll(getService(user).getTripInfo(para)); + apidatas.put("api_status", true); + }catch (Exception e){ + e.printStackTrace(); + apidatas.put("api_status",false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + log.error("getTripInfo catch exception"); + } + return JSONObject.toJSONString(apidatas); + + } +} diff --git a/src/main/java/com/engine/htsc/uploadfile/web/UploadFileAction.java b/src/main/java/com/engine/htsc/uploadfile/web/UploadFileAction.java new file mode 100644 index 0000000..a33c88b --- /dev/null +++ b/src/main/java/com/engine/htsc/uploadfile/web/UploadFileAction.java @@ -0,0 +1,76 @@ +package com.engine.htsc.uploadfile.web; + +import com.alibaba.fastjson.JSONObject; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; + +public class UploadFileAction { + + @POST + @Path("/uploadfile") + @Produces(MediaType.TEXT_PLAIN) + public String uploadfile(@Context HttpServletRequest request, @Context HttpServletResponse response){ + + Map apidatas = new HashMap(); + + String fileName = request.getParameter("fileName"); + System.out.println("filename:"+fileName); + String fileparth = "/usr/appadmin/video/" ; + String fileFullPath = fileparth + fileName; + + InputStream ins = null; + FileOutputStream fos = null; + try { + ins = request.getInputStream(); + File file = new File(fileparth); + if(!file.exists()){ + file.mkdirs(); + } + fos = new FileOutputStream(fileFullPath); + int size = 0; + int byteLength = 8196; + byte[] buffer = new byte[byteLength]; + while ((size = ins.read(buffer,0,byteLength)) != -1) { + fos.write(buffer, 0, size); + } + fos.close(); + ins.close(); + + apidatas.put("filepath", fileparth); + apidatas.put("api_status", true); + } catch (IOException e) { + apidatas.put("api_status", false); + apidatas.put("api_errormsg", "catch exception : " + e.getMessage()); + } finally{ + try { + if(ins != null){ + ins.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + + try { + if(fos != null){ + fos.close(); + } + }catch (IOException e) { + e.printStackTrace(); + } + } + return JSONObject.toJSONString(apidatas); + } + +} diff --git a/src/main/java/com/engine/htsc/wdlb/web/WdlbControlAction.java b/src/main/java/com/engine/htsc/wdlb/web/WdlbControlAction.java new file mode 100644 index 0000000..202b7cb --- /dev/null +++ b/src/main/java/com/engine/htsc/wdlb/web/WdlbControlAction.java @@ -0,0 +1,270 @@ +package com.engine.htsc.wdlb.web; + +import com.alibaba.fastjson.JSONObject; +import weaver.conn.RecordSet; +import weaver.general.GCONST; +import weaver.general.Util; +import weaver.interfaces.htsc.GlobatTools.JAVATools; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class WdlbControlAction { + + /** + * 文档建模查询列表是否可以删除 + * @param request + * @param response + * @return + */ + @GET + @Path("/wdlbIfDelete") + @Produces({MediaType.TEXT_PLAIN}) + public String wdlbIfDelete(@Context HttpServletRequest request, @Context HttpServletResponse response) { + + JSONObject jsonObject = new JSONObject(); + Integer idNew = Util.getIntValue(request.getParameter("id"),1); + try{ + Integer ifcomplete = 0; + Integer iscompleteTrue = 0; + Integer isDetele = 0; + String btNew = ""; + String tablename=JAVATools.GetUnumbertotable("mbwj"); + RecordSet wdReuqestId= new RecordSet(); + wdReuqestId.execute("SELECT requestid FROM "+tablename+" WHERE id in (SELECT MAINID FROM "+tablename+"_DT1 WHERE mbmc = '"+idNew+"'\n" + + "UNION ALL \n" + + "SELECT MAINID FROM "+tablename+"_DT3 WHERE mbmc = '"+idNew+"'\n" + + "UNION ALL \n" + + "SELECT mainid FROM "+tablename+"_DT4 fmd WHERE mbmc = '"+idNew+"')"); + while (wdReuqestId.next()){ + ifcomplete++; + //判断是否归档 + Integer requestidNew = Util.getIntValue(wdReuqestId.getString("requestid")); + RecordSet iscompleteFind = new RecordSet(); + String workflowsql = "select * from workflow_requestbase where requestid = " + requestidNew; + iscompleteFind.execute(workflowsql); + String workflowid = iscompleteFind.getString("workflowid"); + iscompleteFind.execute("SELECT count(*) AS iscomplete FROM WORKFLOW_CURRENTOPERATOR WHERE requestid \n" + + "= "+requestidNew+" AND workflowid = "+workflowid+" AND iscomplete = 1"); + if(iscompleteFind.next()){ + Integer iscompleteNew = Util.getIntValue(iscompleteFind.getString("iscomplete")); + if(iscompleteNew >0){ + iscompleteTrue++; + }else{ + RecordSet sqlFindWgd = new RecordSet(); + sqlFindWgd.execute("SELECT REQUESTNAME FROM WORKFLOW_REQUESTBASE wr WHERE REQUESTID = "+requestidNew); + if (sqlFindWgd.next()){ + btNew = Util.null2String(sqlFindWgd.getString("REQUESTNAME")); + } + } + } + //判断是否终止 + RecordSet sqlIfStop = new RecordSet(); + sqlIfStop.execute("SELECT ISSTOPPED FROM workflow_requestbase WHERE REQUESTID = "+requestidNew); + if (sqlIfStop.next()){ + String isStop = Util.null2String(sqlIfStop.getString("ISSTOPPED")); + if (isStop.equals("1")){ + iscompleteTrue++; + } + } + } + if(ifcomplete == iscompleteTrue){ + //可以删除 + isDetele = 1; + }else { + //有调用此模板的流程未归档 + isDetele = 0; + } + //判断是否有模板文件 + Integer numDt = 0; + RecordSet findDtNumber = new RecordSet(); + findDtNumber.execute("SELECT count(*) num FROM UF_WDZX_DT1 uwd WHERE MAINID = "+idNew+" AND zt IN (0,1)"); + if (findDtNumber.next()){ + numDt = Util.getIntValue(findDtNumber.getString("num")); + } + jsonObject.put("code","200"); + jsonObject.put("msg","success"); + jsonObject.put("isDetele",isDetele); + jsonObject.put("numDt",numDt); + jsonObject.put("btNew",btNew); + }catch (Exception e) { + e.printStackTrace(); + jsonObject.put("code","500"); + jsonObject.put("msg","fail"); + } + return JSONObject.toJSONString(jsonObject); + } + + /** + * 文档建模查询列表删除 + * @param request + * @param response + * @return + */ + @GET + @Path("/wdlbDelete") + @Produces({MediaType.TEXT_PLAIN}) + public String wdlbDelete(@Context HttpServletRequest request, @Context HttpServletResponse response) { + + JSONObject jsonObject = new JSONObject(); + Integer idNew = Util.getIntValue(request.getParameter("id"),1); + try{ + RecordSet wdDelete = new RecordSet(); + wdDelete.execute("DELETE FROM uf_wdzx WHERE id = "+idNew); + jsonObject.put("code","200"); + jsonObject.put("msg","success"); + }catch (Exception e) { + e.printStackTrace(); + jsonObject.put("code","500"); + jsonObject.put("msg","fail"); + } + return JSONObject.toJSONString(jsonObject); + } + + /** + * 文档建模查询列表是否可以入库 + * @param request + * @param response + * @return + */ + @GET + @Path("/wdlbIfRuku") + @Produces({MediaType.TEXT_PLAIN}) + public String wdlbIfRuku(@Context HttpServletRequest request, @Context HttpServletResponse response) { +// public String wdlbIfRuku() { + JSONObject jsonObject = new JSONObject(); + Integer idNew = Util.getIntValue(request.getParameter("id"),1); +// Integer idNew = 402; + String tablename=JAVATools.GetUnumbertotable("mbwj"); + try{ + Integer ifcomplete = 0; + Integer iscompleteTrue = 0; + Integer isRuku = 0; + String btNew = ""; + RecordSet wdReuqestId= new RecordSet(); + wdReuqestId.execute("SELECT requestid FROM "+tablename+" WHERE id in (SELECT MAINID FROM "+tablename+"_DT1 WHERE mbmc = '"+idNew+"')"); +// int counts = wdReuqestId.getCounts(); +// if(counts<=0){ +// ifcomplete =1; +// } + while (wdReuqestId.next()){ +// ifcomplete++; + //判断是否归档 + Integer requestidNew = Util.getIntValue(wdReuqestId.getString("requestid")); + RecordSet iscompleteFind = new RecordSet(); + String workflowsql = "select * from workflow_requestbase where requestid = " + requestidNew; + iscompleteFind.execute(workflowsql); + iscompleteFind.next(); + String workflowid = iscompleteFind.getString("workflowid"); + String currentnodetype = iscompleteFind.getString("currentnodetype"); + if("3".equals(currentnodetype)){ +// ifcomplete = 1; + btNew = iscompleteFind.getString("requestname"); + }else if(Util.null2String(iscompleteFind.getString("ISSTOPPED")).equals("1")){ + btNew = iscompleteFind.getString("requestname"); + }else{ + ifcomplete++; + btNew = iscompleteFind.getString("requestname"); + } + } + if(ifcomplete <= 0){ + //可以入库 + isRuku = 1; + }else { + //有调用此模板的流程未归档 + isRuku = 0; + + + } + jsonObject.put("code","200"); + jsonObject.put("msg","success"); + jsonObject.put("isRuku",isRuku); + jsonObject.put("btNew",btNew); + }catch (Exception e) { + e.printStackTrace(); + jsonObject.put("code","500"); + jsonObject.put("msg","fail"); + } + return JSONObject.toJSONString(jsonObject); + } + + /** + * 文档建模查询列表是否可以变更 + * @param request + * @param response + * @return + */ + @GET + @Path("/wdlbIfBianGeng") + @Produces({MediaType.TEXT_PLAIN}) + public String wdlbIfBianGeng(@Context HttpServletRequest request, @Context HttpServletResponse response) { +// public String wdlbIfBianGeng( ){ + JSONObject jsonObject = new JSONObject(); + Integer idNew = Util.getIntValue(request.getParameter("id"),1); +// Integer idNew =420; + String tablename=JAVATools.GetUnumbertotable("mbwj"); + try{ + Integer ifcomplete = 0; + Integer iscompleteTrue = 0; + Integer isBianGeng = 0; + String btNew = ""; + RecordSet wdReuqestId= new RecordSet(); + wdReuqestId.execute("SELECT requestid FROM "+tablename+" WHERE id in ("+ + + " SELECT mainid FROM "+tablename+"_DT3 fmd WHERE mbmc = '"+idNew+"' "+ + " UNION ALL " + + " SELECT mainid FROM "+tablename+"_DT4 fmd WHERE mbmc = '"+idNew+"') "); + +// int counts = wdReuqestId.getCounts(); +// if(counts<=0){ +// ifcomplete=1; +// } + while (wdReuqestId.next()){ +// ifcomplete++; + //判断是否归档 + Integer requestidNew = Util.getIntValue(wdReuqestId.getString("requestid")); + RecordSet iscompleteFind = new RecordSet(); + String workflowsql = "select * from workflow_requestbase where requestid = " + requestidNew; + iscompleteFind.execute(workflowsql); + iscompleteFind.next(); + String workflowid = iscompleteFind.getString("workflowid"); + String currentnodetype = iscompleteFind.getString("currentnodetype"); + if("3".equals(currentnodetype)){ + btNew = iscompleteFind.getString("requestname"); + }else if(Util.null2String(iscompleteFind.getString("ISSTOPPED")) == "1"){ + btNew = iscompleteFind.getString("requestname"); + }else{ + ifcomplete++; + btNew = iscompleteFind.getString("requestname"); + } + } + + if(ifcomplete <=0){ + //可以变更 + isBianGeng = 1; + }else { + //有调用此模板的流程未归档 + isBianGeng = 0; + } + jsonObject.put("code","200"); + jsonObject.put("msg","success"); + jsonObject.put("isBianGeng",isBianGeng); + jsonObject.put("btNew",btNew); + }catch (Exception e) { + e.printStackTrace(); + jsonObject.put("code","500"); + jsonObject.put("msg","fail"); + } + return JSONObject.toJSONString(jsonObject); + } + +} diff --git a/src/main/java/com/engine/htsc/wdzx/WdzxAction.java b/src/main/java/com/engine/htsc/wdzx/WdzxAction.java new file mode 100644 index 0000000..9b65d81 --- /dev/null +++ b/src/main/java/com/engine/htsc/wdzx/WdzxAction.java @@ -0,0 +1,191 @@ +package com.engine.htsc.wdzx; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.api.doc.customize.util.GetRequestJsonUtils; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.jgxt.service.JgxtTreeNodeServer; +import com.engine.htsc.jgxt.service.imp.JgxtTreeNodeServerimp; +import com.engine.htsc.wdzx.service.DocmergeService; +import com.engine.htsc.wdzx.service.GetchangedetailService; +import com.engine.htsc.wdzx.service.WdzxModelService; +import com.engine.htsc.wdzx.service.WdzxTreeNodeServer; +import com.engine.htsc.wdzx.service.imp.DocmergeServiceImp; +import com.engine.htsc.wdzx.service.imp.GetchangedetailServiceImp; +import com.engine.htsc.wdzx.service.imp.WdzxModelServiceImp; +import com.engine.htsc.wdzx.service.imp.WdzxTreeNodeServerimp; +import weaver.general.Util; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.GlobatTools.RequestJSsonUtil; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +/** + * @author xf + * @version 1.0.0 + * @ClassName WdzxAction.java + * @createTime 2021年11月02日 01:25:00 + */ +public class WdzxAction { + + private WdzxTreeNodeServer getTreeNodeService(){ + return ServiceUtil.getService(WdzxTreeNodeServerimp.class); + } + private GetchangedetailService getchangedetailService(){ + return ServiceUtil.getService(GetchangedetailServiceImp.class); + } + + private DocmergeService docmergeService(){ + return ServiceUtil.getService(DocmergeServiceImp.class); + } + + private WdzxModelService wdzxModelService(){ + return ServiceUtil.getService(WdzxModelServiceImp.class); + } + @POST + @Path("/createtreenode") + @Produces({MediaType.APPLICATION_JSON}) + public String createtreenode(@Context HttpServletRequest req, @Context HttpServletResponse rep){ + JAVATools.SetCmdwritelog("文档中心自由节点"); + User user = HrmUserVarify.getUser( req, rep ); + Map Paramsmap= ParamUtil.request2Map(req); + Map map= getTreeNodeService().createtreenode(user,Paramsmap); + if(Util.null2String(map.get("flag"))=="true"){ + return JAVATools.Apiretrun("200","true"); + }else{ + return JAVATools.Apiretrun("400","false"); + } + + } + + + @POST + @Path("/getchangedetail") + @Produces({MediaType.APPLICATION_JSON}) + public String getchangedetail(@Context HttpServletRequest req, @Context HttpServletResponse rep){ + JAVATools.SetCmdwritelog("文档中心自由节点"); + User user = HrmUserVarify.getUser( req, rep ); + Map Paramsmap= ParamUtil.request2Map(req); + JSONObject jsonObject= getchangedetailService().getchangdetailinfo(user,Paramsmap); + if(jsonObject!=null ){ + return JAVATools.Apiretrun("200",jsonObject); + }else{ + return JAVATools.Apiretrun("400","false"); + } + } + + + + @POST + @Path("/getmodeinfo") + @Produces({MediaType.APPLICATION_JSON}) + public String getmodeinfo(@Context HttpServletRequest req, @Context HttpServletResponse rep){ + User user = HrmUserVarify.getUser( req, rep ); + Map Paramsmap= ParamUtil.request2Map(req); + JSONObject value= wdzxModelService().getmodeinfo(Paramsmap); + if(value==null || "".equals(value)){ + return JAVATools.Apiretrun("400","false"); + }else{ + return JAVATools.Apiretrun("200",value); + } + } + + + + @POST + @Path("/getfileversion") + @Produces({MediaType.APPLICATION_JSON}) + public String getfileversion(@Context HttpServletRequest req, @Context HttpServletResponse rep){ + JAVATools.SetCmdwritelog("文档中心自由节点"); + User user = HrmUserVarify.getUser( req, rep ); + Map Paramsmap= ParamUtil.request2Map(req); + String value= getchangedetailService().getversion(Paramsmap); + if(value==null || "".equals(value)){ + return JAVATools.Apiretrun("400","false"); + }else{ + return JAVATools.Apiretrun("200",value); + } + } + + @POST + @Path("/getdocmerge") + @Produces({MediaType.APPLICATION_JSON}) + public String getdocmerge(@Context HttpServletRequest req, @Context HttpServletResponse rep){ + JAVATools.SetCmdwritelog("文档中心合并"); + JSONArray jsonarray =new JSONArray(); + try { + JSONArray json = RequestJSsonUtil.getRequestJsonArrray(req); + JAVATools.SetCmdwritelog("文档中心"+json.toJSONString()); + User user = HrmUserVarify.getUser(req, rep); + // Map Paramsmap = ParamUtil.request2Map(req); + jsonarray = docmergeService().getdocmerge(json); + }catch (Exception ex){ + + } + if (jsonarray == null || jsonarray.size() <= 0) { + return JAVATools.Apiretrun("400", "false"); + } else { + return JAVATools.Apiretrun("200", jsonarray); + } + } + + @POST + @Path("/getdocinfo") + @Produces({MediaType.APPLICATION_JSON}) + public String getdocinfo(@Context HttpServletRequest req, @Context HttpServletResponse rep){ + JAVATools.SetCmdwritelog("查询模板"); + JSONArray jsonArray=new JSONArray(); + try { + User user = HrmUserVarify.getUser(req, rep); + Map Paramsmap = ParamUtil.request2Map(req); + JSONObject json = GetRequestJsonUtils.getRequestJsonObject(req); + JAVATools.SetCmdwritelog("文档中心" + json.toJSONString()); + jsonArray = wdzxModelService().getjsonarray(json); + }catch (Exception exo){ + JAVATools.SetCmdwritelog(exo.getMessage()); + } + if(jsonArray==null ||jsonArray.size()<=0){ + return JAVATools.Apiretrun("400","false"); + }else{ + return JAVATools.Apiretrun("200",jsonArray); + + } + } + + /** + * 这是一个文档中心通过子节点ywcjid查询父节点名称的接口,被流程和建模调用。 + * @param req ywcj 子节点的ywcjid,通过子节点 + * @param rep ywcj 返回的父节点名称 + * @return + */ + @POST + @Path("/getYwcjByid") + @Produces({MediaType.APPLICATION_JSON}) + public String getYwcjByid(@Context HttpServletRequest req, @Context HttpServletResponse rep){ + JAVATools.SetCmdwritelog("根据业务场景id查询"); + +// User user = HrmUserVarify.getUser(req, rep); +// JAVATools.writelog("USER="); + Map Paramsmap = ParamUtil.request2Map(req); + JAVATools.writelog("MAP="+Paramsmap); + HashMap ywcjByid = getTreeNodeService().getYwcjByid(Paramsmap); + HashMap map = new HashMap<>(); + map.put("code",200); + map.put("msg","success"); + map.put("data",ywcjByid); + return JSONObject.toJSONString(map); + + } +} diff --git a/src/main/java/com/engine/htsc/wdzx/cmd/WdzxTreeNodecmd.java b/src/main/java/com/engine/htsc/wdzx/cmd/WdzxTreeNodecmd.java new file mode 100644 index 0000000..2565813 --- /dev/null +++ b/src/main/java/com/engine/htsc/wdzx/cmd/WdzxTreeNodecmd.java @@ -0,0 +1,219 @@ +package com.engine.htsc.wdzx.cmd; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.common.util.ServiceUtil; +import com.engine.core.interceptor.CommandContext; + +import com.engine.htsc.wdzx.dao.WdzxTreeNodeDao; +import com.engine.workflow.service.RequestFreeFlowService; +import com.engine.workflow.service.impl.RequestFreeFlowServiceImpl; +import weaver.formmode.setup.ModeRightInfo; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.hrm.company.DepartmentComInfo; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.comInfo.PropBean; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class WdzxTreeNodecmd extends AbstractCommonCommand> { + + public WdzxTreeNodecmd(User user, Map params) { + this.params = params; + this.user = user; + } + + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + PropBean propBean=new PropBean(); + Map returnmap=new HashMap<>(); + try{ + int requestid = Util.getIntValue(Util.null2String(params.get("requestid"))); + int workflowid = Util.getIntValue(Util.null2String(params.get("workflowid"))); + int nodeid = Util.getIntValue(Util.null2String(params.get("nodeid"))); + String xybzvalue = Util.null2String(params.get("xybzvalue")); + String jsonArr=Util.null2String(params.get("jsonarr")); + JAVATools.SetCmdwritelog("requestid:"+requestid); + JAVATools.SetCmdwritelog("workflowid:"+workflowid); + JAVATools.SetCmdwritelog("nodeid:"+nodeid); + JAVATools.SetCmdwritelog("xybzvalue:"+xybzvalue); + JAVATools.SetCmdwritelog("jsonArr:"+jsonArr); + String jdfl="6"; + String sfgssh=""; + String zdry=""; + String bmfzrs=""; + String zdrys=""; + if( "".equals(jsonArr)){ + returnmap.put("flag",false); + return returnmap; + } + Map tablemap= WdzxTreeNodeDao.gettablemap(Util.null2String(requestid)); + if(tablemap==null || tablemap.size()<=0){ + returnmap.put("flag",false); + } + JSONObject freeNode = new JSONObject(); + JSONArray nodeData = new JSONArray(); + if("0".equals(xybzvalue)){ + jdfl=new PropBean().getPropName("wdzx.fs.xtfzryj"); + //会签节点 + JSONArray jsonArray=JSONArray.parseArray(jsonArr); + DepartmentComInfo departInfo=new DepartmentComInfo(); + for (int i=0;i params = new HashMap(); + params.put( "requestid", requestid ); + params.put( "nodeid", nodeid ); + params.put( "workflowid", workflowid ); + //判断 + + + params.put( "nodetype", 2 ); + params.put( "nextNodeEditPurview", 2 ); + params.put( "allowModify", 1 ); + params.put( "isFlowToNext", 0 ); + params.put( "isAddToParentGroup", 1 ); + params.put( "isParallel", 0 ); + params.put( "freeNodeData", freeNode ); + if (freeNode.size() > 0) { + JAVATools.SetCmdwritelog( "=================params:" + params.toString() ); + //生产自由节点 + RequestFreeFlowService freeFlowService = ServiceUtil.getService( RequestFreeFlowServiceImpl.class, user ); + freeFlowService.generateFreeNode( params ); + int formmodeid = 0 ; + JSONObject josobject= propBean.getModeInfoByUUID(propBean.getPropName("wdzx.UF_wdzxfree_CUBEUUID")); + formmodeid=Util.getIntValue(Util.null2String(josobject.get("modeid"))); + + + String freenode = WdzxTreeNodeDao.getfreenode(Util.null2String(requestid)); + String uf_freenode = WdzxTreeNodeDao.getmodelfreenode(Util.null2String(requestid)); + String bmfzrNode= ""; + String zdryNode= ""; + if(!"".equals(bmfzrs)){ + bmfzrNode=WdzxTreeNodeDao.getbmfzr(Util.null2String(requestid),bmfzrs); + } + if(!"".equals(zdrys)) + { + zdryNode=WdzxTreeNodeDao.getzdrys(Util.null2String(requestid),zdrys); + } + JAVATools.SetCmdwritelog( "=================freenode:" + freenode + ",freenode1:" + uf_freenode ); + String strnode = equestStr( freenode, uf_freenode ); + Map Paramsinert =new HashMap<>(); + Paramsinert.put("lcid",Util.null2String(requestid)); + Paramsinert.put("jdfl",jdfl); + Paramsinert.put("freenode",strnode); + Paramsinert.put("formmodeid",Util.null2String(formmodeid)); + Paramsinert.put("bmfzr",bmfzrNode); + Paramsinert.put("zdry",zdryNode); + boolean flag=WdzxTreeNodeDao.Inertmodel(Paramsinert); + if(flag){ + // rs.executeQuery(); + List> list=WdzxTreeNodeDao.getListStr(Util.null2String(requestid)); + if(list!=null && list.size()>=0){ + for (Map model:list) { + int id = Util.getIntValue(Util.null2String(model.get( "id" )) ); + ModeRightInfo moderight = new ModeRightInfo(); + moderight.editModeDataShare( 1, formmodeid, id ); + } + } + + + } + returnmap.put("flag",true); + return returnmap; + } + }catch (Exception exo){ + returnmap.put("flag",false); + return returnmap; + } + returnmap.put("flag",false); + return returnmap; + } + /** + * @title equestStr + * @remark 过滤数据 + * @author xf + * @Params: + * @param: str1 + * @param: str2 + * @updateTime 2021/9/15 + * @return: java.lang.String + */ + public static String equestStr(String str1, String str2) + { + StringBuilder sb = new StringBuilder(); + String[] strings = str1.split( "," ); + for (String s : strings) { + if (!str2.contains( s )) { + sb.append( s + "," ); + } + } + String str = sb.substring( 0, sb.length() - 1 ).toString(); + return str; + } + } diff --git a/src/main/java/com/engine/htsc/wdzx/dao/DocbaseDao.java b/src/main/java/com/engine/htsc/wdzx/dao/DocbaseDao.java new file mode 100644 index 0000000..d447217 --- /dev/null +++ b/src/main/java/com/engine/htsc/wdzx/dao/DocbaseDao.java @@ -0,0 +1,53 @@ +package com.engine.htsc.wdzx.dao; + +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.interfaces.htsc.GlobatTools.JAVATools; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author xf + * @version 1.0.0 + * @ClassName DocbaseDao.java + * @createTime 2021年11月08日 15:44:00 + */ +public class DocbaseDao { + + public static Map getdetail(String sysid,String bh){ + Map retmap=new HashMap<>(); + + String sql="select id,wj from uf_wdzx where 1=1 "; + + sql+="and instr(yqsyxt,'"+sysid+"')>0 "; + Map map=new HashMap<>(); + map.put("mbbh",bh); + + Map retrunmap= JAVATools.GetTableToMap(sql,map); + if(retrunmap==null || retrunmap.size()<=0){ + return null; + } + retmap.put("id",Util.null2String(retrunmap.get("id"))); + retmap.put("wj",Util.null2String(retrunmap.get("wj"))); + //2022-03-17cmj + String dtSql = "select * from uf_wdzx_dt1 where mainid = " +retrunmap.get("id") + " and zt = 1"; + RecordSet rs = new RecordSet(); + rs.execute(dtSql); + if(rs.next()){ + retmap.put("bbh",Util.null2String(rs.getString("bbh"))); + } + return retmap; + } + + public static String getywcj(String value){ + String sql=" select id from uf_ywcj where 1=1"; + Map map=new HashMap<>(); + map.put("ywcj",value); + Map returnmap= JAVATools.GetTableToMap(sql,map); + if(returnmap==null || returnmap.size()<=0){ + return ""; + } + return Util.null2String(returnmap.get("id")); + } +} diff --git a/src/main/java/com/engine/htsc/wdzx/dao/GetcchangedetailDao.java b/src/main/java/com/engine/htsc/wdzx/dao/GetcchangedetailDao.java new file mode 100644 index 0000000..6c03b75 --- /dev/null +++ b/src/main/java/com/engine/htsc/wdzx/dao/GetcchangedetailDao.java @@ -0,0 +1,60 @@ +package com.engine.htsc.wdzx.dao; + + +import weaver.general.Util; +import weaver.interfaces.htsc.GlobatTools.DBTools; +import weaver.interfaces.htsc.GlobatTools.Uploadcory; +import weaver.interfaces.htsc.util.UploadDocUtil; +import weaver.messager.UploadUtil; + + +import java.util.HashMap; +import java.util.Map; + + +public class GetcchangedetailDao { + + public static Map getchangfile(String wdzxid){ + Map returnmap=new HashMap<>(); + if("".equals(wdzxid)){ + return null; + } + + String sql2="select t.docid,t.imagefileid,t.imagefilename,t.operatedate,t.operatetime,tf.imagefiletype,tf.filesize from docimagefile t join imagefile tf on t.imagefileid=tf.imagefileid where " + + "t.docid in (select wj from uf_wdzx where id =? ) "; + Map map2= DBTools.getsqltomap(sql2,wdzxid); + if(map2!=null && map2.size()>0){ + Map map=Uploadcory.coryfile(Util.null2String(map2.get("docid"))); + if(map==null || map.size()<=0){ + return null; + } + String docid =Util.null2String(map.get("docid")); + String imagefileid =Util.null2String(map.get("imagefileid")); + returnmap.put("docid",docid); + returnmap.put("imagefileid",imagefileid); + returnmap.put("imagefilename",Util.null2String(map2.get("imagefilename"))); + returnmap.put("operatedate",Util.null2String(map2.get("operatedate"))); + returnmap.put("operatetime",Util.null2String(map2.get("operatetime"))); + returnmap.put("imagefiletype",Util.null2String(map2.get("imagefiletype"))); + returnmap.put("filesize",Util.null2String(map2.get("filesize"))); + returnmap.put("docimagefile",Util.null2String(map2.get("docimagefile"))); + + } + // returnmap.put("version",Util.null2String(version)+"版本"); + return returnmap; + } + + public static String getversion(String wdzxid){ + if("".equals(wdzxid)){ + return "V1"; + } + int version=1; + String sql=" select count(*)+1 as countsum from uf_wdzx_dt1 dt1 left join uf_wdzx t on dt1.mainid =t.id where t.id=? "; + Map map= DBTools.getsqltomap(sql,wdzxid); + if(map!=null && map.size()>0){ + version=Util.getIntValue(Util.null2String(map.get("countsum"))); + } + return "V"+ version; + } +} + diff --git a/src/main/java/com/engine/htsc/wdzx/dao/WdzxTreeNodeDao.java b/src/main/java/com/engine/htsc/wdzx/dao/WdzxTreeNodeDao.java new file mode 100644 index 0000000..e5325f1 --- /dev/null +++ b/src/main/java/com/engine/htsc/wdzx/dao/WdzxTreeNodeDao.java @@ -0,0 +1,186 @@ +package com.engine.htsc.wdzx.dao; + +import weaver.general.Util; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.comInfo.PropBean; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class WdzxTreeNodeDao { + + + + /* + * @title getmodelfreenode + * @remark 根据requestid获取建模表里自由节点的数据 + * @author xf + * @Params: + * @param: requestid + * @updateTime 2021/9/15 + * @return: java.lang.String + **/ + public static String getmodelfreenode(String requestid) { + String value=""; + String sql= "select wm_concat_old(freenode) as id from uf_qzyjhqb where 1=1"; + Map map=new HashMap<>(); + map.put("lcid",requestid); + Map returnmap=JAVATools.GetTableToMap(sql,map); + if(returnmap!=null && returnmap.size()>0){ + value=Util.null2String(returnmap.get("id")); + } + return value; + } + + /* + * @title getfreenode + * @remark 根据requestid获取自由节点的ids + * @author xf + * @Params: + * @param: requestid + * @updateTime 2021/9/14 + * @return: java.lang.String + **/ + public static String getfreenode(String requestid) { + String value=""; + String sql= "select wm_concat_old(id) as id from workflow_freenode where 1=1" ; + Map map=new HashMap<>(); + map.put("requestid",requestid); + Map returnmap=JAVATools.GetTableToMap(sql,map); + if(returnmap!=null && returnmap.size()>0){ + value=Util.null2String(returnmap.get("id")); + } + return value; + } + + /* + * @title Inertmodel + * @remark 插入建模uf_qzyjhqb + * @author xf + * @Params: + * @param: map + * @updateTime 2021/9/14 + * @return: boolean + **/ + public static boolean Inertmodel(Map map){ + String tablename="uf_qzyjhqb"; + return JAVATools.Excetesql(map,tablename); + } + + /** + * @title getbmfzr + * @remark 获取建模表里部门负责人的ids + * @author xf + * @Params: + * @param: requestid + * @param: bmfzrs + * @updateTime 2021/9/15 + * @return: java.lang.String + */ + public static String getbmfzr(String requestid,String bmfzrs){ + String value=""; + bmfzrs=JAVATools.getpreventsql(bmfzrs); + String sql=" select wm_concat_old(id) as id from workflow_freenode where to_char(operatorids) in ("+bmfzrs+") "; + Map map=new HashMap<>(); + map.put("requestid",requestid); + Map retrunmap= JAVATools.GetTableToMap(sql,map); + if(retrunmap!=null && retrunmap.size()>0){ + value= Util.null2String(map.get("id")); + } + return value; + + } + /** + * @title getzdrys + * @remark 根据requestid获取uf_qzyjhqb的id的数据 + * @author xf + * @Params: + * @param: requestid + * @param: zdrys + * @updateTime 2021/9/15 + * @return: java.lang.String + */ + public static String getzdrys(String requestid,String zdrys){ + String value=""; + zdrys=JAVATools.getpreventsql(zdrys); + String sql= " select wm_concat_old(id) as id from workflow_freenode where to_char(operatorids) in ("+zdrys+")"; + Map map=new HashMap<>(); + map.put("requestid",requestid); + Map retrunmap= JAVATools.GetTableToMap(sql,map); + if(retrunmap!=null && retrunmap.size()>0){ + value= Util.null2String(map.get("id")); + } + return value; + + } + /* + * @title getListStr + * @remark 根据requestid获取uf_qzyjhqb的id的数据 + * @author xf + * @Params: + * @param: requestid + * @updateTime 2021/9/15 + * @return: java.util.List + **/ + public static List getListStr(String requestid){ + String sql="select id from uf_qzyjhqb where 1=1 "; + Map mapstr=new HashMap<>(); + mapstr.put("requestid",requestid); + return JAVATools.GetTableToListMap(sql,mapstr); + } + + + + /* + * @title getListStr + * @remark 根据requestid获取uf_qzyjhqb的id的数据 + * @author xf + * @Params: + * @param: requestid + * @updateTime 2021/9/15 + * @return: java.util.List + **/ + + public static String getfgsfkg(String userid){ + + if("".equals(userid)){ + return ""; + } + String sqlfgs="select DECODE(de.deptTypeCode,'JGLX04',d.supdepid,'JGLX09',d.supdepid,'JGLX03',d.id) as cid from hrmdepartment d,hrmdepartmentdefined de,hrmresource h where d.id=de.deptid and h.departmentid=de.deptid and h.id="+userid; + Map fgsmap= JAVATools.GetTableToMap(sqlfgs,null); + if("".equals(fgsmap)){ + return ""; + } + String newdeptid=Util.null2String(fgsmap.get("cid")); + if("".equals(newdeptid)){ + return ""; + } + String gwid=new PropBean().getPropName("jgxt.fs.gwid"); + String sql="select ry from uf_lcgwry where xzlc='jgxtsq' and xzgw='"+gwid+"' "; + + Map mapstr=new HashMap<>(); + mapstr.put("jg",newdeptid); + Map returnmap= JAVATools.GetTableToMap(sql,mapstr); + if(returnmap==null || returnmap.size()<=0){ + return ""; + } + return Util.null2String(returnmap.get("ry")); + } + + + public static Map gettablemap(String requestid){ + + String tablename=JAVATools.getMaintable(requestid); + String sql="select * from "+tablename+" where 1=1 "; + Map mapstr=new HashMap<>(); + mapstr.put("requestid",requestid); + Map returnmap= JAVATools.GetTableToMap(sql,mapstr); + if(returnmap==null || returnmap.size()<=0){ + return null; + } + return returnmap; + } + + +} diff --git a/src/main/java/com/engine/htsc/wdzx/model/Doclog.java b/src/main/java/com/engine/htsc/wdzx/model/Doclog.java new file mode 100644 index 0000000..df84e0a --- /dev/null +++ b/src/main/java/com/engine/htsc/wdzx/model/Doclog.java @@ -0,0 +1,129 @@ +package com.engine.htsc.wdzx.model; + +import com.alibaba.fastjson.JSONObject; +import weaver.general.Util; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.comInfo.PropBean; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author xf + * @version 1.0.0 + * @ClassName doclog.java + * @createTime 2021年11月19日 11:16:00 + */ +public class Doclog { + public String getMbmc() { + return mbmc; + } + + public void setMbmc(String mbmc) { + this.mbmc = mbmc; + } + + public String getDyrq() { + return dyrq; + } + + public void setDyrq(String dyrq) { + this.dyrq = dyrq; + } + + public String getDyr() { + return dyr; + } + + public void setDyr(String dyr) { + this.dyr = dyr; + } + + public String getDyxt() { + return dyxt; + } + + public void setDyxt(String dyxt) { + this.dyxt = dyxt; + } + + public String getMbwj() { + return mbwj; + } + + public void setMbwj(String mbwj) { + this.mbwj = mbwj; + } + private String mbmc; + private String dyrq; + private String dyr; + private String dyxt; + private String mbwj; + + public String getCzlx() { + return czlx; + } + + public void setCzlx(String czlx) { + this.czlx = czlx; + } + + private String czlx; + + + public String getWgid() { + return wgid; + } + + public void setWgid(String wgid) { + this.wgid = wgid; + } + + private String wgid; + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + private String msg; + private String tablename="uf_wdhbrz"; + + public boolean innsert(){ + PropBean propBean= new PropBean(); + Map map=new HashMap<>(); + if(!"".equals(Util.null2String(this.mbmc))){ + map.put("mbmc",this.mbmc); + } + if(!"".equals(Util.null2String(this.dyrq))){ + map.put("dyrq",this.dyrq); + } + if(!"".equals(Util.null2String(this.dyr))){ + map.put("dyr",this.dyr); + } + if(!"".equals(Util.null2String(this.dyxt))){ + map.put("dyxt",this.dyxt); + } + if(!"".equals(Util.null2String(this.mbwj))){ + map.put("mbwj",this.mbwj); + } + if(!"".equals(Util.null2String(this.msg))){ + map.put("msg",this.msg); + } + if(!"".equals(Util.null2String(this.wgid))){ + map.put("wgid",this.wgid); + } + if(!"".equals(Util.null2String(this.czlx))){ + map.put("czlx",this.czlx); + } + JSONObject jsonObject= propBean.getModeInfoByUUID(propBean.getPropName("wdzx.wdhbcebuuuid")); + if(jsonObject!=null && jsonObject.size()>=0){ + map.put("formmodeid",Util.null2String(jsonObject.get("modeid"))); + } + + return JAVATools.Excetesql(map,tablename); + } +} diff --git a/src/main/java/com/engine/htsc/wdzx/service/DocmergeService.java b/src/main/java/com/engine/htsc/wdzx/service/DocmergeService.java new file mode 100644 index 0000000..db69903 --- /dev/null +++ b/src/main/java/com/engine/htsc/wdzx/service/DocmergeService.java @@ -0,0 +1,16 @@ +package com.engine.htsc.wdzx.service; + +import com.alibaba.fastjson.JSONArray; + + +/** + * @author xf + * @version 1.0.0 + * @ClassName docmergeService.java + * @createTime 2021年11月08日 15:27:00 + */ +public interface DocmergeService { + + public JSONArray getdocmerge(JSONArray jsonparams); + +} diff --git a/src/main/java/com/engine/htsc/wdzx/service/GetchangedetailService.java b/src/main/java/com/engine/htsc/wdzx/service/GetchangedetailService.java new file mode 100644 index 0000000..b5e4003 --- /dev/null +++ b/src/main/java/com/engine/htsc/wdzx/service/GetchangedetailService.java @@ -0,0 +1,20 @@ +package com.engine.htsc.wdzx.service; + + +import com.alibaba.fastjson.JSONObject; +import weaver.hrm.User; + +import java.util.Map; + +/** + * @author xf + * @version 1.0.0 + * @ClassName GetchangedetailServer.java + * @createTime 2021年11月04日 10:40:00 + */ +public interface GetchangedetailService { + + public JSONObject getchangdetailinfo(User user, Map map); + + public String getversion(Map map); +} diff --git a/src/main/java/com/engine/htsc/wdzx/service/WdzxModelService.java b/src/main/java/com/engine/htsc/wdzx/service/WdzxModelService.java new file mode 100644 index 0000000..1bbce31 --- /dev/null +++ b/src/main/java/com/engine/htsc/wdzx/service/WdzxModelService.java @@ -0,0 +1,20 @@ +package com.engine.htsc.wdzx.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +import java.util.Map; + +/** + * @author xf + * @version 1.0.0 + * @ClassName WdzxModelService.java + * @createTime 2021年11月08日 18:55:00 + */ +public interface WdzxModelService { + + public JSONArray getjsonarray(JSONObject jsonparams); + + public JSONObject getmodeinfo(Map params); + +} diff --git a/src/main/java/com/engine/htsc/wdzx/service/WdzxTreeNodeServer.java b/src/main/java/com/engine/htsc/wdzx/service/WdzxTreeNodeServer.java new file mode 100644 index 0000000..3d40e5e --- /dev/null +++ b/src/main/java/com/engine/htsc/wdzx/service/WdzxTreeNodeServer.java @@ -0,0 +1,19 @@ +package com.engine.htsc.wdzx.service; + +import org.json.JSONObject; +import weaver.hrm.User; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author xf + * @version 1.0.0 + * @ClassName JgxtTreeNodeServer.java + * @createTime 2021年09月17日 16:14:00 + */ +public interface WdzxTreeNodeServer { + public Map createtreenode(User user, Map map); + + HashMap getYwcjByid(Map paramsmap); +} diff --git a/src/main/java/com/engine/htsc/wdzx/service/WdzxmaintodetailServer.java b/src/main/java/com/engine/htsc/wdzx/service/WdzxmaintodetailServer.java new file mode 100644 index 0000000..8737171 --- /dev/null +++ b/src/main/java/com/engine/htsc/wdzx/service/WdzxmaintodetailServer.java @@ -0,0 +1,14 @@ +package com.engine.htsc.wdzx.service; + +import java.util.Map; + +/** + * @author xf + * @version 1.0.0 + * @ClassName JgxtsdbmtodetailServer.java + * @createTime 2021年09月22日 18:15:00 + */ +public interface WdzxmaintodetailServer { + + public void createtodetail(Map map); +} diff --git a/src/main/java/com/engine/htsc/wdzx/service/imp/DocmergeServiceImp.java b/src/main/java/com/engine/htsc/wdzx/service/imp/DocmergeServiceImp.java new file mode 100644 index 0000000..c755421 --- /dev/null +++ b/src/main/java/com/engine/htsc/wdzx/service/imp/DocmergeServiceImp.java @@ -0,0 +1,216 @@ +package com.engine.htsc.wdzx.service.imp; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.api.doc.customize.util.RepalceBookMarkUtil; +import com.engine.core.impl.Service; +import com.engine.htsc.wdzx.dao.DocbaseDao; +import com.engine.htsc.wdzx.model.Doclog; +import com.engine.htsc.wdzx.service.DocmergeService; +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.file.ImageFileManager; +import weaver.file.Prop; +import weaver.general.Util; +import weaver.interfaces.htsc.GlobatTools.FileGateway; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import java.io.InputStream; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +/** + * @author xf + * @version 1.0.0 + * @ClassName DocmergeServiceImp.java + * @createTime 2021年11月08日 15:27:00 + */ +public class DocmergeServiceImp extends Service implements DocmergeService { + + + + @Override + public JSONArray getdocmerge(JSONArray jsonparams) { + JSONArray jsonArray=new JSONArray(); + if(jsonparams!=null && jsonparams.size()>0){ + jsonparams.stream().forEach(jsonobejct->{ + JSONObject jsonObject1= (JSONObject)jsonobejct; + if(jsonObject1==null ||jsonObject1.size()<=0){ + return ; + } + String sysid= Util.null2String(jsonObject1.get("sysid")); + String templateno= Util.null2String(jsonObject1.get("templateno")); + String data=Util.null2String(jsonObject1.get("data")); + String user=Util.null2String(jsonObject1.get("user")); + String sysname=Util.null2String(jsonObject1.get("sysname")); + String key=Util.null2String(jsonObject1.get("key")); + //12-27 + String filename =Util.null2String(jsonObject1.get("filename")); + JAVATools.SetCmdwritelog("12-27filename=" + filename); + if("".equals(sysid) || "".equals(templateno) || "".equals(data) + || "".equals(user) || "".equals(sysname) || "".equals(key)){ + return ; + } + Map maph=new HashMap<>(); + maph.put("sysid",sysid); + maph.put("templateno",templateno); + maph.put("data",data); + maph.put("user",user); + maph.put("sysname",sysname); + maph.put("key",key); + //12-27 + maph.put("filename",filename); + JSONObject jsonObject= docmerge(maph); + if(jsonObject!=null && jsonObject.size()>0){ + jsonArray.add(jsonObject); + } + }); + } + return jsonArray; + } + + public JSONObject docmerge(Map map){ + JSONObject jsonObject=new JSONObject(); + int newimagefileid=0; + String imagefilename=""; + String mbmcidstr=""; + String sysid= Util.null2String(map.get("sysid")); + String templateno= Util.null2String(map.get("templateno")); + String data=Util.null2String(map.get("data")); + String user=Util.null2String(map.get("user")); + String sysname=Util.null2String(map.get("sysname")); + String key=Util.null2String(map.get("key")); + //12-27 + String filename=Util.null2String(map.get("filename")); + + JAVATools.SetCmdwritelog("filename="+filename+"sysid:"+sysid+"modeno:"+templateno+"data:"+data); + if("".equals(sysid) || "".equals(templateno)){ + jsonObject.put("error","参数有误!"); + return jsonObject; + } + Map ufmodelmap=DocbaseDao.getdetail(sysid,templateno); + if(ufmodelmap==null || ufmodelmap.size()<=0){ + jsonObject.put("error","该文件查询不到生效的文件"); + return jsonObject; + } + mbmcidstr=Util.null2String(ufmodelmap.get("id")); + String reqdocid=Util.null2String(ufmodelmap.get("wj")); + JAVATools.SetCmdwritelog("测试docid:"+reqdocid); + if("".equals(reqdocid)){ + jsonObject.put("error","该文件查询不到生效的文件"); + return jsonObject; + } + + + + try { + int docid = Util.getIntValue(reqdocid, 0); + + String var6 = Prop.getPropValue("QC1450247", "oaurl"); + Map datamap = (Map) JSON.parseObject(data, Map.class); + RepalceBookMarkUtil var8 = new RepalceBookMarkUtil(); + String sql1 = " select DISTINCT id from docimagefile where docid=? and isextfile=1 group by id "; + String sal2 = " select a.id,a.imagefileid,a.imagefilename,a.docfiletype,a.versionId,b.filesize,a.isextfile from docimagefile a,imagefile b where a.imagefileid=b.imagefileid and a.id=? order by versionid desc "; + RecordSet rs1 = new RecordSet(); + RecordSet rs2 = new RecordSet(); + rs1.executeQuery(sql1, new Object[]{docid}); + int var13 = 0; + String var14; + if (rs1.next() && StringUtils.isNotEmpty(rs1.getString("id"))) { + var14 = rs1.getString("id"); + rs2.executeQuery(sal2, new Object[]{var14}); + if (rs2.next()) { + int imagefileid = Util.getIntValue(rs2.getString("imagefileid"), 0); + imagefilename = rs2.getString("imagefilename"); + //12-27 + if(StringUtils.isNotBlank(filename)){ + String imageEnding = imagefilename.substring(imagefilename.lastIndexOf(".")); + JAVATools.SetCmdwritelog("imageEnding="+imageEnding); +// if(filename.lastIndexOf(".")>=0){} +// String filenameEnding = filename.substring(filename.lastIndexOf(".")); +// JAVATools.SetCmdwritelog("filenameEnding="+filenameEnding); +// if(Objects.equals(imageEnding,filenameEnding)){ +// imagefilename = filename; +// JAVATools.SetCmdwritelog("12-27imagefilename="+imagefilename); +// }else{ +// imagefilename = filename.substring(0,filename.lastIndexOf(".")-1)+filenameEnding; +// JAVATools.SetCmdwritelog("12-27imagefilename="+imagefilename); +// } + imagefilename = filename+imageEnding; + JAVATools.SetCmdwritelog("12-27imagefilename="+imagefilename); + } + ImageFileManager var17 = new ImageFileManager(); + var17.getImageFileInfoById(imagefileid); + + try { + InputStream inputStream = var17.getInputStream(); + Throwable var19 = null; + + try { + newimagefileid = var8.getWord(inputStream, datamap, imagefilename); + } catch (Throwable var30) { + var19 = var30; + throw var30; + } finally { + if (inputStream != null) { + if (var19 != null) { + try { + inputStream.close(); + } catch (Throwable var29) { + var19.addSuppressed(var29); + } + } else { + inputStream.close(); + } + } + + } + } catch (Exception var32) { + var32.printStackTrace(); + } + } + } + String fileid=FileGateway.getgateway(newimagefileid,imagefilename); + if("".equals(fileid)){ + return null; + } + jsonObject.put("fileid",fileid); + jsonObject.put("key",key); + //2022-03-17cmj + if(StringUtils.isNotBlank(ufmodelmap.get("bbh"))){ + jsonObject.put("bbh",ufmodelmap.get("bbh")); + }else{ + jsonObject.put("bbh",""); + } + + Map mapret=new HashMap<>(); + mapret.put("dyr",user); + mapret.put("dyxt",sysname); + mapret.put("mbmc",mbmcidstr); + mapret.put("msg",data); + mapret.put("mbwj",reqdocid); + mapret.put("wgid",fileid); + + innsertmodel(mapret); + } catch (Exception var33) { + var33.printStackTrace(); + } + return jsonObject; + } + + public void innsertmodel(Map model){ + Doclog doclog=new Doclog(); + doclog.setDyr(Util.null2String(model.get("dyr"))); + doclog.setDyxt(Util.null2String(model.get("dyxt"))); + doclog.setMbmc(Util.null2String(model.get("mbmc"))); + doclog.setMbwj(Util.null2String(model.get("mbwj"))); + doclog.setWgid(Util.null2String(model.get("wgid"))); + doclog.setMsg(Util.null2String(model.get("msg"))); + doclog.setCzlx("合并文档"); + doclog.setDyrq( DateUtil.formatDateTime(new Date())); + doclog.innsert(); + } +} diff --git a/src/main/java/com/engine/htsc/wdzx/service/imp/GetchangedetailServiceImp.java b/src/main/java/com/engine/htsc/wdzx/service/imp/GetchangedetailServiceImp.java new file mode 100644 index 0000000..7e5a08e --- /dev/null +++ b/src/main/java/com/engine/htsc/wdzx/service/imp/GetchangedetailServiceImp.java @@ -0,0 +1,91 @@ +package com.engine.htsc.wdzx.service.imp; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.engine.core.impl.Service; +import com.engine.htsc.wdzx.dao.GetcchangedetailDao; +import com.engine.htsc.wdzx.service.GetchangedetailService; + +import weaver.general.Util; +import weaver.hrm.User; + +import java.util.Map; + +/** + * @author xf + * @version 1.0.0 + * @ClassName GetcchangdetailServiceImp.java + * @createTime 2021年11月04日 10:41:00 + */ +public class GetchangedetailServiceImp extends Service implements GetchangedetailService { + + + @Override + public JSONObject getchangdetailinfo(User user, Map map) { + String wdzxid= Util.null2String(map.get("wdzxid")); + if("".equals(wdzxid)){ + return null; + } + Map returnmap= GetcchangedetailDao.getchangfile(wdzxid); + if(returnmap==null || returnmap.size()<=0){ + return null; + } + JSONObject jsonObject=new JSONObject(); + int size=Util.getIntValue(Util.null2String(returnmap.get("filesize"))); + String filesize="1K"; + String docid=Util.null2String(returnmap.get("docid")); + String imagefilename= Util.null2String(returnmap.get("imagefilename")); + if(size>0){ + int sizevalue=size/1024; + if(sizevalue>0){ + filesize=sizevalue+"K"; + } + } + try { + String filelink = "/spa/document/index2file.jsp?f_weaver_belongto_userid=" + user.getUID() + "&f_weaver_belongto_usertype=0&id=" + docid + "&imagefileId=" + imagefilename + "&isFromAccessory=true&isrequest=1&requestid=-1&desrequestid=-1&authStr=undefined&authSignatureStr=undefined"; + String loadlink = "/weaver/weaver.file.FileDownload?fileid=" + docid + "&download=1&requestid=-1&desrequestid=-1&authStr=undefined&authSignatureStr=undefined&f_weaver_belongto_userid=" + user.getUID() + "&f_weaver_belongto_usertype=0"; + jsonObject.put("appID", ""); + jsonObject.put("fileID", docid); + jsonObject.put("fileid", docid); + jsonObject.put("filelink", filelink); + jsonObject.put("filesize", filesize); + jsonObject.put("filename", imagefilename); + jsonObject.put("imagefileid", Util.null2String(returnmap.get("imagefileid"))); + + jsonObject.put("imgSrc", "/images/filetypeicons/pdf_wev8.png"); + jsonObject.put("isImg", false); + jsonObject.put("loadlink", loadlink); + jsonObject.put("operatedate", Util.null2String(returnmap.get("operatedate"))); + jsonObject.put("operatetime", Util.null2String(returnmap.get("operatetime"))); + jsonObject.put("showDelete", true); + jsonObject.put("size", size); + jsonObject.put("uploaddate", Util.null2String(returnmap.get("imagefileid"))); + jsonObject.put("userid", 0); + jsonObject.put("username", "文档中心"); + jsonObject.put("versionCount", "v1"); + JSONArray jsonArray=new JSONArray(); + jsonArray.add(jsonObject); + JSONObject filedatas=new JSONObject(); + filedatas.put("filedatas",jsonArray); + JSONObject value1=new JSONObject(); + value1.put("value",docid); + value1.put("specialobj",filedatas); + return value1; + }catch (Exception exo){ + + } + return null; + + + } + + @Override + public String getversion(Map map) { + String wdzxid= Util.null2String(map.get("wdzxid")); + if("".equals(wdzxid)){ + return null; + } + return GetcchangedetailDao.getversion(wdzxid); + } +} + diff --git a/src/main/java/com/engine/htsc/wdzx/service/imp/WdzxModelServiceImp.java b/src/main/java/com/engine/htsc/wdzx/service/imp/WdzxModelServiceImp.java new file mode 100644 index 0000000..2610e98 --- /dev/null +++ b/src/main/java/com/engine/htsc/wdzx/service/imp/WdzxModelServiceImp.java @@ -0,0 +1,109 @@ +package com.engine.htsc.wdzx.service.imp; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.engine.core.impl.Service; +import com.engine.htsc.wdzx.dao.DocbaseDao; +import com.engine.htsc.wdzx.service.WdzxModelService; +import weaver.general.Util; +import weaver.interfaces.htsc.GlobatTools.DBTools; +import weaver.interfaces.htsc.GlobatTools.JAVATools; + +import java.text.MessageFormat; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author xf + * @version 1.0.0 + * @ClassName WdzxModelService.java + * @createTime 2021年11月08日 18:54:00 + */ +public class WdzxModelServiceImp extends Service implements WdzxModelService { + + /* + 1、查询可用模板,根据系统id查询在所属场景中所有有权限使用的模板,当模板编号不为空时返回对应模板编号的模板信息 +入参: +调用系统id 必填 +模板场景 必填 +模板编号 可填 + +出参: +list <模板信息> + 模板信息包括:模板编号、模板名字、使用场景、管理员、模板当前生效文件的ceid + + **/ + @Override + public JSONArray getjsonarray(JSONObject jsonparams) { + + String sysid=Util.null2String(jsonparams.get("sysid")); + String templatescene=Util.null2String(jsonparams.get("templatescene")); + JAVATools.SetCmdwritelog("文档查询:"+jsonparams.toJSONString()); + List> list=null; + if("".equals(sysid) || "".equals(templatescene)){ + return null; + } + String ywcjvalue= DocbaseDao.getywcj(templatescene); + String templateno=Util.null2String( jsonparams.get("templateno")); + JSONArray jsonArray=new JSONArray(); + String sql=" select mbbh,mbmc,ywcj, gly, wj, (select fileid from imagefile f join docimagefile f1 on f.imagefileid=f1.imagefileid where rownum=1 and f1.docid =t.wj) as fileid from uf_wdzx t "; + sql+=" where ywcj like ''%_{0}'' and instr(yqsyxt,''{1}'')>0 "; + Map wheremap=new HashMap<>(); + if(!"".equals(templateno)){ + wheremap.put("mbbh",templateno); + list= JAVATools.GetTableToListMap(MessageFormat.format(sql,ywcjvalue,sysid),wheremap); + }else{ + list= JAVATools.GetTableToListMap(MessageFormat.format(sql,ywcjvalue,sysid),null); + } + + + + + if(list==null || list.size()<=0){ + return jsonArray; + } + list.forEach((Map modelmap)->{ + JSONObject jsonObject=new JSONObject(); + jsonObject.put("mbmc", Util.null2String(modelmap.get("mbmc"))); + jsonObject.put("mbbh", Util.null2String(modelmap.get("mbbh"))); + jsonObject.put("ywcj", Util.null2String(modelmap.get("ywcj"))); + jsonObject.put("gly",JAVATools.getidlastname(Util.null2String(modelmap.get("gly")))); + jsonObject.put("fileid", Util.null2String(modelmap.get("fileid"))); + jsonArray.add(jsonObject); + }); + return jsonArray; + } + + + @Override + public JSONObject getmodeinfo(Map params) { + JSONObject jsonObject=new JSONObject(); + if(params==null || params.size()<=0){ + return jsonObject; + } + String value=Util.null2String(params.get("id")); + if("".equals(value)){ + return jsonObject; + } + String sql= " select uf.* from uf_wdzx uf where 1=1 "; + Map mapnew=new HashMap<>(); + mapnew.put("id",value); + Map returnmap=JAVATools.GetTableToMap(sql,mapnew); + if(returnmap==null || returnmap.size()<=0){ + return jsonObject; + } + for(String key : returnmap.keySet()){ + if("gly".equals(key) && !"".equals(Util.null2String(returnmap.get(key)))){ + jsonObject.put("glyvalue",JAVATools.getHrmName(Util.null2String(returnmap.get(key)))); + + } + jsonObject.put(key,Util.null2String(returnmap.get(key))); + } + return jsonObject; + + } + + + +} diff --git a/src/main/java/com/engine/htsc/wdzx/service/imp/WdzxTreeNodeServerimp.java b/src/main/java/com/engine/htsc/wdzx/service/imp/WdzxTreeNodeServerimp.java new file mode 100644 index 0000000..7c7480a --- /dev/null +++ b/src/main/java/com/engine/htsc/wdzx/service/imp/WdzxTreeNodeServerimp.java @@ -0,0 +1,52 @@ +package com.engine.htsc.wdzx.service.imp; + +import com.engine.core.impl.Service; + +import com.engine.htsc.wdzx.cmd.WdzxTreeNodecmd; +import com.engine.htsc.wdzx.service.WdzxTreeNodeServer; +import org.json.JSONException; +import org.json.JSONObject; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.interfaces.htsc.GlobatTools.JAVATools; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author xf + * @version 1.0.0 + * @ClassName JgxtTreeNodeServerimp.java + * @createTime 2021年09月17日 16:14:00 + */ +public class WdzxTreeNodeServerimp extends Service implements WdzxTreeNodeServer { + + @Override + public Map createtreenode(User user, Map map) { + + return commandExecutor.execute(new WdzxTreeNodecmd(user,map)); + } + + @Override + public HashMap getYwcjByid(Map paramsmap) { + String ywcj = Util.null2String(paramsmap.get("ywcj")); + JAVATools.writelog("YWCJ=" + ywcj); + RecordSet rs = new RecordSet(); + String sql = "select * from uf_ywcj where id = (select ywcjsj from uf_ywcj where id = "+ ywcj +")"; + JAVATools.writelog("ywcjsql="+sql); + rs.execute(sql); + rs.next(); + HashMap map = new HashMap<>(); + + map.put("id",rs.getString("id")); + map.put("ywcj",rs.getString("ywcj")); + map.put("ywcjsj",rs.getString("ywcjsj")); + + JAVATools.writelog("obj="+map); + return map; + + } + + +} diff --git a/src/main/java/com/engine/htsc/wdzx/service/imp/WdzxmaintodetailServerImp.java b/src/main/java/com/engine/htsc/wdzx/service/imp/WdzxmaintodetailServerImp.java new file mode 100644 index 0000000..678ae8d --- /dev/null +++ b/src/main/java/com/engine/htsc/wdzx/service/imp/WdzxmaintodetailServerImp.java @@ -0,0 +1,181 @@ +package com.engine.htsc.wdzx.service.imp; + +import com.engine.core.impl.Service; +import com.engine.htsc.jgxt.service.JgxtsdbmtodetailServer; +import com.engine.htsc.wdzx.service.WdzxmaintodetailServer; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.comInfo.PropBean; + +import java.util.*; + +/** + * @author xf + * @version 1.0.0 + * @ClassName JgxtsdbmtodetailServerImp.java + * @createTime 2021年09月22日 18:15:00 + */ +public class WdzxmaintodetailServerImp extends Service implements WdzxmaintodetailServer { + + @Override + public void createtodetail(Map map) { + String requestid= Util.null2String(map.get("requestid")); + String tablename=Util.null2String(map.get("tablename")); + String requestname=Util.null2String(map.get("requestname")); + + String sql="select id,ldsp,xgbm from "+tablename+ " where 1=1 "; + Map wheremap=new HashMap<>(); + wheremap.put("requestid",requestid); + Map tablemap=JAVATools.GetTableToMap(sql,wheremap); + if(tablemap==null||tablemap.size()<=0){ + JAVATools.SetCmdwritelog("文档中心写入明细表2失败",sql); + return ; + } + String xgbmvalue=Util.null2String(tablemap.get("xgbm")); + String id=Util.null2String(tablemap.get("id")); + String ldshvalue=Util.null2String(tablemap.get("ldsp")); + + if("".equals(id)){ + JAVATools.SetCmdwritelog("文档中心写入明细表失败",sql); + return ; + } + + updateletetable(id,tablename,xgbmvalue,id); + + updateleteleader(id, tablename, ldshvalue, id); + + + + } + + private void updateletetable(String mainid,String tablename,String xgbmvalue,String id){ + if("".equals(tablename) || "".equals(mainid)) { + return; + } + List newdeptid=new ArrayList(); + List> list= getdetailtablevalue(mainid,tablename +"_dt5"); + if(list!=null ||list.size()>0){ + list.forEach((Map item)->{ + String xgbm= Util.null2String(item.get("xgbm")); + String detailid= Util.null2String(item.get("id")); + if(( "".equals(xgbmvalue) || (","+xgbmvalue+",").indexOf(","+xgbm+",")<0) && !"".equals(detailid)){ + //删除操作 + deldetailtablevalue(tablename +"_dt5",detailid); + }else{ + newdeptid.add(xgbm); + } + }); + } + + Arrays.stream(xgbmvalue.split(",")).forEach((model)->{ + if((newdeptid.size()<=0 ||newdeptid.indexOf(model)<0 ) && !"".equals(model) ){ + Map insertmap=new HashMap<>(); + String bmfzr=JAVATools.Getdeptdirectors(model); + String djry=getdjry(model); + insertmap.put("mainid",id); + insertmap.put("xgbm",model); + insertmap.put("bmfzr",bmfzr); + insertmap.put("sfxz","1"); + + JAVATools.Excetesql(insertmap,tablename+"_dt5"); + } + + }); + + } + + + + private void updateleteleader(String mainid,String tablename,String ldspvalue,String id){ + if("".equals(tablename) || "".equals(mainid)) { + return; + } + List newuserids=new ArrayList(); + List> list= getdetailtablevalue(mainid,tablename +"_dt6"); + if(list!=null && list.size()>0){ + list.forEach((Map item)->{ + String ry= Util.null2String(item.get("ry")); + String detailid= Util.null2String(item.get("id")); + if(( "".equals(ldspvalue) || (","+ldspvalue+",").indexOf(","+ry+",")<0) && !"".equals(detailid)){ + //删除操作 + deldetailtablevalue(tablename +"_dt6",detailid); + }else{ + newuserids.add(ry); + } + }); + } + + Arrays.stream(ldspvalue.split(",")).forEach((model) -> { + if((newuserids.size()<=0 ||newuserids.indexOf(model)<0 ) && !"".equals(model) ) { + Map insertmap = new HashMap<>(); + insertmap.put("mainid", id); + insertmap.put("ry", model); + insertmap.put("bm", JAVATools.gethrmidtodeptid(model)); + insertmap.put("ssjg", JAVATools.gethrmidtojgid(model)); + insertmap.put("sfxz","1"); + JAVATools.Excetesql(insertmap, tablename + "_dt6"); + } + }); + + } + + private String getdjry(String deptid){ + if("".equals(deptid)){ + return ""; + } + + String sql="select bm,djr from uf_djrpz"; + List> list= JAVATools.GetTableToListMap(sql,null); + if(list.size()<=0){ + return ""; + } + for (Map map : list){ + String bm=Util.null2String(map.get("bm")); + if(bm.equals(deptid)){ + return Util.null2String(map.get("djr")); + } + } + return ""; + } + + + private String getfkgry(String deptid){ + if("".equals(deptid)){ + return ""; + } + String fkgwry= new PropBean().getPropName("jgxt.fs.hggwgwid"); + String sql="select jg,ry,xzgw from uf_lcgwry where xzlc='jgxtsq' and xzgw='"+fkgwry+"'"; + List> list= JAVATools.GetTableToListMap(sql,null); + if(list.size()<=0){ + return ""; + } + for (Map map : list){ + String jg=Util.null2String(map.get("jg")); + if(jg.equals(deptid)){ + return Util.null2String(map.get("ry")); + } + } + return ""; + } + + // + private List getdetailtablevalue(String id,String tablename){ + if("".equals(tablename) || "".equals(id)){ + return null; + } + String sql="select * from "+tablename +" where 1=1 "; + Map map=new HashMap<>(); + map.put("mainid",id); + return JAVATools.GetTableToListMap(sql,map); + } + + private void deldetailtablevalue(String tablename,String id){ + RecordSet rs=new RecordSet(); + String sql="delete from "+tablename +" where id=?"; + JAVATools.SetCmdwritelog("文档中心删除明细表操作"+tablename,sql+"params"+id); + rs.executeQuery(sql,id); + + } + +} diff --git a/src/main/java/com/engine/htsc/ydbx/dao/GetGoalCanCreateCMD.java b/src/main/java/com/engine/htsc/ydbx/dao/GetGoalCanCreateCMD.java new file mode 100644 index 0000000..7adde70 --- /dev/null +++ b/src/main/java/com/engine/htsc/ydbx/dao/GetGoalCanCreateCMD.java @@ -0,0 +1,83 @@ +package com.engine.htsc.ydbx.dao; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.workflow.logging.Logger; +import weaver.workflow.logging.LoggerFactory; + +import java.util.*; + +public class GetGoalCanCreateCMD extends AbstractCommonCommand> { + private Logger logger = LoggerFactory.getLogger(this.getClass()); + /** + * 属于分支机构的部门类型 + */ + private static String[] branchDept = {"JGLX02", "JGLX03", "JGLX04", "JGLX05", "JGLX06"}; + + @Override + public BizLogContext getLogContext() { + return null; + } + + public GetGoalCanCreateCMD(Map params) { + this.params = params; + } + + @Override + public Map execute(CommandContext commandContext) { + logger.info("接收到的参数是:" + JSONObject.toJSONString(params)); + Map result = new HashMap<>(); + List> district = new ArrayList<>(); + String depttypecode = ""; + Map connetDeptAndId = new HashMap<>(); + RecordSet rs = new RecordSet(); + String sql; + try { + String loginId = Util.null2String(params.get("loginId")); + // 0:通用报销 1:差旅报销 + String bxlx = Util.null2String(params.get("bxlx")); + // 获取部门类型 + sql = "select a.DEPTTYPECODE,b.id from hrmdepartmentdefined a,hrmresource b where a.DEPTID = b.DEPARTMENTID and b.loginid like '" + loginId + "%'"; + rs.executeQuery(sql); + logger.info("即将执行的sql是:" + sql); + List bmlxs = new ArrayList<>(); + while (rs.next()) { + depttypecode = Util.null2String(rs.getString("DEPTTYPECODE")); + String userid = Util.null2String(rs.getString("id")); + if (!"".equals(depttypecode)) { + String bmlx = "JGLX01".equals(depttypecode) ? "0" : Arrays.asList(branchDept).contains(depttypecode) ? "1" : "2"; + logger.info("部门类型是:" + bmlx); + if (!bmlxs.contains(bmlx)) { + bmlxs.add(bmlx); + connetDeptAndId.put(bmlx,userid); + } + } + } + if (bmlxs.size() != 0) { + for (String bmlx : bmlxs) { + sql = "select a.UNNUMBER,b.WORKFLOWNAME from uf_lcgl a,workflow_base b where a.BXLX = ? and a.BMLX = ? and a.UNNUMBER = b.UNNUMBER and b.ISVALID = 1"; + rs.executeQuery(sql, bxlx, bmlx); + if (rs.next()) { + Map okWf = new HashMap<>(); + okWf.put("value", Util.null2String(rs.getString("UNNUMBER"))); + okWf.put("label", Util.null2String(rs.getString("WORKFLOWNAME"))); + okWf.put("userid",Util.null2String(connetDeptAndId.get(bmlx))); + district.add(okWf); + } + } + } + result.put("isSuccess", "true"); + } catch (Exception e) { + logger.info("发生错误:" + e.getMessage()); + result.put("isSuccess", "false"); + } finally { + result.put("district", district); + } + logger.info("返回给前端的值是:" + result); + return result; + } +} diff --git a/src/main/java/com/engine/htsc/ydbx/dao/OpenWfByDeptCMD.java b/src/main/java/com/engine/htsc/ydbx/dao/OpenWfByDeptCMD.java new file mode 100644 index 0000000..0d1018f --- /dev/null +++ b/src/main/java/com/engine/htsc/ydbx/dao/OpenWfByDeptCMD.java @@ -0,0 +1,110 @@ +package com.engine.htsc.ydbx.dao; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.workflow.logging.Logger; +import weaver.workflow.logging.LoggerFactory; + +import java.util.*; + +/** + * @description 移动报销给予用户部门维度选择需要创建的路程 + * @参数说明 loginId-用户登录ID + * bxlx-报销类型:0:通用报销 1:差旅报销 + * bmlx-部门类型:0:总部 1:分支机构 2:子公司 + * 由于目前没有子公司的报销类型,所以目前此方法,仅支持总部和分支机构的移动报销; + * 后期如果适配子公司移动报销,维护uf_lcgl表即可 + */ +public class OpenWfByDeptCMD extends AbstractCommonCommand> { + private Logger logger = LoggerFactory.getLogger(this.getClass()); + /** + * 属于分支机构的部门类型 + */ + private static String[] branchDept = {"JGLX02", "JGLX03", "JGLX04", "JGLX05", "JGLX06"}; + + @Override + public BizLogContext getLogContext() { + return null; + } + + public OpenWfByDeptCMD(Map params) { + this.params = params; + } + + @Override + public Map execute(CommandContext commandContext) { + logger.info("接收到的参数是:" + JSONObject.toJSONString(params)); + Map result = new HashMap<>(); + List> district = new ArrayList<>(); + RecordSet rs = new RecordSet(); + String sql; + try { + String loginId = Util.null2String(params.get("loginId")); + String bxlx = Util.null2String(params.get("bxlx")); + sql = "select a.DEPTTYPECODE,b.id,c.DEPARTMENTNAME from hrmdepartmentdefined a,hrmresource b,hrmdepartment c " + + "where a.DEPTID = b.DEPARTMENTID and a.DEPTID = c.id and b.loginid like '" + loginId + "%' and b.workcode = '" + loginId + "'"; + logger.info("即将执行的sql是:" + sql); + rs.executeQuery(sql); + while (rs.next()) { + Map okWf = new HashMap<>(); + String value = Util.null2String(getWfnumberByDeptType(Util.null2String(rs.getString("DEPTTYPECODE")), bxlx)); + String label = Util.null2String(rs.getString("DEPARTMENTNAME")); + String userid = Util.null2String(rs.getString("ID")); + okWf.put("value", userid); + okWf.put("label", label); + okWf.put("wfid", new PropBean().getActiveWorkflowIdByUnNumber(value)); + okWf.put("lclx", value); + if (!"".equals(value) && !"".equals(label) && !"".equals(userid)) { + district.add(okWf); + } + } + result.put("isSuccess", "true"); + } catch (Exception e) { + logger.info("发生错误:" + e.getMessage()); + result.put("isSuccess", "false"); + } finally { + // 去除相同部门 + district = deduplicationListMap(district); + result.put("district", district); + } + logger.info("返回给前端的值是:" + result); + return result; + } + + private String getWfnumberByDeptType(String depttypecode, String bxlx) { + RecordSet rs = new RecordSet(); + String sql; + String bmlx = "JGLX01".equals(depttypecode) ? "0" : Arrays.asList(branchDept).contains(depttypecode) ? "1" : "2"; + sql = "select a.UNNUMBER from uf_lcgl a,workflow_base b where a.BXLX = ? and a.BMLX = ? and a.UNNUMBER = b.UNNUMBER and b.ISVALID = 1"; + rs.executeQuery(sql, bxlx, bmlx); + if (rs.next()) { + return Util.null2String(rs.getString("UNNUMBER")); + } else { + return ""; + } + } + + /** + * 结果去重 + * + * @param district + * @return + */ + private List> deduplicationListMap(List> district) { + List> deduplicationResult = new ArrayList<>(); + List values = new ArrayList<>(); + for (Map stringStringMap : district) { + String label = Util.null2String(stringStringMap.get("label")); + if (!values.contains(label)) { + values.add(label); + deduplicationResult.add(stringStringMap); + } + } + return deduplicationResult; + } +} diff --git a/src/main/java/com/engine/htsc/ydbx/service/MobileReimbursableService.java b/src/main/java/com/engine/htsc/ydbx/service/MobileReimbursableService.java new file mode 100644 index 0000000..3a406ec --- /dev/null +++ b/src/main/java/com/engine/htsc/ydbx/service/MobileReimbursableService.java @@ -0,0 +1,9 @@ +package com.engine.htsc.ydbx.service; + +import java.util.Map; + +public interface MobileReimbursableService { + Map getCanCreateWf(Map params); + + Map openWfByDeptService(Map params); +} diff --git a/src/main/java/com/engine/htsc/ydbx/service/PreExaminationService.java b/src/main/java/com/engine/htsc/ydbx/service/PreExaminationService.java new file mode 100644 index 0000000..f919fb0 --- /dev/null +++ b/src/main/java/com/engine/htsc/ydbx/service/PreExaminationService.java @@ -0,0 +1,14 @@ +package com.engine.htsc.ydbx.service; + +import java.util.Map; + +/** + * @Author Weaver.SongYuchen + * @Date 2022-05-27 + * @Description + */ +public interface PreExaminationService { + Map getInvoiceRepeat(String fps, String lcbh); + + Map getBankAccountInfo(String khx, String yxzfje, String yxzh); +} diff --git a/src/main/java/com/engine/htsc/ydbx/service/impl/MobileReimServiceImpl.java b/src/main/java/com/engine/htsc/ydbx/service/impl/MobileReimServiceImpl.java new file mode 100644 index 0000000..a45902f --- /dev/null +++ b/src/main/java/com/engine/htsc/ydbx/service/impl/MobileReimServiceImpl.java @@ -0,0 +1,20 @@ +package com.engine.htsc.ydbx.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.ydbx.dao.GetGoalCanCreateCMD; +import com.engine.htsc.ydbx.dao.OpenWfByDeptCMD; +import com.engine.htsc.ydbx.service.MobileReimbursableService; + +import java.util.Map; + +public class MobileReimServiceImpl extends Service implements MobileReimbursableService { + @Override + public Map getCanCreateWf(Map params) { + return commandExecutor.execute(new GetGoalCanCreateCMD(params)); + } + + @Override + public Map openWfByDeptService(Map params) { + return commandExecutor.execute(new OpenWfByDeptCMD(params)); + } +} diff --git a/src/main/java/com/engine/htsc/ydbx/service/impl/PreExaminationServiceImpl.java b/src/main/java/com/engine/htsc/ydbx/service/impl/PreExaminationServiceImpl.java new file mode 100644 index 0000000..86d138d --- /dev/null +++ b/src/main/java/com/engine/htsc/ydbx/service/impl/PreExaminationServiceImpl.java @@ -0,0 +1,145 @@ +package com.engine.htsc.ydbx.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.engine.core.impl.Service; +import com.engine.htsc.payment.util.LuhnUtil; +import com.engine.htsc.ydbx.service.PreExaminationService; +import com.alibaba.fastjson.JSONArray; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Author Weaver.SongYuchen + * @Date 2022-05-27 + * @Description + */ +public class PreExaminationServiceImpl extends Service implements PreExaminationService { + /** + * 发票重复性校验 + * + * @param fps 发票信息 + * @param lcbh 流程编号 + * @return + */ + @Override + public Map getInvoiceRepeat(String fps, String lcbh) { + BaseBean bb = new BaseBean(); + Map resMap = new HashMap<>(); + RecordSet recordSet = new RecordSet(); + bb.writeLog("发票信息:" + fps + ", 流程编号" + lcbh); + try { + List fpsList = changeStringToList(fps); + //未提供发票,默认校验通过 + if (CollectionUtils.isEmpty(fpsList)) { + resMap.put("status", "true"); + resMap.put("des", "发票重复性校验通过"); + return resMap; + } + + List dTips = new ArrayList<>(); + String sqlUf = "SELECT t2.REQUESTID, t2.REQUESTMARK, t1.FPDM, t1.FPHM FROM UF_PJXXGL t1\n" + + " LEFT JOIN WORKFLOW_REQUESTBASE t2\n" + + " ON t1.REQUESTID = t2.REQUESTID\n" + + " WHERE t1.FPDM = ? AND t1.FPHM = ?"; + bb.writeLog("sqlUf: " + sqlUf); + fpsList.stream().distinct().forEach(item -> { + if (!"@".equals(item)) { + if (!item.startsWith("@") && !item.endsWith("@")) { + recordSet.executeQuery(sqlUf, item.split("@")[0], item.split("@")[1]); + while (recordSet.next()) { + if (!recordSet.getString("REQUESTMARK").equals(lcbh)) { + dTips.add("发票" + recordSet.getString("FPHM") + + "(" + recordSet.getString("FPDM") + + ")已被流程" + recordSet.getString("REQUESTMARK") + "占用,请核实发票信息"); + } + } + } + } + }); + bb.writeLog("dTips: " + dTips); + if (dTips.isEmpty()) { + resMap.put("status", "true"); + resMap.put("des", "发票重复性校验通过"); + } else { + resMap.put("status", "false"); + resMap.put("des", dTips); + } + } catch (Exception e) { + e.printStackTrace(); + resMap.put("status", "false"); + resMap.put("des", e.toString()); + } + return resMap; + } + + /** + * 通用报销-银行账户信息校验 + * + * @param khx 开户行 + * @param yxzfje 银行支付金额 + * @param yxzh 银行账号 + * @return + */ + @Override + public Map getBankAccountInfo(String khx, String yxzfje, String yxzh) { + Map resMap = new HashMap<>(); + boolean desFlag; + String checkBank = "^[a-zA-Z0-9]{5,35}$"; + try { + //防止有多个开户行 + boolean khxFlag = true; + if (khx.contains(",")) { + khxFlag = false; + } else { + if (StringUtils.isBlank(khx) || LuhnUtil.checkString(khx.replaceAll(" ", ""))) { + khxFlag = false; + } + } + if (!yxzh.matches(checkBank) || StringUtils.isBlank(yxzh) || !khxFlag) { + desFlag = false; + } else if ("0".equals(yxzfje) || StringUtils.isBlank(yxzfje)) { + desFlag = false; + } else { + desFlag = true; + } + + if (!desFlag) { + resMap.put("status", "false"); + resMap.put("des", "请核实收款方银行账号信息"); + } else { + resMap.put("status", "true"); + resMap.put("des", "银行账户信息校验通过"); + } + } catch (Exception e) { + e.printStackTrace(); + resMap.put("status", "false"); + resMap.put("des", e.toString()); + } + return resMap; + } + + /** + * String转List + * + * @param str String类型入参 + * @return + */ + private List changeStringToList(String str) { + BaseBean bb = new BaseBean(); + List stringList = new ArrayList<>(); + JSONArray array = JSONObject.parseArray(str); + for (int i = 0; i < array.size(); i++) { + stringList.add(Util.null2String(array.get(i))); + } + bb.writeLog("StringToList解析的结果是:" + JSONObject.toJSONString(stringList)); + return stringList; + } +} \ No newline at end of file diff --git a/src/main/java/com/engine/htsc/ydbx/web/MobileReimbursable.java b/src/main/java/com/engine/htsc/ydbx/web/MobileReimbursable.java new file mode 100644 index 0000000..dd4ad3e --- /dev/null +++ b/src/main/java/com/engine/htsc/ydbx/web/MobileReimbursable.java @@ -0,0 +1,54 @@ +package com.engine.htsc.ydbx.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.ydbx.service.MobileReimbursableService; +import com.engine.htsc.ydbx.service.impl.MobileReimServiceImpl; +import weaver.general.Util; +import weaver.workflow.logging.Logger; +import weaver.workflow.logging.LoggerFactory; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +public class MobileReimbursable { + private Logger logger = LoggerFactory.getLogger(this.getClass()); + + private MobileReimbursableService getService() { + return ServiceUtil.getService(MobileReimServiceImpl.class); + } + + @GET + @Path("/getCanCreateWf") + @Produces({MediaType.APPLICATION_JSON}) + public String getCanCreateWf(@Context HttpServletRequest request) { + logger.info("==============进入获取指定人指定流程类中所有可以发起的流程"); + String loginId = Util.null2String(request.getParameter("loginId")); + String bxlx = Util.null2String(request.getParameter("bxlx")); + Map params = new HashMap<>(); + params.put("loginId", loginId); + params.put("bxlx", bxlx); + logger.info("传递的参数是:" + JSONObject.toJSONString(params)); + return JSONObject.toJSONString(getService().getCanCreateWf(params)); + } + + @GET + @Path("/openWfByDept") + @Produces({MediaType.APPLICATION_JSON}) + public String openWfByDept(@Context HttpServletRequest request){ + logger.info("==============移动报销,给予部门维度选择需要创建的流程"); + String loginId = Util.null2String(request.getParameter("loginId")); + String bxlx = Util.null2String(request.getParameter("bxlx")); + Map params = new HashMap<>(); + params.put("loginId", loginId); + params.put("bxlx", bxlx); + logger.info("传递的参数是:" + JSONObject.toJSONString(params)); + return JSONObject.toJSONString(getService().openWfByDeptService(params)); + } +} diff --git a/src/main/java/com/engine/htsc/ydbx/web/PreExaminationAction.java b/src/main/java/com/engine/htsc/ydbx/web/PreExaminationAction.java new file mode 100644 index 0000000..143fb6a --- /dev/null +++ b/src/main/java/com/engine/htsc/ydbx/web/PreExaminationAction.java @@ -0,0 +1,65 @@ +package com.engine.htsc.ydbx.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.ydbx.service.PreExaminationService; +import com.engine.htsc.ydbx.service.impl.PreExaminationServiceImpl; +import weaver.general.BaseBean; +import weaver.general.Util; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.*; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; + +/** + * @Author Weaver.SongYuchen + * @Date 2022-05-27 + * @Description + */ +public class PreExaminationAction { + private PreExaminationService getServices() { + return ServiceUtil.getService(PreExaminationServiceImpl.class); + } + + /** + * 通用报销&差旅报销-发票重复性校验 + * + * @param request + * @return + */ + @POST + @Path("/checkInvoiceRepeat") + @Produces({MediaType.APPLICATION_JSON}) + public String checkInvoiceRepeat(@Context HttpServletRequest request) { + BaseBean bb = new BaseBean(); + bb.writeLog("=========================== 发票重复性校验 ==========================="); + String fps = Util.null2String(request.getParameter("fps")); + String lcbh = Util.null2String(request.getParameter("lcbh")); + bb.writeLog("发票重复性校验 -> fps: " + fps + ", lcbh: " + lcbh); + String result = JSONObject.toJSONString(getServices().getInvoiceRepeat(fps, lcbh)); + bb.writeLog("发票重复性校验即将返回给前端的参数是:" + result); + return result; + } + + /** + * 通用报销&差旅报销-银行账户信息校验 + * + * @param request + * @return + */ + @POST + @Path("/checkBankAccountInfo") + @Produces({MediaType.APPLICATION_JSON}) + public String checkBankAccountInfo(@Context HttpServletRequest request) { + BaseBean bb = new BaseBean(); + bb.writeLog("=========================== 银行账户信息校验 ==========================="); + String khx = Util.null2String(request.getParameter("khx")); + String yxzfje = Util.null2String(request.getParameter("yxzfje")); + String yxzh = Util.null2String(request.getParameter("yxzh")); + bb.writeLog("银行账户信息校验 -> khx: " + khx + ", yxzfje: " + yxzfje + ", yxzh: " + yxzh); + String result = JSONObject.toJSONString(getServices().getBankAccountInfo(khx, yxzfje, yxzh)); + bb.writeLog("银行账户信息校验即将返回给前端的参数是:" + result); + return result; + } +} diff --git a/src/main/java/com/engine/htsc/yfkfyqr/dao/ManualPrepaymentsCMD.java b/src/main/java/com/engine/htsc/yfkfyqr/dao/ManualPrepaymentsCMD.java new file mode 100644 index 0000000..c3903ac --- /dev/null +++ b/src/main/java/com/engine/htsc/yfkfyqr/dao/ManualPrepaymentsCMD.java @@ -0,0 +1,479 @@ +package com.engine.htsc.yfkfyqr.dao; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import com.engine.htsc.payment.enums.Sequences; +import com.engine.htsc.payment.util.CoWfUtil; +import com.weaver.general.BaseBean; +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.conn.RecordSetTrans; +import weaver.general.Util; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.soa.workflow.request.MainTableInfo; +import weaver.soa.workflow.request.Property; +import weaver.soa.workflow.request.RequestInfo; +import weaver.soa.workflow.request.RequestService; +import weaver.workflow.logging.Logger; +import weaver.workflow.logging.LoggerFactory; +import weaver.workflow.request.RequestComInfo; +import weaver.workflow.workflow.WorkflowComInfo; + +import java.text.MessageFormat; +import java.util.*; + +public class ManualPrepaymentsCMD extends AbstractCommonCommand> { + Logger logger = LoggerFactory.getLogger(ManualPrepaymentsCMD.class); + + + @Override + public BizLogContext getLogContext() { + return null; + } + + public ManualPrepaymentsCMD(Map params) { + this.params = params; + } + + @Override + public Map execute(CommandContext commandContext) { + /** + * 返回的数据格式: + * { + * isSuccess:boolean, + * successMes:string, + * errorMes:string, + * } + */ + Map result = new HashMap<>(); + String[] requestIds = Util.null2String(params.get("requestIds")).split(","); + String yfkTableName = Util.null2String(params.get("yfkTableName")); + logger.info("获取到的requestids是:" + JSONObject.toJSONString(requestIds) + ",预付款主表名是:" + yfkTableName); + if (requestIds.length == 0 || "".equals(StringUtils.join(requestIds, ","))) { + result.put("isSuccess", "false"); + result.put("successMes", ""); + result.put("errorMes", "requestIds为空,请联系管理员处理"); + } else { + boolean isSuccess = true; + String successMes = ""; + String errorMes = ""; + // 1、检验要触发付款的流程是否存在未办结的预付款费用确认流程 + Map> fixResult = isFinished(requestIds, yfkTableName); + List noFinished = fixResult.get("error"); + List pass = fixResult.get("pass"); + if (noFinished.size() != 0) { + logger.info("存在已发起预付款流程编写未办结的付款流程编号是:" + StringUtils.join(noFinished, ",")); + isSuccess = false; + errorMes += StringUtils.join(noFinished, ","); + } + if (pass.size() != 0) { + // 2、触发满足条件的付款流程的预付款流程 + logger.info("这些付款流程的requestid不存在未办结的预付款费用确认流程" + JSONObject.toJSONString(pass) + "即将被触发"); + // 3、触发原付款流程的预付款费用确认流程 + for (String requestidAndLcbh : pass) { + logger.info("当前准备触发的原付款流程是:" + requestidAndLcbh); + Map workflow = createAdvanceWorkflow(requestidAndLcbh); + logger.info("触发的结果是:" + JSONObject.toJSONString(workflow)); + if ((boolean) workflow.get("isSuccess")) { + + } else { + isSuccess = false; + } + if ("".equals(successMes)) { + successMes += workflow.get("successMes"); + } else { + successMes += "," + workflow.get("successMes"); + } + + errorMes += workflow.get("errorMes"); + } + } + result.put("isSuccess", isSuccess ? "true" : "false"); + result.put("successMes", successMes); + result.put("errorMes", errorMes); + } + + return result; + } + + private List> dataIsWhole(String[] requestIds) { + List> data = new ArrayList<>(); + List ok = new ArrayList<>(); + List error = new ArrayList<>(); + RecordSet rs = new RecordSet(); + String sql = "select requtid,lclx,lczbm from uf_PrepayMageAccRep where requtid in (" + StringUtils.join(requestIds, ",") + ")"; + rs.executeQuery(sql, StringUtils.join(requestIds, ",")); + while (rs.next()) { + if ("".equals(Util.null2String(rs.getString("lclx"))) || "".equals(Util.null2String(rs.getString("lczbm")))) { + error.add(Util.null2String(rs.getString("requtid"))); + } else { + ok.add(Util.null2String(rs.getString("requtid"))); + } + } + data.add(error); + data.add(ok); + return data; + } + + /** + * 批量处理,根据付款流程的requestId,到预付款费用确认流程中查找是否有已经发起并且没有办结的付款流程 + */ + private Map> isFinished(String[] requestIds, String yfkTableName) { + RecordSet rs = new RecordSet(); + String sql = ""; + List pass = new ArrayList<>(); + List error = new ArrayList<>(); + Map> dealResult = new HashMap<>(); + for (String requestId : requestIds) { + sql = "select currentnodetype,isstopped,lcbh,status " + + ",(select t1.tablename from workflow_bill t1,workflow_base t2,workflow_requestbase t3 where t1.id =t2.formid and t2.id = t3.workflowid and t3.requestid = '" + requestId + "') as mainTable" + + " from workflow_requestbase a join " + yfkTableName + " b on a.requestid = b.requestid where a.requestid in (select requestid from " + yfkTableName + " where GLYFKLC = '" + requestId + "')"; + rs.executeQuery(sql); + boolean isOK = true; + while (rs.next()) { + String isstopped = Util.null2String(rs.getString("isstopped")); + String currentnodetype = Util.null2String(rs.getString("currentnodetype")); + String lcbh = Util.null2String(rs.getString("lcbh")); + String status = Util.null2String(rs.getString("status")); + if ((!"1".equals(isstopped)) && ("3".equals(currentnodetype))) { + } else { + isOK = false; + error.add("预付款确认流程(" + lcbh + ")正在进行中,请办结后再触发新的费用确认流程"); + } + } + if (isOK) { + String requestIdAndLcbh = requestId + "&" + getLcbhByRequestId(getMainTable(requestId), requestId); + pass.add(requestIdAndLcbh); + } + } + dealResult.put("pass", pass); + dealResult.put("error", error); + return dealResult; + } + + private String getMainTable(String requestId) { + RecordSet rs = new RecordSet(); + rs.executeQuery("select t1.tablename from workflow_bill t1,workflow_base t2,workflow_requestbase t3 where t1.id =t2.formid and t2.id = t3.workflowid and t3.requestid = '" + requestId + "'"); + if (rs.next()) { + return Util.null2String(rs.getString("tablename")); + } else { + return null; + } + } + + private String getLcbhByRequestId(String mainTable, String requestid) { + RecordSet rs = new RecordSet(); + rs.executeQuery("select lcbh from " + mainTable + " where requestid = '" + requestid + "'"); + if (rs.next()) { + return Util.null2String(rs.getString("lcbh")); + } else { + return ""; + } + + } + + /** + * 根据付款流程的requestId批量触发预付款流程 + * + * @param requestidAndLcbh 付款流程requestid + * @return 创建结果 + * 返回值样式 + * { + * isSuccess:boolean, + * successMes:string, + * errorMes:string + * } + */ + private Map createAdvanceWorkflow(String requestidAndLcbh) { + PropBean pp = new PropBean(); + Map result = new HashMap<>(); + String yskmPre = pp.getPropName("YFKFYQRaccountTreeId"); + String hjkmPre = pp.getPropName("YFKKJRaccountTreeId"); + logger.info("触发预付款费用确认流程开始======requestIds:" + requestidAndLcbh); + RecordSetTrans rst = new RecordSetTrans(); + RecordSet rs = new RecordSet(); + RecordSet rsdetail = new RecordSet(); + List createSuccess = new ArrayList<>(); + try { + rst.setAutoCommit(false); + //流水号 + int number = -1; + String workflowId = pp.getPropName("YFKQR_WORKFLOWID"); + String tableName = pp.getPropName("yfkTableName"); + //1提交到下一节点,0不提交 + String IsNextFlow = "1"; +// for (String requestidAndLcbh : requestidAndLcbhs) { + Map selectSqlAndMainTable = getSelectSql(requestidAndLcbh); + logger.info("付款流程的查询SQL和主表名:" + selectSqlAndMainTable); + String selectSql = Util.null2String(selectSqlAndMainTable.get("sql")); + logger.info("即将执行的主数据获取SQL是:" + selectSql); + String mainTable = Util.null2String(selectSqlAndMainTable.get("mainTable")); + logger.info("该预付款的主表名是:" + mainTable); + rs.executeQuery(selectSql); + while (rs.next()) { + Map requestMainMap = new HashMap(); + Integer uf_id = Util.getIntValue(rs.getString("id")); + String requestid = Util.null2String(rs.getString("reqid")); + String lcbh = Util.null2String(rs.getString("lcbh")); + String ngr = Util.null2String(rs.getString("ngr")); + String bt = Util.null2String(rs.getString("bt")); + String szbm = Util.null2String(rs.getString("szbm")); + String jjcd = Util.null2String(rs.getString("jjcd")); + String jjyy = Util.null2String(rs.getString("jjyy")); + String lxfs = Util.null2String(rs.getString("lxfs")); + String ngsj = Util.null2String(rs.getString("ngsj")); + String xjhjmx = Util.null2String(rs.getString("xjhjmx")); + String ngrfyhj = Util.null2String(rs.getString("ngrfyhj")); + String fyhjsp = Util.null2String(rs.getString("fyhjsp")); + String skdw = Util.null2String(rs.getString("skdw")); + String ggfyqtfy = Util.null2String(rs.getString("ggfyqtfy")); + String fkxx = Util.null2String(rs.getString("fkxx")); + String fzjgcwjl = Util.null2String(rs.getString("fzjgcwjl")); + String requestName = lcbh + bt + "的预付款费用确认"; + String bz = "收款方: " + skdw; + logger.info("预付款流程确认标题==" + requestName); +// 预付款流程 + String mark = CoWfUtil.getRequestMarkByUnNumber("zbyfkfyqr", Sequences.NET_REI_WORKFLOW_SEQ_ZB); + + requestMainMap.put("ngr", ngr); + requestMainMap.put("glyfklc", requestid); + requestMainMap.put("szbm", szbm); + requestMainMap.put("jjcd", jjcd); + requestMainMap.put("jjyy", jjyy); + requestMainMap.put("lxfs", lxfs); + requestMainMap.put("ngsj", ngsj); + requestMainMap.put("xjhjmx", xjhjmx); + requestMainMap.put("ngrfyhj", ngrfyhj); + requestMainMap.put("fyhjsp", fyhjsp); + requestMainMap.put("ggfyqtfy", ggfyqtfy); + requestMainMap.put("bz", bz); + requestMainMap.put("spjg", "0"); + requestMainMap.put("fkxx", fkxx); + requestMainMap.put("fzjgcwjl", fzjgcwjl); + requestMainMap.put("lcbh", mark.toString()); + requestMainMap = removeNullValue(requestMainMap); + logger.info("预付款流程生成过滤后参数==" + JSON.toJSONString(requestMainMap)); + //2.自动创建流程获取requestid + int requestid_main_213 = Util.getIntValue(WorkflowCreateByRequestMap(ngr, workflowId, requestName, IsNextFlow, requestMainMap)); + logger.info("预付款流程确认自动生成requestid==" + requestid_main_213); + if (requestid_main_213 > 0) { + Integer form_id = null; + rsdetail.executeQuery("select id from " + tableName + " where requestid = ?", requestid_main_213); + if (rsdetail.next()) { + form_id = Util.getIntValue(rsdetail.getString("id")); + } + + //1.更新流程编号 + logger.info("requestid==" + requestid_main_213 + "==lcbh:" + mark.toString()); + rst.executeUpdate("update workflow_requestbase set requestmark = ? where requestid = ? ", mark.toString(), requestid_main_213); + + //3.更新预付款流程的明细表(采用批量插入更新方法)只执行一次 + String tableName_detail_eight = tableName + "_dt8"; + String detail_eight_sql = "insert into " + tableName_detail_eight + " (mainid,bhsje,sj,jshjje,sy,fysjcdbm,sl,yskm,slz,htbh,cys,yskmid) " + + " select " + form_id + ",bhsje,sj,jshjje,sy,fysjcdbm,sl,yskm,'' as slz,'' as htbh,cys,'" + yskmPre + "_'||yskm from " + mainTable + "_dt8 where mainid = " + uf_id + ""; + logger.info("批量插入sql明细表8==" + detail_eight_sql); + rst.executeUpdate(detail_eight_sql); + + String tableName_detail_nine = tableName + "_dt9"; + String detail_nine_sql = "insert into " + tableName_detail_nine + " (mainid,rmbje,htbh,sy,bz,hl,wbje,yskm,fysjcdbm,cys,yskmid) " + + " select " + form_id + ",rmbje,'' as htbh,sy,bz,hl,wbje,yskm,fysjcdbm,cys,'" + yskmPre + "_'||yskm from " + mainTable + "_dt9 where mainid = " + uf_id + ""; + logger.info("批量插入sql明细表9==" + detail_nine_sql); + rst.executeUpdate(detail_nine_sql); + + String tableName_detail_eleven = tableName + "_dt11"; + String detail_eleven_sql = "insert into " + tableName_detail_eleven + " (mainid,skdw,yxzh,khx,ss,yxzfje,xjzfje,dfkje,lsjl,khxmc) " + + " select " + form_id + ",skdw,yxzh,khx,ss,yxzfje,xjzfje,dfkje,lsjl,khxmc from " + mainTable + "_dt11 where mainid = " + uf_id + ""; + logger.info("批量插入sql明细表11==" + detail_eleven_sql); + rst.executeUpdate(detail_eleven_sql); + + String tableName_detail_twelve = tableName + "_dt12"; + String detail_twelve_sql = "insert into " + tableName_detail_twelve + " (mainid,fysjcdbm,je,sjbz,zhrmb,hjkm,hl,hjkmid,yskmmc,yskm) " + + " select " + form_id + ",fysjcdbm,je,sjbz,zhrmb,hjkm,hl,'" + hjkmPre + "_'||hjkm,yskmmc,yskm from " + mainTable + "_dt12 where mainid = " + uf_id + ""; + logger.info("批量插入sql明细表12==" + detail_twelve_sql); + rst.executeUpdate(detail_twelve_sql); + } + } + rst.commit(); + createSuccess.add(requestidAndLcbh); +// } + } catch (Exception e) { + result.put("isSuccess", false); + result.put("successMes", createSuccess); + result.put("errorMes", "创建流程失败,请联系管理员"); + logger.error("存在创建失败的流程:" + e.getMessage()); + } + if (createSuccess.size() != 0) { + result.put("isSuccess", true); + result.put("successMes", createSuccess.get(0)); + result.put("errorMes", ""); + } + return result; + } + + + /** + * 根据流程编号返回具体的查询sql + * + * @param requestidAndLcbh + * @return + */ + private Map getSelectSql(String requestidAndLcbh) { + Map result = new HashMap<>(); + logger.info("====================进入主表数据的获取sql================"); + String requestid = requestidAndLcbh.split("&")[0]; + String lcbh = Util.null2String(requestidAndLcbh.split("&")[1]); + if (lcbh.contains("总部通用付款")) { + Map zbtyfk = buildGetMainSql("zbtyfk", requestid); + result.put("sql", zbtyfk.get("sql")); + result.put("mainTable", zbtyfk.get("mainTable")); + } + if (lcbh.contains("总部工会付款")) { +// 该流程中费用会计审批节点固定设置的张璇,所以设置的27827 + Map zbghfk = buildGetMainSql("zbghfk", requestid); + result.put("sql", zbghfk.get("sql")); + result.put("mainTable", zbghfk.get("mainTable")); + } + if (lcbh.contains("总部IT付款")) { + Map zbitfk = buildGetMainSql("zbitfk", requestid); + result.put("sql", zbitfk.get("sql")); + result.put("mainTable", zbitfk.get("mainTable")); + } + if (lcbh.contains("分支机构通用付款")) { + Map fzjgtyfk = buildGetMainSql("fzjgtyfk", requestid); + result.put("sql", fzjgtyfk.get("sql")); + result.put("mainTable", fzjgtyfk.get("mainTable")); + } + if (lcbh.contains("托收业务流程")) { + Map tsywlc = buildGetMainSql("tsywlc", requestid); + result.put("sql", tsywlc.get("sql")); + result.put("mainTable", tsywlc.get("mainTable")); + } + logger.info("=-=-=-=-=-=-=-=-=-=-=-=-返回的结果是:" + JSONObject.toJSONString(result) + "=-=-=-=-=-=-=-=-=-=-=-=-"); + return result; + } + + /** + * 移除map中的空值数据 + * + * @param map + * @return + */ + private static Map removeNullValue(Map map) { + Map newMap = new HashMap(); + for (Map.Entry entry : map.entrySet()) { + String key = entry.getKey(); + String value = entry.getValue(); + if (value != null && !"".equals(value)) { + newMap.put(key, value); + } + } + return newMap; + } + + /** + * @param @param creatorId 创建人Id + * @param @param workflowId 流程Id + * @param @param requestName 请求标题 + * @param @param IsNextFlow 是否提交到下一节点 + * @param @param requestMap Map格式的主表数据=<字段名称,字段值> + * @param @return 设定文件 + * @return String 返回类型 + * @throws + * @Title: 自动创建流程 + */ + public static String WorkflowCreateByRequestMap(String creatorId, String workflowId, + String requestName, String IsNextFlow, + Map requestMainMap) { + com.weaver.general.BaseBean bs = new BaseBean(); + String requestid = ""; + RequestInfo requestInfo = new RequestInfo(); + requestInfo.setCreatorid(creatorId);//创建人Id + requestInfo.setWorkflowid(workflowId);//工作流Id + requestInfo.setDescription(requestName);//请求标题 + if (!"".equals(IsNextFlow)) { + requestInfo.setIsNextFlow(IsNextFlow); + } + //主表字段 + MainTableInfo mainTableInfo = new MainTableInfo(); + Property[] propertyArray = new Property[requestMainMap.size()]; + int p = 0; + for (Map.Entry entry : requestMainMap.entrySet()) { + propertyArray[p] = new Property(); + propertyArray[p].setName(Util.null2String(entry.getKey())); + propertyArray[p].setValue(Util.null2String(entry.getValue())); + bs.writeLog("\r\n---p=" + p + "---Key=" + entry.getKey() + "---Value=" + entry.getValue()); + p++; + } + bs.writeLog("-----创建流程传递的参数个数p=" + p); + mainTableInfo.setProperty(propertyArray); + requestInfo.setMainTableInfo(mainTableInfo); + RequestService service = new RequestService(); + try { + //流程 + try { + requestid = service.createRequest(requestInfo);//创建请求id + } catch (Exception e) { + bs.writeLog("预付款流程触发异常" + e.getMessage()); + } + //String userId = requestInfo.getLastoperator();//请求最后的操作者 + //记录日志 + StringBuffer sbf = new StringBuffer("\r\n-----xwd创建工作流记录日志开始"); + WorkflowComInfo wfcif = new WorkflowComInfo(); + RequestComInfo rcif = new RequestComInfo(); + ResourceComInfo rscif = new ResourceComInfo(); + sbf.append("\r\n-----姓名:" + rscif.getLastname(rcif.getRequestCreater(requestid))); + sbf.append("\r\n-----时间:" + rcif.getRequestCreateTime(requestid)); + sbf.append("\r\n-----创建流程:" + wfcif.getWorkflowname(workflowId)); + sbf.append("\r\n-----请求:" + rcif.getRequestname(requestid)); + sbf.append("\r\n-----请求:" + requestid); + sbf.append("\r\n-----创建工作流记录日志结束"); + bs.writeLog(sbf.toString()); + System.out.println("" + sbf.toString()); + } catch (Exception e) { + bs.writeLog("错误:" + e); + System.out.println("错误:" + e); + } + return requestid; + } + + + /** + * 根据流程类型获取数据写入需要的主表数据查询sql + * + * @param type 流程类型 + * @param requestId 付款流程requestId + * @return 查询sql + */ + private Map buildGetMainSql(String type, String requestId) { + StringBuilder sql = new StringBuilder(); + RecordSet rs = new RecordSet(); + String fromtable = ""; + Map result = new HashMap<>(); + rs.executeQuery("select fromtable,reqid,lcbh,ngr,szbm,jjcd,jjyy,lxfs,ngsj,xjhjmx,ngrfyhj,fyhjsp,ggfyqtfy,fkxx,fzjgcwjl from uf_yfkfyqrzjb where lclx = '" + type + "'"); + if (rs.next()) { + fromtable = rs.getString("fromtable"); + sql.append("select a.id,c.requestname as bt"); + for (String column : rs.getColumnName()) { + if (!"FROMTABLE".equals(column)) { + sql.append(","); + if (!"".equals(rs.getString(column))) { + sql.append("a.").append(rs.getString(column)).append(" as ").append(column.toLowerCase()); + } else { + sql.append("'' as ").append(column.toLowerCase()); + } + } + } + sql.append(",(select wm_concat_old(b.skdw) from ").append(fromtable).append("_dt11 b where a.id = b.mainid)") + .append("as skdw from ").append(fromtable).append(" a join workflow_requestbase c on a.requestid = c.requestid") + .append(" where a.requestid = '").append(requestId).append("'"); + } + result.put("sql", String.valueOf(sql)); + result.put("mainTable", fromtable); + return result; + } + +} diff --git a/src/main/java/com/engine/htsc/yfkfyqr/dao/NewYfkByOldTsCMD.java b/src/main/java/com/engine/htsc/yfkfyqr/dao/NewYfkByOldTsCMD.java new file mode 100644 index 0000000..096247f --- /dev/null +++ b/src/main/java/com/engine/htsc/yfkfyqr/dao/NewYfkByOldTsCMD.java @@ -0,0 +1,359 @@ +package com.engine.htsc.yfkfyqr.dao; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import com.engine.htsc.payment.enums.Sequences; +import com.engine.htsc.payment.util.CoWfUtil; +import weaver.conn.RecordSet; +import weaver.conn.RecordSetTrans; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.soa.workflow.request.MainTableInfo; +import weaver.soa.workflow.request.Property; +import weaver.soa.workflow.request.RequestInfo; +import weaver.soa.workflow.request.RequestService; +import weaver.workflow.request.RequestComInfo; +import weaver.workflow.workflow.WorkflowComInfo; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; + +public class NewYfkByOldTsCMD extends AbstractCommonCommand> { + @Override + public BizLogContext getLogContext() { + return null; + } + + public NewYfkByOldTsCMD(Map params) { + this.params = params; + } + + @Override + public Map execute(CommandContext commandContext) { + Map doResult = new HashMap<>(); + BaseBean bb = new BaseBean(); + bb.writeLog("接口到的参数是:"+params); + bb.writeLog("=================check in CMD Function================"); + PropBean pp = new PropBean(); + RecordSet rs = new RecordSet(); + RecordSet rsdetail = new RecordSet(); + RecordSetTrans rst = new RecordSetTrans(); + try { + List successRequestId = new ArrayList<>(); + String tsywMainTableName = mainTableName("fyft"); + List requestids; + String type = Util.null2String(params.get("type")); + if ("all".equals(type)) { +// 从数据库中获取所有已归档但没有发起预付款流程的托收业务 + requestids = getAllOldTsResID(); + } else { + requestids = new ArrayList<>(Arrays.asList(Util.null2String(params.get("requestids")).split(","))); + } + bb.writeLog("===============requestids:"+requestids+"====================="); + //创建流程开始 + for (String requestid : requestids) { + Map mainData = getDataFromDB(tsywMainTableName, "requestid", requestid); + if ("0".equals(Util.null2String(mainData.get("sfxfkhtgfp")))) { + String ngr = Util.null2String(mainData.get("ngr")); + boolean isHeader = isHeader(ngr); + String workflowId = pp.getPropName("YFKQR_WORKFLOWID"); + String treeId = pp.getPropName("YFKFYQRaccountTreeId"); + writeLog("================获取的预算科目前缀============" + treeId); + String tableName = "formtable_main_"; + rs.executeQuery("select formid from workflow_base where id = ?", workflowId); + if (rs.next()) { + int formid = Math.abs(Util.getIntValue(rs.getString("formid"))); + tableName = tableName + formid; + writeLog("预付款流程表名==" + tableName); + } else { + writeLog("获取预付款流程表名失败=="); + } + String IsNextFlow = "1"; //1提交到下一节点,0不提交 + String mark = CoWfUtil.getRequestMarkByUnNumber("zbyfkfyqr", Sequences.NET_REI_WORKFLOW_SEQ_ZB); + String lcbh = Util.null2String(mainData.get("lcbh")); + String requestName = lcbh + "的预付款费用确认"; + String skdw = getSkdw(requestid); + String bz = "收款方: " + skdw; + writeLog("预付款流程确认标题==" + requestName); + String ngsj = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")); + writeLog("获取的当前时间是:" + ngsj); + Map requestMainMap = new HashMap(); + requestMainMap.put("ngr", ngr); + requestMainMap.put("glyfklc", requestid); + requestMainMap.put("szbm", Util.null2String(mainData.get("szbm"))); + requestMainMap.put("jjcd", Util.null2String(mainData.get("jjcd"))); + requestMainMap.put("jjyy", Util.null2String(mainData.get("jjyy"))); + requestMainMap.put("lxfs", Util.null2String(mainData.get("lxfs"))); + requestMainMap.put("ngsj", ngsj); + requestMainMap.put("xjhjmx", Util.null2String(mainData.get("xjhjmx"))); +// requestMainMap.put("ngrfyhj", Util.null2String(mainData.get("ngbmfyhj")));//总部给这个字段 + if (isHeader) { + requestMainMap.put("fyhjsp", Util.null2String(mainData.get("fyhj")));//总部给这个字段 + } else { + requestMainMap.put("fyhjsp", Util.null2String(mainData.get("cwzxhj")));//分支 fyhjsp-----cwzxhj + } + requestMainMap.put("ggfyqtfy", "1"); + requestMainMap.put("bz", bz); + requestMainMap.put("spjg", "0"); + requestMainMap.put("fkxx", Util.null2String(mainData.get("fkxx"))); + //预付款流程的分支机构财务经理对应托收业务的什么字段 + if (!isHeader) { + //分支机构才赋值 + requestMainMap.put("fzjgcwjl", Util.null2String(mainData.get("cwzxjl"))); + } + requestMainMap.put("lcbh", mark.toString()); + requestMainMap = removeNullValue(requestMainMap); + writeLog("预付款流程生成过滤后参数==" + JSON.toJSONString(requestMainMap)); + //2.自动创建流程获取requestid + int requestid_main_213 = Util.getIntValue(WorkflowCreateByRequestMap(ngr, workflowId, requestName, IsNextFlow, requestMainMap)); + writeLog("预付款流程确认自动生成requestid==" + requestid_main_213); + if (requestid_main_213 > 0) { + Integer form_id = null; + rsdetail.executeQuery("select id from " + tableName + " where requestid = ?", requestid_main_213); + if (rsdetail.next()) { + form_id = Util.getIntValue(rsdetail.getString("id")); + } + + //1.更新流程编号 + writeLog("requestid==" + requestid_main_213 + "==lcbh:" + mark.toString()); + rst.executeUpdate("update workflow_requestbase set requestmark = ? where requestid = ? ", mark.toString(), requestid_main_213); + + //3.更新预付款流程的明细表(采用批量插入更新方法)只执行一次 + String tableName_detail_eight = tableName + "_dt8"; + String detail_eight_sql = "insert into " + tableName_detail_eight + " (mainid,bhsje,sj,jshjje,sy,fysjcdbm,sl,yskm,slz,cys,yskmid) " + + " select " + form_id + ",bhsje,sj,jshjje,sy,fysjcdbm,sl,yskm,slz,cys,concat('" + treeId + "_',yskm) as yskmid from " + tsywMainTableName + "_dt8 where mainid = (select id from " + tsywMainTableName + " where requestid = '" + requestid + "')"; + writeLog("即将执行明细表8更新语句"); + writeLog("其中数据select语句是:" + "select " + form_id + ",bhsje,sj,jshjje,sy,fysjcdbm,sl,yskm,slz,cys,concat('" + treeId + "_',yskm) as yskmid from " + tsywMainTableName + "_dt8 where mainid = (select id from " + tsywMainTableName + " where requestid = '" + requestid + "')"); + writeLog("整体更新明细表8语句是" + detail_eight_sql); + rst.executeUpdate(detail_eight_sql); + + String tableName_detail_nine = tableName + "_dt9"; + String detail_nine_sql = "insert into " + tableName_detail_nine + " (mainid,rmbje,sy,bz,hl,wbje,yskm,fysjcdbm,cys,yskmid) " + + " select " + form_id + ",rmbje,sy,bz,hl,wbje,yskm,fysjcdbm,cys,concat('" + treeId + "_',yskm) as yskmid from " + tsywMainTableName + "_dt9 where mainid = (select id from " + tsywMainTableName + " where requestid = '" + requestid + "')"; + writeLog("批量插入sql明细表9==" + detail_nine_sql); + rst.executeUpdate(detail_nine_sql); + + String tableName_detail_eleven = tableName + "_dt11"; + String detail_eleven_sql = "insert into " + tableName_detail_eleven + " (mainid,skdw,yxzh,khx,ss,yxzfje,xjzfje,dfkje,lsjl,khxmc) " + + " select " + form_id + ",skdw,yxzh,khx,ss,yxzfje,xjzfje,dfkje,lsjl,khxmc from " + tsywMainTableName + "_dt11 where mainid = (select id from " + tsywMainTableName + " where requestid = '" + requestid + "')"; + writeLog("批量插入sql明细表11==" + detail_eleven_sql); + rst.executeUpdate(detail_eleven_sql); + + String tableName_detail_twelve = tableName + "_dt12"; + String detail_twelve_sql = "insert into " + tableName_detail_twelve + " (mainid,fysjcdbm,je,sjbz,zhrmb,hjkm,hl,hjkmid,yskmmc,yskm) " + + " select " + form_id + ",fysjcdbm,je,sjbz,zhrmb,hjkm,hl,hjkmid,yskmmc,yskm from " + tsywMainTableName + "_dt12 where mainid = (select id from " + tsywMainTableName + " where requestid = '" + requestid + "')"; + writeLog("批量插入sql明细表12==" + detail_twelve_sql); + rst.executeUpdate(detail_twelve_sql); + + //4.更新建模中间表表示该条数据已完成新建流程 + rst.executeUpdate("update " + tsywMainTableName + " set sfcfyfklc = 1 where requestid = ?", requestid); + writeLog("托收业务sfcfyfklc字段更新成功=="); + + } + writeLog("==CreatewfAction==预付款流程自动创建成功====="); + rst.commit(); + } + successRequestId.add(requestid); + } + doResult.put("code","200"); + doResult.put("hasSuccessed", successRequestId); + } catch (Exception e) { + e.getMessage(); + doResult.put("code","500"); + doResult.put("message",e.getMessage()); + } + return doResult; + } + + /* + * 获取所有已归档但没有发起预付款流程的托收业务 + * */ + private List getAllOldTsResID() { + List requestids = new ArrayList<>(); + BaseBean bb = new BaseBean(); + bb.writeLog("check in:获取所有已归档但没有发起预付款流程的托收业务"); + RecordSet rs = new RecordSet(); + String sql = "select TABLENAME from workflow_bill a join workflow_base b on a.id = b.FORMID where UNNUMBER = 'fyft' and ISVALID = '1'"; + rs.executeQuery(sql); + String tablename = ""; + if (rs.next()) { + tablename = Util.null2String(rs.getString("TABLENAME")); + } + bb.writeLog("获取的托收业务的主表名称是:" + tablename + "准备获取符合条件的requestid"); + sql = "select b.requestid from workflow_requestbase a join " + tablename + " b on a.requestid = b.requestid where a.WORKFLOWID = (select id from workflow_base where UNNUMBER = 'fyft' and ISVALID = '1')" + + "and a.currentnodetype = '3' and (SFCFYFKLC != 1 or SFCFYFKLC is null)"; + rs.executeQuery(sql); + while (rs.next()) { + requestids.add(Util.null2String(rs.getString("requestid"))); + } + bb.writeLog("已归档但没有发起预付款流程的托收业务requestids有:" + JSONObject.toJSONString(requestids)); + return requestids; + } + + + /** + * @param @param creatorId 创建人Id + * @param @param workflowId 流程Id + * @param @param requestName 请求标题 + * @param @param IsNextFlow 是否提交到下一节点 + * @param @param requestMap Map格式的主表数据=<字段名称,字段值> + * @param @return 设定文件 + * @return String 返回类型 + * @throws + * @Title: 自动创建流程 + */ + public String WorkflowCreateByRequestMap(String creatorId, String workflowId, + String requestName, String IsNextFlow, + Map requestMainMap) { + com.weaver.general.BaseBean bs = new com.weaver.general.BaseBean(); + String requestid = ""; + RequestInfo requestInfo = new RequestInfo(); + requestInfo.setCreatorid(creatorId);//创建人Id + requestInfo.setWorkflowid(workflowId);//工作流Id + requestInfo.setDescription(requestName);//请求标题 + if (!"".equals(IsNextFlow)) { + requestInfo.setIsNextFlow(IsNextFlow); + } + //主表字段 + MainTableInfo mainTableInfo = new MainTableInfo(); + Property[] propertyArray = new Property[requestMainMap.size()]; + int p = 0; + for (Map.Entry entry : requestMainMap.entrySet()) { + propertyArray[p] = new Property(); + propertyArray[p].setName(Util.null2String(entry.getKey())); + propertyArray[p].setValue(Util.null2String(entry.getValue())); + bs.writeLog("\r\n---p=" + p + "---Key=" + entry.getKey() + "---Value=" + entry.getValue()); + p++; + } + bs.writeLog("-----创建流程传递的参数个数p=" + p); + mainTableInfo.setProperty(propertyArray); + requestInfo.setMainTableInfo(mainTableInfo); + RequestService service = new RequestService(); + try { + //流程 + try { + requestid = service.createRequest(requestInfo);//创建请求id + } catch (Exception e) { + bs.writeLog("预付款流程触发异常" + e.getMessage()); + } + //String userId = requestInfo.getLastoperator();//请求最后的操作者 + //记录日志 + StringBuffer sbf = new StringBuffer("\r\n-----xwd创建工作流记录日志开始"); + WorkflowComInfo wfcif = new WorkflowComInfo(); + RequestComInfo rcif = new RequestComInfo(); + ResourceComInfo rscif = new ResourceComInfo(); + sbf.append("\r\n-----姓名:" + rscif.getLastname(rcif.getRequestCreater(requestid))); + sbf.append("\r\n-----时间:" + rcif.getRequestCreateTime(requestid)); + sbf.append("\r\n-----创建流程:" + wfcif.getWorkflowname(workflowId)); + sbf.append("\r\n-----请求:" + rcif.getRequestname(requestid)); + sbf.append("\r\n-----请求:" + requestid); + sbf.append("\r\n-----创建工作流记录日志结束"); + bs.writeLog(sbf.toString()); + bs.writeLog("" + sbf.toString()); + } catch (Exception e) { + bs.writeLog("错误:" + e); + bs.writeLog("错误:" + e); + } + return requestid; + } + + /* + * 通过流程wfunnumber获取流程主表名 + * */ + private String mainTableName(String unnumber) { + RecordSet rs = new RecordSet(); + rs.executeQuery("select TABLENAME from workflow_bill a join workflow_base b on a.id = b.FORMID where UNNUMBER = '" + unnumber + "' and ISVALID = '1'"); + if (rs.next()) { + return Util.null2String(rs.getString("TABLENAME")); + } else { + return ""; + } + } + + /** + * 移除map中的空值数据 + * + * @param map + * @return + */ + private Map removeNullValue(Map map) { + Map newMap = new HashMap(); + for (Map.Entry entry : map.entrySet()) { + String key = entry.getKey(); + String value = entry.getValue(); + if (value != null && !"".equals(value)) { + newMap.put(key, value); + } + } + return newMap; + } + + /* + * 获取收款单位 + * */ + private String getSkdw(String requestId) { + String skdw = ""; + String tsywTableName = ""; + BaseBean bb = new BaseBean(); + writeLog("进入收款单位获取方法"); + RecordSet rs = new RecordSet(); + String sql = ""; + sql = "select tablename from workflow_base a,workflow_bill b,workflow_requestbase c where a.formid=b.id and a.id=c.workflowid and c.requestid='" + requestId + "'"; + writeLog("即将执行获取托收业务主表名的sql:" + sql); + rs.executeQuery(sql); + if (rs.next()) { + tsywTableName = rs.getString("tablename"); + } + writeLog("获取的托收业务主表名是:" + tsywTableName); + sql = "select wm_concat_old(skdw) as skdw from " + tsywTableName + "_dt11 where mainid = (select id from " + tsywTableName + " where requestid = '" + requestId + "')"; + writeLog("即将执行获取收款单位的sql是:" + sql); + rs.executeQuery(sql); + if (rs.next()) { + skdw = rs.getString("skdw"); + } + writeLog("返回的收款单位是:" + skdw); + return skdw; + } + + /* + * 根据人员ID判断所在机构是否是总部 + * */ + private boolean isHeader(String id) { + boolean back; + BaseBean bb = new BaseBean(); + RecordSet rs = new RecordSet(); + String sql = "select depttypecode from hrmdepartmentdefined where DEPTID = (select DEPARTMENTID from hrmresource where id = '" + id + "')"; + rs.executeQuery(sql); + if (rs.next()) { + back = "JGLX01".equals(Util.null2String(rs.getString("depttypecode"))); + } else { + back = false; + } + return back; + } + + /* + * 获取主表数据 + * */ + private Map getDataFromDB(String tablename, String whereBefore, String whereAfter) { + new BaseBean().writeLog("接收到的参数是:"+tablename+" "+whereBefore+" "+whereAfter); + Map oneRow = new HashMap<>(); + RecordSet rs = new RecordSet(); + String sql = "select * from " + tablename + " where " + whereBefore + "='" + whereAfter + "'"; + new BaseBean().writeLog("即将执行的SQL语句是:" + sql); + rs.executeQuery(sql); + if (rs.next()) { + String[] columnNames = rs.getColumnName(); + for (String columnName : columnNames) { + oneRow.put(columnName.toLowerCase(), rs.getString(columnName)); + } + } + return oneRow; + } +} diff --git a/src/main/java/com/engine/htsc/yfkfyqr/dao/ViewDetailCMD.java b/src/main/java/com/engine/htsc/yfkfyqr/dao/ViewDetailCMD.java new file mode 100644 index 0000000..a5c969c --- /dev/null +++ b/src/main/java/com/engine/htsc/yfkfyqr/dao/ViewDetailCMD.java @@ -0,0 +1,237 @@ +package com.engine.htsc.yfkfyqr.dao; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import com.engine.htsc.yfkfyqr.pojo.ReceivingUnitDetail; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.workflow.logging.Logger; +import weaver.workflow.logging.LoggerFactory; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class ViewDetailCMD extends AbstractCommonCommand> { + private Logger logger = LoggerFactory.getLogger(this.getClass()); + private String requestid; + + @Override + public BizLogContext getLogContext() { + return null; + } + + public ViewDetailCMD(String requestid) { + this.requestid = requestid; + } + + @Override + public Map execute(CommandContext commandContext) { + logger.info("接收到的requestid参数是:" + requestid); + Map result = new HashMap<>(); + try { +// 1、取原付款流程的支付模块信息 + List receivingUnitDetails = getPaymentWorkFlowReceiveDetail(requestid); +// [{"skdw":"上海携程宏睿国际旅行社有限公司","yfkje":"1060201.06"},{"skdw":"华泰giaogiaogiao","yfkje":"250"}] + logger.info("原付款流程的支付模块信息:" + JSONObject.toJSONString(receivingUnitDetails)); +// 2、取关联此付款流程并且已经办结的预付款费用确认流程票据信息 + Map prepaymentUnitDetail = getPrepaymentWfReceiveDetail(requestid); +// {"空":102.0} + logger.info("关联此付款流程并且已经办结的预付款费用确认流程票据信息:" + prepaymentUnitDetail); +// 3、数据合并返回 +// 3.1、匹配的数据整理 + for (ReceivingUnitDetail receivingUnitDetail : receivingUnitDetails) { + String skdw = receivingUnitDetail.getSkdw(); + if (prepaymentUnitDetail.containsKey(skdw)) { + receivingUnitDetail.setYhxje(prepaymentUnitDetail.get(skdw).toString()); + receivingUnitDetail.setDhxje(String.valueOf(str2double(receivingUnitDetail.getYfkje()) - prepaymentUnitDetail.get(skdw))); + } else { + receivingUnitDetail.setYhxje("0.00"); + receivingUnitDetail.setDhxje(receivingUnitDetail.getYfkje()); + } + } +// 3.2、未匹配数据整理 + List unCheckedList = new ArrayList<>(); + for (String skdw : prepaymentUnitDetail.keySet()) { + boolean isHas = true; + for (ReceivingUnitDetail receivingUnitDetail : receivingUnitDetails) { + if (!receivingUnitDetail.getSkdw().equals(skdw)){ + isHas = false; + } + } + if (!isHas){ + ReceivingUnitDetail unChecked = new ReceivingUnitDetail(); + unChecked.setSkdw(skdw); + unChecked.setYfkje("0.00"); + unChecked.setYhxje(Util.null2String(prepaymentUnitDetail.get(skdw))); + unChecked.setDhxje("0.00"); + unCheckedList.add(unChecked); + } + } + if (unCheckedList.size()!=0){ +// 将没有校验上的数据添加到前端返回数组中 + receivingUnitDetails.addAll(unCheckedList); + } + logger.info("即将返回给前端的数据过滤操作结果:" + JSONObject.toJSONString(receivingUnitDetails)); + result.put("isSuccess", "true"); + result.put("data", receivingUnitDetails); + result.put("message", ""); + } catch (Exception e) { + logger.info("预付款管理台账对比详情接口出错:"); + logger.info(e.getMessage()); + result.put("isSuccess", "false"); + result.put("data", ""); + result.put("message", e.getMessage()); + } + return result; + } + + /** + * 获取所有关联此付款流程并且已办结的预付款费用确认流程,并且取发票中的销方名称以及对应的加税合计金额 + * 1、考虑预付款费用确认流程中发票明细表为5、6两张表 + * 2、考虑可能存在销方名称一样的发票 + * + * @param requestid 原付款流程 + * @return + */ + private Map getPrepaymentWfReceiveDetail(String requestid) { + logger.info("=-=-=-=-=-=-=-=-=-=-=进入获取所有关联此付款流程并且已办结的预付款收据收集方法=-=-=-=-=-=-=-=-=-=-="); + PropBean pp = new PropBean(); + String yfkMainTable = pp.getPropName("yfkTableName"); + logger.info("获取的预付款流程主表名是:" + yfkMainTable); + return getInvoiceDetail(yfkMainTable, "5,6", requestid); + } + + /** + * 获取指定原付款流程并且已办结的预付款流程发票销方名称以及对应的价税合计金额 + * + * @param yfkMainTable 预付款流程主表名 + * @param dtNums 对应明细表,多个时以英文逗号分隔 + * @param requestid 原付款流程的requestid + * @return Map + */ + private Map getInvoiceDetail(String yfkMainTable, String dtNums, String requestid) { + logger.info("-=-=-=-=-=-=-=-=-=-=获取预付款流程发票销方名称以及对应的价税合计金额方法,原付款流程requestid为:" + requestid); + Map invoiceDetail = new HashMap<>(); + RecordSet rs = new RecordSet(); + String sql = ""; + for (String dtNum : dtNums.split(",")) { + if ("5".equals(dtNum)) { + sql = "select currentnodetype,isstopped,XFMC,JSHJ from " + yfkMainTable + " a," + + "workflow_requestbase b," + yfkMainTable + "_dt5 c where a.requestid = b.requestid and a.id = c.mainid and a.GLYFKLC = '" + requestid + "'"; + logger.info("即将执行的sql是:" + sql); + rs.executeQuery(sql); + while (rs.next()) { + String currentnodetype = Util.null2String(rs.getString("currentnodetype")); + String isstopped = Util.null2String(rs.getString("isstopped")); + if ((!"1".equals(isstopped)) && ("3".equals(currentnodetype))) { + String xfmc = "".equals(Util.null2String(rs.getString("XFMC"))) ? "空" : Util.null2String(rs.getString("XFMC")); + String jshj = Util.null2String(rs.getString("JSHJ")); + if (invoiceDetail.containsKey(xfmc)) { + Double oldJshj = invoiceDetail.get(xfmc); + invoiceDetail.put(xfmc, oldJshj + str2double(jshj)); + } else { + invoiceDetail.put(xfmc, str2double(jshj)); + } + } + } + } + if ("6".equals(dtNum)) { + sql = "select currentnodetype,isstopped,kpf,kpje from " + yfkMainTable + " a," + + "workflow_requestbase b," + yfkMainTable + "_dt6 c where a.requestid = b.requestid and a.id = c.mainid and a.GLYFKLC = '" + requestid + "'"; + logger.info("即将执行的sql是:" + sql); + rs.executeQuery(sql); + while (rs.next()) { + String currentnodetype = Util.null2String(rs.getString("currentnodetype")); + String isstopped = Util.null2String(rs.getString("isstopped")); + if ((!"1".equals(isstopped)) && ("3".equals(currentnodetype))) { + String xfmc = "".equals(Util.null2String(rs.getString("kpf"))) ? "空" : Util.null2String(rs.getString("kpf")); + String jshj = Util.null2String(rs.getString("kpje")); + if (invoiceDetail.containsKey(xfmc)) { + Double oldJshj = invoiceDetail.get(xfmc); + invoiceDetail.put(xfmc, oldJshj + str2double(jshj)); + } else { + invoiceDetail.put(xfmc, str2double(jshj)); + } + } + } + } + } + return invoiceDetail; + } + + /** + * 根据requestid获取原付款流程的支付明细信息 + * + * @param requestid 原付款流程reqquestid + * @return + */ + private List getPaymentWorkFlowReceiveDetail(String requestid) { + logger.info("开始获取原付款流程支付明细信息,接收到的requestid是:" + requestid); + List receivingPayUnitDetails = new ArrayList<>(); + RecordSet rs = new RecordSet(); + String sql; + String mainTable = ""; + sql = "select t2.tablename from workflow_requestbase t0,workflow_base t1,workflow_bill t2 where t0.workflowid = t1.id and t1.formid = t2.id and t0.requestid = ?"; + logger.info("即将执行的sql是:" + sql); + rs.executeQuery(sql, requestid); + if (rs.next()) { + mainTable = Util.null2String(rs.getString("tablename")); + } + if (!"".equals(mainTable)) { + sql = "select SKDW,DFKJE from " + mainTable + "_dt11 where mainid = (select id from " + mainTable + " where requestid = '" + requestid + "')"; + logger.info("即将执行的sql语句是:" + sql); + rs.executeQuery(sql); + while (rs.next()) { + boolean isNew = true; + String skdw = Util.null2String(rs.getString("SKDW")); + logger.info("开始操作的收款单位是:" + skdw); + String dfkje = Util.null2String(rs.getString("DFKJE")); + logger.info("开始操作的待付款金额是:" + dfkje); + logger.info("目前收集到的原付款支付信息是:" + JSONObject.toJSONString(receivingPayUnitDetails)); + for (ReceivingUnitDetail receivingPayUnitDetail : receivingPayUnitDetails) { + if (receivingPayUnitDetail.getSkdw().equals(skdw)) { + isNew = false; + receivingPayUnitDetail.setYfkje(String.valueOf(str2double(dfkje) + str2double(receivingPayUnitDetail.getYfkje()))); + } + } + if (isNew) { + ReceivingUnitDetail unitDetail = new ReceivingUnitDetail(); + unitDetail.setSkdw(skdw); + unitDetail.setYfkje(dfkje); + receivingPayUnitDetails.add(unitDetail); + } + } + } + return receivingPayUnitDetails; + } + + /** + * 数字的字符串转double类型 + * + * @param str + * @return + */ + private static double str2double(String str) { + str = "".equals(str) ? "0" : str; + double num; + DecimalFormat myformat = new DecimalFormat("#0.00"); + //装换为double类型 + num = Double.parseDouble(str); + //保留2为小数 + num = Double.parseDouble(myformat.format(num)); + return num; + } + + private String computeDhxje(String yfkje, String yhxje) { + double dhxje = str2double(yfkje) - str2double(yhxje); + return String.valueOf(dhxje); + } +} diff --git a/src/main/java/com/engine/htsc/yfkfyqr/pojo/ReceivingUnitDetail.java b/src/main/java/com/engine/htsc/yfkfyqr/pojo/ReceivingUnitDetail.java new file mode 100644 index 0000000..02e311f --- /dev/null +++ b/src/main/java/com/engine/htsc/yfkfyqr/pojo/ReceivingUnitDetail.java @@ -0,0 +1,50 @@ +package com.engine.htsc.yfkfyqr.pojo; + +public class ReceivingUnitDetail { + String skdw; + String yfkje; + String yhxje; + String dhxje; + + public ReceivingUnitDetail() { + } + + public ReceivingUnitDetail(String skdw, String yfkje, String yhxje, String dhxje) { + this.skdw = skdw; + this.yfkje = yfkje; + this.yhxje = yhxje; + this.dhxje = dhxje; + } + + public String getSkdw() { + return skdw; + } + + public void setSkdw(String skdw) { + this.skdw = skdw; + } + + public String getYfkje() { + return yfkje; + } + + public void setYfkje(String yfkje) { + this.yfkje = yfkje; + } + + public String getYhxje() { + return yhxje; + } + + public void setYhxje(String yhxje) { + this.yhxje = yhxje; + } + + public String getDhxje() { + return dhxje; + } + + public void setDhxje(String dhxje) { + this.dhxje = dhxje; + } +} diff --git a/src/main/java/com/engine/htsc/yfkfyqr/service/NewYfkByOldTsSrevice.java b/src/main/java/com/engine/htsc/yfkfyqr/service/NewYfkByOldTsSrevice.java new file mode 100644 index 0000000..72589ef --- /dev/null +++ b/src/main/java/com/engine/htsc/yfkfyqr/service/NewYfkByOldTsSrevice.java @@ -0,0 +1,15 @@ +package com.engine.htsc.yfkfyqr.service; + +import java.util.Map; + +public interface NewYfkByOldTsSrevice { + Map createTfkByOldTS(Map params); + + Map viewDetailService(String requestid); + /** + * 手动触发预付款 + * @param params + * @return + */ + Map manualPrepayments(Map params); +} diff --git a/src/main/java/com/engine/htsc/yfkfyqr/service/impl/NewYfkTsSreviceImpl.java b/src/main/java/com/engine/htsc/yfkfyqr/service/impl/NewYfkTsSreviceImpl.java new file mode 100644 index 0000000..1756ed8 --- /dev/null +++ b/src/main/java/com/engine/htsc/yfkfyqr/service/impl/NewYfkTsSreviceImpl.java @@ -0,0 +1,26 @@ +package com.engine.htsc.yfkfyqr.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.yfkfyqr.dao.ManualPrepaymentsCMD; +import com.engine.htsc.yfkfyqr.dao.NewYfkByOldTsCMD; +import com.engine.htsc.yfkfyqr.dao.ViewDetailCMD; +import com.engine.htsc.yfkfyqr.service.NewYfkByOldTsSrevice; + +import java.util.Map; + +public class NewYfkTsSreviceImpl extends Service implements NewYfkByOldTsSrevice { + @Override + public Map createTfkByOldTS(Map params) { + return commandExecutor.execute(new NewYfkByOldTsCMD(params)); + } + + @Override + public Map viewDetailService(String requestid) { + return commandExecutor.execute(new ViewDetailCMD(requestid)); + } + + @Override + public Map manualPrepayments(Map params) { + return commandExecutor.execute(new ManualPrepaymentsCMD(params)); + } +} diff --git a/src/main/java/com/engine/htsc/yfkfyqr/web/YfkfyqrAvtion.java b/src/main/java/com/engine/htsc/yfkfyqr/web/YfkfyqrAvtion.java new file mode 100644 index 0000000..29477ad --- /dev/null +++ b/src/main/java/com/engine/htsc/yfkfyqr/web/YfkfyqrAvtion.java @@ -0,0 +1,92 @@ +package com.engine.htsc.yfkfyqr.web; + +import com.alibaba.fastjson.JSONObject; +import com.api.htsc.browser.HtscBrowserAction; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.yfkfyqr.service.NewYfkByOldTsSrevice; +import com.engine.htsc.yfkfyqr.service.impl.NewYfkTsSreviceImpl; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.workflow.logging.Logger; +import weaver.workflow.logging.LoggerFactory; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +public class YfkfyqrAvtion { + Logger logger = LoggerFactory.getLogger(YfkfyqrAvtion.class); + + private NewYfkByOldTsSrevice getService() { + return ServiceUtil.getService(NewYfkTsSreviceImpl.class); + } + + /** + * type:assign---指定、all---所有已归档的托收业务流程 + * 所需配置: + */ + @POST + @Path("/createyfkbyoldts") + @Produces({MediaType.APPLICATION_JSON}) + public String createYfkByOldTs(@Context HttpServletRequest request, + @Context HttpServletResponse response) { + new BaseBean().writeLog("==================check in Action==================="); + Map result; + Map paramsMap = new HashMap<>(); + String type = Util.null2String(request.getParameter("type")); + paramsMap.put("type", type); + if (!"all".equals(type)) { + paramsMap.put("requestids", request.getParameter("requestids")); + } + new BaseBean().writeLog("传给service的接口是:" + paramsMap); + result = getService().createTfkByOldTS(paramsMap); + return JSONObject.toJSONString(result); + } + + + /** + * 收款单位/开票方:取付款流程-支付信息-收款单位&关联已办结预付款确认流程中票据信息销方名称(匹配去重时,需要考虑特殊符号“括号”格式的兼容); + * 预付款金额:取付款流程-支付信息-收款单位对应合计金额汇总; + * 已核销金额:取关联已办结预付款确认流程中票据信息-销方名称对应价税合计金额/开票金额汇总; + * 待核销金额:预付款金额-已核销金额; + * + * @param request + * @return + */ + @GET + @Path("/viewDetail") + @Produces({MediaType.APPLICATION_JSON}) + public String viewDetail(@Context HttpServletRequest request) { + Logger logger = LoggerFactory.getLogger(this.getClass()); + String requestid = request.getParameter("requestid"); + logger.info("进入详情查询接口,接收到的原付款流程requestid是:" + requestid); + return JSONObject.toJSONString(getService().viewDetailService(requestid)); + + } + + /** + * 预付款建模页面点击触发手动触发预付款 + */ + @POST + @Path("/manualPrepayments") + @Produces({MediaType.APPLICATION_JSON}) + public String manualPrepayments(@Context HttpServletRequest request, @Context HttpServletResponse response) { + logger.info("================进入手动触发预付款方法======================"); + String yfkTableName = new PropBean().getPropName("yfkTableName"); + String requestIds = Util.null2String(request.getParameter("requestIds")); + Map params = new HashMap<>(); + params.put("requestIds", requestIds); + params.put("yfkTableName", yfkTableName); + logger.info("即将传递的参数是:" + JSONObject.toJSONString(params)); + Map result = getService().manualPrepayments(params); + return JSONObject.toJSONString(result); + } +} diff --git a/src/main/java/com/engine/htsc/zbtybx/dao/YdbxDataImportCMD.java b/src/main/java/com/engine/htsc/zbtybx/dao/YdbxDataImportCMD.java new file mode 100644 index 0000000..0a02f91 --- /dev/null +++ b/src/main/java/com/engine/htsc/zbtybx/dao/YdbxDataImportCMD.java @@ -0,0 +1,404 @@ +package com.engine.htsc.zbtybx.dao; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import weaver.conn.RecordSet; +import weaver.conn.RecordSetTrans; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.interfaces.workflow.action.Action; + +import java.util.HashMap; +import java.util.Map; + +public class YdbxDataImportCMD extends AbstractCommonCommand> { + private static RecordSet fydrs = new RecordSet(); + @Override + public BizLogContext getLogContext() { + return null; + } + public YdbxDataImportCMD(User user, Map params){ + this.user = user; + this.params = params; + } + + @Override + public Map execute(CommandContext commandContext) { + Map back = new HashMap<>(); + String lc = Util.null2String(params.get("lclx")); + String tablename = getTableName(lc); + if ("".equals(tablename)){ + back.put("result","表名为空"); + return back; + } + if ("zbtybx".equals(lc)){ + tybxInsertData(tablename,lc); + back.put("result","总部通用报销同步完成"); + } + if ("fzjgtybx".equals(lc)){ + tybxInsertData(tablename,lc); + back.put("result","分支机构通用报销同步完成"); + } + if ("fzjgclbx".equals(lc)){ + clbxInsertData(tablename); + back.put("result","分支机构差旅报销同步完成"); + } + if ("zbclbx".equals(lc)){ + clbxInsertData(tablename); + back.put("result","总部差旅报销同步完成"); + } + return back; + } + + + /** + * 差旅报销历史数据导入 + * + * @param tablename + * @return + */ + public static String clbxInsertData(String tablename) { + RecordSet rs = new RecordSet(); + BaseBean bb = new BaseBean(); + bb.writeLog("--------------------clbxInsertData start-------------------------"); + String clbxsql = "select dt12.ccr,dt12.ccrszbm,dt12.ccrbmfzr, o.ngrgh, o.requestid, o.REQUESTMARK,o.REQUESTNAME, o.unnumber,o.ngsj,dt9.fycdbm,dt9.bhsje,dt9.sj,dt9.jshjje,dt9.yjyskmsfcys,dt9.qzzsbhsje,dt9.zssj,dt9.lkysbhsje,dt9.lkyssj,dt9.qt ,dt9.ccr from "+tablename+"_DT12 dt12 " + + "join (select m.ngrgh, m.requestid, b.unnumber, m.id,m.ngsj,wr.REQUESTMARK,wr.REQUESTNAME from "+tablename+" m " + + "join workflow_requestbase wr on wr.REQUESTID = m.REQUESTID join workflow_base b on b.id=wr.workflowid where wr.currentnodetype = 3) o on dt12.mainid = o.id " + + "join "+tablename+"_DT9 dt9 on dt9.ccr = dt12.ccr and o.id = dt9.mainid "; + + RecordSetTrans rst = new RecordSetTrans(); + + rs.executeQuery(clbxsql); + rst.setAutoCommit(false); + while (rs.next()) { + //出差人 对应报销人 + String bxr = Util.null2String(rs.getString("ccr")); + //出差人所在部门 对应报销人所在部门 + String bxrbm = Util.null2String(rs.getString("ccrszbm")); + //出差人所在部门负责人 对应报销人所在部门负责人 + String bxrbmfzr = Util.null2String(rs.getString("ccrbmfzr")); + //拟稿人工号 + String ngrgh = Util.null2String(rs.getString("ngrgh")); + //requestid + String requid = Util.null2String(rs.getString("requestid")); + //流程编号 + String lcbh = Util.null2String(rs.getString("REQUESTMARK")); + //流程名称 + String lcmc = Util.null2String(rs.getString("REQUESTNAME")); + //流程类型 + String lclx = Util.null2String(rs.getString("unnumber")); + //拟稿时间 + String ngsj = Util.null2String(rs.getString("ngsj")); + //费用承担部门 + String fycdbm = Util.null2String(rs.getString("fysjcdbm")); + //不含税金额 + String bhsje = Util.null2String(rs.getString("bhsje")); + //税金 + String sj = Util.null2String(rs.getString("sj")); + //价税合计金额 + String jshjje = Util.null2String(rs.getString("jshjje")); + //超预算 + String cys = Util.null2String(rs.getString("yjyskmsfcys")); + //住宿不含税金额 + String qzzsbhsje = Util.null2String(rs.getString("qzzsbhsje")); + //住宿税金 + String zssj = Util.null2String(rs.getString("zssj")); + //旅客运输不含税 + String lkysbhsje = Util.null2String(rs.getString("lkysbhsje")); + //旅客运输税金 + String lkyssj = Util.null2String(rs.getString("lkyssj")); + //其他 + String qt = Util.null2String(rs.getString("qt")); + + //报销人工号 + String bxrgh = ""; + if (!"".equals(bxr)) { + String bxrghsql = "select workcode from hrmresource where id = ?"; + fydrs.executeQuery(bxrghsql, bxr); + bb.writeLog("执行的sql" + bxrghsql + "参数 ===================" + bxr); + if (fydrs.next()) { + bxrgh = Util.null2String(fydrs.getString("workcode")); + } + } + + //费用承担部门负责人 默认为空 + String fycdbmfzr = ""; + //费用发生日期 默认为空 + String fyfsrq = ""; + //税率 默认为空 + String sl = ""; + //事由 默认为空 + String sy = ""; + //是否快速报销 默认为空 + String sfksbx = ""; + + //住宿费用 + Double zsfy = Util.getDoubleValue(qzzsbhsje) + Util.getDoubleValue(zssj); + //交通费用 + Double jtfy = Util.getDoubleValue(lkysbhsje) + Util.getDoubleValue(lkyssj); + //其他费用 + Double qtfy = Util.getDoubleValue(qt); + + String insertsql = "insert into uf_ydbxxx " + + "(requid,lcbh,lcmc,lclx,sfksbx,ngsj,yskmbm,yskmmc,sjyskmbm,sjyskmmc,ssjyskmbm,ssjyskmmc,fycdbm,fycdbmfzr,bxr,bxrbm,bxrbmfzr,fyfsrq,bhsje,sl,sj,jshjje,sy,cys,bxrgh,ngrgh)" + + "values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; + try { + //判断住宿费用是否需要插入 + if (zsfy > 0) { + String yskmbm = "8601050303"; + Map yskmmap = findYskmData(yskmbm); + //预算科目名称 + String yskmmc = Util.null2String(yskmmap.get("yskmmc")); + //上级预算科目名称 + String sjbmyskmmc = Util.null2String(yskmmap.get("sjbmyskmmc")); + //上级预算科目编码 + String sjbmyskmbm = Util.null2String(yskmmap.get("sjbmyskmbm")); + //上上级预算科目编码 + String ssjbmyskmbm = Util.null2String(yskmmap.get("ssjbmyskmbm")); + //上上级预算科目名称 + String ssjbmyskmmc = Util.null2String(yskmmap.get("ssjbmyskmmc")); + rst.executeUpdate(insertsql, requid, lcbh, lcmc, lclx, sfksbx, ngsj, yskmbm, yskmmc, sjbmyskmbm, sjbmyskmmc, ssjbmyskmbm, ssjbmyskmmc, fycdbm, fycdbmfzr, bxr, bxrbm, bxrbmfzr, fyfsrq, bhsje, sl, sj, jshjje, sy, cys, bxrgh, ngrgh); + bb.writeLog("执行的插入sql" + insertsql + "参数" + "sjbmyskmbm" + sjbmyskmbm + "sjbmyskmmc" + sjbmyskmmc + "ssjbmyskmbm" + ssjbmyskmbm + "ssjbmyskmmc" + ssjbmyskmmc); + } + //判断交通费用是否需要插入 + if (jtfy > 0) { + String yskmbm = "8601050301"; + Map yskmmap = findYskmData(yskmbm); + //预算科目名称 + String yskmmc = Util.null2String(yskmmap.get("yskmmc")); + //上级预算科目名称 + String sjbmyskmmc = Util.null2String(yskmmap.get("sjbmyskmmc")); + //上级预算科目编码 + String sjbmyskmbm = Util.null2String(yskmmap.get("sjbmyskmbm")); + //上上级预算科目编码 + String ssjbmyskmbm = Util.null2String(yskmmap.get("ssjbmyskmbm")); + //上上级预算科目名称 + String ssjbmyskmmc = Util.null2String(yskmmap.get("ssjbmyskmmc")); + rst.executeUpdate(insertsql, requid, lcbh, lcmc, lclx, sfksbx, ngsj, yskmbm, yskmmc, sjbmyskmbm, sjbmyskmmc, ssjbmyskmbm, ssjbmyskmmc, fycdbm, fycdbmfzr, bxr, bxrbm, bxrbmfzr, fyfsrq, bhsje, sl, sj, jshjje, sy, cys, bxrgh, ngrgh); + bb.writeLog("执行的插入sql" + insertsql + "参数" + "sjbmyskmbm" + sjbmyskmbm + "sjbmyskmmc" + sjbmyskmmc + "ssjbmyskmbm" + ssjbmyskmbm + "ssjbmyskmmc" + ssjbmyskmmc); + } + //判断其他费用是否需要插入 + if (qtfy > 0) { + String yskmbm = "8601050302"; + Map yskmmap = findYskmData(yskmbm); + //预算科目名称 + String yskmmc = Util.null2String(yskmmap.get("yskmmc")); + //上级预算科目名称 + String sjbmyskmmc = Util.null2String(yskmmap.get("sjbmyskmmc")); + //上级预算科目编码 + String sjbmyskmbm = Util.null2String(yskmmap.get("sjbmyskmbm")); + //上上级预算科目编码 + String ssjbmyskmbm = Util.null2String(yskmmap.get("ssjbmyskmbm")); + //上上级预算科目名称 + String ssjbmyskmmc = Util.null2String(yskmmap.get("ssjbmyskmmc")); + bb.writeLog("执行的插入sql" + insertsql + "参数" + "sjbmyskmbm" + sjbmyskmbm + "sjbmyskmmc" + sjbmyskmmc + "ssjbmyskmbm" + ssjbmyskmbm + "ssjbmyskmmc" + ssjbmyskmmc); + rst.executeUpdate(insertsql, requid, lcbh, lcmc, lclx, sfksbx, ngsj, yskmbm, yskmmc, sjbmyskmbm, sjbmyskmmc, ssjbmyskmbm, ssjbmyskmmc, fycdbm, fycdbmfzr, bxr, bxrbm, bxrbmfzr, fyfsrq, bhsje, sl, sj, jshjje, sy, cys, bxrgh, ngrgh); + } + } catch (Exception e) { + e.printStackTrace(); + bb.writeLog("------------------错误原因:"+e.getMessage()+"---------------requestid:"+requid); + return Action.FAILURE_AND_CONTINUE; + } + } + rst.commit(); + return Action.SUCCESS; + } + + /** + * 通用报销历史数据导入 + * + * @param tablename + * @return + */ + public static String tybxInsertData(String tablename,String lc) { + RecordSet rs = new RecordSet(); + RecordSetTrans rst = new RecordSetTrans(); + BaseBean bb = new BaseBean(); + String tybxsql = ""; + if("zbtybx".equals(lc)){ + tybxsql = "select o.ngrgh, o.requestid, o.REQUESTMARK,o.REQUESTNAME, o.unnumber,o.bsw,o.ngsj, d.yskmid,d.fysjcdbm,d.fycdbmfzr,d.bxr,d.bxrbm,d.fyfsrq,d.bhsje,d.slz,d.sj,d.jshjje,d.sy,d.cys " + + "from " + tablename + "_dt8 d join " + + "(select m.ngrgh, m.requestid, b.unnumber, m.id, m.bsw,m.ngsj,wr.REQUESTMARK,wr.REQUESTNAME from " + tablename + " m join workflow_requestbase wr on wr.REQUESTID = m.REQUESTID " + + "join workflow_base b on b.id=wr.workflowid where wr.currentnodetype = 3) o on d.mainid = o.id"; + }else { + tybxsql = "select o.ngrgh, o.requestid, o.REQUESTMARK,o.REQUESTNAME, o.unnumber,o.ngsj, d.yskmid,d.fysjcdbm,d.fycdbmfzr,d.bxr,d.bxrbm,d.fyfsrq,d.bhsje,d.slz,d.sj,d.jshjje,d.sy,d.cys " + + "from " + tablename + "_dt8 d join " + + "(select m.ngrgh, m.requestid, b.unnumber, m.id,m.ngsj,wr.REQUESTMARK,wr.REQUESTNAME from " + tablename + " m join workflow_requestbase wr on wr.REQUESTID = m.REQUESTID " + + "join workflow_base b on b.id=wr.workflowid where wr.currentnodetype = 3) o on d.mainid = o.id"; + } + + rs.executeQuery(tybxsql); + rst.setAutoCommit(false); + while (rs.next()) { + //拟稿人工号 + String ngrgh = Util.null2String(rs.getString("ngrgh")); + //requestid + String requid = Util.null2String(rs.getString("requestid")); + //流程编号 + String lcbh = Util.null2String(rs.getString("REQUESTMARK")); + //流程名称 + String lcmc = Util.null2String(rs.getString("REQUESTNAME")); + //流程类型 + String lclx = Util.null2String(rs.getString("unnumber")); + + //是否快速报销标识位 + String sfksbx = ""; + if("zbtybx".equals(lclx)){ + sfksbx = Util.null2String(rs.getString("bsw")); + } + //拟稿时间 + String ngsj = Util.null2String(rs.getString("ngsj")); + //费用承担部门 + String fycdbm = Util.null2String(rs.getString("fysjcdbm")); + //费用承担部门负责人 + String fycdbmfzr = Util.null2String(rs.getString("fycdbmfzr")); + //报销人 + String bxr = Util.null2String(rs.getString("bxr")); + //报销人部门 + String bxrbm = Util.null2String(rs.getString("bxrbm")); + //费用发生日期 + String fyfsrq = Util.null2String(rs.getString("fyfsrq")); + //不含税金额 + String bhsje = Util.null2String(rs.getString("bhsje")); + //税率 + String sl = Util.null2String(rs.getString("slz")); + //税金 + String sj = Util.null2String(rs.getString("sj")); + //价税合计金额 + String jshjje = Util.null2String(rs.getString("jshjje")); + //事由 + String sy = Util.null2String(rs.getString("sy")); + //超预算 + String cys = Util.null2String(rs.getString("cys")); + //报销人部门负责人 + String bxrbmfzr = ""; + if (!"".equals(bxrbm)) { + String bxbmfzrsql = "select DEPTDIRECTORS from hrmdepartmentdefined where deptid = ?"; + bb.writeLog("执行的sql------------------------" + bxbmfzrsql + "参数" + bxrbm); + fydrs.executeQuery(bxbmfzrsql, bxrbm); + if (fydrs.next()) { + bxrbmfzr = Util.null2String(fydrs.getString("DEPTDIRECTORS")); + } + } + //预算科目 + String yskmid = Util.null2String(rs.getString("yskmid")); + //去头获取yskmbm + String[] arr1 = yskmid.split("_"); + String yskmbm = ""; + if (arr1.length > 1) { + yskmbm = arr1[1]; + } + //预算科目名称 + String yskmmc = ""; + //上级部门预算科目名称 + String sjbmyskmmc = ""; + //上级部门预算科目编码 + String sjbmyskmbm = ""; + //上上级部门预算科目编码 + String ssjbmyskmbm = ""; + //上上级部门预算科目名称 + String ssjbmyskmmc = ""; + if (!"".equals(yskmbm)) { + Map yskmmap = findYskmData(yskmbm); + yskmmc = Util.null2String(yskmmap.get("yskmmc")); + sjbmyskmmc = Util.null2String(yskmmap.get("sjbmyskmmc")); + sjbmyskmbm = Util.null2String(yskmmap.get("sjbmyskmbm")); + ssjbmyskmbm = Util.null2String(yskmmap.get("ssjbmyskmbm")); + ssjbmyskmmc = Util.null2String(yskmmap.get("ssjbmyskmmc")); + } + //报销人工号 + String bxrgh = ""; + if (!"".equals(bxr)) { + String bxrghsql = "select workcode from hrmresource where id = ?"; + bb.writeLog("执行的sql" + bxrghsql + "参数 ===================" + bxr); + fydrs.executeQuery(bxrghsql, bxr); + if (fydrs.next()) { + bxrgh = Util.null2String(fydrs.getString("workcode")); + } + } + try { + String insertsql = "insert into uf_ydbxxx " + + "(requid,lcbh,lcmc,lclx,sfksbx,ngsj,yskmbm,yskmmc,sjyskmbm,sjyskmmc,ssjyskmbm,ssjyskmmc,fycdbm,fycdbmfzr,bxr,bxrbm,bxrbmfzr,fyfsrq,bhsje,sl,sj,jshjje,sy,cys,bxrgh,ngrgh)" + + "values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; + bb.writeLog("执行的插入sql" + insertsql + "参数" + "sjbmyskmbm" + sjbmyskmbm + "sjbmyskmmc" + sjbmyskmmc + "ssjbmyskmbm" + ssjbmyskmbm + "ssjbmyskmmc" + ssjbmyskmmc); + rst.executeUpdate(insertsql, requid, lcbh, lcmc, lclx, sfksbx, ngsj, yskmbm, yskmmc, sjbmyskmbm, sjbmyskmmc, ssjbmyskmbm, ssjbmyskmmc, fycdbm, fycdbmfzr, bxr, bxrbm, bxrbmfzr, fyfsrq, bhsje, sl, sj, jshjje, sy, cys, bxrgh, ngrgh); + } catch (Exception e) { + e.printStackTrace(); + bb.writeLog("-------------错误原因:"+e.getMessage()+"------------------requestid:"+requid); + return Action.FAILURE_AND_CONTINUE; + } + } + rst.commit(); + return Action.SUCCESS; + } + + /** + * 查询预算科目数据 + * + * @param yskmbm + * @return + */ + + public static Map findYskmData(String yskmbm) { + Map map = new HashMap<>(); + String querysql = ""; + String yskmmc = ""; + String sjyskm = ""; + if (!"".equals(yskmbm)) { + querysql = "select yskmmc,sjyskm,yskmbm from uf_kmpz where yskmbm = ?"; + fydrs.writeLog("执行的sql---------------" + querysql + "参数" + yskmbm); + fydrs.executeQuery(querysql, yskmbm); + if (fydrs.next()) { + yskmmc = Util.null2String(fydrs.getString("yskmmc")); + sjyskm = Util.null2String(fydrs.getString("sjyskm")); + map.put("yskmmc", yskmmc); + } + } + if ("".equals(sjyskm)) { + return map; + } + //上级预算科目名称 + String sjbmyskmmc = ""; + //上级预算科目编码 + String sjbmyskmbm = ""; + String ssjyskm = ""; + fydrs.writeLog("执行的sql" + querysql + "参数" + sjyskm); + fydrs.executeQuery(querysql, sjyskm); + if (fydrs.next()) { + sjbmyskmbm = Util.null2String(fydrs.getString("yskmbm")); + sjbmyskmmc = Util.null2String(fydrs.getString("yskmmc")); + ssjyskm = Util.null2String(fydrs.getString("sjyskm")); + map.put("sjbmyskmbm", sjbmyskmbm); + map.put("sjbmyskmmc", sjbmyskmmc); + } + if ("".equals(ssjyskm)) { + return map; + } + //上上级预算科目名称 + String ssjbmyskmmc = ""; + //上上级预算科目编码 + String ssjbmyskmbm = ""; + fydrs.writeLog("执行的sql" + querysql + "参数" + ssjyskm); + fydrs.executeQuery(querysql, ssjyskm); + if (fydrs.next()) { + ssjbmyskmbm = Util.null2String(fydrs.getString("yskmbm")); + ssjbmyskmmc = Util.null2String(fydrs.getString("yskmmc")); + map.put("ssjbmyskmbm", ssjbmyskmbm); + map.put("ssjbmyskmmc", ssjbmyskmmc); + } + fydrs.writeLog("执行的sql---------------" + querysql + "结果" + map.toString()); + return map; + } + + public static String getTableName(String lclx){ + String sql = "select t2.tablename from workflow_base t1,workflow_bill t2 where t1.formid = t2.id and t1.UNNUMBER = ? and ISVALID = '1'"; + fydrs.executeQuery(sql,lclx); + if(fydrs.next()){ + return Util.null2String(fydrs.getString("tablename")); + }else { + return ""; + } + } +} diff --git a/src/main/java/com/engine/htsc/zbtybx/dao/YdbxModeDataCMD.java b/src/main/java/com/engine/htsc/zbtybx/dao/YdbxModeDataCMD.java new file mode 100644 index 0000000..0a32446 --- /dev/null +++ b/src/main/java/com/engine/htsc/zbtybx/dao/YdbxModeDataCMD.java @@ -0,0 +1,59 @@ +package com.engine.htsc.zbtybx.dao; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.hrm.User; + +import java.util.HashMap; +import java.util.Map; + +public class YdbxModeDataCMD extends AbstractCommonCommand> { + @Override + public BizLogContext getLogContext() { + return null; + } + public YdbxModeDataCMD(User user, Map params){ + this.user = user; + this.params = params; + } + + @Override + public Map execute(CommandContext commandContext) { + + RecordSet rs = new RecordSet(); + Map back = new HashMap<>(); + BaseBean bb = new BaseBean(); + bb.writeLog("=======================YdbxModeDataCMD============================"); + String ids = Util.null2String(params.get("ids")); + //requestid + String requid = ""; + Boolean flag = false; + String reqsql = "select reqid from uf_zfmx where id in (?)"; + rs.executeQuery(reqsql,ids); + bb.writeLog("执行的sql=========================="+reqsql); + StringBuffer stb = new StringBuffer(); + while (rs.next()){ + requid = Util.null2String(rs.getString("reqid")); + if (stb.length() > 0) { + stb.append(","); + } + stb.append(requid); + } + if (stb.length()>0){ + String delsql = "delete from uf_ydbxxx where requid in (?)"; + flag = rs.executeUpdate(delsql,stb.toString()); + bb.writeLog("执行的sql---------------------------"+delsql+"结果------------"+flag); + } + if(flag){ + back.put("result",true); + return back; + }else { + back.put("result",false); + return back; + } + } +} diff --git a/src/main/java/com/engine/htsc/zbtybx/service/YdbxModeDataService.java b/src/main/java/com/engine/htsc/zbtybx/service/YdbxModeDataService.java new file mode 100644 index 0000000..c54f4e4 --- /dev/null +++ b/src/main/java/com/engine/htsc/zbtybx/service/YdbxModeDataService.java @@ -0,0 +1,10 @@ +package com.engine.htsc.zbtybx.service; + +import java.util.Map; + +public interface YdbxModeDataService { + + Map delModeData(Map params); + + Map importData(Map params); +} diff --git a/src/main/java/com/engine/htsc/zbtybx/service/YdbxModeDataServiceImpl.java b/src/main/java/com/engine/htsc/zbtybx/service/YdbxModeDataServiceImpl.java new file mode 100644 index 0000000..1fcf721 --- /dev/null +++ b/src/main/java/com/engine/htsc/zbtybx/service/YdbxModeDataServiceImpl.java @@ -0,0 +1,20 @@ +package com.engine.htsc.zbtybx.service; + +import com.engine.core.impl.Service; + +import com.engine.htsc.zbtybx.dao.YdbxDataImportCMD; +import com.engine.htsc.zbtybx.dao.YdbxModeDataCMD; + +import java.util.Map; + +public class YdbxModeDataServiceImpl extends Service implements YdbxModeDataService { + @Override + public Map delModeData(Map params) { + return commandExecutor.execute(new YdbxModeDataCMD(user, params)); + } + + @Override + public Map importData(Map params) { + return commandExecutor.execute(new YdbxDataImportCMD(user, params)); + } +} diff --git a/src/main/java/com/engine/htsc/zbtybx/web/YdbxAction.java b/src/main/java/com/engine/htsc/zbtybx/web/YdbxAction.java new file mode 100644 index 0000000..a8984b2 --- /dev/null +++ b/src/main/java/com/engine/htsc/zbtybx/web/YdbxAction.java @@ -0,0 +1,75 @@ +package com.engine.htsc.zbtybx.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.zbtybx.service.YdbxModeDataService; +import com.engine.htsc.zbtybx.service.YdbxModeDataServiceImpl; +import weaver.general.BaseBean; +import weaver.general.Util; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.HashMap; +import java.util.Map; + +public class YdbxAction { + + private YdbxModeDataService getService(){ + return ServiceUtil.getService(YdbxModeDataServiceImpl.class); + } + + @GET + @Path("/delmodedata") + @Produces({MediaType.APPLICATION_JSON}) + public String delModeData(@Context HttpServletRequest request, @Context HttpServletResponse response){ + BaseBean bb = new BaseBean(); + bb.writeLog("====================YdbxAction check in ======================="); + Map result = new HashMap<>(); + String ids = Util.null2String(request.getParameter("ids")); + bb.writeLog("============获取的ids参数为:"+ids); + if("".equals(ids)){ + result.put("code","500"); + result.put("message","ids参数为空"); + }else { + Map params = new HashMap<>(); + params.put("ids",ids); + result = getService().delModeData(params); + result.put("code","200"); + result.put("message","success"); + } + return JSONObject.toJSONString(result); + } + + @GET + @Path("/importData") + @Produces({MediaType.APPLICATION_JSON}) + public String importData(@Context HttpServletRequest request, @Context HttpServletResponse response){ + BaseBean bb = new BaseBean(); + bb.writeLog("--------------------------importData ----------------------------------------"); + String lclx = Util.null2String(request.getParameter("lclx")); + Map result = new HashMap<>(); + bb.writeLog("============获取的lclx参数为:"+lclx); + if("".equals(lclx)){ + result.put("code","500"); + result.put("message","lclx参数为空"); + }else { + Map params = new HashMap<>(); + params.put("lclx",lclx); + result = getService().importData(params); + result.put("code","200"); + result.put("message","success"); + } + return JSONObject.toJSONString(result); + } + + + + + + +}