From d52ddcb683337d551653230e8a1f9718516f9689 Mon Sep 17 00:00:00 2001 From: shilei <798989044@qq.com> Date: Sun, 9 Oct 2022 15:04:17 +0800 Subject: [PATCH] =?UTF-8?q?#HTXC-1#=20=E5=88=9D=E5=A7=8B=E5=8C=96=E5=BC=80?= =?UTF-8?q?=E5=8F=91=E7=8E=AF=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/api/htsc/aqsc/web/AqscActionApi.java | 9 + .../BranchGeneralPaymentActionApi.java | 9 + .../workflow/AssignProcessorActionApi.java | 17 + .../autonode/AutoNodeFlowNextNodeCmd.java | 256 +++++ .../ReimbursementFlow/tool/Apireturn.java | 15 + .../com/engine/htsc/aqsc/cmd/AqscDateCmd.java | 137 +++ .../engine/htsc/aqsc/service/AqscService.java | 16 + .../aqsc/service/impl/AqscServiceImpl.java | 17 + .../com/engine/htsc/aqsc/web/AqscAcion.java | 47 + .../approvalChain/model/BranchLinkReq.java | 33 + .../htsc/branchpayment/enums/BranchPay.java | 92 ++ .../impl/BranchBudgetCommandFactory.java | 35 + .../service/impl/BranchCostDTOFactory.java | 96 ++ .../branchpayment/utils/BranchBizUtil.java | 391 ++++++++ .../web/BranchGeneralPaymentAction.java | 117 +++ .../engine/htsc/doc/common/AsyncThread.java | 86 ++ .../com/engine/htsc/doc/util/BeanUtil.java | 279 ++++++ .../financialadjustment/util/BizUtil.java | 342 +++++++ .../htsc/payment/pojo/AutoRequestParam.java | 135 +++ .../htsc/payment/pojo/BankFormation.java | 51 + .../engine/htsc/payment/util/AssertUtil.java | 52 + .../engine/htsc/payment/util/BizUtils.java | 920 ++++++++++++++++++ .../htsc/seal/entity/ApplyPrintEntity.java | 70 ++ .../htsc/trip/pojo/AllowanceRequest.java | 69 ++ .../htsc/trip/service/AllowanceService.java | 10 + .../service/impl/AllowanceServiceImpl.java | 381 ++++++++ .../workflow/web/AssignProcessorAction.java | 565 +++++++++++ .../apprchalink/cinterface/ApprachaLink.java | 13 + .../cinterface/ApprachaLinkBuilder.java | 70 ++ .../engine/htxc/commonutil/base/BaseUtil.java | 64 ++ .../htxc/contract/dto/AmountTypeEnum.java | 26 + .../htxc/contract/dto/ApprovalWayEnum.java | 21 + .../contract/dto/AuthoritySimplifyEnum.java | 22 + .../contract/service/AutoApprovalService.java | 20 + .../service/impl/AutoApprovalServiceImpl.java | 89 ++ .../autotrigger/contract/vo/AutoApproval.java | 189 ++++ .../approval/service/impl/Approvaltosign.java | 136 +++ .../interfaces/htsc/cus/AutoSignAction.java | 314 ++++++ .../financialadjustment/ApproveAction.java | 63 ++ .../htsc/payment/BillSummaryAction.java | 128 +++ .../workflow/BankAccountHistoryHKAction.java | 116 +++ .../htsc/wpscenter/convert/BaseConvert.java | 118 +++ .../zbgg/action/ApproveBulletinAction.java | 145 +++ src/main/resources/ApplicationContext.xml | 17 + 44 files changed, 5798 insertions(+) create mode 100644 src/main/java/com/api/htsc/aqsc/web/AqscActionApi.java create mode 100644 src/main/java/com/api/htsc/branchpayment/BranchGeneralPaymentActionApi.java create mode 100644 src/main/java/com/api/htsc/workflow/AssignProcessorActionApi.java create mode 100644 src/main/java/com/customization/htsc/autonode/AutoNodeFlowNextNodeCmd.java create mode 100644 src/main/java/com/engine/htsc/ReimbursementFlow/tool/Apireturn.java create mode 100644 src/main/java/com/engine/htsc/aqsc/cmd/AqscDateCmd.java create mode 100644 src/main/java/com/engine/htsc/aqsc/service/AqscService.java create mode 100644 src/main/java/com/engine/htsc/aqsc/service/impl/AqscServiceImpl.java create mode 100644 src/main/java/com/engine/htsc/aqsc/web/AqscAcion.java create mode 100644 src/main/java/com/engine/htsc/branch/approvalChain/model/BranchLinkReq.java create mode 100644 src/main/java/com/engine/htsc/branchpayment/enums/BranchPay.java create mode 100644 src/main/java/com/engine/htsc/branchpayment/service/impl/BranchBudgetCommandFactory.java create mode 100644 src/main/java/com/engine/htsc/branchpayment/service/impl/BranchCostDTOFactory.java create mode 100644 src/main/java/com/engine/htsc/branchpayment/utils/BranchBizUtil.java create mode 100644 src/main/java/com/engine/htsc/branchpayment/web/BranchGeneralPaymentAction.java create mode 100644 src/main/java/com/engine/htsc/doc/common/AsyncThread.java create mode 100644 src/main/java/com/engine/htsc/doc/util/BeanUtil.java create mode 100644 src/main/java/com/engine/htsc/financialadjustment/util/BizUtil.java create mode 100644 src/main/java/com/engine/htsc/payment/pojo/AutoRequestParam.java create mode 100644 src/main/java/com/engine/htsc/payment/pojo/BankFormation.java create mode 100644 src/main/java/com/engine/htsc/payment/util/AssertUtil.java create mode 100644 src/main/java/com/engine/htsc/payment/util/BizUtils.java create mode 100644 src/main/java/com/engine/htsc/seal/entity/ApplyPrintEntity.java create mode 100644 src/main/java/com/engine/htsc/trip/pojo/AllowanceRequest.java create mode 100644 src/main/java/com/engine/htsc/trip/service/AllowanceService.java create mode 100644 src/main/java/com/engine/htsc/trip/service/impl/AllowanceServiceImpl.java create mode 100644 src/main/java/com/engine/htsc/workflow/web/AssignProcessorAction.java create mode 100644 src/main/java/com/engine/htxc/apprchalink/cinterface/ApprachaLink.java create mode 100644 src/main/java/com/engine/htxc/apprchalink/cinterface/ApprachaLinkBuilder.java create mode 100644 src/main/java/com/engine/htxc/commonutil/base/BaseUtil.java create mode 100644 src/main/java/com/engine/htxc/contract/dto/AmountTypeEnum.java create mode 100644 src/main/java/com/engine/htxc/contract/dto/ApprovalWayEnum.java create mode 100644 src/main/java/com/engine/htxc/contract/dto/AuthoritySimplifyEnum.java create mode 100644 src/main/java/com/engine/htxc/workflow/create/autotrigger/contract/service/AutoApprovalService.java create mode 100644 src/main/java/com/engine/htxc/workflow/create/autotrigger/contract/service/impl/AutoApprovalServiceImpl.java create mode 100644 src/main/java/com/engine/htxc/workflow/create/autotrigger/contract/vo/AutoApproval.java create mode 100644 src/main/java/com/engine/htxc/workflow/create/business/contract/approval/service/impl/Approvaltosign.java create mode 100644 src/main/java/weaver/interfaces/htsc/cus/AutoSignAction.java create mode 100644 src/main/java/weaver/interfaces/htsc/financialadjustment/ApproveAction.java create mode 100644 src/main/java/weaver/interfaces/htsc/payment/BillSummaryAction.java create mode 100644 src/main/java/weaver/interfaces/htsc/workflow/BankAccountHistoryHKAction.java create mode 100644 src/main/java/weaver/interfaces/htsc/wpscenter/convert/BaseConvert.java create mode 100644 src/main/java/weaver/interfaces/htsc/zbgg/action/ApproveBulletinAction.java create mode 100644 src/main/resources/ApplicationContext.xml diff --git a/src/main/java/com/api/htsc/aqsc/web/AqscActionApi.java b/src/main/java/com/api/htsc/aqsc/web/AqscActionApi.java new file mode 100644 index 0000000..35e8681 --- /dev/null +++ b/src/main/java/com/api/htsc/aqsc/web/AqscActionApi.java @@ -0,0 +1,9 @@ +package com.api.htsc.aqsc.web; + +import com.engine.htsc.aqsc.web.AqscAcion; + +import javax.ws.rs.Path; + +@Path("/htsc/aqsc") +public class AqscActionApi extends AqscAcion { +} diff --git a/src/main/java/com/api/htsc/branchpayment/BranchGeneralPaymentActionApi.java b/src/main/java/com/api/htsc/branchpayment/BranchGeneralPaymentActionApi.java new file mode 100644 index 0000000..a112fb9 --- /dev/null +++ b/src/main/java/com/api/htsc/branchpayment/BranchGeneralPaymentActionApi.java @@ -0,0 +1,9 @@ +package com.api.htsc.branchpayment; + +import com.engine.htsc.branchpayment.web.BranchGeneralPaymentAction; + +import javax.ws.rs.Path; + +@Path(value="/branch/general/payment") +public class BranchGeneralPaymentActionApi extends BranchGeneralPaymentAction { +} diff --git a/src/main/java/com/api/htsc/workflow/AssignProcessorActionApi.java b/src/main/java/com/api/htsc/workflow/AssignProcessorActionApi.java new file mode 100644 index 0000000..67659ed --- /dev/null +++ b/src/main/java/com/api/htsc/workflow/AssignProcessorActionApi.java @@ -0,0 +1,17 @@ +package com.api.htsc.workflow; + +import com.engine.htsc.workflow.web.AssignProcessorAction; + +import javax.ws.rs.Path; +import java.util.UUID; + +/** + * Created by K1810006 on 2020/9/23. + */ + +@Path("/htsc/workflow/processor") +public class AssignProcessorActionApi extends AssignProcessorAction{ + public static void main(String[] args){ + System.out.println("-------------------"+ UUID.randomUUID()); + } +} diff --git a/src/main/java/com/customization/htsc/autonode/AutoNodeFlowNextNodeCmd.java b/src/main/java/com/customization/htsc/autonode/AutoNodeFlowNextNodeCmd.java new file mode 100644 index 0000000..cc4b00f --- /dev/null +++ b/src/main/java/com/customization/htsc/autonode/AutoNodeFlowNextNodeCmd.java @@ -0,0 +1,256 @@ +package com.customization.htsc.autonode; + + +import com.engine.core.cfg.annotation.CommandDynamicProxy; +import com.engine.core.interceptor.AbstractCommandProxy; +import com.engine.core.interceptor.Command; +import com.engine.workflow.cmd.requestForm.RequestManager_FlowNextNodeCmd; +import org.apache.commons.lang.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.interfaces.htsc.comInfo.PropBean; +import javax.servlet.http.HttpServletRequest; + +/** + * Created by dengjp + * 自由节点,标题显示问题修改 #HTO-1520# + * + * 功能1: 自由节点,标题显示问题 + * 1.会签部门负责人审核、会签部门内部审核节点名称修改为会签部门 + * 2.跨公司会签负责人审核、跨公司会签内部审核节点名称修改为跨公司会签 + * 2020/12/18 + * + * 功能2: 判斷自由节点是否生成成功,如果没有生成成功回滚 + */ +@CommandDynamicProxy(target = RequestManager_FlowNextNodeCmd.class, desc = "自动节点扩展") +public class AutoNodeFlowNextNodeCmd extends AbstractCommandProxy { + + @Override + public Boolean execute(Command targetCommand) { + BaseBean beanBean = new BaseBean(); + PropBean propbean = new PropBean(); + try { + beanBean.writeLog("进入拦截"); + HttpServletRequest request = ((RequestManager_FlowNextNodeCmd) targetCommand).getRequestManager().getRequest(); + String requestId = Util.null2String(request.getParameter("requestid")); + String workflowid = Util.null2String(request.getParameter("workflowid")); + String workflowunnumber = propbean.getWorkflowUnNumberByid(workflowid); + beanBean.writeLog("流程的requestId: " + requestId); + + //执行标准的业务处理 + Boolean result = nextExecute(targetCommand); + beanBean.writeLog("当前节点 result : " + result); + + // 判断自由节点是否插入成功 + + try{ + if(Util.getIntValue(requestId) > 0) + { + this.rollbackFreeNode(result, requestId); + // 修改自由节点标题显示问题 + if(result) + { + RecordSet rs = new RecordSet(); + String status = ""; + String currentnodeid = ""; + // 先获取原先status + String selectSql = "select status, currentnodeid from workflow_requestbase where requestid=?"; + rs.executeQuery(selectSql, requestId); + if(rs.next()){ + status = Util.null2String(rs.getString("status")); + currentnodeid = Util.null2String(rs.getString("currentnodeid")); + } + beanBean.writeLog("当前节点 status : " + status + " currentnodeid9999: " + currentnodeid); + // 如果当前节点是自由节点,修改workflow_requestbase的status字段该为当前节点的nodename + // if ("~`~`7 自由节点`~`8 Free Nodes`~`~".equals(status)) { + if (Integer.parseInt(currentnodeid)<0) + { + String formid = getTableByRequestid(requestId); + beanBean.writeLog("formid:"+formid); + + if(!"".equals(formid)) + { + String table = "formtable_main_" ; + String tablename = table + formid; + beanBean.writeLog("查看sqltablename:"+tablename); + String xybz = ""; + String sqlsum = "select xybz from "+tablename+" where requestid="+requestId+" and xybz in (0,1,6)"; + beanBean.writeLog("sql999:"+sqlsum); + rs.execute(sqlsum); + if(rs.next()){ + xybz = Util.null2String(rs.getString("xybz")); + } + beanBean.writeLog("xybz:"+xybz); + String shq = propbean.getPropName("nodename_shq"); + String kgshq = propbean.getPropName("nodename_kgshq"); + String yzgsbm = propbean.getPropName("nodename_yzgsbm"); + String nodeName = ""; + if("0".equals(xybz)) + { + nodeName = shq; + } + if("1".equals(xybz)) + { + nodeName = kgshq; + } + + +// if("6".equals(xybz)) +// { +// nodeName = yzgsbm; +// } + + if("itlxsq".equals(workflowunnumber)) + { + String ysxgbm = propbean.getPropName("nodename_ysxgbm"); + if("10".equals(xybz)) + { + nodeName = ysxgbm; + } + } + if("jgzxzysx".equals(workflowunnumber)||"fzjgzysx".equals(workflowunnumber)||"fzjgyy".equals(workflowunnumber)||"zbyy".equals(workflowunnumber)){ + String jdfl = ""; + String jdmc = ""; + String sql = "select jdfl,jdmc from uf_qzyjhqb where lcid = '"+requestId+"' and freenode like '%"+currentnodeid+"%'"; + beanBean.writeLog("sql:"+sql); + rs.execute(sql); + if(rs.next()){ + jdfl = Util.null2String(rs.getString("jdfl")); + jdmc = Util.null2String(rs.getString("jdmc")); + } + String yzgsbm_jdfl = propbean.getPropName("jdfl.yzgsbm"); + if(yzgsbm_jdfl.equals(jdfl)){ + sql = "select nodename from workflow_freenode where requestid = '"+requestId+"' and id = '"+currentnodeid+"'"; + beanBean.writeLog("sql:"+sql); + rs.execute(sql); + if(rs.next()){ + nodeName = Util.null2String(rs.getString("nodename")); + } + }else if(StringUtils.isNotEmpty(jdmc)){ + nodeName = jdmc; + } + } + + if("itxqsq".equals(workflowunnumber)) + { + String ysxgbm = propbean.getPropName("itxqlc_xqjsrfs_nodename"); + nodeName = ysxgbm; + } + if("jgxtsq".equals(workflowunnumber)) + { + if("7".equals(xybz)){ + String ysxgbm = propbean.getPropName("jgxt_fs_zbnodename"); + nodeName = ysxgbm; + }else if("6".equals(xybz)){ + String ysxgbm = propbean.getPropName("jgxt_fs_yybnodename"); + nodeName = ysxgbm; + } + + } + if("mbwj".equals(workflowunnumber)) + { + if("0".equals(xybz)){ + String ysxgbm = propbean.getPropName("wdzx.fs.xtfzrname"); + nodeName = ysxgbm; + }else if("1".equals(xybz)){ + String ysxgbm = propbean.getPropName("wdzx.fs.xgbmname"); + nodeName = ysxgbm; + } + } + + + if(nodeName!="") + { + beanBean.writeLog("更新request base 的 status: " + status + ", 更新为 nodename: " + nodeName); + beanBean.writeLog("更新操作"); + String updateFreeNode = " update workflow_requestbase set status = ? where requestid=?"; + boolean updated = rs.executeUpdate(updateFreeNode, nodeName, requestId); + if (updated) { + beanBean.writeLog("更新成功:"+updateFreeNode+"nodeName"+nodeName+"requestid"+requestId); + } else { + beanBean.writeLog("更新失败:"+updateFreeNode+"nodeName"+nodeName+"requestid"+requestId); + } + } + + } + } + } + } + }catch (Exception e){ + beanBean.writeLog("AutoNodeFlowNextNodeCmd-e:"+e); + } + return result; + } catch (Exception e) { + + Boolean result = nextExecute(targetCommand); + beanBean.writeLog("当前节点 result : " + result); + + e.printStackTrace(); + beanBean.writeLog("更新自由节点失败:" + e.getMessage()); + //执行标准的业务处理 + return result; + } + } + + /** + * 判断自由节点是否生成成功,如果生成成功,讲uf_qzyjhqb表的zt字段该为1, + * 如果失败讲uf_qzyjhqb表中zt为null且requestid对应的数据删除 + * @param resultStatus 原始cmd状态 + * @param requestid requestid + */ + private boolean rollbackFreeNode(Boolean resultStatus, String requestid) { + BaseBean baseBean = new BaseBean(); + try { + RecordSet rs = new RecordSet(); + String id = ""; + String sql = " select id from uf_qzyjhqb where lcid=? and zt is null"; + rs.executeQuery(sql,new Object[]{requestid}); + if(rs.next()){ + id = Util.null2String(rs.getString("id")); + } + if(!"".equals(id)) + { + if(resultStatus) + { + // 插入自由节点成功,将zt字段设为1 + String updateSql = "update uf_qzyjhqb set zt = '1' where LCID = ?"; + + rs.executeUpdate(updateSql, requestid); + baseBean.writeLog("requestid "+requestid+" : "+"插入自由节点成功,将zt字段设为1"); + }else { + // 回滚数据 + String deletenodeflow=" delete from workflow_freenode where id in ( select freenode from uf_qzyjhqb where zt is null and LCID =? )"; + rs.executeUpdate(deletenodeflow, requestid); + String deleteSql = " delete from uf_qzyjhqb where zt is null and LCID = ?"; + rs.executeUpdate(deleteSql, requestid); + baseBean.writeLog("requestid "+requestid+" : "+"插入自由节点失败,回滚数据"); + } + } + } catch (Exception e) { + e.printStackTrace(); + baseBean.writeLog("回滚自由节点失败"); + } + return resultStatus; + } + + + public String getTableByRequestid(String requestid){ + String formid = ""; + try{ + RecordSet rs = new RecordSet(); + String sql =" select abs(t.formid) as formid \n" + + " from workflow_base t\n" + + " inner join workflow_requestbase l on l.workflowid = t.id\n" + + " where l.requestid="+requestid+"" ; + rs.execute(sql); + if(rs.next()){ + formid = Util.null2String(rs.getString("formid")); + } + }catch (Exception e){ + new BaseBean().writeLog("getTableByRequestid-e:"+e); + } + return formid; + } + +} diff --git a/src/main/java/com/engine/htsc/ReimbursementFlow/tool/Apireturn.java b/src/main/java/com/engine/htsc/ReimbursementFlow/tool/Apireturn.java new file mode 100644 index 0000000..585d99a --- /dev/null +++ b/src/main/java/com/engine/htsc/ReimbursementFlow/tool/Apireturn.java @@ -0,0 +1,15 @@ +package com.engine.htsc.ReimbursementFlow.tool; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +public class Apireturn { + + public static String returnmes(int Code, String message, JSONArray jsonArray){ + JSONObject jsonObject=new JSONObject(); + jsonObject.put("Code",Code); + jsonObject.put("data",jsonArray); + jsonObject.put("message",message); + return jsonObject.toString(); + } +} diff --git a/src/main/java/com/engine/htsc/aqsc/cmd/AqscDateCmd.java b/src/main/java/com/engine/htsc/aqsc/cmd/AqscDateCmd.java new file mode 100644 index 0000000..385c0b0 --- /dev/null +++ b/src/main/java/com/engine/htsc/aqsc/cmd/AqscDateCmd.java @@ -0,0 +1,137 @@ +package com.engine.htsc.aqsc.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.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class AqscDateCmd extends AbstractCommonCommand> { + + public AqscDateCmd(User user, Map params) { + this.params = params; + this.user = user; + } + + + @Override + public BizLogContext getLogContext() { + return null; + } + + @Override + public Map execute(CommandContext commandContext) { + + Map apimap = new HashMap(); + + RecordSet rs = new RecordSet(); + BaseBean bb = new BaseBean(); + String customid = Util.null2String(params.get("customid")); + + bb.writeLog("customidL:"+customid); +//con_56991 + + String departmentid = user.getUserDepartment()+""; + String departmentcode = "" ; + if(!"".equals(departmentid)){ + String sql = " select departmentcode from hrmdepartment where id="+departmentid; + rs.execute(sql); + if(rs.next()){ + departmentcode = Util.null2String(rs.getString("departmentcode")); + } + } + + //ZZ001126 + String where = ""; + if(!"".equals(customid)){ + String sql = "select defaultsql from mode_customsearch where id="+customid ; + rs.execute(sql); + if(rs.next()){ + where += Util.null2String(rs.getString("defaultsql")); + } + } + for (Map.Entry entry : params.entrySet()) { + System.out.println("Key = " + entry.getKey() + " Value = "+ entry.getValue()); + String key = entry.getKey(); + String value = Util.null2String(entry.getValue()); + + System.out.println(key + ":" + value); + String fieldid = "" ; + if(key.contains("con")){ + fieldid = key.substring(4); + }else{ + boolean bool = isNumeric(key); + if(bool){ + fieldid = key; + } + } + + if(!"".equals(fieldid)){ + String filename = "" ; + String sql = " select filename from workflow_billfield where id= "+fieldid; + rs.execute(sql); + if(rs.next()){ + filename = Util.null2String(rs.getString("filename")); + } + if(!"".equals(filename)){ + where += where == "" ? " t1."+filename +"='"+value+"'" : " and t1."+ filename +"='"+value+"'"; + } + } + } + + if(!"ZZ001126".equals(departmentcode)){ + where += " and t1.rwdwbm="+departmentid ; + } + + String wcsj = "" ; + String sql = " select min(wcsj) as wcsj from uf_aqscglbm t1 where "+where ; + bb.writeLog("sql:"+sql); + rs.execute(sql); + if(rs.next()){ + wcsj = Util.null2String(rs.getString("wcsj")); + } + apimap.put("wcsj",wcsj); + return apimap; + } + + + /*** + * + * @param str + * @return + */ + public boolean isNumeric(String str){ + Pattern pattern = Pattern.compile("[0-9]*"); + Matcher isNum = pattern.matcher(str); + if( !isNum.matches() ){ + return false; + } + return true; + } + + +} diff --git a/src/main/java/com/engine/htsc/aqsc/service/AqscService.java b/src/main/java/com/engine/htsc/aqsc/service/AqscService.java new file mode 100644 index 0000000..cee490d --- /dev/null +++ b/src/main/java/com/engine/htsc/aqsc/service/AqscService.java @@ -0,0 +1,16 @@ +package com.engine.htsc.aqsc.service; + +import weaver.hrm.User; + +import java.util.Map; + +public interface AqscService { + + /*** + * + * @param user + * @param params + * @return + */ + Map doGetDate(User user, Map params); +} diff --git a/src/main/java/com/engine/htsc/aqsc/service/impl/AqscServiceImpl.java b/src/main/java/com/engine/htsc/aqsc/service/impl/AqscServiceImpl.java new file mode 100644 index 0000000..9e84704 --- /dev/null +++ b/src/main/java/com/engine/htsc/aqsc/service/impl/AqscServiceImpl.java @@ -0,0 +1,17 @@ +package com.engine.htsc.aqsc.service.impl; + +import com.engine.core.impl.Service; +import com.engine.htsc.aqsc.cmd.AqscDateCmd; +import com.engine.htsc.aqsc.service.AqscService; +import weaver.hrm.User; + +import java.util.Map; + +public class AqscServiceImpl extends Service implements AqscService { + + @Override + public Map doGetDate(User user, Map params) { + return commandExecutor.execute(new AqscDateCmd(user,params)); + } + +} diff --git a/src/main/java/com/engine/htsc/aqsc/web/AqscAcion.java b/src/main/java/com/engine/htsc/aqsc/web/AqscAcion.java new file mode 100644 index 0000000..e4a55f0 --- /dev/null +++ b/src/main/java/com/engine/htsc/aqsc/web/AqscAcion.java @@ -0,0 +1,47 @@ +package com.engine.htsc.aqsc.web; + +import com.alibaba.fastjson.JSONObject; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.aqsc.service.AqscService; +import com.engine.htsc.aqsc.service.impl.AqscServiceImpl; +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 AqscAcion { + + + public AqscService getService(HttpServletRequest request, HttpServletResponse response){ + return (AqscService) ServiceUtil.getService(AqscServiceImpl.class); + } + + @GET + @Path("/doGetDate") + @Produces({MediaType.TEXT_PLAIN}) + public String doGetDate(@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).doGetDate(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); + } + +} diff --git a/src/main/java/com/engine/htsc/branch/approvalChain/model/BranchLinkReq.java b/src/main/java/com/engine/htsc/branch/approvalChain/model/BranchLinkReq.java new file mode 100644 index 0000000..d9e9d27 --- /dev/null +++ b/src/main/java/com/engine/htsc/branch/approvalChain/model/BranchLinkReq.java @@ -0,0 +1,33 @@ +package com.engine.htsc.branch.approvalChain.model; + +import com.alibaba.fastjson.JSONArray; + +public class BranchLinkReq { + private String unnumber=""; + private String unnumbercode=""; + private JSONArray 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 JSONArray getValue() { + return value; + } + + public void setValue(JSONArray value) { + this.value = value; + } +} diff --git a/src/main/java/com/engine/htsc/branchpayment/enums/BranchPay.java b/src/main/java/com/engine/htsc/branchpayment/enums/BranchPay.java new file mode 100644 index 0000000..08577fb --- /dev/null +++ b/src/main/java/com/engine/htsc/branchpayment/enums/BranchPay.java @@ -0,0 +1,92 @@ +package com.engine.htsc.branchpayment.enums; + +import org.apache.commons.lang3.StringUtils; + +/** + * k1810012 + * 分支机构付款类型 + */ +public enum BranchPay { + + GE_PAY("0", "fzjgtyfk", "htfk", + "com.engine.htsc.payment.service.impl.HeadPaymentBudgetCommand"), //通用付款 + GE_REI("1", "fzjgtybx", "htpt", + "com.engine.htsc.payment.service.impl.HeadBxBudgetCommand"), //通用报销 + TRA_REI("2", "fzjgclbx", "htcl", + "com.engine.htsc.payment.service.impl.HeadClBxBudgetCommand"), //差旅报销 + SETTLE_PAY("3", "fzjgsljsfk", "htfk", + "com.engine.htsc.payment.service.impl.HeadPaymentBudgetCommand"), //商旅结算 + CGSC_TRAVEL("4", "cgscfk", "htfk", + "com.engine.htsc.payment.service.impl.SettlePaymentCommand"); //采购商城付款 + + BranchPay(String type, String value, String lb, String commandClassName) { + this.type = type; + this.value = value; + this.lb = lb; + this.commandClassName = commandClassName; + } + + private final String type; + private final String value; + private final String lb; + private final String commandClassName; + + public String getType() { + return type; + } + + public String getValue() { + return value; + } + + public String getLb() { + return lb; + } + + public String getCommandClassName() { + return commandClassName; + } + + public static String getUnNumberByType(String type) { + if (StringUtils.isBlank(type)) { + return ""; + } + String unNumber = ""; + for (BranchPay value : BranchPay.values()) { + if (value.type.equalsIgnoreCase(type)) { + unNumber = value.value; + break; + } + } + return unNumber; + } + + public static String getClassByType(String type) { + if (StringUtils.isBlank(type)) { + return ""; + } + String className = ""; + for (BranchPay value : BranchPay.values()) { + if (value.type.equalsIgnoreCase(type)) { + className = value.commandClassName; + break; + } + } + return className; + } + + public static String getLbByType(String type) { + if (StringUtils.isBlank(type)) { + return ""; + } + String lb = ""; + for (BranchPay value : BranchPay.values()) { + if (value.type.equalsIgnoreCase(type)) { + lb = value.lb; + break; + } + } + return lb; + } + +} diff --git a/src/main/java/com/engine/htsc/branchpayment/service/impl/BranchBudgetCommandFactory.java b/src/main/java/com/engine/htsc/branchpayment/service/impl/BranchBudgetCommandFactory.java new file mode 100644 index 0000000..ae1ee7e --- /dev/null +++ b/src/main/java/com/engine/htsc/branchpayment/service/impl/BranchBudgetCommandFactory.java @@ -0,0 +1,35 @@ +package com.engine.htsc.branchpayment.service.impl; + +import com.engine.htsc.branchpayment.enums.BranchPay; +import com.engine.htsc.payment.service.BudgetCommand; +import com.engine.htsc.subpayment.enums.SubPay; + +/** + * 动态获取预算command + */ +public class BranchBudgetCommandFactory { + + private BranchBudgetCommandFactory() { + } + + // 分支 + public static BudgetCommand getBudgetCommand(String type) { + try { + return (BudgetCommand) Class.forName(BranchPay.getClassByType(type)).newInstance(); + } catch (InstantiationException | ClassNotFoundException | IllegalAccessException e) { + e.printStackTrace(); + } + return null; + } + + // 子公司 + public static BudgetCommand getBudgetCommand4Sub(String type) { + try { + return (BudgetCommand) Class.forName(SubPay.getClassByType(type)).newInstance(); + } catch (InstantiationException | ClassNotFoundException | IllegalAccessException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/src/main/java/com/engine/htsc/branchpayment/service/impl/BranchCostDTOFactory.java b/src/main/java/com/engine/htsc/branchpayment/service/impl/BranchCostDTOFactory.java new file mode 100644 index 0000000..b9d57bb --- /dev/null +++ b/src/main/java/com/engine/htsc/branchpayment/service/impl/BranchCostDTOFactory.java @@ -0,0 +1,96 @@ +package com.engine.htsc.branchpayment.service.impl; + +import cn.hutool.core.lang.Assert; +import com.engine.htsc.branchpayment.enums.BranchPay; +import com.engine.htsc.branchpayment.utils.BranchBizUtil; +import com.engine.htsc.payment.pojo.CostAccountDto; +import com.engine.htsc.payment.service.impl.SettlePaymentCommand; +import com.engine.htsc.payment.util.BizUtils; +import com.engine.htsc.subpayment.enums.SubPay; +import com.engine.htsc.subpayment.utils.SubBizUtil; +import org.apache.commons.logging.LogFactory; + +/** + * 创建核算明细 + */ +public class BranchCostDTOFactory { + + private BranchCostDTOFactory() { + } + + // 分支 + public static CostAccountDto getCostDTOByType(String requestId, String lx) throws Exception { + Assert.notBlank(requestId, "未指定流程id"); + Assert.notBlank(lx, "未指定类型"); + BizUtils bu = new BizUtils(); + BranchBizUtil bizUtil = new BranchBizUtil(); + SettlePaymentCommand settlePaymentCommand = new SettlePaymentCommand(); + + if (BranchPay.GE_PAY.getType().equalsIgnoreCase(lx) + || BranchPay.SETTLE_PAY.getType().equalsIgnoreCase(lx)) { + return bizUtil.generateCommonPayData(requestId, BranchPay.getLbByType(lx)); + } + + if (BranchPay.GE_REI.getType().equalsIgnoreCase(lx)) { + return bu.generateCommonReimbData(requestId, BranchPay.getLbByType(lx)); + } + + if (BranchPay.TRA_REI.getType().equalsIgnoreCase(lx)) { + return bizUtil.generateTravelReimbData(requestId, BranchPay.getLbByType(lx)); + } + if (BranchPay.CGSC_TRAVEL.getType().equalsIgnoreCase(lx)) { + return settlePaymentCommand.generateCommonReimbData(requestId, BranchPay.getLbByType(lx)); + } + return null; + } + + // 子公司 + public static CostAccountDto getCostDTOByType4Sub(String requestId, String lx) throws Exception { + Assert.notBlank(requestId, "未指定流程id"); + Assert.notBlank(lx, "未指定类型"); + SubBizUtil subBizUtil = new SubBizUtil(); + BizUtils bizUtils = new BizUtils(); + + if (SubPay.ZJ_REI.getType().equalsIgnoreCase(lx)) { + return bizUtils.ZjCommonReimbData(requestId, SubPay.getLbByType(lx)); + } + + if (SubPay.ZG_REI.getType().equalsIgnoreCase(lx)) { + return subBizUtil.generateCommonReimbData(requestId, SubPay.getLbByType(lx)); + } + + if (SubPay.ZGS_REI.getType().equalsIgnoreCase(lx)) { + return subBizUtil.generateCommonReimbData(requestId, SubPay.getLbByType(lx)); + } + + if (SubPay.ZG_TRAVEL.getType().equalsIgnoreCase(lx)) { + return subBizUtil.generateTravelReimbData(requestId, SubPay.getLbByType(lx)); + } + if (SubPay.ZGTY_PAY.getType().equalsIgnoreCase(lx)) { + return bizUtils.generateCommonPayData(requestId, SubPay.getLbByType(lx)); + } + if (SubPay.ZJTY_PAY.getType().equalsIgnoreCase(lx)) { + return bizUtils.generateCommonPayData(requestId, SubPay.getLbByType(lx)); + } + + if (SubPay.ZGS_TRAVEL.getType().equalsIgnoreCase(lx)) { + return subBizUtil.generateTravelReimbData(requestId, SubPay.getLbByType(lx)); + } + + if (SubPay.ZJ_TRAVEL.getType().equalsIgnoreCase(lx)) { + return subBizUtil.generateTravelReimbData(requestId, SubPay.getLbByType(lx)); + } + + return null; + } + + public static CostAccountDto getSettlePaymentCostDTO(String requestId, String lx) throws Exception { + Assert.notBlank(requestId, "未指定流程id"); + Assert.notBlank(lx, "未指定类型"); + SettlePaymentCommand settlePaymentCommand = new SettlePaymentCommand(); + if (BranchPay.CGSC_TRAVEL.getType().equalsIgnoreCase(lx)) { + return settlePaymentCommand.generateCommonReimbData(requestId, BranchPay.getLbByType(lx)); + } + return null; + } +} diff --git a/src/main/java/com/engine/htsc/branchpayment/utils/BranchBizUtil.java b/src/main/java/com/engine/htsc/branchpayment/utils/BranchBizUtil.java new file mode 100644 index 0000000..9859b64 --- /dev/null +++ b/src/main/java/com/engine/htsc/branchpayment/utils/BranchBizUtil.java @@ -0,0 +1,391 @@ +package com.engine.htsc.branchpayment.utils; + +import com.api.htsc.businessMethod.SubUnionBizUtil; +import com.engine.htsc.branchpayment.pojo.UfCash; +import com.engine.htsc.payment.dao.PaymentDao; +import com.engine.htsc.payment.pojo.*; +import com.engine.htsc.payment.util.BizUtils; +import weaver.conn.RecordSet; +import weaver.conn.RecordSetTrans; +import weaver.general.Util; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.htsc.comInfo.PropBean; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * 分支机构工具类 + */ +public class BranchBizUtil { + + //分支机构出纳表 + public static final String FZJG = "UF_FZJGFK"; + //子公司 + public static final String ZGS = "UF_ZGSFK"; + + /** + * 获取建模表里的数据 + */ + 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,FKZT,tbdlcyszt 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"))); + ufCash.setFkzt(Util.null2String(rs.getString("FKZT"))); + ufCash.setTbdlcyszt(Util.null2String(rs.getString("tbdlcyszt"))); + lists.add(ufCash); + } + return lists; + } + + /** + * 更新建模预算状态 + */ + public void updateBudgetStatus(String id, String discard, String uf) { + RecordSetTrans rst = new RecordSetTrans(); + rst.setAutoCommit(false); + try { + if ("1".equals(discard)) { + rst.executeUpdate("update " + uf + " set TBDLCYSZT=0 where ID=?", id); + } else if ("-1".equals(discard)) { + rst.executeUpdate("update " + uf + " set TBDLCYSZT=2,tbdlczt=2,fkzt=2 where ID=?", id); + } + rst.executeUpdate("update " + uf + " set FKZT=0 where TBDLCZT=0 and id =?", id); + rst.commit(); + } catch (Exception e) { + rst.rollback(); + rst.writeLog("error:" + e.getMessage()); + } + } + + /** + * 更新建模核算状态 + */ + public void updateCostStatus(String id, String rid, String uf) { + RecordSetTrans rst = new RecordSetTrans(); + rst.setAutoCommit(false); + try { + rst.executeUpdate("update " + uf + " set TBDLCZT=0 where ID=?", id); + rst.executeUpdate("update " + uf + " set FKZT=0 where TBDLCYSZT=0 and id =?", id); + rst.executeUpdate("update UF_YFKMIDDLE set SFFKQR=1 where REQID=?", rid); + //更新 + rst.commit(); + } catch (Exception e) { + rst.rollback(); + rst.writeLog("error:" + e.getMessage()); + } + } + + /** + * 更新建模手动付款状态 + */ + public String updateManualPaymentStatus(String rids, String uf) { + RecordSetTrans rst = new RecordSetTrans(); + rst.writeLog("====更新手动付款状态@" + rids); + if ("".equals(rids)) { + return "请勾选相关流程进行状态更改"; + } + try { + String sqlCondition = String.join("','", rids.split(",")); + rst.setAutoCommit(false); + rst.executeQuery("SELECT REQUTID,FKZT,LCBH FROM " + uf + " WHERE REQUTID IN ('" + sqlCondition + "')"); + List notin = new ArrayList<>(); + List in = new ArrayList<>(); + while (rst.next()) { + String fkzt = Util.null2String(rst.getString("FKZT")); + String requtid = Util.null2String(rst.getString("REQUTID")); + String lcbh = Util.null2String(rst.getString("LCBH")); + if ("2".equals(fkzt)) { + notin.add(lcbh); + } else { + in.add(requtid); + } + } + rst.executeUpdate("update " + uf + " set FKFS=1,FKZT=0 where REQUTID in('" + String.join("','", in) + "')"); + rst.commit(); + return "更新手动付款状态成功(注:流程编号为 "+String.join(",", notin)+" 已废弃,无法手动付款)"; + } catch (Exception e) { + rst.rollback(); + rst.writeLog("====更新手动付款状态失败,出现异常@" + e.getMessage()); + e.printStackTrace(); + return "更新手动付款状态出现异常"; + } + } + + /** + * 生成付款核算接口(分支) + * + * @param rid 流程id + * @param lb 核算参数字段 lb + * @return 核算参数 + */ + public CostAccountDto generateCommonPayData(String rid, String lb) throws Exception { + RecordSet rs = new RecordSet(); + BizUtils bizUtils = new BizUtils(); + try { + DepartmentComInfo dc = new DepartmentComInfo(); + ResourceComInfo rc = new ResourceComInfo(); + PaymentDao pd = new PaymentDao(); + String workFlowTableName = bizUtils.getTableNameByRequestId(rid); + + String baseInfo = "SELECT t1.SFQDZ,t1.ywht,t1.fklx,t1.NGR,t1.SZBM,t1.LCBH,t1.REQUESTID,t1.DJZS,t1.LCBT,t1.NGSJ,t2.REQUESTNAME,t2.REQUESTID\n" + + "FROM " + workFlowTableName + " t1\n" + + "LEFT OUTER JOIN WORKFLOW_REQUESTBASE t2 on t1.REQUESTID=t2.REQUESTID\n" + + "WHERE t1.REQUESTID=?"; + rs.executeQuery(baseInfo, rid); + CostAccountDto costAccountDto = new CostAccountDto(); + if (rs.next()) { + String ngr = Util.null2String(rs.getString("NGR")); + String bm = Util.null2String(rs.getString("SZBM")); //部门 + String requestMark = Util.null2String(rs.getString("LCBH")); + String fjzs = Util.null2String(rs.getString("DJZS")); //附件张数 + String 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")); //有无合同 + + costAccountDto.setElectronicBill(SFQDZ); //是否电子票 + costAccountDto.setType(lb); //走总部付款费用核算 + costAccountDto.setBz2("0"); + 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); //总部付款付款单号直接传流程编码 + } + + //获取支付明细(dt11) + String getPayInfoFromDt11 = pd.getPayInfoFromDt11(workFlowTableName, rid); + 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); + } + costAccountDto.setPayDetails(payDetailList); + + //获取预算明细 + String subjectInfoFromDt8AndDt12 = pd.getSubjectInfoFromDt8AndDt12(workFlowTableName, rid); + 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")); + String dyysmc = Util.null2String(rs.getString("YSKMMC")); + 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(zhrmb); + kjDetail.setMoney(zhrmb); + kjDetail.setProjectCode(""); + kjDetail.setProject(""); + kjDetail.setReason(sy); + kjDetailList.add(kjDetail); + } + costAccountDto.setKjDetails(kjDetailList); + //HTO-11640查询主表,当付款流程中字段“先付款后发票”选项为“是”时,接口字段“SFYFP”传值“Y”, + // “先付款后发票”选项为“否”时,接口字段“SFYFP”传值“N”; + //针对分支机构通用付款 + if(SubUnionBizUtil.equalsTableName(rid, "fzjgtyfk")){ + RecordSet sqlFindYfp = new RecordSet(); + String sqlNew = "select sfxfkhtgfp from "+workFlowTableName+" where requestid = "+rid; + 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"); + } + } + } + return costAccountDto; + } catch (Exception e) { + rs.writeLog("error," + e.getMessage()); + throw new Exception("生成核算数据错误,requestId:" + rid); + } + } + + /** + * 生成差旅核算参数(分支) + * + * @param rid 流程id + * @param lb lb 调用核算的类型 + * @return CostAccountDto + * @author wan + */ + public CostAccountDto generateTravelReimbData(String rid, String lb) { + CostAccountDto costAccDto = new CostAccountDto(); + RecordSet rs = new RecordSet(); + PropBean pb = new PropBean(); + BizUtils bizUtils = new BizUtils(); + String tablename = bizUtils.getTableNameByRequestId(rid); + rs.executeQuery("select SFQDZ,id,ngr,szbm,lcbh,djzs,ngsj from " + tablename + " where requestid=? ", + rid); + 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("ngsj")) + ":00"; + String SFQDZ = Util.null2String(rs.getString("SFQDZ")); + + 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=? ", + rid); + rs.next(); + String requestname = Util.null2String(rs.getString("requestname")); + + costAccDto.setElectronicBill(SFQDZ); + costAccDto.setType(lb); + 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 kjdtList = new ArrayList<>(); + String dt12Sql = " select fycdbm,ccr,hjkm,zhrmb from " + tablename + "_dt11 where mainid=? "; + rs.executeQuery(dt12Sql, id); + while (rs.next()) { + String fycdbm = Util.null2String(rs.getString("fycdbm")); + String fycdr = Util.null2String(rs.getString("ccr")); + String hjkm = Util.null2String(rs.getString("hjkm")); + if (!"".equals(hjkm)) { + hjkm = hjkm.split("_")[1]; + } + String zhrmb = Util.null2String(rs.getString("zhrmb")); + + String fysjcdbmbm = deptComInfo.getDepartmentCode(fycdbm); + String fysjcdbmmc = deptComInfo.getDepartmentName(fycdbm); + String fysjcdrbh = resourceComInfo.getWorkcode(fycdr); + String fysjcdrmc = resourceComInfo.getLastname(fycdr); + + KjDetail kjitem = new KjDetail(); + kjitem.setExpenseDeptCode(fysjcdbmbm); + kjitem.setExpenseDept(fysjcdbmmc); + kjitem.setExpenseBadge(fysjcdrbh); + kjitem.setExpensePerson(fysjcdrmc); + + SubjectData subject = new SubjectData(); + subject.setItemCode(hjkm); + subject.setItemName(bizUtils.getKjkmmc(hjkm)); + kjitem.setSubjectData(subject); + + BudgetData budget = new BudgetData(); + budget.setRelationCode(hjkm); + String yskmbm = pb.getPropName(hjkm); + budget.setItemCode(yskmbm); + budget.setItemName(bizUtils.getYskmmc(yskmbm)); + kjitem.setBudgetData(budget); + + kjitem.setPriceRMB(zhrmb); + kjitem.setMoney(zhrmb); + kjitem.setProjectCode(""); + kjitem.setProject(""); + kjitem.setReason(""); + + kjdtList.add(kjitem); + } + costAccDto.setKjDetails(kjdtList); + + List zfdtList = new ArrayList<>(); + String dt11Sql = " select yxzfje,xjzfje,khxmc,yxzh,bm,ccr from " + tablename + "_dt10 where mainid=? "; + rs.executeQuery(dt11Sql, id); + while (rs.next()) { + String yxzfje = Util.null2String(rs.getString("yxzfje")); + String xjzfje = Util.null2String(rs.getString("xjzfje")); + String khxmc = Util.null2String(rs.getString("khxmc")); + String yxzh = Util.null2String(rs.getString("yxzh")); + String bm = Util.null2String(rs.getString("bm")); + String ygxm = Util.null2String(rs.getString("ccr")); + + String bmmc = deptComInfo.getDepartmentName(bm); + String ygxmmc = resourceComInfo.getLastname(ygxm); + String ygxmwk = resourceComInfo.getWorkcode(ygxm); + + PayDetail payitem = new PayDetail(); + payitem.setPayByBank(yxzfje); + payitem.setPayByCash(xjzfje); + payitem.setBankName(khxmc); + payitem.setBankAccount(yxzh); + payitem.setEmployeeDept(bmmc); + payitem.setEmployeeName(ygxmmc); + payitem.setEmployeeBadge(ygxmwk); + + zfdtList.add(payitem); + + } + costAccDto.setPayDetails(zfdtList); + + + } catch (Exception e) { + e.printStackTrace(); + } + + } + + return costAccDto; + } +} diff --git a/src/main/java/com/engine/htsc/branchpayment/web/BranchGeneralPaymentAction.java b/src/main/java/com/engine/htsc/branchpayment/web/BranchGeneralPaymentAction.java new file mode 100644 index 0000000..38795cf --- /dev/null +++ b/src/main/java/com/engine/htsc/branchpayment/web/BranchGeneralPaymentAction.java @@ -0,0 +1,117 @@ +package com.engine.htsc.branchpayment.web; + +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.htsc.branchpayment.service.BranchPaymentService; +import com.engine.htsc.branchpayment.service.impl.BranchPaymentServiceImpl; +import com.engine.htsc.trip.util.AjaxResult; +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; +import java.util.Map; + + +/** + * k1810012 + * 分支出纳页面接口 + *

+ * 预算实占、核算、付款、废弃 + */ +public class BranchGeneralPaymentAction extends BaseBean { + + private BranchPaymentService getBranchPaymentServiceImpl() { + return ServiceUtil.getService(BranchPaymentServiceImpl.class); + } + + /** + * 预算实占、废弃 + * + * @param request 请求体 + * @return 消息体 + */ + @POST + @Path("/doBudget") + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult> doBudget(@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(getBranchPaymentServiceImpl().doBudgetByBatchId(rid, discard)); + } catch (Exception e) { + writeLog(e.getMessage()); + return AjaxResult.error(e.getMessage()); + + } + } + + /** + * 核算 + * + * @param request 请求体 + * @return 消息体 + */ + @POST + @Path("/doAccount") + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult> doAccount(@Context HttpServletRequest request) { + try { + Map requestParam = ParamUtil.request2Map(request); + String id = Util.null2String(requestParam.getOrDefault("id", "")); + return AjaxResult.ok(getBranchPaymentServiceImpl().doAccountByBatchId(id)); + } catch (Exception e) { + writeLog(e.getMessage()); + return AjaxResult.error(e.getMessage()); + + } + } + + /** + * 付款 + * + * @param request 请求体 + * @return 消息体 + */ + @POST + @Path("/doPayment") + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult> doPayment(@Context HttpServletRequest request) { + try { + Map requestParam = ParamUtil.request2Map(request); + String id = Util.null2String(requestParam.getOrDefault("id", "")); + return AjaxResult.ok(getBranchPaymentServiceImpl().doPaymentByBatchId(id)); + } catch (Exception e) { + writeLog(e.getMessage()); + return AjaxResult.error(e.getMessage()); + + } + } + + /** + * 手动付款 + */ + @POST + @Path("/doManualPayment") + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Produces(MediaType.APPLICATION_JSON) + public AjaxResult doManualPayment(@Context HttpServletRequest request) { + try { + Map requestParam = ParamUtil.request2Map(request); + String id = Util.null2String(requestParam.getOrDefault("id", "")); + return AjaxResult.ok(getBranchPaymentServiceImpl().updateManualPaymentStatus(id)); + } catch (Exception e) { + writeLog(e.getMessage()); + return AjaxResult.error(e.getMessage()); + + } + } + + +} diff --git a/src/main/java/com/engine/htsc/doc/common/AsyncThread.java b/src/main/java/com/engine/htsc/doc/common/AsyncThread.java new file mode 100644 index 0000000..f087260 --- /dev/null +++ b/src/main/java/com/engine/htsc/doc/common/AsyncThread.java @@ -0,0 +1,86 @@ +package com.engine.htsc.doc.common; + +import java.lang.reflect.Method; + +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + + +/** + * 执行对象的某个方法 + * @author Administrator + * + */ +public class AsyncThread extends Thread { + private static Logger log = LoggerFactory.getLogger(AsyncThread.class); + private Object async; + private String method; + private Object param[]; + private String key; + + public AsyncThread(Object o,String method,Object[] param){ + this.async =o; + this.method = method; + this.param = param; + } + + @Override + public void run() { + long time1 = System.currentTimeMillis(); + log.info("开始ClassName:"+async.getClass().getName()+"||method:"+method); + if(null==async||StringUtils.isEmpty(method)){ + return; + } + Object a =async+method; + synchronized (a) { + try { + Method[] methods= async.getClass().getDeclaredMethods(); + for (Method invokeMethod : methods) { + if(invokeMethod.getName().equals(method)){ + Class[] parameterTypes = invokeMethod.getParameterTypes(); + if(null!=parameterTypes){ + log.info("方法:"+method+",参数个数:"+parameterTypes.length); + //参数不相等,继续查找 + if(null==param||param.length!=parameterTypes.length){ + continue; + } + }else{ + //参数不相等,继续查找 + if(null!=param&¶m.length!=0){ + continue; + } + } + invokeMethod.setAccessible(true); + invokeMethod.invoke(async, param); + break; + } + } +// Class c [] = new Class[param.length]; +// for (int i = 0; i < param.length; i++) { +// c[i] = param[i].getClass(); +// } +// Method invokeMethod= async.getClass().getDeclaredMethod(method,c); +// +// Method[] methods= async.getClass().getDeclaredMethods(); + } catch(Exception e) { + e.printStackTrace(); + log.error(e.getMessage(), e); + } + } + log.info("结束ClassName:"+async.getClass().getName()+"||method:"+method+"||耗时:"+(System.currentTimeMillis()-time1)); + if(StringUtils.isNotEmpty(key)){ + ThreadPoolUtil.hashMap_thread.put(key, "1"); + } + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + +} \ No newline at end of file diff --git a/src/main/java/com/engine/htsc/doc/util/BeanUtil.java b/src/main/java/com/engine/htsc/doc/util/BeanUtil.java new file mode 100644 index 0000000..82be43e --- /dev/null +++ b/src/main/java/com/engine/htsc/doc/util/BeanUtil.java @@ -0,0 +1,279 @@ +package com.engine.htsc.doc.util; + + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.StringUtils; + +import java.beans.BeanInfo; +import java.beans.IntrospectionException; +import java.beans.Introspector; +import java.beans.PropertyDescriptor; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.*; + +public class BeanUtil { + + /** + * 将一个 Map 对象转化为一个 JavaBean + * @param type 要转化的类型 + * @param map 包含属性值的 map + * @return 转化出来的 JavaBean 对象 + * @throws IntrospectionException + * 如果分析类属性失败 + * @throws IllegalAccessException + * 如果实例化 JavaBean 失败 + * @throws InstantiationException + * 如果实例化 JavaBean 失败 + * @throws InvocationTargetException + * 如果调用属性的 setter 方法失败 + */ + public static Object convertMap(Class type, Map map) + throws IntrospectionException, IllegalAccessException, + InstantiationException, InvocationTargetException { + BeanInfo beanInfo = Introspector.getBeanInfo(type); // 获取类属性 + Object obj = type.newInstance(); // 创建 JavaBean 对象 + + // 给 JavaBean 对象的属性赋值 + PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); + for (int i = 0; i< propertyDescriptors.length; i++) { + PropertyDescriptor descriptor = propertyDescriptors[i]; + String propertyName = descriptor.getName(); + + if (map.containsKey(propertyName)) { + // 下面一句可以 try 起来,这样当一个属性赋值失败的时候就不会影响其他属性赋值。 + Object value = map.get(propertyName); + + Object[] args = new Object[1]; + args[0] = value; + + descriptor.getWriteMethod().invoke(obj, args); + } + } + return obj; + } + + /** + * 将一个 JavaBean 对象转化为一个 Map + * @param bean 要转化的JavaBean 对象 + * @return 转化出来的 Map 对象 + * @throws IntrospectionException 如果分析类属性失败 + * @throws IllegalAccessException 如果实例化 JavaBean 失败 + * @throws InvocationTargetException 如果调用属性的 setter 方法失败 + */ + public static Map convertBean(Object bean) + throws IntrospectionException, IllegalAccessException, InvocationTargetException { + Class type = bean.getClass(); + Map returnMap = new HashMap(); + BeanInfo beanInfo = Introspector.getBeanInfo(type); + + PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); + for (int i = 0; i< propertyDescriptors.length; i++) { + PropertyDescriptor descriptor = propertyDescriptors[i]; + String propertyName = descriptor.getName(); + if (!propertyName.equals("class")) { + Method readMethod = descriptor.getReadMethod(); + Object result = readMethod.invoke(bean, new Object[0]); + if (result != null) { + returnMap.put(propertyName, result); + } else { + returnMap.put(propertyName, ""); + } + } + } + return returnMap; + } + + /** + * 将长字符串切分成短字符串数组 + * @param ids 原始字符串 逗号英文分割 + * @param pernum 每个字符数组大小 + * @return + */ + public static List splitByPerNum(String ids, int pernum) { + List result = new ArrayList<>(); + if(StringUtils.isNotEmpty(ids)) { + String[] idArray = ids.split(","); + result = splitByPerNum(idArray,pernum); + } + return result; + } + + /** + * 将字符list按照大小切分成指定的短字符list 逗号分割 + * @param ids + * @param pernum + * @return + */ + public static List splitByPerNum (List ids, int pernum) { + List result = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(ids)) { + String[] idArray = ids.toArray(new String[ids.size()]); + result = splitByPerNum(idArray,pernum); + } + return result; + } + + /** + * 将长字符串切分成短字符串数组 + * @param ids + * @param pernum + * @return + */ + public static List splitByPerNum(String[] ids, int pernum) { + List result = new ArrayList<>(); + if(null!=ids&&ids.length>0) { + int countPer = 0; + int countAll = 0; + String tempIds = ""; + for(String id : ids) { + tempIds = tempIds+id+","; + countPer ++; + if(countPer convertStrToList(String str) { + List result = new ArrayList<>(); + if(StringUtils.isNotEmpty(str)) { + String[] idArray = str.split(","); + result = Arrays.asList(idArray); + } + return result; + } + + /** + * List拆分 + * @param list + * @param len + * @return + */ + public static List> splitList(List list, int len) { + if (list == null || list.size() == 0 || len < 1) { + return null; + } + + List> result = new ArrayList>(); + + int size = list.size(); + int count = (size + len - 1) / len; + + for (int i = 0; i < count; i++) { + List subList = list.subList(i * len, ((i + 1) * len > size ? size : len * (i + 1))); + result.add(subList); + } + return result; + } + + /** + * 判断一个id 是否在ids字符串里面 + * @param id + * @param ids + * @return + */ + public static boolean isInIds(String id,String ids) { + boolean flag = false; + if(StringUtils.isNotEmpty(id)&&StringUtils.isNotEmpty(ids)) { + List idsList = Arrays.asList(ids.split(",")); + if(idsList.contains(id)) { + flag = true; + } + } + return flag; + } + + + /** + * 泛微id比较 返回 A集合和B集合的交集 + * @param idsA + * @param idsB + * @return + */ + public static String commonLeftAndRight(String idsA, String idsB) { + String result = ""; + List AList = StringUtils.isNotEmpty(idsA)? Arrays.asList(idsA.split(",")):new ArrayList<>(); + List BList = StringUtils.isNotEmpty(idsB)? Arrays.asList(idsB.split(",")):new ArrayList<>(); + if(AList.size()==0||BList.size()==0) { + return result; + } + for(String str : AList) { + if(BList.contains(str)) { + result = result+str+","; + }else { + continue; + } + } + if(StringUtils.isNotEmpty(result)) { + result = result.substring(0,result.length()-1); + } + return result; + } + + public static void main(String args[]) { + String sql = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"; + List result = splitByPerNum(sql,1); + List result2 = splitByPerNum(sql,2); + List result3 = splitByPerNum(sql,24); + List result4 = splitByPerNum(sql,26); + List result5 = splitByPerNum(sql,100); + + + List tempList = new ArrayList<>(); + for(int i =0;i<=2000;i++) { + tempList.add(String.valueOf(i)); + } + + List result6 = splitByPerNum(tempList,999); + + + String id = "1,2"; + String ids1 = "12"; + String ids2 = "2,369,"; + String ids3 = "3,11,22"; + String ids4 = "1"; + String ids5 = "45,11,113,1"; + + System.out.println(commonLeftAndRight(id,ids1)); + System.out.println(commonLeftAndRight(id,ids2)); + System.out.println(commonLeftAndRight(id,ids3)); + System.out.println(commonLeftAndRight(id,ids4)); + System.out.println(commonLeftAndRight(id,ids5)); + + System.out.println("???"); + + } + + +} diff --git a/src/main/java/com/engine/htsc/financialadjustment/util/BizUtil.java b/src/main/java/com/engine/htsc/financialadjustment/util/BizUtil.java new file mode 100644 index 0000000..57be889 --- /dev/null +++ b/src/main/java/com/engine/htsc/financialadjustment/util/BizUtil.java @@ -0,0 +1,342 @@ +package com.engine.htsc.financialadjustment.util; + +import cn.hutool.core.lang.Assert; +import com.engine.htsc.payment.pojo.*; +import com.engine.htsc.payment.util.PayUtil; +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.*; + + +/** + * utils for financial adjust work flow + */ +public final class BizUtil { + + //联合,总部预算表和会计表 + private static final String LH_YSB = "uf_lhkmpz"; + private static final String LH_KJB = "uf_lhkjkmpz"; + private static final String ZB_YSB = "uf_kmpz"; + private static final String ZB_KJB = "uf_kjkmpz"; + + /** + * 获取财务调整流程核算数据p + * + * @return CostAccountDto + */ + public static CostAccountDto getAdjustCost(String rid, String lb) throws Exception { + RecordSet rs = new RecordSet(); + rs.writeLog("获取财务调整流程核算数据 requestid:" + rid); + String tablename = PayUtil.getTbNameByRid(rid); + CostAccountDto accountDto = new CostAccountDto(); + try { + DepartmentComInfo dc = new DepartmentComInfo(); + ResourceComInfo rc = new ResourceComInfo(); + String sql = "SELECT t1.ID,t1.NGR,t1.SZBM,t1.LCBH,t1.RZRQ,t2.REQUESTNAME FROM " + tablename + " t1\n" + + "LEFT JOIN WORKFLOW_REQUESTBASE t2\n" + + "ON t1.REQUESTID = t2.REQUESTID \n" + + "WHERE t1.REQUESTID = ?"; + rs.executeQuery(sql, rid); + String mid = ""; + if (rs.next()) { + String person = Util.null2String(rs.getString("NGR")); + String dept = Util.null2String(rs.getString("SZBM")); + String requestMark = Util.null2String(rs.getString("LCBH")); + String title = Util.null2String(rs.getString("REQUESTNAME")); + String entryDate = Util.null2String(rs.getString("RZRQ")); + mid = Util.null2String(rs.getString("ID")); + + accountDto.setElectronicBill(""); + accountDto.setType(lb); //总部付款费用核算 + accountDto.setBz2("0"); + accountDto.setNgrDept(dc.getDepartmentmark(dept)); + accountDto.setNgrDeptCode(dc.getDepartmentCode(dept)); + accountDto.setNgrName(rc.getWorkcode(person)); + accountDto.setRequestMark(requestMark); + accountDto.setRequestId(requestMark); //djid传流程编码,流程id总部不需要 + accountDto.setAttachmentNum(""); + accountDto.setLocationName(""); + accountDto.setTitle(title); + accountDto.setCurrency("RMB"); + accountDto.setCreateDate(entryDate); + accountDto.setReimbursementWay(""); + accountDto.setPayOrderNo(requestMark); //总部付款付款单号直接传流程编码 + } + + sql = "SELECT SFRHJZ,FYCDR,FYCDBM,JE,SFCYS,JDFX,YSKM,HJKM FROM " + tablename + "_DT2 WHERE MAINID = ?"; + rs.executeQuery(sql, mid); + List kjs = new ArrayList<>(); + List pays = new ArrayList<>(); + while (rs.next()) { + String entryKj = Util.null2String(rs.getString("SFRHJZ")); + String debtPerson = Util.null2String(rs.getString("FYCDR")); + String debtDept = Util.null2String(rs.getString("FYCDBM")); + String amount = Util.null2String(rs.getString("JE")); + String overBudget = Util.null2String(rs.getString("SFCYS")); + String doc = Util.null2String(rs.getString("JDFX")); //计帐方向 + String budgetItem = nvl(Util.null2String(rs.getString("YSKM"))); + String accountItem = nvl(Util.null2String(rs.getString("HJKM"))); + //入会计帐为是才写记录 + if ("1".equals(entryKj)) { + KjDetail kj = new KjDetail(); + BudgetData budgetData = new BudgetData(); + budgetData.setRelationCode(accountItem); + budgetData.setItemCode(budgetItem); + budgetData.setItemName(getYsName(budgetItem, "1")); + SubjectData subjectData = new SubjectData(); + subjectData.setItemCode(accountItem); + subjectData.setItemName(getKjName(accountItem, "1")); + kj.setBudgetData(budgetData); //预算科目 + kj.setSubjectData(subjectData); //会计科目 + kj.setExpenseDeptCode(dc.getDepartmentCode(debtDept)); + kj.setExpenseDept(dc.getDepartmentmark(debtDept)); + kj.setExpenseBadge(""); + kj.setExpensePerson(rc.getLastname(debtPerson)); + kj.setPriceRMB(amount); + kj.setMoney(amount); + kj.setProjectCode(""); + kj.setProject(""); + kj.setReason(doc); // 0:借 1:贷 对应saveFj 1:借 2:贷 (财务调整不使用reason作为关键字段,设置为借贷方做业务判断) + kjs.add(kj); + + } + } + accountDto.setKjDetails(kjs); + accountDto.setPayDetails(pays); + } catch (Exception e) { + rs.writeLog("catch exception:" + e.getMessage()); + } + return accountDto; + } + + /** + * 获取财务调整核预算数据 + * + * @param status 预算状态, 3预占,1实占 + * @return budgetDTO + */ + public static BudgetDTO getAdjustBudget(String rid, String status) throws Exception { + RecordSet rs = new RecordSet(); + rs.writeLog("获取财务调整核预算数据 requestid:" + rid + "; status:" + status); + BudgetDTO budgetDTO = new BudgetDTO(); + String tbNameByRid = PayUtil.getTbNameByRid(rid); + String mid = ""; + try { + ResourceComInfo rc = new ResourceComInfo(); + String sql = String.format("SELECT t1.ID,t1.REQUESTID,t1.LCBH,t1.NGR,t1.RZRQ,t2.REQUESTNAME,t2.REQUESTMARK FROM %s t1\n" + + "LEFT JOIN WORKFLOW_REQUESTBASE t2\n" + + "ON t1.REQUESTID = t2.REQUESTID \n" + + "WHERE t1.REQUESTID = ?", tbNameByRid); + rs.executeQuery(sql, rid); + if (rs.next()) { + budgetDTO.setBillNum(Util.null2String(rs.getString("REQUESTID"))); + budgetDTO.setBizDate(Util.null2String(rs.getString("RZRQ"))); + budgetDTO.setBillStatus(status); + budgetDTO.setBillName(Util.null2String(rs.getString("LCBH"))); + budgetDTO.setBillTitle(Util.null2String(rs.getString("REQUESTNAME"))); + budgetDTO.setPesonName(rc.getLastname(rs.getString("NGR"))); + mid = Util.null2String(rs.getString("ID")); //明细外键 + } + } catch (Exception e) { + rs.writeLog("获取财务调整预算主表数据 catch exception:" + e.getMessage()); + return null; + } + + try { + DepartmentComInfo dc = new DepartmentComInfo(); + List budgetItems = new ArrayList<>(); + String sql = String.format("SELECT SFRHJZ,FYCDR,FYCDBM,JE,SFCYS,JDFX,YSKM,HJKM FROM %s WHERE MAINID = ?", tbNameByRid + "_DT2"); + rs.executeQuery(sql, mid); + String uuid = UUID.randomUUID().toString(); + int i = 1; + while (rs.next()) { + String debtDept = Util.null2String(rs.getString("FYCDBM")); + String amount = Util.null2String(rs.getString("JE")); + String budgetCode = Util.null2String(rs.getString("YSKM")); + String superBudgetCodeLh = ""; + if (budgetDTO.getBillName().contains("联合")) { + superBudgetCodeLh = PayUtil.getSuperBudgetCode(nvl(budgetCode)); + } else { + superBudgetCodeLh = PayUtil.getSuperBudgetCodeLh(nvl(budgetCode)); + } + BudgetList budgetList = new BudgetList(); + budgetList.setAmount(amount); + budgetList.setNoTaxAmount(amount); + budgetList.setTaxAmount("0.00"); + budgetList.setBgElement("0101"); + budgetList.setBillEntryID(uuid + "#" + i); + budgetList.setDeptNum(dc.getDepartmentCode(debtDept)); + budgetList.setItemEntryNum(nvl(budgetCode)); + budgetList.setBgItem(superBudgetCodeLh); + budgetList.setBgITElement(superBudgetCodeLh); + budgetItems.add(budgetList); + i++; + } + budgetDTO.setList(budgetItems); + return budgetDTO; + } catch (Exception e) { + rs.writeLog("获取财务调整明细表数据 catch exception:" + e.getMessage()); + return null; + } + } + + /** + * get project browser by code + */ + public static Map getProjectBrowserByCode(String userCode, String projectCode) { + Map res = new HashMap<>(); + HTUtil htUtil = new HTUtil(); + Map info = htUtil.getProjectInfoByCode(userCode, projectCode); + if (info.containsKey("id")) { + res.put("value", Util.null2String(info.get("id"))); + res.put("name", Util.null2String(info.get("name"))); + } else { + res.put("value", ""); + res.put("name", ""); + } + return res; + } + + /** + * get dept id by dept code + */ + public static Map getDidByCode(String deptCode) throws Exception { + RecordSet rs = new RecordSet(); + Map res = new HashMap<>(); + rs.executeQuery("SELECT h.ID,h.DEPARTMENTMARK FROM HRMDEPARTMENT h WHERE h.DEPARTMENTCODE = ?", deptCode); + if (rs.next()) { + res.put("value", Util.null2String(rs.getString("ID"))); + res.put("name", Util.null2String(rs.getString("DEPARTMENTMARK"))); + return res; + } else { + throw new IllegalArgumentException("deptCode not exist, deptCode: " + deptCode); + } + } + + + /** + * get employee id by work code + */ + public static Map getUidByWc(String wc) throws Exception { + RecordSet rs = new RecordSet(); + Map res = new HashMap<>(); + rs.executeQuery("SELECT h.ID,h.LASTNAME FROM HRMRESOURCE h WHERE h.WORKCODE =?", wc); + if (rs.next()) { + res.put("value", Util.null2String(rs.getString("ID"))); + res.put("name", Util.null2String(rs.getString("LASTNAME"))); + return res; + } else { + throw new IllegalArgumentException("workcode not exist, workcode: " + wc); + } + } + + /** + * get budget jsonObject by code and type + * + * @param budgetCode 预算code + * @param type 0:总部 1:联合 + */ + public static Map getBudgetObj(String budgetCode, String type) throws Exception { + Assert.notBlank(budgetCode, "budgetCode can not be empty"); + RecordSet rs = new RecordSet(); + Map res = new HashMap<>(); + String budgetTable = ""; + if ("0".equals(type)) { + budgetTable = ZB_YSB; + } else if ("1".equals(type)) { + budgetTable = LH_YSB; + } else { + throw new IllegalArgumentException("type not match: 0:总部 1:联合"); + } + rs.writeLog(String.format("get budget specialObj ,budgetCode: %s; zb or lh: %s; budgetTable: %s", + budgetCode, type, budgetTable)); + rs.executeQuery(String.format("SELECT YSKMMC FROM %s WHERE YSKMBM = ? ", budgetTable), budgetCode); + if (rs.next()) { + res.put("value", budgetCode); + res.put("name", Util.null2String(rs.getString("YSKMMC"))); + return res; + } else { + throw new Exception("budget code " + budgetCode + " not exist"); + } + } + + /** + * get account jsonObject by code and type + */ + public static Map getAccountObj(String accountCode, String type) throws Exception { + Assert.notBlank(accountCode, "accountCode can not be empty"); + RecordSet rs = new RecordSet(); + Map res = new HashMap<>(); + String accountTable = ""; + if ("0".equals(type)) { + accountTable = ZB_KJB; + } else if ("1".equals(type)) { + accountTable = LH_KJB; + } else { + throw new IllegalArgumentException("type not match: 0:总部 1:联合"); + } + rs.writeLog(String.format("get account specialObj ,accountCode: %s; zb or lh: %s; accountTable: %s", + accountCode, type, accountTable)); + rs.executeQuery(String.format("SELECT HJKMMC FROM %s WHERE HJKMBM = ? ", accountTable), accountCode); + if (rs.next()) { + res.put("value", accountCode); + res.put("name", Util.null2String(rs.getString("HJKMMC"))); + return res; + } else { + throw new Exception("account code " + accountCode + " not exist"); + } + + } + + /** + * 科目截断 + * + * @return 预算科目或会计科目 + */ + private static String nvl(String codeWithLine) { + if (codeWithLine.contains("_")) { + return codeWithLine.split("_")[1]; + } + return ""; + } + + /** + * 获取预算名称 + * + * @param ysCode 预算code + * @param lhOrZb 1代表联合 + * @return 名称 + */ + public static String getYsName(String ysCode, String lhOrZb) { + RecordSet rs = new RecordSet(); + String tableName = ZB_YSB; + if ("1".equals(lhOrZb)) { + tableName = LH_YSB; + } + rs.executeQuery("SELECT YSKMMC FROM " + tableName + " WHERE YSKMBM = ?", ysCode); + if (rs.next()) { + return Util.null2String(rs.getString("YSKMMC")); + } else { + return ""; + } + } + + public static String getKjName(String ysCode, String lhOrZb) { + RecordSet rs = new RecordSet(); + String tableName = ZB_KJB; + if ("1".equals(lhOrZb)) { + tableName = LH_KJB; + } + rs.executeQuery("SELECT HJKMMC FROM " + tableName + " WHERE HJKMBM = ?", ysCode); + if (rs.next()) { + return Util.null2String(rs.getString("HJKMMC")); + } else { + return ""; + } + } + +} diff --git a/src/main/java/com/engine/htsc/payment/pojo/AutoRequestParam.java b/src/main/java/com/engine/htsc/payment/pojo/AutoRequestParam.java new file mode 100644 index 0000000..05779e2 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/AutoRequestParam.java @@ -0,0 +1,135 @@ +package com.engine.htsc.payment.pojo; + + +import org.apache.commons.lang3.StringUtils; + +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +public class AutoRequestParam { + private String relateStaffRid; + private String creatorUid; + private String workflowId; + private String requestName; + private String isNextFlow; + Map main; + List> dt5; + List> dt6; + List> dt7; + List> dt8; + List> dt13; + + 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> getDt5() { + return dt5; + } + + public void setDt5(List> dt5) { + this.dt5 = dt5; + } + + public List> getDt6() { + return dt6; + } + + public void setDt6(List> dt6) { + this.dt6 = dt6; + } + + public List> getDt7() { + return dt7; + } + + public void setDt7(List> dt7) { + this.dt7 = dt7; + } + + public List> getDt8() { + return dt8; + } + + public void setDt8(List> dt8) { + this.dt8 = dt8; + } + + public List> getDt13() { + return dt13; + } + + public void setDt13(List> dt13) { + this.dt13 = dt13; + } + + @Override + public String toString() { + return "AutoRequestParam{" + + "relateStaffRid='" + relateStaffRid + '\'' + + ", creatorUid='" + creatorUid + '\'' + + ", workflowId='" + workflowId + '\'' + + ", requestName='" + requestName + '\'' + + ", isNextFlow='" + isNextFlow + '\'' + + ", main=" + main + + ", dt5=" + dt5 + + ", dt6=" + dt6 + + ", dt7=" + dt7 + + ", dt8=" + dt8 + + ", dt13=" + dt13 + + '}'; + } + + /** + * 任一为空返回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/BankFormation.java b/src/main/java/com/engine/htsc/payment/pojo/BankFormation.java new file mode 100644 index 0000000..e9df1b8 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/pojo/BankFormation.java @@ -0,0 +1,51 @@ +package com.engine.htsc.payment.pojo; + +import java.util.List; + +public class BankFormation { + private String oaPayUrl; + private String bankName; + private String bankAccount; + private String bankFirm; + private List opParty; + + public String getOaPayUrl() { + return oaPayUrl; + } + + public void setOaPayUrl(String oaPayUrl) { + this.oaPayUrl = oaPayUrl; + } + + 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 getBankFirm() { + return bankFirm; + } + + public void setBankFirm(String bankFirm) { + this.bankFirm = bankFirm; + } + + public List getOpParty() { + return opParty; + } + + public void setOpParty(List opParty) { + this.opParty = opParty; + } +} diff --git a/src/main/java/com/engine/htsc/payment/util/AssertUtil.java b/src/main/java/com/engine/htsc/payment/util/AssertUtil.java new file mode 100644 index 0000000..170bd58 --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/util/AssertUtil.java @@ -0,0 +1,52 @@ +package com.engine.htsc.payment.util; + + +import java.util.List; +import java.util.Map; + +public final class AssertUtil { + + /** + * 判断对象为空 + * @param obj 对象名 + */ + @SuppressWarnings("rawtypes") + public static boolean isEmpty(Object obj) { + if (obj == null) { + return true; + } + if ((obj instanceof String)) { + return ((String) obj).trim().equals(""); + } + if ((obj instanceof List)) { + return ((List) obj).isEmpty(); + } + if ((obj instanceof Map)) { + return ((Map) obj).isEmpty(); + } + return false; + } + + /** + * 判断对象为空 + * @param obj 对象名 + */ + public static boolean isNotEmpty(Object obj) { + return !isEmpty(obj); + } + + /** + * 判断对象为空 + * @param obj 对象名 + */ + public static void isEmpty(Object obj, String msg) { + isTrue(isEmpty(obj), msg); + } + + public static void isTrue(Boolean flag, String msg) { + if (flag) { + throw new IllegalArgumentException(msg); + } + } + +} diff --git a/src/main/java/com/engine/htsc/payment/util/BizUtils.java b/src/main/java/com/engine/htsc/payment/util/BizUtils.java new file mode 100644 index 0000000..5c7616c --- /dev/null +++ b/src/main/java/com/engine/htsc/payment/util/BizUtils.java @@ -0,0 +1,920 @@ +package com.engine.htsc.payment.util; + +import cn.hutool.core.lang.Assert; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.api.htsc.businessMethod.SubUnionBizUtil; +import com.engine.htsc.payment.dao.PaymentDao; +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.impl.*; +import com.engine.htsc.trip.util.WeaverUtil; +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 weaver.interfaces.htsc.comInfo.PropBean; +import weaver.interfaces.htsc.cus.HTUtil; + +import java.io.UnsupportedEncodingException; +import java.nio.charset.Charset; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * author:k1810012 + * desc: + */ +public class BizUtils { + + /** + * 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 void cancelInvLink(String requestId) throws Exception { + RecordSet rs = new RecordSet(); + String tableName = getTableNameByRequestId(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); + } + } + } + + /** + * 更新员工慰问流程建模页面的付款状态 + * + * @param rid requestId,逗号分隔,员工慰问流程rid + * @param payCode 付款状态 fkzt, 0退回; 1,提交; 2,出纳付款完成 + */ + public static void updateStaffCodStatus(String rid, String payCode) throws Exception { + Assert.notBlank(rid, "更新的流程id不能为空"); + Assert.notBlank(payCode, "更新的流程状态不能为空"); + Assert.isTrue("0,1,2".contains(payCode), "更新的流程状态不合法," + payCode); + String replace = rid.replace(",", "','"); + RecordSet rs = new RecordSet(); + rs.writeLog(String.format("updateStaffCodStatus, reqeustId: %s; fkzt: %s", replace, payCode)); + String sql = "update UF_WWSQHZ set FKZT=? where REQUID in ('" + replace + "')"; + rs.executeUpdate(sql, payCode); + } + + /** + * sql查询代码标准化 + */ + public static Map select2Map(String sql) { + RecordSet rs = new RecordSet(); + rs.executeQuery(sql); + String[] columnName = rs.getColumnName(); + Map maps = new HashMap<>(); + if (rs.next()) { + for (String col : columnName) { + maps.put(col.toLowerCase(), Util.null2String(rs.getString(col))); + } + } + return maps; + } + + public String getUtf8String(String str) { + if (str != null && str.length() > 0) { + String needEncodeCode = "ISO-8859-1"; + try { + if (Charset.forName(needEncodeCode).newEncoder().canEncode(str)) { + str = new String(str.getBytes(needEncodeCode), "UTF-8"); + } + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + return str; + } + + /** + * 根据付款类型获取预算command + * + * @param lb 流程类别 + * @return BudgetCommand + */ + public static BudgetCommand getBudgetCommentByLb(String lb) throws Exception { + + if ("0".equals(lb) || "2".equals(lb) || "1".equals(lb) || "3".equals(lb)) { + return new HeadPaymentBudgetCommand(); + } else if ("9".equals(lb)) { + return new HeadBxBudgetCommand(); + } else if ("10".equals(lb)) { + return new HeadClBxBudgetCommand(); + } else if ("4".equals(lb)) { + return new SettlePaymentCommand(); + }else { + new BaseBean().writeLog("lb为空"); + throw new Exception("建模付款类型没有维护"); + } + } + + /** + * saveLog {@link WbLog} + * + * @param wbLog 日志表记录 + */ + public static void saveLog(WbLog wbLog) throws Exception { + RecordSet rs = new RecordSet(); + try { + rs.executeUpdate("insert into UF_WBLOG (REQUESTNO, OPERATOR, RESULT, TIME, URL, METHOD, REQUEST, RESPONSE, IP)\n" + + "values (?,?,?,?,?,?,?,?,?)", wbLog.toList()); + } catch (Exception e) { + throw new Exception("更新日志表失败:" + e.getMessage()); + } + } + + /** + * 更新预算记录表 + * + * @param requestNo 流程id + * @param billStatus 当前状态 + * @param budgetParam 请求参数 + * @param itFlag 标志为it流程 0或者空 不是it流程; 1 是it流程 + * @throws Exception sql异常 + */ + public void refreshBudgetRecord(String requestNo, String billStatus, String budgetParam, String itFlag) throws Exception { + RecordSet rs = new RecordSet(); + rs.executeQuery("select count(*) n from UF_YSJLB where itflag=? and LCID=?", itFlag, requestNo); + String n = "0"; + if (rs.next()) { + n = rs.getString("n"); + } + if ("0".equals(n)) { + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + List listToSave = new ArrayList<>(); + listToSave.add(requestNo); + listToSave.add(budgetParam); + listToSave.add(billStatus); + listToSave.add(df.format(LocalDateTime.now())); + listToSave.add(itFlag); + String sql = "INSERT INTO UF_YSJLB (LCID,YSQQCS,DQYSZT,DQSJ,ITFLAG) VALUES (?,?,?,?,?)"; + rs.executeUpdate(sql, listToSave); + } else { + List listToUpdate = new ArrayList<>(); + listToUpdate.add(budgetParam); + listToUpdate.add(billStatus); + listToUpdate.add(requestNo); + listToUpdate.add(itFlag); + String sql = "UPDATE UF_YSJLB SET YSQQCS = ?,DQYSZT=? WHERE LCID=? and ITFLAG=?"; + rs.executeUpdate(sql, listToUpdate); + } + + } + + public Map convertDtoToMap(T t) { + Map dataMap = new HashMap<>(); + String jsonText = JSON.toJSONString(t); + dataMap.put("data", jsonText); + return dataMap; + } + + public boolean updateBudgetMidTable(String requestNo, String billStatus) throws Exception { + RecordSet rs = new RecordSet(); + try { + String tableName = getTableNameByRequestId(requestNo); + String sql = "select FKXX,LCBH,FKLX from " + tableName + " where REQUESTID=" + requestNo; + rs.executeQuery(sql); + String bz = "0"; + String lx = ""; + String title = ""; + if (rs.next()) { + bz = rs.getString("FKXX"); + lx = rs.getString("FKLX"); + title = rs.getString("LCBH"); + } + String yskmTable = ""; + if (!"1".equals(bz)) { + yskmTable = tableName + "_DT8"; + } else { + yskmTable = tableName + "_DT9"; + } + boolean isItFlag = false; + if ("1".equals(lx)) { + isItFlag = true; + } + BudgetService bds = new BudgetServiceImpl(); + return bds.doBudgetMiddleTable(title, billStatus,null, yskmTable, tableName, isItFlag); + } catch (Exception e) { + rs.writeLog("\n 更新预算中间表出现异常 \n"); + rs.writeLog("catch: " + e.getMessage()); + e.printStackTrace(); + return false; + } + } + + public String getTableNameByRequestId(String requestId) { + RecordSet rs = new RecordSet(); + rs.execute("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 = " + + requestId); + String table = ""; + if (rs.next()) { + table = Util.null2String(rs.getString("tablename")); + } + return table; + } + + public void log(String message) { + BaseBean log = new BaseBean(); + String methodName = Thread.currentThread().getStackTrace()[1].getMethodName(); + int lineNumber = Thread.currentThread().getStackTrace()[1].getLineNumber(); + String logFormat = "\n" + + "%s@[%d] >>>\n" + + "%s"; + log.writeLog(String.format(logFormat, methodName, lineNumber, message)); + } + + /** + * 生成付款核算接口 + * + * @param rid 流程id + * @param lb 核算参数字段 lb + * @return 核算参数 + */ + public CostAccountDto generateCommonPayData(String rid, String lb) throws Exception { + RecordSet rs = new RecordSet(); + try { + DepartmentComInfo dc = new DepartmentComInfo(); + ResourceComInfo rc = new ResourceComInfo(); + PaymentDao pd = new PaymentDao(); + String workFlowTableName = getTableNameByRequestId(rid); + + String baseInfo = "SELECT t1.SFQDZ,t1.ywht,t1.fklx,t1.NGR,t1.SZBM,t1.LCBH,t1.REQUESTID,t1.DJZS,t1.LCBT,t1.NGSJ,t2.REQUESTNAME,t2.REQUESTID\n" + + "FROM " + workFlowTableName + " t1\n" + + "LEFT OUTER JOIN WORKFLOW_REQUESTBASE t2 on t1.REQUESTID=t2.REQUESTID\n" + + "WHERE t1.REQUESTID=?"; + rs.executeQuery(baseInfo, rid); + CostAccountDto costAccountDto = new CostAccountDto(); + if (rs.next()) { + String ngr = Util.null2String(rs.getString("NGR")); + String bm = Util.null2String(rs.getString("SZBM")); //部门 + String requestMark = Util.null2String(rs.getString("LCBH")); + String fjzs = Util.null2String(rs.getString("DJZS")); //附件张数 + String 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")); //有无合同 + + costAccountDto.setElectronicBill(SFQDZ); + costAccountDto.setType(lb); //总部付款费用核算 + costAccountDto.setBz2("0"); + 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); //总部付款付款单号直接传流程编码 + } + + //获取支付明细(dt11) + String getPayInfoFromDt11 = pd.getPayInfoFromDt11(workFlowTableName, rid); + 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); + } + costAccountDto.setPayDetails(payDetailList); + + //获取预算明细 + String subjectInfoFromDt8AndDt12 = pd.getSubjectInfoFromDt8AndDt12(workFlowTableName, rid); + 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")); + String dyysmc = Util.null2String(rs.getString("YSKMMC")); + 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(zhrmb); + kjDetail.setMoney(zhrmb); + kjDetail.setProjectCode(""); + kjDetail.setProject(""); + kjDetail.setReason(sy); + kjDetailList.add(kjDetail); + } + costAccountDto.setKjDetails(kjDetailList); + //HTO-11640查询主表,当付款流程中字段“先付款后发票”选项为“是”时,接口字段“SFYFP”传值“Y”, + // “先付款后发票”选项为“否”时,接口字段“SFYFP”传值“N”; + //针对托收业务通用付款,资管通用付款,紫金通用付款,子公司通用付款 + if(SubUnionBizUtil.equalsTableName(rid, "fyft")|| SubUnionBizUtil.equalsTableName(rid, "zgtyfk") + ||SubUnionBizUtil.equalsTableName(rid, "zjtyfk") ||SubUnionBizUtil.equalsTableName(rid, "zgstyfk")){ + RecordSet sqlFindYfp = new RecordSet(); + String sqlNew = "select sfxfkhtgfp from "+workFlowTableName+" where requestid = "+rid; + 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"); + } + } + } + return costAccountDto; + } catch (Exception e) { + rs.writeLog("error," + e.getMessage()); + throw new Exception("生成核算数据错误,requestId:" + rid); + } + } + + /** + * 生成报销核算接口参数 + * + * @param requestid 流程id + * @param wftype lb 调用核算的类型 {@link com.engine.htsc.payment.enums.HsType} + * @return CostAccountDto + * @author wan + */ + public CostAccountDto generateCommonReimbData(String requestid, String wftype) { + CostAccountDto costAccDto = new CostAccountDto(); + RecordSet rs = new RecordSet(); + String tablename = getTableNameByRequestId(requestid); + rs.executeQuery(" select SFQDZ,id,ngr,szbm,lcbh,djzs,ngsj 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("ngsj")) + ":00"; + String sfqdz = Util.null2String(rs.getString("SFQDZ")); + + 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.setElectronicBill(sfqdz); + 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 kjdtList = new ArrayList(); + String dt12Sql = " select fysjcdbm,fysjcdr,hjkm,yskm,yskmmc,zhrmb,SY from " + tablename + "_dt12 where mainid=? "; + rs.executeQuery(dt12Sql, new Object[]{id}); + while (rs.next()) { + String fysjcdbm = Util.null2String(rs.getString("fysjcdbm")); + String fysjcdr = Util.null2String(rs.getString("fysjcdr")); + String hjkm = Util.null2String(rs.getString("hjkm")); + String yskm = Util.null2String(rs.getString("yskm")); + String yskmmc = Util.null2String(rs.getString("yskmmc")); + String zhrmb = Util.null2String(rs.getString("zhrmb")); + String sy = Util.null2String(rs.getString("SY")); + + String fysjcdbmbm = deptComInfo.getDepartmentCode(fysjcdbm); + String fysjcdbmmc = deptComInfo.getDepartmentName(fysjcdbm); + String fysjcdrbh = resourceComInfo.getWorkcode(fysjcdr); + String fysjcdrmc = resourceComInfo.getLastname(fysjcdr); + + KjDetail kjitem = new KjDetail(); + kjitem.setExpenseDeptCode(fysjcdbmbm); + kjitem.setExpenseDept(fysjcdbmmc); + kjitem.setExpenseBadge(fysjcdrbh); + kjitem.setExpensePerson(fysjcdrmc); + + SubjectData subject = new SubjectData(); + subject.setItemCode(hjkm); + subject.setItemName(getKjkmmc(hjkm)); + kjitem.setSubjectData(subject); + + BudgetData budget = new BudgetData(); + budget.setRelationCode(hjkm); + budget.setItemCode(yskm); + budget.setItemName(yskmmc); + kjitem.setBudgetData(budget); + + kjitem.setPriceRMB(zhrmb); + kjitem.setMoney(zhrmb); + kjitem.setProjectCode(""); + kjitem.setProject(""); + kjitem.setReason(sy); + + kjdtList.add(kjitem); + } + costAccDto.setKjDetails(kjdtList); + + List zfdtList = new ArrayList(); + String dt11Sql = " select yxzfje,xjzfje,khxmc,yxzh,bm,ygxm 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("khxmc")); + String yxzh = Util.null2String(rs.getString("yxzh")); + String bm = Util.null2String(rs.getString("bm")); + String ygxm = Util.null2String(rs.getString("ygxm")); + + String bmmc = deptComInfo.getDepartmentName(bm); + String ygxmmc = resourceComInfo.getLastname(ygxm); + String ygxmwk = resourceComInfo.getWorkcode(ygxm); + + PayDetail payitem = new PayDetail(); + payitem.setPayByBank(yxzfje); + payitem.setPayByCash(xjzfje); + payitem.setBankName(khxmc); + payitem.setBankAccount(yxzh); + payitem.setEmployeeDept(bmmc); + payitem.setEmployeeName(ygxmmc); + payitem.setEmployeeBadge(ygxmwk); + + zfdtList.add(payitem); + + } + costAccDto.setPayDetails(zfdtList); + + + } catch (Exception e) { + e.printStackTrace(); + } + + + } + + return costAccDto; + } + + + /** + * 生成紫金核算参数 + * + * @param requestid 流程id + * @param wftype lb 调用核算的类型 + * @return CostAccountDto + * @author wan + */ + public CostAccountDto ZjCommonReimbData(String requestid, String wftype) { + CostAccountDto costAccDto = new CostAccountDto(); + RecordSet rs = new RecordSet(); + String tablename = getTableNameByRequestId(requestid); + rs.executeQuery(" select id,ngr,szbm,lcbh,djzs,ngsj 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("ngsj")) + ":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 kjdtList = new ArrayList(); + String dt12Sql = " select fysjcdbm,fysjcdr,hjkm,yskm,yskmmc,zhrmb,SY from " + tablename + "_dt12 where mainid=? "; + rs.executeQuery(dt12Sql, new Object[]{id}); + while (rs.next()) { + // String fysjcdbm = Util.null2String(rs.getString("fysjcdbm")); + String fysjcdr = Util.null2String(rs.getString("fysjcdr")); + String hjkm = Util.null2String(rs.getString("hjkm")); + String yskm = Util.null2String(rs.getString("yskm")); + String yskmmc = Util.null2String(rs.getString("yskmmc")); + String zhrmb = Util.null2String(rs.getString("zhrmb")); + String sy = Util.null2String(rs.getString("SY")); + String fysjcdbmmc =""; + String fysjcdrbh = ""; + String fysjcdrmc = ""; + + String fysjcdbmbm = Util.null2String(rs.getString("fysjcdbm")); + Map map=getzjdeptname(fysjcdbmbm); + if(map.size()>0){ + fysjcdbmmc=Util.null2String(map.get("bmmc")); + fysjcdrbh=Util.null2String(map.get("bmfzrid")); + fysjcdrmc=Util.null2String(map.get("bmfzr")); + } + + + KjDetail kjitem = new KjDetail(); + kjitem.setExpenseDeptCode(fysjcdbmbm); + kjitem.setExpenseDept(fysjcdbmmc); + kjitem.setExpenseBadge(fysjcdrbh); + kjitem.setExpensePerson(fysjcdrmc); + + SubjectData subject = new SubjectData(); + subject.setItemCode(hjkm); + subject.setItemName(getKjkmmc(hjkm)); + kjitem.setSubjectData(subject); + + BudgetData budget = new BudgetData(); + budget.setRelationCode(hjkm); + budget.setItemCode(yskm); + budget.setItemName(yskmmc); + kjitem.setBudgetData(budget); + + kjitem.setPriceRMB(zhrmb); + kjitem.setMoney(zhrmb); + kjitem.setProjectCode(""); + kjitem.setProject(""); + kjitem.setReason(sy); + + kjdtList.add(kjitem); + } + costAccDto.setKjDetails(kjdtList); + + List zfdtList = new ArrayList(); + String dt11Sql = " select yxzfje,xjzfje,khxmc,yxzh,bm,ygxm 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("khxmc")); + String yxzh = Util.null2String(rs.getString("yxzh")); + String bm = Util.null2String(rs.getString("bm")); + String ygxm = Util.null2String(rs.getString("ygxm")); + + String bmmc = deptComInfo.getDepartmentName(bm); + String ygxmmc = resourceComInfo.getLastname(ygxm); + String ygxmwk = resourceComInfo.getWorkcode(ygxm); + + PayDetail payitem = new PayDetail(); + payitem.setPayByBank(yxzfje); + payitem.setPayByCash(xjzfje); + payitem.setBankName(khxmc); + payitem.setBankAccount(yxzh); + payitem.setEmployeeDept(bmmc); + payitem.setEmployeeName(ygxmmc); + payitem.setEmployeeBadge(ygxmwk); + + zfdtList.add(payitem); + + } + costAccDto.setPayDetails(zfdtList); + + + } catch (Exception e) { + e.printStackTrace(); + } + } + return costAccDto; + } + public Map getzjdeptname(String value){ + Map map=new HashMap(); + if("".equals(value)){ + return map; + } + + RecordSet rs=new RecordSet(); + String sql=" select BMBH,BMMC,BMFZR,BMFZRID from uf_zjbmb where bmbh=?"; + rs.executeQuery(sql, new Object[]{value}); + if(rs.getCounts()<=0){ + return map; + } + if(rs.next()){ + map.put("bmbh",Util.null2String(rs.getString("BMMC"))); + map.put("bmmc",Util.null2String(rs.getString("BMMC"))); + map.put("bmfzr",Util.null2String(rs.getString("BMFZR"))); + map.put("bmfzrid",Util.null2String(rs.getString("BMFZRID"))); + } + return map; + } + + /** + * 生成差旅核算参数 + * + * @param requestid 流程id + * @param wftype lb 调用核算的类型 + * @return CostAccountDto + * @author wan + */ + public CostAccountDto generateTravelReimbData(String requestid, String wftype) { + CostAccountDto costAccDto = new CostAccountDto(); + RecordSet rs = new RecordSet(); + PropBean pb = new PropBean(); + String tablename = getTableNameByRequestId(requestid); + rs.executeQuery(" select SFQDZ,id,ngr,szbm,lcbh,djzs,ngsj 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("ngsj")) + ":00"; + String sfqdz = Util.null2String(rs.getString("SFQDZ")); + + 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.setElectronicBill(sfqdz); + 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 kjdtList = new ArrayList(); + String dt12Sql = " select fycdbm,fycdr,hjkm,zhrmb from " + tablename + "_dt11 where mainid=? "; + rs.executeQuery(dt12Sql, new Object[]{id}); + while (rs.next()) { + String fycdbm = Util.null2String(rs.getString("fycdbm")); + String fycdr = Util.null2String(rs.getString("fycdr")); + String hjkm = Util.null2String(rs.getString("hjkm")); + if (!"".equals(hjkm)) { + hjkm = hjkm.split("_")[1]; + } + String zhrmb = Util.null2String(rs.getString("zhrmb")); + + String fysjcdbmbm = deptComInfo.getDepartmentCode(fycdbm); + String fysjcdbmmc = deptComInfo.getDepartmentName(fycdbm); + String fysjcdrbh = resourceComInfo.getWorkcode(fycdr); + String fysjcdrmc = resourceComInfo.getLastname(fycdr); + + KjDetail kjitem = new KjDetail(); + kjitem.setExpenseDeptCode(fysjcdbmbm); + kjitem.setExpenseDept(fysjcdbmmc); + kjitem.setExpenseBadge(fysjcdrbh); + kjitem.setExpensePerson(fysjcdrmc); + + SubjectData subject = new SubjectData(); + subject.setItemCode(hjkm); + subject.setItemName(getKjkmmc(hjkm)); + kjitem.setSubjectData(subject); + + BudgetData budget = new BudgetData(); + budget.setRelationCode(hjkm); + String yskmbm = pb.getPropName(hjkm); + budget.setItemCode(yskmbm); + budget.setItemName(getYskmmc(yskmbm)); + kjitem.setBudgetData(budget); + + kjitem.setPriceRMB(zhrmb); + kjitem.setMoney(zhrmb); + kjitem.setProjectCode(""); + kjitem.setProject(""); + kjitem.setReason(""); + + kjdtList.add(kjitem); + } + costAccDto.setKjDetails(kjdtList); + + List zfdtList = new ArrayList(); + String dt11Sql = " select yxzfje,xjzfje,khx,yxzh,bm,bxr from " + tablename + "_dt10 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 bm = Util.null2String(rs.getString("bm")); + String ygxm = Util.null2String(rs.getString("bxr")); + + String bmmc = deptComInfo.getDepartmentName(bm); + String ygxmmc = resourceComInfo.getLastname(ygxm); + String ygxmwk = resourceComInfo.getWorkcode(ygxm); + + PayDetail payitem = new PayDetail(); + payitem.setPayByBank(yxzfje); + payitem.setPayByCash(xjzfje); + payitem.setBankName(khxmc); + payitem.setBankAccount(yxzh); + payitem.setEmployeeDept(bmmc); + payitem.setEmployeeName(ygxmmc); + payitem.setEmployeeBadge(ygxmwk); + + zfdtList.add(payitem); + + } + costAccDto.setPayDetails(zfdtList); + + + } catch (Exception e) { + e.printStackTrace(); + } + + } + + return costAccDto; + } + + /** + * 根据会计科目编码查询会计科目名称 + * + * @param kjkmbm + * @return + */ + public String getKjkmmc(String kjkmbm) { + String kjkmmc = ""; + RecordSet rs = new RecordSet(); + rs.executeQuery(" select hjkmmc from uf_kjkmpz where hjkmbm=? ", new Object[]{kjkmbm}); + if (rs.next()) { + kjkmmc = Util.null2String(rs.getString("hjkmmc")); + } + return kjkmmc; + } + + /** + * 根据预算科目编码查询预算科目名称 + * + * @param yskmbm + * @return + */ + public String getYskmmc(String yskmbm) { + String yskmmc = ""; + RecordSet rs = new RecordSet(); + rs.executeQuery(" select yskmmc from uf_kmpz where yskmbm=? ", new Object[]{yskmbm}); + if (rs.next()) { + yskmmc = Util.null2String(rs.getString("yskmmc")); + } + return yskmmc; + } + + /** + * 查询是否为it或付款 + * + * @param requestId 流程id + * @return true : 通用付款 + * false: it付款 + */ + public static boolean whetherItOrTy(String requestId) throws Exception { + RecordSet rs = new RecordSet(); + String tableName = WeaverUtil.getTableNameByRequestId(requestId, rs); + rs.executeQuery("select sfitfy from " + tableName + " where REQUESTID=" + requestId); + String sfitfy = ""; + if (rs.next()) { + sfitfy = Util.null2String(rs.getString("sfitfy")); + } + return "0".equals(sfitfy); // 0是通用付款 + } + + /** + * 查询是否为it或付款 + * + * @param requestId 流程id + * @return true : 通用付款 + * false: it付款 + */ + public static boolean whetherItOrTy(String requestId, String tableName) throws Exception { + RecordSet rs = new RecordSet(); + rs.executeQuery("select sfitfy from " + tableName + " where REQUESTID=" + requestId); + String sfitfy = ""; + if (rs.next()) { + sfitfy = Util.null2String(rs.getString("sfitfy")); + } + return "0".equals(sfitfy); + } + + /** + * 是否为总部差旅 + * + * @param id 出纳付款建模id + * @return t 是; f 否 + */ + public static boolean isCl(String id) throws Exception { + RecordSet rs = new RecordSet(); + rs.executeQuery("select REQUESTMARK from WORKFLOW_REQUESTBASE t1\n" + + "left join UF_ZBFK t2\n" + + "on t1.REQUESTID=t2.REQUTID\n" + + "where t2.ID=?", id); + String title = ""; + if (rs.next()) { + title = Util.null2String(rs.getString("REQUESTMARK")); + } + + if ("".equals(title)) { + throw new Exception(String.format("建模id:%s 未维护流程编号", id)); + } + + return title.contains("总部差旅报销"); + + } + +} diff --git a/src/main/java/com/engine/htsc/seal/entity/ApplyPrintEntity.java b/src/main/java/com/engine/htsc/seal/entity/ApplyPrintEntity.java new file mode 100644 index 0000000..40df8fd --- /dev/null +++ b/src/main/java/com/engine/htsc/seal/entity/ApplyPrintEntity.java @@ -0,0 +1,70 @@ +package com.engine.htsc.seal.entity; + +import java.io.Serializable; + +public class ApplyPrintEntity implements Serializable { + + public String appId; + public String secret; + public String docId;//文件id + public String personName;//打印人姓名 + public String oldPersonNum;//之前的打印人标识 + public String personNum;//打印人标识 + public String printNum;//打印份数 + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public String getSecret() { + return secret; + } + + public void setSecret(String secret) { + this.secret = secret; + } + + public String getDocId() { + return docId; + } + + public void setDocId(String docId) { + this.docId = docId; + } + + public String getPersonName() { + return personName; + } + + public void setPersonName(String personName) { + this.personName = personName; + } + + public String getOldPersonNum() { + return oldPersonNum; + } + + public void setOldPersonNum(String oldPersonNum) { + this.oldPersonNum = oldPersonNum; + } + + public String getPersonNum() { + return personNum; + } + + public void setPersonNum(String personNum) { + this.personNum = personNum; + } + + public String getPrintNum() { + return printNum; + } + + public void setPrintNum(String printNum) { + this.printNum = printNum; + } +} diff --git a/src/main/java/com/engine/htsc/trip/pojo/AllowanceRequest.java b/src/main/java/com/engine/htsc/trip/pojo/AllowanceRequest.java new file mode 100644 index 0000000..a5c7f44 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/pojo/AllowanceRequest.java @@ -0,0 +1,69 @@ +package com.engine.htsc.trip.pojo; + +import java.util.List; + +public class AllowanceRequest { + private String type; + private String isLeader; + private String travelApplyNo; + private List journeyList; + private List trainOrders; + private List flightOrders; + private List orderList; + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getIsLeader() { + return isLeader; + } + + public void setIsLeader(String isLeader) { + this.isLeader = isLeader; + } + + public String getTravelApplyNo() { + return travelApplyNo; + } + + public void setTravelApplyNo(String travelApplyNo) { + this.travelApplyNo = travelApplyNo; + } + + public List getJourneyList() { + return journeyList; + } + + public void setJourneyList(List journeyList) { + this.journeyList = journeyList; + } + + public List getTrainOrders() { + return trainOrders; + } + + public void setTrainOrders(List trainOrders) { + this.trainOrders = trainOrders; + } + + public List getFlightOrders() { + return flightOrders; + } + + public void setFlightOrders(List flightOrders) { + this.flightOrders = flightOrders; + } + + public List getOrderList() { + return orderList; + } + + public void setOrderList(List orderList) { + this.orderList = orderList; + } +} diff --git a/src/main/java/com/engine/htsc/trip/service/AllowanceService.java b/src/main/java/com/engine/htsc/trip/service/AllowanceService.java new file mode 100644 index 0000000..b3999f4 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/AllowanceService.java @@ -0,0 +1,10 @@ +package com.engine.htsc.trip.service; + +import com.engine.htsc.trip.pojo.AllowanceRequest; +import java.util.Map; + +public interface AllowanceService { + Map allowance(AllowanceRequest request); + + Map execute(AllowanceRequest request); +} diff --git a/src/main/java/com/engine/htsc/trip/service/impl/AllowanceServiceImpl.java b/src/main/java/com/engine/htsc/trip/service/impl/AllowanceServiceImpl.java new file mode 100644 index 0000000..e51e0c7 --- /dev/null +++ b/src/main/java/com/engine/htsc/trip/service/impl/AllowanceServiceImpl.java @@ -0,0 +1,381 @@ +package com.engine.htsc.trip.service.impl; + + +import com.alibaba.fastjson.JSON; +import com.engine.core.impl.Service; +import com.engine.htsc.trip.pojo.AllowanceRequest; +import com.engine.htsc.trip.pojo.JourneyEntity; +import com.engine.htsc.trip.pojo.OrderEntity; +import com.engine.htsc.trip.service.AllowanceService; +import com.google.common.collect.Lists; +import java.time.Duration; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.stream.Collectors; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.util.CollectionUtils; + + +public class AllowanceServiceImpl extends Service implements AllowanceService { + + private static final String TITLE = "doGetAllowance"; + private Log log = LogFactory.getLog(this.getClass()); + private static final DateTimeFormatter FORMATTER = DateTimeFormatter + .ofPattern("yyyy-MM-dd HH:mm:ss"); + + @Override + public Map execute(AllowanceRequest params) { + Map result = new HashMap<>(); + //此阶段明细表尚无数据 + String type = params.getType(); + String isLeader = params.getIsLeader(); + String travelApplyNo = params.getTravelApplyNo(); + List journeyList = params.getJourneyList(); + if (CollectionUtils.isEmpty(journeyList)) { + log.warn(String.format("%s journey list is empty! applyno:%s", TITLE, travelApplyNo)); + return result; + } + journeyList.sort(Comparator.comparing(JourneyEntity::getBeginTime)); + int allowance = 0; + result.put("applyNo", travelApplyNo); + String firstDay = ""; + String departure = ""; + Map dayMap = new HashMap<>(); + for (int i = 0; i < journeyList.size(); i++) { + JourneyEntity journey = journeyList.get(i); + List dayList = getDateList(journey.getBeginTime(), journey.getEndTime()); + if (i == 0) { + departure = journey.getBeginCity(); + firstDay = dayList.get(0); + } + dayList.forEach(f -> { + dayMap.put(f, journey.getEndCity()); + }); + } + LocalDate firstLocalDate = LocalDate.parse(firstDay, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + //带领导报销 + if ("true".equals(isLeader)) { + + for (Entry entry : dayMap.entrySet()) { + String k = entry.getKey(); + String v = entry.getValue(); + allowance += getStandardByCity(v); + } + } else { + if ("1".equals(type)) { + //内部会议出差 + allowance = 0; + } else if ("2".equals(type)) { + //外部会议培训 + allowance = 50 * dayMap.size(); + } else { + //单日行程 + if (dayMap.size() == 1) { + //使用当天的目的地城市作为补贴标准城市 + allowance = getStandardByCity(dayMap.entrySet().iterator().next().getValue()); + } else { + List orderList = params.getOrderList(); + if (CollectionUtils.isEmpty(orderList) || orderList.size() < 2) { + log.warn(String + .format("%s order list is empty or size < 2 ! applyno:%s", TITLE, travelApplyNo)); + } else { + //整理每日订单 + Map> dayOrderMap = new HashMap<>(); + String lastOrderDay = ""; + orderList.sort(Comparator.comparing(OrderEntity::getBeginTime)); + for (int i = 0; i < orderList.size(); i++) { + OrderEntity order = orderList.get(i); + if (i == orderList.size() - 1) { + lastOrderDay = order.getEndTime(); + } + String key = order.getBeginTime().substring(0, 10); + if (dayOrderMap.containsKey(key)) { + dayOrderMap.get(key).add(order); + } else { + List arr = new ArrayList<>(); + arr.add(order); + arr.sort(Comparator.comparing(OrderEntity::getBeginTime)); + dayOrderMap.put(key, arr); + } + } + + LocalDate lastLocalDate = LocalDate + .parse(lastOrderDay, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + //遍历每一天行程 + for (Entry entry : dayMap.entrySet()) { + String k = entry.getKey(); + LocalDate date = LocalDate.parse(k, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + if (date.isAfter(lastLocalDate)) { + continue; + } + List dayOrderArr = dayOrderMap.get(k); + //判断是否为最后一天 + if (k.equals(lastLocalDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))) { + //如果最后一天没有订单则该天差补为0 + if (CollectionUtils.isEmpty(dayOrderArr)) { + allowance += 0; + } else { + //如果最后一张订单是返程订单 + OrderEntity dayLastOrder = dayOrderArr.get(dayOrderArr.size() - 1); + if (dayLastOrder.getEndCity().equals(departure)) { + dayOrderArr.remove(dayOrderArr.size() - 1); + } + //当天所有城市中补贴最高的值 + Set cityNameSet = new HashSet<>(); + if (CollectionUtils.isEmpty(dayOrderArr)) { + cityNameSet.add(dayLastOrder.getBeginCity()); + } else { + for (OrderEntity dayOrder : dayOrderArr) { + cityNameSet.add(dayOrder.getEndCity()); + } + } + allowance += getStandardByCitySet(cityNameSet); + } + } else { + //如果当天没有订单则以之前最近的订单的目的标准作为补贴标准 + if (CollectionUtils.isEmpty(dayOrderArr)) { + LocalDate preDay = date.minusDays(1); + while (preDay.isAfter(firstLocalDate)) { + String dayKey = preDay.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + dayOrderArr = dayOrderMap.get(dayKey); + if (!CollectionUtils.isEmpty(dayOrderArr)) { + break; + } + preDay = preDay.minusDays(1); + } + if (CollectionUtils.isEmpty(dayOrderArr)) { + allowance += 0; + } else { + //取最后一个行程的目的地 + OrderEntity dayOrder = dayOrderArr.get(dayOrderArr.size() - 1); + allowance += getStandardByCity(dayOrder.getEndCity()); + } + } else { + //当天所有城市中补贴最高的值 + Set cityNameSet = new HashSet<>(); + for (OrderEntity dayOrder : dayOrderArr) { + cityNameSet.add(dayOrder.getEndCity()); + } + allowance += getStandardByCitySet(cityNameSet); + } + } + } + } + } + } + } + result.put("allowance", allowance); + return result; + } + + @Override + public Map allowance(AllowanceRequest params) { + Map result = new HashMap<>(); + //此阶段明细表尚无数据 + String type = params.getType(); + String travelApplyNo = params.getTravelApplyNo(); + int allowance = 0; + result.put("applyNo", travelApplyNo); + result.put("allowance", allowance); + //合并火车和机票订单 + + List orderList = new ArrayList<>(); + orderList.addAll(params.getTrainOrders()); + orderList.addAll(params.getFlightOrders()); + if (CollectionUtils.isEmpty(orderList)) { + return result; + } + orderList.sort(Comparator.comparing(JourneyEntity::getBeginTime)); + /** + * 检查订单是否连续 + * 1、无订单或者订单数小于2 + * 2、上一段行程的目的地是下一段行程的出发地 + * 3、第一段行程的出发地等于最好一段行程的目的地 + */ + if (!checkContinuous(orderList)) { + return result; + } else { + JourneyEntity firstOrder = orderList.get(0); + JourneyEntity lastOrder = orderList.get(orderList.size() - 1); + String beginTime = firstOrder.getBeginTime(); + String endTime = lastOrder.getEndTime(); + //获取两个时间内的小时数 确定天数 + LocalDateTime startDateTime = LocalDateTime.parse(beginTime, FORMATTER); + LocalDateTime endDateTime = LocalDateTime.parse(endTime, FORMATTER); + Duration duration = Duration.between(startDateTime, endDateTime); + long hours = duration.toHours(); + //间隔天数 + int days = (int) Math.ceil(hours / 24.0); + if ("1".equals(type)) { + //内部会议出差 + allowance = 0; + } else if ("2".equals(type)) { + //外部会议培训 + allowance = 50 * days; + } else { + //订单按日分组 + Map> dayOrderMap = new HashMap<>(); + for (int i = 0; i < orderList.size(); i++) { + JourneyEntity order = orderList.get(i); + String key = order.getBeginTime().substring(0, 10); + if (dayOrderMap.containsKey(key)) { + dayOrderMap.get(key).add(order); + } else { + List arr = new ArrayList<>(); + arr.add(order); + arr.sort(Comparator.comparing(JourneyEntity::getBeginTime)); + dayOrderMap.put(key, arr); + } + } + Set dateSet = dayOrderMap.keySet(); + List dateList = dateSet.stream().sorted().collect(Collectors.toList()); + String preDate = dateList.get(0); + LocalDateTime preLocalDate = LocalDate.parse(preDate, DateTimeFormatter + .ofPattern("yyyy-MM-dd")).atStartOfDay(); + int preAllowance = calcAllowancePerDay(dayOrderMap.get(preDate), dayOrderMap.size()==1); + allowance += preAllowance; + List allowanceList = Lists.newArrayList(preAllowance); + for (int i = 1; i < dateList.size(); i++) { + String curDate = dateList.get(i); + //计算和上一个日期间隔的天数 + LocalDateTime curLocalDate = LocalDate.parse(curDate, DateTimeFormatter + .ofPattern("yyyy-MM-dd")).atStartOfDay(); + int d = (int) Duration.between(preLocalDate, curLocalDate).toDays() - 1; + allowance += (preAllowance * d); + for (int j = 0; j < d; j++) { + allowanceList.add(preAllowance); + } + int curAllowance = calcAllowancePerDay(dayOrderMap.get(curDate), + i == dateList.size() - 1); + allowance += curAllowance; + allowanceList.add(curAllowance); + preLocalDate = curLocalDate; + preAllowance = curAllowance; + } + log.info("allowance per day:" + allowanceList.stream().map(String::valueOf) + .collect(Collectors.joining(",")) + ", applyNo:" + travelApplyNo); + //总的计算天数 + if (allowanceList.size() > days) { + List temp = new ArrayList<>(allowanceList); + Collections.sort(temp); + //按照差补值从小到大排序 + List filter = temp.subList(0, temp.size() - days); + log.info("allowance per day filter:" + filter.stream().map(String::valueOf) + .collect(Collectors.joining(",")) + ", applyNo:" + travelApplyNo); + //去掉对应天数最低的差补 + allowance -= filter.stream().reduce(Integer::sum).orElse(0); + } + } + } + result.put("allowance", allowance); + return result; + } + + private int calcAllowancePerDay(List orderEntityList, boolean lastDay) { + if (orderEntityList.size() < 2) { + JourneyEntity orderEntity = orderEntityList.get(0); + String city = lastDay ? orderEntity.getBeginCity() : orderEntity.getEndCity(); + return getStandardByCity(city); + } else { + Set citySet = new HashSet<>(); + for (int i = 0; i < orderEntityList.size(); i++) { + if (i == orderEntityList.size() - 1) { + citySet.add(lastDay ? orderEntityList.get(i).getBeginCity() + : orderEntityList.get(i).getEndCity()); + } else { + citySet.add(orderEntityList.get(i).getEndCity()); + } + } + return getStandardByCitySet(citySet); + } + } + + private int getStandardByCitySet(Set cityNameSet) { + return cityNameSet.stream().map(this::getStandardByCity).max(Comparator.comparing(i -> i)) + .get(); + } + + private int getStandardByCity(String cityName) { + if (StringUtils.isBlank(cityName)) { + return 0; + } + return Lists.newArrayList("北京", "上海", "深圳", "广州", "海口", "三亚", "三沙").contains(cityName) ? 100 + : 80; + } + + /** + * 将日期区间拆分为每一天 + * + * @param start + * @param end + * @return + */ + private List getDateList(String start, String end) { + List result = new ArrayList<>(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + LocalDate startDate = LocalDate.parse(start, formatter); + LocalDate endDate = LocalDate.parse(end, formatter); + LocalDate tempDate = startDate; + while (tempDate.isBefore(endDate)) { + result.add(tempDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); + tempDate = tempDate.plusDays(1); + } + result.add(endDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); + return result; + } + + /** + * 检查订单是否连续 + * + * @param orderEntityList + * @return + */ + private boolean checkContinuous(List orderEntityList) { + boolean result = true; + if (org.apache.commons.collections4.CollectionUtils.isEmpty(orderEntityList) + || orderEntityList.size() < 2) { + result = false; + } else { + JourneyEntity firstOrder = orderEntityList.get(0); + JourneyEntity lastOrder = orderEntityList.get(orderEntityList.size() - 1); + if (firstOrder.getBeginCity().equals(lastOrder.getEndCity())) { + JourneyEntity pre = orderEntityList.get(0); + for (int i = 1; i < orderEntityList.size(); i++) { + JourneyEntity now = orderEntityList.get(i); + if (!pre.getEndCity().equals(now.getBeginCity())) { + result = false; + break; + } + pre = now; + } + } else { + result = false; + } + } + + return result; + } + + public static void main(String[] args) { + // GCONST.setRootPath(""); + // GCONST.setServerName("ecology"); + AllowanceServiceImpl allowanceService = new AllowanceServiceImpl(); + String json = "{\"type\":\"3\",\"isLeader\":\"false\",\"travelApplyNo\":\"20210821416\",\"journeyList\":[{\"beginTime\":\"2021-08-31 09:00:00\",\"endTime\":\"2021-09-01 17:00:00\",\"beginCity\":\"上海\",\"endCity\":\"南京\"}],\"trainOrders\":[{\"beginTime\":\"2021-09-01 09:20:00\",\"endTime\":\"2021-09-01 10:41:00\",\"beginCity\":\"上海\",\"endCity\":\"南京\"},{\"beginTime\":\"2021-09-01 16:32:00\",\"endTime\":\"2021-09-01 17:35:00\",\"beginCity\":\"南京\",\"endCity\":\"上海\"}],\"flightOrders\":[],\"orderList\":[]}"; + AllowanceRequest request = JSON.parseObject(json, + AllowanceRequest.class); + Map result = allowanceService.allowance(request); + System.out.println(JSON.toJSONString(result)); + } +} diff --git a/src/main/java/com/engine/htsc/workflow/web/AssignProcessorAction.java b/src/main/java/com/engine/htsc/workflow/web/AssignProcessorAction.java new file mode 100644 index 0000000..851d710 --- /dev/null +++ b/src/main/java/com/engine/htsc/workflow/web/AssignProcessorAction.java @@ -0,0 +1,565 @@ +package com.engine.htsc.workflow.web; + +import com.alibaba.fastjson.JSONObject; +import com.api.browser.bean.BrowserBean; +import com.api.browser.bean.SearchConditionGroup; +import com.api.browser.bean.SearchConditionItem; +import com.api.browser.bean.SearchConditionOption; +import com.api.browser.util.BrowserInitUtil; +import com.api.browser.util.ConditionFactory; +import com.api.browser.util.ConditionType; +import com.engine.htsc.workflow.util.WorkflowUtil; +import weaver.conn.RecordSet; +import weaver.conn.RecordSetTrans; +import weaver.formmode.setup.ModeRightInfo; +import weaver.general.BaseBean; +import weaver.general.TimeUtil; +import weaver.general.Util; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; +import weaver.hrm.check.JobComInfo; +import weaver.hrm.company.DepartmentComInfo; +import weaver.hrm.definedfield.HrmFieldManager; +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.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.*; + +/** + * Created by K1810006 on 2020/9/23. + */ +public class AssignProcessorAction { + + + /** + * 获取指定处理人配置表单字段 + * @param request + * @param response + * @return + */ + @GET + @Path("/setting/getAddFormfields") + @Produces({MediaType.TEXT_PLAIN}) + public String getFormFields(@Context HttpServletRequest request, @Context HttpServletResponse response){ + + User user = HrmUserVarify.getUser(request, response); + Map apidatas = new HashMap(); + String workflowid = request.getParameter("workflowid"); + + ConditionFactory conditionFactory = new ConditionFactory(user); + //流程对应的配置字段 + List fieldGroup = new ArrayList(); + List mainFieldItems = new ArrayList(); + List detailFieldItems = new ArrayList(); + + try { + + //主表字段 + RecordSet rs = new RecordSet(); + String mainFieldsSql = " select b.* from workflow_bill a,workflow_billfield b " + + " where a.id=b.billid and a.tablename='uf_zdclrpz' and detailtable is null order by b.dsporder "; + rs.executeQuery(mainFieldsSql); + while(rs.next()){ + String fieldid = Util.null2String(rs.getString("id")); + String fieldname = Util.null2String(rs.getString("fieldname")); + String fielddbtype = Util.null2String(rs.getString("fielddbtype")); + String fieldhtmltype = Util.null2String(rs.getString("fieldhtmltype")); + String type = Util.null2String(rs.getString("type")); + String fieldlabel = Util.null2String(rs.getString("fieldlabel")); + + SearchConditionItem fieldItem = getFieldItem(conditionFactory,fieldid,fieldname,fielddbtype,fieldhtmltype,type,fieldlabel,3,1); + fieldItem.setRules("required"); + if(fieldname.equals("dqpzld") || fieldname.equals("gw")){ + fieldItem.setViewAttr(3); + String value = Util.null2String(request.getParameter(fieldname)); + fieldItem.setValue(value); + + + } + + mainFieldItems.add(fieldItem); + } + + + //获取流程字段 + rs.executeQuery(" select * from uf_lctjzd where lc=? ",new Object[]{workflowid}); + while(rs.next()){ + String lczd = Util.null2String(rs.getString("lczd")); + String zdlx = Util.null2String(rs.getString("zdlx")); + String zdyw = Util.null2String(rs.getString("zdyw")); + String lbid = Util.null2String(rs.getString("lbid")); + String zdymlx = Util.null2String(rs.getString("zdymlx")); + String zdzlx = Util.null2String(rs.getString("zdzlx")); + + SearchConditionItem fieldItem = getFieldItem(conditionFactory,lczd,lczd,zdlx,zdymlx,zdzlx,lbid,3,1); + fieldItem.setRules("required"); + detailFieldItems.add(fieldItem); + } + fieldGroup.add(new SearchConditionGroup("基本信息",true,mainFieldItems)); + fieldGroup.add(new SearchConditionGroup("指定条件配置",true,detailFieldItems)); + apidatas.put("fields",fieldGroup); + apidatas.put("success", true); + } catch (Exception e) { + e.printStackTrace(); + apidatas.put("success", false); + } + return JSONObject.toJSONString(apidatas); + } + + + + /** + * 获取指定处理人编辑表单字段 + * @param request + * @param response + * @return + */ + @GET + @Path("/setting/getEditFormfields") + @Produces({MediaType.TEXT_PLAIN}) + public String getEditFormfields(@Context HttpServletRequest request, @Context HttpServletResponse response){ + + User user = HrmUserVarify.getUser(request, response); + Map apidatas = new HashMap(); + String dataid = request.getParameter("dataid"); + + + ConditionFactory conditionFactory = new ConditionFactory(user); + List fieldGroup = new ArrayList(); + List mainFieldItems = new ArrayList(); + List detailFieldItems = new ArrayList(); + + try { + + RecordSet rs = new RecordSet(); + //查询当前编辑数据的主表数据 + Map mainDataMap = new HashMap<>(); + rs.executeQuery( " select * from uf_zdclrpz where id=? ",new Object[]{dataid}); + if(rs.next()){ + String columnNames[] = rs.getColumnName(); + for(int i=0;i apidatas = new HashMap(); + String dataid = request.getParameter("dataid"); + String baseParams = request.getParameter("baseparams"); + String settingParams = request.getParameter("settingparams"); + + RecordSetTrans rts = new RecordSetTrans(); + rts.setAutoCommit(false); + try { + //更新主表数据 + JSONObject baseParamsJson = JSONObject.parseObject(baseParams); + int dqpzld = baseParamsJson.getIntValue("dqpzld"); + int cjbm = User.getUser(dqpzld,0).getUserDepartment(); + String gw = Util.null2String(baseParamsJson.getString("gw")); + String lc = Util.null2String(baseParamsJson.getString("lc")); + String cftj = Util.null2String(baseParamsJson.getString("cftj")); + String zdclr = Util.null2String(baseParamsJson.getString("zdclr")); + String uuid = UUID.randomUUID().toString(); + String currentdate = TimeUtil.getCurrentDateString(); + String currenttime = TimeUtil.getOnlyCurrentTimeString(); + //int formmodeid = Util.getIntValue(bb.getPropValue("HtscFormmode","uf_zdclrpz"),2004); + + PropBean pb = new PropBean(); + String uf_zdclrpz_cubeuuid = pb.getPropName("UF_ZDCLRPZ_CUBEUUID"); + JSONObject jsonObject = pb.getModeInfoByUUID(uf_zdclrpz_cubeuuid); + int formmodeid = Util.getIntValue(jsonObject.getString("modeid")); + bb.writeLog("AssignProcessorAction-formmodeid:"+formmodeid); + + int creater = user.getUID(); + String mainSql = " insert into uf_zdclrpz (dqpzld,gw,cjbm,lc,cftj,zdclr," + + "modedatacreater,modedatacreatedate,modedatacreatetime,formmodeid,modeuuid) " + + "values(?,?,?,?,?,?,?,?,?,?,?) "; + boolean res = rts.executeUpdate(mainSql,new Object[]{dqpzld,gw,cjbm,lc,cftj,zdclr,creater,currentdate,currenttime,formmodeid,uuid}); + if(res){ + rts.executeQuery("select id from uf_zdclrpz where dqpzld=? and lc=? and zdclr=? ", + new Object[]{dqpzld,lc,zdclr}); + rts.next(); + int mainid = rts.getInt("id"); + //重构权限 + ModeRightInfo moderight = new ModeRightInfo(); + moderight.editModeDataShare(creater, formmodeid, mainid); + //插入明细数据 + JSONObject settingParamsJson = JSONObject.parseObject(settingParams); + Iterator iter = settingParamsJson.entrySet().iterator(); + while (iter.hasNext()) + { + Map.Entry entry = (Map.Entry) iter.next(); + String fieldname = (String)entry.getKey(); + String fieldvalue = (String) entry.getValue(); + rts.executeUpdate(" insert into uf_zdclrpz_dt1(mainid,zd,z) values(?,?,?) ", new Object[]{mainid,fieldname,fieldvalue}); + } + } + rts.commit(); + apidatas.put("success", true); + } catch (Exception e) { + e.printStackTrace(); + rts.rollback(); + apidatas.put("success", false); + } + return JSONObject.toJSONString(apidatas); + } + + /** + * 更新指定处理人配置 + * @param request + * @param response + * @return + */ + @POST + @Path("/setting/updateFormfields") + @Produces({MediaType.TEXT_PLAIN}) + public String updateFormfields(@Context HttpServletRequest request, @Context HttpServletResponse response){ + + User user = HrmUserVarify.getUser(request, response); + BaseBean bb = new BaseBean(); + Map apidatas = new HashMap(); + String dataid = request.getParameter("dataid"); + String baseParams = request.getParameter("baseparams"); + String settingParams = request.getParameter("settingparams"); + + RecordSetTrans rts = new RecordSetTrans(); + rts.setAutoCommit(false); + try { + //更新主表数据 + JSONObject baseParamsJson = JSONObject.parseObject(baseParams); + String cftj = Util.null2String(baseParamsJson.getString("cftj")); + String zdclr = Util.null2String(baseParamsJson.getString("zdclr")); + String modifyDatetime = TimeUtil.getCurrentTimeString(); + int modifier = user.getUID(); + String mainSql = " update uf_zdclrpz set cftj=?,zdclr=?," + + " modedatamodifier=?,modedatamodifydatetime=? where id=? "; + boolean res = rts.executeUpdate(mainSql,new Object[]{cftj,zdclr,modifier,modifyDatetime,dataid}); + if(res){ + //更新明细数据 + JSONObject settingParamsJson = JSONObject.parseObject(settingParams); + Iterator iter = settingParamsJson.entrySet().iterator(); + while (iter.hasNext()) + { + Map.Entry entry = (Map.Entry) iter.next(); + String fieldname = (String)entry.getKey(); + String fieldvalue = (String) entry.getValue(); + rts.executeUpdate(" update uf_zdclrpz_dt1 set z=? where zd=? and mainid=? ", new Object[]{fieldvalue,fieldname,dataid}); + } + } + rts.commit(); + apidatas.put("success", true); + } catch (Exception e) { + e.printStackTrace(); + rts.rollback(); + apidatas.put("success", false); + } + return JSONObject.toJSONString(apidatas); + } + + + /** + * 获取可配置的人员 + * @param request + * @param response + * @return + */ + @GET + @Path("/setting/getAssignUserList") + @Produces({MediaType.TEXT_PLAIN}) + public String getAssignUserList(@Context HttpServletRequest request, @Context HttpServletResponse response){ + + User user = HrmUserVarify.getUser(request, response); + Map apidatas = new HashMap(); + + try { + List> userList = new ArrayList<>(); + //如果当前人员安全级别大于等于50 有配置权限 + if(Util.getIntValue(user.getSeclevel())>=50){ + Map userMap = getUserMap(user); + userList.add(userMap); + } + + RecordSet rs = new RecordSet(); + rs.executeQuery(" select bpzr from uf_pzrqxb where pzr=? ", new Object[]{user.getUID()}); + if(rs.next()){ + String bpzr = Util.null2String(rs.getString("bpzr")); + String bpzrArr[] = bpzr.split(","); + for(int i=0;i selectOptions = WorkflowUtil.getSelectOptions(fieldid); + fieldItem.setOptions(selectOptions); + + + + } + + if("3".equals(fieldhtmltype)){ + fieldItem = conditionFactory.createCondition(ConditionType.BROWSER,fieldlabel,fieldname,type); + if("161".equals(type)){ + BrowserBean browserBean= fieldItem.getBrowserConditionParam(); + + Map conditionParams = new HashMap<>(); + conditionParams.put("type",fielddbtype); + browserBean.setConditionDataParams(conditionParams); + + Map completeParams= new HashMap<>(); + completeParams.put("type",type); + completeParams.put("fielddbtype",fielddbtype); + browserBean.setCompleteParams(completeParams); + + browserBean.getDestDataParams().put("type",fielddbtype); + browserBean.getDataParams().put("type",fielddbtype); + fieldItem.setBrowserConditionParam(browserBean); + + + } + + } + fieldItem.setColSpan(colSpan);//定义一行显示条件数,默认值为2,当值为1时标识该条件单独占一行 + fieldItem.setFieldcol(12); //条件输入框所占宽度,默认值18 + fieldItem.setViewAttr(viewAttr); + + return fieldItem; + } + + + + /** + * 获取表单字段condition + * @param conditionFactory + * @param fieldid 表单字段id + * @param viewAttr 是否可编辑 + * @param colSpan 一行显示数 + * @return + */ + public SearchConditionItem getFieldItem(ConditionFactory conditionFactory,String fieldid,int viewAttr,int colSpan){ + SearchConditionItem fieldItem = null; + RecordSet rs = new RecordSet(); + rs.executeQuery(" select * from workflow_billfield where id=? ",new Object[]{fieldid}); + if(rs.next()){ + String fieldname = Util.null2String(rs.getString("fieldname")); + String fieldhtmltype = Util.null2String(rs.getString("fieldhtmltype")); + String fielddbtype = Util.null2String(rs.getString("fielddbtype")); + String type = Util.null2String(rs.getString("type")); + String fieldlabel = Util.null2String(rs.getString("fieldlabel")); + fieldItem = getFieldItem(conditionFactory,fieldid,fieldname,fielddbtype,fieldhtmltype,type,fieldlabel,viewAttr,colSpan); + } + return fieldItem; + } + + + /** + * 获取字段的默认值 + * @param value + * @param fieldhtmltype + * @return + */ + public Object getItemDefaultValue(User user,String value,String fiedlddbtype,String fieldhtmltype,String detailtype,String fieldid){ + Object defaultValue = value; + try{ + + if("3".equals(fieldhtmltype)){ + List> replaceDatas = new ArrayList>(); + if(value.length()>0){ + HrmFieldManager hrmFieldManager = new HrmFieldManager(); + String fieldshowname = hrmFieldManager.getFieldvalue(user, fiedlddbtype, Util.getIntValue(fieldid), Util.getIntValue(fieldhtmltype), Util.getIntValue(detailtype), value, 0); + String[] fieldvalues = Util.splitString(value, ","); + String[] fieldshownames = Util.splitString(fieldshowname, ","); + if (detailtype.equals("257")){ + if(fieldshowname.endsWith(" ")){ + fieldshowname=fieldshowname.substring(0,fieldshowname.length()-5); + } + fieldshownames = Util.splitString(fieldshowname, " "); + } + for(int i=0;fieldvalues!=null&&i replaceData = new HashMap(); + replaceData.put("id", fieldvalues[i]); + replaceData.put("name", fieldshownames[i]); + replaceDatas.add(replaceData); + } + + } + return replaceDatas; + } + }catch (Exception e){ + new BaseBean().writeLog(e); + } + + return defaultValue; + } + + + /** + * user对象转为Map + * @param user + * @return + */ + public Map getUserMap(User user){ + Map userMap = new HashMap(); + if(user!=null){ + userMap.put("uID",user.getUID()); + userMap.put("lastname",user.getLastname()); + userMap.put("seclevel",user.getSeclevel()); + userMap.put("sex",user.getSex()); + userMap.put("status",user.getStatus()); + userMap.put("account",user.getAccount()); + userMap.put("account_type",user.getAccount_type()); + userMap.put("userDepartment",user.getUserDepartment()); + userMap.put("userSubCompany1",user.getUserSubCompany1()); + userMap.put("loginid",user.getLoginid()); + userMap.put("email",user.getEmail()); + userMap.put("jobtitle",user.getJobtitle()); + + + try { + JobComInfo jobComInfo = new JobComInfo(); + DepartmentComInfo deptComInfo = new DepartmentComInfo(); + String jobTitleName = jobComInfo.getJobName(user.getJobtitle()); + userMap.put("jobactivity",jobTitleName); + String departmentName = deptComInfo.getDepartmentName(user.getUserDepartment()+""); + userMap.put("departmentName",departmentName); + + }catch (Exception e){ + e.printStackTrace(); + } + } + return userMap; + + } + + + + +} diff --git a/src/main/java/com/engine/htxc/apprchalink/cinterface/ApprachaLink.java b/src/main/java/com/engine/htxc/apprchalink/cinterface/ApprachaLink.java new file mode 100644 index 0000000..6e1f7fd --- /dev/null +++ b/src/main/java/com/engine/htxc/apprchalink/cinterface/ApprachaLink.java @@ -0,0 +1,13 @@ +package com.engine.htxc.apprchalink.cinterface; + +/** + * Remark 用于日后审批链统一处理接口 + * @author K1810015 + * @version 1.0.0 + * @ClassName ContractLink.java + * @createTime 2022年07月26日 14:26:00 + */ +public interface ApprachaLink { + + +} diff --git a/src/main/java/com/engine/htxc/apprchalink/cinterface/ApprachaLinkBuilder.java b/src/main/java/com/engine/htxc/apprchalink/cinterface/ApprachaLinkBuilder.java new file mode 100644 index 0000000..1ed63a1 --- /dev/null +++ b/src/main/java/com/engine/htxc/apprchalink/cinterface/ApprachaLinkBuilder.java @@ -0,0 +1,70 @@ +package com.engine.htxc.apprchalink.cinterface; + +import com.engine.htxc.commonutil.user.UserTools; +import com.engine.integration.util.StringUtils; +import weaver.general.Util; + + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author K1810015 + * @version 1.0.0 + * @ClassName ApprachaLinkBuilder.java + * @createTime 2022年07月26日 15:00:00 + */ +public class ApprachaLinkBuilder { + + /** + *

最终将多个记录合并

+ * @title collback + * @author K1810015 + * @updateTime 2022/7/26 15:01 + * @ps 最开始考虑用Vo层来代替,有一些其他原因。。 + * @throws + */ + public Map collback(List list,List fileid){ + Map retmap=new HashMap<>(2); + if(list==null || list.size()<=0 || fileid==null) { + return retmap; + } + list.forEach(t->{ + Map map=(Map) t; + if(map!=null && map.size()>0){ + fileid.forEach(item->{ + String value= Util.null2String(map.get(item)); + if(!StringUtils.isBlank(value)){ + + if(StringUtils.isBlank(Util.null2String(retmap.get(item)))){ + retmap.put(item,map.get(item)); + }else { + retmap.put(item, retmap.get(item) + "," + map.get(item)); + } + } + }); + } + }); + fileid.forEach(item->{ + if(!retmap.containsKey(item)){ + retmap.put(item,""); + } + }); + + Map filtermap= retmap.entrySet().stream().filter((item)->{ + return !StringUtils.isBlank(item.getKey()); + }).collect(Collectors.toMap(p->p.getKey(),p-> + Arrays.stream(p.getValue().toString().split(",")).distinct().collect(Collectors.joining(",")) + )); + filtermap.entrySet().stream().forEach((item)->{ + retmap.put(item.getKey()+"_specialobj",getUserInfo(Util.null2String(item.getValue()))); + }); + return retmap; + } + + + public List> getUserInfo(String userids){ + return UserTools.getUserInfo(userids,"id,lastname as name"); + + } +} diff --git a/src/main/java/com/engine/htxc/commonutil/base/BaseUtil.java b/src/main/java/com/engine/htxc/commonutil/base/BaseUtil.java new file mode 100644 index 0000000..f35947f --- /dev/null +++ b/src/main/java/com/engine/htxc/commonutil/base/BaseUtil.java @@ -0,0 +1,64 @@ +package com.engine.htxc.commonutil.base; + +import com.engine.htxc.commonutil.db.DbTools; +import com.engine.integration.util.StringUtils; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + *

获取证照文件

+ * @author K1810015 + * @version 1.0.0 + * @ClassName BaseUtil.java + * @createTime 2022年07月11日 15:07:00 + */ +public class BaseUtil { + + public static String getdeptdirectors(int deptid){ + DbTools dbtools=new DbTools(); + if(deptid<=0){ + return ""; + } + String sql="select deptdirectors from hrmdepartmentdefined where deptid ='"+deptid+"'"; + return dbtools.getsqlonevalue(sql,(Object) null); + } + + public static String getusertoszjg(String userid){ + DbTools dbtools=new DbTools(); + String sql="select id from ( select t.* from HrmDepartment t start with t.id=( select a.id from HRMDEPARTMENT a,HRMRESOURCE b where a.id=b.DEPARTMENTID and b.id='"+userid+"') connect by prior t.supdepid=t.id) where SUPDEPID is null or SUPDEPID=0 "; + return dbtools.getsqlonevalue(sql,(Object) null); + } + + /** + *

两个字符串的比较

+ * @title compare + * @author K1810015 + * @updateTime 2022/8/12 13:37 + * @throws + */ + public static boolean stringcompare(String a,String b){ + if(StringUtils.isBlank(a) || StringUtils.isBlank(b)) { + //特殊操作,防止null和空字符串的操作 + if(a.equals(b)){ + return true; + }else{ + return false; + } + } + + List alist= Arrays.stream(a.split(",")).collect(Collectors.toList()); + List blist= Arrays.stream(b.split(",")).collect(Collectors.toList()); + alist.removeAll(blist); + if(alist.size()==0){ + return true; + }else{ + return false; + } + } + + private BaseUtil() { + + } +} + diff --git a/src/main/java/com/engine/htxc/contract/dto/AmountTypeEnum.java b/src/main/java/com/engine/htxc/contract/dto/AmountTypeEnum.java new file mode 100644 index 0000000..3309e44 --- /dev/null +++ b/src/main/java/com/engine/htxc/contract/dto/AmountTypeEnum.java @@ -0,0 +1,26 @@ +package com.engine.htxc.contract.dto; + +/** + * @Title: ecology-9 + * @Company: 泛微软件 + * @author: K1810050 + * @version: 1.0 + * @CreateDate: 2022/8/18 21:04 + * @Description: 金额类型枚举类 枚举值:有固定金额,无固定金额,无金额 + * @ModifyLog: + **/ +public enum AmountTypeEnum { + + /** + * 有固定金额 + */ + FIX_AMOUNT, + /** + * 无固定金额 + */ + NO_FIX_AMOUNT, + /** + * 无金额 + */ + NO_AMOUNT +} diff --git a/src/main/java/com/engine/htxc/contract/dto/ApprovalWayEnum.java b/src/main/java/com/engine/htxc/contract/dto/ApprovalWayEnum.java new file mode 100644 index 0000000..2f6252c --- /dev/null +++ b/src/main/java/com/engine/htxc/contract/dto/ApprovalWayEnum.java @@ -0,0 +1,21 @@ +package com.engine.htxc.contract.dto; + +/** + * @Title: ecology-9 + * @Company: 泛微软件 + * @author: K1810050 + * @version: 1.0 + * @CreateDate: 2022/8/18 21:07 + * @Description: 审核方式 默认 0 + * @ModifyLog: + **/ +public enum ApprovalWayEnum { + /** + * 顺序审核 + */ + SEQUENTIAL, + /** + * 并行审核 + */ + PARALLEL +} diff --git a/src/main/java/com/engine/htxc/contract/dto/AuthoritySimplifyEnum.java b/src/main/java/com/engine/htxc/contract/dto/AuthoritySimplifyEnum.java new file mode 100644 index 0000000..19f08ce --- /dev/null +++ b/src/main/java/com/engine/htxc/contract/dto/AuthoritySimplifyEnum.java @@ -0,0 +1,22 @@ +package com.engine.htxc.contract.dto; + +/** + * @Title: ecology-9 + * @Company: 泛微软件 + * @author: K1810050 + * @version: 1.0 + * @CreateDate: 2022/8/18 21:08 + * @Description: 是否授权简化 + * @ModifyLog: + **/ +public enum AuthoritySimplifyEnum { + /** + * 是 + */ + SIMPLIFY, + /** + * 否 + */ + NO_SIMPLIFY + +} diff --git a/src/main/java/com/engine/htxc/workflow/create/autotrigger/contract/service/AutoApprovalService.java b/src/main/java/com/engine/htxc/workflow/create/autotrigger/contract/service/AutoApprovalService.java new file mode 100644 index 0000000..87aeeeb --- /dev/null +++ b/src/main/java/com/engine/htxc/workflow/create/autotrigger/contract/service/AutoApprovalService.java @@ -0,0 +1,20 @@ +package com.engine.htxc.workflow.create.autotrigger.contract.service; + +import com.engine.htxc.workflow.create.autotrigger.contract.vo.AutoApproval; + +/** + * 提供其他业务调用合同审批的方法 + * @author K1810015 + * @version 1.0.0 + * @ClassName AutoApprovalService.java + * @createTime 2022年08月05日 10:07:00 + */ +public interface AutoApprovalService { + /** + *

创建流程的接口

+ * @title create + * @author K1810015 + * @updateTime 2022/8/21 22:07 + */ + public int create(AutoApproval autoApproval); +} diff --git a/src/main/java/com/engine/htxc/workflow/create/autotrigger/contract/service/impl/AutoApprovalServiceImpl.java b/src/main/java/com/engine/htxc/workflow/create/autotrigger/contract/service/impl/AutoApprovalServiceImpl.java new file mode 100644 index 0000000..469e8d8 --- /dev/null +++ b/src/main/java/com/engine/htxc/workflow/create/autotrigger/contract/service/impl/AutoApprovalServiceImpl.java @@ -0,0 +1,89 @@ +package com.engine.htxc.workflow.create.autotrigger.contract.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.engine.core.impl.Service; +import com.engine.htxc.commonutil.workflow.WorkflowCreate; +import com.engine.htxc.workflow.create.autotrigger.contract.service.AutoApprovalService; +import com.engine.htxc.workflow.create.autotrigger.contract.vo.AutoApproval; +import com.engine.htxc.workflow.create.autotrigger.contract.vo.ContractInfo; +import com.engine.integration.util.StringUtils; +import weaver.general.Util; +import weaver.interfaces.htsc.comInfo.PropBean; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author K1810015 + * @version 1.0.0 + * @ClassName AutoApprovalService.java + * @createTime 2022-08-0510:07:00 + */ +public class AutoApprovalServiceImpl extends Service implements AutoApprovalService { + + private String workflowid=new PropBean().getPropName("constract.approval.workflowid"); + private String creatorid=""; + private String requestname=""; + @Override + public int create(AutoApproval autoApproval) { + if(autoApproval==null){ + return -100; + } + creatorid=Util.null2String(autoApproval.creatorid); + requestname=Util.null2String(autoApproval.requestname); + if(StringUtils.isBlank(creatorid) || StringUtils.isBlank(requestname)){ + return -101; + } + Map map=new HashMap<>(15); + map.put("ngr",creatorid); + map.put("szbm",Util.null2String(autoApproval.getSzbm())); + map.put("szjg",Util.null2String(autoApproval.getSzjg())); + map.put("jjcd",Util.null2String(autoApproval.getJjcd())); + map.put("lxfs",Util.null2String(autoApproval.getLxfs())); + map.put("ngrq",Util.null2String(autoApproval.getNgrq())); + map.put("nbsh",Util.null2String(autoApproval.getNbsh())); + map.put("bmld",Util.null2String(autoApproval.getBmld())); + map.put("sqjh",Util.null2String(autoApproval.getSqjh())); + map.put("qttzyddx",Util.null2String(autoApproval.getQttzyddx())); + map.put("shfs",Util.null2String(autoApproval.getShfs())); + map.put("lkrqsfytsyq",Util.null2String(autoApproval.getLkrqsfytsyq())); + map.put("xzhtlb",Util.null2String(autoApproval.getXzhtlb())); + map.put("htlx",Util.null2String(autoApproval.getHtlx())); + map.put("yz",Util.null2String(autoApproval.getYz())); + Map result= map.entrySet().stream().filter(mapfilter-> + !StringUtils.isBlank(Util.null2String(mapfilter.getValue())) + ).collect(Collectors.toMap(p->p.getKey(), p->Util.null2String(p.getValue()) )); + List contractlist= autoApproval.getListcontrat(); + List> listdetail=new ArrayList<>(); + if(contractlist!=null){ + contractlist.forEach(item->{ + Map map2=JSONObject.parseObject(JSON.toJSONString(item),Map.class); + if(map2!=null && map2.size()>0) { + listdetail.add(map2.entrySet().stream().collect(Collectors.toMap(p -> p.getKey(), p -> Util.null2String(p.getValue())))); + } + }); + } + + return createworkflow(result,listdetail); + } + + private int createworkflow(Map mainmap, List> listmap){ + WorkflowCreate workflowCreate= WorkflowCreate.createWorkflow(p->{ + p.setCreatorId(creatorid); + p.setWorkflowId(workflowid); + p.setRequestName(requestname); + p.setIsNextFlow(""); + p.setRequestMainMap(mainmap); + }).workflowCreateByRequestMap(); + String requestid= workflowCreate.requestid; + if(StringUtils.isBlank(requestid)){ + return -1; + } + if(listmap!=null && listmap.size()>0){ + workflowCreate.workflowCreatelist("4",listmap); + } + + return Util.getIntValue(requestid,-1); + } +} diff --git a/src/main/java/com/engine/htxc/workflow/create/autotrigger/contract/vo/AutoApproval.java b/src/main/java/com/engine/htxc/workflow/create/autotrigger/contract/vo/AutoApproval.java new file mode 100644 index 0000000..3477b74 --- /dev/null +++ b/src/main/java/com/engine/htxc/workflow/create/autotrigger/contract/vo/AutoApproval.java @@ -0,0 +1,189 @@ +package com.engine.htxc.workflow.create.autotrigger.contract.vo; + +import java.util.List; + +/** + * @author K1810015 + * @version 1.0.0 + * @ClassName AutoApproval.java + * @createTime 2022年08月05日 10:12:00 + */ + +public class AutoApproval { + public String creatorid; + public String requestname; + public String szbm; + public String szjg; + public String jjcd; + public String lxfs; + public String ngrq; + public String nbsh; + public String bmld; + public String sqjh; + public String qttzyddx; + public String shfs; + public String lkrqsfytsyq; + public String xzhtlb; + + public String getHtlx() { + return htlx; + } + + public void setHtlx(String htlx) { + this.htlx = htlx; + } + + public String htlx; + public List getListcontrat() { + return listcontrat; + } + + public void setListcontrat(List listcontrat) { + this.listcontrat = listcontrat; + } + + public List listcontrat; + + public String getCreatorid() { + return creatorid; + } + + public void setCreatorid(String creatorid) { + this.creatorid = creatorid; + } + + public String getRequestname() { + return requestname; + } + + public void setRequestname(String requestname) { + this.requestname = requestname; + } + + public String getSzbm() { + return szbm; + } + + public void setSzbm(String szbm) { + this.szbm = szbm; + } + + public String getSzjg() { + return szjg; + } + + public void setSzjg(String szjg) { + this.szjg = szjg; + } + + public String getJjcd() { + return jjcd; + } + + public void setJjcd(String jjcd) { + this.jjcd = jjcd; + } + + public String getLxfs() { + return lxfs; + } + + public void setLxfs(String lxfs) { + this.lxfs = lxfs; + } + + public String getNgrq() { + return ngrq; + } + + public void setNgrq(String ngrq) { + this.ngrq = ngrq; + } + + public String getNbsh() { + return nbsh; + } + + public void setNbsh(String nbsh) { + this.nbsh = nbsh; + } + + public String getBmld() { + return bmld; + } + + public void setBmld(String bmld) { + this.bmld = bmld; + } + + public String getSqjh() { + return sqjh; + } + + public void setSqjh(String sqjh) { + this.sqjh = sqjh; + } + + public String getQttzyddx() { + return qttzyddx; + } + + public void setQttzyddx(String qttzyddx) { + this.qttzyddx = qttzyddx; + } + + public String getShfs() { + return shfs; + } + + public void setShfs(String shfs) { + this.shfs = shfs; + } + + public String getLkrqsfytsyq() { + return lkrqsfytsyq; + } + + public void setLkrqsfytsyq(String lkrqsfytsyq) { + this.lkrqsfytsyq = lkrqsfytsyq; + } + + public String getXzhtlb() { + return xzhtlb; + } + + public void setXzhtlb(String xzhtlb) { + this.xzhtlb = xzhtlb; + } + + public String getYz() { + return yz; + } + + public void setYz(String yz) { + this.yz = yz; + } + + public String yz; + + @Override + public String toString() { + return "AutoApproval{" + + "creatorid='" + creatorid + '\'' + + ", requestname='" + requestname + '\'' + + ", szbm='" + szbm + '\'' + + ", szjg='" + szjg + '\'' + + ", jjcd='" + jjcd + '\'' + + ", lxfs='" + lxfs + '\'' + + ", ngrq='" + ngrq + '\'' + + ", nbsh='" + nbsh + '\'' + + ", bmld='" + bmld + '\'' + + ", sqjh='" + sqjh + '\'' + + ", qttzyddx='" + qttzyddx + '\'' + + ", shfs='" + shfs + '\'' + + ", lkrqsfytsyq='" + lkrqsfytsyq + '\'' + + ", xzhtlb='" + xzhtlb + '\'' + + ", yz='" + yz + '\'' + + '}'; + } +} diff --git a/src/main/java/com/engine/htxc/workflow/create/business/contract/approval/service/impl/Approvaltosign.java b/src/main/java/com/engine/htxc/workflow/create/business/contract/approval/service/impl/Approvaltosign.java new file mode 100644 index 0000000..7adc694 --- /dev/null +++ b/src/main/java/com/engine/htxc/workflow/create/business/contract/approval/service/impl/Approvaltosign.java @@ -0,0 +1,136 @@ +package com.engine.htxc.workflow.create.business.contract.approval.service.impl; + +import java.util.*; +import java.util.stream.Collectors; +import com.engine.htxc.commonutil.base.BaseUtil; +import com.engine.htxc.commonutil.user.UserHt; +import com.engine.htxc.commonutil.workflow.WorkflowCreate; +import com.engine.htxc.workflow.create.business.contract.init.ContractWorkflowData; +import com.engine.htxc.workflow.create.business.contract.util.ContracrtBaseUtil; +import com.engine.htxc.workflow.create.business.contract.util.ContractUpdateStatus; +import com.engine.htxc.workflow.create.cinterface.CustomizeWorkflow; +import com.engine.integration.util.StringUtils; +import cn.hutool.core.date.DateTime; +import weaver.general.Util; +import weaver.interfaces.htsc.comInfo.PropBean; + +/** + *

合同审批流程办结触发签订流程

+ * @author K1810015 + * @version 1.0.0 + * @ClassName approvaltosign.java + * @createTime 2022年07月20日 17:00:00 + */ +public class Approvaltosign extends ContractWorkflowData implements CustomizeWorkflow { + + private PropBean pb = new PropBean(); + private String requestnamevalue = ""; + public Map ufhtqcmap = new HashMap<>(); + public Map linkmodemap = new HashMap<>(); + + public Approvaltosign(Map map) { + super(map); + } + + @Override + public int create() { + if (StringUtils.isBlank(requestid) || StringUtils.isBlank(requestname)) { + return -101; + } + String creatorid = Util.null2String(map.get("creatorid")); + if (StringUtils.isBlank(creatorid)) { + return -102; + } + int value = createworkflow(); + return value; + } + + public int createworkflow() { + String workflowid = Util.null2String(pb.getPropName("constract.sign.workflowid")); + String field = "ngr,szbm,szjg,jjcd,lxfs,ngrq,jjyy,xzhtlb,fhtlx"; + Map maintable = getmaintable(Arrays.stream(field.split(",")).collect(Collectors.toList())); + List> dt4maplist = getdetailtable(4, null); + boolean flag= ( + maintable == null || maintable.isEmpty() + || dt4maplist == null || dt4maplist.isEmpty()); + if (flag) { + return -1; + } + Map retmap = new HashMap<>(3); + retmap.put("jjcd", Util.null2String(maintable.get("jjcd"))); + retmap.put("ngrq", DateTime.now().toString("yyyy-MM-dd hh:mm")); + retmap.put("jjyy", Util.null2String(maintable.get("jjyy"))); + dt4maplist.forEach(dt4map -> { + Map draftedmap = new HashMap<>(2); + draftedmap.put("htbh", Util.null2String(dt4map.get("htbh"))); + draftedmap.put("htbb", Util.null2String(dt4map.get("htbb"))); + String prefix = Util.null2String(pb.getPropName("constract.sign.workflowname")); + ufhtqcmap = ContracrtBaseUtil.getufhtqcmap(draftedmap); + if (ufhtqcmap != null || ufhtqcmap.size() > 0) { + String htmc = Util.null2String(ufhtqcmap.get("htmc")); + String qcr = Util.null2String(ufhtqcmap.get("qcr")); + if (!StringUtils.isBlank(htmc) && !StringUtils.isBlank(qcr)) { + requestnamevalue = prefix + htmc; + List draftedlist = Arrays.stream(qcr.split(",")).collect(Collectors.toList()); + draftedlist.forEach(createidvalue -> { + int userid = Util.getIntValue(createidvalue, -1); + UserHt userht = new UserHt(userid); + if (userid > 0) { + retmap.put("xzhtlb", Util.null2String(dt4map.get("htbh"))); + retmap.put("fhtlx", Util.null2String(dt4map.get("htflx"))); + retmap.put("htbb", Util.null2String(dt4map.get("htbb"))); + retmap.put("htlx", Util.null2String(dt4map.get("htlx"))); + retmap.put("htzt", "3"); + retmap.put("ngr", Util.null2String(userid)); + retmap.put("szbm", Util.null2String(userht.getUserDepartment())); + retmap.put("szjg", Util.null2String(BaseUtil.getusertoszjg(Util.null2String(userid)))); + + Map contracttypemap = new HashMap<>(1); + contracttypemap.put("contracttype", Util.null2String(dt4map.get("htlx"))); + linkmodemap = ContracrtBaseUtil.getmodeltype(contracttypemap); + if (linkmodemap != null && linkmodemap.size() > 0) { + retmap.put("gljmmc", Util.null2String(linkmodemap.get("jmbd"))); + } + + Map result = retmap.entrySet().stream() + .filter(mapfilter -> !StringUtils.isBlank(Util.null2String(mapfilter.getValue()))) + .collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue())); + WorkflowCreate workflowCreate = WorkflowCreate.createWorkflow(p -> { + p.setCreatorId(createidvalue); + p.setWorkflowId(workflowid); + p.setRequestName(requestnamevalue); + p.setIsNextFlow(""); + p.setRequestMainMap(result); + }).workflowCreateByRequestMap(); + if (!StringUtils.isBlank(workflowCreate.requestid) + && Util.getIntValue(workflowCreate.requestid, -100) > 0) { + String htdsf = Util.null2String(ufhtqcmap.get("htdsf")); + if (!StringUtils.isBlank(htdsf)) { + List> dsflist = new ArrayList<>(); + Arrays.stream(htdsf.split(",")).distinct().forEach((item) -> { + Map dsfmap = new HashMap<>(1); + dsfmap.put("dsfmc", Util.null2String(item)); + dsflist.add(dsfmap); + }); + workflowCreate.workflowCreatelist("5", dsflist); + } + + ContractUpdateStatus + .createContractUpdateStatus(requestid, Util.null2String(dt4map.get("htflx")), + Util.null2String(dt4map.get("htbh")), ufhtqcmap, user) + .approvalend(workflowCreate.requestid); + + } else { + // 做好记录 + } + + } + }); + + } + } + }); + return 1; + } +} diff --git a/src/main/java/weaver/interfaces/htsc/cus/AutoSignAction.java b/src/main/java/weaver/interfaces/htsc/cus/AutoSignAction.java new file mode 100644 index 0000000..fd66593 --- /dev/null +++ b/src/main/java/weaver/interfaces/htsc/cus/AutoSignAction.java @@ -0,0 +1,314 @@ +package weaver.interfaces.htsc.cus; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import weaver.conn.RecordSet; +import weaver.file.ImageFileManager; +import weaver.general.BaseBean; +import weaver.general.GCONST; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.hrm.company.DepartmentComInfo; +import weaver.interfaces.htsc.GlobatTools.JAVATools; +import weaver.interfaces.htsc.GlobatTools.MessageDetailLog; +import weaver.interfaces.htsc.comInfo.PropBean; +import weaver.interfaces.workflow.action.Action; +import weaver.soa.workflow.request.Property; +import weaver.soa.workflow.request.RequestInfo; +import weaver.workflow.request.RequestManager; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * 自动签章流程接口 + */ +public class AutoSignAction extends BaseBean implements Action { private Log log = LogFactory.getLog(this.getClass()); + + @Override + public String execute(RequestInfo requestInfo) { + HTUtil htUtil = new HTUtil(); + + String requestid = Util.null2String(requestInfo.getRequestid());//流程请求ID + //流程标题 + String requestName = Util.null2String(requestInfo.getRequestManager().getRequestname()); + requestName=JAVATools.lengthsub(requestName,0,100); + String tableName = Util.null2String(requestInfo.getRequestManager().getBillTableName()); + //当前操作人(印章管理员) + User user = requestInfo.getRequestManager().getUser(); + MessageDetailLog messageDetailLog=new MessageDetailLog(tableName); + log.info("自动签章流程接口-----START-----" + requestid); + try { + PropBean pb = new PropBean(); + //应用ID + String appid = Util.null2String(pb.getPropName("AutoSign.appId")); + //秘钥 + String secret = Util.null2String(pb.getPropName("AutoSign.secret")); + //文件类型 + String doctype = Util.null2String(pb.getPropName("AutoSign.docType")); + //统一信用代码 + String code = Util.null2String(pb.getPropName("AutoSign.code")); + //增加dzyyfs用于keyword + String sql = "select id,sfcwgz,zwpdf,yz,sfcwgz,flowNum,qzbj,lcbh from " + tableName + " where requestid = "+requestid; + RecordSet rs = new RecordSet(); + rs.execute(sql); + rs.next(); + int heightMoveSize=0; + int moveSize=0; + try { + moveSize = Integer.parseInt(Util.null2String(pb.getPropName("AutoSign.moveSize"))); + heightMoveSize = Integer.parseInt(Util.null2String(pb.getPropName("AutoSign.heightMoveSize"))); + }catch (Exception exo){ + System.out.println("自动用印转换失败"); + } + String sfcwgz = Util.null2String(rs.getString("sfcwgz"));//是否盖章 0:是 1:否 + String zwpdf = Util.null2String(rs.getString("zwpdf")); + String flowNumWf = Util.null2String(rs.getString("flowNum"));// + String qzbj = Util.null2String(rs.getString("qzbj"));// + String lcbh=Util.null2String(rs.getString("lcbh")); + String keyword="华泰证券股份有限公司签章"; + if(!"".equals(qzbj)){ + keyword=qzbj; + } + if("".equals(zwpdf)){ + requestInfo.getRequestManager().setMessageid("111111"); + requestInfo.getRequestManager().setMessagecontent("请进行【定稿】操作!"); + return Action.FAILURE_AND_CONTINUE; + } + String yz = Util.null2String(rs.getString("yz")); + + if("0".equals(sfcwgz) && "".equals(flowNumWf)){//只有盖章的时候才会自动用印,避免重复用印 + if("".equals(yz)){ + requestInfo.getRequestManager().setMessageid("111111"); + requestInfo.getRequestManager().setMessagecontent("请选择印章后提交!"); + return Action.FAILURE_AND_CONTINUE; + }else if(!yz.contains(",")){//判断只有有且仅有一个印章的时候才会调用自动印章 + JSONObject obj = new JSONObject(); + obj.put("appId",appid); + obj.put("secret",secret); + obj.put("flowName",requestName); + obj.put("flowNum",lcbh);//这里流程编号修改成requestid + obj.put("needWatermark","ENABLE"); + JSONObject flowOwnerObj = new JSONObject(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + flowOwnerObj.put("flowSendTime",sdf.format(new Date())); + DepartmentComInfo dc = new DepartmentComInfo(); + //部门编码 + String orgId = Util.null2String(dc.getDepartmentCode(user.getUserDepartment()+"")); + flowOwnerObj.put("orgId",orgId); + //部门编码 + String orgName = Util.null2String(dc.getDepartmentName(user.getUserDepartment()+"")); + flowOwnerObj.put("orgName",orgName); + //姓名 + String personName = user.getLastname(); + //工号 + String personNum = user.getLoginid(); + personName+="("+personNum+")"; + flowOwnerObj.put("personName",personName); + flowOwnerObj.put("personNum",personNum); + obj.put("flowOwner",flowOwnerObj); + JSONArray docSignsArr = new JSONArray(); + JSONObject docObj = new JSONObject();//正文对象 + docObj.put("docId",zwpdf); + docObj.put("docType",doctype); + docObj.put("effectType","ELECTRONIC"); + Map pdfMap = getLatestVersionPDF(requestid,zwpdf); + if(pdfMap.isEmpty()){ + requestInfo.getRequestManager().setMessageid("111111"); + requestInfo.getRequestManager().setMessagecontent("上传挂载正文PDF文件出错!"); + return Action.FAILURE_AND_CONTINUE; + } + System.out.println("正文pdf文件上传成功"); + String fileAttachPatch = pdfMap.get("mountpath");//挂载出去的地址 + docObj.put("fileAttachPatch",fileAttachPatch); + String fileNameDisplay = pdfMap.get("imagefilename");//文件名称 + docObj.put("fileNameDisplay",fileNameDisplay); + JSONObject jsonContent = new JSONObject(); + docObj.put("jsonContent",jsonContent); + docObj.put("signMethod","ORDER"); + JSONArray signersArr = new JSONArray(); + JSONObject signersObj = new JSONObject(); + signersObj.put("code",code); + signersObj.put("codeType","USC"); + signersObj.put("revokeFlag","false"); + String yzcode = getSignCode(yz); + if("".equals(yzcode)){ + System.out.println("未找到对应的印章ID"); + requestInfo.getRequestManager().setMessageid("111111"); + requestInfo.getRequestManager().setMessagecontent("未找到对应的印章ID,请查看是否维护!"); + return Action.FAILURE_AND_CONTINUE; + } + signersObj.put("sealId",yzcode); + signersObj.put("signNum","1"); + signersObj.put("ownerType","INSIDE"); + signersObj.put("signatoryType","ENTERPRISE"); + signersObj.put("keyWord",keyword); + System.out.println("已添加keyword"); + signersObj.put("moveSize",moveSize); + signersObj.put("heightMoveSize",heightMoveSize); + System.out.println("已添加偏移量"); + signersObj.put("signMethod","TRUSTEESHIP"); + signersObj.put("signedExamine","DISABLE"); + signersArr.add(signersObj); + docObj.put("signers",signersArr); + docObj.put("validityStartDate",sdf.format(new Date())); + docObj.put("validityEndDate",getNextYear(sdf.format(new Date()),"yyyy-MM-dd HH:mm:ss",30)); + docSignsArr.add(docObj); + obj.put("docSigns",docSignsArr); + messageDetailLog.writLogsnotretrun(requestid,obj.toJSONString(),"1",messageDetailLog.Other); + String response = htUtil.doAutoSign(obj.toJSONString());//返回结果 + if("".equals(response)){ + requestInfo.getRequestManager().setMessageid("111111"); + requestInfo.getRequestManager().setMessagecontent("自动签章接口返回结果为空!"); + return Action.FAILURE_AND_CONTINUE; + } + JSONObject res = JSONObject.parseObject(response); + String status = Util.null2String(res.get("status"));//标识 200:成功 否则失败 + String message = Util.null2String(res.get("message")); + log.info("自动签章响应状态:"+status); + log.info("自动签章响应信息:"+message); + if(!"200".equals(status)){ + messageDetailLog.writeinseertLogs(requestid,obj.toJSONString(),"1",messageDetailLog.success,messageDetailLog.error,response); + requestInfo.getRequestManager().setMessageid("111111"); + requestInfo.getRequestManager().setMessagecontent("用印失败,请联系管理员处理!"); + return Action.FAILURE_AND_CONTINUE; + } + messageDetailLog.writeinseertLogs(requestid,obj.toJSONString(),"1",messageDetailLog.success,messageDetailLog.success,response); + JSONObject data = JSONObject.parseObject(Util.null2String(res.get("data"))); + String flowNum = Util.null2String(data.get("flowNum")); + JSONArray docIdsArr = JSONArray.parseArray(Util.null2String(data.get("docIds"))); + RecordSet rs_up = new RecordSet(); + String docidStr = ""; + for(int i=0;i getLatestVersionPDF(String requestid,String docid){ + Map map = new HashMap<>(); + PropBean pb = new PropBean(); + try{ + //取最大版本的正文信息 + String sql = "select t.* from (select imagefileid,imagefilename,versionid from docimagefile \n" + + "where docid = ? \n" + + "order by versionid desc) t where rownum < 2"; + RecordSet rs = new RecordSet(); + rs.executeQuery(sql,new Object[]{docid}); + if(rs.next()){ + String imagefileid = Util.null2String(rs.getString("imagefileid")); +// String imagefilename = Util.null2String(rs.getString("imagefilename")); + String imagefilename = docid+".pdf"; + String versionid = Util.null2String(rs.getString("versionid")); + log.info("正文:"+imagefilename+"的最新版本是:"+versionid); + InputStream inputstream = ImageFileManager.getInputStreamById(Util.getIntValue(imagefileid)); + int index; + byte[] bytes = new byte[1024]; + // 文件夹名称 + String folderName = requestid+"_"+docid+"_"+System.currentTimeMillis(); + String mountdir = Util.null2String(pb.getPropName("AutoSign.mountdir")); + if("".equals(mountdir)){ + log.info("获取的用印上传共享目录为空!"); + return map; + } + String path = mountdir+"/" + folderName; + // linux 下 先创建文件夹 + File dir = new File(path); + //设置写权限,windows下不用此语句 + dir.setWritable(true, false); + dir.mkdirs(); + //赋权限,正常是当前用户的权限,但是这里和之前的老OA不是同一个用户 + Runtime.getRuntime().exec("chmod -R 777 " + path); + path += "/"+imagefilename;//创建文件 + File file = new File(path); + if (file.exists()) { + file.delete(); + } +// file.createNewFile(); + 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); + log.info("正文imagefilename:"+imagefilename); + log.info("正文realpath:"+path); + log.info("正文mountpath:"+imagefilename); + map.put("imagefilename",folderName+"/"+imagefilename); + map.put("realpath",path); + String Signmountpath = Util.null2String(pb.getPropName("Signmountpath")); + String mountpath=Signmountpath+folderName+"/"+imagefilename; + map.put("mountpath",mountpath); + } + }catch (Exception e){ + e.printStackTrace(); + } + return map; + } + + /** + * 印章ID转印章编号 + * @param signid 印章ID + * @return 印章编号 + */ + private String getSignCode(String signid){ + RecordSet rs = new RecordSet(); + rs.executeQuery("select yzbh from uf_yinzhang where id = ?",new Object[]{signid}); + rs.next(); + return Util.null2String(rs.getString("yzbh")); + } + + /** + * 取具体日期的后多少年日期 + * @param dateStr 参照日期 + * @param pattern 日期格式 + * @param num 几年 + * @return 几年后的日期 + */ + private String getNextYear(String dateStr,String pattern,int num) { + SimpleDateFormat sdf = new SimpleDateFormat(pattern); + try { + Date date = sdf.parse(dateStr); + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + cal.add(Calendar.YEAR, num); + return sdf.format(cal.getTime()); + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return ""; + } + } + +} diff --git a/src/main/java/weaver/interfaces/htsc/financialadjustment/ApproveAction.java b/src/main/java/weaver/interfaces/htsc/financialadjustment/ApproveAction.java new file mode 100644 index 0000000..6f23f0e --- /dev/null +++ b/src/main/java/weaver/interfaces/htsc/financialadjustment/ApproveAction.java @@ -0,0 +1,63 @@ +package weaver.interfaces.htsc.financialadjustment; + +import org.apache.commons.lang3.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.interfaces.workflow.action.Action; +import weaver.soa.workflow.request.RequestInfo; +import weaver.workflow.request.RequestManager; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * k1810012 + * + * 取明细表3的dcbm调出部门、drbm调入部门与uf_cwkhtz表中sdbm匹配,取jhcwbshr字段 + * dcbm调出部门、drbm调入部门需要过滤掉计划财务部(16) + * + */ +public class ApproveAction implements Action { + + @Override + public String execute(RequestInfo requestInfo) { + RecordSet rs = new RecordSet(); + String rid = requestInfo.getRequestid(); + RequestManager rm = requestInfo.getRequestManager(); + String tableName = rm.getBillTableName(); + int billid = rm.getBillid(); + rs.writeLog(String.format("ApproveAction -- requestid:%s; billid:%s;", rid, billid)); + try { + List departs = new ArrayList<>(); + rs.executeQuery("SELECT DCBM,DRBM FROM "+tableName+"_dt3 where mainid=?", billid); + while (rs.next()) { + departs.add(Util.null2String(rs.getString("DCBM"))); + departs.add(Util.null2String(rs.getString("DRBM"))); + } + String departss = departs.stream() + .distinct() + .filter(StringUtils::isNotBlank) + .filter(d -> !d.equals("16")).collect(Collectors.joining("','")); + rs.executeQuery("SELECT SDBM,JHCWBSHR FROM uf_cwkhtz WHERE SDBM IN ('"+departss+"')"); + List shrs = new ArrayList<>(); + while (rs.next()) { + shrs.add(Util.null2String(rs.getString("JHCWBSHR"))); + } + String shrss = shrs.stream() + .distinct() + .filter(StringUtils::isNotBlank) + .collect(Collectors.joining(",")); + rs.writeLog(String.format("查询审核人,SDBM:%s; shrs:%s", departss, shrss)); + boolean b = rs.executeUpdate( + "UPDATE " + tableName + " set jhcwbshr='" + shrss + "' WHERE ID =?", billid); + + rs.writeLog("更新审批链:" + b); + return SUCCESS; + } catch (Exception e) { + rm.setMessagecontent( "节点任务,ApproveAction出现异常,请联系管理员!"); + rs.errorLog("节点任务,ApproveAction出现异常", e); + return FAILURE_AND_CONTINUE; + } + } +} diff --git a/src/main/java/weaver/interfaces/htsc/payment/BillSummaryAction.java b/src/main/java/weaver/interfaces/htsc/payment/BillSummaryAction.java new file mode 100644 index 0000000..8144d23 --- /dev/null +++ b/src/main/java/weaver/interfaces/htsc/payment/BillSummaryAction.java @@ -0,0 +1,128 @@ +package weaver.interfaces.htsc.payment; + +import com.alibaba.fastjson.JSONObject; +import com.engine.htsc.common.utils.DoubleUtil; +import com.engine.htsc.payment.pojo.InvoiceData; +import org.apache.commons.collections4.CollectionUtils; +import weaver.conn.RecordSet; +import weaver.conn.RecordSetTrans; +import weaver.general.BaseBean; +import weaver.general.Util; +import weaver.interfaces.workflow.action.Action; +import weaver.soa.workflow.request.RequestInfo; +import weaver.workflow.request.RequestManager; + +import java.util.*; +import java.util.stream.Collectors; + + +/** + * k1810012 + *

+ * 票据汇总action + * 提交节点后,数据用后台方式重新计算一次 + */ +public class BillSummaryAction extends BaseBean implements Action { + + @Override + public String execute(RequestInfo requestInfo) { + String rid = requestInfo.getRequestid(); + RequestManager rm = requestInfo.getRequestManager(); + String tableName = rm.getBillTableName(); + writeLog(String.format("票据汇总,requestid:%s; tableName=%s", rid, tableName)); + + RecordSet rs = new RecordSet(); + + + try { + String sql = "select t1.mainid,t1.FPLX,t1.JSHJ,t1.SE from " + tableName + "_DT5 t1\n" + + "left join " + tableName + " t2\n" + + "on t1.MAINID=t2.ID\n" + + "where t2.REQUESTID=?"; + + rs.executeQuery(sql, rid); + + List dataList = new ArrayList<>(); + String mainid = ""; + while (rs.next()) { + mainid = rs.getString("mainid"); + InvoiceData invoiceData = new InvoiceData(); + invoiceData.setType(Util.null2String(rs.getString("FPLX"))); + invoiceData.setPriceTax(Util.null2String(rs.getString("JSHJ"), "0.00")); + invoiceData.setTaxes(Util.null2String(rs.getString("SE"), "0.00")); + dataList.add(invoiceData); + } + + //表6同步汇总 + sql = "select t1.mainid,t1.FPLX,t1.KPJE,t1.SE from " + tableName + "_DT6 t1\n" + + "left join " + tableName + " t2\n" + + "on t1.MAINID=t2.ID\n" + + "where t2.REQUESTID=?"; + rs.executeQuery(sql, rid); + while (rs.next()) { + InvoiceData invoiceData = new InvoiceData(); + invoiceData.setType(Util.null2String(rs.getString("FPLX"))); + invoiceData.setPriceTax(Util.null2String(rs.getString("KPJE"), "0.00")); + invoiceData.setTaxes(Util.null2String(rs.getString("SE"), "0.00")); + dataList.add(invoiceData); + } + + //分组数据 + List packetData = dataList.stream().collect(Collectors.groupingBy(InvoiceData::getType, + Collectors.reducing((sum, data) -> + new InvoiceData(sum.getType(), + String.valueOf(DoubleUtil.add(sum.getPriceTax(), data.getPriceTax(), 2)), + String.valueOf(DoubleUtil.add(sum.getTaxes(), data.getTaxes(), 2)))) + )).values().stream().map(Optional::get).collect(Collectors.toList()); + + writeLog(String.format("packetData:%s", JSONObject.toJSONString(packetData))); + + //批量插入 + savePacketData(packetData, tableName, mainid); + + return SUCCESS; + } catch (Exception e) { + rm.setMessagecontent("票据汇总信息计算错误,原因:" + e.getMessage()); + rm.setMessageid("500"); + return FAILURE_AND_CONTINUE; + + } + + } + + /** + * 删除后 批量插入 + * + * @param packetData 数据 + * @throws Exception 错误信息 + */ + private void savePacketData(List packetData, String tableName, String mainId) throws Exception { + if (CollectionUtils.isNotEmpty(packetData)) { + RecordSetTrans rst = new RecordSetTrans(); + rst.setAutoCommit(false); + String save = "insert into " + tableName + "_DT7 (MAINID,JSHJZE,BHSHJ,SJHJ,PJLX)\n" + + "values(?,?,?,?,?)"; + List> paramList = new ArrayList<>(); + packetData.forEach(item -> { + List valueList = new ArrayList<>(); + valueList.add(mainId); + valueList.add(item.getPriceTax()); //价税 + valueList.add(String.valueOf(DoubleUtil.sub(item.getPriceTax(), item.getTaxes(), 2))); //价 + valueList.add(item.getTaxes()); //税 + valueList.add(item.getType()); + paramList.add(valueList); + }); + + try { + rst.executeUpdate("delete " + tableName + "_DT7 where MAINID=?", mainId); + rst.executeBatchSql(save, paramList); + rst.commit(); + } catch (Exception e) { + rst.rollback(); + throw new Exception("savePacketData error:" + e.getMessage()); + } + + } + + } +} diff --git a/src/main/java/weaver/interfaces/htsc/workflow/BankAccountHistoryHKAction.java b/src/main/java/weaver/interfaces/htsc/workflow/BankAccountHistoryHKAction.java new file mode 100644 index 0000000..c0b1d99 --- /dev/null +++ b/src/main/java/weaver/interfaces/htsc/workflow/BankAccountHistoryHKAction.java @@ -0,0 +1,116 @@ +package weaver.interfaces.htsc.workflow; + +import com.engine.htsc.payment.util.PayUtil; +import weaver.conn.RecordSet; +import weaver.formmode.setup.ModeRightInfo; +import weaver.general.BaseBean; +import weaver.general.TimeUtil; +import weaver.general.Util; +import weaver.hrm.resource.ResourceComInfo; +import weaver.interfaces.workflow.action.Action; +import weaver.soa.workflow.request.RequestInfo; + +import java.util.UUID; + +/** + * Created by K1810006 on 2020/9/17. + */ +public class BankAccountHistoryHKAction extends BaseBean implements Action{ + + + @Override + public String execute(RequestInfo requestInfo) { + String tablename = requestInfo.getRequestManager().getBillTableName(); + String requestid = requestInfo.getRequestid(); + int workflowid = Util.getIntValue(requestInfo.getWorkflowid()); + + RecordSet rs = new RecordSet(); + String wfunnumber = PayUtil.getUnNumberByWorkFlowId(workflowid); + if("xgtybx".equals(wfunnumber)){ + String dataSql = " select ngr,ygxm,bm,yxzh,khx,'' skdw from "+tablename+" a,"+tablename+"_dt11 b \n" + + "where a.id=b.mainid and a.requestid=? "; + rs.executeQuery(dataSql,requestid); + } + + if("xgtyfk".equals(wfunnumber)){ + String dataSql = " select ngr,'' ygxm,'' bm,yxzh,khx,skdw from "+tablename+" a,"+tablename+"_dt11 b \n" + + "where a.id=b.mainid and a.requestid=? "; + rs.executeQuery(dataSql,requestid); + } + + inserBankAccount(rs); + return Action.SUCCESS; + } + + + /** + * 是否重复,银行卡号付款单位,创建人,为唯一区别 + * + * @return boolean + */ + public boolean isRepeat(String yxzh) { + boolean flag = false; + RecordSet rs = new RecordSet(); + rs.executeQuery("select id from uf_xgyhlsjl where yxzh=? ",yxzh); + if (rs.next()) { + flag = true; + } + return flag; + } + + + public void inserBankAccount(RecordSet rs){ + try{ + ResourceComInfo resComInfo = new ResourceComInfo(); + RecordSet rs2 = new RecordSet(); + int formModeId = PayUtil.getFormModeIdByCubeName("uf_xgyhlsjl"); + String uuid = UUID.randomUUID().toString(); + String createdate = TimeUtil.getCurrentDateString(); + String createtime = TimeUtil.getOnlyCurrentTimeString(); + String insertSql = "insert into uf_xgyhlsjl(ygxm,bm,yxzh,khx,skdw,workcode,formmodeid,modedatacreater," + + "modedatacreatertype,modedatacreatedate,modedatacreatetime,modeuuid) \n" + + "values(?,?,?,?,?,?,?,?,?,?,?,?)"; + while (rs.next()){ + String yxzh = Util.null2String(rs.getString("yxzh")); + if(isRepeat(yxzh)){ + continue; + } + int ngr = Util.getIntValue(rs.getString("ngr")); + String workcode = resComInfo.getWorkcode(ngr+""); + String ygxm = Util.null2String(rs.getString("ygxm")); + String bm = Util.null2String(rs.getString("bm")); + String skdw = Util.null2String(rs.getString("skdw")); + String khx = Util.null2String(rs.getString("khx")); + boolean result = rs2.executeUpdate(insertSql,new Object[]{ygxm,bm,yxzh,khx,skdw,workcode,formModeId,ngr,0,createdate,createtime,uuid}); + if(result){ + rebuildRight(ngr,formModeId,uuid); + } + } + }catch (Exception e) { + + } + + + } + + + /** + * 建模数据权限重构 + * @param creater + * @param formModeId + * @param uuid + */ + public void rebuildRight(int creater,int formModeId, String uuid) { + RecordSet rs = new RecordSet(); + rs.executeQuery(" select id from uf_xgyhlsjl where modeuuid=?",uuid); + rs.next(); + int id = rs.getInt("id"); + if(id>0){ + ModeRightInfo modeRightInfo = new ModeRightInfo(); + modeRightInfo.editModeDataShare(creater, formModeId, id); + } + } + + + +} diff --git a/src/main/java/weaver/interfaces/htsc/wpscenter/convert/BaseConvert.java b/src/main/java/weaver/interfaces/htsc/wpscenter/convert/BaseConvert.java new file mode 100644 index 0000000..7c58305 --- /dev/null +++ b/src/main/java/weaver/interfaces/htsc/wpscenter/convert/BaseConvert.java @@ -0,0 +1,118 @@ +package weaver.interfaces.htsc.wpscenter.convert; + +import net.sf.json.JSONObject; +import weaver.hrm.User; +import weaver.interfaces.htsc.wpscenter.utils.*; +import weaver.systeminfo.SystemEnv; +import weaver.workflow.logging.Logger; +import weaver.workflow.logging.LoggerFactory; + +import java.util.HashMap; +import java.util.Map; + +public class BaseConvert { + + private Logger log = LoggerFactory.getLogger(BaseConvert.class); + + private TaskUtil task ; + + private User user; + + public BaseConvert(){ + task = new TaskUtil(); + } + + /** + * 构造函数,用户基本上是用于获取多语言 + * @param user + */ + public BaseConvert(User user){ + this(); + this.user = user; + task.setUser(user); + } + + public User getUser() { + return user; + } + + public BaseConvert setUser(User user) { + this.user = user; + task.setUser(user); + return this; + } + + public Logger getLog() { + return log; + } + + public BaseConvert setLog(Logger log) { + this.log = log; + return this; + } + + public Map convert(String apiUrl, JSONObject requestParams, String targetFilename, Map params) throws Exception { + Map result = new HashMap(); + + if(null == requestParams || requestParams.isEmpty()){ + throw new IllegalArgumentException("the argument requestParams can't be null or empty!"); + } + TokenUtil tokenUtil = new TokenUtil(); + String appToken = tokenUtil.getFileFormatToken(user); + apiUrl = apiUrl + "?app_token=" + appToken; + + HttpUtil httpUtil = new HttpUtil(user); + requestParams.put("task_id", task.getTask_id()); + + // 请求接口转换文档 + JSONObject response = httpUtil.post(apiUrl, requestParams, null); + + String code = Tools.getJsonData(response, "result"); + if(Config.isLogInfo()) { + log.info("调用接口结果:" + response); + } + + if(!"0".equals(code)){ + String message = Tools.getJsonData(response, "msg"); + result.put("response", response.toString()); + result.put("status", code); + result.put("message", message); + result.put("messageid", code); + return response; + } + + JSONObject taskResult = task.waitForTaskResult(); + code = Tools.getJsonData(taskResult, "result"); + if(!"0".equals(code)){ + return taskResult; + } + + boolean onlyDownloadUrl = "true".equals(params.get("onlyDownloadUrl")); + + // 文件下载地址,预览时用不到 + String download = Tools.getJsonData(taskResult, "download_id"); + if("".equals(download)) { + result.put("response", response.toString()); + result.put("status", "514617"); + result.put("message", SystemEnv.getHtmlLabelName(514617, Tools.getUserLanguageid(user))); + result.put("messageid", "514617"); + return result; + } else if(onlyDownloadUrl) { + result.put("status", "0"); + result.put("downloadUrl", Config.getCpsV1DownloadFile() + Config.URL_SEPARATOR + download); + return result; + } + + int newImagefileId = httpUtil.getFileFromRomoteForWPSDoccenter(Config.getCpsV1DownloadFile() + Config.URL_SEPARATOR + download, targetFilename, null); + if(newImagefileId > 0) { + result.put("status", "0"); + result.put("imagefileid", newImagefileId+""); + } else { + result.put("response", response.toString()); + result.put("status", "514617"); + result.put("message", SystemEnv.getHtmlLabelName(514617, Tools.getUserLanguageid(user))); + result.put("messageid", "514617"); + } + return result; + } +} diff --git a/src/main/java/weaver/interfaces/htsc/zbgg/action/ApproveBulletinAction.java b/src/main/java/weaver/interfaces/htsc/zbgg/action/ApproveBulletinAction.java new file mode 100644 index 0000000..2af8bc6 --- /dev/null +++ b/src/main/java/weaver/interfaces/htsc/zbgg/action/ApproveBulletinAction.java @@ -0,0 +1,145 @@ +package weaver.interfaces.htsc.zbgg.action; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +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.comInfo.PropBean; +import weaver.interfaces.htsc.cus.HTUtil; +import weaver.interfaces.workflow.action.Action; +import weaver.soa.workflow.request.RequestInfo; +import weaver.workflow.request.RequestManager; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +public class ApproveBulletinAction extends BaseBean implements Action { + private Log log = LogFactory.getLog(this.getClass()); + @Override + public String execute(RequestInfo requestInfo) { + HTUtil htUtil = new HTUtil(); + String requestid = Util.null2String(requestInfo.getRequestid()); + RequestManager requestManager = requestInfo.getRequestManager(); + PropBean propBean = new PropBean(); + String ApproveBulletin = propBean.getPropName("getInfoToIbull"); //测试环境ip地址 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //获取主表名 + String tableName = requestManager.getBillTableName(); + log.info("tableName: "+tableName+"==requestid "+requestid); + + //主表 + Long id; + String ggbh = ""; + String oaId = ""; + Short status = 3; + String zw = ""; + String fj = ""; + String badge = ""; + String name = ""; + JSONObject datas = new JSONObject(); + RecordSet rs = new RecordSet(); + try { + String mainsql = "select a.ggbh as ggbh,a.lcbh as lcbh,a.zw as zw,a.fj as fj,b.loginid as badge,b.lastname as name from " + tableName + " a,hrmresource b where a.ngr = b.id and requestid = " + requestid; + rs.execute(mainsql); + log.info("查询主表sql: " + mainsql); + if(rs.next()){ + ggbh = Util.null2String(rs.getString("ggbh")); + oaId = Util.null2String(rs.getString("lcbh")); + zw = Util.null2String(rs.getString("zw")); + fj = Util.null2String(rs.getString("fj")); + badge = Util.null2String(rs.getString("badge")); + name = Util.null2String(rs.getString("name")); + } + if(!"".equals(ggbh)){ + id = Long.parseLong(ggbh); + datas.put("id",id); + datas.put("oaId",oaId); + datas.put("status",status); + //正文 + JSONArray bulletinAnnexArray = new JSONArray(); + JSONObject fileObject = new JSONObject(); + String zwName = ""; + String zwfileId = ""; + String zwuploadTime = ""; + String zwsql = "select a.imagefilename as filename,a.operatedate as operatedate,a.operatetime as operatetime,b.fileid as fileid from docimagefile a, imagefile b where a.imagefileid = b.imagefileid and docid =" + zw; + rs.execute(zwsql); + if(rs.next()){ + zwName = Util.null2String(rs.getString("filename")); + zwfileId = Util.null2String(rs.getString("fileid")); + zwuploadTime = Util.null2String(rs.getString("operatedate")) + " " + Util.null2String(rs.getString("operatetime")); + } + + Date uploadTime1 = new Date(); + try { + uploadTime1 = sdf.parse(zwuploadTime); + }catch (Exception e) { + log.error("正文上传时间转换date格式异常"); + e.printStackTrace(); + } + fileObject.put("annexName",zwName); + fileObject.put("annexCeName",zwName); + fileObject.put("annexCeId",zwfileId); + fileObject.put("annexType",1); + fileObject.put("uploadPname",name); + fileObject.put("uploadWorkno",badge); + fileObject.put("uploadTime",uploadTime1); + bulletinAnnexArray.add(fileObject); + + //附件 + if(!"".equals(fj)){ + String[] split = fj.split(","); + for(String value : split){ + JSONObject attachObject = new JSONObject(); + String fjname = ""; + String fjfileid = ""; + String fjuploadTime = ""; + String fjsql = "select a.imagefilename as filename,a.operatedate as operatedate,a.operatetime as operatetime,b.fileid as fileid from docimagefile a, imagefile b where a.imagefileid = b.imagefileid and docid =" + value;; + rs.execute(fjsql); + if(rs.next()){ + fjname = Util.null2String(rs.getString("filename")); + fjfileid = Util.null2String(rs.getString("fileid")); + fjuploadTime = Util.null2String(rs.getString("operatedate")) + " " + Util.null2String(rs.getString("operatetime")); + } + Date uploadTime2 = new Date(); + try { + uploadTime2 = sdf.parse(fjuploadTime); + }catch (Exception e) { + log.error("附件上传时间转换date格式异常"); + e.printStackTrace(); + } + attachObject.put("annexName",fjname); + attachObject.put("annexCeName",fjname); + attachObject.put("annexCeId",fjfileid); + attachObject.put("annexType",2); + attachObject.put("uploadPname",name); + attachObject.put("uploadWorkno",badge); + attachObject.put("uploadTime",uploadTime2); + bulletinAnnexArray.add(attachObject); + } + } + + datas.put("bulletinAnnex",bulletinAnnexArray); + log.info("参数详情"+requestid+"==="+datas.toString()); + + + String encode = "utf-8"; + Map headers = new HashMap<>(); + log.info("url:"+ApproveBulletin); + String content = htUtil.httpPostRaw(ApproveBulletin, datas.toString(), headers, encode); + log.info("content结果集:"+ content); + }else{ + log.info("公告编号为空,该流程非外部平台触发,无需回调接口"); + } + }catch (Exception e) { + e.printStackTrace(); + return Action.FAILURE_AND_CONTINUE; + } + + return Action.SUCCESS; + } +} diff --git a/src/main/resources/ApplicationContext.xml b/src/main/resources/ApplicationContext.xml new file mode 100644 index 0000000..40c17b3 --- /dev/null +++ b/src/main/resources/ApplicationContext.xml @@ -0,0 +1,17 @@ + + + + + + + + + + +