Bläddra i källkod

发票调整,电子发票报销调整

user5 1 år sedan
förälder
incheckning
a30dbc49a2
67 ändrade filer med 23724 tillägg och 400 borttagningar
  1. 34 0
      src/main/java/com/jeeplus/modules/filialeWorkInvoice/dao/FilialeWorkInvoiceAlterDao.java
  2. 147 0
      src/main/java/com/jeeplus/modules/filialeWorkInvoice/dao/FilialeWorkInvoiceDao.java
  3. 51 0
      src/main/java/com/jeeplus/modules/filialeWorkInvoice/dao/FilialeWorkInvoiceDetailDao.java
  4. 18 0
      src/main/java/com/jeeplus/modules/filialeWorkInvoice/dao/FilialeWorkInvoiceReceiptDao.java
  5. 32 0
      src/main/java/com/jeeplus/modules/filialeWorkInvoice/dao/FilialeWorkInvoiceReturnDao.java
  6. 781 0
      src/main/java/com/jeeplus/modules/filialeWorkInvoice/entity/FilialeWorkInvoice.java
  7. 430 0
      src/main/java/com/jeeplus/modules/filialeWorkInvoice/entity/FilialeWorkInvoiceAlter.java
  8. 552 0
      src/main/java/com/jeeplus/modules/filialeWorkInvoice/entity/FilialeWorkInvoiceDetail.java
  9. 110 0
      src/main/java/com/jeeplus/modules/filialeWorkInvoice/entity/FilialeWorkInvoiceProjectRelation.java
  10. 48 0
      src/main/java/com/jeeplus/modules/filialeWorkInvoice/entity/FilialeWorkInvoiceReceipt.java
  11. 240 0
      src/main/java/com/jeeplus/modules/filialeWorkInvoice/entity/FilialeWorkInvoiceReturn.java
  12. 249 0
      src/main/java/com/jeeplus/modules/filialeWorkInvoice/entity/FilialeWorkInvoiceReturnAlter.java
  13. 801 0
      src/main/java/com/jeeplus/modules/filialeWorkInvoice/service/FilialeWorkInvoiceAlterService.java
  14. 766 0
      src/main/java/com/jeeplus/modules/filialeWorkInvoice/service/FilialeWorkInvoiceDetailService.java
  15. 794 0
      src/main/java/com/jeeplus/modules/filialeWorkInvoice/service/FilialeWorkInvoiceReturnService.java
  16. 3578 0
      src/main/java/com/jeeplus/modules/filialeWorkInvoice/service/FilialeWorkInvoiceService.java
  17. 1487 0
      src/main/java/com/jeeplus/modules/filialeWorkInvoice/web/FilialeWorkInvoiceController.java
  18. 459 0
      src/main/java/com/jeeplus/modules/filialeWorkInvoice/web/FilialeWorkInvoiceReturnController.java
  19. 8 0
      src/main/java/com/jeeplus/modules/sys/dao/OfficeDao.java
  20. 7 0
      src/main/java/com/jeeplus/modules/sys/dao/UserDao.java
  21. 47 0
      src/main/java/com/jeeplus/modules/sys/service/OfficeService.java
  22. 16 0
      src/main/java/com/jeeplus/modules/sys/service/SystemService.java
  23. 100 0
      src/main/java/com/jeeplus/modules/sys/web/OfficeController.java
  24. 18 16
      src/main/java/com/jeeplus/modules/sys/web/UserController.java
  25. 7 0
      src/main/java/com/jeeplus/modules/workinvoice/dao/WorkInvoiceDao.java
  26. 11 0
      src/main/java/com/jeeplus/modules/workinvoice/entity/WorkInvoice.java
  27. 36 0
      src/main/java/com/jeeplus/modules/workinvoice/service/WorkInvoiceService.java
  28. 64 0
      src/main/java/com/jeeplus/modules/workinvoice/web/WorkInvoiceTwoController.java
  29. 128 282
      src/main/java/com/jeeplus/modules/workprojectnotify/web/WorkProjectNotifyController.java
  30. 1 1
      src/main/java/com/jeeplus/modules/workreimbursement/service/WorkReimbursementNewService.java
  31. 6 1
      src/main/java/com/jeeplus/modules/workreimbursement/service/WorkReimbursementService.java
  32. 456 0
      src/main/resources/mappings/modules/filialeWorkInvoice/FilialeWorkInvoiceAlterDao.xml
  33. 2623 0
      src/main/resources/mappings/modules/filialeWorkInvoice/FilialeWorkInvoiceDao.xml
  34. 617 0
      src/main/resources/mappings/modules/filialeWorkInvoice/FilialeWorkInvoiceDetailDao.xml
  35. 92 0
      src/main/resources/mappings/modules/filialeWorkInvoice/FilialeWorkInvoiceReceiptDao.xml
  36. 221 0
      src/main/resources/mappings/modules/filialeWorkInvoice/FilialeWorkInvoiceReturnDao.xml
  37. 4 0
      src/main/resources/mappings/modules/sys/OfficeDao.xml
  38. 34 0
      src/main/resources/mappings/modules/sys/UserDao.xml
  39. 10 2
      src/main/resources/mappings/modules/workinvoice/WorkInvoiceDao.xml
  40. 47 11
      src/main/resources/mappings/modules/workprojectnotify/WorkProjectNotifyDao.xml
  41. 500 0
      src/main/webapp/webpage/modules/filialeWorkInvoice/filialeConditionWorkInvoiceAudit.jsp
  42. 670 0
      src/main/webapp/webpage/modules/filialeWorkInvoice/filialeConditionWorkInvoiceForm.jsp
  43. 684 0
      src/main/webapp/webpage/modules/filialeWorkInvoice/filialeConditionWorkInvoiceModify.jsp
  44. 689 0
      src/main/webapp/webpage/modules/filialeWorkInvoice/filialeWorkInvoiceAudit.jsp
  45. 987 0
      src/main/webapp/webpage/modules/filialeWorkInvoice/filialeWorkInvoiceAuditEnd.jsp
  46. 1444 0
      src/main/webapp/webpage/modules/filialeWorkInvoice/filialeWorkInvoiceForm.jsp
  47. 951 0
      src/main/webapp/webpage/modules/filialeWorkInvoice/filialeWorkInvoiceList.jsp
  48. 1195 0
      src/main/webapp/webpage/modules/filialeWorkInvoice/filialeWorkInvoiceModify.jsp
  49. 102 0
      src/main/webapp/webpage/modules/filialeWorkInvoice/filialeWorkInvoiceProjectView.jsp
  50. 689 0
      src/main/webapp/webpage/modules/filialeWorkInvoice/filialeWorkInvoiceReceiptForm.jsp
  51. 493 0
      src/main/webapp/webpage/modules/filialeWorkInvoice/filialeWorkInvoiceView.jsp
  52. 5 5
      src/main/webapp/webpage/modules/workinvoice/workInvoiceAllForm.jsp
  53. 5 5
      src/main/webapp/webpage/modules/workinvoice/workInvoiceAllModify.jsp
  54. 5 5
      src/main/webapp/webpage/modules/workinvoice/workInvoiceAllTwoForm.jsp
  55. 2 2
      src/main/webapp/webpage/modules/workinvoice/workInvoiceAuditEnd.jsp
  56. 5 5
      src/main/webapp/webpage/modules/workinvoice/workInvoiceExamineModify.jsp
  57. 2 2
      src/main/webapp/webpage/modules/workinvoice/workInvoiceNotProjectAuditEnd.jsp
  58. 5 5
      src/main/webapp/webpage/modules/workinvoice/workInvoiceNotProjectModify.jsp
  59. 14 14
      src/main/webapp/webpage/modules/workinvoice/workInvoiceTwoForm.jsp
  60. 51 2
      src/main/webapp/webpage/modules/workinvoice/workInvoiceTwoList.jsp
  61. 5 5
      src/main/webapp/webpage/modules/workinvoice/workInvoiceTwoModify.jsp
  62. 1 1
      src/main/webapp/webpage/modules/workinvoice/workInvoiceView.jsp
  63. 19 8
      src/main/webapp/webpage/modules/workreimbursement/new/workReimbursementElectronicInvoiceReimbursementModifyApply.jsp
  64. 19 8
      src/main/webapp/webpage/modules/workreimbursement/new/workReimbursementNewFormAdd.jsp
  65. 17 6
      src/main/webapp/webpage/modules/workreimbursement/new/workReimbursementNewModifyApply.jsp
  66. 17 6
      src/main/webapp/webpage/modules/workreimbursement/workReimbursementFormAdd.jsp
  67. 18 8
      src/main/webapp/webpage/modules/workreimbursement/workReimbursementModifyApply.jsp

+ 34 - 0
src/main/java/com/jeeplus/modules/filialeWorkInvoice/dao/FilialeWorkInvoiceAlterDao.java

@@ -0,0 +1,34 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.filialeWorkInvoice.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.filialeWorkInvoice.entity.FilialeWorkInvoiceAlter;
+import com.jeeplus.modules.workbidproject.entity.WorkBidProject;
+import com.jeeplus.modules.workclientinfo.entity.WorkClientInfo;
+
+import java.util.List;
+
+/**
+ * 开票管理DAO接口
+ * @author 孟祥越
+ * @version 2017-05-05
+ */
+@MyBatisDao
+public interface FilialeWorkInvoiceAlterDao extends CrudDao<FilialeWorkInvoiceAlter> {
+
+	public List<WorkClientInfo> findListByclient(WorkClientInfo client);
+	public List<WorkBidProject> findListByproject(WorkBidProject project);
+	
+	public FilialeWorkInvoiceAlter getByProcInsId(String procInsId);
+	
+	/**
+	 * 更新流程实例ID
+	 * @param
+	 * @return
+	 */
+	public int updateProcessInstanceId(FilialeWorkInvoiceAlter workInvoice);
+	
+}

+ 147 - 0
src/main/java/com/jeeplus/modules/filialeWorkInvoice/dao/FilialeWorkInvoiceDao.java

@@ -0,0 +1,147 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.filialeWorkInvoice.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.filialeWorkInvoice.entity.FilialeWorkInvoice;
+import com.jeeplus.modules.filialeWorkInvoice.entity.FilialeWorkInvoiceProjectRelation;
+import com.jeeplus.modules.statement.entity.StatementCompanyComprehensiveInfo;
+import com.jeeplus.modules.workbidproject.entity.WorkBidProject;
+import com.jeeplus.modules.workclientinfo.entity.WorkClientInfo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 开票管理DAO接口
+ * @author 孟祥越
+ * @version 2017-05-05
+ */
+@MyBatisDao
+public interface FilialeWorkInvoiceDao extends CrudDao<FilialeWorkInvoice> {
+	/**
+	 * 新的查询方法
+	 * @param workInvoice
+	 * @return
+	 */
+	public List<FilialeWorkInvoice> findListNew(FilialeWorkInvoice workInvoice);
+	/**
+	 * 分页查询总数
+	 * @param workInvoice
+	 * @return
+	 */
+	public Integer queryCountNew(FilialeWorkInvoice workInvoice);
+
+	public List<WorkClientInfo> findListByclient(WorkClientInfo client);
+	public List<WorkBidProject> findListByproject(WorkBidProject project);
+
+	public FilialeWorkInvoice getByProcInsId(String procInsId);
+
+	/**
+	 * 更新流程实例ID
+	 * @param
+	 * @return
+	 */
+	public int updateProcessInstanceId(FilialeWorkInvoice workInvoice);
+
+	/**
+	 * 修改日期信息
+	 * @param workInvoice
+	 * @return
+	 */
+	public int updateDate(FilialeWorkInvoice workInvoice);
+
+	/**
+	 * 删除作废操作
+	 * @param workInvoice
+	 */
+	void cancellationDelete(FilialeWorkInvoice workInvoice);
+
+	/**
+	 * 财务收款操作
+	 * @param workInvoice
+	 */
+	void receiptMoney(FilialeWorkInvoice workInvoice);
+
+	/**
+	 * 财务部分收款操作
+	 * @param workInvoice
+	 */
+	void updateInvoiceReceipt(FilialeWorkInvoice workInvoice);
+
+	/**
+	 * 撤回财务确认收款操作
+	 * @param workInvoice
+	 */
+	void cancelReceiptMoney(FilialeWorkInvoice workInvoice);
+
+	/**
+	 * 根据开票id查询所有开票项目 关联信息
+	 * @param invoiceId
+	 * @return
+	 */
+	List<FilialeWorkInvoiceProjectRelation> getProjectRelation(String invoiceId);
+
+	/**
+	 * 根据开票id删除所有开票项目 关联信息
+	 * @param invoiceId
+	 * @return
+	 */
+	int deleteProjectRelation(String invoiceId);
+
+	/**
+	 * 新增开票和项目关联信息
+	 * @param projectRelation
+	 * @return
+	 */
+	int insertProjectRelation(FilialeWorkInvoiceProjectRelation projectRelation);
+
+	/**
+	 * 查询已通过的所有发票的开票金额总和
+	 * @param workInvoice
+	 * @return
+	 */
+	String getSumMoney(FilialeWorkInvoice workInvoice);
+
+	/**
+	 * 导出数据查询
+	 * @param workInvoice
+	 * @return
+	 */
+	List<FilialeWorkInvoice> findListOnExport(FilialeWorkInvoice workInvoice);
+
+	List<FilialeWorkInvoice> findListExport(FilialeWorkInvoice workInvoice);
+
+	List<FilialeWorkInvoice> findMapList(FilialeWorkInvoice workInvoice);
+	Integer queryMapCount(FilialeWorkInvoice workInvoice);
+
+
+	/**
+	 * 根据项目id查询该项目所有发票记录信息以及发票状态
+	 * @param projectId
+	 * @return
+	 */
+	Integer getProjectRelationListByProjectId(String projectId);
+
+	//公司级 查询开票报表
+	List<FilialeWorkInvoice> findBillingReportPage(@Param("FilialeWorkInvoice") FilialeWorkInvoice workInvoice,@Param("officeIdd") String officeIdd, @Param("beginDate")String beginDate, @Param("endDate")String endDate,@Param("newlyAdded")String newlyAdded,@Param("collectionThisMonth")String collectionThisMonth);
+
+	//公司级 查询开票报表的条数
+	Integer findBillingReportPageCount(@Param("FilialeWorkInvoice") FilialeWorkInvoice workInvoice,@Param("officeIdd") String officeIdd, @Param("beginDate")String beginDate, @Param("endDate")String endDate,@Param("newlyAdded")String newlyAdded,@Param("collectionThisMonth")String collectionThisMonth);
+
+
+	//部门级 查询开票报表
+	List<FilialeWorkInvoice> findDepartmentBillingReportPage(@Param("FilialeWorkInvoice") FilialeWorkInvoice workInvoice, @Param("statementCompanyComprehensiveInfo")StatementCompanyComprehensiveInfo statementCompanyComprehensiveInfo, @Param("officeIdd") String officeIdd, @Param("beginDate")String beginDate, @Param("endDate")String endDate, @Param("newlyAdded")String newlyAdded, @Param("collectionThisMonth")String collectionThisMonth);
+
+	//部门级 查询开票报表的条数
+	Integer findDepartmentBillingReportPageCount(@Param("FilialeWorkInvoice") FilialeWorkInvoice workInvoice, @Param("statementCompanyComprehensiveInfo")StatementCompanyComprehensiveInfo statementCompanyComprehensiveInfo, @Param("officeIdd") String officeIdd, @Param("beginDate")String beginDate, @Param("endDate")String endDate, @Param("newlyAdded")String newlyAdded, @Param("collectionThisMonth")String collectionThisMonth);
+
+	/**
+	 * 获取发票开户银行信息
+	 * @param bankName
+	 * @return
+	 */
+	String getBankNameByNameOrId(String bankName);
+}

+ 51 - 0
src/main/java/com/jeeplus/modules/filialeWorkInvoice/dao/FilialeWorkInvoiceDetailDao.java

@@ -0,0 +1,51 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.filialeWorkInvoice.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.filialeWorkInvoice.entity.FilialeWorkInvoiceDetail;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 发票明细DAO接口
+ * @author lw
+ * @version 2018-05-09
+ */
+@MyBatisDao
+public interface FilialeWorkInvoiceDetailDao extends CrudDao<FilialeWorkInvoiceDetail> {
+    //展示带退票标记的列表
+    public List<FilialeWorkInvoiceDetail> findLists(FilialeWorkInvoiceDetail workInvoiceDetail);
+    //发票变更展示明细列表
+    public List<FilialeWorkInvoiceDetail> afindList(FilialeWorkInvoiceDetail workInvoiceDetail);
+    List<FilialeWorkInvoiceDetail> findListWithDept(FilialeWorkInvoiceDetail invoice);
+
+    List<FilialeWorkInvoiceDetail> findListReturn(FilialeWorkInvoiceDetail invoice);
+
+    List<FilialeWorkInvoiceDetail> findByCode(FilialeWorkInvoiceDetail invoice);
+    void updateByCode(FilialeWorkInvoiceDetail invoice);
+    /**
+     * 更新流程实例ID
+     * @return
+     */
+    public int updateProcessInstanceId(FilialeWorkInvoiceDetail workInvoiceDetail);
+
+    /**
+     * 根据流程实例ID获取
+     * @param processInstanceId
+     * @return
+     */
+    public FilialeWorkInvoiceDetail getByProcessInstanceId(String processInstanceId);
+
+    List<FilialeWorkInvoiceDetail> findPageByCompany(FilialeWorkInvoiceDetail invoice);
+    List<FilialeWorkInvoiceDetail> findListByContractInfo(FilialeWorkInvoiceDetail invoice);
+
+    void updateSettleFlag(FilialeWorkInvoiceDetail invoice);
+
+    int countByNumber(String number);
+
+    int countByNumAndComp(@Param("invoiceNum") String invoiceNum, @Param("comId") String comId);
+}

+ 18 - 0
src/main/java/com/jeeplus/modules/filialeWorkInvoice/dao/FilialeWorkInvoiceReceiptDao.java

@@ -0,0 +1,18 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.filialeWorkInvoice.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.filialeWorkInvoice.entity.FilialeWorkInvoiceReceipt;
+
+/**
+ * 开票管理DAO接口
+ * @author 孟祥越
+ * @version 2017-05-05
+ */
+@MyBatisDao
+public interface FilialeWorkInvoiceReceiptDao extends CrudDao<FilialeWorkInvoiceReceipt> {
+
+}

+ 32 - 0
src/main/java/com/jeeplus/modules/filialeWorkInvoice/dao/FilialeWorkInvoiceReturnDao.java

@@ -0,0 +1,32 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.filialeWorkInvoice.dao;
+
+import com.jeeplus.common.persistence.CrudDao;
+import com.jeeplus.common.persistence.annotation.MyBatisDao;
+import com.jeeplus.modules.filialeWorkInvoice.entity.FilialeWorkInvoiceReturn;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 退票管理DAO接口
+ * @author lw
+ * @version 2018-06-15
+ */
+@MyBatisDao
+public interface FilialeWorkInvoiceReturnDao extends CrudDao<FilialeWorkInvoiceReturn> {
+    /**
+     * 更新流程实例ID
+     * @return
+     */
+    public int updateProcessInstanceId(FilialeWorkInvoiceReturn workInvoiceReturn);
+
+    /**
+     * 根据流程实例ID获取
+     * @param processInstanceId
+     * @return
+     */
+    public FilialeWorkInvoiceReturn getByProcessInstanceId(String processInstanceId);
+
+    int countByNumAndComp(@Param("invoiceNum") String invoiceNum, @Param("comId") String comId);
+}

+ 781 - 0
src/main/java/com/jeeplus/modules/filialeWorkInvoice/entity/FilialeWorkInvoice.java

@@ -0,0 +1,781 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.filialeWorkInvoice.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.google.common.collect.Lists;
+import com.jeeplus.common.persistence.ActEntity;
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
+import com.jeeplus.modules.sys.entity.Area;
+import com.jeeplus.modules.sys.entity.Office;
+import com.jeeplus.modules.sys.entity.User;
+import com.jeeplus.modules.sys.entity.Workattachment;
+import com.jeeplus.modules.workclientinfo.entity.WorkClientInfo;
+import org.activiti.engine.history.HistoricProcessInstance;
+import org.activiti.engine.repository.ProcessDefinition;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Task;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 开票管理Entity
+ * @author
+ * @version
+ */
+public class FilialeWorkInvoice extends ActEntity<FilialeWorkInvoice> {
+
+    public static final String SERIAL_BIZCODE = "3";//编号模板类型
+
+	private static final long serialVersionUID = 1L;
+	private String number;		// 发票申请编号
+	private String processInstanceId; // 流程实例编号
+	private WorkClientInfo client;		// 实际开票单位
+	private ProjectRecords project;		// 开票项目(来源项目登记)
+	private String projectName;		// 项目名称
+	private String reportNumber;		// 报告号
+	private Double money;		// 价税合计
+	private String moneyStr;		// 价税合计(String)
+	private String invoiceType;		// 发票类型
+	private String invoiceTypeStr;		// 发票类型Str
+	private String chargeType;		// 收款类型
+	private String billingContent;		// 开票内容
+	private String content;		// 开票内容要求
+	private User drawer;		// 开票经办人(暂时弃用)
+	private Office office;		// 所属部门
+	private Integer invoiceNumber;		// 发票编号(暂时弃用)
+	private Date invoiceDate;		// 开票日期
+	private Date takeDate;          //领票日期
+	private String drawerName;      //开票人(发票管理员名称)
+	private String invoiceRemarks;		// 开票备注
+	private String isInvoice;		// 是否开票
+	private String isCharge;		// 是否收款
+	private String isInvalid;		// 是否作废
+	private String invoiceState;    //发票状态
+	private String orUnicode;       //纳税人识别号
+	private String address;         //地址
+	private String telephone;        //电话
+	private String bank;              //开户银行
+	private String bankNumber;        //银行账号
+	private String cancleReason; //作废原因
+	private String companyId; //提交人的公司编号
+	private String officeId;
+	private String officeName;
+	private String submitterId;		// 发票登记人id
+	private String submitterName;		// 发票登记人名称
+	private String ext;//1总公司-上级公司0分公司-本公司
+	private String contractDate;
+	private String province; //省份
+	private String home;
+	private Date beginContractDate;		// 开始
+	private Date endContractDate;		// 结束
+	private Date receiptMoneyDate;		// 收款日期
+	private String receiptMoney;		// 是否收款
+	private String cancellation;		// 作废判断
+	private String adminFlag;		// 管理员判断
+	private String cancellationRemark;		// 作废原因
+	private List<FilialeWorkInvoiceDetail> workAccountList = Lists.newArrayList();//发票明细
+	private List<FilialeWorkInvoiceReceipt> workReceiptList;//收款明细
+	private List<FilialeWorkInvoiceProjectRelation> workInvoiceProjectRelationList;//开票和项目关系表
+	private Integer notifyFlag; //代办判定条件
+	private String notifyId; //代办判定条件
+	private String widNumber; //发票号
+	private String widTotalMoney; //发票金额
+	private Double widTotalMoneyD; //发票金额
+	private Area area = new Area();		// 对账地区
+
+
+	private String accountCheckingUserId; //对账人id
+	private String accountCheckingUserName; //对账人名称
+	private List<Workattachment> workAttachments;//附件
+
+	private Integer projectFlag ;	//1:项目,0:非项目
+	private Date receiptBeginDate ;	//收款开始时间
+	private Date receiptEndDate ;	//收款结束时间
+
+	private String newDrawer;    		//开票人状态
+	private String newDrawerId;    		//开票人id
+	private String newDrawerName;    	//开票人名称
+	private String actualDrawerId;    		//实际开票人id
+	private String actualDrawerEmailAddress;    		//实际开票人邮箱
+	private String actualDrawerName;    	//实际开票人名称
+	private String proceedsMoney;    	//收款总收入
+	private String noProceedsMoney;    	//剩余应收款费用
+	private Integer workReceiptCount;    	//收款数据量
+	private Double receiptMoneyD; //已收款金额
+	private Double notReceiptMoneyD; //未收款金额
+	@Override
+	@ExcelField(title="经办人", fieldType=User.class, value="createBy.name", align=2, sort=7)
+	public User getCreateBy() {
+		return createBy;
+	}
+
+	@Override
+	public void setCreateBy(User createBy) {
+		this.createBy = createBy;
+	}
+
+	public String getOfficeId() {
+		return officeId;
+	}
+
+	public void setOfficeId(String officeId) {
+		this.officeId = officeId;
+	}
+
+	public String getCompanyId() {
+		return companyId;
+	}
+
+	public void setCompanyId(String companyId) {
+		this.companyId = companyId;
+	}
+
+	public String getCancleReason() {
+		return cancleReason;
+	}
+
+	public void setCancleReason(String cancleReason) {
+		this.cancleReason = cancleReason;
+	}
+
+	public String getBank() {
+		return bank;
+	}
+
+	public void setBank(String bank) {
+		this.bank = bank;
+	}
+
+	public String getBankNumber() {
+		return bankNumber;
+	}
+
+	public void setBankNumber(String bankNumber) {
+		this.bankNumber = bankNumber;
+	}
+
+	@ExcelField(title="发票状态", align=2, sort=17 ,dictType = "invoice_audit_state")
+	public String getInvoiceState() {
+		return invoiceState;
+	}
+
+	public void setInvoiceState(String invoiceState) {
+		this.invoiceState = invoiceState;
+	}
+	// 流程任务
+	private Task task;
+	private Map<String, Object> variables;
+	// 运行中的流程实例
+	private ProcessInstance processInstance;
+	// 历史的流程实例
+	private HistoricProcessInstance historicProcessInstance;
+	// 流程定义
+	private ProcessDefinition processDefinition;
+
+	public Date getTakeDate() {
+		return takeDate;
+	}
+
+	public String getHome() {
+		return home;
+	}
+
+	public Date getBeginContractDate() {
+		return beginContractDate;
+	}
+
+	public void setBeginContractDate(Date beginContractDate) {
+		this.beginContractDate = beginContractDate;
+	}
+
+	public Date getEndContractDate() {
+		return endContractDate;
+	}
+
+	public void setEndContractDate(Date endContractDate) {
+		this.endContractDate = endContractDate;
+	}
+
+	public void setHome(String home) {
+		this.home = home;
+	}
+
+	public void setTakeDate(Date takeDate) {
+		this.takeDate = takeDate;
+	}
+
+
+	@ExcelField(title="开票人", align=2, sort=9)
+	public String getDrawerName() {
+		return drawerName;
+	}
+
+	public void setDrawerName(String drawerName) {
+		this.drawerName = drawerName;
+	}
+
+	public FilialeWorkInvoice() {
+		super();
+	}
+
+	public FilialeWorkInvoice(String id){
+		super(id);
+	}
+
+	@ExcelField(title="开票号", align=2, sort=3)
+	public String getNumber() {
+		return number;
+	}
+
+	public String getContractDate() {
+		return contractDate;
+	}
+
+	public void setContractDate(String contractDate) {
+		this.contractDate = contractDate;
+	}
+
+	public void setNumber(String number) {
+		this.number = number;
+	}
+
+	@ExcelField(title="开票单位", fieldType=WorkClientInfo.class, value="client.name",align=2, sort=5)
+	public WorkClientInfo getClient() {
+		return client;
+	}
+
+	public void setClient(WorkClientInfo client) {
+		this.client = client;
+	}
+
+	@ExcelField(title="项目名称",align=2, sort=1)
+	public String getProjectName() {
+		return projectName;
+	}
+
+	public ProjectRecords getProject() {
+		return project;
+	}
+
+	public List<FilialeWorkInvoiceDetail> getWorkAccountList() {
+		return workAccountList;
+	}
+
+	public String getProvince() {
+		return province;
+	}
+
+	public void setProvince(String province) {
+		this.province = province;
+	}
+
+	public void setWorkAccountList(List<FilialeWorkInvoiceDetail> workAccountList) {
+		this.workAccountList = workAccountList;
+	}
+
+	@ExcelField(title="纳税人识别号",align=2, sort=6)
+	public String getOrUnicode() {
+		return orUnicode;
+	}
+
+	public void setOrUnicode(String orUnicode) {
+		this.orUnicode = orUnicode;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public String getTelephone() {
+		return telephone;
+	}
+
+	public void setTelephone(String telephone) {
+		this.telephone = telephone;
+	}
+
+	public void setProject(ProjectRecords project) {
+		this.project = project;
+	}
+
+	public void setProjectName(String projectName) {
+		this.projectName = projectName;
+	}
+
+
+	public Double getMoney() {
+		return money;
+	}
+
+	public void setMoney(Double money) {
+		this.money = money;
+	}
+
+	@ExcelField(title="开票总金额", align=2, sort=10)
+	public String getMoneyStr() {
+		return moneyStr;
+	}
+
+	public void setMoneyStr(String moneyStr) {
+		this.moneyStr = moneyStr;
+	}
+
+	@ExcelField(title="发票类型", dictType="invoice_type", align=2, sort=13)
+	public String getInvoiceType() {
+		return invoiceType;
+	}
+
+	public void setInvoiceType(String invoiceType) {
+		this.invoiceType = invoiceType;
+	}
+
+	@ExcelField(title="收款类型", dictType="charge_type", align=2, sort=14)
+	public String getChargeType() {
+		return chargeType;
+	}
+
+	public void setChargeType(String chargeType) {
+		this.chargeType = chargeType;
+	}
+
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+
+	public User getDrawer() {
+		return drawer;
+	}
+
+	public void setDrawer(User drawer) {
+		this.drawer = drawer;
+	}
+
+	@ExcelField(title="经办人部门", fieldType=Office.class, value="office.name", align=2, sort=8)
+	public Office getOffice() {
+		return office;
+	}
+
+	public void setOffice(Office office) {
+		this.office = office;
+	}
+
+
+	public Integer getInvoiceNumber() {
+		return invoiceNumber;
+	}
+
+	public void setInvoiceNumber(Integer invoiceNumber) {
+		this.invoiceNumber = invoiceNumber;
+	}
+
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@ExcelField(title="开票日期", align=2, sort=15)
+	public Date getInvoiceDate() {
+		return invoiceDate;
+	}
+
+	public void setInvoiceDate(Date invoiceDate) {
+		this.invoiceDate = invoiceDate;
+	}
+
+	//@ExcelField(title="开票备注", align=2, sort=13)
+	public String getInvoiceRemarks() {
+		return invoiceRemarks;
+	}
+
+	public void setInvoiceRemarks(String invoiceRemarks) {
+		this.invoiceRemarks = invoiceRemarks;
+	}
+
+	//@ExcelField(title="是否开票", align=2, sort=14)
+	public String getIsInvoice() {
+		return isInvoice;
+	}
+
+	public void setIsInvoice(String isInvoice) {
+		this.isInvoice = isInvoice;
+	}
+
+
+	public String getIsCharge() {
+		return isCharge;
+	}
+
+	public void setIsCharge(String isCharge) {
+		this.isCharge = isCharge;
+	}
+
+	//@ExcelField(title="是否作废", align=2, sort=16)
+	public String getIsInvalid() {
+		return isInvalid;
+	}
+
+	public void setIsInvalid(String isInvalid) {
+		this.isInvalid = isInvalid;
+	}
+
+	public String getProcessInstanceId() {
+		return processInstanceId;
+	}
+
+	public void setProcessInstanceId(String processInstanceId) {
+		this.processInstanceId = processInstanceId;
+	}
+
+	public Task getTask() {
+		return task;
+	}
+
+	public void setTask(Task task) {
+		this.task = task;
+	}
+
+	public Map<String, Object> getVariables() {
+		return variables;
+	}
+
+	public void setVariables(Map<String, Object> variables) {
+		this.variables = variables;
+	}
+
+	public ProcessInstance getProcessInstance() {
+		return processInstance;
+	}
+
+	public void setProcessInstance(ProcessInstance processInstance) {
+		this.processInstance = processInstance;
+	}
+
+	public HistoricProcessInstance getHistoricProcessInstance() {
+		return historicProcessInstance;
+	}
+
+	public void setHistoricProcessInstance(HistoricProcessInstance historicProcessInstance) {
+		this.historicProcessInstance = historicProcessInstance;
+	}
+
+	public ProcessDefinition getProcessDefinition() {
+		return processDefinition;
+	}
+
+	public void setProcessDefinition(ProcessDefinition processDefinition) {
+		this.processDefinition = processDefinition;
+	}
+
+	public String getExt() {
+		return ext;
+	}
+
+	public void setExt(String ext) {
+		this.ext = ext;
+	}
+
+	@ExcelField(title="开票内容", mainDictType="billing_content", align=2, sort=12)
+	public String getBillingContent() {
+		return billingContent;
+	}
+
+	public void setBillingContent(String billingContent) {
+		this.billingContent = billingContent;
+	}
+
+	public String getInvoiceTypeStr() {
+		return invoiceTypeStr;
+	}
+
+	public void setInvoiceTypeStr(String invoiceTypeStr) {
+		this.invoiceTypeStr = invoiceTypeStr;
+	}
+
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@ExcelField(title="收款日期", align=2, sort=16)
+	public Date getReceiptMoneyDate() {
+		return receiptMoneyDate;
+	}
+
+	public void setReceiptMoneyDate(Date receiptMoneyDate) {
+		this.receiptMoneyDate = receiptMoneyDate;
+	}
+
+	@ExcelField(title="是否收款", align=2, sort=18)
+	public String getReceiptMoney() {
+		return receiptMoney;
+	}
+
+	public void setReceiptMoney(String receiptMoney) {
+		this.receiptMoney = receiptMoney;
+	}
+
+	public String getCancellation() {
+		return cancellation;
+	}
+
+	public void setCancellation(String cancellation) {
+		this.cancellation = cancellation;
+	}
+
+	public String getAdminFlag() {
+		return adminFlag;
+	}
+
+	public void setAdminFlag(String adminFlag) {
+		this.adminFlag = adminFlag;
+	}
+
+	public String getCancellationRemark() {
+		return cancellationRemark;
+	}
+
+	public void setCancellationRemark(String cancellationRemark) {
+		this.cancellationRemark = cancellationRemark;
+	}
+
+	public String getOfficeName() {
+		return officeName;
+	}
+
+	public void setOfficeName(String officeName) {
+		this.officeName = officeName;
+	}
+
+	public String getSubmitterId() {
+		return submitterId;
+	}
+
+	public void setSubmitterId(String submitterId) {
+		this.submitterId = submitterId;
+	}
+
+	public String getSubmitterName() {
+		return submitterName;
+	}
+
+	public void setSubmitterName(String submitterName) {
+		this.submitterName = submitterName;
+	}
+
+	public List<FilialeWorkInvoiceReceipt> getWorkReceiptList() {
+		return workReceiptList;
+	}
+
+	public void setWorkReceiptList(List<FilialeWorkInvoiceReceipt> workReceiptList) {
+		this.workReceiptList = workReceiptList;
+	}
+
+	public Integer getNotifyFlag() {
+		return notifyFlag;
+	}
+
+	public void setNotifyFlag(Integer notifyFlag) {
+		this.notifyFlag = notifyFlag;
+	}
+
+	public String getNotifyId() {
+		return notifyId;
+	}
+
+	public void setNotifyId(String notifyId) {
+		this.notifyId = notifyId;
+	}
+
+	public List<FilialeWorkInvoiceProjectRelation> getWorkInvoiceProjectRelationList() {
+		return workInvoiceProjectRelationList;
+	}
+
+	public void setWorkInvoiceProjectRelationList(List<FilialeWorkInvoiceProjectRelation> workInvoiceProjectRelationList) {
+		this.workInvoiceProjectRelationList = workInvoiceProjectRelationList;
+	}
+
+	public String getAccountCheckingUserId() {
+		return accountCheckingUserId;
+	}
+
+	public void setAccountCheckingUserId(String accountCheckingUserId) {
+		this.accountCheckingUserId = accountCheckingUserId;
+	}
+
+	public String getAccountCheckingUserName() {
+		return accountCheckingUserName;
+	}
+
+	public void setAccountCheckingUserName(String accountCheckingUserName) {
+		this.accountCheckingUserName = accountCheckingUserName;
+	}
+
+	@ExcelField(title="发票编号", align=2, sort=4)
+	public String getWidNumber() {
+		return widNumber;
+	}
+
+	public void setWidNumber(String widNumber) {
+		this.widNumber = widNumber;
+	}
+	@ExcelField(title="发票金额", align=2, sort=11)
+	public String getWidTotalMoney() {
+		return widTotalMoney;
+	}
+
+	public void setWidTotalMoney(String widTotalMoney) {
+		this.widTotalMoney = widTotalMoney;
+	}
+
+	public Area getArea() {
+		return area;
+	}
+
+	public void setArea(Area area) {
+		this.area = area;
+	}
+
+	public List<Workattachment> getWorkAttachments() {
+		return workAttachments;
+	}
+
+	public void setWorkAttachments(List<Workattachment> workAttachments) {
+		this.workAttachments = workAttachments;
+	}
+
+	@ExcelField(title="报告号", align=2, sort=2)
+	public String getReportNumber() {
+		return reportNumber;
+	}
+
+	public void setReportNumber(String reportNumber) {
+		this.reportNumber = reportNumber;
+	}
+
+	public Integer getProjectFlag() {
+		return projectFlag;
+	}
+
+	public void setProjectFlag(Integer projectFlag) {
+		this.projectFlag = projectFlag;
+	}
+
+	public Date getReceiptBeginDate() {
+		return receiptBeginDate;
+	}
+
+	public void setReceiptBeginDate(Date receiptBeginDate) {
+		this.receiptBeginDate = receiptBeginDate;
+	}
+
+	public Date getReceiptEndDate() {
+		return receiptEndDate;
+	}
+
+	public void setReceiptEndDate(Date receiptEndDate) {
+		this.receiptEndDate = receiptEndDate;
+	}
+
+	public String getNewDrawerId() {
+		return newDrawerId;
+	}
+
+	public void setNewDrawerId(String newDrawerId) {
+		this.newDrawerId = newDrawerId;
+	}
+
+	public String getNewDrawerName() {
+		return newDrawerName;
+	}
+
+	public void setNewDrawerName(String newDrawerName) {
+		this.newDrawerName = newDrawerName;
+	}
+
+	public String getNewDrawer() {
+		return newDrawer;
+	}
+
+	public void setNewDrawer(String newDrawer) {
+		this.newDrawer = newDrawer;
+	}
+
+	public String getActualDrawerId() {
+		return actualDrawerId;
+	}
+
+	public void setActualDrawerId(String actualDrawerId) {
+		this.actualDrawerId = actualDrawerId;
+	}
+
+	public String getActualDrawerEmailAddress() {
+		return actualDrawerEmailAddress;
+	}
+
+	public void setActualDrawerEmailAddress(String actualDrawerEmailAddress) {
+		this.actualDrawerEmailAddress = actualDrawerEmailAddress;
+	}
+
+	public String getActualDrawerName() {
+		return actualDrawerName;
+	}
+
+	public void setActualDrawerName(String actualDrawerName) {
+		this.actualDrawerName = actualDrawerName;
+	}
+
+	public String getProceedsMoney() {
+		return proceedsMoney;
+	}
+
+	public void setProceedsMoney(String proceedsMoney) {
+		this.proceedsMoney = proceedsMoney;
+	}
+
+	public String getNoProceedsMoney() {
+		return noProceedsMoney;
+	}
+
+	public void setNoProceedsMoney(String noProceedsMoney) {
+		this.noProceedsMoney = noProceedsMoney;
+	}
+
+	public Integer getWorkReceiptCount() {
+		return workReceiptCount;
+	}
+
+	public void setWorkReceiptCount(Integer workReceiptCount) {
+		this.workReceiptCount = workReceiptCount;
+	}
+
+	public Double getWidTotalMoneyD() {
+		return widTotalMoneyD;
+	}
+
+	public void setWidTotalMoneyD(Double widTotalMoneyD) {
+		this.widTotalMoneyD = widTotalMoneyD;
+	}
+
+	public Double getReceiptMoneyD() {
+		return receiptMoneyD;
+	}
+
+	public void setReceiptMoneyD(Double receiptMoneyD) {
+		this.receiptMoneyD = receiptMoneyD;
+	}
+
+	public Double getNotReceiptMoneyD() {
+		return notReceiptMoneyD;
+	}
+
+	public void setNotReceiptMoneyD(Double notReceiptMoneyD) {
+		this.notReceiptMoneyD = notReceiptMoneyD;
+	}
+}

+ 430 - 0
src/main/java/com/jeeplus/modules/filialeWorkInvoice/entity/FilialeWorkInvoiceAlter.java

@@ -0,0 +1,430 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.filialeWorkInvoice.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.google.common.collect.Lists;
+import com.jeeplus.common.persistence.ActEntity;
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
+import com.jeeplus.modules.sys.entity.Office;
+import com.jeeplus.modules.sys.entity.User;
+import com.jeeplus.modules.workclientinfo.entity.WorkClientInfo;
+import org.activiti.engine.history.HistoricProcessInstance;
+import org.activiti.engine.repository.ProcessDefinition;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Task;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 开票管理Entity
+ * @author
+ * @version
+ */
+public class FilialeWorkInvoiceAlter extends ActEntity<FilialeWorkInvoiceAlter> {
+
+    public static final String SERIAL_BIZCODE = "3";//编号模板类型
+
+	private static final long serialVersionUID = 1L;
+	private String number;		// 发票申请编号
+	private String processInstanceId; // 流程实例编号
+	private WorkClientInfo client;		// 实际开票单位
+	private ProjectRecords project;		// 开票项目(来源项目登记)
+	private String projectName;		// 项目名称
+	private Double money;		// 价税合计
+	private String invoiceType;		// 发票类型
+	private String chargeType;		// 收款类型
+	private String content;		// 开票内容要求
+	private User drawer;		// 开票经办人(暂时弃用)
+	private Office office;		// 所属部门
+	private Integer invoiceNumber;		// 发票编号(暂时弃用)
+	private Date invoiceDate;		// 开票日期
+	private Date takeDate;          //领票日期
+	private String drawerName;      //开票人(发票管理员名称)
+	private String invoiceRemarks;		// 开票备注
+	private String isInvoice;		// 是否开票
+	private String isCharge;		// 是否收款
+	private String isInvalid;		// 是否作废
+	private String invoiceState;    //发票状态
+	private String orUnicode;       //纳税人识别号
+	private String address;         //地址
+	private String telephone;        //电话
+	private String bank;              //开户银行
+	private String bankNumber;        //银行账号
+	private String cancleReason; //作废原因
+	private String companyId; //提交人的公司编号
+	private String officeId;
+	private String ext;//1总公司0分公司
+	private String contractDate;
+	private String province; //省份
+	private String home;
+	private FilialeWorkInvoice workInvoice;     //变更前数据主键
+	private Date beginContractDate;		// 开始
+	private Date endContractDate;		// 结束
+	private List<FilialeWorkInvoiceDetail> workAccountList = Lists.newArrayList();//发票明细
+	public String getOfficeId() {
+		return officeId;
+	}
+
+	public void setOfficeId(String officeId) {
+		this.officeId = officeId;
+	}
+
+	public String getCompanyId() {
+		return companyId;
+	}
+
+	public void setCompanyId(String companyId) {
+		this.companyId = companyId;
+	}
+
+	public String getCancleReason() {
+		return cancleReason;
+	}
+
+	public void setCancleReason(String cancleReason) {
+		this.cancleReason = cancleReason;
+	}
+
+	public String getBank() {
+		return bank;
+	}
+
+	public void setBank(String bank) {
+		this.bank = bank;
+	}
+
+	public String getBankNumber() {
+		return bankNumber;
+	}
+
+	public void setBankNumber(String bankNumber) {
+		this.bankNumber = bankNumber;
+	}
+
+	@ExcelField(title="发票状态", align=2, sort=12)
+	public String getInvoiceState() {
+		return invoiceState;
+	}
+
+	public void setInvoiceState(String invoiceState) {
+		this.invoiceState = invoiceState;
+	}
+	// 流程任务
+	private Task task;
+	private Map<String, Object> variables;
+	// 运行中的流程实例
+	private ProcessInstance processInstance;
+	// 历史的流程实例
+	private HistoricProcessInstance historicProcessInstance;
+	// 流程定义
+	private ProcessDefinition processDefinition;
+
+	public Date getTakeDate() {
+		return takeDate;
+	}
+
+	public String getHome() {
+		return home;
+	}
+
+	public void setHome(String home) {
+		this.home = home;
+	}
+
+	public void setTakeDate(Date takeDate) {
+		this.takeDate = takeDate;
+	}
+
+	public String getDrawerName() {
+		return drawerName;
+	}
+
+	public void setDrawerName(String drawerName) {
+		this.drawerName = drawerName;
+	}
+
+	public FilialeWorkInvoiceAlter() {
+		super();
+	}
+
+	public Date getBeginContractDate() {
+		return beginContractDate;
+	}
+
+	public void setBeginContractDate(Date beginContractDate) {
+		this.beginContractDate = beginContractDate;
+	}
+
+	public Date getEndContractDate() {
+		return endContractDate;
+	}
+
+	public void setEndContractDate(Date endContractDate) {
+		this.endContractDate = endContractDate;
+	}
+
+	public FilialeWorkInvoiceAlter(String id){
+		super(id);
+	}
+
+	@ExcelField(title="开票号", align=2, sort=1)
+	public String getNumber() {
+		return number;
+	}
+
+	public String getContractDate() {
+		return contractDate;
+	}
+
+	public void setContractDate(String contractDate) {
+		this.contractDate = contractDate;
+	}
+
+	public void setNumber(String number) {
+		this.number = number;
+	}
+	
+	@ExcelField(title="开票单位", fieldType=WorkClientInfo.class, value="client.name",align=2, sort=4)
+	public WorkClientInfo getClient() {
+		return client;
+	}
+
+	public void setClient(WorkClientInfo client) {
+		this.client = client;
+	}
+
+	public FilialeWorkInvoice getWorkInvoice() {
+		return workInvoice;
+	}
+
+	public void setWorkInvoice(FilialeWorkInvoice workInvoice) {
+		this.workInvoice = workInvoice;
+	}
+
+	@ExcelField(title="项目名称",align=2, sort=2)
+	public String getProjectName() {
+		return projectName;
+	}
+
+	public ProjectRecords getProject() {
+		return project;
+	}
+
+	public List<FilialeWorkInvoiceDetail> getWorkAccountList() {
+		return workAccountList;
+	}
+
+	public String getProvince() {
+		return province;
+	}
+
+	public void setProvince(String province) {
+		this.province = province;
+	}
+
+	public void setWorkAccountList(List<FilialeWorkInvoiceDetail> workAccountList) {
+		this.workAccountList = workAccountList;
+	}
+
+	public void setProject(ProjectRecords project) {
+		this.project = project;
+	}
+
+	public void setProjectName(String projectName) {
+		this.projectName = projectName;
+	}
+
+	public String getOrUnicode() {
+		return orUnicode;
+	}
+
+	public void setOrUnicode(String orUnicode) {
+		this.orUnicode = orUnicode;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public String getTelephone() {
+		return telephone;
+	}
+
+	public void setTelephone(String telephone) {
+		this.telephone = telephone;
+	}
+
+	@ExcelField(title="开票金额", align=2, sort=7)
+	public Double getMoney() {
+		return money;
+	}
+
+	public void setMoney(Double money) {
+		this.money = money;
+	}
+	
+	@ExcelField(title="发票类型", dictType="invoice_type", align=2, sort=10)
+	public String getInvoiceType() {
+		return invoiceType;
+	}
+
+	public void setInvoiceType(String invoiceType) {
+		this.invoiceType = invoiceType;
+	}
+	
+	@ExcelField(title="收款类型", dictType="charge_type", align=2, sort=9)
+	public String getChargeType() {
+		return chargeType;
+	}
+
+	public void setChargeType(String chargeType) {
+		this.chargeType = chargeType;
+	}
+	
+	@ExcelField(title="开票内容", dictType="invoice_type", align=2, sort=8)
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+	
+	@ExcelField(title="开票经办人", fieldType=User.class, value="drawer.name", align=2, sort=5)
+	public User getDrawer() {
+		return drawer;
+	}
+
+	public void setDrawer(User drawer) {
+		this.drawer = drawer;
+	}
+	
+	@ExcelField(title="开票经办人部门", fieldType=Office.class, value="office.name", align=2, sort=6)
+	public Office getOffice() {
+		return office;
+	}
+
+	public void setOffice(Office office) {
+		this.office = office;
+	}
+	
+	@ExcelField(title="发票编号", align=2, sort=3)
+	public Integer getInvoiceNumber() {
+		return invoiceNumber;
+	}
+
+	public void setInvoiceNumber(Integer invoiceNumber) {
+		this.invoiceNumber = invoiceNumber;
+	}
+	
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@ExcelField(title="开票日期", align=2, sort=11)
+	public Date getInvoiceDate() {
+		return invoiceDate;
+	}
+
+	public void setInvoiceDate(Date invoiceDate) {
+		this.invoiceDate = invoiceDate;
+	}
+	
+	//@ExcelField(title="开票备注", align=2, sort=13)
+	public String getInvoiceRemarks() {
+		return invoiceRemarks;
+	}
+
+	public void setInvoiceRemarks(String invoiceRemarks) {
+		this.invoiceRemarks = invoiceRemarks;
+	}
+	
+	//@ExcelField(title="是否开票", align=2, sort=14)
+	public String getIsInvoice() {
+		return isInvoice;
+	}
+
+	public void setIsInvoice(String isInvoice) {
+		this.isInvoice = isInvoice;
+	}
+	
+	@ExcelField(title="收款状态", align=2, sort=13)
+	public String getIsCharge() {
+		return isCharge;
+	}
+
+	public void setIsCharge(String isCharge) {
+		this.isCharge = isCharge;
+	}
+	
+	//@ExcelField(title="是否作废", align=2, sort=16)
+	public String getIsInvalid() {
+		return isInvalid;
+	}
+
+	public void setIsInvalid(String isInvalid) {
+		this.isInvalid = isInvalid;
+	}
+
+	public String getProcessInstanceId() {
+		return processInstanceId;
+	}
+
+	public void setProcessInstanceId(String processInstanceId) {
+		this.processInstanceId = processInstanceId;
+	}
+
+	public Task getTask() {
+		return task;
+	}
+
+	public void setTask(Task task) {
+		this.task = task;
+	}
+
+	public Map<String, Object> getVariables() {
+		return variables;
+	}
+
+	public void setVariables(Map<String, Object> variables) {
+		this.variables = variables;
+	}
+
+	public ProcessInstance getProcessInstance() {
+		return processInstance;
+	}
+
+	public void setProcessInstance(ProcessInstance processInstance) {
+		this.processInstance = processInstance;
+	}
+
+	public HistoricProcessInstance getHistoricProcessInstance() {
+		return historicProcessInstance;
+	}
+
+	public void setHistoricProcessInstance(HistoricProcessInstance historicProcessInstance) {
+		this.historicProcessInstance = historicProcessInstance;
+	}
+
+	public ProcessDefinition getProcessDefinition() {
+		return processDefinition;
+	}
+
+	public void setProcessDefinition(ProcessDefinition processDefinition) {
+		this.processDefinition = processDefinition;
+	}
+
+	public String getExt() {
+		return ext;
+	}
+
+	public void setExt(String ext) {
+		this.ext = ext;
+	}
+}

+ 552 - 0
src/main/java/com/jeeplus/modules/filialeWorkInvoice/entity/FilialeWorkInvoiceDetail.java

@@ -0,0 +1,552 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.filialeWorkInvoice.entity;
+
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.jeeplus.common.persistence.ActEntity;
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import com.jeeplus.modules.workinvoice.entity.WorkInvoice;
+import org.activiti.engine.history.HistoricProcessInstance;
+import org.activiti.engine.repository.ProcessDefinition;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Task;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * 发票明细Entity
+ * @author lw
+ * @version 2018-05-09
+ */
+public class FilialeWorkInvoiceDetail extends ActEntity<FilialeWorkInvoiceDetail> {
+	public static final String SERIAL_BIZCODE = "4";//编号模板类型
+
+	private static final long serialVersionUID = 1L;
+	private String number;		// 发票号
+	private String code;         //发票代码
+	private String totalMoney;		// 价税合计
+    @JsonIgnore
+	private String totalMoneyStr;		// 价税合计
+	private String tax;		// 税率
+	private String taxMoney;		// 金额 开票金额
+    @JsonIgnore
+	private String taxMoneyStr;		// 金额 开票金额
+	private String taxRate;		// 税额
+    @JsonIgnore
+	private String taxRateStr;		// 税额
+	private String incomeMoney;		// 登记金额 收款金额
+    @JsonIgnore
+	private String incomeMoneyStr;		// 登记金额 收款金额
+	private String state;		// 发票状态
+	private String backSign;		// 被退标记
+	private String backNumber;		// 被退票号
+	private String backCode;        //被退代码
+	private Date date;		// 开票日期
+	private String invoiceId;		// 发票主键
+	private String ainvoiceId;       //变更发票主键
+	private String sign;       //操作标记
+	private FilialeWorkInvoice workInvoice; //发票
+    private String[] exclusiveIds;
+    private String comId;
+    private String officeId;
+	private String home;
+	private String settleFlag;
+	private Date beginContractDate;		// 开始
+	private Date endContractDate;		// 结束
+	private String returnNumbers;       //作废-申请编号
+	private String returnId;             //作废-原明细Id
+	//导出功能-属性
+	private String invoiceExt;//0分公司开票 1总公司开票
+	private String invoiceInvoiceType;  //发票类型1专票2普票
+	private String invoiceClientName;   //实际开票单位
+	private String invoiceOrUnicode;    //纳税人识别号
+	private String invoiceContent;      //开票内容要求
+	private String invoiceRemarks;      //备注
+	private String invocieNumber;      //申请编号
+	private String invoiceDrawerName;  //开票人
+	private String invoiceOfficeName;  //所属部门
+	private String contractNum ;       //合同编号
+	private String contractName;       //合同名称
+	private String contractClientName; //主委托方
+	// 流程任务
+	private Task task;
+	private Map<String, Object> variables;
+	// 运行中的流程实例
+	private ProcessInstance processInstance;
+	// 历史的流程实例
+	private HistoricProcessInstance historicProcessInstance;
+	// 流程定义
+	private ProcessDefinition processDefinition;
+    /*暂弃*/
+	private String returnNumber;     //退票申请编号
+	private String returnReason;     //退票原因
+	private String returnCancle;     //作废退票(1退票2作废)
+	private String returnSign;      //原票是否退回(1是2否)
+	private Date returnDate;         //退票时间
+	private String returnUser;       //退票人
+	private String processInstanceId; // 流程实例编号
+	private String status;             //状态
+
+	public FilialeWorkInvoiceDetail() {
+		super();
+	}
+
+	public FilialeWorkInvoiceDetail(String id){
+		super(id);
+	}
+
+	public String getHome() {
+		return home;
+	}
+
+	public void setHome(String home) {
+		this.home = home;
+	}
+	@ExcelField(title="发票代码", align=2, sort=6)
+	public String getCode() {
+		return code;
+	}
+
+	@ExcelField(title="发票号", align=2, sort=7)
+	public String getNumber() {
+		return number;
+	}
+
+
+	public String getTotalMoney() {
+		return totalMoney;
+	}
+	@ExcelField(title="价税合计", align=2, sort=8)
+	public String getTotalMoneyStr() {
+		return UserUtils.getDecimalFormat(new BigDecimal(this.totalMoney));
+	}
+	@ExcelField(title="税率", align=2, sort=9)
+	public String getTax() {
+		return tax;
+	}
+
+
+	public String getTaxMoney() {
+		return taxMoney;
+	}
+	@ExcelField(title="金额", align=2, sort=10)
+	public String getTaxMoneyStr() {
+		return UserUtils.getDecimalFormat(new BigDecimal(this.taxMoney));
+	}
+	@ExcelField(title="税额", align=2, sort=11)
+	public String getTaxRateStr() {
+		return UserUtils.getDecimalFormat(new BigDecimal(this.taxRate));
+	}
+
+	public String getTaxRate() {
+		return taxRate;
+	}
+
+	public String getReturnId() {
+		return returnId;
+	}
+
+	public void setReturnId(String returnId) {
+		this.returnId = returnId;
+	}
+
+	public String getIncomeMoney() {
+		return incomeMoney;
+	}
+	@ExcelField(title="累计登记金额", align=2, sort=12)
+	public String getIncomeMoneyStr() {
+		return UserUtils.getDecimalFormat(new BigDecimal(this.incomeMoney));
+	}
+	@ExcelField(title="开票日期", align=2, sort=13)
+	public Date getDate() {
+		return date;
+	}
+
+	@ExcelField(title="总/分公司开票", align=2, sort=14,dictType = "ext_type")
+	public String getInvoiceExt() { return invoiceExt; }
+
+	@ExcelField(title="发票类型", align=2, sort=15,dictType = "invoice_type")
+	public String getInvoiceInvoiceType() { return invoiceInvoiceType; }
+
+	@ExcelField(title="实际开票单位", align=2, sort=16)
+	public String getInvoiceClientName() { return invoiceClientName; }
+
+	@ExcelField(title="纳税人识别号", align=2, sort=17)
+	public String getInvoiceOrUnicode() { return invoiceOrUnicode; }
+
+	@ExcelField(title="开票内容要求", align=2, sort=18)
+	public String getInvoiceContent() { return invoiceContent; }
+
+	public String getReturnNumbers() {
+		return returnNumbers;
+	}
+
+	public void setReturnNumbers(String returnNumbers) {
+		this.returnNumbers = returnNumbers;
+	}
+
+	public String getBackCode() {
+		return backCode;
+	}
+
+	public void setBackCode(String backCode) {
+		this.backCode = backCode;
+	}
+
+	@ExcelField(title="备注", align=2, sort=19)
+	public String getInvoiceRemarks() { return invoiceRemarks; }
+
+	@ExcelField(title="发票状态", align=2, sort=20)
+	public String getState() {
+		return state;
+	}
+
+	@ExcelField(title="被退标记", align=2, sort=21)
+	public String getBackSign() {
+		return backSign;
+	}
+
+	@ExcelField(title="被退票号", align=2, sort=22)
+	public String getBackNumber() {
+		return backNumber;
+	}
+
+	@ExcelField(title="申请编号", align=2, sort=23)
+	public String getInvocieNumber() { return invocieNumber; }
+
+	@ExcelField(title="开票人", align=2, sort=24)
+	public String getInvoiceDrawerName() { return invoiceDrawerName; }
+
+	@ExcelField(title="所属部门", align=2, sort=25)
+	public String getInvoiceOfficeName() { return invoiceOfficeName; }
+
+	@ExcelField(title="合同编号", align=2, sort=26)
+	public String getContractNum() { return contractNum; }
+
+	@ExcelField(title="合同名称", align=2, sort=27)
+	public String getContractName() { return contractName; }
+
+	@ExcelField(title="主委托方", align=2, sort=28)
+	public String getContractClientName() { return contractClientName; }
+
+	public void setNumber(String number) {
+		this.number = number;
+	}
+	
+	public void setTotalMoney(String totalMoney) {
+		this.totalMoney = totalMoney;
+	}
+	
+	public void setTax(String tax) {
+		this.tax = tax;
+	}
+
+	public void setTaxMoney(String taxMoney) {
+		this.taxMoney = taxMoney;
+	}
+
+	public void setTaxRate(String taxRate) {
+		this.taxRate = taxRate;
+	}
+
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public void setInvoiceExt(String invoiceExt) {
+		this.invoiceExt = invoiceExt;
+	}
+
+	public void setInvoiceInvoiceType(String invoiceInvoiceType) {
+		this.invoiceInvoiceType = invoiceInvoiceType;
+	}
+
+	public void setInvoiceClientName(String invoiceClientName) {
+		this.invoiceClientName = invoiceClientName;
+	}
+
+	public void setInvoiceOrUnicode(String invoiceOrUnicode) {
+		this.invoiceOrUnicode = invoiceOrUnicode;
+	}
+
+	public void setInvoiceContent(String invoiceContent) {
+		this.invoiceContent = invoiceContent;
+	}
+
+
+
+	public void setInvoiceRemarks(String invoiceRemarks) {
+		this.invoiceRemarks = invoiceRemarks;
+	}
+
+
+
+	public void setInvocieNumber(String invocieNumber) {
+		this.invocieNumber = invocieNumber;
+	}
+
+
+
+	public void setInvoiceDrawerName(String invoiceDrawerName) {
+		this.invoiceDrawerName = invoiceDrawerName;
+	}
+
+
+
+	public void setInvoiceOfficeName(String invoiceOfficeName) {
+		this.invoiceOfficeName = invoiceOfficeName;
+	}
+
+
+	public void setContractNum(String contractNum) {
+		this.contractNum = contractNum;
+	}
+
+
+	public void setTaxMoneyStr(String taxMoneyStr) {
+		this.taxMoneyStr = taxMoneyStr;
+	}
+
+
+
+	public void setTaxRateStr(String taxRateStr) {
+		this.taxRateStr = taxRateStr;
+	}
+
+	public void setContractName(String contractName) {
+		this.contractName = contractName;
+	}
+
+
+
+	public void setTotalMoneyStr(String totalMoneyStr) {
+		this.totalMoneyStr = totalMoneyStr;
+	}
+
+
+	public void setIncomeMoneyStr(String incomeMoneyStr) {
+		this.incomeMoneyStr = incomeMoneyStr;
+	}
+
+	public void setContractClientName(String contractClientName) {
+		this.contractClientName = contractClientName;
+	}
+
+	public String getAinvoiceId() {
+		return ainvoiceId;
+	}
+
+	public void setAinvoiceId(String ainvoiceId) {
+		this.ainvoiceId = ainvoiceId;
+	}
+
+	public void setIncomeMoney(String incomeMoney) {
+		this.incomeMoney = incomeMoney;
+	}
+	
+
+
+	public void setState(String state) {
+		this.state = state;
+	}
+
+	public String getReturnNumber() {
+		return returnNumber;
+	}
+
+	public Date getBeginContractDate() {
+		return beginContractDate;
+	}
+
+	public void setBeginContractDate(Date beginContractDate) {
+		this.beginContractDate = beginContractDate;
+	}
+
+	public Date getEndContractDate() {
+		return endContractDate;
+	}
+
+	public void setEndContractDate(Date endContractDate) {
+		this.endContractDate = endContractDate;
+	}
+
+	public String getProcessInstanceId() {
+		return processInstanceId;
+	}
+
+	public void setProcessInstanceId(String processInstanceId) {
+		this.processInstanceId = processInstanceId;
+	}
+
+	public void setReturnNumber(String returnNumber) {
+		this.returnNumber = returnNumber;
+	}
+
+	public String getReturnReason() {
+		return returnReason;
+	}
+
+	public void setReturnReason(String returnReason) {
+		this.returnReason = returnReason;
+	}
+
+	public String getReturnCancle() {
+		return returnCancle;
+	}
+
+	public void setReturnCancle(String returnCancle) {
+		this.returnCancle = returnCancle;
+	}
+
+	public String getReturnSign() {
+		return returnSign;
+	}
+
+	public void setReturnSign(String returnSign) {
+		this.returnSign = returnSign;
+	}
+
+	public Date getReturnDate() {
+		return returnDate;
+	}
+
+	public void setReturnDate(Date returnDate) {
+		this.returnDate = returnDate;
+	}
+
+	public String getReturnUser() {
+		return returnUser;
+	}
+
+	public void setReturnUser(String returnUser) {
+		this.returnUser = returnUser;
+	}
+
+	public Task getTask() {
+		return task;
+	}
+
+	public void setTask(Task task) {
+		this.task = task;
+	}
+
+	public Map<String, Object> getVariables() {
+		return variables;
+	}
+
+	public void setVariables(Map<String, Object> variables) {
+		this.variables = variables;
+	}
+
+	public ProcessInstance getProcessInstance() {
+		return processInstance;
+	}
+
+	public void setProcessInstance(ProcessInstance processInstance) {
+		this.processInstance = processInstance;
+	}
+
+	public HistoricProcessInstance getHistoricProcessInstance() {
+		return historicProcessInstance;
+	}
+
+	public void setHistoricProcessInstance(HistoricProcessInstance historicProcessInstance) {
+		this.historicProcessInstance = historicProcessInstance;
+	}
+
+	public ProcessDefinition getProcessDefinition() {
+		return processDefinition;
+	}
+
+	public void setProcessDefinition(ProcessDefinition processDefinition) {
+		this.processDefinition = processDefinition;
+	}
+
+
+
+	public void setBackSign(String backSign) {
+		this.backSign = backSign;
+	}
+	
+
+
+	public void setBackNumber(String backNumber) {
+		this.backNumber = backNumber;
+	}
+
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+
+	public String getSign() {
+		return sign;
+	}
+
+	public void setSign(String sign) {
+		this.sign = sign;
+	}
+
+	public FilialeWorkInvoice getWorkInvoice() {
+		return workInvoice;
+	}
+
+	public void setWorkInvoice(FilialeWorkInvoice workInvoice) {
+		this.workInvoice = workInvoice;
+	}
+
+
+
+	public void setDate(Date date) {
+		this.date = date;
+	}
+	
+	public String getInvoiceId() {
+		return invoiceId;
+	}
+
+	public void setInvoiceId(String invoiceId) {
+		this.invoiceId = invoiceId;
+	}
+
+    public String[] getExclusiveIds() {
+        return exclusiveIds;
+    }
+
+    public void setExclusiveIds(String[] exclusiveIds) {
+        this.exclusiveIds = exclusiveIds;
+    }
+
+    public String getComId() {
+        return comId;
+    }
+
+    public void setComId(String comId) {
+        this.comId = comId;
+    }
+
+    public String getOfficeId() {
+        return officeId;
+    }
+
+    public void setOfficeId(String officeId) {
+        this.officeId = officeId;
+    }
+
+    public String getSettleFlag() {
+        return settleFlag;
+    }
+
+    public void setSettleFlag(String settleFlag) {
+        this.settleFlag = settleFlag;
+    }
+}

+ 110 - 0
src/main/java/com/jeeplus/modules/filialeWorkInvoice/entity/FilialeWorkInvoiceProjectRelation.java

@@ -0,0 +1,110 @@
+package com.jeeplus.modules.filialeWorkInvoice.entity;
+
+import com.jeeplus.common.persistence.DataEntity;
+
+/**
+ * 开票和项目关系表
+ * @author: 徐滕
+ * @create: 2021-05-11 15:44
+ **/
+public class FilialeWorkInvoiceProjectRelation extends DataEntity<FilialeWorkInvoice> {
+    private String invoiceId;       //开票编号
+    private String projectId;       //项目id
+    private String projectName;     //项目名称
+    private String workContractName;    //合同名称
+    private String projectNum;     //项目编号
+    private String clientName;  //委托方
+    private String reportDataNum;   //报告号
+    private Integer isProject;  //是否是项目开票
+    private String details;     //非项目-开票详情
+    private String contractId;     //非项目-合同id
+    private String invoiceState;     //开票状态
+
+    public String getInvoiceId() {
+        return invoiceId;
+    }
+
+    public void setInvoiceId(String invoiceId) {
+        this.invoiceId = invoiceId;
+    }
+
+    public String getProjectId() {
+        return projectId;
+    }
+
+    public void setProjectId(String projectId) {
+        this.projectId = projectId;
+    }
+
+    public String getProjectName() {
+        return projectName;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+    public String getWorkContractName() {
+        return workContractName;
+    }
+
+    public void setWorkContractName(String workContractName) {
+        this.workContractName = workContractName;
+    }
+
+    public String getProjectNum() {
+        return projectNum;
+    }
+
+    public void setProjectNum(String projectNum) {
+        this.projectNum = projectNum;
+    }
+
+    public String getClientName() {
+        return clientName;
+    }
+
+    public void setClientName(String clientName) {
+        this.clientName = clientName;
+    }
+
+    public String getReportDataNum() {
+        return reportDataNum;
+    }
+
+    public void setReportDataNum(String reportDataNum) {
+        this.reportDataNum = reportDataNum;
+    }
+
+    public Integer getIsProject() {
+        return isProject;
+    }
+
+    public void setIsProject(Integer isProject) {
+        this.isProject = isProject;
+    }
+
+    public String getDetails() {
+        return details;
+    }
+
+    public void setDetails(String details) {
+        this.details = details;
+    }
+
+    public String getContractId() {
+        return contractId;
+    }
+
+    public void setContractId(String contractId) {
+        this.contractId = contractId;
+    }
+
+    public String getInvoiceState() {
+        return invoiceState;
+    }
+
+    public void setInvoiceState(String invoiceState) {
+        this.invoiceState = invoiceState;
+    }
+}

+ 48 - 0
src/main/java/com/jeeplus/modules/filialeWorkInvoice/entity/FilialeWorkInvoiceReceipt.java

@@ -0,0 +1,48 @@
+package com.jeeplus.modules.filialeWorkInvoice.entity;
+
+import com.jeeplus.common.persistence.DataEntity;
+
+/**
+ * @author: 大猫
+ * @create: 2020-12-07 14:56
+ **/
+public class FilialeWorkInvoiceReceipt extends DataEntity<FilialeWorkInvoiceReceipt> {
+    private static final long serialVersionUID = 1L;
+
+    private String invoiceId;   //发票id
+    private String companyName;  //公司名称
+    private Double money;   //汇款金额
+    private String receiptDate;  //汇款时间
+
+    public String getInvoiceId() {
+        return invoiceId;
+    }
+
+    public void setInvoiceId(String invoiceId) {
+        this.invoiceId = invoiceId;
+    }
+
+    public String getCompanyName() {
+        return companyName;
+    }
+
+    public void setCompanyName(String companyName) {
+        this.companyName = companyName;
+    }
+
+    public Double getMoney() {
+        return money;
+    }
+
+    public void setMoney(Double money) {
+        this.money = money;
+    }
+
+    public String getReceiptDate() {
+        return receiptDate;
+    }
+
+    public void setReceiptDate(String receiptDate) {
+        this.receiptDate = receiptDate;
+    }
+}

+ 240 - 0
src/main/java/com/jeeplus/modules/filialeWorkInvoice/entity/FilialeWorkInvoiceReturn.java

@@ -0,0 +1,240 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.filialeWorkInvoice.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.jeeplus.common.persistence.ActEntity;
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+import org.activiti.engine.history.HistoricProcessInstance;
+import org.activiti.engine.repository.ProcessDefinition;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Task;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * 退票管理Entity
+ * @version 2018-06-15
+ * @author lw
+ */
+public class FilialeWorkInvoiceReturn extends ActEntity<FilialeWorkInvoiceReturn> {
+	public static final String SERIAL_BIZCODE = "4";//编号模板类型
+
+	private static final long serialVersionUID = 1L;
+	private String processInstanceId;		// 实例流程id
+	private String officeId;		// 部门id
+	private String companyId;		// 公司Id
+	private String status;		// 状态
+	private FilialeWorkInvoiceDetail invoiceDetail;		// 发票明细主键
+	private String returnNumber;      //退票申请编号
+	private String reason;		// 退票原因
+	private String cancleReturn;		// 作废/退票
+	private String returnType;		// 原票是否退回
+	private String code;		// 发票代码
+	private String number;		// 发票号
+	private String uname;		// 退票人
+	private Date returnDate;		// 退票日期
+	private String home;
+	private Date beginContractDate;		// 开始
+	private Date endContractDate;		// 结束
+	// 流程任务
+	private Task task;
+	private Map<String, Object> variables;
+	// 运行中的流程实例
+	private ProcessInstance processInstance;
+	// 历史的流程实例
+	private HistoricProcessInstance historicProcessInstance;
+	// 流程定义
+	private ProcessDefinition processDefinition;
+
+	public FilialeWorkInvoiceReturn() {
+		super();
+	}
+
+	public FilialeWorkInvoiceReturn(String id){
+		super(id);
+	}
+
+	@ExcelField(title="实例流程id", align=2, sort=7)
+	public String getProcessInstanceId() {
+		return processInstanceId;
+	}
+
+	public void setProcessInstanceId(String processInstanceId) {
+		this.processInstanceId = processInstanceId;
+	}
+	
+	@ExcelField(title="部门id", align=2, sort=8)
+	public String getOfficeId() {
+		return officeId;
+	}
+
+	public void setOfficeId(String officeId) {
+		this.officeId = officeId;
+	}
+	
+	@ExcelField(title="公司Id", align=2, sort=9)
+	public String getCompanyId() {
+		return companyId;
+	}
+
+	public void setCompanyId(String companyId) {
+		this.companyId = companyId;
+	}
+	
+	@ExcelField(title="状态", align=2, sort=10)
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public FilialeWorkInvoiceDetail getInvoiceDetail() {
+		return invoiceDetail;
+	}
+
+	public void setInvoiceDetail(FilialeWorkInvoiceDetail invoiceDetail) {
+		this.invoiceDetail = invoiceDetail;
+	}
+
+	public String getReturnNumber() {
+		return returnNumber;
+	}
+
+	public void setReturnNumber(String returnNumber) {
+		this.returnNumber = returnNumber;
+	}
+
+	public Task getTask() {
+		return task;
+	}
+
+	public void setTask(Task task) {
+		this.task = task;
+	}
+
+	public String getHome() {
+		return home;
+	}
+
+	public Date getBeginContractDate() {
+		return beginContractDate;
+	}
+
+	public void setBeginContractDate(Date beginContractDate) {
+		this.beginContractDate = beginContractDate;
+	}
+
+	public Date getEndContractDate() {
+		return endContractDate;
+	}
+
+	public void setEndContractDate(Date endContractDate) {
+		this.endContractDate = endContractDate;
+	}
+
+	public void setHome(String home) {
+		this.home = home;
+	}
+
+	public Map<String, Object> getVariables() {
+		return variables;
+	}
+
+	public void setVariables(Map<String, Object> variables) {
+		this.variables = variables;
+	}
+
+	public ProcessInstance getProcessInstance() {
+		return processInstance;
+	}
+
+	public void setProcessInstance(ProcessInstance processInstance) {
+		this.processInstance = processInstance;
+	}
+
+	public HistoricProcessInstance getHistoricProcessInstance() {
+		return historicProcessInstance;
+	}
+
+	public void setHistoricProcessInstance(HistoricProcessInstance historicProcessInstance) {
+		this.historicProcessInstance = historicProcessInstance;
+	}
+
+	public ProcessDefinition getProcessDefinition() {
+		return processDefinition;
+	}
+
+	public void setProcessDefinition(ProcessDefinition processDefinition) {
+		this.processDefinition = processDefinition;
+	}
+
+	@ExcelField(title="退票原因", align=2, sort=12)
+	public String getReason() {
+		return reason;
+	}
+
+	public void setReason(String reason) {
+		this.reason = reason;
+	}
+	
+	@ExcelField(title="作废/退票", align=2, sort=13)
+	public String getCancleReturn() {
+		return cancleReturn;
+	}
+
+	public void setCancleReturn(String cancleReturn) {
+		this.cancleReturn = cancleReturn;
+	}
+	
+	@ExcelField(title="原票是否退回", align=2, sort=14)
+	public String getReturnType() {
+		return returnType;
+	}
+
+	public void setReturnType(String returnType) {
+		this.returnType = returnType;
+	}
+	
+	@ExcelField(title="发票代码", align=2, sort=15)
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+	
+	@ExcelField(title="发票号", align=2, sort=16)
+	public String getNumber() {
+		return number;
+	}
+
+	public void setNumber(String number) {
+		this.number = number;
+	}
+	
+	@ExcelField(title="退票人", align=2, sort=17)
+	public String getUname() {
+		return uname;
+	}
+
+	public void setUname(String uname) {
+		this.uname = uname;
+	}
+	
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@ExcelField(title="退票日期", align=2, sort=18)
+	public Date getReturnDate() {
+		return returnDate;
+	}
+
+	public void setReturnDate(Date returnDate) {
+		this.returnDate = returnDate;
+	}
+	
+}

+ 249 - 0
src/main/java/com/jeeplus/modules/filialeWorkInvoice/entity/FilialeWorkInvoiceReturnAlter.java

@@ -0,0 +1,249 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.filialeWorkInvoice.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.jeeplus.common.persistence.ActEntity;
+import com.jeeplus.common.utils.excel.annotation.ExcelField;
+import org.activiti.engine.history.HistoricProcessInstance;
+import org.activiti.engine.repository.ProcessDefinition;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Task;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * 退票管理Entity
+ * @version 2018-06-15
+ * @author lw
+ */
+public class FilialeWorkInvoiceReturnAlter extends ActEntity<FilialeWorkInvoiceReturnAlter> {
+	public static final String SERIAL_BIZCODE = "4";//编号模板类型
+
+	private static final long serialVersionUID = 1L;
+	private String processInstanceId;		// 实例流程id
+	private String officeId;		// 部门id
+	private String companyId;		// 公司Id
+	private String status;		// 状态
+	private FilialeWorkInvoiceDetail invoiceDetail;		// 发票明细主键
+	private String returnNumber;      //退票申请编号
+	private String reason;		// 退票原因
+	private String cancleReturn;		// 作废/退票
+	private String returnType;		// 原票是否退回
+	private String code;		// 发票代码
+	private String number;		// 发票号
+	private String uname;		// 退票人
+	private Date returnDate;		// 退票日期
+	private String home;
+	private FilialeWorkInvoiceReturn workInvoiceReturn;      //变更前数据
+	private Date beginContractDate;		// 开始
+	private Date endContractDate;		// 结束
+	// 流程任务
+	private Task task;
+	private Map<String, Object> variables;
+	// 运行中的流程实例
+	private ProcessInstance processInstance;
+	// 历史的流程实例
+	private HistoricProcessInstance historicProcessInstance;
+	// 流程定义
+	private ProcessDefinition processDefinition;
+
+	public FilialeWorkInvoiceReturnAlter() {
+		super();
+	}
+
+	public FilialeWorkInvoiceReturnAlter(String id){
+		super(id);
+	}
+
+	@ExcelField(title="实例流程id", align=2, sort=7)
+	public String getProcessInstanceId() {
+		return processInstanceId;
+	}
+
+	public void setProcessInstanceId(String processInstanceId) {
+		this.processInstanceId = processInstanceId;
+	}
+	
+	@ExcelField(title="部门id", align=2, sort=8)
+	public String getOfficeId() {
+		return officeId;
+	}
+
+	public void setOfficeId(String officeId) {
+		this.officeId = officeId;
+	}
+	
+	@ExcelField(title="公司Id", align=2, sort=9)
+	public String getCompanyId() {
+		return companyId;
+	}
+
+	public void setCompanyId(String companyId) {
+		this.companyId = companyId;
+	}
+	
+	@ExcelField(title="状态", align=2, sort=10)
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public FilialeWorkInvoiceDetail getInvoiceDetail() {
+		return invoiceDetail;
+	}
+
+	public Date getBeginContractDate() {
+		return beginContractDate;
+	}
+
+	public void setBeginContractDate(Date beginContractDate) {
+		this.beginContractDate = beginContractDate;
+	}
+
+	public Date getEndContractDate() {
+		return endContractDate;
+	}
+
+	public void setEndContractDate(Date endContractDate) {
+		this.endContractDate = endContractDate;
+	}
+
+	public void setInvoiceDetail(FilialeWorkInvoiceDetail invoiceDetail) {
+		this.invoiceDetail = invoiceDetail;
+	}
+
+	public String getReturnNumber() {
+		return returnNumber;
+	}
+
+	public FilialeWorkInvoiceReturn getWorkInvoiceReturn() {
+		return workInvoiceReturn;
+	}
+
+	public void setWorkInvoiceReturn(FilialeWorkInvoiceReturn workInvoiceReturn) {
+		this.workInvoiceReturn = workInvoiceReturn;
+	}
+
+	public void setReturnNumber(String returnNumber) {
+		this.returnNumber = returnNumber;
+	}
+
+	public Task getTask() {
+		return task;
+	}
+
+	public void setTask(Task task) {
+		this.task = task;
+	}
+
+	public String getHome() {
+		return home;
+	}
+
+	public void setHome(String home) {
+		this.home = home;
+	}
+
+	public Map<String, Object> getVariables() {
+		return variables;
+	}
+
+	public void setVariables(Map<String, Object> variables) {
+		this.variables = variables;
+	}
+
+	public ProcessInstance getProcessInstance() {
+		return processInstance;
+	}
+
+	public void setProcessInstance(ProcessInstance processInstance) {
+		this.processInstance = processInstance;
+	}
+
+	public HistoricProcessInstance getHistoricProcessInstance() {
+		return historicProcessInstance;
+	}
+
+	public void setHistoricProcessInstance(HistoricProcessInstance historicProcessInstance) {
+		this.historicProcessInstance = historicProcessInstance;
+	}
+
+	public ProcessDefinition getProcessDefinition() {
+		return processDefinition;
+	}
+
+	public void setProcessDefinition(ProcessDefinition processDefinition) {
+		this.processDefinition = processDefinition;
+	}
+
+	@ExcelField(title="退票原因", align=2, sort=12)
+	public String getReason() {
+		return reason;
+	}
+
+	public void setReason(String reason) {
+		this.reason = reason;
+	}
+	
+	@ExcelField(title="作废/退票", align=2, sort=13)
+	public String getCancleReturn() {
+		return cancleReturn;
+	}
+
+	public void setCancleReturn(String cancleReturn) {
+		this.cancleReturn = cancleReturn;
+	}
+	
+	@ExcelField(title="原票是否退回", align=2, sort=14)
+	public String getReturnType() {
+		return returnType;
+	}
+
+	public void setReturnType(String returnType) {
+		this.returnType = returnType;
+	}
+	
+	@ExcelField(title="发票代码", align=2, sort=15)
+	public String getCode() {
+		return code;
+	}
+
+	public void setCode(String code) {
+		this.code = code;
+	}
+	
+	@ExcelField(title="发票号", align=2, sort=16)
+	public String getNumber() {
+		return number;
+	}
+
+	public void setNumber(String number) {
+		this.number = number;
+	}
+	
+	@ExcelField(title="退票人", align=2, sort=17)
+	public String getUname() {
+		return uname;
+	}
+
+	public void setUname(String uname) {
+		this.uname = uname;
+	}
+	
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@ExcelField(title="退票日期", align=2, sort=18)
+	public Date getReturnDate() {
+		return returnDate;
+	}
+
+	public void setReturnDate(Date returnDate) {
+		this.returnDate = returnDate;
+	}
+	
+}

+ 801 - 0
src/main/java/com/jeeplus/modules/filialeWorkInvoice/service/FilialeWorkInvoiceAlterService.java

@@ -0,0 +1,801 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.filialeWorkInvoice.service;
+
+import com.google.common.collect.Maps;
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.service.CrudService;
+import com.jeeplus.common.utils.MenuStatusEnum;
+import com.jeeplus.common.utils.MyBeanUtils;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.modules.act.entity.Act;
+import com.jeeplus.modules.act.service.ActTaskService;
+import com.jeeplus.modules.act.utils.ActUtils;
+import com.jeeplus.modules.filialeWorkInvoice.dao.FilialeWorkInvoiceAlterDao;
+import com.jeeplus.modules.filialeWorkInvoice.dao.FilialeWorkInvoiceDetailDao;
+import com.jeeplus.modules.filialeWorkInvoice.entity.FilialeWorkInvoice;
+import com.jeeplus.modules.filialeWorkInvoice.entity.FilialeWorkInvoiceAlter;
+import com.jeeplus.modules.filialeWorkInvoice.entity.FilialeWorkInvoiceDetail;
+import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
+import com.jeeplus.modules.projectrecord.service.ProjectRecordsService;
+import com.jeeplus.modules.serialnum.service.SerialNumTplService;
+import com.jeeplus.modules.sys.entity.Office;
+import com.jeeplus.modules.sys.entity.User;
+import com.jeeplus.modules.sys.service.OfficeService;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import com.jeeplus.modules.workactivity.dao.WorkActivityProcessDao;
+import com.jeeplus.modules.workactivity.entity.Activity;
+import com.jeeplus.modules.workactivity.entity.WorkActivityProcess;
+import com.jeeplus.modules.workactivity.service.ActivityService;
+import com.jeeplus.modules.workactivity.service.WorkActivityProcessService;
+import com.jeeplus.modules.workactivitymenu.entity.WorkActivityMenu;
+import com.jeeplus.modules.workactivitymenu.service.WorkActivityMenuService;
+import com.jeeplus.modules.workbidproject.entity.WorkBidProject;
+import com.jeeplus.modules.workclientinfo.entity.WorkClientInfo;
+import com.jeeplus.modules.workinvoice.entity.WorkInvoice;
+import com.jeeplus.modules.workinvoice.service.WorkInvoiceService;
+import com.jeeplus.modules.workprojectnotify.entity.WorkProjectNotify;
+import com.jeeplus.modules.workprojectnotify.service.WorkProjectNotifyService;
+import com.jeeplus.modules.workprojectnotify.util.UtilNotify;
+import org.activiti.engine.*;
+import org.activiti.engine.history.HistoricProcessInstance;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Task;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 开票管理Service
+ * @author 孟祥越
+ * @version 2017-05-05
+ */
+@Service
+@Transactional(readOnly = true)
+@Lazy
+public class FilialeWorkInvoiceAlterService extends CrudService<FilialeWorkInvoiceAlterDao, FilialeWorkInvoiceAlter> {
+
+	@Autowired
+	private ActTaskService actTaskService;
+	@Autowired
+	private RuntimeService runtimeService;
+	@Autowired
+	private OfficeService officeService;
+	@Autowired
+	private ActivityService activityService;
+	@Autowired
+	private FilialeWorkInvoiceDetailDao workInvoiceDetailDao;
+	@Autowired
+	private WorkActivityProcessDao workActivityProcessDao;
+	@Autowired
+	private WorkInvoiceService workInvoiceService;
+
+	@Autowired
+	protected TaskService taskService;
+	@Autowired
+	protected HistoryService historyService;
+	@Autowired
+	protected RepositoryService repositoryService;
+	@Autowired
+	protected WorkActivityMenuService workActivityMenuService;
+	@Autowired
+	protected FilialeWorkInvoiceAlterDao workInvoiceAlterDao;
+
+	@Autowired
+	private IdentityService identityService;
+	@Autowired
+	protected WorkActivityProcessService workActivityProcessService;
+	@Autowired
+	protected ProjectRecordsService projectRecordsService;
+	@Autowired
+	@Lazy
+	protected FilialeWorkInvoiceDetailService workInvoiceDetailService;
+	@Autowired
+	protected SerialNumTplService serialNumTplService;
+	@Autowired
+	protected FilialeWorkInvoiceService invoiceService;
+
+	@Autowired
+	protected WorkProjectNotifyService workProjectNotifyService;
+	public FilialeWorkInvoiceAlter getByProcInsId(String procInsId) {
+		return dao.getByProcInsId(procInsId);
+	}
+	
+	public FilialeWorkInvoiceAlter get(String id) {
+		FilialeWorkInvoiceAlter workInvoice = new FilialeWorkInvoiceAlter();
+		if(StringUtils.isNotBlank(id)){
+			workInvoice = super.get(id);
+		}
+		if(workInvoice!=null){
+			if(StringUtils.isNotBlank(workInvoice.getProcessInstanceId())){
+				workInvoice.setAct(getByAct(workInvoice.getProcessInstanceId()));
+			}
+			if(workInvoice.getProject()!=null){
+				ProjectRecords project = projectRecordsService.getRuralInfo(workInvoice.getProject().getId());
+				workInvoice.setProject(project);
+			}
+			if(StringUtils.isNotBlank(workInvoice.getId())){
+				FilialeWorkInvoiceDetail workInvoiceDetail = new FilialeWorkInvoiceDetail();
+				workInvoiceDetail.setAinvoiceId(workInvoice.getId());
+				List<FilialeWorkInvoiceDetail> list = workInvoiceDetailDao.afindList(workInvoiceDetail);
+				workInvoice.setWorkAccountList(list);
+			}
+		}
+		return workInvoice;
+	}
+	public Act getByAct(String processInstanceId){
+		Act act = new Act();
+		HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
+		ProcessInstance processInstance = actTaskService.getProcIns(processInstanceId);
+		if (processInstance!=null) {
+			List<Task> taskList = actTaskService.getCurrentTaskList(processInstance);
+			if(taskList!=null && taskList.size()>1){
+				for (Task taskInfok:taskList) {
+					if (taskInfok.getAssignee().equals(UserUtils.getUser().getId())) {
+						act.setTaskId(taskInfok.getId());
+						act.setTaskName(taskInfok.getName());
+						act.setTaskDefKey(taskInfok.getTaskDefinitionKey());
+						act.setProcDefId(taskInfok.getProcessDefinitionId());
+						act.setProcInsId(taskInfok.getProcessInstanceId());
+						act.setTask(taskInfok);
+					}
+				}
+			}else {
+				Task task = actTaskService.getCurrentTaskInfo(processInstance);
+				act.setTaskId(task.getId());
+				act.setTaskName(task.getName());
+				act.setTaskDefKey(task.getTaskDefinitionKey());
+				act.setProcDefId(task.getProcessDefinitionId());
+				act.setProcInsId(task.getProcessInstanceId());
+				act.setTask(task);
+			}
+		}
+		return  act;
+		/*if (processInstance!=null) {
+			Task taskInfok = actTaskService.getCurrentTaskInfo(processInstance);
+			Act act = new Act();
+			act.setTaskId(taskInfok.getId());
+			act.setTaskName(taskInfok.getName());
+			act.setTaskDefKey(taskInfok.getTaskDefinitionKey());
+			act.setProcDefId(taskInfok.getProcessDefinitionId());
+			act.setProcInsId(taskInfok.getProcessInstanceId());
+			act.setTask(taskInfok);
+			return act;
+		}else {
+			return null;
+		}*/
+	}
+	public List<FilialeWorkInvoiceAlter> findList(FilialeWorkInvoiceAlter workInvoice) {
+		return super.findList(workInvoice);
+	}
+	
+	public Page<FilialeWorkInvoiceAlter> findPage(Page<FilialeWorkInvoiceAlter> page, FilialeWorkInvoiceAlter workInvoice) {
+		workInvoice.getSqlMap().put("dsf", dataScopeFilter(workInvoice.getCurrentUser(), "o", "u","s", MenuStatusEnum.WORK_INVOICERETURNALTER.getValue()));
+		workInvoice.setPage(page);
+		page.setList(findList(workInvoice));
+		return page;
+
+	}
+
+	/**
+	 * 暂存
+	 * @param workInvoice
+	 */
+	@Transactional(readOnly = false)
+	public  void save(FilialeWorkInvoiceAlter workInvoice){
+		super.save(workInvoice);
+		updateWorkInvoiceInfo(workInvoice);
+	}
+
+	@Transactional(readOnly = false)
+	public void updateWorkInvoiceInfo(FilialeWorkInvoiceAlter workInvoice) {
+		try {
+		for (FilialeWorkInvoiceDetail buyDetails : workInvoice.getWorkAccountList()){
+			if (buyDetails.getId() == null){
+				continue;
+			}
+			if (buyDetails.DEL_FLAG_NORMAL.equals(buyDetails.getDelFlag())){
+				buyDetails.setAinvoiceId(workInvoice.getId());
+				buyDetails.setComId(workInvoice.getCompanyId());
+				buyDetails.setOfficeId(workInvoice.getOffice().getId());
+				if(workInvoice.getInvoiceDate()!=null){
+					buyDetails.setDate(workInvoice.getInvoiceDate());
+				}else{
+					buyDetails.setDate(workInvoice.getUpdateDate());
+				}
+				if (StringUtils.isBlank(buyDetails.getId())){
+					buyDetails.preInsert();
+					workInvoiceDetailDao.insert(buyDetails);
+				}else{
+					if(buyDetails!=null){
+						FilialeWorkInvoiceDetail w1 = workInvoiceDetailDao.get(buyDetails.getId());//从数据库取出记录的值
+						MyBeanUtils.copyBeanNotNull2Bean(buyDetails, w1);//将编辑表单中的非NULL值覆盖数据库记录中的值
+						buyDetails.preUpdate();
+						workInvoiceDetailDao.update(w1);
+					}
+				}
+			}else{
+				workInvoiceDetailDao.delete(buyDetails);
+			}
+		}
+		}catch (Exception e){
+			logger.info(e.getMessage());
+		}
+	}
+
+	/**
+	 * 提交存储
+	 * @param workInvoice
+	 * @param variables
+	 */
+	@Transactional(readOnly = false)
+	public String save(FilialeWorkInvoiceAlter workInvoice, Map<String, Object> variables, String processInstanceId) {
+		super.save(workInvoice);
+		String  str ="";
+		//所属部门
+		Office office = officeService.get(workInvoice.getOffice().getId());
+		String userName = UserUtils.get(workInvoice.getCreateBy().getId()).getName();
+		str = "发票申请编号:"+workInvoice.getNumber()+",实际开票单位:"+workInvoice.getClient().getName()+",创建人:"+userName+",所属部门:"+office.getName();
+		String title = "实际开票单位:"+workInvoice.getClient().getName();
+		updateWorkInvoiceInfo(workInvoice);
+		// 用来设置启动流程的人员ID,引擎会自动把用户ID保存到activiti:initiator中
+		identityService.setAuthenticatedUserId(UserUtils.getUser().getId());
+		// 启动流程
+		String businessKey = workInvoice.getId().toString();
+		WorkActivityMenu workActivityMenu = workActivityMenuService.findByParentAndOffice("ggh3125f1f194c822345lp000050905",officeService.get(workInvoice.getOfficeId()));//menuid
+		// 启动流程
+		String processType = workActivityMenu.getProcessType();
+		StringBuffer buffer = new StringBuffer();
+		Activity activity = new Activity();
+		WorkProjectNotify workProjectNotify = UtilNotify
+				.saveNotify(workInvoice.getId(),
+						null,
+						workInvoice.getCompanyId(),
+						title,
+						str,
+						"48",
+						"0",
+						"待审批",
+						""
+				);
+		List<User> users = new ArrayList<>();
+		List<User> cwzgs = new ArrayList<>();
+		if(workInvoice!=null){
+			//总公司开票
+			if("1".equals(workInvoice.getExt())){
+				cwzgs = UserUtils.getByRoleActivityEnname("cwzg",1,office.getId(),"5",workInvoice.getCreateBy());
+			} else if("0".equals(workInvoice.getExt())){
+				cwzgs = UserUtils.getByRoleActivityEnname("cwzg",3,office.getId(),"5",workInvoice.getCreateBy());
+			}
+		}
+		if (StringUtils.isNotBlank(workActivityMenu.getId())) {
+			workProjectNotify.setNotifyRole("");
+			workActivityMenu = workActivityMenuService.get(workActivityMenu.getId());
+			List<Activity> activities = workActivityMenu.getActivities();
+			for (Activity a : activities) {
+				String encount = a.getEncount();
+				String enlist = a.getEnlist();
+				if (a.getRole()!=null && StringUtils.isNotBlank(a.getRole().getEnname())){
+					List enusers = UserUtils.getByRoleActivityEnnames(a.getRole().getEnname(),office.getId(),"5",workInvoice.getCreateBy());
+					if (enusers.size()==0){
+						workInvoice.setInvoiceState("1");//暂存
+						this.save(workInvoice);
+						return "流程审批人不能为空,角色"+a.getRole().getName()+"下无用户,请联系管理员!";
+					}
+					variables.put(enlist, enusers);
+					variables.put(encount, enusers.size());
+				}
+				if (a.getDelFlag().equals("0") && a.getCount() == 1) {
+					activity = a;
+				}
+			}
+			buffer.append(activity.getRole().getEnname());
+			if (activity != null && StringUtils.isNotBlank(activity.getId())) {
+				//角色审批
+				if (StringUtils.isNotBlank(activity.getRole().getEnname())) {
+					users = UserUtils.getByRoleActivityEnnames(activity.getRole().getEnname(),office.getId(),"5",workInvoice.getCreateBy());
+				}
+				//人员审批
+				if (StringUtils.isNotBlank(activity.getUser().getId())) {
+					users.add(activity.getUser());
+				}
+			}
+			workProjectNotify.setId("");
+		} else {
+			if (cwzgs.size()==0){
+				workInvoice.setInvoiceState("1");//暂存
+				this.save(workInvoice);
+			}
+			if (cwzgs.size()==0){
+				return "流程审批人不能为空,角色财务主管下无用户,请联系管理员!";
+			}
+			variables.put("cwzgcount",cwzgs.size());
+			variables.put("cwzgList",cwzgs);
+			processType = "workinvoicealter";
+			users.addAll(cwzgs);
+		}
+		for (User user : users){
+			workProjectNotify.setUser(user);
+			workProjectNotify.setId("");
+			workProjectNotifyService
+					.save(workProjectNotify);
+			Map<String,Object> extras = new HashMap<>();
+			extras.put("type","7001");
+			extras.put("id",workProjectNotify.getId());
+			extras.put("procDefKey","48");
+			UserUtils.pushInfoToApp(title,str,extras,user.getId());
+			UserUtils.pushIm(user.getId(),str);
+		}
+		variables.put("type", processType);
+		variables.put("busId", businessKey);
+		variables.put("title", "发票申请编号:" + workInvoice.getNumber());//设置标题;
+
+		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processType, businessKey, variables);
+		workInvoice.setProcessInstance(processInstance);
+		if (StringUtils.isNotBlank(processInstanceId)) {
+			workActivityProcessService.updateProcessInstanceId(processInstance.getId(),processInstanceId);
+			workActivityProcessService.deleteProcessInstanceId(processInstanceId);
+			workActivityProcessService.deleteProcessIdAuditUsers(processInstanceId);
+		}
+		// 更新流程实例ID
+		workInvoice.setProcessInstanceId(processInstance.getId());
+		workInvoiceAlterDao.updateProcessInstanceId(workInvoice);
+		List<Activity> list = workActivityMenu.getActivities();
+		if (list != null && list.size() != 0) {
+			workActivityProcessService.saveList(list, processInstance.getId());
+		} else {
+			WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+			workActivityProcess.setProcessKey("workinvoicealter");
+			workActivityProcess.setCount(1);
+			workActivityProcess.setProcessInstanceId(processInstance.getId());
+			workActivityProcess.setIsApproval("0");
+			workActivityProcessService.save(workActivityProcess);
+			workActivityProcessService.insertAuditsByType(cwzgs,processInstance.getId(),1,1);
+		}
+		logger.debug("start process of {key={}, bkey={}, pid={}, variables={}}", new Object[]{
+				ActUtils.PD_REIMBURSEMENT[0], businessKey, processInstance.getId(), variables});
+		return "";
+	}
+
+	@Transactional(readOnly = false)
+	public void delete(FilialeWorkInvoiceAlter workInvoice) {
+		super.delete(workInvoice);
+		for (FilialeWorkInvoiceDetail workAccount : workInvoice.getWorkAccountList()){
+			workInvoiceDetailDao.delete(workAccount);
+		}
+		WorkProjectNotify notify = new WorkProjectNotify();
+		notify.setNotifyId(workInvoice.getId());
+		workProjectNotifyService.readByNotifyId(notify);
+		if(workInvoice.getWorkInvoice()!= null){
+			if(StringUtils.isNotBlank(workInvoice.getWorkInvoice().getId())){
+				WorkInvoice w = workInvoiceService.get(workInvoice.getWorkInvoice().getId());
+				w.setInvoiceState("5");
+				workInvoiceService.save(w);
+			}
+		}
+	}
+	
+	public Page<WorkClientInfo> findPageByclient(Page<WorkClientInfo> page, WorkClientInfo client) {
+		client.setPage(page);
+		page.setList(dao.findListByclient(client));
+		return page;
+	}
+	public Page<WorkBidProject> findPageByproject(Page<WorkBidProject> page, WorkBidProject project) {
+		project.setPage(page);
+		page.setList(dao.findListByproject(project));
+		return page;
+	}
+
+	/**
+	 * 审核流程
+	 * @param workInvoice
+	 */
+	@Transactional(readOnly = false)
+	public String auditSave(FilialeWorkInvoiceAlter workInvoice,List<User> auditUsers) {
+		String  str ="";
+		//所属部门
+		Office office = officeService.get(workInvoice.getOffice().getId());
+		String userName = UserUtils.get(workInvoice.getCreateBy().getId()).getName();
+		str = "发票申请编号:"+workInvoice.getNumber()+",实际开票单位:"+workInvoice.getClient().getName()+",创建人:"+userName+",所属部门:"+office.getName();
+		String title = "实际开票单位:"+workInvoice.getClient().getName();
+		// 对不同环节的业务逻辑进行操作
+		String taskDefKey = workInvoice.getAct().getTaskDefKey();
+		if (!"modifyApply".equals(taskDefKey)) {
+			actTaskService.claim(workInvoice.getAct().getTaskId(), UserUtils.getUser().getId());
+		}else {
+			workInvoice.getAct().setFlag("yes");
+			updateWorkInvoiceInfo(workInvoice);
+		}
+		String comment = "";
+		if (workInvoice.getInvoiceState().equals("4")){
+			comment = ("yes".equals(workInvoice.getAct().getFlag())?"[重新申请] ":"[已撤销] ");
+		}else {
+			comment = ("yes".equals(workInvoice.getAct().getFlag())?"[同意] ":"[驳回] ")+workInvoice.getAct().getComment();
+		}
+		//yes 的时候状态为审核通过 否则为未通过
+		//2 审核中 4 驳回
+		workInvoice.setInvoiceState(("yes".equals(workInvoice.getAct().getFlag()) ? "2" : "4"));
+		Map<String, Object> vars = Maps.newHashMap();
+		//业务逻辑对应的条件表达式
+		String exp = "";
+		String taskCount = "";
+		String notifyRole = "";
+		int key = 0;
+		String enname = "";
+		List<Activity> activitieList = activityService.getByProcessInstanceId(workInvoice.getProcessInstanceId());
+		WorkActivityMenu workActivityMenu = new WorkActivityMenu();
+		if (activitieList != null && activitieList.size() != 0) {
+			workActivityMenu.setProcessType(activitieList.get(0).getProcessKey());
+			workActivityMenu.setActivities(activitieList);
+		}
+
+		WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+		WorkActivityProcess selectProcess = new WorkActivityProcess();
+		selectProcess.setProcessInstanceId(workInvoice.getProcessInstanceId());
+		List<WorkActivityProcess> workActivityProcesses = workActivityProcessService.findList(selectProcess);
+		List<Activity> activities = workActivityMenu.getActivities();
+		if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("workinvoicealter")) {
+			key = 1;
+			for (int i = 0; i < workActivityProcesses.size(); i++) {
+				WorkActivityProcess activityProcess = workActivityProcesses.get(i);
+				if (taskDefKey.equals(activityProcess.getActivityTask()) && !taskDefKey.equals("modifyApply")) {
+					taskCount = activityProcess.getCount()+"";
+					workActivityProcess = activityProcess;
+					if (!workActivityProcess.getIsApproval().equals("0")) {
+						workActivityProcess.setId("");
+					}
+					exp = "pass";
+					if (!"yes".equals(workInvoice.getAct().getFlag())) {
+						workInvoice.setInvoiceState("4");
+						workActivityProcess.setIsApproval("2");
+						String returnBack = "-1";
+						for (Activity activity : activities) {
+							if (activity.getCount() == activityProcess.getCount()) {
+								notifyRole = activity.getName();
+								returnBack = activity.getReturnBack();
+								break;
+							}
+						}
+						if (returnBack.equals("0")) {
+							workActivityProcess.setId("");
+						}
+
+					} else {
+						workActivityProcess.setIsApproval("1");
+					}
+				}else if(taskDefKey.equals("modifyApply")){
+					notifyRole = "调整申请";
+					taskCount = "0";
+					exp = "pass";
+					workActivityProcess.setId("");
+					workActivityProcess.setCount(0);
+					if (!"yes".equals(workInvoice.getAct().getFlag())) {
+						workInvoice.setInvoiceState("3");
+						workActivityProcess.setIsApproval("2");
+					} else {
+						workActivityProcess.setIsApproval("1");
+					}
+					break;
+				}
+			}
+		} else {
+			workActivityMenu.setProcessType("workinvoicealter");
+			for (int i = 0; i < workActivityProcesses.size(); i++) {
+				WorkActivityProcess activityProcess = workActivityProcesses.get(i);
+				String count = activityProcess.getCount() + "";
+				workActivityProcess = activityProcess;
+				if (!workActivityProcess.getIsApproval().equals("0")) {
+					workActivityProcess.setId("");
+				}
+				// 审核环节
+				if ("cwzg".equals(taskDefKey) && count.contains("1")) {
+					taskCount = "1";
+					exp = "pass";
+					if ("yes".equals(workInvoice.getAct().getFlag()) &&("1").equals(workInvoice.getExt())) {
+						notifyRole = "审批通过";
+						workActivityProcess.setIsApproval("1");
+					}else {
+						notifyRole = "调整申请";
+						workActivityProcess.setIsApproval("2");
+					}
+					break;
+				} else if ("modifyApply".equals(taskDefKey)&& count.contains("0")) {
+					notifyRole = "财务主管";
+					taskCount = "0";
+					exp = "pass";
+					workActivityProcess.setCount(0);
+					enname = "cwzg";
+					if (!"yes".equals(workInvoice.getAct().getFlag())) {
+						workInvoice.setInvoiceState("3");
+					}
+					break;
+				} else if ("apply_end".equals(taskDefKey)) {
+				}
+
+			}
+		}
+		// 设置意见
+		workInvoice.getAct().setComment(("yes".equals(workInvoice.getAct().getFlag()) ? "[同意] " : "[驳回] ") + workInvoice.getAct().getComment());
+		workInvoice.preUpdate();
+		// 提交流程任务
+		vars.put(exp, "yes".equals(workInvoice.getAct().getFlag()) ? true : false);
+		vars.put("passs", true);
+		workActivityProcessService.updateProcess(workActivityProcess,workActivityMenu,key,taskCount,workInvoice.getProcessInstanceId(),taskDefKey,"modifyApply",workInvoice.getAct().getFlag(),comment, activities);
+		// 提交流程任务
+		actTaskService.complete(workInvoice.getAct().getTaskId(), workInvoice.getAct().getProcInsId(), workInvoice.getAct().getComment(), vars);
+		boolean state = actTaskService.isProcessEnd(workInvoice.getAct().getProcInsId());
+		List<User> users = new ArrayList<>();
+		List<User> userList = new ArrayList<>();
+		if (!state) {
+			str = "发票申请编号:"+workInvoice.getNumber()+",实际开票单位:"+workInvoice.getClient().getName();
+			title = "实际开票单位:"+workInvoice.getClient().getName();
+			users.add(workInvoice.getCreateBy());
+			if ("yes".equals(workInvoice.getAct().getFlag())) {
+				workInvoice.setInvoiceState("5");
+				WorkProjectNotify notify = new WorkProjectNotify();
+				notify.setNotifyId(workInvoice.getId());
+				userList = workProjectNotifyService.readByNotifyId(notify);
+				workProjectNotifyService
+						.save(UtilNotify
+								.saveNotify(workInvoice.getId(),
+										workInvoice.getCreateBy(),
+										workInvoice.getCompanyId(),
+										title,
+										str,
+										"48",
+										"0",
+										"待通知",
+										notifyRole));
+
+			} else {
+				WorkProjectNotify notify = new WorkProjectNotify();
+				notify.setNotifyId(workInvoice.getId());
+				userList = workProjectNotifyService.readByNotifyId(notify);
+				if (StringUtils.isNotBlank(workInvoice.getInvoiceState()) && !workInvoice.getInvoiceState().equals("3")){
+					workInvoice.setInvoiceState("4");
+					workProjectNotifyService
+							.save(UtilNotify
+									.saveNotify(workInvoice.getId(),
+											workInvoice.getCreateBy(),
+											workInvoice.getCompanyId(),
+											title,
+											str,
+											"48",
+											"0",
+											"待通知",
+											notifyRole));
+				}
+			}
+			workActivityProcessService.deleteProcessIdAuditUsers(workInvoice.getProcessInstanceId());
+		} else {
+			if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("workinvoicealter")) {
+				WorkProjectNotify notify = new WorkProjectNotify();
+				notify.setNotifyId(workInvoice.getId());
+				userList = workProjectNotifyService.readByNotifyId(notify);
+				WorkProjectNotify workProjectNotify = UtilNotify
+						.saveNotify(workInvoice.getId(),
+								new User(),
+								workInvoice.getCompanyId(),
+								title,
+								str,
+								"48",
+								"0",
+								"待审批",
+								notifyRole);
+				List<WorkProjectNotify> workProjectNotifys = activityService.getByFlagAndTaskDefKeyList(
+						activities,
+						workProjectNotify,
+						taskDefKey,
+						workInvoice.getAct().getFlag(),
+						taskCount,
+						workInvoice.getCreateBy(),
+						workInvoice.getOfficeId(),
+						"5");
+				for (WorkProjectNotify workProjectNotify1:workProjectNotifys){
+					users.add(workProjectNotify1.getUser());
+					workProjectNotify1.setId("");
+					workProjectNotify1.setIsNewRecord(false);
+					workProjectNotifyService
+							.save(workProjectNotify1);
+					if (!"modifyApply".equals(taskDefKey)){
+						Map<String,Object> extras = new HashMap<>();
+						extras.put("type","7001");
+						extras.put("id",workProjectNotify.getId());
+						extras.put("procDefKey","48");
+						UserUtils.pushInfoToApp(title,str,extras,workProjectNotify1.getUser().getId());
+					}
+				}
+
+			} else {
+				if (!"yes".equals(workInvoice.getAct().getFlag())) {
+					WorkProjectNotify notify = new WorkProjectNotify();
+					notify.setNotifyId(workInvoice.getId());
+					userList = workProjectNotifyService.readByNotifyId(notify);
+					workProjectNotifyService
+							.save(UtilNotify
+									.saveNotify(workInvoice.getId(),
+											workInvoice.getCreateBy(),
+											workInvoice.getCompanyId(),
+											title,
+											str,
+											"48",
+											"0",
+											"重新申请",
+											notifyRole));
+					users.add( workInvoice.getCreateBy());
+				} else {
+					if (StringUtils.isNotBlank(enname)) {
+						WorkProjectNotify notify = new WorkProjectNotify();
+						notify.setNotifyId(workInvoice.getId());
+						userList = workProjectNotifyService.readByNotifyId(notify);
+						WorkProjectNotify workProjectNotify = UtilNotify
+								.saveNotify(workInvoice.getId(),
+										new User(),
+										workInvoice.getCompanyId(),
+										title,
+										str,
+										"48",
+										"0",
+										"待审批",
+										notifyRole);
+						for (User user1:auditUsers){
+							users.add(user1);
+							workProjectNotify.setUser(user1);
+							workProjectNotify.setId("");
+							workProjectNotify.setIsNewRecord(false);
+							workProjectNotifyService
+									.save(workProjectNotify);
+							if (!"modifyApply".equals(taskDefKey)){
+								Map<String,Object> extras = new HashMap<>();
+								extras.put("type","7001");
+								extras.put("id",workProjectNotify.getId());
+								extras.put("procDefKey","48");
+								UserUtils.pushInfoToApp(title,str,extras,user1.getId());
+
+							}
+						}
+					}else {
+						WorkProjectNotify notify = new WorkProjectNotify();
+						notify.setNotifyId(workInvoice.getId());
+						userList = workProjectNotifyService.readByNotifyId(notify);
+						users.addAll(userList);
+						users.add(workInvoice.getCreateBy());
+						workProjectNotifyService
+								.save(UtilNotify
+										.saveNotify(workInvoice.getId(),
+												workInvoice.getCreateBy(),
+												workInvoice.getCompanyId(),
+												title,
+												str,
+												"48",
+												"0",
+												"重新申请",
+												notifyRole));
+					}
+				}
+			}
+		}
+		if (users!=null && users.size()!=0) {
+			for (User u : users) {
+				UserUtils.pushIm(u.getId(),str);
+			}
+		}
+		if (userList!=null && userList.size()!=0) {
+			for (User u : userList) {
+				UserUtils.pushMeIm(u.getId());
+			}
+		}
+		workInvoiceAlterDao.update(workInvoice);
+		if("5".equals(workInvoice.getInvoiceState())){
+			if(workInvoice.getWorkInvoice()!=null){
+				FilialeWorkInvoice workInvoice1 = invoiceService.get(workInvoice.getWorkInvoice().getId());
+				workInvoice1.setInvoiceState("5");
+				invoiceService.save(workInvoice1);
+				List<FilialeWorkInvoiceDetail> list2 = workInvoice1.getWorkAccountList();
+				if(list2!=null && list2.size()>0){
+					for (FilialeWorkInvoiceDetail w:
+						 list2) {
+						workInvoiceDetailService.delete(w);
+					}
+				}
+				if(StringUtils.isNotBlank(workInvoice.getId())){
+					FilialeWorkInvoiceDetail workInvoiceDetail = new FilialeWorkInvoiceDetail();
+					workInvoiceDetail.setAinvoiceId(workInvoice.getId());
+					List<FilialeWorkInvoiceDetail> list = workInvoiceDetailDao.afindList(workInvoiceDetail);
+					for(FilialeWorkInvoiceDetail workInvoiceDetail1 : list){
+						workInvoiceDetail1.setInvoiceId(workInvoice.getWorkInvoice().getId());
+						workInvoiceDetailService.save(workInvoiceDetail1);
+					}
+				}
+			}
+		}
+		return "保存审核意见成功!";
+	}
+
+
+
+	/**
+	 * 获取流程详细信息
+	 * @param processInstanceId
+	 */
+	@SuppressWarnings("unchecked")
+	public FilialeWorkInvoiceAlter getByProcessInstanceId(String processInstanceId) {
+		FilialeWorkInvoiceAlter workInvoice = dao.getByProcInsId(processInstanceId);
+		if(workInvoice!=null&&!workInvoice.equals("")){
+			if(workInvoice.getCreateBy()!=null&&!workInvoice.getCreateBy().equals("")){
+			if(StringUtils.isNotBlank(workInvoice.getCreateBy().getId())){
+				User u = UserUtils.get(workInvoice.getCreateBy().getId());
+				if(u!=null &&!u.equals("")){
+					workInvoice.setCreateBy(u);
+				}
+			}
+			}
+		}
+		return workInvoice;
+	}
+	@Transactional(readOnly = false)
+	public void update(FilialeWorkInvoiceAlter workInvoice) {
+		workInvoice.preUpdate();
+		dao.update(workInvoice);
+	}
+
+	/**
+	 * 强制撤销
+	 * @param workInvoice
+	 */
+	@Transactional(readOnly = false)
+	public void cancelInvalidate(FilialeWorkInvoiceAlter workInvoice) {
+		String invalidateProcessInstanceId = workInvoice.getProcessInstanceId();
+		try {
+			//将流程图中尚未走到的task的流程追踪信息逻辑删除,添加一条"撤销"流程追踪信息
+			WorkActivityProcess process = new WorkActivityProcess();
+			process.setProcessInstanceId(workInvoice.getProcessInstanceId());
+			process.setIsApproval("0");
+			WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+			workActivityProcess.setProcessInstanceId(workInvoice.getProcessInstanceId());
+			List<WorkActivityProcess> processList = workActivityProcessService.findList(workActivityProcess);
+			WorkProjectNotify notify = new WorkProjectNotify();
+			notify.setNotifyId(workInvoice.getId());
+			workProjectNotifyService.readByNotifyId(notify);
+			if (processList != null && processList.size() > 0) {
+				for (int i = 0; i < processList.size(); i++) {
+					WorkActivityProcess p = processList.get(i);
+					if (StringUtils.isNotBlank(p.getIsApproval()) && "0".equals(p.getIsApproval())) {
+						p.setDelFlag("1");
+						p.setIsApproval("-1");
+						workActivityProcessDao.updateDelFlagAndIsApproval(p);
+					}
+				}
+				WorkActivityProcess pro = new WorkActivityProcess();
+				pro.setId("");
+				pro.preInsert();
+				pro.setDelFlag("0");
+				pro.setRemarks("[强制撤销]");
+				pro.setProcessKey(processList.get(0).getProcessKey());
+				pro.setIsApproval("1");
+				pro.setProcessInstanceId(processList.get(0).getProcessInstanceId());
+				pro.setCount(0);
+				workActivityProcessDao.insert(pro);
+			}
+			//结束该流程,设为"撤销"状态
+			actTaskService.endProcessInstance(invalidateProcessInstanceId, "发票变更申请-撤销");
+			workInvoice.setInvoiceState("3");
+			workInvoice.preUpdate();
+			workInvoiceAlterDao.update(workInvoice);
+		} catch (ActivitiObjectNotFoundException e) {
+			logger.error("Exception e:"+e);
+			System.err.println("撤销发票变更申请异常,因为这个流程已不存在!");
+			e.printStackTrace();
+		} catch (Exception e) {
+			logger.error("Exception e:"+e);
+			e.printStackTrace();
+		}
+	}
+}

+ 766 - 0
src/main/java/com/jeeplus/modules/filialeWorkInvoice/service/FilialeWorkInvoiceDetailService.java

@@ -0,0 +1,766 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.filialeWorkInvoice.service;
+
+import com.google.common.collect.Maps;
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.service.CrudService;
+import com.jeeplus.common.utils.MenuStatusEnum;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.modules.act.service.ActTaskService;
+import com.jeeplus.modules.act.utils.ActUtils;
+import com.jeeplus.modules.filialeWorkInvoice.dao.FilialeWorkInvoiceDetailDao;
+import com.jeeplus.modules.filialeWorkInvoice.entity.FilialeWorkInvoice;
+import com.jeeplus.modules.filialeWorkInvoice.entity.FilialeWorkInvoiceDetail;
+import com.jeeplus.modules.serialnum.service.SerialNumTplService;
+import com.jeeplus.modules.sys.entity.Office;
+import com.jeeplus.modules.sys.entity.User;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import com.jeeplus.modules.workactivity.dao.WorkActivityProcessDao;
+import com.jeeplus.modules.workactivity.entity.Activity;
+import com.jeeplus.modules.workactivity.entity.WorkActivityProcess;
+import com.jeeplus.modules.workactivity.service.ActivityService;
+import com.jeeplus.modules.workactivity.service.WorkActivityProcessService;
+import com.jeeplus.modules.workactivitymenu.entity.WorkActivityMenu;
+import com.jeeplus.modules.workactivitymenu.service.WorkActivityMenuService;
+import com.jeeplus.modules.workprojectnotify.entity.WorkProjectNotify;
+import com.jeeplus.modules.workprojectnotify.service.WorkProjectNotifyService;
+import com.jeeplus.modules.workprojectnotify.util.UtilNotify;
+import org.activiti.engine.ActivitiObjectNotFoundException;
+import org.activiti.engine.HistoryService;
+import org.activiti.engine.IdentityService;
+import org.activiti.engine.RuntimeService;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 发票明细Service
+ * @author lw
+ * @version 2018-05-09
+ */
+@Service
+@Transactional(readOnly = true)
+public class FilialeWorkInvoiceDetailService extends CrudService<FilialeWorkInvoiceDetailDao, FilialeWorkInvoiceDetail> {
+	@Autowired
+	@Lazy
+	private FilialeWorkInvoiceService workInvoiceService;
+	@Autowired
+	private HistoryService historyService;
+	@Autowired
+	private RuntimeService runtimeService;
+	@Autowired
+	private IdentityService identityService;
+	@Autowired
+	private WorkActivityMenuService workActivityMenuService;
+	@Autowired
+	private WorkProjectNotifyService workProjectNotifyService;
+	@Autowired
+	private WorkActivityProcessService workActivityProcessService;
+	@Autowired
+	private FilialeWorkInvoiceDetailDao workInvoiceDetailDao;
+	@Autowired
+	private ActTaskService actTaskService;
+	@Autowired
+	private ActivityService activityService;
+	@Autowired
+	private WorkActivityProcessDao workActivityProcessDao;
+	@Autowired
+	private SerialNumTplService serialNumTplService;
+
+
+	public FilialeWorkInvoiceDetail get(String id) {
+		FilialeWorkInvoiceDetail workInvoiceDetail = super.get(id);
+		if(workInvoiceDetail!=null){
+			String wId = workInvoiceDetail.getInvoiceId();
+			if(StringUtils.isNotBlank(wId)){
+				FilialeWorkInvoice workInvoice = workInvoiceService.get(wId);
+				if(workInvoice!=null){
+					workInvoiceDetail.setWorkInvoice(workInvoice);
+				}
+			}
+		}
+		return workInvoiceDetail;
+	}
+	
+	public List<FilialeWorkInvoiceDetail> findList(FilialeWorkInvoiceDetail workInvoiceDetail) {
+		return super.findList(workInvoiceDetail);
+	}
+	
+	public Page<FilialeWorkInvoiceDetail> findPage(Page<FilialeWorkInvoiceDetail> page, FilialeWorkInvoiceDetail workInvoiceDetail) {
+		return super.findPage(page, workInvoiceDetail);
+	}
+	public Page<FilialeWorkInvoiceDetail> findPages(Page<FilialeWorkInvoiceDetail> page, FilialeWorkInvoiceDetail workInvoiceDetail) {
+		workInvoiceDetail.getSqlMap().put("dsf", dataScopeFilter(workInvoiceDetail.getCurrentUser(), "o", "u","s", MenuStatusEnum.WORK_INVOICEDETAIL.getValue()));
+		workInvoiceDetail.setPage(page);
+		page.setList(dao.findLists(workInvoiceDetail));
+		return page;
+	}
+	@Transactional(readOnly = false)
+	public void save(FilialeWorkInvoiceDetail workInvoiceDetail) {
+		super.save(workInvoiceDetail);
+	}
+	
+	@Transactional(readOnly = false)
+	public void delete(FilialeWorkInvoiceDetail workInvoiceDetail) {
+		super.delete(workInvoiceDetail);
+	}
+
+	@Transactional(readOnly = false)
+	public void deletes(FilialeWorkInvoiceDetail workInvoiceDetail) {
+		//清空退票信息实现逻辑删除退票申请
+		workInvoiceDetail.setSign(null);
+		workInvoiceDetail.setProcessInstanceId(null);
+		workInvoiceDetail.setReturnNumber(null);
+		workInvoiceDetail.setReturnReason(null);
+		workInvoiceDetail.setReturnCancle(null);
+		workInvoiceDetail.setReturnSign(null);
+		workInvoiceDetail.setReturnDate(null);
+		workInvoiceDetail.setReturnUser(null);
+		workInvoiceDetail.setStatus(null);
+		super.save(workInvoiceDetail);
+	}
+
+    public Page<FilialeWorkInvoiceDetail> findPageWithDept(Page<FilialeWorkInvoiceDetail> workInvoiceDetailPage, FilialeWorkInvoiceDetail invoice) {
+	    invoice.setPage(workInvoiceDetailPage);
+	    workInvoiceDetailPage.setList(dao.findListWithDept(invoice));
+        return workInvoiceDetailPage;
+    }
+	public Page<FilialeWorkInvoiceDetail> findPageReturn(Page<FilialeWorkInvoiceDetail> workInvoiceDetailPage, FilialeWorkInvoiceDetail invoice) {
+		invoice.getSqlMap().put("dsf", dataScopeFilter(invoice.getCurrentUser(), "o", "u","s", MenuStatusEnum.WORK_INVOICEDETAIL.getValue()));
+		invoice.setPage(workInvoiceDetailPage);
+		workInvoiceDetailPage.setList(dao.findListReturn(invoice));
+		return workInvoiceDetailPage;
+	}
+    public int updateIncomeMoney(FilialeWorkInvoiceDetail invoice) {
+	    invoice.preUpdate();
+        return dao.update(invoice);
+    }
+
+	/**
+	 * 提交存储
+	 * @param
+	 * @param variables
+	 */
+	@Transactional(readOnly = false)
+	public String saves(FilialeWorkInvoiceDetail workInvoiceDetail,Map<String, Object> variables,String processInstanceId) {
+		try {
+			if(StringUtils.isBlank(workInvoiceDetail.getReturnNumber())) {
+				workInvoiceDetail.setReturnNumber(serialNumTplService.genSerialNum(UserUtils.get(workInvoiceDetail.getCreateBy().getId()).getCompany(), workInvoiceDetail.SERIAL_BIZCODE));
+			}
+			User user = UserUtils.getUser();
+			super.save(workInvoiceDetail);
+			FilialeWorkInvoice workInvoice = new FilialeWorkInvoice();
+			if(workInvoiceDetail.getWorkInvoice()!=null){
+				if(StringUtils.isNotBlank(workInvoiceDetail.getWorkInvoice().getId())){
+					workInvoice = workInvoiceService.get(workInvoiceDetail.getWorkInvoice().getId());
+				}
+			}
+			String str =  "退票申请人:"+UserUtils.get(workInvoiceDetail.getCreateBy().getId()).getName()+",退票发票号:"+workInvoiceDetail.getNumber();
+			// 用来设置启动流程的人员ID,引擎会自动把用户ID保存到activiti:initiator中
+			identityService.setAuthenticatedUserId(user.getId());
+			// 启动流程
+			String businessKey = workInvoiceDetail.getId().toString();
+			Office office = UserUtils.getSelectOffice();
+			WorkActivityMenu workActivityMenu = workActivityMenuService.findByParentAndOffice("ggh3125f1f194c82bdea9uiopc750906", office);//menuid
+			// 启动流程
+			String processType = workActivityMenu.getProcessType();
+			StringBuffer buffer = new StringBuffer();
+			Activity activity = new Activity();
+			WorkProjectNotify workProjectNotify = UtilNotify
+					.saveNotify(workInvoiceDetail.getId(),
+							null,
+							workInvoiceDetail.getComId(),
+							"退票申请人:"+UserUtils.get(workInvoiceDetail.getCreateBy().getId()).getName()+",退票发票号:"+workInvoiceDetail.getNumber(),
+							str,
+							"40",
+							"0",
+							"待审批",
+							""
+					);
+			List<User> users = new ArrayList<>();
+			if (StringUtils.isNotBlank(workActivityMenu.getId())) {
+				workProjectNotify.setNotifyRole("");
+				workActivityMenu = workActivityMenuService.get(workActivityMenu.getId());
+				List<Activity> activities = workActivityMenu.getActivities();
+				for (Activity a : activities) {
+					String encount = a.getEncount();
+					String enlist = a.getEnlist();
+					if (a.getRole()!=null && StringUtils.isNotBlank(a.getRole().getEnname())){
+						List enusers = UserUtils.getByRoleActivityEnnames(a.getRole().getEnname(),office.getId(),"6",workInvoiceDetail.getCreateBy());
+						if (enusers.size()==0){
+							this.deletes(workInvoiceDetail);
+							return "流程审批人不能为空,角色"+a.getRole().getName()+"下无用户,请联系管理员!";
+						}
+						variables.put(enlist, enusers);
+						variables.put(encount, enusers.size());
+					}
+					if (a.getDelFlag().equals("0") && a.getCount() == 1) {
+						activity = a;
+					}
+				}
+				buffer.append(activity.getRole().getEnname());
+				if (activity != null && StringUtils.isNotBlank(activity.getId())) {
+					//角色审批
+					if (StringUtils.isNotBlank(activity.getRole().getEnname())) {
+						users = UserUtils.getByRoleActivityEnnames(activity.getRole().getEnname(),office.getId(),"6",workInvoiceDetail.getCreateBy());
+					}
+					//人员审批
+					if (StringUtils.isNotBlank(activity.getUser().getId())) {
+						users.add(activity.getUser());
+					}
+				}
+				workProjectNotify.setId("");
+			} else {
+				List<User> fpglys = new ArrayList<>();
+				List<User> zgkjs = new ArrayList<>();
+				List<User> bmzrs = UserUtils.getByRoleActivityEnname("bmzr",2,office.getId(),"6",workInvoiceDetail.getCreateBy());
+				List<User> fglds = UserUtils.getByRoleActivityEnname("fgld",2,office.getId(),"6",workInvoiceDetail.getCreateBy());
+				if(workInvoice!=null){
+					//1总公司0分公司
+					if("1".equals(workInvoice.getExt())){
+						fpglys = UserUtils.getByRoleActivityEnname("fpgly",1,office.getId(),"6",workInvoiceDetail.getCreateBy());
+						zgkjs = UserUtils.getByRoleActivityEnname("zghj",1,office.getId(),"6",workInvoiceDetail.getCreateBy());
+					}else if("0".equals(workInvoice.getExt())){
+						fpglys = UserUtils.getByRoleActivityEnname("fpgly",3,office.getId(),"6",workInvoiceDetail.getCreateBy());
+						zgkjs = UserUtils.getByRoleActivityEnname("zghj",3,office.getId(),"6",workInvoiceDetail.getCreateBy());
+					}
+				}
+				variables.put("bmzrList", bmzrs);
+				variables.put("fgldList", fglds);
+				variables.put("fpglyList", fpglys);
+				variables.put("zgkjList", zgkjs);
+				if (bmzrs.size()==0 || fglds.size()==0 || fpglys.size()==0 || zgkjs.size()==0){
+					this.deletes(workInvoiceDetail);
+				}
+				if (bmzrs.size()==0){
+					return "流程审批人不能为空,角色部门负责人下无用户,请联系管理员!";
+				}
+				if (fglds.size()==0){
+					return "流程审批人不能为空,角色分管领导下无用户,请联系管理员!";
+				}
+				if (fpglys.size()==0){
+					return "流程审批人不能为空,角色发票管理员下无用户,请联系管理员!";
+				}
+				if (zgkjs.size()==0){
+					return "流程审批人不能为空,角色主管会计下无用户,请联系管理员!";
+				}
+				variables.put("bmzrcount",bmzrs.size());
+				variables.put("fgldcount",fglds.size());
+				variables.put("fpglycount",fpglys.size());
+				variables.put("zgkjcount",zgkjs.size());
+				processType = "workinvoicereturn";
+				users.addAll(bmzrs);
+			}
+			for (User u : users){
+				workProjectNotify.setUser(u);
+				workProjectNotify.setId("");
+				workProjectNotifyService
+						.save(workProjectNotify);
+				/*List<WebSocket> toUserConns = ChatServerPool.getWebSocketByUser(u.getId());
+				for (WebSocket toUserConn:toUserConns) {
+					String message = "{\"to\":\""+u.getId()+"\"," +
+							"\"msg\":\"审批信息 申请人:" + user.getName() + ",发票单号:"+ workInvoiceDetail.getNumber() + " 待审批!\"," +
+							"\"useType\":\"sys\"}";
+					ChatServerPool.sendMessageToUser(toUserConn, message);//同时向本人发送消息
+				}*/
+				UserUtils.pushIm(u.getId(),"申请人:"+ user.getName()+",发票单号:"+workInvoiceDetail.getNumber());
+			}
+			variables.put("type", processType);
+			variables.put("busId", businessKey);
+			variables.put("title", "审批单:" + workInvoiceDetail.getNumber());//设置标题;
+
+			ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processType, businessKey, variables);
+			workInvoiceDetail.setProcessInstance(processInstance);
+			if (StringUtils.isNotBlank(processInstanceId)) {
+				workActivityProcessService.updateProcessInstanceId(processInstance.getId(),processInstanceId);
+				workActivityProcessService.deleteProcessInstanceId(processInstanceId);
+			}
+			// 更新流程实例ID
+			workInvoiceDetail.setProcessInstanceId(processInstance.getId());
+			workInvoiceDetailDao.updateProcessInstanceId(workInvoiceDetail);
+			List<Activity> list = workActivityMenu.getActivities();
+			if (list != null && list.size() != 0) {
+				workActivityProcessService.saveList(list, processInstance.getId());
+			} else {
+				WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+				workActivityProcess.setProcessKey("workinvoicereturn");
+				workActivityProcess.setCount(1);
+				workActivityProcess.setProcessInstanceId(processInstance.getId());
+				workActivityProcess.setIsApproval("0");
+				workActivityProcessService.save(workActivityProcess);
+				workActivityProcess.setCount(2);
+				workActivityProcess.setId("");
+				workActivityProcessService.save(workActivityProcess);
+				workActivityProcess.setCount(3);
+				workActivityProcess.setId("");
+				workActivityProcessService.save(workActivityProcess);
+				workActivityProcess.setCount(4);
+				workActivityProcess.setId("");
+				workActivityProcessService.save(workActivityProcess);
+			}
+			logger.debug("start process of {key={}, bkey={}, pid={}, variables={}}", new Object[]{
+					ActUtils.PD_REIMBURSEMENT[0], businessKey, processInstance.getId(), variables});
+		}catch (Exception e){
+			logger.info("Exception e:"+e);
+			return "Exception e:"+e;
+		}
+		return "";
+	}
+
+	/**
+	 * 审核流程
+	 * @param
+	 */
+	@Transactional(readOnly = false)
+	public String auditSave(FilialeWorkInvoiceDetail workInvoiceDetail) {
+		try {
+			String str =  "退票申请人:"+UserUtils.get(workInvoiceDetail.getCreateBy().getId()).getName()+",退票发票号:"+workInvoiceDetail.getNumber();
+			// 对不同环节的业务逻辑进行操作
+			String taskDefKey = workInvoiceDetail.getAct().getTaskDefKey();
+			if (!"modifyApply".equals(taskDefKey) && !taskDefKey.contains("audit")) {
+				actTaskService.claim(workInvoiceDetail.getAct().getTaskId(), UserUtils.getUser().getId());
+			}else {
+				workInvoiceDetail.getAct().setFlag("yes");
+			}
+			String comment = "";
+			if (workInvoiceDetail.getStatus().equals("4")){
+				comment = ("yes".equals(workInvoiceDetail.getAct().getFlag())?"[重新申请] ":"[已撤销] ");
+			}else {
+				comment = ("yes".equals(workInvoiceDetail.getAct().getFlag())?"[同意] ":"[驳回] ")+workInvoiceDetail.getAct().getComment();
+			}
+			//yes 的时候状态为审核通过 否则为未通过
+			//1 审核中 2 未通过
+			workInvoiceDetail.setStatus(("yes".equals(workInvoiceDetail.getAct().getFlag()) ? "2" : "4"));
+			String buffer = UserUtils.getRoleActivityEnname(UserUtils.getSelectCompany().getId(),workInvoiceDetail.getCreateBy());
+			Map<String, Object> vars = Maps.newHashMap();
+			//业务逻辑对应的条件表达式
+			String exp = "";
+			String taskCount = "";
+			String notifyRole = "";
+			int key = 0;
+			String enname = "";
+			List<Activity> activitieList = activityService.getByProcessInstanceId(workInvoiceDetail.getProcessInstanceId());
+			WorkActivityMenu workActivityMenu = new WorkActivityMenu();
+			if (activitieList != null && activitieList.size() != 0) {
+				workActivityMenu.setProcessType(activitieList.get(0).getProcessKey());
+				workActivityMenu.setActivities(activitieList);
+			}
+
+			WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+			WorkActivityProcess selectProcess = new WorkActivityProcess();
+			selectProcess.setProcessInstanceId(workInvoiceDetail.getProcessInstanceId());
+			List<WorkActivityProcess> workActivityProcesses = workActivityProcessService.findList(selectProcess);
+			List<Activity> activities = workActivityMenu.getActivities();
+			if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("workinvoicereturn")) {
+				key = 1;
+				for (int i = 0; i < workActivityProcesses.size(); i++) {
+					WorkActivityProcess activityProcess = workActivityProcesses.get(i);
+					if (taskDefKey.equals(activityProcess.getActivityTask()) && !taskDefKey.equals("modifyApply")) {
+						taskCount = activityProcess.getCount()+"";
+						workActivityProcess = activityProcess;
+						if (!workActivityProcess.getIsApproval().equals("0")) {
+							workActivityProcess.setId("");
+						}
+						exp = "pass";
+						if (!"yes".equals(workInvoiceDetail.getAct().getFlag())) {
+							workInvoiceDetail.setStatus("4");
+							str += " 被驳回!";
+							workActivityProcess.setIsApproval("2");
+							String returnBack = "-1";
+							for (Activity activity : activities) {
+								if (activity.getCount() == activityProcess.getCount()) {
+									notifyRole = activity.getName();
+									returnBack = activity.getReturnBack();
+									break;
+								}
+							}
+							if (returnBack.equals("0")) {
+								workActivityProcess.setId("");
+							}
+
+						} else {
+							str += " 待审批!";
+							workActivityProcess.setIsApproval("1");
+						}
+					}else if(taskDefKey.equals("modifyApply")){
+						notifyRole = "调整申请";
+						taskCount = "0";
+						exp = "pass";
+						workActivityProcess.setId("");
+						workActivityProcess.setCount(0);
+						if (!"yes".equals(workInvoiceDetail.getAct().getFlag())) {
+							workInvoiceDetail.setStatus("3");
+							str += " 已撤销!";
+							workActivityProcess.setIsApproval("2");
+						} else {
+							str += " 重新申请!";
+							workActivityProcess.setIsApproval("1");
+						}
+						break;
+					}
+				}
+			} else {
+				workActivityMenu.setProcessType("workinvoicereturn");
+				for (int i = 0; i < workActivityProcesses.size(); i++) {
+					WorkActivityProcess activityProcess = workActivityProcesses.get(i);
+					String count = activityProcess.getCount() + "";
+					workActivityProcess = activityProcess;
+					if (!workActivityProcess.getIsApproval().equals("0")) {
+						workActivityProcess.setId("");
+					}
+					// 审核环节
+					if ("bmzr".equals(taskDefKey) && count.contains("1")) {
+						taskCount = "1";
+						exp = "pass";
+						if ("yes".equals(workInvoiceDetail.getAct().getFlag())) {
+							notifyRole = "分管领导审核";
+							workActivityProcess.setIsApproval("1");
+							str += " 待审批!";
+							enname = buffer + "fgld";
+						} else {
+							notifyRole = "调整申请";
+							workActivityProcess.setIsApproval("2");
+							str += " 被驳回!";
+						}
+						break;
+					} else if ("fgld".equals(taskDefKey) && count.contains("2")) {
+						taskCount = "2";
+						exp = "pass";
+						if ("yes".equals(workInvoiceDetail.getAct().getFlag())) {
+							workActivityProcess.setIsApproval("1");
+							notifyRole = "发票管理员审核";
+							str += " 待审批!";
+							enname = buffer + "fpgly";
+						} else {
+							notifyRole = "调整申请";
+							workActivityProcess.setIsApproval("2");
+							str += " 被驳回!";
+						}
+						break;
+					} else if ("fpgly".equals(taskDefKey) && count.contains("3")) {
+						taskCount = "3";
+						exp = "pass";
+						if ("yes".equals(workInvoiceDetail.getAct().getFlag())) {
+							workActivityProcess.setIsApproval("1");
+							notifyRole = "主管会计审核";
+							str += " 待审批!";
+							enname = buffer + "zghj";
+						} else {
+							notifyRole = "调整申请";
+							workActivityProcess.setIsApproval("2");
+							str += " 被驳回!";
+						}
+						break;
+					} else if ("zgkj".equals(taskDefKey) && count.contains("4")) {
+						taskCount = "4";
+						exp = "pass";
+						if ("yes".equals(workInvoiceDetail.getAct().getFlag())) {
+							workActivityProcess.setIsApproval("1");
+							notifyRole = "审核通过";
+							str += " 待审批!";
+						} else {
+							notifyRole = "调整申请";
+							workActivityProcess.setIsApproval("2");
+							str += " 被驳回!";
+						}
+						break;
+					}  else if ("modifyApply".equals(taskDefKey)&& count.contains("0")) {
+						taskCount = "0";
+						exp = "pass";
+						workActivityProcess.setCount(0);
+						enname = buffer + "bmzr";
+						if (!"yes".equals(workInvoiceDetail.getAct().getFlag())) {
+							workInvoiceDetail.setStatus("3");
+						}
+						str += " 待审批!";
+						break;
+					} else if ("apply_end".equals(taskDefKey)) {
+					}
+
+				}
+			}
+			// 设置意见
+			workInvoiceDetail.getAct().setComment(("yes".equals(workInvoiceDetail.getAct().getFlag()) ? "[同意] " : "[驳回] ") + workInvoiceDetail.getAct().getComment());
+			workInvoiceDetail.preUpdate();
+			// 提交流程任务
+			vars.put(exp, "yes".equals(workInvoiceDetail.getAct().getFlag()) ? true : false);
+			vars.put("passs", true);
+			workActivityProcessService.updateProcess(workActivityProcess,workActivityMenu,key,taskCount,workInvoiceDetail.getProcessInstanceId(),taskDefKey,"modifyApply",workInvoiceDetail.getAct().getFlag(),comment, activities);
+			// 提交流程任务
+			actTaskService.complete(workInvoiceDetail.getAct().getTaskId(), workInvoiceDetail.getAct().getProcInsId(), workInvoiceDetail.getAct().getComment(), vars);
+			boolean state = actTaskService.isProcessEnd(workInvoiceDetail.getAct().getProcInsId());
+			List<User> users = new ArrayList<>();
+			String title = "";
+			if (!state) {
+				users.add(workInvoiceDetail.getCreateBy());
+				if ("yes".equals(workInvoiceDetail.getAct().getFlag())) {
+					title = "您的退票申请:"+workInvoiceDetail.getNumber()+"审核:已通过!";
+					workInvoiceDetail.setStatus("5");
+					WorkProjectNotify notify = new WorkProjectNotify();
+					notify.setNotifyId(workInvoiceDetail.getId());
+					List<User> userList = workProjectNotifyService.readByNotifyId(notify);
+					users.addAll(userList);
+					workProjectNotifyService
+							.save(UtilNotify
+									.saveNotify(workInvoiceDetail.getId(),
+											workInvoiceDetail.getCreateBy(),
+											workInvoiceDetail.getComId(),
+											title,
+											str,
+											"40",
+											"0",
+											"待通知",
+											""));
+
+				} else {
+					WorkProjectNotify notify = new WorkProjectNotify();
+					notify.setNotifyId(workInvoiceDetail.getId());
+					List<User> userList = workProjectNotifyService.readByNotifyId(notify);
+					users.addAll(userList);
+					if (StringUtils.isNotBlank(workInvoiceDetail.getStatus()) && !workInvoiceDetail.getStatus().equals("3")){
+						title = "您的退票申请:"+workInvoiceDetail.getNumber()+"审核:被驳回!";
+						workInvoiceDetail.setStatus("4");
+						workProjectNotifyService
+								.save(UtilNotify
+										.saveNotify(workInvoiceDetail.getId(),
+												workInvoiceDetail.getCreateBy(),
+												workInvoiceDetail.getComId(),
+												title,
+												str,
+												"40",
+												"0",
+												"待通知",
+												""));
+					}
+				}
+			} else {
+				if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("workinvoicereturn")) {
+					title = "退票申请人:"+UserUtils.get(workInvoiceDetail.getCreateBy().getId()).getName()+",退票发票号:"+workInvoiceDetail.getNumber()+" 待审批!";
+					WorkProjectNotify notify = new WorkProjectNotify();
+					notify.setNotifyId(workInvoiceDetail.getId());
+					List<User> userList = workProjectNotifyService.readByNotifyId(notify);
+					users.addAll(userList);
+					WorkProjectNotify workProjectNotify = UtilNotify
+							.saveNotify(workInvoiceDetail.getId(),
+									new User(),
+									workInvoiceDetail.getComId(),
+									title,
+									str,
+									"40",
+									"0",
+									"待审批",
+									"");
+					List<WorkProjectNotify> workProjectNotifys = activityService.getByFlagAndTaskDefKeyList(
+							activities,
+							workProjectNotify,
+							taskDefKey,
+							workInvoiceDetail.getAct().getFlag(),
+							taskCount,
+							workInvoiceDetail.getCreateBy(),
+							workInvoiceDetail.getOfficeId(),
+							"6");
+					for (WorkProjectNotify workProjectNotify1:workProjectNotifys){
+						users.add(workProjectNotify1.getUser());
+						workProjectNotify1.setId("");
+						workProjectNotify1.setIsNewRecord(false);
+						workProjectNotifyService
+								.save(workProjectNotify1);
+					}
+
+				} else {
+					if (!"yes".equals(workInvoiceDetail.getAct().getFlag())) {
+						title = "您的退票申请单:"+workInvoiceDetail.getNumber()+"被驳回,请重新申请!";
+						WorkProjectNotify notify = new WorkProjectNotify();
+						notify.setNotifyId(workInvoiceDetail.getId());
+						List<User> userList = workProjectNotifyService.readByNotifyId(notify);
+						users.addAll(userList);
+						workProjectNotifyService
+								.save(UtilNotify
+										.saveNotify(workInvoiceDetail.getId(),
+												workInvoiceDetail.getCreateBy(),
+												workInvoiceDetail.getComId(),
+												title,
+												str,
+												"40",
+												"0",
+												"重新申请",
+												""));
+						users.add( workInvoiceDetail.getCreateBy());
+					} else {
+						if (StringUtils.isNotBlank(enname)) {
+							title = "退票申请人:"+UserUtils.get(workInvoiceDetail.getCreateBy().getId()).getName()+",退票发票号:"+workInvoiceDetail.getNumber()+" 待审批!";
+							WorkProjectNotify notify = new WorkProjectNotify();
+							notify.setNotifyId(workInvoiceDetail.getId());
+							List<User> userList1 = workProjectNotifyService.readByNotifyId(notify);
+							users.addAll(userList1);
+							WorkProjectNotify workProjectNotify = UtilNotify
+									.saveNotify(workInvoiceDetail.getId(),
+											new User(),
+											workInvoiceDetail.getComId(),
+											title,
+											str,
+											"40",
+											"0",
+											"待审批",
+											"");
+							List<User> userList = UserUtils.getByRoleActivityEnnames(enname,workInvoiceDetail.getOfficeId(),"6",workInvoiceDetail.getCreateBy());
+							for (User user1:userList){
+								users.add(user1);
+								workProjectNotify.setUser(user1);
+								workProjectNotify.setId("");
+								workProjectNotify.setIsNewRecord(false);
+								workProjectNotifyService
+										.save(workProjectNotify);
+							}
+						}else {
+							title = "您的退票申请单:"+workInvoiceDetail.getNumber()+"被驳回,请重新申请!";
+							WorkProjectNotify notify = new WorkProjectNotify();
+							notify.setNotifyId(workInvoiceDetail.getId());
+							List<User> userList = workProjectNotifyService.readByNotifyId(notify);
+							users.addAll(userList);
+							users.add(workInvoiceDetail.getCreateBy());
+							workProjectNotifyService
+									.save(UtilNotify
+											.saveNotify(workInvoiceDetail.getId(),
+													workInvoiceDetail.getCreateBy(),
+													workInvoiceDetail.getComId(),
+													title,
+													str,
+													"40",
+													"0",
+													"重新申请",
+													""));
+						}
+					}
+				}
+			}
+			if (StringUtils.isNotBlank(title) && users!=null && users.size()!=0) {
+				for (User u : users) {
+					/*List<WebSocket> toUserConns = ChatServerPool.getWebSocketByUser(u.getId());
+					for (WebSocket toUserConn : toUserConns) {
+						String message = "{\"to\":\""+u.getId()+"\"," +
+								"\"msg\":\"审批信息 "+title+"\"," +
+								"\"useType\":\"sys\"}";
+						ChatServerPool.sendMessageToUser(toUserConn, message);//同时向本人发送消息
+					}*/
+					UserUtils.pushIm(u.getId(),title);
+
+				}
+			}
+			workInvoiceDetailDao.update(workInvoiceDetail);
+			return "保存审核意见成功!";
+		}catch (ActivitiObjectNotFoundException e){
+			logger.error("ActivitiObjectNotFoundException e:"+e);
+			return "流程已审批,不能重新审批!";
+		}catch (Exception e){
+			logger.error("Exception e:"+e);
+			return "保存审核意见失败!!";
+		}
+	}
+
+
+	/**
+	 * 获取流程详细信息
+	 * @param processInstanceId
+	 */
+	@SuppressWarnings("unchecked")
+	public FilialeWorkInvoiceDetail getByProcessInstanceId(String processInstanceId) {
+		FilialeWorkInvoiceDetail workInvoiceDetail = workInvoiceDetailDao.getByProcessInstanceId(processInstanceId);
+		return workInvoiceDetail;
+	}
+
+	@Transactional(readOnly = false)
+	public void cancelInvalidate(FilialeWorkInvoiceDetail workInvoiceDetail) {
+		String invalidateProcessInstanceId = workInvoiceDetail.getProcessInstanceId();
+		try {
+			//将流程图中尚未走到的task的流程追踪信息逻辑删除,添加一条"撤销"流程追踪信息
+			WorkActivityProcess process = new WorkActivityProcess();
+			process.setProcessInstanceId(workInvoiceDetail.getProcessInstanceId());
+			process.setIsApproval("0");
+			//List<WorkActivityProcess> processList1 = workActivityProcessService.findByProcInsId(process);
+			WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+			workActivityProcess.setProcessInstanceId(workInvoiceDetail.getProcessInstanceId());
+			List<WorkActivityProcess> processList = workActivityProcessService.findList(workActivityProcess);
+			WorkProjectNotify notify = new WorkProjectNotify();
+			notify.setNotifyId(workInvoiceDetail.getId());
+			List<User> userList = workProjectNotifyService.readByNotifyId(notify);
+			if (userList!=null && userList.size()!=0) {
+				for (User u : userList) {
+					User user = UserUtils.get(u.getId());
+					/*List<WebSocket> toUserConns = ChatServerPool.getWebSocketByUser(u.getId());
+					for (WebSocket toUserConn : toUserConns) {
+						String message = "{\"to\":\""+u.getId()+"\"," +
+								"\"msg\":\"审批信息 退票申请人:"+ user.getName()+",退票发票单号:"+workInvoiceDetail.getNumber() +" 强制撤销!\"," +
+								"\"useType\":\"sys\"}";
+						ChatServerPool.sendMessageToUser(toUserConn, message);//同时向本人发送消息
+					}*/
+					UserUtils.pushIm(u.getId(),"退票申请人:"+ user.getName()+",退票发票单号:"+workInvoiceDetail.getNumber() +" 强制撤销!");
+
+				}
+			}
+			if(processList!=null && processList.size()>0){
+				for (int i =0;i<processList.size();i++) {
+					WorkActivityProcess p = processList.get(i);
+					if(StringUtils.isNotBlank(p.getIsApproval()) && "0".equals(p.getIsApproval())){
+						p.setDelFlag("1");
+						p.setIsApproval("-1");
+						workActivityProcessDao.updateDelFlagAndIsApproval(p);
+					}
+				}
+				WorkActivityProcess pro = new WorkActivityProcess();
+				pro.setId("");
+				pro.preInsert();
+				pro.setDelFlag("0");
+				pro.setRemarks("[强制撤销]");
+				pro.setProcessKey(processList.get(0).getProcessKey());
+				pro.setIsApproval("1");
+				pro.setProcessInstanceId(processList.get(0).getProcessInstanceId());
+				pro.setCount(0);
+				workActivityProcessDao.insert(pro);
+			}
+
+			//结束该流程,设为"撤销"状态
+			actTaskService.endProcessInstance(invalidateProcessInstanceId,"报销-强制撤销");
+			workInvoiceDetail.setStatus("3");
+			workInvoiceDetail.preUpdate();
+			workInvoiceDetailDao.update(workInvoiceDetail);
+
+		}catch (ActivitiObjectNotFoundException e){
+			logger.error("Exception e:"+e);
+			System.err.println("撤销异常,因为这个流程已不存在!");
+			e.printStackTrace();
+		}
+		catch (Exception e) {
+			logger.error("Exception e:"+e);
+			e.printStackTrace();
+		}
+
+	}
+
+    public Page<FilialeWorkInvoiceDetail> findPageByCompany(Page<FilialeWorkInvoiceDetail> workInvoiceDetailPage, FilialeWorkInvoiceDetail invoice) {
+        invoice.setPage(workInvoiceDetailPage);
+        List<FilialeWorkInvoiceDetail> invoiceDetails = dao.findPageByCompany(invoice);
+        workInvoiceDetailPage.setList(invoiceDetails);
+        return workInvoiceDetailPage;
+    }
+
+    public void updateSettleFlag(FilialeWorkInvoiceDetail invoice) {
+        dao.updateSettleFlag(invoice);
+    }
+
+	public int countByNumber(String number) {
+		return dao.countByNumber(number);
+	}
+
+    public int countByNumAndComp(String invoiceNum, String comId) {
+        return dao.countByNumAndComp(invoiceNum,comId);
+    }
+}

+ 794 - 0
src/main/java/com/jeeplus/modules/filialeWorkInvoice/service/FilialeWorkInvoiceReturnService.java

@@ -0,0 +1,794 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.filialeWorkInvoice.service;
+
+import com.google.common.collect.Maps;
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.service.CrudService;
+import com.jeeplus.common.utils.MenuStatusEnum;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.modules.act.service.ActTaskService;
+import com.jeeplus.modules.act.utils.ActUtils;
+import com.jeeplus.modules.filialeWorkInvoice.dao.FilialeWorkInvoiceReturnDao;
+import com.jeeplus.modules.filialeWorkInvoice.entity.FilialeWorkInvoice;
+import com.jeeplus.modules.filialeWorkInvoice.entity.FilialeWorkInvoiceDetail;
+import com.jeeplus.modules.filialeWorkInvoice.entity.FilialeWorkInvoiceReturn;
+import com.jeeplus.modules.projectrecord.entity.ProjectRecords;
+import com.jeeplus.modules.projectrecord.service.ProjectRecordsService;
+import com.jeeplus.modules.serialnum.service.SerialNumTplService;
+import com.jeeplus.modules.sys.entity.Office;
+import com.jeeplus.modules.sys.entity.User;
+import com.jeeplus.modules.sys.service.OfficeService;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import com.jeeplus.modules.workactivity.dao.WorkActivityProcessDao;
+import com.jeeplus.modules.workactivity.entity.Activity;
+import com.jeeplus.modules.workactivity.entity.WorkActivityProcess;
+import com.jeeplus.modules.workactivity.service.ActivityService;
+import com.jeeplus.modules.workactivity.service.WorkActivityProcessService;
+import com.jeeplus.modules.workactivitymenu.entity.WorkActivityMenu;
+import com.jeeplus.modules.workactivitymenu.service.WorkActivityMenuService;
+import com.jeeplus.modules.workprojectnotify.entity.WorkProjectNotify;
+import com.jeeplus.modules.workprojectnotify.service.WorkProjectNotifyService;
+import com.jeeplus.modules.workprojectnotify.util.UtilNotify;
+import org.activiti.engine.ActivitiObjectNotFoundException;
+import org.activiti.engine.IdentityService;
+import org.activiti.engine.RuntimeService;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 退票管理Service
+ * @author lw
+ * @version 2018-06-15
+ */
+@Service
+@Transactional(readOnly = true)
+public class FilialeWorkInvoiceReturnService extends CrudService<FilialeWorkInvoiceReturnDao, FilialeWorkInvoiceReturn> {
+	@Autowired
+	private SerialNumTplService serialNumTplService;
+	@Autowired
+	private IdentityService identityService;
+	@Autowired
+	private WorkActivityMenuService workActivityMenuService;
+	@Autowired
+	private FilialeWorkInvoiceService workInvoiceService;
+	@Autowired
+	private WorkProjectNotifyService workProjectNotifyService;
+	@Autowired
+	private RuntimeService runtimeService;
+	@Autowired
+	private WorkActivityProcessService workActivityProcessService;
+	@Autowired
+	private FilialeWorkInvoiceReturnDao workInvoiceReturnDao;
+	@Autowired
+	private ActTaskService actTaskService;
+	@Autowired
+	private ActivityService activityService;
+	@Autowired
+	private WorkActivityProcessDao workActivityProcessDao;
+	@Autowired
+	private FilialeWorkInvoiceDetailService workInvoiceDetailService;
+	@Autowired
+	private ProjectRecordsService projectRecordsService;
+	@Autowired
+	private OfficeService officeService;
+
+
+	public FilialeWorkInvoiceReturn get(String id) {
+		FilialeWorkInvoiceReturn workInvoiceReturn = super.get(id);
+		if(workInvoiceReturn!=null){
+			String wId = workInvoiceReturn.getInvoiceDetail().getId();
+			if(StringUtils.isNotBlank(wId)){
+				FilialeWorkInvoiceDetail workInvoiceDetail = workInvoiceDetailService.get(wId);
+				if(workInvoiceDetail!=null){
+					if(workInvoiceDetail.getWorkInvoice()!=null){
+						String wId2 = workInvoiceDetail.getWorkInvoice().getId();
+						if(StringUtils.isNotBlank(wId2)){
+							FilialeWorkInvoice workInvoice = workInvoiceService.get(wId2);
+							if(workInvoice!=null){
+								workInvoiceDetail.setWorkInvoice(workInvoice);
+								if(workInvoice.getProject()!=null){
+									ProjectRecords projectRecords = workInvoice.getProject();
+										if(projectRecords!=null){
+											//设置项目组成员
+											projectRecordsService.queryUserNames(projectRecords);
+
+									}
+								}
+							}
+						}
+					}
+					workInvoiceReturn.setInvoiceDetail(workInvoiceDetail);
+				}
+			}
+		}
+		return workInvoiceReturn;
+	}
+	
+	public List<FilialeWorkInvoiceReturn> findList(FilialeWorkInvoiceReturn workInvoiceReturn) {
+		return super.findList(workInvoiceReturn);
+	}
+	
+	public Page<FilialeWorkInvoiceReturn> findPage(Page<FilialeWorkInvoiceReturn> page, FilialeWorkInvoiceReturn workInvoiceReturn) {
+		workInvoiceReturn.getSqlMap().put("dsf", dataScopeFilter(workInvoiceReturn.getCurrentUser(), "o", "u","s", MenuStatusEnum.WORK_INVOICERETURN.getValue()));
+		workInvoiceReturn.setPage(page);
+		page.setList(findList(workInvoiceReturn));
+		return page;
+	}
+	
+	@Transactional(readOnly = false)
+	public void save(FilialeWorkInvoiceReturn workInvoiceReturn) {
+		if (StringUtils.isBlank(workInvoiceReturn.getReturnNumber())) {
+			User user = UserUtils.getUser();
+			workInvoiceReturn.setReturnNumber(serialNumTplService.genSerialNum(user.getCompany(), workInvoiceReturn.SERIAL_BIZCODE));
+		}
+		super.save(workInvoiceReturn);
+	}
+
+	@Transactional(readOnly = false)
+	public String save(FilialeWorkInvoiceReturn workInvoiceReturn, Map<String, Object> variables, String processInstanceId) {
+		try {
+			User user = UserUtils.getUser();
+			if (StringUtils.isBlank(workInvoiceReturn.getReturnNumber())) {
+				workInvoiceReturn.setReturnNumber(serialNumTplService.genSerialNum(user.getCompany(), workInvoiceReturn.SERIAL_BIZCODE));
+			}
+			FilialeWorkInvoice workInvoice = new FilialeWorkInvoice();
+			Office office = officeService.get(workInvoiceReturn.getOfficeId());
+			if(workInvoiceReturn.getInvoiceDetail()!=null){
+				if(workInvoiceReturn.getInvoiceDetail().getWorkInvoice()!=null){
+					if(StringUtils.isNotBlank(workInvoiceReturn.getInvoiceDetail().getWorkInvoice().getId())){
+						workInvoice = workInvoiceService.get(workInvoiceReturn.getInvoiceDetail().getWorkInvoice());
+						if(workInvoice!=null && workInvoice.getOffice()!=null){
+							String oId = workInvoice.getOffice().getId();
+							if(StringUtils.isNotBlank(oId)){
+								office = officeService.get(oId);
+							}
+						}
+					}
+				}
+			}
+			super.save(workInvoiceReturn);
+			String str =  "被退票号:"+workInvoiceReturn.getInvoiceDetail().getNumber()+",实际开票单位:"+workInvoice.getClient().getName()+",申请人:"+user.getName()+",所属部门:"+office.getName();
+			String title = "实际开票单位:"+workInvoice.getClient().getName();
+			// 用来设置启动流程的人员ID,引擎会自动把用户ID保存到activiti:initiator中
+			identityService.setAuthenticatedUserId(user.getId());
+			String businessKey = workInvoiceReturn.getId().toString();
+			WorkActivityMenu workActivityMenu = workActivityMenuService.findByParentAndOffice("ggh3125f1f194c82bdea9uiopc750906", office);//menuid
+			// 启动流程
+			String processType = workActivityMenu.getProcessType();
+			StringBuffer buffer = new StringBuffer();
+			Activity activity = new Activity();
+			WorkProjectNotify workProjectNotify = UtilNotify
+					.saveNotify(workInvoiceReturn.getId(),
+							null,
+							workInvoiceReturn.getCompanyId(),
+							title,
+							str,
+							"40",
+							"0",
+							"待审批",
+							""
+					);
+			List<User> users = new ArrayList<>();
+			List<User> fpglys = new ArrayList<>();
+			List<User> zgkjs = new ArrayList<>();
+			List<User> bmzrs = UserUtils.getByRoleActivityEnname("bmzr",2,office.getId(),"6",workInvoiceReturn.getCreateBy());
+			if(workInvoice!=null){
+				//1总公司0分公司
+				if("1".equals(workInvoice.getExt())){
+					fpglys = UserUtils.getByRoleActivityEnname("fpgly",1,office.getId(),"6",workInvoiceReturn.getCreateBy());
+					zgkjs = UserUtils.getByRoleActivityEnname("zghj",1,office.getId(),"6",workInvoiceReturn.getCreateBy());
+				}else if("0".equals(workInvoice.getExt())){
+					fpglys = UserUtils.getByRoleActivityEnname("fpgly",3,office.getId(),"6",workInvoiceReturn.getCreateBy());
+					zgkjs = UserUtils.getByRoleActivityEnname("zghj",3,office.getId(),"6",workInvoiceReturn.getCreateBy());
+				}
+			}
+			if (StringUtils.isNotBlank(workActivityMenu.getId())) {
+				workProjectNotify.setNotifyRole("");
+				workActivityMenu = workActivityMenuService.get(workActivityMenu.getId());
+				List<Activity> activities = workActivityMenu.getActivities();
+				for (Activity a : activities) {
+					String encount = a.getEncount();
+					String enlist = a.getEnlist();
+					if (a.getRole()!=null && StringUtils.isNotBlank(a.getRole().getEnname())){
+						List enusers = UserUtils.getByRoleActivityEnnames(a.getRole().getEnname(),office.getId(),"6",workInvoiceReturn.getCreateBy());
+						if (enusers.size()==0){
+							workInvoiceReturn.setStatus("1");
+							this.save(workInvoiceReturn);
+							return "流程审批人不能为空,角色"+a.getRole().getName()+"下无用户,请联系管理员!";
+						}
+						variables.put(enlist, enusers);
+						variables.put(encount, enusers.size());
+					}
+					if (a.getDelFlag().equals("0") && a.getCount() == 1) {
+						activity = a;
+					}
+				}
+				buffer.append(activity.getRole().getEnname());
+				if (activity != null && StringUtils.isNotBlank(activity.getId())) {
+					//角色审批
+					if (StringUtils.isNotBlank(activity.getRole().getEnname())) {
+						users = UserUtils.getByRoleActivityEnnames(activity.getRole().getEnname(),office.getId(),"6",workInvoiceReturn.getCreateBy());
+					}
+					//人员审批
+					if (StringUtils.isNotBlank(activity.getUser().getId())) {
+						users.add(activity.getUser());
+					}
+				}
+				workProjectNotify.setId("");
+			} else {
+
+				/*variables.put("fgldList", fglds);
+				variables.put("fpglyList", fpglys);
+				variables.put("zgkjList", zgkjs);*/
+				if (bmzrs.size()==0){
+					workInvoiceReturn.setStatus("1");
+					this.save(workInvoiceReturn);
+				}
+				if (bmzrs.size()==0){
+					return "流程审批人不能为空,角色部门负责人下无用户,请联系管理员!";
+				}
+				/*if (fglds.size()==0){
+					return "流程审批人不能为空,角色分管领导下无用户,请联系管理员!";
+				}
+				if (fpglys.size()==0){
+					return "流程审批人不能为空,角色发票管理员下无用户,请联系管理员!";
+				}
+				if (zgkjs.size()==0){
+					return "流程审批人不能为空,角色主管会计下无用户,请联系管理员!";
+				}*/
+				/*variables.put("fgldcount",fglds.size());
+				variables.put("fpglycount",fpglys.size());
+				variables.put("zgkjcount",zgkjs.size());*/
+				variables.put("bmzrcount",bmzrs.size());
+				variables.put("bmzrList",bmzrs);
+				processType = "workinvoicereturn";
+				users.addAll(bmzrs);
+			}
+			for (User u : users){
+				workProjectNotify.setUser(u);
+				workProjectNotify.setId("");
+				workProjectNotifyService
+						.save(workProjectNotify);
+				/*List<WebSocket> toUserConns = ChatServerPool.getWebSocketByUser(u.getId());
+				for (WebSocket toUserConn:toUserConns) {
+					String message = "{\"to\":\""+u.getId()+"\"," +
+							"\"msg\":\"审批信息 申请人:" + user.getName() + ",退票申请编号:"+workInvoiceReturn.getReturnNumber() + " 待审批!\"," +
+							"\"useType\":\"sys\"}";
+					ChatServerPool.sendMessageToUser(toUserConn, message);//同时向本人发送消息
+				}*/
+				Map<String,Object> extras = new HashMap<>();
+				extras.put("type","7002");
+				extras.put("id",workProjectNotify.getId());
+				extras.put("procDefKey","40");
+				UserUtils.pushInfoToApp(title,str,extras,u.getId());
+				UserUtils.pushIm(u.getId(),str);
+			}
+			variables.put("type", processType);
+			variables.put("busId", businessKey);
+			variables.put("title", "审批单:" + workInvoiceReturn.getNumber());//设置标题;
+
+			ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processType, businessKey, variables);
+			workInvoiceReturn.setProcessInstance(processInstance);
+			if (StringUtils.isNotBlank(processInstanceId)) {
+				workActivityProcessService.updateProcessInstanceId(processInstance.getId(),processInstanceId);
+				workActivityProcessService.deleteProcessInstanceId(processInstanceId);
+				workActivityProcessService.deleteProcessIdAuditUsers(processInstanceId);
+			}
+			// 更新流程实例ID
+			workInvoiceReturn.setProcessInstanceId(processInstance.getId());
+			workInvoiceReturnDao.updateProcessInstanceId(workInvoiceReturn);
+			List<Activity> list = workActivityMenu.getActivities();
+			if (list != null && list.size() != 0) {
+				workActivityProcessService.saveList(list, processInstance.getId());
+			} else {
+				WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+				workActivityProcess.setProcessKey("workinvoicereturn");
+				workActivityProcess.setCount(1);
+				workActivityProcess.setProcessInstanceId(processInstance.getId());
+				workActivityProcess.setIsApproval("0");
+				workActivityProcessService.save(workActivityProcess);
+				workActivityProcess.setCount(2);
+				workActivityProcess.setId("");
+				workActivityProcessService.save(workActivityProcess);
+				workActivityProcess.setCount(3);
+				workActivityProcess.setId("");
+				workActivityProcessService.save(workActivityProcess);
+				workActivityProcessService.insertAuditsByType(bmzrs,processInstance.getId(),1,1);
+				workActivityProcessService.insertAuditsByType(fpglys,processInstance.getId(),2,0);
+				workActivityProcessService.insertAuditsByType(zgkjs,processInstance.getId(),3,0);
+
+			}
+			logger.debug("start process of {key={}, bkey={}, pid={}, variables={}}", new Object[]{
+					ActUtils.PD_REIMBURSEMENT[0], businessKey, processInstance.getId(), variables});
+		}catch (Exception e){
+			logger.info("Exception e:"+e);
+			return "Exception e:"+e;
+		}
+		return "";
+	}
+	@Transactional(readOnly = false)
+	public void delete(FilialeWorkInvoiceReturn workInvoiceReturn) {
+		super.delete(workInvoiceReturn);
+		WorkProjectNotify notify = new WorkProjectNotify();
+		notify.setNotifyId(workInvoiceReturn.getId());
+		List<User> users = workProjectNotifyService.readByNotifyId(notify);
+		if (users!=null && users.size()!=0){
+			for (User user:users){
+				UserUtils.pushMeIm(user.getId());
+			}
+		}
+	}
+
+	/**
+	 * 审核流程
+	 * @param
+	 */
+	@Transactional(readOnly = false)
+	public String auditSave(FilialeWorkInvoiceReturn workInvoiceReturn,List<User> auditUsers) {
+		FilialeWorkInvoice workInvoice = new FilialeWorkInvoice();
+		Office office = officeService.get(workInvoiceReturn.getOfficeId());
+		if(workInvoiceReturn.getInvoiceDetail()!=null){
+			if(workInvoiceReturn.getInvoiceDetail().getWorkInvoice()!=null){
+				if(StringUtils.isNotBlank(workInvoiceReturn.getInvoiceDetail().getWorkInvoice().getId())){
+					workInvoice = workInvoiceService.get(workInvoiceReturn.getInvoiceDetail().getWorkInvoice());
+					if(workInvoice!=null && workInvoice.getOffice()!=null){
+						String oId = workInvoice.getOffice().getId();
+						if(StringUtils.isNotBlank(oId)){
+							office = officeService.get(oId);
+						}
+					}
+				}
+			}
+		}
+		super.save(workInvoiceReturn);
+		String userName = UserUtils.get(workInvoiceReturn.getCreateBy().getId()).getName();
+		String str =  "被退票号:"+workInvoiceReturn.getInvoiceDetail().getNumber()+",实际开票单位:"+workInvoice.getClient().getName()+",申请人:"+userName+",所属部门:"+office.getName();
+		String title = "实际开票单位:"+workInvoice.getClient().getName();
+		// 对不同环节的业务逻辑进行操作
+		String taskDefKey = workInvoiceReturn.getAct().getTaskDefKey();
+		if (!"modifyApply".equals(taskDefKey) && !taskDefKey.contains("audit")) {
+			actTaskService.claim(workInvoiceReturn.getAct().getTaskId(), UserUtils.getUser().getId());
+		}else {
+			workInvoiceReturn.getAct().setFlag("yes");
+		}
+		String comment = "";
+		if (workInvoiceReturn.getStatus().equals("4")){
+			comment = ("yes".equals(workInvoiceReturn.getAct().getFlag())?"[重新申请] ":"[已撤销] ");
+		}else {
+			comment = ("yes".equals(workInvoiceReturn.getAct().getFlag())?"[同意] ":"[驳回] ")+workInvoiceReturn.getAct().getComment();
+		}
+		//yes 的时候状态为审核通过 否则为未通过
+		//1 审核中 2 未通过
+		workInvoiceReturn.setStatus(("yes".equals(workInvoiceReturn.getAct().getFlag()) ? "2" : "4"));
+		Map<String, Object> vars = Maps.newHashMap();
+		//业务逻辑对应的条件表达式
+		String exp = "";
+		String taskCount = "";
+		String notifyRole = "";
+		int key = 0;
+		String enname = "";
+		List<Activity> activitieList = activityService.getByProcessInstanceId(workInvoiceReturn.getProcessInstanceId());
+		WorkActivityMenu workActivityMenu = new WorkActivityMenu();
+		if (activitieList != null && activitieList.size() != 0) {
+			workActivityMenu.setProcessType(activitieList.get(0).getProcessKey());
+			workActivityMenu.setActivities(activitieList);
+		}
+
+		WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+		WorkActivityProcess selectProcess = new WorkActivityProcess();
+		selectProcess.setProcessInstanceId(workInvoiceReturn.getProcessInstanceId());
+		List<WorkActivityProcess> workActivityProcesses = workActivityProcessService.findList(selectProcess);
+		List<Activity> activities = workActivityMenu.getActivities();
+		if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("workinvoicereturn")) {
+			key = 1;
+			for (int i = 0; i < workActivityProcesses.size(); i++) {
+				WorkActivityProcess activityProcess = workActivityProcesses.get(i);
+				if (taskDefKey.equals(activityProcess.getActivityTask()) && !taskDefKey.equals("modifyApply")) {
+					taskCount = activityProcess.getCount()+"";
+					workActivityProcess = activityProcess;
+					if (!workActivityProcess.getIsApproval().equals("0")) {
+						workActivityProcess.setId("");
+					}
+					exp = "pass";
+					if (!"yes".equals(workInvoiceReturn.getAct().getFlag())) {
+						workInvoiceReturn.setStatus("4");
+						workActivityProcess.setIsApproval("2");
+						String returnBack = "-1";
+						for (Activity activity : activities) {
+							if (activity.getCount() == activityProcess.getCount()) {
+								notifyRole = activity.getName();
+								returnBack = activity.getReturnBack();
+								break;
+							}
+						}
+						if (returnBack.equals("0")) {
+							workActivityProcess.setId("");
+						}
+
+					} else {
+						workActivityProcess.setIsApproval("1");
+					}
+				}else if(taskDefKey.equals("modifyApply")){
+					notifyRole = "调整申请";
+					taskCount = "0";
+					exp = "pass";
+					workActivityProcess.setId("");
+					workActivityProcess.setCount(0);
+					if (!"yes".equals(workInvoiceReturn.getAct().getFlag())) {
+						workInvoiceReturn.setStatus("3");
+						workActivityProcess.setIsApproval("2");
+					} else {
+						workActivityProcess.setIsApproval("1");
+					}
+					break;
+				}
+			}
+		} else {
+			workActivityMenu.setProcessType("workinvoicereturn");
+			for (int i = 0; i < workActivityProcesses.size(); i++) {
+				WorkActivityProcess activityProcess = workActivityProcesses.get(i);
+				String count = activityProcess.getCount() + "";
+				workActivityProcess = activityProcess;
+				if (!workActivityProcess.getIsApproval().equals("0")) {
+					workActivityProcess.setId("");
+				}
+				// 审核环节
+				if ("bmzr".equals(taskDefKey) && count.contains("1")) {
+					taskCount = "1";
+					exp = "pass";
+					if ("yes".equals(workInvoiceReturn.getAct().getFlag())) {
+						workActivityProcessService.insertAuditsByType(auditUsers,workInvoiceReturn.getProcessInstanceId(),2,1);
+						notifyRole = "发票管理员审核";
+						workActivityProcess.setIsApproval("1");
+						enname = "fpgly";
+						vars.put("fpglyList", auditUsers);
+						vars.put("fpglycount",auditUsers.size());
+					} else {
+						notifyRole = "调整申请";
+						workActivityProcess.setIsApproval("2");
+					}
+					break;
+				} else if ("fpgly".equals(taskDefKey) && count.contains("2")) {
+					taskCount = "2";
+					exp = "pass";
+					if ("yes".equals(workInvoiceReturn.getAct().getFlag())) {
+						workActivityProcessService.insertAuditsByType(auditUsers,workInvoiceReturn.getProcessInstanceId(),3,1);
+						workActivityProcess.setIsApproval("1");
+						notifyRole = "主管会计审核";
+						enname = "zgkj";
+						vars.put("zgkjList", auditUsers);
+						vars.put("zgkjcount",auditUsers.size());
+					} else {
+						notifyRole = "调整申请";
+						workActivityProcess.setIsApproval("2");
+					}
+					break;
+				} else if ("zgkj".equals(taskDefKey) && count.contains("3")) {
+					taskCount = "3";
+					exp = "pass";
+					if ("yes".equals(workInvoiceReturn.getAct().getFlag())) {
+						workActivityProcess.setIsApproval("1");
+						notifyRole = "审核通过";
+					} else {
+						notifyRole = "调整申请";
+						workActivityProcess.setIsApproval("2");
+					}
+					break;
+				}  else if ("modifyApply".equals(taskDefKey)&& count.contains("0")) {
+					taskCount = "0";
+					exp = "pass";
+					workActivityProcess.setCount(0);
+					enname = "bmzr";
+					if (!"yes".equals(workInvoiceReturn.getAct().getFlag())) {
+						workInvoiceReturn.setStatus("3");
+					}
+					break;
+				} else if ("apply_end".equals(taskDefKey)) {
+				}
+
+			}
+		}
+		// 设置意见
+		workInvoiceReturn.getAct().setComment(("yes".equals(workInvoiceReturn.getAct().getFlag()) ? "[同意] " : "[驳回] ") + workInvoiceReturn.getAct().getComment());
+		workInvoiceReturn.preUpdate();
+		// 提交流程任务
+		vars.put(exp, "yes".equals(workInvoiceReturn.getAct().getFlag()) ? true : false);
+		vars.put("passs", true);
+		workActivityProcessService.updateProcess(workActivityProcess,workActivityMenu,key,taskCount,workInvoiceReturn.getProcessInstanceId(),taskDefKey,"modifyApply",workInvoiceReturn.getAct().getFlag(),comment, activities);
+		// 提交流程任务
+		actTaskService.complete(workInvoiceReturn.getAct().getTaskId(), workInvoiceReturn.getAct().getProcInsId(), workInvoiceReturn.getAct().getComment(), vars);
+		boolean state = actTaskService.isProcessEnd(workInvoiceReturn.getAct().getProcInsId());
+		List<User> users = new ArrayList<>();
+		List<User> userList = new ArrayList<>();
+		if (!state) {
+			str =  "被退票号:"+workInvoiceReturn.getInvoiceDetail().getNumber()+",实际开票单位:"+workInvoice.getClient().getName();
+			title = "实际开票单位:"+workInvoice.getClient().getName();
+			users.add(workInvoiceReturn.getCreateBy());
+			if ("yes".equals(workInvoiceReturn.getAct().getFlag())) {
+				workInvoiceReturn.setStatus("5");
+				WorkProjectNotify notify = new WorkProjectNotify();
+				notify.setNotifyId(workInvoiceReturn.getId());
+				userList = workProjectNotifyService.readByNotifyId(notify);
+				workProjectNotifyService
+						.save(UtilNotify
+								.saveNotify(workInvoiceReturn.getId(),
+										workInvoiceReturn.getCreateBy(),
+										workInvoiceReturn.getCompanyId(),
+										title,
+										str,
+										"40",
+										"0",
+										"待通知",
+										notifyRole));
+
+			} else {
+				WorkProjectNotify notify = new WorkProjectNotify();
+				notify.setNotifyId(workInvoiceReturn.getId());
+				userList = workProjectNotifyService.readByNotifyId(notify);
+				if (StringUtils.isNotBlank(workInvoiceReturn.getStatus()) && !workInvoiceReturn.getStatus().equals("3")){
+					workInvoiceReturn.setStatus("4");
+					workProjectNotifyService
+							.save(UtilNotify
+									.saveNotify(workInvoiceReturn.getId(),
+											workInvoiceReturn.getCreateBy(),
+											workInvoiceReturn.getCompanyId(),
+											title,
+											str,
+											"40",
+											"0",
+											"待通知",
+											notifyRole));
+				}
+			}
+			workActivityProcessService.deleteProcessIdAuditUsers(workInvoiceReturn.getProcessInstanceId());
+		} else {
+			if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("workinvoicereturn")) {
+				WorkProjectNotify notify = new WorkProjectNotify();
+				notify.setNotifyId(workInvoiceReturn.getId());
+				userList = workProjectNotifyService.readByNotifyId(notify);
+				WorkProjectNotify workProjectNotify = UtilNotify
+						.saveNotify(workInvoiceReturn.getId(),
+								new User(),
+								workInvoiceReturn.getCompanyId(),
+								title,
+								str,
+								"40",
+								"0",
+								"待审批",
+								notifyRole);
+				List<WorkProjectNotify> workProjectNotifys = activityService.getByFlagAndTaskDefKeyList(
+						activities,
+						workProjectNotify,
+						taskDefKey,
+						workInvoiceReturn.getAct().getFlag(),
+						taskCount,
+						workInvoiceReturn.getCreateBy(),
+						office.getId(),
+						"6");
+				for (WorkProjectNotify workProjectNotify1:workProjectNotifys){
+					users.add(workProjectNotify1.getUser());
+					workProjectNotify1.setId("");
+					workProjectNotify1.setIsNewRecord(false);
+					workProjectNotifyService
+							.save(workProjectNotify1);
+					if (!"modifyApply".equals(taskDefKey)){
+						Map<String,Object> extras = new HashMap<>();
+						if ("fpgly".equals(taskDefKey) || "zgkj".equals(taskDefKey) ){
+							extras.put("type","7001");
+						}else {
+							extras.put("type","7002");
+						}
+						extras.put("id",workProjectNotify.getId());
+						extras.put("procDefKey","40");
+						UserUtils.pushInfoToApp(title,str,extras,workProjectNotify1.getUser().getId());
+					}
+				}
+
+			} else {
+				if (!"yes".equals(workInvoiceReturn.getAct().getFlag())) {
+					WorkProjectNotify notify = new WorkProjectNotify();
+					notify.setNotifyId(workInvoiceReturn.getId());
+					userList = workProjectNotifyService.readByNotifyId(notify);
+					workProjectNotifyService
+							.save(UtilNotify
+									.saveNotify(workInvoiceReturn.getId(),
+											workInvoiceReturn.getCreateBy(),
+											workInvoiceReturn.getCompanyId(),
+											title,
+											str,
+											"40",
+											"0",
+											"重新申请",
+											notifyRole));
+					users.add( workInvoiceReturn.getCreateBy());
+				} else {
+					if (StringUtils.isNotBlank(enname)) {
+						WorkProjectNotify notify = new WorkProjectNotify();
+						notify.setNotifyId(workInvoiceReturn.getId());
+						userList = workProjectNotifyService.readByNotifyId(notify);
+						WorkProjectNotify workProjectNotify = UtilNotify
+								.saveNotify(workInvoiceReturn.getId(),
+										new User(),
+										workInvoiceReturn.getCompanyId(),
+										title,
+										str,
+										"40",
+										"0",
+										"待审批",
+										notifyRole);
+						for (User user1:auditUsers){
+							users.add(user1);
+							workProjectNotify.setUser(user1);
+							workProjectNotify.setId("");
+							workProjectNotify.setIsNewRecord(false);
+							workProjectNotifyService
+									.save(workProjectNotify);
+							if (!"modifyApply".equals(taskDefKey)){
+								Map<String,Object> extras = new HashMap<>();
+								if ("fpgly".equals(taskDefKey) || "zgkj".equals(taskDefKey) ){
+									extras.put("type","7001");
+								}else {
+									extras.put("type","7002");
+								}
+								extras.put("id",workProjectNotify.getId());
+								extras.put("procDefKey","40");
+								UserUtils.pushInfoToApp(title,str,extras,user1.getId());
+							}
+						}
+					}else {
+						WorkProjectNotify notify = new WorkProjectNotify();
+						notify.setNotifyId(workInvoiceReturn.getId());
+						userList = workProjectNotifyService.readByNotifyId(notify);
+						users.addAll(userList);
+						users.add(workInvoiceReturn.getCreateBy());
+						workProjectNotifyService
+								.save(UtilNotify
+										.saveNotify(workInvoiceReturn.getId(),
+												workInvoiceReturn.getCreateBy(),
+												workInvoiceReturn.getCompanyId(),
+												title,
+												str,
+												"40",
+												"0",
+												"重新申请",
+												notifyRole));
+					}
+				}
+			}
+		}
+		if (users!=null && users.size()!=0) {
+			for (User u : users) {
+				UserUtils.pushIm(u.getId(),str);
+			}
+		}
+		if (userList!=null && userList.size()!=0) {
+			for (User u : userList) {
+				UserUtils.pushMeIm(u.getId());
+			}
+		}
+		workInvoiceReturnDao.update(workInvoiceReturn);
+		if("5".equals(workInvoiceReturn.getStatus())){
+			if(workInvoiceReturn.getInvoiceDetail()!=null){
+				String wid = workInvoiceReturn.getInvoiceDetail().getId();
+				FilialeWorkInvoiceDetail workInvoiceDetail = workInvoiceDetailService.get(wid);
+				//作废
+				if("2".equals(workInvoiceReturn.getCancleReturn())){
+					workInvoiceDetail.setState("作废");
+					workInvoiceDetailService.save(workInvoiceDetail);
+				}else{
+					//退票
+					workInvoiceDetail.setBackSign("被退");//被退标记置为1
+					workInvoiceDetailService.save(workInvoiceDetail);
+					//冲销发票
+					FilialeWorkInvoiceDetail invoiceDetail = new FilialeWorkInvoiceDetail();
+					invoiceDetail.setBackNumber(workInvoiceDetail.getNumber());
+					invoiceDetail.setBackCode(workInvoiceDetail.getCode());
+					invoiceDetail.setState("正常");
+					invoiceDetail.setBackSign("冲销");
+					invoiceDetail.setComId(workInvoiceDetail.getComId());
+					invoiceDetail.setOfficeId(workInvoiceDetail.getOfficeId());
+					invoiceDetail.setNumber(workInvoiceReturn.getNumber());
+					invoiceDetail.setCode(workInvoiceReturn.getCode());
+					invoiceDetail.setReturnId(workInvoiceDetail.getId());
+					invoiceDetail.setTotalMoney("-"+workInvoiceDetail.getTotalMoney());
+					invoiceDetail.setTax(workInvoiceDetail.getTax());
+					invoiceDetail.setTaxMoney("-"+workInvoiceDetail.getTaxMoney());
+					invoiceDetail.setTaxRate("-"+workInvoiceDetail.getTaxRate());
+					invoiceDetail.setIncomeMoney("-"+workInvoiceDetail.getIncomeMoney());
+					invoiceDetail.setInvoiceId(workInvoiceDetail.getInvoiceId());
+					invoiceDetail.setDate(workInvoiceDetail.getDate());
+					invoiceDetail.setId("");
+					workInvoiceDetailService.save(invoiceDetail);
+				}
+			}
+		}
+		return "保存审核意见成功!";
+	}
+
+	/**
+	 * 获取流程详细信息
+	 * @param processInstanceId
+	 */
+	@SuppressWarnings("unchecked")
+	public FilialeWorkInvoiceReturn getByProcessInstanceId(String processInstanceId) {
+		FilialeWorkInvoiceReturn workInvoiceReturn = workInvoiceReturnDao.getByProcessInstanceId(processInstanceId);
+		return workInvoiceReturn;
+	}
+
+	@Transactional(readOnly = false)
+	public void cancelInvalidate(FilialeWorkInvoiceReturn workInvoiceReturn) {
+		String invalidateProcessInstanceId = workInvoiceReturn.getProcessInstanceId();
+		try {
+			//将流程图中尚未走到的task的流程追踪信息逻辑删除,添加一条"撤销"流程追踪信息
+			WorkActivityProcess process = new WorkActivityProcess();
+			process.setProcessInstanceId(workInvoiceReturn.getProcessInstanceId());
+			process.setIsApproval("0");
+			//List<WorkActivityProcess> processList1 = workActivityProcessService.findByProcInsId(process);
+			WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+			workActivityProcess.setProcessInstanceId(workInvoiceReturn.getProcessInstanceId());
+			List<WorkActivityProcess> processList = workActivityProcessService.findList(workActivityProcess);
+			WorkProjectNotify notify = new WorkProjectNotify();
+			notify.setNotifyId(workInvoiceReturn.getId());
+			List<User> userList = workProjectNotifyService.readByNotifyId(notify);
+			if (userList!=null && userList.size()!=0) {
+				for (User u : userList) {
+					User user = UserUtils.get(u.getId());
+					/*List<WebSocket> toUserConns = ChatServerPool.getWebSocketByUser(u.getId());
+					for (WebSocket toUserConn : toUserConns) {
+						String message = "{\"to\":\""+u.getId()+"\"," +
+								"\"msg\":\"审批信息 退票申请人:"+ user.getName()+",退票申请编号:"+workInvoiceReturn.getReturnNumber() +" 强制撤销!\"," +
+								"\"useType\":\"sys\"}";
+						ChatServerPool.sendMessageToUser(toUserConn, message);//同时向本人发送消息
+					}*/
+					UserUtils.pushIm(u.getId(),"退票申请人:"+ user.getName()+",退票申请编号:"+workInvoiceReturn.getReturnNumber() +" 强制撤销!");
+				}
+			}
+			if(processList!=null && processList.size()>0){
+				for (int i =0;i<processList.size();i++) {
+					WorkActivityProcess p = processList.get(i);
+					if(StringUtils.isNotBlank(p.getIsApproval()) && "0".equals(p.getIsApproval())){
+						p.setDelFlag("1");
+						p.setIsApproval("-1");
+						workActivityProcessDao.updateDelFlagAndIsApproval(p);
+					}
+				}
+				WorkActivityProcess pro = new WorkActivityProcess();
+				pro.setId("");
+				pro.preInsert();
+				pro.setDelFlag("0");
+				pro.setRemarks("[强制撤销]");
+				pro.setProcessKey(processList.get(0).getProcessKey());
+				pro.setIsApproval("1");
+				pro.setProcessInstanceId(processList.get(0).getProcessInstanceId());
+				pro.setCount(0);
+				workActivityProcessDao.insert(pro);
+			}
+
+			//结束该流程,设为"撤销"状态
+			actTaskService.endProcessInstance(invalidateProcessInstanceId,"报销-强制撤销");
+			workInvoiceReturn.setStatus("3");
+			workInvoiceReturn.preUpdate();
+			workInvoiceReturnDao.update(workInvoiceReturn);
+
+		}catch (ActivitiObjectNotFoundException e){
+			System.err.println("撤销异常,因为这个流程已不存在!");
+			e.printStackTrace();
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+    public int countByNumAndComp(String invoiceNum, String comId) {
+        return dao.countByNumAndComp(invoiceNum,comId);
+    }
+}

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 3578 - 0
src/main/java/com/jeeplus/modules/filialeWorkInvoice/service/FilialeWorkInvoiceService.java


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1487 - 0
src/main/java/com/jeeplus/modules/filialeWorkInvoice/web/FilialeWorkInvoiceController.java


+ 459 - 0
src/main/java/com/jeeplus/modules/filialeWorkInvoice/web/FilialeWorkInvoiceReturnController.java

@@ -0,0 +1,459 @@
+/**
+ * Copyright &copy; 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
+ */
+package com.jeeplus.modules.filialeWorkInvoice.web;
+
+import com.google.common.base.Strings;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.jeeplus.common.config.Global;
+import com.jeeplus.common.persistence.Page;
+import com.jeeplus.common.utils.DateUtils;
+import com.jeeplus.common.utils.MyBeanUtils;
+import com.jeeplus.common.utils.StringUtils;
+import com.jeeplus.common.utils.excel.ExportExcel;
+import com.jeeplus.common.utils.excel.ImportExcel;
+import com.jeeplus.common.web.BaseController;
+import com.jeeplus.modules.act.entity.Act;
+import com.jeeplus.modules.act.service.ActTaskService;
+import com.jeeplus.modules.act.utils.ActUtils;
+import com.jeeplus.modules.filialeWorkInvoice.entity.FilialeWorkInvoice;
+import com.jeeplus.modules.filialeWorkInvoice.entity.FilialeWorkInvoiceReturn;
+import com.jeeplus.modules.filialeWorkInvoice.entity.FilialeWorkInvoiceReturnAlter;
+import com.jeeplus.modules.filialeWorkInvoice.service.FilialeWorkInvoiceReturnService;
+import com.jeeplus.modules.filialeWorkInvoice.service.FilialeWorkInvoiceService;
+import com.jeeplus.modules.sys.entity.Office;
+import com.jeeplus.modules.sys.entity.User;
+import com.jeeplus.modules.sys.utils.UserUtils;
+import org.activiti.engine.HistoryService;
+import org.activiti.engine.RuntimeService;
+import org.activiti.engine.TaskService;
+import org.activiti.engine.history.HistoricProcessInstance;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Task;
+import org.apache.shiro.authz.annotation.Logical;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.ConstraintViolationException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 退票管理Controller
+ * @author lw
+ * @version 2018-06-15
+ */
+@Controller
+@RequestMapping(value = "${adminPath}/filialeWorkInvoiceReturn/filialeWorkInvoiceReturn")
+public class FilialeWorkInvoiceReturnController extends BaseController {
+
+	@Autowired
+	private FilialeWorkInvoiceReturnService workInvoiceReturnService;
+	@Autowired
+	protected RuntimeService runtimeService;
+
+	@Autowired
+	protected TaskService taskService;
+
+	@Autowired
+	private ActTaskService actTaskService;
+
+	@Autowired
+	private HttpServletRequest request;
+	@Autowired
+	private HistoryService historyService;
+
+	@Autowired
+	private FilialeWorkInvoiceService workInvoiceService;
+	@ModelAttribute
+	public FilialeWorkInvoiceReturn get(@RequestParam(required=false) String id) {
+		FilialeWorkInvoiceReturn entity = null;
+		if (StringUtils.isNotBlank(id)){
+			entity = workInvoiceReturnService.get(id);
+		}
+		if (entity == null){
+			entity = new FilialeWorkInvoiceReturn();
+		}
+		return entity;
+	}
+	
+	/**
+	 * 退票管理列表页面
+	 */
+	@RequiresPermissions("workinvoicereturn:workInvoiceReturn:list")
+	@RequestMapping(value = {"list", ""})
+	public String list(FilialeWorkInvoiceReturn workInvoiceReturn, HttpServletRequest request, HttpServletResponse response, Model model) {
+		Page<FilialeWorkInvoiceReturn> page = workInvoiceReturnService.findPage(new Page<FilialeWorkInvoiceReturn>(request, response), workInvoiceReturn);
+		model.addAttribute("page", page);
+		return "modules/workinvoicereturn/workInvoiceReturnList";
+	}
+
+	/**
+	 * 查看,增加,编辑退票管理表单页面
+	 */
+	//@RequiresPermissions(value={"workinvoicereturn:workInvoiceReturn:view","workinvoicereturn:workInvoiceReturn:add","workinvoicereturn:workInvoiceReturn:edit"},logical=Logical.OR)
+	@RequestMapping(value = "form")
+	public String form(FilialeWorkInvoiceReturn workInvoiceReturn, Model model) {
+		String view = "workInvoiceReturnForm";
+		Office office = UserUtils.getSelectOffice();
+		String tabId = request.getParameter("tabId");
+		if("1".equals(tabId)){
+			view = "workInvoiceReturnView";
+		}else if("3".equals(tabId)){
+			ProcessInstance processInstance = actTaskService.getProcIns(workInvoiceReturn.getProcessInstanceId());
+			if (processInstance!=null) {
+				Task taskInfok = actTaskService.getCurrentTaskInfo(processInstance);
+				Act act = new Act();
+				act.setTaskId(taskInfok.getId());
+				act.setTaskName(taskInfok.getName());
+				act.setTaskDefKey(taskInfok.getTaskDefinitionKey());
+				act.setProcDefId(taskInfok.getProcessDefinitionId());
+				act.setProcInsId(taskInfok.getProcessInstanceId());
+				act.setTask(taskInfok);
+				workInvoiceReturn.setAct(act);
+				view = "workInvoiceReturnModify";
+			}
+		}
+		// 环节编号
+		String taskDefKey = workInvoiceReturn.getAct().getTaskDefKey();
+		if (StringUtils.isNotBlank(taskDefKey) && !taskDefKey.equals("modifyApply")&& !taskDefKey.equals("fpgly")){
+			view = "workInvoiceReturnAudit";
+		}else if(StringUtils.isNotBlank(taskDefKey) && "fpgly".equals(taskDefKey)){
+			if(workInvoiceReturn.getReturnDate()==null){
+				workInvoiceReturn.setReturnDate(new Date());
+			}
+			view = "workInvoiceReturnfpglyAudit";
+		}
+		if(StringUtils.isBlank(workInvoiceReturn.getUname())){
+			workInvoiceReturn.setUname(UserUtils.getUser().getName());
+		}
+		model.addAttribute("workInvoiceReturn", workInvoiceReturn);
+		return "modules/workinvoicereturn/"+view;
+	}
+	@RequestMapping(value = "store")
+	public String store(FilialeWorkInvoiceReturn workInvoiceReturn,
+						Model model,
+						RedirectAttributes redirectAttributes) throws Exception{
+		if (!beanValidator(model, workInvoiceReturn)){
+			return form(workInvoiceReturn, model);
+		}
+
+		User user = workInvoiceReturn.getCreateBy();
+		String submitter = "";
+		if(user != null){
+			submitter = user.getId();
+		}
+		String sta = workInvoiceReturn.getStatus();
+		if(!UserUtils.getUser().getId().equals(submitter) && !Strings.isNullOrEmpty(submitter) && sta != null){
+			addMessage(redirectAttributes, "您不是申请人,无法修改");
+			return "redirect:"+Global.getAdminPath()+"/workinvoicereturn/workInvoiceReturn/?repage";
+		}
+		workInvoiceReturn.setStatus("1"); //暂存状态
+		workInvoiceReturn.setCompanyId(UserUtils.getSelectCompany().getId());
+		workInvoiceReturn.setOfficeId(UserUtils.getSelectOffice().getId());
+		if (StringUtils.isNotBlank(workInvoiceReturn.getProcessInstanceId()) && workInvoiceReturn.getProcessInstanceId().equals("NULL")){
+			workInvoiceReturn.setProcessInstanceId("");
+		}
+		if(!workInvoiceReturn.getIsNewRecord()){//编辑表单保存
+			FilialeWorkInvoiceReturn t = workInvoiceReturnService.get(workInvoiceReturn.getId());//从数据库取出记录的值
+			MyBeanUtils.copyBeanNotNull2Bean(workInvoiceReturn, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
+			workInvoiceReturnService.save(t);//保存
+		}else{//新增表单保存
+			workInvoiceReturnService.save(workInvoiceReturn);//保存
+		}
+		addMessage(redirectAttributes, "退票申请暂存成功");
+		return "redirect:"+Global.getAdminPath()+"/workinvoicereturn/workInvoiceReturn/?repage";
+	}
+	/**
+	 * 保存退票管理
+	 */
+	@RequestMapping(value = "save")
+	public String save(FilialeWorkInvoiceReturn workInvoiceReturn, Model model, RedirectAttributes redirectAttributes) throws Exception{
+		if (!beanValidator(model, workInvoiceReturn)){
+			return form(workInvoiceReturn, model);
+		}
+		User user = workInvoiceReturn.getCreateBy();
+		String sta = workInvoiceReturn.getStatus();
+		if(user!=null && !UserUtils.getUser().getId().equals(user.getId()) && StringUtils.isNotBlank(user.getId())){
+			addMessage(redirectAttributes, "您不是申请人,无法修改");
+			return "redirect:"+Global.getAdminPath()+"/workinvoicereturn/workInvoiceReturn/?repage";
+		}
+		//状态设置为审核中
+		workInvoiceReturn.setStatus("2");
+		String processInstanceId ="";
+		if (user!=null && StringUtils.isNotBlank(user.getId()) && StringUtils.isNotBlank(sta) && "3".equals(sta)){
+			processInstanceId = workInvoiceReturnService.get(workInvoiceReturn.getId()).getProcessInstanceId();
+		}
+//		try {
+			Map<String, Object> variables = Maps.newHashMap();
+			workInvoiceReturn.setCompanyId(UserUtils.getSelectCompany().getId());
+			workInvoiceReturn.setOfficeId(UserUtils.getSelectOffice().getId());
+			String str = workInvoiceReturnService.save(workInvoiceReturn, variables,processInstanceId);
+			if (StringUtils.isNotBlank(str)){
+				addMessage(redirectAttributes, "退票申请提交失败:"+str);
+			}else {
+				addMessage(redirectAttributes, "退票申请已经提交");
+			}
+
+//		} catch (Exception e) {
+//			addMessage(redirectAttributes, "退票申请提交失败!");
+//			addMessage(redirectAttributes, "系统内部错误");
+//		}
+		return "redirect:"+Global.getAdminPath()+"/workinvoicereturn/workInvoiceReturn/?repage";
+	}
+	
+	/**
+	 * 删除退票管理
+	 */
+	@RequiresPermissions("workinvoicereturn:workInvoiceReturn:del")
+	@RequestMapping(value = "delete")
+	public String delete(FilialeWorkInvoiceReturn workInvoiceReturn, RedirectAttributes redirectAttributes) {
+		workInvoiceReturnService.delete(workInvoiceReturn);
+		addMessage(redirectAttributes, "删除退票管理成功");
+		return "redirect:"+Global.getAdminPath()+"/workinvoicereturn/workInvoiceReturn/?repage";
+	}
+	@RequiresPermissions(value={"workinvoicereturn:workInvoiceReturn:alteredit"},logical= Logical.OR)
+	@RequestMapping(value = "alterForm")
+	public String alterForm(FilialeWorkInvoiceReturn workInvoiceReturn, Model model) {
+		String id = workInvoiceReturn.getId();
+		FilialeWorkInvoiceReturnAlter workInvoiceReturnAlter = new FilialeWorkInvoiceReturnAlter();
+		workInvoiceReturnAlter.setWorkInvoiceReturn(workInvoiceReturn);
+		try {
+			org.apache.commons.beanutils.BeanUtils.copyProperties(workInvoiceReturnAlter,workInvoiceReturn);
+			workInvoiceReturnAlter.setId(null);
+		} catch (IllegalAccessException e) {
+			e.printStackTrace();
+		} catch (InvocationTargetException e) {
+			e.printStackTrace();
+		}
+		workInvoiceReturnAlter.setCreateBy(UserUtils.getUser());
+		workInvoiceReturnAlter.setCreateDate(new Date());
+		model.addAttribute("workInvoiceReturnAlter", workInvoiceReturnAlter);
+		return "modules/workinvoicereturnalter/workInvoiceReturnAlterForm";
+	}
+
+	@RequestMapping(value = "saveAudit")
+	public String saveAudit(FilialeWorkInvoiceReturn workInvoiceReturn, Model model,
+							RedirectAttributes redirectAttributes) {
+		// 对不同环节的业务逻辑进行操作
+		String taskDefKey = workInvoiceReturn.getAct().getTaskDefKey();
+		String flag = workInvoiceReturn.getAct().getFlag();
+		List<User> users = null;
+		String oId = null;
+		FilialeWorkInvoice workInvoice = new FilialeWorkInvoice();
+		if(workInvoiceReturn.getInvoiceDetail()!=null){
+			if(workInvoiceReturn.getInvoiceDetail().getWorkInvoice()!=null){
+				if(StringUtils.isNotBlank(workInvoiceReturn.getInvoiceDetail().getWorkInvoice().getId())){
+					workInvoice = workInvoiceService.get(workInvoiceReturn.getInvoiceDetail().getWorkInvoice());
+					if(workInvoice!=null && workInvoice.getOffice()!=null){
+						oId = workInvoice.getOffice().getId();
+					}
+				}
+			}
+		}
+		if ("bmzr".equals(taskDefKey)) {
+			users = UserUtils.getByProssType(workInvoiceReturn.getProcessInstanceId(), 2);
+			if (users == null) {
+				if(workInvoice!=null) {
+					//1总公司0分公司
+					if ("1".equals(workInvoice.getExt())) {
+						users = UserUtils.getByRoleActivityEnname("fpgly", 1, oId, "6", workInvoiceReturn.getCreateBy());
+					} else if ("0".equals(workInvoice.getExt())) {
+						users = UserUtils.getByRoleActivityEnname("fpgly", 3,oId, "6", workInvoiceReturn.getCreateBy());
+					}
+				}
+			}
+		} else if ("fpgly".equals(taskDefKey)) {
+			users = UserUtils.getByProssType(workInvoiceReturn.getProcessInstanceId(), 3);
+			if (users == null){
+				if(workInvoice!=null){
+					//1总公司0分公司
+					if("1".equals(workInvoice.getExt())){
+						users = UserUtils.getByRoleActivityEnname("zghj",1,oId,"6",workInvoiceReturn.getCreateBy());
+					}else if("0".equals(workInvoice.getExt())){
+						users = UserUtils.getByRoleActivityEnname("zghj",3,oId,"6",workInvoiceReturn.getCreateBy());
+					}
+				}
+			}
+		} else if ("zgkj".equals(taskDefKey)) {
+			users = UserUtils.getByProssType(workInvoiceReturn.getProcessInstanceId(), 1);
+		} else if ("modifyApply".equals(taskDefKey)) {
+			users = UserUtils.getByProssType(workInvoiceReturn.getProcessInstanceId(), 1);
+		}
+		if ("yes".equals(flag) && (users==null || users.size()==0)){
+			addMessage(redirectAttributes, "审批失败,审批人为空,请联系管理员!");
+		}else {
+			String str = workInvoiceReturnService.auditSave(workInvoiceReturn,users);
+			addMessage(redirectAttributes, str);
+		}
+		if (StringUtils.isNotBlank(workInvoiceReturn.getHome()) && "home".equals(workInvoiceReturn.getHome())){
+			return "redirect:" + Global.getAdminPath() + "/home/?repage";
+		}else {
+			return "redirect:"+Global.getAdminPath()+"/workinvoicereturn/workInvoiceReturn/?repage";
+		}
+	}
+	/**
+	 * 批量删除退票管理
+	 */
+	@RequiresPermissions("workinvoicereturn:workInvoiceReturn:del")
+	@RequestMapping(value = "deleteAll")
+	public String deleteAll(String ids, RedirectAttributes redirectAttributes) {
+		String idArray[] =ids.split(",");
+		for(String id : idArray){
+			workInvoiceReturnService.delete(workInvoiceReturnService.get(id));
+		}
+		addMessage(redirectAttributes, "删除退票管理成功");
+		return "redirect:"+Global.getAdminPath()+"/workinvoicereturn/workInvoiceReturn/?repage";
+	}
+	
+	/**
+	 * 导出excel文件
+	 */
+	@RequiresPermissions("workinvoicereturn:workInvoiceReturn:export")
+    @RequestMapping(value = "export", method=RequestMethod.POST)
+    public String exportFile(FilialeWorkInvoiceReturn workInvoiceReturn, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "退票管理"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
+            Page<FilialeWorkInvoiceReturn> page = workInvoiceReturnService.findPage(new Page<FilialeWorkInvoiceReturn>(request, response, -1), workInvoiceReturn);
+    		new ExportExcel("退票管理", FilialeWorkInvoiceReturn.class).setDataList(page.getList()).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导出退票管理记录失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/workinvoicereturn/workInvoiceReturn/?repage";
+    }
+
+	/**
+	 * 导入Excel数据
+
+	 */
+	@RequiresPermissions("workinvoicereturn:workInvoiceReturn:import")
+    @RequestMapping(value = "import", method=RequestMethod.POST)
+    public String importFile(MultipartFile file, RedirectAttributes redirectAttributes) {
+		try {
+			int successNum = 0;
+			int failureNum = 0;
+			StringBuilder failureMsg = new StringBuilder();
+			ImportExcel ei = new ImportExcel(file, 1, 0);
+			List<FilialeWorkInvoiceReturn> list = ei.getDataList(FilialeWorkInvoiceReturn.class);
+			for (FilialeWorkInvoiceReturn workInvoiceReturn : list){
+				try{
+					workInvoiceReturnService.save(workInvoiceReturn);
+					successNum++;
+				}catch(ConstraintViolationException ex){
+					failureNum++;
+				}catch (Exception ex) {
+					failureNum++;
+				}
+			}
+			if (failureNum>0){
+				failureMsg.insert(0, ",失败 "+failureNum+" 条退票管理记录。");
+			}
+			addMessage(redirectAttributes, "已成功导入 "+successNum+" 条退票管理记录"+failureMsg);
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入退票管理失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/workinvoicereturn/workInvoiceReturn/?repage";
+    }
+	
+	/**
+	 * 下载导入退票管理数据模板
+	 */
+	@RequiresPermissions("workinvoicereturn:workInvoiceReturn:import")
+    @RequestMapping(value = "import/template")
+    public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
+		try {
+            String fileName = "退票管理数据导入模板.xlsx";
+    		List<FilialeWorkInvoiceReturn> list = Lists.newArrayList();
+    		new ExportExcel("退票管理数据", FilialeWorkInvoiceReturn.class, 1).setDataList(list).write(response, fileName).dispose();
+    		return null;
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "导入模板下载失败!失败信息:"+e.getMessage());
+		}
+		return "redirect:"+Global.getAdminPath()+"/workinvoicereturn/workInvoiceReturn/?repage";
+    }
+
+	/**
+	 * 审核信息
+	 * @param response
+	 * @param model
+	 * @return
+	 */
+	@RequestMapping(value = "applyOnLeave")
+	public String applyOnCompany(Act act, HttpServletResponse response, Model model) {
+		// 获取流程XML上的表单KEY
+		String formKey = "/workinvoicereturn/workInvoiceReturn/form";
+		// 获取流程实例对象
+		if (act.getProcInsId() != null){
+			if(actTaskService.getProcIns(act.getProcInsId())!=null){
+				act.setProcIns(actTaskService.getProcIns(act.getProcInsId()));
+			}else{
+				act.setFinishedProcIns(actTaskService.getFinishedProcIns(act.getProcInsId()));
+			}
+		}
+		return "redirect:" + ActUtils.getFormUrl(formKey, act);
+	}
+
+	/**
+	 * 读取单个实体流程
+	 * @return
+	 */
+	@RequestMapping(value = "getProcessOne")
+	public String getProcessOne(FilialeWorkInvoiceReturn workInvoiceReturn,Model model) {
+		model.addAttribute("processInstanceId", workInvoiceReturn.getProcessInstanceId());
+		return "modules/workinvoicereturn/workInvoiceReturnTask";
+	}
+	@RequestMapping("cancelInvalidate")
+	public String cancelInvalidate(FilialeWorkInvoiceReturn workInvoiceReturn,RedirectAttributes redirectAttributes){
+		Act act = getByAct(workInvoiceReturn.getProcessInstanceId());
+		if("zgkj".equals(act.getTaskDefKey())){
+			addMessage(redirectAttributes, "流程已到会计出审批,无法撤回该申请");
+			return "redirect:"+Global.getAdminPath()+"/workinvoicereturn/workInvoiceReturn/?repage";
+		}
+		workInvoiceReturnService.cancelInvalidate(workInvoiceReturn);
+		return "redirect:"+Global.getAdminPath()+"/workinvoicereturn/workInvoiceReturn/?repage";
+	}
+	public Act getByAct(String processInstanceId){
+		Act act = new Act();
+		HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
+		ProcessInstance processInstance = actTaskService.getProcIns(processInstanceId);
+		if (processInstance!=null) {
+			List<Task> taskList = actTaskService.getCurrentTaskList(processInstance);
+			if(taskList!=null && taskList.size()>1){
+				for (Task taskInfok:taskList) {
+					if (taskInfok.getAssignee().equals(UserUtils.getUser().getId())) {
+						act.setTaskId(taskInfok.getId());
+						act.setTaskName(taskInfok.getName());
+						act.setTaskDefKey(taskInfok.getTaskDefinitionKey());
+						act.setProcDefId(taskInfok.getProcessDefinitionId());
+						act.setProcInsId(taskInfok.getProcessInstanceId());
+						act.setTask(taskInfok);
+					}
+				}
+			}else {
+				Task task = actTaskService.getCurrentTaskInfo(processInstance);
+				act.setTaskId(task.getId());
+				act.setTaskName(task.getName());
+				act.setTaskDefKey(task.getTaskDefinitionKey());
+				act.setProcDefId(task.getProcessDefinitionId());
+				act.setProcInsId(task.getProcessInstanceId());
+				act.setTask(task);
+			}
+		}
+		return  act;
+	}
+
+}

+ 8 - 0
src/main/java/com/jeeplus/modules/sys/dao/OfficeDao.java

@@ -105,4 +105,12 @@ public interface OfficeDao extends TreeDao<Office> {
 	 */
 	List<Office> findByBelongingDepartment(Office office);
 
+
+	/**
+	 * 根据parentId查询所有子节点信息
+	 * @param id
+	 * @return
+	 */
+	List<Office> getChildrenOfficeById(String id);
+
 }

+ 7 - 0
src/main/java/com/jeeplus/modules/sys/dao/UserDao.java

@@ -306,4 +306,11 @@ public interface UserDao extends CrudDao<User> {
 	 * @return
 	 */
 	List<String> getAuditUserListByRelevanceUserId(@Param("relevanceUserId") String relevanceUserId);
+
+	/**
+	 * 通过OfficeId获取用户列表,仅返回用户id和name(树查询用户时用)
+	 * @param user
+	 * @return
+	 */
+	public List<User> findUserByOfficeIdAndNameAndOfficeIdList(@Param("user")User user,@Param("officeIdList")List<String> officeIdList);
 }

+ 47 - 0
src/main/java/com/jeeplus/modules/sys/service/OfficeService.java

@@ -3,6 +3,7 @@
  */
 package com.jeeplus.modules.sys.service;
 
+import com.google.common.collect.Lists;
 import com.jeeplus.common.service.BaseService;
 import com.jeeplus.common.service.TreeService;
 import com.jeeplus.common.utils.JedisUtils;
@@ -366,4 +367,50 @@ public class OfficeService extends TreeService<OfficeDao, Office> {
 		List<String> offices = officeDao.getChildrenOffice(parentId);
 		return offices;
 	}
+
+	/**
+	 * 根据父节点查询包含父节点的所有部门信息
+	 * @param parentId
+	 * @return
+	 */
+	public List<Office> getChildrenOfficeById(String parentId){
+		List<Office> offices = officeDao.getChildrenOfficeById(parentId);
+		return offices;
+	}
+
+
+
+	@Transactional(readOnly = true)
+	public List<Office> getTreeOffice(String id){
+		List<Office> officeList = Lists.newArrayList();
+		Office office = this.get(id);
+		officeList.add(office);
+		if(null != office.getParent() && StringUtils.isNotBlank(office.getParent().getId()) && !"0".equals(office.getParent().getId())){
+			List<Office> childrenOffice = this.getChildrenOfficeById(id);
+			officeList.addAll(childrenOffice);
+			List<Office> treeOffice = getTreeOffice(office.getParent().getId());
+			officeList.addAll(treeOffice);
+		}
+		return officeList;
+	}
+
+	@Transactional(readOnly = true)
+	public List<Office> getTreeOfficeByName(String name,List<Office> list){
+		List<Office> officeList = Lists.newArrayList();
+		List<Office> returnOfficeList = Lists.newArrayList();
+		for (Office office : list) {
+			if(office.getName().contains(name)){
+				officeList.add(office);
+			}
+		}
+		if(officeList.size()>0){
+			for (Office office : officeList) {
+				List<Office> treeOffice = this.getTreeOffice(office.getParent().getId());
+				returnOfficeList.add(office);
+				returnOfficeList.addAll(treeOffice);
+			}
+		}
+		
+		return returnOfficeList;
+	}
 }

+ 16 - 0
src/main/java/com/jeeplus/modules/sys/service/SystemService.java

@@ -317,6 +317,22 @@ public class SystemService extends BaseService implements InitializingBean {
                 UserUtils.USER_CACHE_LIST_BY_OFFICE_ID_ +  list);
         return list;
     }
+
+    /**
+     * 通过用户name获取用户列表,仅返回用户id和name(树查询用户时用)
+     *
+     * @return
+     */
+    public List<User> findUserByNameAndOfficeIdList(String selectName,List<String> officeIdList) {
+
+        User user = new User();
+        user.setName(selectName);
+        if(!UserUtils.getSelectCompany().getId().equals("1")) {
+            user.setCompany(UserUtils.getSelectCompany());
+        }
+        List<User> list = userDao.findUserByOfficeIdAndNameAndOfficeIdList(user,officeIdList);
+        return list;
+    }
     /**
      * 通过部门ID获取用户列表,仅返回用户id和name(树查询用户时用  上报使用)
      *

+ 100 - 0
src/main/java/com/jeeplus/modules/sys/web/OfficeController.java

@@ -613,8 +613,108 @@ public class OfficeController extends BaseController {
             }
         }
         return mapList;
+
+    }
+    /**
+     * 获取机构JSON数据。
+     *
+     * @param extId    排除的ID
+     * @param type     类型(1:公司;2:部门/小组/其它:3:用户)
+     * @param grade    显示级别
+     * @param response
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping(value = "treeDataByLoginUser")
+    public List<Map<String, Object>> treeDataByLoginUser(@RequestParam(required = false) String extId, @RequestParam(required = false) String type, @RequestParam(required = false) String selectName,
+                                                 @RequestParam(required = false) Long grade, @RequestParam(required = false) Boolean isAll, HttpServletResponse response) {
+        List<Map<String, Object>> mapList = Lists.newArrayList();
+        Office office = new Office();
+        office.setParentIds(UserUtils.getSelectCompany().getId());
+        HashSet<Map<String, Object>> mapSet = new HashSet<>();
+        //查询当前登陆人所有有关部门
+        List<Office> list = officeService.getTreeOffice(UserUtils.getSelectOffice().getId());
+        if ("2".equals(type) && StringUtils.isNotBlank(selectName)){
+            //存放部门搜索添加
+            List<Office> treeOfficeList = officeService.getTreeOfficeByName(selectName, list);
+            list = treeOfficeList;
+        }
+        //List<Office> list = officeService.findByParentIdsLike(office);
+        for (int i = 0; i < list.size(); i++) {
+            Office e = list.get(i);
+            if ((StringUtils.isBlank(extId) || (extId != null && !extId.equals(e.getId()) && e.getParentIds().indexOf("," + extId + ",") == -1))
+                    && (type == null || (type != null && (type.equals("1") ? type.equals(e.getType()) : true)))
+                    && (grade == null || (grade != null && Integer.parseInt(e.getGrade()) <= grade.intValue()))
+                    && Global.YES.equals(e.getUseable())) {
+                Map<String, Object> map = Maps.newHashMap();
+                map.put("id", e.getId());
+                map.put("pId", e.getParentId());
+                map.put("pIds", e.getParentIds());
+                map.put("name", e.getTopCompany());
+                map.put("selectName", selectName);
+                if (type != null && ("3".equals(type) || "4".equals(type) || "5".equals(type))) {
+                    map.put("isParent", true);
+                }
+                if("4".equals(type)){
+                    //根据参数获取信息
+                    List<User> listUser = systemService.treeDataByNameOnReported(e.getId(),selectName);
+                    if(listUser.size()>0) {
+                        mapSet.add(map);
+                    }
+                }else if("5".equals(type)){
+                    //获取一级二级造价师信息
+                    List<User> listUser = systemService.findUserByOfficeIdAndNameOnReportedZXY(e.getId(),selectName);
+                    if(listUser.size()>0) {
+                        mapSet.add(map);
+                    }
+                }
+                mapList.add(map);
+            }
+        }
+
+        if("4".equals(type) || "5".equals(type)){
+            List<Map<String,Object>> mapList1=new ArrayList<>(mapSet);
+            return mapList1;
+        }
+        if(!"2".equals(type) && !"6".equals(type)){
+            List<User> userList= new ArrayList<>();
+            List<String> officeIdList = Lists.newArrayList();
+            for (Office office1 : list) {
+                officeIdList.add(office1.getId());
+            }
+            //判定参数必须存在
+            if (StringUtils.isNotBlank(selectName)){
+                userList = systemService.findUserByNameAndOfficeIdList(selectName,officeIdList);
+                if (0 != userList.size()){
+                    Iterator it = mapList.iterator();
+                    while (it.hasNext()){
+                        Map<String, Object> str = (Map)it.next();
+                        for (User user:userList){
+                            String id=str.get("id").toString();
+                            String idd=user.getOffice().getId();
+                            if(id.equals(idd)){
+                                Map<String, Object> map = Maps.newHashMap();
+                                map.put("id", str.get("id"));
+                                map.put("pId",  str.get("pId"));
+                                map.put("pIds", str.get("pIds"));
+                                map.put("name",  str.get("name"));
+                                map.put("selectName", selectName);
+                                if (type != null && "3".equals(type)) {
+                                    map.put("isParent", true);
+                                }
+                                mapSet.add(map);
+                            }
+                        }
+                    }
+                    List<Map<String,Object>> mapList1=new ArrayList<>(mapSet);
+                    return mapList1;
+                }
+            }
+        }
+        return mapList;
     }
 
+
     /**
      * 获取工程一到五部及五部附属的JSON数据。
      *

+ 18 - 16
src/main/java/com/jeeplus/modules/sys/web/UserController.java

@@ -939,24 +939,26 @@ public class UserController extends BaseController {
     public List<Map<String, Object>> treeData(@RequestParam(required=false) String projectId,@RequestParam(required=false) String officeId,@RequestParam(required = false) String selectName, HttpServletResponse response) {
         List<Map<String, Object>> mapList = Lists.newArrayList();
         if(StringUtils.isBlank(projectId)){
-            List<User> list = systemService.findUserByOfficeId(officeId);
-            for (int i=0; i<list.size(); i++){
-                User e = list.get(i);
-                Map<String, Object> map = Maps.newHashMap();
-                map.put("id", "u_"+e.getId());
-                map.put("pId", officeId);
-                String name = StringUtils.replace(e.getName(), " ", "");
-                name = StringEscapeUtils.unescapeHtml4(name);
-                String officeName = StringUtils.replace(e.getOffice().getName(), " ", "");
-                officeName = StringEscapeUtils.unescapeHtml4(officeName);
-                map.put("name", name);
-                map.put("officeId", officeName);
-                if(StringUtils.isNotBlank(selectName)){
-                    if(name.contains(selectName)){
+            if(StringUtils.isNotBlank(officeId)){
+                List<User> list = systemService.findUserByOfficeId(officeId);
+                for (int i=0; i<list.size(); i++){
+                    User e = list.get(i);
+                    Map<String, Object> map = Maps.newHashMap();
+                    map.put("id", "u_"+e.getId());
+                    map.put("pId", officeId);
+                    String name = StringUtils.replace(e.getName(), " ", "");
+                    name = StringEscapeUtils.unescapeHtml4(name);
+                    String officeName = StringUtils.replace(e.getOffice().getName(), " ", "");
+                    officeName = StringEscapeUtils.unescapeHtml4(officeName);
+                    map.put("name", name);
+                    map.put("officeId", officeName);
+                    if(StringUtils.isNotBlank(selectName)){
+                        if(name.contains(selectName)){
+                            mapList.add(map);
+                        }
+                    }else{
                         mapList.add(map);
                     }
-                }else{
-                    mapList.add(map);
                 }
             }
         }else{

+ 7 - 0
src/main/java/com/jeeplus/modules/workinvoice/dao/WorkInvoiceDao.java

@@ -144,4 +144,11 @@ public interface WorkInvoiceDao extends CrudDao<WorkInvoice> {
 	 * @return
 	 */
 	String getBankNameByNameOrId(String bankName);
+
+	/**
+	 * 修改电子发票上传结果
+	 * @param workInvoice
+	 * @return
+	 */
+	Integer updateElectronicInvoiceFlag(WorkInvoice workInvoice);
 }

+ 11 - 0
src/main/java/com/jeeplus/modules/workinvoice/entity/WorkInvoice.java

@@ -110,6 +110,9 @@ public class WorkInvoice extends ActEntity<WorkInvoice> {
 	private Integer workReceiptCount;    	//收款数据量
 	private Double receiptMoneyD; //已收款金额
 	private Double notReceiptMoneyD; //未收款金额
+
+	private Integer electronicInvoiceFlag ;	//是否已经上传电子发票信息(0:未上传;1:已上传)
+
 	@Override
 	@ExcelField(title="经办人", fieldType=User.class, value="createBy.name", align=2, sort=7)
 	public User getCreateBy() {
@@ -780,4 +783,12 @@ public class WorkInvoice extends ActEntity<WorkInvoice> {
 	public void setNotReceiptMoneyD(Double notReceiptMoneyD) {
 		this.notReceiptMoneyD = notReceiptMoneyD;
 	}
+
+	public Integer getElectronicInvoiceFlag() {
+		return electronicInvoiceFlag;
+	}
+
+	public void setElectronicInvoiceFlag(Integer electronicInvoiceFlag) {
+		this.electronicInvoiceFlag = electronicInvoiceFlag;
+	}
 }

+ 36 - 0
src/main/java/com/jeeplus/modules/workinvoice/service/WorkInvoiceService.java

@@ -702,6 +702,42 @@ public class WorkInvoiceService extends CrudService<WorkInvoiceDao, WorkInvoice>
 			}
 		}
 	}
+
+
+	@Transactional(readOnly = false)
+	public String electronicInvoiceSave(WorkInvoice workInvoice){
+		//附件保存
+		List<Workattachment> workattachments = workInvoice.getWorkAttachments();
+		if (workattachments!=null && workattachments.size()!=0) {
+			for (Workattachment workattachment : workattachments) {
+				if (workattachment.getId() == null) {
+					continue;
+				}
+				if (workattachment.DEL_FLAG_NORMAL.equals(workattachment.getDelFlag())) {
+					workattachment.setAttachmentId(workInvoice.getId());
+					workattachment.setAttachmentFlag("115");
+					workattachment.setAttachmentUser(UserUtils.getUser().getId());
+					if (StringUtils.isBlank(workattachment.getId()) || "null".equals(workattachment.getId())) {
+						workattachmentService.insertOnWorkAttachment(workattachment);
+					} else {
+						workattachmentService.updateOnWorkAttachment(workattachment);
+					}
+				} else {
+					workattachmentService.delete(workattachment);
+				}
+			}
+		}
+		//查询该发票数据下是否存在附件信息(若存在,则表示已经上传电子发票附件信息)
+		List<Workattachment> attachmentList = workattachmentService.getListByAttachmentIdAndFlag(workInvoice.getId(), "115");
+		if(attachmentList.size()>0){
+			workInvoice.setElectronicInvoiceFlag(1);
+		}else{
+			workInvoice.setElectronicInvoiceFlag(0);
+		}
+		dao.updateElectronicInvoiceFlag(workInvoice);
+		return "电子发票上传成功";
+	}
+
 	/**
 	 * 分公司提交存储
 	 * @param workInvoice

+ 64 - 0
src/main/java/com/jeeplus/modules/workinvoice/web/WorkInvoiceTwoController.java

@@ -511,6 +511,63 @@ public class WorkInvoiceTwoController extends BaseController {
 		return "redirect:"+Global.getAdminPath()+"/workinvoiceTwo/workinvoiceTwo/?repage";
 	}
 
+	/**
+	 * 保存开票发票信息
+	 */
+	@RequestMapping(value = "electronicInvoiceSave")
+	public String electronicInvoiceSave(WorkInvoice workInvoice, Model model, RedirectAttributes redirectAttributes) throws Exception{
+		if (!beanValidator(model, workInvoice)){
+			return form(workInvoice, model);
+		}
+
+		User user = workInvoice.getCreateBy();
+		String invoiceState = workInvoice.getInvoiceState();
+		if(user!=null && !UserUtils.getUser().getId().equals(user.getId()) && StringUtils.isNotBlank(user.getId())){
+			addMessage(redirectAttributes, "您不是申请人,无法修改");
+			return "redirect:"+Global.getAdminPath()+"/workinvoiceTwo/workinvoiceTwo/?repage";
+		}
+		if(!"5".equals(invoiceState)){
+			addMessage(redirectAttributes, "当前发票信息状态下,无法上传电子发票信息");
+			return "redirect:"+Global.getAdminPath()+"/workinvoiceTwo/workinvoiceTwo/?repage";
+		}
+
+		String str = "";
+
+		try {
+			if(workInvoice.getWorkAttachments().size()>0){
+				str = workInvoiceService.electronicInvoiceSave(workInvoice);
+			}
+
+			if (StringUtils.isNotBlank(str)){
+				addMessage(redirectAttributes, "发票信息导入失败:"+str);
+			}else {
+				addMessage(redirectAttributes, "发票信息导入成功");
+			}
+		} catch (Exception e) {
+			addMessage(redirectAttributes, "系统内部错误");
+			logger.error("Exception e:"+e);
+		}
+		return "redirect:"+Global.getAdminPath()+"/workinvoiceTwo/workinvoiceTwo/?repage";
+	}
+
+
+	/**
+	 * 查看,增加,编辑开票管理表单页面
+	 */
+	@RequestMapping(value = "electronicInvoiceForm")
+	public String electronicInvoiceForm(WorkInvoice workInvoice, Model model) {
+		String view = "workInvoiceUploadElectronicInvoiceForm";
+		if(StringUtils.isNotBlank(workInvoice.getBank())){
+			//获取发票开户银行信息
+			String bankName = workInvoiceService.getBankNameByNameOrId(workInvoice.getBank());
+			if(StringUtils.isNotBlank(bankName)){
+				workInvoice.setBank(bankName);
+			}
+		}
+		model.addAttribute("workInvoice", workInvoice);
+		return "modules/workinvoice/workInvoiceUploadElectronicInvoiceForm";
+	}
+
 
 	/**
 	 * 查看,增加,编辑开票管理表单页面
@@ -554,6 +611,13 @@ public class WorkInvoiceTwoController extends BaseController {
 			//workInvoice.setInvoiceNumber( (int)((Math.random()*9+1)*100000));
 			workInvoice.setInvoiceDate(new Date());
 		}
+		if(StringUtils.isNotBlank(workInvoice.getBank())){
+			//获取发票开户银行信息
+			String bankName = workInvoiceService.getBankNameByNameOrId(workInvoice.getBank());
+			if(StringUtils.isNotBlank(bankName)){
+				workInvoice.setBank(bankName);
+			}
+		}
 		model.addAttribute("workInvoice", workInvoice);
 		return "modules/workinvoice/" + view;
 	}

+ 128 - 282
src/main/java/com/jeeplus/modules/workprojectnotify/web/WorkProjectNotifyController.java

@@ -28,6 +28,8 @@ import com.jeeplus.modules.centerservice.service.cpa.reimbursement.Reimbursement
 import com.jeeplus.modules.centerservice.service.cpa.reimbursement.ReimbursementService;
 import com.jeeplus.modules.centerservice.service.cpa.task.TaskFlowService;
 import com.jeeplus.modules.centerservice.utils.ConvertServiceUtil;
+import com.jeeplus.modules.filialeWorkInvoice.entity.FilialeWorkInvoice;
+import com.jeeplus.modules.filialeWorkInvoice.service.FilialeWorkInvoiceService;
 import com.jeeplus.modules.iim.entity.MailBox;
 import com.jeeplus.modules.iim.entity.MailPage;
 import com.jeeplus.modules.iim.service.MailBoxService;
@@ -542,6 +544,8 @@ public class WorkProjectNotifyController extends BaseController {
 	private ReimbursementService reimbursementService;
 	@Autowired
 	private TaskFlowService taskFlowService;
+	@Autowired
+	private FilialeWorkInvoiceService filialeWorkInvoiceService;
 
 	@ModelAttribute
 	public WorkProjectNotify get(@RequestParam(required=false) String id) {
@@ -559,7 +563,7 @@ public class WorkProjectNotifyController extends BaseController {
 	 * 通知列表页面
 	 */
 	@RequestMapping(value = {"list", ""})
-	public String list(WorkProjectNotify workProjectNotify, HttpServletRequest request, HttpServletResponse response, Model model) throws Exception {
+	public String list(WorkProjectNotify workProjectNotify, HttpServletRequest request, HttpServletResponse response, Model model) {
 		//进行查询之后进行任何操作,返回还是查询之后的数据页面
 		if (StringUtils.isNotBlank(workProjectNotify.getToflag())){
 			request.getSession().removeAttribute("searchWorkProjectNotifylist");
@@ -572,24 +576,25 @@ public class WorkProjectNotifyController extends BaseController {
 			}
 		}
 		User user = UserUtils.getUser();
-		if("1".equals(user.getOtherServiceFlag())){
-			// 中台数据查询
-			List<WorkProjectNotify> notifyList = centerCpaTaskService.getNotifyList(workProjectNotify);
-			if (notifyList.size() > 0) {
-				disposePageResp(notifyList); // 结果处理
-				Page<WorkProjectNotify> resultPage = ConvertServiceUtil.getSortAndPaging(new Page<WorkProjectNotify>(request, response), notifyList);
-				model.addAttribute("page", resultPage);
-			} else {
-				// 中台数据查询失败时,查询本系统分页待办数据
-				Page<WorkProjectNotify> page = findPage(user, workProjectNotify,request,response);
-				model.addAttribute("page", page);
+		workProjectNotify.setUser(user);
+		workProjectNotify.setCompanyId(UserUtils.getSelectCompany().getId());
+		workProjectNotify.setRemarks("待审批");
+		Page<WorkProjectNotify> pageList = workProjectNotifyService.findPage(new Page<WorkProjectNotify>(request, response),workProjectNotify);
+		if(pageList.getList().size()>0){
+			for (WorkProjectNotify info: pageList.getList()) {
+				//对项目进行处理,工程咨询,造价审核可添加作废按钮
+				if("39".equals(info.getType())){
+					RuralProjectRecords ruralProjectRecords = ruralProjectRecordsService.get(info.getNotifyId());
+					if(null != ruralProjectRecords) {
+						info.setProjectType(ruralProjectRecords.getProjectType());
+					}
+					else{
+						info.setProjectType("");
+					}
+				}
 			}
-
-		} else {
-			// 本系统待办分页数据查询
-			Page<WorkProjectNotify> page = findPage(user, workProjectNotify,request,response);
-			model.addAttribute("page", page);
 		}
+		model.addAttribute("page", pageList);
 		return "modules/workprojectnotify/workProjectNotifyList";
 	}
 
@@ -2155,6 +2160,103 @@ public class WorkProjectNotifyController extends BaseController {
 					} else if (workProjectNotify.getRemarks().contains("重新申请") && !"1".equals(workProjectNotify.getStatus())) {
 						return "modules/workinvoice/workInvoiceNotProjectModify";
 					}
+				} else if (workProjectNotify.getType().equals("214")) {    //分公司非项目开票管理
+					FilialeWorkInvoice workInvoice = filialeWorkInvoiceService.get(workProjectNotify.getNotifyId());
+					if (StringUtils.isNotBlank(workInvoice.getId())) {
+						filialeWorkInvoiceService.queryDetails(workInvoice);
+					}
+					if(StringUtils.isNotBlank(workProjectNotify.getHome())){
+						workInvoice.setHome(workProjectNotify.getHome());
+					}else{
+						workInvoice.setHome("home");
+					}
+					//获取发票开户银行信息
+					String bankName = filialeWorkInvoiceService.getBankNameByNameOrId(workInvoice.getBank());
+					if(StringUtils.isNotBlank(bankName)){
+						workInvoice.setBank(bankName);
+					}
+					workInvoice.setAct(getByAct(workInvoice.getProcessInstanceId()));
+					String taskDefKey = workInvoice.getAct().getTaskDefKey();
+					model.addAttribute("workInvoice", workInvoice);
+					if (workProjectNotify.getRemarks().contains("待通知") || "view".equals(workProjectNotify.getView())) {
+
+						List<MainDictDetail> billingContentList = DictUtils.getMainDictList("billing_content");
+						for (MainDictDetail dictDetail: billingContentList) {
+							if(workInvoice.getBillingContent().equals(dictDetail.getValue())){
+								workInvoice.setBillingContent(dictDetail.getLabel());
+								break;
+							}
+						}
+						List<MainDictDetail> receiptTypeList = DictUtils.getMainDictList("receipt_type");
+						for (MainDictDetail dictDetail: receiptTypeList) {
+							if(workInvoice.getChargeType().equals(dictDetail.getValue())){
+								workInvoice.setChargeType(dictDetail.getLabel());
+								break;
+							}
+						}
+						return "modules/filialeWorkInvoice/filialeWorkInvoiceView";
+					} else if (workProjectNotify.getRemarks().contains("待审批") && !"1".equals(workProjectNotify.getStatus())) {
+
+						List<MainDictDetail> billingContentList = DictUtils.getMainDictList("billing_content");
+						for (MainDictDetail dictDetail: billingContentList) {
+							if(workInvoice.getBillingContent().equals(dictDetail.getValue())){
+								workInvoice.setBillingContent(dictDetail.getLabel());
+								break;
+							}
+						}
+						List<MainDictDetail> receiptTypeList = DictUtils.getMainDictList("receipt_type");
+						for (MainDictDetail dictDetail: receiptTypeList) {
+							if(workInvoice.getChargeType().equals(dictDetail.getValue())){
+								workInvoice.setChargeType(dictDetail.getLabel());
+								break;
+							}
+						}
+						model.addAttribute("identification","workinvoice");
+						model.addAttribute("identificationName","发票审核意见");
+						if (StringUtils.isNotBlank(taskDefKey) && ("bmzr".equals(taskDefKey) ||
+								"scbzr".equals(taskDefKey)) || "zjl".equals(taskDefKey)) {
+							return "modules/filialeWorkInvoice/filialeWorkInvoiceAudit";
+						} else if (StringUtils.isNotBlank(taskDefKey) && "fpgly".equals(taskDefKey)) {
+							workInvoice.setDrawerName(UserUtils.getUser().getName());
+							workInvoice.setInvoiceDate(new Date());
+							model.addAttribute("workInvoice", workInvoice);
+							return "modules/filialeWorkInvoice/filialeWorkInvoiceAuditEnd";
+						}
+					} else if (workProjectNotify.getRemarks().contains("重新申请") && !"1".equals(workProjectNotify.getStatus())) {
+						return "modules/workinvoice/workInvoiceNotProjectModify";
+					}
+				} else if (workProjectNotify.getType().equals("215")) {    //跟公司开票作废管理
+					FilialeWorkInvoice workInvoice = filialeWorkInvoiceService.get(workProjectNotify.getNotifyId());
+					if (StringUtils.isNotBlank(workInvoice.getId())) {
+						filialeWorkInvoiceService.queryDetails(workInvoice);
+					}
+
+					//获取发票开户银行信息
+					String bankName = filialeWorkInvoiceService.getBankNameByNameOrId(workInvoice.getBank());
+					if(StringUtils.isNotBlank(bankName)){
+						workInvoice.setBank(bankName);
+					}
+					workInvoice.setHome("home");
+					workInvoice.setAct(getByAct(workInvoice.getProcessInstanceId()));
+					String taskDefKey = workInvoice.getAct().getTaskDefKey();
+					model.addAttribute("workInvoice", workInvoice);
+					if (workProjectNotify.getRemarks().contains("待通知") || "view".equals(workProjectNotify.getView())) {
+						return "modules/filialeWorkInvoice/filialeWorkInvoiceView";
+					} else if (workProjectNotify.getRemarks().contains("待审批") && !"1".equals(workProjectNotify.getStatus())) {
+						model.addAttribute("identification","workinvoiceCancel");
+						model.addAttribute("identificationName","发票作废审核意见");
+						if (StringUtils.isNotBlank(taskDefKey) && ("bmzr".equals(taskDefKey) ||
+								"scbzr".equals(taskDefKey))) {
+							return "modules/workinvoice/conditionWorkInvoiceAudit";
+						} else if (StringUtils.isNotBlank(taskDefKey) && "fpgly".equals(taskDefKey)) {
+							workInvoice.setDrawerName(UserUtils.getUser().getName());
+							workInvoice.setInvoiceDate(new Date());
+							model.addAttribute("workInvoice", workInvoice);
+							return "modules/filialeWorkInvoice/filialeConditionWorkInvoiceAudit";
+						}
+					} else if (workProjectNotify.getRemarks().contains("重新申请") && !"1".equals(workProjectNotify.getStatus())) {
+						return "modules/filialeWorkInvoice/filialeConditionWorkInvoiceModify";
+					}
 				} else if (workProjectNotify.getType().equals("211")) {    //开票管理
 					WorkInvoice workInvoice = workInvoiceService.get(workProjectNotify.getNotifyId());
 					if (StringUtils.isNotBlank(workInvoice.getId())) {
@@ -2187,7 +2289,7 @@ public class WorkProjectNotifyController extends BaseController {
 					} else if (workProjectNotify.getRemarks().contains("重新申请") && !"1".equals(workProjectNotify.getStatus())) {
 						return "modules/workinvoice/conditionWorkInvoiceModify";
 					}
-				} else if (workProjectNotify.getType().equals("24")) {
+				}/* else if (workProjectNotify.getType().equals("24")) {
 					Leave oaLeave = leaveService.get(workProjectNotify.getNotifyId());
 					oaLeave.setAct(getByAct(oaLeave.getProcessInstanceId()));
 					oaLeave.setHome("home");
@@ -2282,7 +2384,7 @@ public class WorkProjectNotifyController extends BaseController {
 						//return "redirect:"+Global.getAdminPath()+"/workpayment/workPayment/workPaymentTodoList";
 						return "modules/workpayment/workPaymentAudit";
 					}
-				} else if ("37".equals(workProjectNotify.getType())) {//归档批次管理
+				}*/ else if ("37".equals(workProjectNotify.getType())) {//归档批次管理
 					WorkReimbur workReimbur = workReimburService.get(workProjectNotify.getNotifyId());
 					workReimbur.setAct(getByAct(workReimbur.getProcessInstanceId()));
 					workReimbur.setHome("home");
@@ -2293,7 +2395,7 @@ public class WorkProjectNotifyController extends BaseController {
 						//return "redirect:"+Global.getAdminPath()+"/workreimbur/workReimbur/workReimburTodoList";
 						return "modules/workreimbur/workReimburAudit";
 					}
-				} else if ("35".equals(workProjectNotify.getType())) { //采购
+				}/* else if ("35".equals(workProjectNotify.getType())) { //采购
 					OaBuy oaBuy = oaBuyService.get(workProjectNotify.getNotifyId());
 					oaBuy.setAct(getByAct(oaBuy.getProcessInstanceId()));
 					oaBuy.setHome("home");
@@ -2315,7 +2417,7 @@ public class WorkProjectNotifyController extends BaseController {
 						//return "redirect:"+Global.getAdminPath()+"/oaperformance/oaPerformance/oaPerformanceTodoList";
 						return "modules/oaperformance/oaPerformanceAudit";
 					}
-				} else if ("38".equals(workProjectNotify.getType())) { //案例
+				}*/ else if ("38".equals(workProjectNotify.getType())) { //案例
 					CaseInfo caseInfo = caseInfoService.get(workProjectNotify.getNotifyId());
 					caseInfo.setHome("home");
 					caseInfo.setAct(getByAct(caseInfo.getProcessInstanceId()));
@@ -3021,57 +3123,6 @@ public class WorkProjectNotifyController extends BaseController {
 					requiredStageList.add(2);
 					relateInfo.setRequiredStageList(requiredStageList);
 					relateInfo.setId(ruralProjectRecords.getId());
-					/*for (MainDictDetail mainDict : mainDictDetails) {
-						relateInfo.setAttachType(mainDict.getValue());
-						switch (mainDict.getValue()) {
-							case "11":
-								List<ProjectTemplateInfo> fileAttachmentList = projectTemplateService.getProjectTemplateListByArchive(relateInfo);
-								for (ProjectTemplateInfo info: fileAttachmentList) {
-									info.setAttachTypes(info.getAttachTypes().toLowerCase());
-									if(engineeringId.equals(ruralProjectRecords.getEngineeringType())){
-										if("审定单".equals(info.getAttachName()) || "咨询报告书正文(含附件)  附件一:工程预算或结算汇总表 附件二:编制或审核说明 附件三:工程预算或结算审定单 附件四:工程预算或结算书".equals(info.getAttachName()) ){
-											if(!info.getAttachTypes().contains("zip")){
-												info.setAttachTypes(info.getAttachTypes()+",zip");
-											}
-											if(!info.getAttachTypes().contains("rar")){
-												info.setAttachTypes(info.getAttachTypes()+",rar");
-											}
-										}
-									}
-								}
-								if(null != projectReportRecord){
-									projectReportRecord.setFileAttachmentList(fileAttachmentList);
-								}
-								break;
-							case "12":
-								List<ProjectTemplateInfo> projectTemplateList = projectTemplateService.getProjectTemplateListByArchive(relateInfo);
-								for (ProjectTemplateInfo info: projectTemplateList) {
-									info.setAttachTypes(info.getAttachTypes().toLowerCase());
-									if(engineeringId.equals(ruralProjectRecords.getEngineeringType())){
-										if("投标文件、中标通知书、工程承包合同(协议书记专用条款部分)、补充协议".equals(info.getAttachName()) || "送审工程预算、结算书".equals(info.getAttachName()) ){
-											if(!info.getAttachTypes().contains("zip")){
-												info.setAttachTypes(info.getAttachTypes()+",zip");
-											}
-											if(!info.getAttachTypes().contains("rar")){
-												info.setAttachTypes(info.getAttachTypes()+",rar");
-											}
-										}
-									}
-								}
-								if(null != projectReportRecord){
-									projectReportRecord.setFileGistdataList(projectTemplateList);
-								}
-
-								break;
-							case "13":
-								if(null != projectReportRecord){
-									projectReportRecord.setFileOtherList(projectTemplateService.getProjectTemplateListByArchive(relateInfo));
-								}
-
-								break;
-						}
-
-					}*/
 					if(null != projectReportRecord){
 						projectReportRecord.setUploadMode(uploadMode);
 					}
@@ -3155,11 +3206,6 @@ public class WorkProjectNotifyController extends BaseController {
 						}
 					}
 					model.addAttribute("datalistTwo", reviewAuditList);
-
-
-
-
-
 					model.addAttribute("projectTypeId",reported.getProjectType());
 					user = UserUtils.get(reported.getXmFZR());
 					if(null != user){
@@ -3236,20 +3282,6 @@ public class WorkProjectNotifyController extends BaseController {
 				}else if ("218".equals(workProjectNotify.getType())) {    //全过程项目上报管理
 					RuralProjectRecordsReported reported = ruralProjectMessageService.getRuralProjectRecordsReported(workProjectNotify.getNotifyId());
 
-					//查询报告信息
-					/*ProjectReportData projectReportData = projectReportDataService.getReportDataByProjectId(reported.getId());
-					//查询“配农网”工程类型id
-					String engineeringId = engineeringService.getEngineeringId("202");
-					ProjectReportRecord projectReportRecord = projectReportRecordService.getprojectReportRecord(projectReportData.getId());
-					if(null != projectReportRecord){
-						projectReportRecord.setProjectReportData(projectReportData);
-						projectReportRecord.setReport(projectReportData);
-					}else{
-						projectReportRecord = new ProjectReportRecord();
-					}
-					Projectcontentinfo projectcontentinfo = projectcontentinfoService.getByInfoId(projectReportData.getId());
-					projectcontentinfo.setProjectReportData(projectReportData);*/
-
 					//获取项目信息
 					RuralProjectRecords ruralProjectRecords = ruralProjectRecordsService.getQueryProjectUsers(reported.getProjectId());
 					//获取复核标准
@@ -3280,10 +3312,6 @@ public class WorkProjectNotifyController extends BaseController {
 							for (int i=0;i<biao.length;i++){
 								chargeCriterionList.add(biao[i]);
 							}
-							/*if(null != projectReportRecord){
-								projectReportRecord.setChargeCriterionList(chargeCriterionList);
-							}*/
-
 						}
 						reported.setChargeCriterionList(workContractInfo.getChargeCriterionList());
 					}
@@ -3291,7 +3319,6 @@ public class WorkProjectNotifyController extends BaseController {
 
 					WorkContractInfo projectContractInfo = ruralProjectMessageService.getProjectContractInfo(ruralProjectRecords.getWorkContractInfo().getId());
 					ruralProjectRecords.setWorkContractInfo(projectContractInfo);
-					//MyBeanUtils.copyBeanNotNull2Bean(ruralProjectRecords,projectReportData.getProject());//将编辑表单中的非NULL值覆盖数据库记录中的值
 					if(null != projectContractInfo){
 						if(projectContractInfo.getWorkClientInfoList().size()>0){
 							model.addAttribute("workClientInfoName", projectContractInfo.getWorkClientInfoList().get(0).getName());
@@ -3334,60 +3361,6 @@ public class WorkProjectNotifyController extends BaseController {
 					relateInfo.setId(ruralProjectRecords.getId());
 					//查询报告文件、依据性文件、其他文件必填列表以及数据
 					List<MainDictDetail> mainDictDetails = projectTemplateService.attachmentTemplateList();
-					/*for (MainDictDetail mainDict : mainDictDetails) {
-						relateInfo.setAttachType(mainDict.getValue());
-						switch (mainDict.getValue()) {
-							case "11":
-								List<ProjectTemplateInfo> fileAttachmentList = projectTemplateService.getProjectTemplateListByArchive(relateInfo);
-								for (ProjectTemplateInfo info: fileAttachmentList) {
-									info.setAttachTypes(info.getAttachTypes().toLowerCase());
-									if(engineeringId.equals(ruralProjectRecords.getEngineeringType())){
-										if("审定单".equals(info.getAttachName()) || "咨询报告书正文(含附件)  附件一:工程预算或结算汇总表 附件二:编制或审核说明 附件三:工程预算或结算审定单 附件四:工程预算或结算书".equals(info.getAttachName()) ){
-											if(!info.getAttachTypes().contains("zip")){
-												info.setAttachTypes(info.getAttachTypes()+",zip");
-											}
-											if(!info.getAttachTypes().contains("rar")){
-												info.setAttachTypes(info.getAttachTypes()+",rar");
-											}
-										}
-									}
-								}
-								if(null != projectReportRecord){
-									projectReportRecord.setFileAttachmentList(fileAttachmentList);
-								}
-								break;
-							case "12":
-								List<ProjectTemplateInfo> projectTemplateList = projectTemplateService.getProjectTemplateListByArchive(relateInfo);
-								for (ProjectTemplateInfo info: projectTemplateList) {
-									info.setAttachTypes(info.getAttachTypes().toLowerCase());
-									if(engineeringId.equals(ruralProjectRecords.getEngineeringType())){
-										if("投标文件、中标通知书、工程承包合同(协议书记专用条款部分)、补充协议".equals(info.getAttachName()) || "送审工程预算、结算书".equals(info.getAttachName()) ){
-											if(!info.getAttachTypes().contains("zip")){
-												info.setAttachTypes(info.getAttachTypes()+",zip");
-											}
-											if(!info.getAttachTypes().contains("rar")){
-												info.setAttachTypes(info.getAttachTypes()+",rar");
-											}
-										}
-									}
-								}
-								if(null != projectReportRecord){
-									projectReportRecord.setFileGistdataList(projectTemplateList);
-								}
-
-								break;
-							case "13":
-								if(null != projectReportRecord){
-									projectReportRecord.setFileOtherList(projectTemplateService.getProjectTemplateListByArchive(relateInfo));
-								}
-
-								break;
-						}
-
-					}
-					if(null != projectReportRecord){
-						projectReportRecord.setUploadMode(uploadMode);
-					}*/
 
 					//获取项目基础信息
 					ruralProjectRecordsService.queryProjectDetail(ruralProjectRecords);
@@ -3408,13 +3381,8 @@ public class WorkProjectNotifyController extends BaseController {
 							}
 						}
 					}
-					//model.addAttribute("projectcontentinfo", projectcontentinfo);
 					model.addAttribute("projectRecords", ruralProjectRecords);
-					//model.addAttribute("projectReportData", projectReportData);
-					//model.addAttribute("ziXunShouRu", projectReportData.getZiXunShouRu());
 					model.addAttribute("workContractInfo", workContractInfo);
-					//model.addAttribute("projectReportRecord", projectReportRecord);
-					//model.addAttribute("project", projectReportData.getProject());
 					//tap页
 					//查询所有的工程类型
 					List<ProjectEngineeringInfo> projectEngineeringInfo=engineeringService.findList(new ProjectEngineeringInfo());
@@ -3422,12 +3390,6 @@ public class WorkProjectNotifyController extends BaseController {
 					//项目计划
 					RuralProjectRecords projectRecordPlans = this.planView(ruralProjectRecords.getId());
 					model.addAttribute("projectRecordPlans", projectRecordPlans);
-					//获取质量复核项目组成员
-					//List<RuralReportConsultant> consultantinfo =this.qualityView(ruralProjectRecords,projectReportData);
-					//model.addAttribute("consultantinfo", consultantinfo);
-					//获取总审人员
-					//User user=UserUtils.get(projectReportData.getBzshbUserId());
-					//model.addAttribute("bzshbUserName",user.getName());
 					//质量复核标准展示
 					String review="";
 					if ("2".equals(ruralProjectRecords.getSubmitMoney())){
@@ -3474,10 +3436,6 @@ public class WorkProjectNotifyController extends BaseController {
 
 
 					model.addAttribute("projectTypeId",reported.getProjectType());
-					/*user = UserUtils.get(reported.getXmFZR());
-					if(null != user){
-						model.addAttribute("xmFZRName",user.getName());
-					}*/
 
 					Act act = getByAct(reported.getProcessInstanceId());
 					reported.setAct(act);
@@ -4030,28 +3988,10 @@ public class WorkProjectNotifyController extends BaseController {
 						}
 					}
 					consultants.addAll(consultantList);
-
-
-					//根据条件查询附件必填项
-					//判断项目类别是否为打包项目(1:打包项目,0:非打包项目)
-					/*Integer projectSort = projectAccessoryRelationService.decideAttachmentProjectSort(ruralProjectRecords.getAttachmentProjectSort());
-
-					Boolean flag = false;
-					//如果是打包项目或者报告送审价不为null则可进行查询附件类型
-					if(1 == projectSort || null != projectcontentinfo.getProjectReportData().getReviewFee()){
-						flag = true;
-					}
-					if(flag) {*/
-						ProjectAccessoryRelationInfo relateInfo = new ProjectAccessoryRelationInfo();
-						//添加项目类型
-						relateInfo.setAttachmentProjectType(ruralProjectRecords.getProjectType());
-						relateInfo.setAttachmentProjectSort(ruralProjectRecords.getAttachmentProjectSort());
-						//判断是否为打包项目,打包项目无需查看项目送审金额是否为500w以上判定
-						//if(0 == projectSort){
-							//查看送审金额是否为500w以上金额
-//							Integer approvalMoney = projectAccessoryRelationService.decideAttachmentProjectApprovalMoney(projectcontentinfo.getProjectReportData().getReviewFee());
-					//设置默认值为500w以上的展示数据
-//					approvalMoney = 2;
+					ProjectAccessoryRelationInfo relateInfo = new ProjectAccessoryRelationInfo();
+					//添加项目类型
+					relateInfo.setAttachmentProjectType(ruralProjectRecords.getProjectType());
+					relateInfo.setAttachmentProjectSort(ruralProjectRecords.getAttachmentProjectSort());
 					String money=ruralProjectRecords.getSubmitMoney();
 					Integer approvalMoney=null;
 					if(StringUtils.isBlank(money)){
@@ -4073,9 +4013,6 @@ public class WorkProjectNotifyController extends BaseController {
 							relateInfo.setAttachmentProjectApprovalMoney("2");
 							break;
 					}
-						/*}else{
-							relateInfo.setAttachmentProjectApprovalMoney(null);
-						}*/
 
 						//添加报告类型
 						relateInfo.setRequiredStage(1);
@@ -4497,49 +4434,6 @@ public class WorkProjectNotifyController extends BaseController {
 
 					projectTemplateService.disposeProjectTemplateFile(mainDictDetails,relateInfo,engineeringId,ruralProjectRecords,projectcontentinfo,"");
 
-					/*for (MainDictDetail mainDict : mainDictDetails) {
-						relateInfo.setAttachType(mainDict.getValue());
-						switch (mainDict.getValue()) {
-							case "11":
-								List<ProjectTemplateInfo> fileAttachmentList = projectTemplateService.getProjectTemplateList(relateInfo);
-								for (ProjectTemplateInfo info: fileAttachmentList) {
-									info.setAttachTypes(info.getAttachTypes().toLowerCase());
-									if(engineeringId.equals(ruralProjectRecords.getEngineeringType())){
-										if("审定单".equals(info.getAttachName()) || "咨询报告书正文(含附件)  附件一:工程预算或结算汇总表 附件二:编制或审核说明 附件三:工程预算或结算审定单 附件四:工程预算或结算书".equals(info.getAttachName()) ){
-											if(!info.getAttachTypes().contains("zip")){
-												info.setAttachTypes(info.getAttachTypes()+",zip");
-											}
-											if(!info.getAttachTypes().contains("rar")){
-												info.setAttachTypes(info.getAttachTypes()+",rar");
-											}
-										}
-									}
-								}
-								projectcontentinfo.setFileAttachmentList(fileAttachmentList);
-								break;
-							case "12":
-								List<ProjectTemplateInfo> projectTemplateList = projectTemplateService.getProjectTemplateList(relateInfo);
-								for (ProjectTemplateInfo info: projectTemplateList) {
-									info.setAttachTypes(info.getAttachTypes().toLowerCase());
-									if(engineeringId.equals(ruralProjectRecords.getEngineeringType())){
-										if("投标文件、中标通知书、工程承包合同(协议书记专用条款部分)、补充协议".equals(info.getAttachName()) || "送审工程预算、结算书".equals(info.getAttachName()) ){
-											if(!info.getAttachTypes().contains("zip")){
-												info.setAttachTypes(info.getAttachTypes()+",zip");
-											}
-											if(!info.getAttachTypes().contains("rar")){
-												info.setAttachTypes(info.getAttachTypes()+",rar");
-											}
-										}
-									}
-								}
-								projectcontentinfo.setFileGistdataList(projectTemplateList);
-								break;
-							case "13":
-								projectcontentinfo.setFileOtherList(projectTemplateService.getProjectTemplateList(relateInfo));
-								break;
-						}
-
-					}*/
 					if(StringUtils.isNotBlank(workProjectNotify.getHome())){
 						projectcontentinfo.setHome(workProjectNotify.getHome());
 					}else{
@@ -5066,49 +4960,7 @@ public class WorkProjectNotifyController extends BaseController {
 					List<MainDictDetail> mainDictDetails = projectTemplateService.attachmentTemplateList();
 					//文件处理
 					projectTemplateService.disposeProjectTemplateFile(mainDictDetails,relateInfo,engineeringId,ruralProjectRecords,projectcontentinfo,"");
-					/*for (MainDictDetail mainDict : mainDictDetails) {
-						relateInfo.setAttachType(mainDict.getValue());
-						switch (mainDict.getValue()) {
-							case "11":
-								List<ProjectTemplateInfo> fileAttachmentList = projectTemplateService.getProjectTemplateList(relateInfo);
-								for (ProjectTemplateInfo info: fileAttachmentList) {
-									info.setAttachTypes(info.getAttachTypes().toLowerCase());
-									if(engineeringId.equals(ruralProjectRecords.getEngineeringType())){
-										if("审定单".equals(info.getAttachName()) || "咨询报告书正文(含附件)  附件一:工程预算或结算汇总表 附件二:编制或审核说明 附件三:工程预算或结算审定单 附件四:工程预算或结算书".equals(info.getAttachName()) ){
-											if(!info.getAttachTypes().contains("zip")){
-												info.setAttachTypes(info.getAttachTypes()+",zip");
-											}
-											if(!info.getAttachTypes().contains("rar")){
-												info.setAttachTypes(info.getAttachTypes()+",rar");
-											}
-										}
-									}
-								}
-								projectcontentinfo.setFileAttachmentList(fileAttachmentList);
-								break;
-							case "12":
-								List<ProjectTemplateInfo> projectTemplateList = projectTemplateService.getProjectTemplateList(relateInfo);
-								for (ProjectTemplateInfo info: projectTemplateList) {
-									info.setAttachTypes(info.getAttachTypes().toLowerCase());
-									if(engineeringId.equals(ruralProjectRecords.getEngineeringType())){
-										if("投标文件、中标通知书、工程承包合同(协议书记专用条款部分)、补充协议".equals(info.getAttachName()) || "送审工程预算、结算书".equals(info.getAttachName()) ){
-											if(!info.getAttachTypes().contains("zip")){
-												info.setAttachTypes(info.getAttachTypes()+",zip");
-											}
-											if(!info.getAttachTypes().contains("rar")){
-												info.setAttachTypes(info.getAttachTypes()+",rar");
-											}
-										}
-									}
-								}
-								projectcontentinfo.setFileGistdataList(projectTemplateList);
-								break;
-							case "13":
-								projectcontentinfo.setFileOtherList(projectTemplateService.getProjectTemplateList(relateInfo));
-								break;
-						}
 
-					}*/
 					if(StringUtils.isNotBlank(workProjectNotify.getHome())){
 						projectcontentinfo.setHome(workProjectNotify.getHome());
 					}else{
@@ -5333,13 +5185,7 @@ public class WorkProjectNotifyController extends BaseController {
 						model.addAttribute("identificationName","报告审核意见");
 						return "modules/ruralprojectrecords/ruralporjectmessage/projectcontentinfo/new/judgementReport/projectRecordsJudgementMessageAudit";
 					} else if (workProjectNotify.getRemarks().contains("重新申请") && !"1".equals(workProjectNotify.getStatus())) {
-						/*Iterator<RuralReportConsultant> itView = consultants.iterator();
-						while(itView.hasNext()){
-							RuralReportConsultant consultant = itView.next();
-							if(consultant.getZixunyuan().equals(projectReportData.getBzshbUserId())){
-								itView.remove();
-							}
-						}*/
+
 						model.addAttribute("info", consultants);
 						model.addAttribute("consultantCount", consultants.size());
 

+ 1 - 1
src/main/java/com/jeeplus/modules/workreimbursement/service/WorkReimbursementNewService.java

@@ -465,7 +465,7 @@ public class WorkReimbursementNewService extends CrudService<WorkReimbursementDa
         //财务主任(雷主任)
         List<User> cws = UserUtils.getByRoleActivityEnname("cwzg",3,office.getId(),"8",workReimbursement.getCreateBy());
         //财务员工
-        List<User> fpglys = UserUtils.getByRoleActivityEnname("cwygevod",3,office.getId(),"5",workReimbursement.getCreateBy());
+        List<User> fpglys = UserUtils.getByRoleActivityEnname("dzfpbxshybxsd",3,office.getId(),"5",workReimbursement.getCreateBy());
         //出纳
         //List<User> cns = UserUtils.getByRoleActivityEnname("cn",3,office.getId(),"8",workReimbursement.getCreateBy());
         //总经办负责人

+ 6 - 1
src/main/java/com/jeeplus/modules/workreimbursement/service/WorkReimbursementService.java

@@ -1942,7 +1942,12 @@ public class WorkReimbursementService extends CrudService<WorkReimbursementDao,
                         if(map1.size()>0){
                             //将获取到的数据进行遍历,添加父节点的参数信息,防止子节点key键相同,导致数据被覆盖
                             for (String key : map1.keySet()) {
-                                map2.put(parentName + key,map1.get(key));
+                                if(key.contains("-")){
+                                    String newKey = key.replaceAll("-","");
+                                    map2.put(parentName + newKey,map1.get(key));
+                                }else{
+                                    map2.put(parentName + key,map1.get(key));
+                                }
                             }
                         }
                         map.putAll(map2);

+ 456 - 0
src/main/resources/mappings/modules/filialeWorkInvoice/FilialeWorkInvoiceAlterDao.xml

@@ -0,0 +1,456 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jeeplus.modules.filialeWorkInvoice.dao.FilialeWorkInvoiceAlterDao">
+
+	<sql id="workInvoiceColumns">
+		a.id AS "id",
+		a.number AS "number",
+		a.process_instance_id AS "processInstanceId",
+		a.client_id AS "client.id",
+		a.project_id AS "project.id",
+		a.project_name AS "projectName",
+		a.money AS "money",
+		a.invoice_type AS "invoiceType",
+		a.charge_type AS "chargeType",
+		a.content AS "content",
+		a.drawer_id AS "drawer.id",
+		a.office_id AS "office.id",
+		a.invoice_number AS "invoiceNumber",
+		a.invoice_date AS "invoiceDate",
+		a.drawer_name AS "drawerName",
+		a.take_date AS "takeDate",
+		a.invoice_remarks AS "invoiceRemarks",
+		a.is_invoice AS "isInvoice",
+		a.is_charge AS "isCharge",
+		a.is_invalid AS "isInvalid",
+		a.create_by AS "createBy.id",
+		a.create_date AS "createDate",
+		a.update_by AS "updateBy.id",
+		a.update_date AS "updateDate",
+		a.remarks AS "remarks",
+		a.del_flag AS "delFlag",
+		a.orUnicode AS "orUnicode",
+		a.address AS "address",
+		a.telephone AS "telephone",
+		a.bank AS "bank",
+		a.bank_number AS "bankNumber",
+		a.cancle_reason AS "cancaleReason",
+		u.name AS "drawer.name",
+		so.top_company AS "office.name",
+		w.name AS "client.name",
+		p.project_name AS "project.projectName",
+		a.invoice_state AS "invoiceState",
+		p.project_id AS "project.projectId",
+		ci.name AS "project.workContractInfo.name",
+		w.usc_code AS "client.uscCode",
+		w.fax AS "client.fax",
+		w.or_unicode AS "client.orUnicode",
+		w.telephone AS "client.telephone",
+		a.company_id AS "companyId",
+		a.cancle_reason AS "cancleReason",
+		w.address AS "client.address",
+		a.officee_id AS "officeId",
+		a.province AS "province",
+		invoice_id AS "workInvoice.id",
+		a.ext AS "ext"
+	</sql>
+
+	<sql id="workInvoiceJoins">
+		LEFT JOIN sys_user u ON u.id = a.drawer_id
+		LEFT JOIN work_client_info w ON  w.id = a.client_id
+	  	LEFT JOIN rural_project_records p ON  p.id = a.project_id
+	  	left JOIN work_contract_info ci on ci.id = p.contract_id
+	  	JOIN sys_office o ON o.id = a.office_id
+		JOIN sys_office s ON s.id = a.company_id
+		left jOIN sys_office so ON so.id = a.office_id
+	</sql>
+
+
+	<select id="get" resultType="FilialeWorkInvoiceAlter" >
+		SELECT
+		<include refid="workInvoiceColumns"/>
+		FROM filiale_work_invoicealter a
+		<include refid="workInvoiceJoins"/>
+		WHERE a.id = #{id}
+	</select>
+
+	<select id="findList" resultType="FilialeWorkInvoiceAlter" >
+		SELECT
+		<include refid="workInvoiceColumns"/>
+		FROM filiale_work_invoicealter a
+		<include refid="workInvoiceJoins"/>
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			<if test="number != null and number != ''">
+				AND a.number = #{number}
+			</if>
+			<if test="invoiceState != null and invoiceState != ''">
+				AND a.invoice_state = #{invoiceState}
+			</if>
+			<if test="beginContractDate != null and endContractDate != null and beginContractDate != '' and endContractDate != ''">
+				AND a.update_date BETWEEN #{beginContractDate} AND #{endContractDate}
+			</if>
+			<if test="client != null and client.id != null and client.id != ''">
+				AND a.client_id = #{client.id}
+			</if>
+			<if test="project != null and project.id != null and project.id != ''">
+				AND a.project_id = #{project.id}
+			</if>
+			<if test="project != null and project.projectId != null and project.projectId != ''">
+				AND p.project_id LIKE
+				<if test="dbName == 'oracle'">'%'||#{project.projectId}||'%'</if>
+				<if test="dbName == 'mssql'">'%'+#{project.projectId}+'%'</if>
+				<if test="dbName == 'mysql'">concat('%',#{project.projectId},'%')</if>
+			</if>
+			<if test="project != null and project.projectName != null and project.projectName != ''">
+				AND p.project_name LIKE
+				<if test="dbName == 'oracle'">'%'||#{project.projectName}||'%'</if>
+				<if test="dbName == 'mssql'">'%'+#{project.projectName}+'%'</if>
+				<if test="dbName == 'mysql'">concat('%',#{project.projectName},'%')</if>
+			</if>
+			<if test="client != null and client.name != null and client.name != ''">
+				AND w.name LIKE
+				<if test="dbName == 'oracle'">'%'||#{client.name}||'%'</if>
+				<if test="dbName == 'mssql'">'%'+#{client.name}+'%'</if>
+				<if test="dbName == 'mysql'">concat('%',#{client.name},'%')</if>
+			</if>
+			<if test="office != null and office.name != null and office.name != ''">
+				AND so.name LIKE
+				<if test="dbName == 'oracle'">'%'||#{office.name}||'%'</if>
+				<if test="dbName == 'mssql'">'%'+#{office.name}+'%'</if>
+				<if test="dbName == 'mysql'">concat('%',#{office.name},'%')</if>
+			</if>
+			<if test="money != null and money != ''">
+				AND a.money = #{money}
+			</if>
+			<if test="invoiceType != null and invoiceType != ''">
+				AND a.invoice_type = #{invoiceType}
+			</if>
+			<if test="chargeType != null and chargeType != ''">
+				AND a.charge_type = #{chargeType}
+			</if>
+			<if test="content != null and content != ''">
+				AND a.content = #{content}
+			</if>
+			<if test="drawer != null and drawer.id != null and drawer.id != ''">
+				AND a.drawer_id = #{drawer.id}
+			</if>
+			<if test="companyId != null and companyId != ''">
+				AND a.company_id = #{companyId}
+			</if>
+			<if test="office != null and office.id != null and office.id != ''">
+				AND a.office_id = #{office.id}
+			</if>
+			<if test="invoiceNumber != null and invoiceNumber != ''">
+				AND a.invoice_number LIKE
+				<if test="dbName == 'oracle'">'%'||#{invoiceNumber}||'%'</if>
+				<if test="dbName == 'mssql'">'%'+#{invoiceNumber}+'%'</if>
+				<if test="dbName == 'mysql'">concat('%',#{invoiceNumber},'%')</if>
+			</if>
+			<if test="invoiceDate != null and invoiceDate != ''">
+				AND a.invoice_date = #{invoiceDate}
+			</if>
+			<if test="isInvoice != null and isInvoice != ''">
+				AND a.is_invoice = #{isInvoice}
+			</if>
+			<if test="isCharge != null and isCharge != ''">
+				AND a.is_charge = #{isCharge}
+			</if>
+			<if test="isInvalid != null and isInvalid != ''">
+				AND a.is_invalid = #{isInvalid}
+			</if>
+			${sqlMap.dsf}
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+
+	<select id="findAllList" resultType="FilialeWorkInvoiceAlter" >
+		SELECT
+		<include refid="workInvoiceColumns"/>
+		FROM filiale_work_invoicealter a
+		<include refid="workInvoiceJoins"/>
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+
+	<update id="updateProcessInstanceId">
+		UPDATE filiale_work_invoicealter SET
+			process_instance_id = #{processInstanceId}
+		WHERE id = #{id}
+	</update>
+
+	<insert id="insert">
+		INSERT INTO filiale_work_invoicealter(
+			id,
+			number,
+			client_id,
+			project_id,
+			project_name,
+			money,
+			invoice_type,
+			charge_type,
+			content,
+			drawer_id,
+			office_id,
+			invoice_number,
+			invoice_date,
+			drawer_name,
+			take_date,
+			invoice_remarks,
+			is_invoice,
+			is_charge,
+			is_invalid,
+			create_by,
+			create_date,
+			update_by,
+			update_date,
+			remarks,
+			del_flag,
+			invoice_state,
+			orUnicode,
+			address,
+			telephone,
+			bank,
+			company_id,
+			bank_number,
+			cancle_reason,
+			officee_id,
+			province,
+			invoice_id,
+			ext
+		) VALUES (
+			#{id},
+			#{number},
+			#{client.id},
+			#{project.id},
+			#{projectName},
+			#{money},
+			#{invoiceType},
+			#{chargeType},
+			#{content},
+			#{drawer.id},
+			#{office.id},
+			#{invoiceNumber},
+			#{invoiceDate},
+			#{drawerName},
+			#{takeDate},
+			#{invoiceRemarks},
+			#{isInvoice},
+			#{isCharge},
+			#{isInvalid},
+			#{createBy.id},
+			#{createDate},
+			#{updateBy.id},
+			#{updateDate},
+			#{remarks},
+			#{delFlag},
+			#{invoiceState},
+			#{orUnicode},
+			#{address},
+			#{telephone},
+			#{bank},
+			#{companyId},
+			#{bankNumber},
+			#{cancleReason},
+			#{officeId},
+			#{province},
+			#{workInvoice.id},
+			#{ext}
+		)
+	</insert>
+
+	<update id="update">
+		UPDATE filiale_work_invoicealter SET
+			number = #{number},
+			client_id = #{client.id},
+			invoice_id = #{workInvoice.id},
+			project_id = #{project.id},
+			project_name = #{projectName},
+			money = #{money},
+			invoice_type = #{invoiceType},
+			charge_type = #{chargeType},
+			content = #{content},
+			drawer_id = #{drawer.id},
+			office_id = #{office.id},
+			invoice_number = #{invoiceNumber},
+			invoice_date = #{invoiceDate},
+			drawer_name = #{drawerName},
+			take_date = #{takeDate},
+			invoice_remarks = #{invoiceRemarks},
+			is_invoice = #{isInvoice},
+			is_charge = #{isCharge},
+			is_invalid = #{isInvalid},
+			update_by = #{updateBy.id},
+			update_date = #{updateDate},
+			remarks = #{remarks},
+			invoice_state=#{invoiceState},
+			orUnicode=#{orUnicode},
+			address=#{address},
+			telephone=#{telephone},
+			bank=#{bank},
+			company_id = #{companyId},
+			bank_number=#{bankNumber},
+			cancle_reason=#{cancleReason},
+			officee_id=#{officeId},
+			province = #{province},
+			ext = #{ext}
+		WHERE id = #{id}
+	</update>
+
+
+	<!--物理删除-->
+	<update id="delete">
+		DELETE FROM filiale_work_invoicealter
+		WHERE id = #{id}
+	</update>
+
+	<!--逻辑删除-->
+	<update id="deleteByLogic">
+		UPDATE filiale_work_invoicealter SET
+			del_flag = #{DEL_FLAG_DELETE}
+		WHERE id = #{id}
+	</update>
+
+
+	<!-- 根据实体名称和字段名称和字段值获取唯一记录 -->
+	<select id="findUniqueByProperty" resultType="FilialeWorkInvoiceAlter" statementType="STATEMENT">
+		select * FROM filiale_work_invoicealter  where ${propertyName} = '${value}'
+	</select>
+
+	<select id="findListByclient" resultType="WorkClientInfo">
+		SELECT
+		*
+		FROM work_client_info a
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			<if test="companyId != null and companyId != ''">
+				AND a.company_id = #{companyId}
+			</if>
+			<if test="name != null and name != ''">
+				AND a.name LIKE
+				<if test="dbName == 'oracle'">'%'||#{name}||'%'</if>
+				<if test="dbName == 'mysql'">CONCAT('%', #{name}, '%')</if>
+			</if>
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+	<!--<select id="findListByproject" resultType="WorkBidProject">-->
+	<!--SELECT -->
+	<!--*-->
+	<!--FROM work_client_info a-->
+	<!--<where>-->
+	<!--a.del_flag = #{DEL_FLAG_NORMAL}-->
+	<!--<if test="name != null and name != ''">-->
+	<!--AND a.project.name LIKE -->
+	<!--<if test="dbName == 'oracle'">#{name}||'%'</if>-->
+	<!--<if test="dbName == 'mssql'">#{name}+'%'</if>-->
+	<!--<if test="dbName == 'mysql'">concat(#{name},'%')</if>-->
+	<!--</if>-->
+	<!--</where>-->
+	<!--<choose>-->
+	<!--<when test="page !=null and page.orderBy != null and page.orderBy != ''">-->
+	<!--ORDER BY ${page.orderBy}-->
+	<!--</when>-->
+	<!--<otherwise>-->
+	<!--ORDER BY a.update_date DESC-->
+	<!--</otherwise>-->
+	<!--</choose>-->
+	<!--</select>-->
+
+	<select id="getByProcInsId" resultType="FilialeWorkInvoiceAlter">
+		SELECT
+		<include refid="workInvoiceColumns"/>
+		FROM filiale_work_invoicealter a
+		<include refid="workInvoiceJoins"/>
+		WHERE a.process_instance_id = #{processInstanceId}
+	</select>
+
+	<select id="findListByproject" resultType="WorkBidProject">
+		select
+		a.id AS "id",
+		a.project_number AS "projectNumber",
+		a.project_name AS "projectName",
+		a.project_type AS "projectType",
+		a.type_explain AS "typeExplain",
+		a.project_source AS "projectSource",
+		a.source_explain AS "sourceExplain",
+		a.is_ext AS "isExt",
+		a.bid_company AS "bidCompany.id",
+		a.ext_company AS "extCompany",
+		a.contacts AS "contacts",
+		a.registration_date AS "registrationDate",
+		a.bid_date AS "bidDate",
+		a.trial_date AS "trialDate",
+		a.trial_type AS "trialType",
+		a.document_cost AS "documentCost",
+		a.purchase_date AS "purchaseDate",
+		a.bind_cost AS "bindCost",
+		a.other_cost AS "otherCost",
+		a.bid_bond AS "bidBond",
+		a.bond_style AS "bondStyle",
+		a.refund_date AS "refundDate",
+		a.offer AS "offer",
+		a.is_bid AS "isBid",
+		a.implementing_dept AS "implementingDept.id",
+		a.is_subcontract AS "isSubcontract",
+		a.subcontract_company AS "subcontractCompany",
+		a.project_situation AS "projectSituation",
+		a.status AS "status",
+		a.create_by AS "createBy.id",
+		a.create_date AS "createDate",
+		a.update_by AS "updateBy.id",
+		a.update_date AS "updateDate",
+		a.remarks AS "remarks",
+		a.del_flag AS "delFlag",
+		a.work_project_id AS "workProject.id"
+		FROM work_client_info w
+		LEFT JOIN work_bid_project a on w.id = a.bid_company
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			<!--<if-->
+			<if test="bidCompany != null  and bidCompany.id != null and bidCompany.id != ''">
+				AND a.bid_company =  #{bidCompany.id}
+			</if>
+			<if test="companyId != null and companyId != ''">
+				AND (a.company_id = #{companyId} or find_in_set(a.company_id ,#{parentIds}))
+			</if>
+			<if test="name != null and name != ''">
+				AND a.name LIKE
+				<if test="dbName == 'oracle'">#{name}||'%'</if>
+				<if test="dbName == 'mssql'">#{name}+'%'</if>
+				<if test="dbName == 'mysql'">concat(#{name},'%')</if>
+			</if>
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+</mapper>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 2623 - 0
src/main/resources/mappings/modules/filialeWorkInvoice/FilialeWorkInvoiceDao.xml


+ 617 - 0
src/main/resources/mappings/modules/filialeWorkInvoice/FilialeWorkInvoiceDetailDao.xml

@@ -0,0 +1,617 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jeeplus.modules.filialeWorkInvoice.dao.FilialeWorkInvoiceDetailDao">
+
+	<sql id="workInvoiceDetailColumns">
+		a.id AS "id",
+		a.create_by AS "createBy.id",
+		a.create_date AS "createDate",
+		a.update_by AS "updateBy.id",
+		a.update_date AS "updateDate",
+		a.remarks AS "remarks",
+		a.del_flag AS "delFlag",
+		a.code AS "code",
+		a.number AS "number",
+		a.total_money AS "totalMoney",
+		a.tax AS "tax",
+		a.tax_money AS "taxMoney",
+		a.tax_rate AS "taxRate",
+		a.income_money AS "incomeMoney",
+		a.date AS "date",
+		a.return_id AS "returnId",
+		w1.ext AS "invoiceExt",
+		w1.invoice_type AS "invoiceInvoiceType",
+		w2.name AS "invoiceClientName",
+		w1.orUnicode AS "invoiceOrUnicode",
+		w1.content AS "invoiceContent",
+		w1.remarks AS "invoiceRemarks",
+		a.state AS "state",
+		a.back_sign AS "backSign",
+		a.back_number AS "backNumber",
+		a.back_code AS "backCode",
+		w1.number AS "invocieNumber",
+		w1.drawer_name AS "invoiceDrawerName",
+		s2.top_company AS "invoiceOfficeName",
+		w3.contract_num AS "contractNum",
+		w3.name AS "contractName",
+		w4.name AS "contractClientName",
+		a.status AS "status",
+		a.return_number AS "returnNumber",
+		a.return_reason AS "returnReason",
+		a.return_cancle AS "returnCancle",
+		a.return_sign AS "returnSign",
+		a.return_date AS "returnDate",
+		a.return_user AS "returnUser",
+		a.process_instance_id AS "processInstanceId",
+		a.sign AS "sign",
+		a.company_id AS "comId",
+		a.office_id AS "officeId",
+		a.ainvoice_id AS "ainvoiceId",
+		a.invoice_id AS "invoiceId",
+		w2.name As "workInvoice.client.name",
+		s2.top_company AS "workInvoice.office.name",
+		wir.return_number AS "returnNumbers",
+		a.settle_flag AS "settleFlag"
+	</sql>
+
+	<sql id="workInvoiceDetailColumn">
+		a.id AS "id",
+		a.create_by AS "createBy.id",
+		a.create_date AS "createDate",
+		a.update_by AS "updateBy.id",
+		a.update_date AS "updateDate",
+		a.remarks AS "remarks",
+		a.del_flag AS "delFlag",
+		a.number AS "number",
+		a.total_money AS "totalMoney",
+		a.tax AS "tax",
+		a.return_id AS "returnId",
+		a.tax_money AS "taxMoney",
+		a.tax_rate AS "taxRate",
+		a.income_money AS "incomeMoney",
+		a.state AS "state",
+		a.back_sign AS "backSign",
+		a.back_number AS "backNumber",
+		a.back_code AS "backCode",
+		a.date AS "date",
+		a.code AS "code",
+		a.status AS "status",
+		a.return_number AS "returnNumber",
+		a.return_reason AS "returnReason",
+		a.return_cancle AS "returnCancle",
+		a.return_sign AS "returnSign",
+		a.return_date AS "returnDate",
+		a.return_user AS "returnUser",
+		a.process_instance_id AS "processInstanceId",
+		a.sign AS "sign",
+		a.ainvoice_id AS "ainvoiceId",
+		a.invoice_id AS "invoiceId",
+		a.settle_flag AS "settleFlag"
+	</sql>
+
+	<sql id="workInvoiceDetailJoins">
+		left join filiale_work_invoice w1 on w1.id = a.invoice_id
+		LEFT JOIN work_client_info w2 ON  w2.id = w1.client_id
+		left join sys_office s2 on s2.id = w1.office_id
+		left join project_records p on p.id = w1.project_id
+		left join work_contract_info w3 on w3.id = p.contract_id
+		left join work_client_info w4 on w4.id = w3.client_id
+		left join sys_office o ON o.id = a.office_id
+		left join sys_office s ON s.id = a.company_id
+		left join filiale_work_invoicereturn wir on wir.invoice_id =a.return_id
+	</sql>
+
+
+	<select id="get" resultType="FilialeWorkInvoiceDetail" >
+		SELECT
+			<include refid="workInvoiceDetailColumns"/>
+		FROM filiale_work_invoice_detail a
+		<include refid="workInvoiceDetailJoins"/>
+		WHERE a.id = #{id}
+	</select>
+
+	<select id="findList" resultType="FilialeWorkInvoiceDetail" >
+		SELECT
+			<include refid="workInvoiceDetailColumns"/>
+		FROM filiale_work_invoice_detail a
+		<include refid="workInvoiceDetailJoins"/>
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL} and a.back_sign !='冲销'
+			<if test="beginContractDate != null and endContractDate != null and beginContractDate != '' and endContractDate != ''">
+				AND a.date BETWEEN #{beginContractDate} AND #{endContractDate}
+			</if>
+			<if test="number != null and number != ''">
+				AND a.number = #{number}
+			</if>
+			<if test="state != null and state != ''">
+				AND a.state = #{state}
+			</if>
+			<if test="invoiceId != null and invoiceId != ''">
+				AND a.invoice_id = #{invoiceId}
+			</if>
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+
+	<select id="findListByContractInfo" resultType="FilialeWorkInvoiceDetail" >
+		SELECT
+		<include refid="workInvoiceDetailColumns"/>
+		FROM filiale_work_invoice_detail a
+		<include refid="workInvoiceDetailJoins"/>
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			AND w3.id = #{id}
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+
+	<select id="findListReturn" resultType="FilialeWorkInvoiceDetail" >
+		SELECT
+		DISTINCT
+		<include refid="workInvoiceDetailColumn"/>
+		FROM
+		filiale_work_invoice_detail a
+		left join sys_office o ON o.id = a.office_id
+		left join sys_office s ON s.id = a.company_id
+		LEFT JOIN filiale_work_invoice w ON w.id = a.invoice_id
+		LEFT JOIN filiale_work_invoicereturn wir on a.id = wir.invoice_id
+		LEFT JOIN project_records p ON w.project_id = p.id
+		LEFT JOIN work_project_user wp ON p.id = wp.project_id
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL} and a.income_money = '0' and (wir.status is null or wir.status = '5') and w.invoice_type is not null
+			and w.invoice_state = '5'
+			<if test="state != null and state != ''">
+				AND a.state = #{state}
+			</if>
+			<if test="backSign != null and backSign != ''">
+				AND a.back_sign = #{backSign}
+			</if>
+			<if test="createBy != null and createBy.id != null and createBy.id != ''">
+				AND w.create_by = #{createBy.id}
+			</if>
+			<if test="createBy != null and createBy.id != null and createBy.id != ''">
+				AND wp.user_id = #{createBy.id}
+			</if>
+			/*${sqlMap.dsf}*/
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+
+	<select id="afindList" resultType="FilialeWorkInvoiceDetail" >
+		SELECT
+			a.id AS "id",
+			a.create_by AS "createBy.id",
+			a.create_date AS "createDate",
+			a.update_by AS "updateBy.id",
+			a.update_date AS "updateDate",
+			a.remarks AS "remarks",
+			a.del_flag AS "delFlag",
+			a.number AS "number",
+			a.total_money AS "totalMoney",
+			a.tax AS "tax",
+			a.tax_money AS "taxMoney",
+			a.tax_rate AS "taxRate",
+			a.income_money AS "incomeMoney",
+			a.state AS "state",
+			a.back_sign AS "backSign",
+			a.back_number AS "backNumber",
+			a.back_code AS "backCode",
+			a.return_id AS "returnId",
+			a.date AS "date",
+			a.code AS "code",
+			a.status AS "status",
+			a.return_number AS "returnNumber",
+			a.return_reason AS "returnReason",
+			a.return_cancle AS "returnCancle",
+			a.return_sign AS "returnSign",
+			a.return_date AS "returnDate",
+			a.return_user AS "returnUser",
+			a.process_instance_id AS "processInstanceId",
+			a.sign AS "sign",
+			w2.name As "workInvoice.client.name",
+			s2.name AS "workInvoice.office.name",
+			a.company_id AS "comId",
+			a.office_id AS "officeId",
+			a.ainvoice_id AS "ainvoiceId",
+			a.invoice_id AS "invoiceId"
+		FROM filiale_work_invoice_detail a
+			left join filiale_work_invoicealter w1 on w1.id = a.ainvoice_id
+			LEFT JOIN work_client_info w2 ON  w2.id = w1.client_id
+			left join sys_office s2 on s2.id = w1.office_id
+			JOIN sys_office o ON o.id = a.office_id
+			JOIN sys_office s ON s.id = a.company_id
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			<if test="number != null and number != ''">
+				AND a.number = #{number}
+			</if>
+			<if test="state != null and state != ''">
+				AND a.state = #{state}
+			</if>
+			<if test="ainvoiceId != null and ainvoiceId != ''">
+				AND a.ainvoice_id = #{ainvoiceId}
+			</if>
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+
+	<select id="findLists" resultType="FilialeWorkInvoiceDetail" >
+		SELECT
+		<include refid="workInvoiceDetailColumns"/>
+		FROM filiale_work_invoice_detail a
+		<include refid="workInvoiceDetailJoins"/>
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL} and w1.del_flag = 0 and w2.del_flag = 0 and p.del_flag = 0 and w3.del_flag = 0 and w4.del_flag = 0
+			and w1.invoice_type is not null
+			<if test="beginContractDate != null and endContractDate != null and beginContractDate != '' and endContractDate != ''">
+				AND a.date BETWEEN #{beginContractDate} AND #{endContractDate}
+			</if>
+			<if test="workInvoice !=null and workInvoice.client != null and workInvoice.client.name != null and workInvoice.client.name != ''">
+				AND w2.name LIKE
+				<if test="dbName == 'oracle'">'%'||#{workInvoice.client.name}||'%'</if>
+				<if test="dbName == 'mssql'">'%'+#{workInvoice.client.name}+'%'</if>
+				<if test="dbName == 'mysql'">concat('%',#{workInvoice.client.name},'%')</if>
+			</if>
+			<if test="invoiceDrawerName !=null and invoiceDrawerName != ''">
+				AND w1.drawer_name LIKE
+				<if test="dbName == 'oracle'">'%'||#{invoiceDrawerName}||'%'</if>
+				<if test="dbName == 'mssql'">'%'+#{invoiceDrawerName}+'%'</if>
+				<if test="dbName == 'mysql'">concat('%',#{invoiceDrawerName},'%')</if>
+			</if>
+			<if test="invoiceOfficeName !=null and invoiceOfficeName != ''">
+				AND s2.name LIKE
+				<if test="dbName == 'oracle'">'%'||#{invoiceOfficeName}||'%'</if>
+				<if test="dbName == 'mssql'">'%'+#{invoiceOfficeName}+'%'</if>
+				<if test="dbName == 'mysql'">concat('%',#{invoiceOfficeName},'%')</if>
+			</if>
+			<if test="contractName !=null and contractName != ''">
+				AND w3.name LIKE
+				<if test="dbName == 'oracle'">'%'||#{contractName}||'%'</if>
+				<if test="dbName == 'mssql'">'%'+#{contractName}+'%'</if>
+				<if test="dbName == 'mysql'">concat('%',#{contractName},'%')</if>
+			</if>
+			<if test="number != null and number != ''">
+				AND a.number = #{number}
+			</if>
+			<if test="state != null and state != ''">
+				AND a.state = #{state}
+			</if>
+			<if test="invoiceInvoiceType != null and invoiceInvoiceType != ''">
+				AND w1.invoice_type = #{invoiceInvoiceType}
+			</if>
+			<if test="status != null and status != ''">
+				AND a.status = #{status}
+			</if>
+			<if test="invoiceId != null and invoiceId != ''">
+				AND a.invoice_id = #{invoiceId}
+			</if>
+			${sqlMap.dsf}
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+
+	<select id="findAllList" resultType="FilialeWorkInvoiceDetail" >
+		SELECT
+			<include refid="workInvoiceDetailColumns"/>
+		FROM filiale_work_invoice_detail a
+		<include refid="workInvoiceDetailJoins"/>
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+
+	<select id="findByCode" resultType="FilialeWorkInvoiceDetail" >
+		SELECT
+		<include refid="workInvoiceDetailColumns"/>
+		FROM filiale_work_invoice_detail a
+		<include refid="workInvoiceDetailJoins"/>
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			and a.code = #{code} and a.number = #{number}
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+
+	<insert id="insert">
+		INSERT INTO filiale_work_invoice_detail(
+			id,
+			create_by,
+			create_date,
+			update_by,
+			update_date,
+			remarks,
+			del_flag,
+			number,
+			total_money,
+			tax,
+			tax_money,
+			tax_rate,
+			income_money,
+			state,
+			back_sign,
+			back_number,
+			back_code,
+			date,
+			code,
+			status,
+			return_number,
+			return_reason,
+			return_cancle,
+			return_sign,
+			return_date,
+			return_user,
+			process_instance_id,
+			sign,
+			company_id,
+			office_id,
+			ainvoice_id,
+			invoice_id,
+			return_id,
+			settle_flag
+		) VALUES (
+			#{id},
+			#{createBy.id},
+			#{createDate},
+			#{updateBy.id},
+			#{updateDate},
+			#{remarks},
+			#{delFlag},
+			#{number},
+			#{totalMoney},
+			#{tax},
+			#{taxMoney},
+			#{taxRate},
+			#{incomeMoney},
+			#{state},
+			#{backSign},
+			#{backNumber},
+			#{backCode},
+			#{date},
+			#{code},
+			#{status},
+			#{returnNumber},
+			#{returnReason},
+			#{returnCancle},
+			#{returnSign},
+			#{returnDate},
+			#{returnUser},
+			#{processInstanceId},
+			#{sign},
+			#{comId},
+			#{officeId},
+			#{ainvoiceId},
+			#{invoiceId},
+			#{returnId},
+			#{settleFlag}
+		)
+	</insert>
+
+	<update id="update">
+		UPDATE filiale_work_invoice_detail SET
+			<if test="updateBy.id!=null and updateBy.id!=''">
+				update_by = #{updateBy.id},
+			</if>
+			update_date = #{updateDate},
+			remarks = #{remarks},
+			number = #{number},
+			total_money = #{totalMoney},
+			tax = #{tax},
+			tax_money = #{taxMoney},
+			tax_rate = #{taxRate},
+			income_money = #{incomeMoney},
+			state = #{state},
+			back_sign = #{backSign},
+			back_number = #{backNumber},
+			back_code = #{backCode},
+			date = #{date},
+			code = #{code},
+			status = #{status},
+			return_number = #{returnNumber},
+			return_reason = #{returnReason},
+			return_cancle = #{returnCancle},
+			return_sign = #{returnSign},
+			return_date = #{returnDate},
+			return_user = #{returnUser},
+			process_instance_id = #{processInstanceId},
+			sign = #{sign},
+			company_id = #{comId},
+			office_id=#{officeId},
+			ainvoice_id = #{ainvoiceId},
+			invoice_id = #{invoiceId},
+			return_id = #{returnId},
+			settle_flag = #{settleFlag}
+		WHERE id = #{id}
+	</update>
+
+
+	<!--物理删除-->
+	<update id="delete">
+		DELETE FROM filiale_work_invoice_detail
+		WHERE id = #{id}
+	</update>
+
+	<!--逻辑删除-->
+	<update id="deleteByLogic">
+		UPDATE filiale_work_invoice_detail SET
+			del_flag = #{DEL_FLAG_DELETE}
+		WHERE id = #{id}
+	</update>
+
+	<update id="updateProcessInstanceId">
+		UPDATE filiale_work_invoice_detail SET
+		process_instance_id = #{processInstanceId}
+		WHERE id = #{id}
+	</update>
+
+	<update id="updateByCode">
+		UPDATE filiale_work_invoice_detail SET
+		code = #{code},
+		number = #{number}
+		WHERE id = #{id}
+	</update>
+
+	<!-- 获取流程ID -->
+	<select id="getByProcessInstanceId" resultType="FilialeWorkInvoiceDetail">
+		SELECT
+		<include refid="workInvoiceDetailColumns"/>
+		FROM filiale_work_invoice_detail a
+		<include refid="workInvoiceDetailJoins"/>
+		WHERE a.process_instance_id = #{processInstanceId}
+	</select>
+
+	<!-- 根据实体名称和字段名称和字段值获取唯一记录 -->
+	<select id="findUniqueByProperty" resultType="FilialeWorkInvoiceDetail" statementType="STATEMENT">
+		select * FROM filiale_work_invoice_detail  where ${propertyName} = '${value}'
+	</select>
+
+    <select id="findListWithDept" resultType="FilialeWorkInvoiceDetail" >
+        SELECT
+        <include refid="workInvoiceDetailColumn"/>
+        FROM filiale_work_invoice wi
+          LEFT JOIN  filiale_work_invoice_detail a ON wi.id=a.invoice_id
+        LEFT JOIN filiale_work_invoicereturn ir ON ir.invoice_id = a.id
+        <where>
+            <if test="comId!=null and comId!=''">
+                AND wi.company_id = #{comId}
+            </if>
+            <if test="officeId!=null and officeId!=''">
+                AND wi.office_id = #{officeId}
+            </if>
+            <if test="number != null and number != ''">
+                AND a.number = #{number}
+            </if>
+            <if test="state != null and state != ''">
+                AND a.state = #{state}
+            </if>
+            <!--<if test="backSign != null and backSign != ''">-->
+                <!--AND a.back_sign = #{backSign}-->
+            <!--</if>-->
+            <if test="exclusiveIds!=null">
+                AND a.id NOT IN
+                <foreach collection="exclusiveIds" item="exid" index="index"
+                         open="(" close=")" separator=",">
+                    #{exid}
+                </foreach>
+            </if>
+			AND wi.invoice_state = '5'
+--             AND a.total_money+0 > a.income_money+0
+            AND wi.del_flag = #{DEL_FLAG_NORMAL}
+            AND a.del_flag = #{DEL_FLAG_NORMAL}
+            AND ir.id IS NULL
+        </where>
+        <choose>
+            <when test="page !=null and page.orderBy != null and page.orderBy != ''">
+                ORDER BY ${page.orderBy}
+            </when>
+            <otherwise>
+                ORDER BY a.update_date DESC
+            </otherwise>
+        </choose>
+    </select>
+
+    <select id="findPageByCompany" resultType="FilialeWorkInvoiceDetail" >
+        SELECT
+        <include refid="workInvoiceDetailColumn"/>
+        FROM filiale_work_invoice wi
+        LEFT JOIN  filiale_work_invoice_detail a ON wi.id=a.invoice_id
+        LEFT JOIN sys_office o ON o.id = wi.office_id
+        <where>
+            <if test="comId!=null and comId!=''">
+                AND wi.company_id = #{comId} AND wi.ext = '1'
+            </if>
+            <choose>
+                <when test="currentUser.branchOffice!=null and currentUser.branchOffice.id!=null and currentUser.branchOffice.id!=''">
+                    AND find_in_set(#{currentUser.branchOffice.id},o.parent_ids)
+                </when>
+                <otherwise>
+                    AND find_in_set(#{currentUser.company.id},o.parent_ids) AND (o.branch_office IS NULL || o.branch_office ='')
+                </otherwise>
+            </choose>
+            <if test="exclusiveIds!=null">
+                AND a.id NOT IN
+                <foreach collection="exclusiveIds" item="exid" index="index"
+                         open="(" close=")" separator=",">
+                    #{exid}
+                </foreach>
+            </if>
+            AND (a.settle_flag = '0' or a.settle_flag is NULL )
+            AND wi.del_flag = #{DEL_FLAG_NORMAL}
+            AND a.del_flag = #{DEL_FLAG_NORMAL}
+        </where>
+        <choose>
+            <when test="page !=null and page.orderBy != null and page.orderBy != ''">
+                ORDER BY ${page.orderBy}
+            </when>
+            <otherwise>
+                ORDER BY a.update_date DESC
+            </otherwise>
+        </choose>
+    </select>
+
+    <update id="updateSettleFlag">
+        UPDATE filiale_work_invoice_detail SET
+		settle_flag = #{settleFlag}
+		WHERE id = #{id}
+    </update>
+
+	<select id="countByNumber" resultType="int">
+		SELECT count(1) from filiale_work_invoice_detail WHERE  number = #{number}
+	</select>
+
+	<select id="countByNumAndComp" resultType="int">
+		SELECT count(1) from filiale_work_invoice_detail a
+		left join filiale_work_invoice b on a.invoice_id = b.id
+		WHERE  a.number = #{invoiceNum} AND a.company_id = #{comId}
+		and b.invoice_state != 7
+	</select>
+</mapper>

+ 92 - 0
src/main/resources/mappings/modules/filialeWorkInvoice/FilialeWorkInvoiceReceiptDao.xml

@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jeeplus.modules.filialeWorkInvoice.dao.FilialeWorkInvoiceReceiptDao">
+    
+	<sql id="workInvoiceColumns">
+		a.id AS "id",
+		a.create_by AS "createBy.id",
+		a.create_date AS "createDate",
+		a.update_by AS "updateBy.id",
+		a.update_date AS "updateDate",
+		a.remarks AS "remarks",
+		a.del_flag AS "delFlag",
+		a.invoice_id AS "invoiceId",
+		a.company_name AS "companyName",
+		a.money AS "money",
+		date_format(a.receipt_date, '%Y-%m-%d') AS "receiptDate"
+	</sql>
+	
+    
+	<select id="get" resultType="FilialeWorkInvoiceReceipt" >
+		SELECT 
+			<include refid="workInvoiceColumns"/>
+		FROM filiale_work_invoice_receipt a
+		WHERE a.id = #{id}
+	</select>
+	
+	<select id="findList" resultType="FilialeWorkInvoiceReceipt" >
+		SELECT 
+			<include refid="workInvoiceColumns"/>
+		FROM filiale_work_invoice_receipt a
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			and invoice_id = #{invoiceId}
+		</where>
+		ORDER BY a.receipt_date asc
+	</select>
+
+	<select id="queryCount" resultType="int" >
+		SELECT count(1)
+		FROM filiale_work_invoice_receipt a
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			and invoice_id = #{invoiceId}
+		</where>
+	</select>
+	
+	<insert id="insert">
+		INSERT INTO filiale_work_invoice_receipt(
+			id,
+			create_by,
+			create_date,
+			update_by,
+			update_date,
+			remarks,
+			del_flag,
+			invoice_id,
+			money,
+			company_name,
+			receipt_date
+		) VALUES (
+			#{id},
+			#{createBy.id},
+			#{createDate},
+			#{updateBy.id},
+			#{updateDate},
+			#{remarks},
+			#{delFlag},
+			#{invoiceId},
+			#{money},
+			#{companyName},
+			#{receiptDate}
+		)
+	</insert>
+	
+	<update id="update">
+		UPDATE filiale_work_invoice_receipt SET
+			update_by = #{updateBy.id},
+			update_date = #{updateDate},
+			remarks = #{remarks},
+			money = #{money},
+			company_name = #{companyName},
+			receipt_date = #{receiptDate}
+
+		WHERE id = #{id}
+	</update>
+
+	<!--物理删除-->
+	<update id="delete">
+		DELETE FROM filiale_work_invoice_receipt
+		WHERE id = #{id}
+	</update>
+</mapper>

+ 221 - 0
src/main/resources/mappings/modules/filialeWorkInvoice/FilialeWorkInvoiceReturnDao.xml

@@ -0,0 +1,221 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jeeplus.modules.filialeWorkInvoice.dao.FilialeWorkInvoiceReturnDao">
+    
+	<sql id="workInvoiceReturnColumns">
+		a.id AS "id",
+		a.create_by AS "createBy.id",
+		a.create_date AS "createDate",
+		a.update_by AS "updateBy.id",
+		a.update_date AS "updateDate",
+		a.remarks AS "remarks",
+		a.del_flag AS "delFlag",
+		a.process_instance_id AS "processInstanceId",
+		a.office_id AS "officeId",
+		a.company_id AS "companyId",
+		a.status AS "status",
+		a.invoice_id AS "invoiceDetail.id",
+		a.return_number AS "returnNumber",
+		a.reason AS "reason",
+		a.cancle_return AS "cancleReturn",
+		a.return_type AS "returnType",
+		a.code AS "code",
+		a.number AS "number",
+		a.uname AS "uname",
+		w1.number AS "invoiceDetail.number",
+		w1.total_money AS "invoiceDetail.totalMoney",
+		w3.name As "invoiceDetail.workInvoice.client.name",
+		s2.top_company AS "invoiceDetail.workInvoice.office.name",
+		a.return_date AS "returnDate"
+	</sql>
+	
+	<sql id="workInvoiceReturnJoins">
+		left join filiale_work_invoice_detail w1 on w1.id = a.invoice_id
+		left join filiale_work_invoice w2 on w2.id = w1.invoice_id
+		LEFT JOIN work_client_info w3 ON  w3.id = w2.client_id
+		left join sys_office s2 on s2.id = w2.office_id
+		LEFT JOIN sys_office o ON o.id = a.office_id
+		LEFT JOIN sys_office s ON s.id = a.company_id
+		left JOIN sys_user su on su.id = a.create_by
+	</sql>
+	
+    
+	<select id="get" resultType="FilialeWorkInvoiceReturn" >
+		SELECT 
+			<include refid="workInvoiceReturnColumns"/>
+		FROM filiale_work_invoicereturn a
+		<include refid="workInvoiceReturnJoins"/>
+		WHERE a.id = #{id}
+	</select>
+	
+	<select id="findList" resultType="FilialeWorkInvoiceReturn" >
+		SELECT 
+			<include refid="workInvoiceReturnColumns"/>
+		FROM filiale_work_invoicereturn a
+		<include refid="workInvoiceReturnJoins"/>
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			<if test="status != null and status != ''">
+				AND a.status = #{status}
+			</if>
+			<if test="beginContractDate != null and endContractDate != null and beginContractDate != '' and endContractDate != ''">
+				AND a.return_date BETWEEN #{beginContractDate} AND #{endContractDate}
+			</if>
+			<if test="invoiceDetail != null and invoiceDetail.workInvoice!=null and invoiceDetail.workInvoice.client !=null and invoiceDetail.workInvoice.client.name != null and invoiceDetail.workInvoice.client.name != ''">
+				AND w3.name LIKE
+				<if test="dbName == 'oracle'">'%'||#{invoiceDetail.workInvoice.client.name}||'%'</if>
+				<if test="dbName == 'mssql'">'%'+#{invoiceDetail.workInvoice.client.name}+'%'</if>
+				<if test="dbName == 'mysql'">concat('%',#{invoiceDetail.workInvoice.client.name},'%')</if>
+			</if>
+			<if test="invoiceDetail != null and invoiceDetail.workInvoice!=null and invoiceDetail.workInvoice.office !=null and invoiceDetail.workInvoice.office.name != null and invoiceDetail.workInvoice.office.name != ''">
+				AND s2.name LIKE
+				<if test="dbName == 'oracle'">'%'||#{invoiceDetail.workInvoice.office.name}||'%'</if>
+				<if test="dbName == 'mssql'">'%'+#{invoiceDetail.workInvoice.office.name}+'%'</if>
+				<if test="dbName == 'mysql'">concat('%',#{invoiceDetail.workInvoice.office.name},'%')</if>
+			</if>
+			<if test="invoiceDetail != null and invoiceDetail.number != null and invoiceDetail.number != ''">
+				AND w1.number = #{invoiceDetail.number}
+			</if>
+
+			<if test="returnNumber != null and returnNumber != ''">
+				AND a.return_number = #{returnNumber}
+			</if>
+			<if test="number != null and number != ''">
+				AND a.number = #{number}
+			</if>
+			${sqlMap.dsf}
+		</where>
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.create_date DESC
+			</otherwise>
+		</choose>
+	</select>
+	
+	<select id="findAllList" resultType="FilialeWorkInvoiceReturn" >
+		SELECT 
+			<include refid="workInvoiceReturnColumns"/>
+		FROM filiale_work_invoicereturn a
+		<include refid="workInvoiceReturnJoins"/>
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+		</where>		
+		<choose>
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				ORDER BY ${page.orderBy}
+			</when>
+			<otherwise>
+				ORDER BY a.update_date DESC
+			</otherwise>
+		</choose>
+	</select>
+	
+	<insert id="insert">
+		INSERT INTO filiale_work_invoicereturn(
+			id,
+			create_by,
+			create_date,
+			update_by,
+			update_date,
+			remarks,
+			del_flag,
+			process_instance_id,
+			office_id,
+			company_id,
+			status,
+			invoice_id,
+			reason,
+			cancle_return,
+			return_type,
+			code,
+			number,
+			uname,
+			return_number,
+			return_date
+		) VALUES (
+			#{id},
+			#{createBy.id},
+			#{createDate},
+			#{updateBy.id},
+			#{updateDate},
+			#{remarks},
+			#{delFlag},
+			#{processInstanceId},
+			#{officeId},
+			#{companyId},
+			#{status},
+			#{invoiceDetail.id},
+			#{reason},
+			#{cancleReturn},
+			#{returnType},
+			#{code},
+			#{number},
+			#{uname},
+			#{returnNumber},
+			#{returnDate}
+		)
+	</insert>
+	
+	<update id="update">
+		UPDATE filiale_work_invoicereturn SET
+			update_by = #{updateBy.id},
+			update_date = #{updateDate},
+			remarks = #{remarks},
+			process_instance_id = #{processInstanceId},
+			office_id = #{officeId},
+			company_id = #{companyId},
+			status = #{status},
+			invoice_id = #{invoiceDetail.id},
+			return_number = #{returnNumber},
+			reason = #{reason},
+			cancle_return = #{cancleReturn},
+			return_type = #{returnType},
+			code = #{code},
+			number = #{number},
+			uname = #{uname},
+			return_date = #{returnDate}
+		WHERE id = #{id}
+	</update>
+	
+	
+	<!--物理删除-->
+	<update id="delete">
+		DELETE FROM filiale_work_invoicereturn
+		WHERE id = #{id}
+	</update>
+	
+	<!--逻辑删除-->
+	<update id="deleteByLogic">
+		UPDATE filiale_work_invoicereturn SET
+			del_flag = #{DEL_FLAG_DELETE}
+		WHERE id = #{id}
+	</update>
+	
+	
+	<!-- 根据实体名称和字段名称和字段值获取唯一记录 -->
+	<select id="findUniqueByProperty" resultType="FilialeWorkInvoiceReturn" statementType="STATEMENT">
+		select * FROM filiale_work_invoicereturn  where ${propertyName} = '${value}'
+	</select>
+
+	<update id="updateProcessInstanceId">
+		UPDATE filiale_work_invoicereturn SET
+		process_instance_id = #{processInstanceId}
+		WHERE id = #{id}
+	</update>
+
+	<!-- 获取流程ID -->
+	<select id="getByProcessInstanceId" resultType="FilialeWorkInvoiceReturn">
+		SELECT
+		<include refid="workInvoiceReturnColumns"/>
+		FROM filiale_work_invoicereturn a
+		<include refid="workInvoiceReturnJoins"/>
+		WHERE a.process_instance_id = #{processInstanceId}
+	</select>
+
+    <select id="countByNumAndComp" resultType="int">
+        SELECT count(1) from filiale_work_invoicereturn WHERE  number = #{invoiceNum} AND company_id = #{comId}
+    </select>
+</mapper>

+ 4 - 0
src/main/resources/mappings/modules/sys/OfficeDao.xml

@@ -789,4 +789,8 @@
 		</if>
 		ORDER BY a.code
 	</select>
+
+	<select id="getChildrenOfficeById" resultType="Office">
+		SELECT * FROM sys_office a WHERE a.parent_ids like CONCAT('%',#{parentId},'%') and del_flag = 0
+	</select>
 </mapper>

+ 34 - 0
src/main/resources/mappings/modules/sys/UserDao.xml

@@ -473,6 +473,40 @@
 	</select>
 
 	<!-- 根据OfficeId获取用户(树查询用户时用) -->
+	<select id="findUserByOfficeIdAndNameAndOfficeIdList" resultType="User" useCache="true">
+		SELECT
+		a.id, a.name, a.login_name,a.photo
+		,so.name as "office.name",a.office_id as "office.id"
+		FROM sys_user a
+		left join sys_office so on so.id = a.office_id
+		LEFT JOIN work_staff_achives uo ON uo.user_id = a.id
+		LEFT JOIN sys_office o ON o.id = uo.office_id
+		left join work_staff_basic_info wsbi on wsbi.user_id = a.id
+		WHERE a.del_flag = 0
+		and a.login_flag = 1
+		AND o.del_flag = 0
+		AND wsbi.del_flag = 0
+		<if test="user.office != null and user.office.id != null and user.office.id !='' ">
+			AND uo.office_id = #{user.office.id}
+		</if>
+		<if test="user.name != null and user.name !='' ">
+			AND a.name like concat ('%',#{user.name},'%')
+		</if>
+		<if test="user.company != null and user.company.id != null and user.company.id !='' ">
+			AND uo.company_id = #{user.company.id}
+		</if>
+		<if test="officeIdList != null">
+			and a.office_id IN
+			<foreach collection="officeIdList" index="index" item="item"
+					 open="(" separator="," close=")">
+				#{item}
+			</foreach>
+		</if>
+		AND uo.status IN ('试用','正式','劳务')
+		ORDER BY a.name
+	</select>
+
+	<!-- 根据OfficeId获取用户(树查询用户时用) -->
 	<select id="findUserByOfficeIdAndNameOnReported" resultType="User" useCache="true">
 		SELECT
 		a.id, a.name, a.login_name,a.photo

+ 10 - 2
src/main/resources/mappings/modules/workinvoice/WorkInvoiceDao.xml

@@ -66,7 +66,8 @@
 		a.new_drawer_id as "newDrawerId",
 		a.new_drawer as "newDrawer",
 		a.actual_drawer_email_address as "actualDrawerEmailAddress",
-		a.actual_drawer_id as "actualDrawerId"
+		a.actual_drawer_id as "actualDrawerId",
+		a.electronic_invoice_flag as "electronicInvoiceFlag"
 	</sql>
 
 	<sql id="newWorkInvoiceColumns">
@@ -129,7 +130,8 @@
 		a.new_drawer_id as "newDrawerId",
 		a.new_drawer as "newDrawer",
 		a.actual_drawer_email_address as "actualDrawerEmailAddress",
-		a.actual_drawer_id as "actualDrawerId"
+		a.actual_drawer_id as "actualDrawerId",
+		a.electronic_invoice_flag as "electronicInvoiceFlag"
 	</sql>
 
 	<sql id="workInvoiceJoins">
@@ -2641,4 +2643,10 @@
 	<select id="getBankNameByNameOrId" resultType="java.lang.String">
 		select our_bank from work_client_bank where our_bank = #{bankName} or id = #{bankName} limit 1
 	</select>
+
+	<update id="updateElectronicInvoiceFlag">
+		update work_invoice SET
+			electronic_invoice_flag = #{electronicInvoiceFlag}
+		WHERE id = #{id}
+	</update>
 </mapper>

+ 47 - 11
src/main/resources/mappings/modules/workprojectnotify/WorkProjectNotifyDao.xml

@@ -5,6 +5,7 @@
 	<sql id="workProjectNotifyColumns">
 		a.id AS "id",
 		a.create_by AS "createBy.id",
+		a.create_by AS "createById",
 		a.create_date AS "createDate",
 		a.update_by AS "updateBy.id",
 		a.update_date AS "updateDate",
@@ -85,6 +86,7 @@
 	</select>
 
 	<select id="findList" resultType="WorkProjectNotify" >
+	select * from (
 		SELECT
 		<include refid="workProjectNotifyColumns"/>
 		,a.wap_begin_date AS "wapCreateDate"
@@ -150,9 +152,6 @@
 				AND a.wap_begin_date &lt;= #{endBeginDate}
 			</if>
 
-			<if test="(createUserId != null and createUserId != '') or (createUserName != null and createUserName != '')">
-				AND (a.create_by = #{createUserId} or su.name like concat('%',#{createUserName},'%'))
-			</if>
 			<choose>
 				<when test="status !=null and status != '' and status == '-1'">
 				</when>
@@ -188,6 +187,15 @@
 				,a.create_date DESC,a.id
 			</otherwise>-->
 		</choose>
+	) z
+
+	LEFT JOIN sys_user zu ON zu.id = z.initiator
+	<where>
+		<if test="(createUserId != null and createUserId != '') or (createUserName != null and createUserName != '')">
+			AND (z.createById = #{createUserId} or zu.name like concat('%',#{createUserName},'%'))
+		</if>
+	</where>
+
 	</select>
 
 	<select id="notifyFindList" resultType="WorkProjectNotify" >
@@ -304,10 +312,25 @@
 	</select>
 
 	<select id="queryCount" resultType="Integer">
-		SELECT count(1)
+		select count(*) from (
+		SELECT
+		<include refid="workProjectNotifyColumns"/>
+		,a.wap_begin_date AS "wapCreateDate"
+		,(select user.id from work_activity_process wap left join sys_user user on wap.create_by = user.id where wap.count != 0 and  wap.process_instance_id in (select waps.process_instance_id
+		FROM work_project_notify waps
+		WHERE waps.notify_id = a.notify_id and waps.process_instance_id is not null order by waps.notify_id desc
+		)  and wap.is_approval = '0'  order by wap.create_date asc, wap.count asc limit 1) as 'initiator'
+		/*,(select p.user_id from work_activity_process wap
+		left join work_activity_process_user p on wap.process_instance_id = p.process_id and p.count = wap.count
+		left join sys_user u on u.id = p.user_id
+		where (case when a.process_instance_id is null then wap.process_instance_id = (select waps.process_instance_id
+		FROM work_project_notify waps
+		WHERE waps.notify_id = a.notify_id and waps.process_instance_id is not null order by waps.notify_id desc
+		LIMIT 1) else wap.process_instance_id = a.process_instance_id end) and wap.is_approval = '0'  order by wap.count asc limit 1) as 'auditor'*/
 		FROM work_project_notify a
+		left join sys_user su on a.create_by = su.id
 		LEFT JOIN sys_user u ON u.id = a.create_by
-		LEFT JOIN sys_user su ON su.id = a.create_by
+		<include refid="workProjectNotifyJoins"/>
 		<where>
 			a.del_flag = #{DEL_FLAG_NORMAL}
 			<if test="title != null and title != ''">
@@ -355,9 +378,6 @@
 				AND a.wap_begin_date &lt;= #{endBeginDate}
 			</if>
 
-			<if test="(createUserId != null and createUserId != '') or (createUserName != null and createUserName != '')">
-				AND (a.create_by = #{createUserId} or su.name like concat('%',#{createUserName},'%'))
-			</if>
 			<choose>
 				<when test="status !=null and status != '' and status == '-1'">
 				</when>
@@ -377,14 +397,30 @@
 				</otherwise>
 			</choose>
 		</where>
+
+		ORDER BY a.update_date DESC, a.exigency desc
 		<choose>
-			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+			<!--<when test="page !=null and page.orderBy != null and page.orderBy != ''">
 				ORDER BY ${page.orderBy}
 			</when>
 			<otherwise>
-				ORDER BY a.create_date DESC
-			</otherwise>
+				ORDER BY a.create_date DESC,a.id
+			</otherwise>-->
+			<when test="page !=null and page.orderBy != null and page.orderBy != ''">
+				,${page.orderBy}
+			</when>
+			<!--<otherwise>
+				,a.create_date DESC,a.id
+			</otherwise>-->
 		</choose>
+		) z
+
+		LEFT JOIN sys_user zu ON zu.id = z.initiator
+		<where>
+			<if test="(createUserId != null and createUserId != '') or (createUserName != null and createUserName != '')">
+				AND (z.createById = #{createUserId} or zu.name like concat('%',#{createUserName},'%'))
+			</if>
+		</where>
 	</select>
 
 	<select id="findListByAPP" resultType="WorkProjectNotify" >

+ 500 - 0
src/main/webapp/webpage/modules/filialeWorkInvoice/filialeConditionWorkInvoiceAudit.jsp

@@ -0,0 +1,500 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>发票审批</title>
+	<meta name="decorator" content="default"/>
+	<style>
+		#workInvoiceProjectRelationList td{
+			padding-left: 0px;
+			padding-right: 0px;
+		}
+	</style>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+			  var ss= document.getElementById("iframe").contentWindow.document.getElementById("opinion").value
+			  $("#opinion").val(ss);
+              if(obj == 1) {
+                  $("#flag").val("yes");
+              }else {
+                  $("#flag").val("no");
+              }
+
+			  $("#inputForm").submit();
+			  return true;
+		  }
+		  return false;
+		}
+		$(document).ready(function() {
+			$("#name").focus();
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+
+		});
+		function addRow1(list, idx, tpl, row){
+			var idx1 = $("#workInvoiceProjectRelationList tr").length;
+			if(list == '#workInvoiceProjectRelationList'){
+				bornTemplete1(list, idx, tpl, row, idx1);
+			}
+		}
+		function bornTemplete1(list, idx, tpl, row, idx1){
+			$(list).append(Mustache.render(tpl, {
+				idx: idx, delBtn: true, row: row,
+				order:idx1 + 1
+			}));
+			$(list+idx).find("select").each(function(){
+				$(this).val($(this).attr("data-value"));
+			});
+			$(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+				var ss = $(this).attr("data-value").split(',');
+				for (var i=0; i<ss.length; i++){
+					if($(this).val() == ss[i]){
+						$(this).attr("checked","checked");
+					}
+				}
+			});
+		}
+		function f1(row) {
+			// window.parent.document.getElementById('opinion').value = row;
+			$("#opinion").val(row)
+		}
+		function openDialogre(title,url,width,height,target,buttons) {
+			if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {//如果是移动端,就使用自适应大小弹窗
+				width = 'auto';
+				height = 'auto';
+			} else {//如果是PC端,根据用户设置的width和height显示。
+			}
+			var split = buttons.split(",");
+			top.layer.open({
+				type: 2,
+				area: [width, height],
+				title: title,
+				maxmin: true, //开启最大化最小化按钮
+				skin: 'three-btns',
+				content: url,
+				btn: split,
+				btn1: function(index, layero){
+					top.layer.close(index)
+					document.getElementById('iframe').contentWindow.location.reload();
+				}
+			});
+		}
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+	<form:form id="inputForm" modelAttribute="workInvoice" action="${ctx}/filialeWorkinvoice/filialeWorkinvoice/cancellationSaveAudit" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+		<form:hidden path="home"/>
+		<form:hidden path="act.taskId"/>
+		<form:hidden path="act.taskName"/>
+		<form:hidden path="act.taskDefKey"/>
+		<form:hidden path="act.procInsId"/>
+		<form:hidden path="act.procDefId"/>
+		<form:hidden id="flag" path="act.flag"/>
+		<c:set var="status" value="${workInvoice.act.status}" />
+		<input type="hidden" id="opinion" name="act.comment" value="" maxlength="255">
+
+		<div class="form-group layui-row first lw14">
+			<div class="form-group-label"><h2>基本信息</h2></div>
+			<div class="layui-table-body layui-item layui-col-xs12 form-table-container"  style="padding:0px">
+				<table id="contentTables" class="table table-bordered table-condensed can-edit no-bottom-margin details">
+					<thead>
+					<tr>
+						<th width="200px"><font color="red">*</font>项目名称</th>
+						<th width="200px">合同名称</th>
+						<th width="200px">项目编号</th>
+						<th width="200px">委托方</th>
+						<th width="200px">报告号</th>
+					</tr>
+					</thead>
+					<tbody id="workInvoiceProjectRelationList">
+					</tbody>
+				</table>
+				<script type="text/template" id="workInvoiceProjectRelationListTpl">//<!--
+                    <tr id="workInvoiceProjectRelationList{{idx}}">
+                        <td class="hide">
+                            <input id="workInvoiceProjectRelationList{{idx}}_invoiceId" name="workInvoiceProjectRelationList[{{idx}}].invoiceId" type="hidden" value="{{row.invoiceId}}"/>
+							<input id="workInvoiceProjectRelationList{{idx}}_projectId" name="workInvoiceProjectRelationList[{{idx}}].projectId" type="hidden" value="{{row.projectId}}"/>
+							<input id="workInvoiceProjectRelationList{{idx}}_delFlag" name="workInvoiceProjectRelationList[{{idx}}].delFlag" type="hidden" value="0"/>
+                        </td>
+                        <td>
+							<input id="workInvoiceProjectRelationList{{idx}}_projectName"   type="text" value="{{row.projectName}}" readonly="readonly"  class="form-control"/>
+                        </td>
+                        <td>
+							<input id="workInvoiceProjectRelationList{{idx}}_workContractName"   type="text" value="{{row.workContractName}}" readonly="readonly"  class="form-control"/>
+                        </td>
+                        <td style="text-align:center;">
+							<input id="workInvoiceProjectRelationList{{idx}}_projectNum"  type="text" value="{{row.projectNum}}" readonly="readonly"  class="form-control"/>
+                        </td>
+                        <td>
+							<input id="workInvoiceProjectRelationList{{idx}}_clientName"  type="text" value="{{row.clientName}}" readonly="readonly"  class="form-control"/>
+                        </td>
+                        <td>
+							<input id="workInvoiceProjectRelationList{{idx}}_reportDataNum"  type="text" value="{{row.reportDataNum}}" readonly="readonly"  class="form-control"/>
+                        </td>
+                    </tr>//-->
+				</script>
+				<script type="text/javascript">
+					var workInvoiceProjectRelationListRowIdx = 0, workInvoiceProjectRelationListTpl = $("#workInvoiceProjectRelationListTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+					/*if($("#id").val()){
+                        workInvoiceProjectRelationListRowIdx = ${fn:length(workInvoice.workInvoiceProjectRelationList)};
+						}*/
+					$(document).ready(function() {
+						var data = ${fns:toJson(workInvoice.workInvoiceProjectRelationList)};
+						for (var i=0; i<data.length; i++){
+							addRow1('#workInvoiceProjectRelationList', workInvoiceProjectRelationListRowIdx, workInvoiceProjectRelationListTpl, data[i])
+							workInvoiceProjectRelationListRowIdx = workInvoiceProjectRelationListRowIdx + 1;
+						}
+					});
+				</script>
+			</div>
+		</div>
+		<div class="form-group layui-row first lw14">
+			<div class="form-group-label"><h2>发票详情</h2></div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">上级/本公司开票:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.ext eq '0'}">本公司开票	</c:when><c:when test="${workInvoice.ext eq '1'}">上级公司开票</c:when></c:choose>"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">发票申请编号:</label>
+				<div class="layui-input-block">
+					<div class="input-group">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.number}"/>
+					</div>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">发票类型:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.invoiceType eq '1'}">专票</c:when><c:when test="${workInvoice.invoiceType eq '2'}">普票</c:when></c:choose>"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">实际开票单位:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.client.name}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">纳税人识别号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true" id="orUnicode"   class="form-control layui-input" value="${workInvoice.orUnicode}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">地址:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.address}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">电话:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.telephone}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">开户银行:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.bank}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">银行账号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.bankNumber}"/>
+				</div>
+			</div>
+
+			<div class="layui-item layui-col-sm6 count2">
+				<label class="layui-form-label">姓名:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.newDrawerName}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>开票金额(元):</label>
+				<div class="layui-input-block">
+					<input id="kaipiao" htmlEscape="false" readonly="true"   class="form-control layui-input" value="<fmt:formatNumber value="${workInvoice.money}" pattern="##00.00"/>"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">开票内容要求:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.content}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">开票人:</label>
+				<div class="layui-input-block">
+					<form:input   path="drawerName" htmlEscape="false" readonly="true"  class="form-control layui-input"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">开票时间:</label>
+				<div class="layui-input-block">
+					<input class="form-control layer-date laydate-icon layui-input laydate-icondate" readonly="true"  id="invoiceDate" name="invoiceDate" value="<fmt:formatDate
+							value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>">
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">领票时间:</label>
+				<div class="layui-input-block">
+					<input placeholder="请选择领票时间" class="form-control layer-date laydate-icon layui-input laydate-icondate" readonly="true"  id="takeDate" name="takeDate" value="<fmt:formatDate
+							value="${workInvoice.takeDate}" pattern="yyyy-MM-dd"/>">
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">实际开票人:</label>
+				<div class="layui-input-block  with-icon">
+					<input type="text"  readonly="true" value="${workInvoice.actualDrawerName}"  class="form-control layui-input" style="background-color: #f1f1f1" >
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">接收邮箱:</label>
+				<div class="layui-input-block  with-icon">
+					<input type="text"  readonly="true" value="${workInvoice.actualDrawerEmailAddress}"  class="form-control layui-input" style="background-color: #f1f1f1" >
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">对账人:</label>
+				<div class="layui-input-block  with-icon">
+					<input type="text"  readonly="true" value="${workInvoice.accountCheckingUserName}"  class="form-control layui-input" style="background-color: #f1f1f1" >
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">对账地区:</label>
+				<div class="layui-input-block  with-icon">
+					<input type="text"  readonly="true" value="${workInvoice.area.name}"  class="form-control layui-input" style="background-color: #f1f1f1" >
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm12 with-textarea">
+				<label class="layui-form-label double-line">备注:</label>
+				<div class="layui-input-block">
+					<form:textarea path="remarks" readonly="true" htmlEscape="false" rows="4" class="form-control" style="background-color: #f1f1f1" />
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm12">
+				<label class="layui-form-label">作废原因:</label>
+				<div class="layui-input-block">
+					<form:textarea path="cancellationRemark" htmlEscape="false" rows="4" readonly="true"  maxlength="255" style="background-color: #f1f1f1"  class="form-control"/>
+				</div>
+			</div>
+		</div>
+		<div class="form-group layui-row">
+			<div class="form-group-label"><h2>附件信息</h2></div>
+			<span id="attachment_title"></span>
+			<div class="layui-item layui-col-xs12" style="padding:0 16px;">
+				<table id="upTable" class="table table-bordered table-condensed details">
+					<thead>
+					<tr>
+							<%-- <th>序号</th>--%>
+						<th>文件预览</th>
+						<th>上传人</th>
+						<th>上传时间</th>
+						<th width="200px">操作</th>
+					</tr>
+					</thead>
+					<tbody id="file_attachment">
+					<c:forEach items="${workInvoice.workAttachments}" var = "workClientAttachment" varStatus="status">
+						<tr>
+								<%-- <td>${status.index + 1}</td>--%>
+							<c:choose>
+								<c:when test="${workInvoice.uploadMode == 2}">
+									<c:choose>
+										<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+											<td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+										</c:when>
+										<c:otherwise>
+											<c:choose>
+												<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+													<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',1)">${workClientAttachment.attachmentName}</a></td>
+												</c:when>
+												<c:otherwise>
+													<c:choose>
+														<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+															<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+														</c:when>
+														<c:otherwise>
+															<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+														</c:otherwise>
+													</c:choose>
+												</c:otherwise>
+											</c:choose>
+										</c:otherwise>
+									</c:choose>
+								</c:when>
+								<c:otherwise>
+									<c:choose>
+										<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+											<td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}"></td>
+										</c:when>
+										<c:otherwise>
+											<c:choose>
+												<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+													<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',1)">${workClientAttachment.attachmentName}</a></td>
+												</c:when>
+												<c:otherwise>
+													<c:choose>
+														<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+															<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',3)">${workClientAttachment.attachmentName}</a></td>
+														</c:when>
+														<c:otherwise>
+															<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',2)">${workClientAttachment.attachmentName}</a></td>
+														</c:otherwise>
+													</c:choose>
+												</c:otherwise>
+											</c:choose>
+										</c:otherwise>
+									</c:choose>
+								</c:otherwise>
+							</c:choose>
+							<td>${workClientAttachment.createBy.name}</td>
+							<td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
+							<td class="op-td">
+								<div class="op-btn-box" >
+										<%--附件下载删除--%>
+									<c:choose>
+										<c:when test="${workInvoice.uploadMode == 2}">
+											<c:choose>
+												<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+													<a href="${workClientAttachment.temporaryUrl}" target="_blank" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+												</c:when>
+												<c:otherwise>
+													<a href="${workClientAttachment.temporaryUrl}" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+												</c:otherwise>
+											</c:choose>
+										</c:when>
+										<c:otherwise>
+											<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent('${workClientAttachment.url}');" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+										</c:otherwise>
+									</c:choose>
+									<c:if test="${workClientAttachment.collectFlag != 1}">
+										<a href="javascript:void(0)" onclick="collectingAccessory(this,'${ctx}/projectAccessory/projectAccessory/saveCollectAccessory','${workClientAttachment.url}','${workClientAttachment.createBy.id}','${workClientAttachment.fileSize}')" class="op-btn op-btn-delete" style="background-color: #FFB800"><i class="layui-icon layui-icon-rate"></i>&nbsp;收藏</a>
+									</c:if>
+
+
+								</div>
+							</td>
+						</tr>
+					</c:forEach>
+					</tbody>
+				</table>
+			</div>
+		</div>
+		<div class="form-group layui-row">
+			<div class="form-group-label"><h2>发票明细</h2></div>
+			<div class="layui-item layui-col-xs12 form-table-container">
+				<table id="contentTable" class="table table-bordered table-condensed details">
+					<thead>
+					<tr>
+						<th>发票代码</th>
+						<th>发票号</th>
+						<th>价税合计</th>
+						<th>税率</th>
+						<th>金额</th>
+						<th>税额</th>
+						<%--<th>累计登记金额</th>--%>
+						<th>发票状态</th><%--正常--%>
+						<th>被退标记</th>
+						<th>被退票号</th>
+						<th>开票日期</th>
+					</tr>
+					</thead>
+					<tbody id="workAccountList">
+					<c:if test="${not empty workInvoice.workAccountList}">
+						<c:forEach items="${workInvoice.workAccountList}" var="workAccount" varStatus="index">
+							<tr id="workAccountList${index.index}">
+								<td title="${workAccount.code}">
+										${workAccount.code}
+								</td>
+								<td title="${workAccount.number}">
+										${workAccount.number}
+								</td>
+
+								<td title="<fmt:formatNumber value="${workAccount.totalMoney}" pattern="##00.00"/>">
+									<fmt:formatNumber value="${workAccount.totalMoney}" pattern="##00.00"/>
+								</td>
+								<td title="${workAccount.tax}">
+										${workAccount.tax}
+								</td>
+								<td title="<fmt:formatNumber value="${workAccount.taxMoney}" pattern="##00.00"/>">
+									<fmt:formatNumber value="${workAccount.taxMoney}" pattern="##00.00"/>
+								</td>
+								<td title="<fmt:formatNumber value="${workAccount.taxRate}" pattern="##00.00"/>">
+									<fmt:formatNumber value="${workAccount.taxRate}" pattern="##00.00"/>
+								</td>
+								<%--<td title="<fmt:formatNumber value="${workAccount.incomeMoney}" pattern="##00.00"/>">
+									<fmt:formatNumber value="${workAccount.incomeMoney}" pattern="##00.00"/>
+								</td>--%>
+								<td title="${workAccount.state}">
+										${workAccount.state}
+								</td>
+								<td title="${workAccount.backSign}">
+										${workAccount.backSign}
+								</td>
+								<td title="${workAccount.backNumber}">
+										${workAccount.backNumber}
+								</td>
+								<td>
+										<%--<fmt:formatDate value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd HH:mm:ss"/>--%>
+								</td>
+							</tr>
+						</c:forEach>
+					</c:if>
+					</tbody>
+				</table>
+			</div>
+		</div>
+		<div class="form-group-label">
+			<div style="float: right"> <a href="javascript:void(0)" style='background-color: #FFB800' onclick="openDialogre('个人模板列表', '${ctx}/auditTemplate/auditTemplate/templateList?identification=${identification}&name=${identificationName}','80%', '70%','','关闭')" class="nav-btn layui-btn layui-btn-sm" ><i class="fa fa-file-excel-o"></i> 审核意见模板列表</a></div>
+			<h2>审批意见</h2>
+		</div>
+		<iframe id="iframe" src="${ctx}/auditTemplate/auditTemplate/iframeView?identification=${identification}" name="listresult" frameborder="0" align="left" width="100%" height="300" scrolling="value"></iframe>
+		<div class="form-group layui-row">
+			<div class="form-group-label"><h2>${projectNotifyType}审批流程</h2></div>
+			<div class="layui-item layui-col-xs12 form-table-container" >
+				<act:flowChart procInsId="${workInvoice.act.procInsId}"/>
+				<act:histoicFlow procInsId="${workInvoice.act.procInsId}" />
+			</div>
+		</div>
+
+		<div class="form-group layui-row page-end"></div>
+	</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 670 - 0
src/main/webapp/webpage/modules/filialeWorkInvoice/filialeConditionWorkInvoiceForm.jsp

@@ -0,0 +1,670 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>发票管理</title>
+	<meta name="decorator" content="default"/>
+	<%--<script src="${ctxStatic}/layer-v2.3/laydate/laydate.js"></script>--%>
+	<style>
+		#contractTypeDoc-error{
+			top:80px;
+			left:0;
+		}
+		#workInvoiceProjectRelationList tr td{
+			padding-left: 0px;
+			padding-right: 0px;
+		}
+	</style>
+	<script type="text/javascript">
+        var validateForm;
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            //debugger
+            if(validateForm.form()){
+                $("#inputForm").submit();
+                return true;
+            }else {
+				parent.layer.msg("信息未填写完整!", {icon: 5});
+			}
+            return false;
+        }
+        $(document).ready(function() {
+            /*$('#money').keyup(function(){
+                var c=$(this);
+                if(/[^\d]/.test(c.val())){//替换非数字字符
+                    var temp_amount=c.val().replace(/[^\d]/g,'');
+                    $(this).val(temp_amount);
+                }
+            })*/
+            jQuery.validator.addMethod("isUscCode", function(value, element) {
+                if (this.optional(element)){
+                    return true;
+                }
+                var uscCode = /^((\w{15})|(\w{18})|(\w{20}))$/;
+                return uscCode.test(value);
+            }, "请填写正确的纳税人识别号");
+
+            /* $("input[name='ext']").on('ifChecked', function(event){
+                 var radioVal = $(this).val();
+                 if(radioVal == 0){
+                     $("#td1").removeClass("hide");
+                     $("#td2").addClass("hide");
+                     $("#tr1").show()
+                 }else{
+                     $("#td1").addClass("hide");
+                     $("#td2").removeClass("hide");
+                     $("#tr1").hide()
+                 }
+             });*/
+            if("${workInvoice.ext}" == "1"){
+                $("#ext1").iCheck('check')
+            }else{
+                $("#ext").iCheck('check')
+            }
+            if("${workInvoice.invoiceType}" == "1"){
+                $("#invoiceType1").iCheck('check');
+                $(".invoicetype").show();
+            }else{
+                $("#invoiceType").iCheck('check');
+                $(".invoicetype").hide();
+            }
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+
+            $("input[name='invoiceType']").on('ifChecked', function(event){
+                var radioVal = $(this).val();
+                //专票必填
+                if(radioVal == 1){
+                    $(".invoicetype").show();
+                    $("#bank").attr("class","form-control required layui-input");
+                    $("#bankNumber").attr("class","form-control number required layui-input");
+                    $("#orUnicode").attr("class","form-control isUscCode required layui-input");
+                    $("#address").attr("class","form-control required layui-input");
+                    $("#telephone").attr("class","form-control isTel required layui-input");
+                }else if(radioVal == 2){
+                    $(".invoicetype").hide();
+                    $("#bank").attr("class","form-control layui-input");
+                    $("#bankNumber").attr("class","form-control number layui-input");
+                    $("#orUnicode").attr("class","form-control isUscCode layui-input");
+                    $("#address").attr("class","form-control layui-input");
+                    $("#telephone").attr("class","form-control isTel layui-input");
+                }
+            });
+            /*--------------*/
+
+        });
+        function setValuee(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/filialeWorkinvoice/filialeWorkinvoice/getWorkClientInfo',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    // $("#bank").val(d.bank);
+					if(!'${workInvoice.orUnicode}'){
+						$("#orUnicode").val(d.orUnicode);
+					}
+					if(!'${workInvoice.telephone}'){
+						$("#telephone").val(d.telephone);
+					}
+					if(!'${workInvoice.address}'){
+						$("#address").val(d.registerAddress);
+					}
+                    $("#ids").val(d.ids);
+                }
+            })
+        }
+        function setDp(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/filialeWorkinvoice/filialeWorkinvoice/getUserDp',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#dp").val(d.dp);
+                }
+            })
+        }
+        function setPNumber(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/filialeWorkinvoice/filialeWorkinvoice/getPNumber',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#pNumber").val(d.pNumber);
+                    $("#cInfoName").val(d.cInfoName);
+                    $("#cName").val(d.cName);
+                    $("#officeName").val(d.officeName);
+                    $("#officeId").val(d.officeId);
+                }
+            })
+        }
+
+        function addRow(list, idx, tpl, row){
+            var idx1 = $("#workAccountList tr").length;
+            if(list == '#workAccountList' && idx1 < 100){
+                bornTemplete(list, idx, tpl, row, idx1);
+            }
+        }
+        function bornTemplete(list, idx, tpl, row, idx1){
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row,
+                order:idx1 + 1
+            }));
+            $(list+idx).find("select").each(function(){
+                $(this).val($(this).attr("data-value"));
+            });
+            $(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+                var ss = $(this).attr("data-value").split(',');
+                for (var i=0; i<ss.length; i++){
+                    if($(this).val() == ss[i]){
+                        $(this).attr("checked","checked");
+                    }
+                }
+            });
+        }
+        function provinceForShort(province){
+            if(province == "北京市")
+                return "京";
+            else if(province == "天津市")
+                return "津";
+            else if(province == "重庆市")
+                return "渝";
+            else if(province == "上海市")
+                return "沪";
+            else if(province == "河北省")
+                return "冀";
+            else if(province == "山西省")
+                return "晋";
+            else if(province == "辽宁省")
+                return "辽";
+            else if(province == "吉林省")
+                return "吉";
+            else if(province == "黑龙江省")
+                return "黑";
+            else if(province == "江苏省")
+                return "苏";
+            else if(province == "浙江省")
+                return "浙";
+            else if(province == "安徽省")
+                return "皖";
+            else if(province == "福建省")
+                return "闽";
+            else if(province == "江西省")
+                return "赣";
+            else if(province == "山东省")
+                return "鲁";
+            else if(province == "河南省")
+                return "豫";
+            else if(province == "湖北省")
+                return "鄂";
+            else if(province == "湖南省")
+                return "湘";
+            else if(province == "广东省")
+                return "粤";
+            else if(province == "海南省")
+                return "琼";
+            else if(province == "四川省")
+                return "川/蜀";
+            else if(province == "贵州省")
+                return "黔/贵";
+            else if(province == "云南省")
+                return "云/滇";
+            else if(province == "陕西省")
+                return "陕/秦";
+            else if(province == "甘肃省")
+                return "甘/陇";
+            else if(province == "青海省")
+                return "青";
+            else if(province == "台湾省")
+                return "台";
+            else if(province == "内蒙古自治区")
+                return "内蒙古";
+            else if(province == "广西壮族自治区")
+                return "桂";
+            else if(province == "宁夏回族自治区")
+                return "宁";
+            else if(province == "新疆维吾尔自治区 ")
+                return "新";
+            else if(province == "西藏自治区")
+                return "藏";
+            else if(province == "香港特别行政区")
+                return "港";
+            else if(province == "澳门特别行政区")
+                return "澳";
+        }
+
+        function setVs(obj){
+            var a = $(obj).attr("id");
+            var b = a.replace('allPrice','proportion');
+            var value = obj.value;
+            var p = $("#price").val() || 0;
+            if(!p || p == 0){
+                parent.layer.msg("请先填写造价指标,且不能为零",{icon:5});
+                return;
+            }
+            var num = value/p ;
+            if(!/^\d+(\.\d{1,2})?$/.test( value )){
+                parent.layer.msg("合价必须输入数字",{icon:5});
+            }else{
+                $("#" +  b ).val(parseFloat(num.toFixed(2)));
+            }
+        }
+        function setTaxMoney(obj){
+            var a = $(obj).attr("id");
+            var b = a.replace('tax','taxMoney');
+            var t = a.replace('tax','totalMoney');
+            var tr = a.replace('tax','taxRate');
+            var value = obj.value || 0;
+            console.log("-value----"+value);
+            var tax = 1 + value/100;
+            console.log("-tax----"+tax);
+            var p = $("#" +  t ).val() || 0;//获取价税合计
+            console.log("-----"+p);
+            if(!p || p == 0){
+                parent.layer.msg("请先填写价税合计,且不能为零",{icon:5});
+                return;
+            }
+            var num = p/tax || 0;
+            console.log("-----"+num);
+            if(!/^\d+(\.\d{1,2})?$/.test( tax )){
+                parent.layer.msg("税率必须输入数字",{icon:5});
+            }else{
+                $("#" +  b ).val(parseFloat(num.toFixed(2)));
+                var taxRate = p - num;
+                $("#" +  tr ).val(parseFloat(taxRate.toFixed(2)));
+            }
+        }
+        function setV(obj){
+            var a =  $(obj).attr("id");
+            var c = "京";
+            var date=new Date;
+            var year=date.getFullYear();
+            var month=date.getMonth()+1;
+            month =(month<10 ? "0"+month:month);
+            var mydate = (year.toString()+month.toString());
+            var timestamp="["+mydate+"]";//获取固定格式年月
+            var number = c+timestamp;
+            $("#" +  a ).val(number);
+        }
+		function addRow1(list, idx, tpl, row){
+			var idx1 = $("#workInvoiceProjectRelationList tr").length;
+			if(list == '#workInvoiceProjectRelationList'){
+				bornTemplete1(list, idx, tpl, row, idx1);
+			}
+		}
+		function bornTemplete1(list, idx, tpl, row, idx1){
+			$(list).append(Mustache.render(tpl, {
+				idx: idx, delBtn: true, row: row,
+				order:idx1 + 1
+			}));
+			$(list+idx).find("select").each(function(){
+				$(this).val($(this).attr("data-value"));
+			});
+			$(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+				var ss = $(this).attr("data-value").split(',');
+				for (var i=0; i<ss.length; i++){
+					if($(this).val() == ss[i]){
+						$(this).attr("checked","checked");
+					}
+				}
+			});
+		}
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workInvoice" action="${ctx}/filialeWorkinvoice/filialeWorkinvoice/cancellationAudit" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<form:hidden path="invoiceDate"/>
+			<form:hidden path="province" id="province"/>
+
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>基本信息</h2></div>
+				<div class="layui-table-body layui-item layui-col-xs12 form-table-container"  style="padding:0px">
+					<table id="contentTables" class="table table-bordered table-condensed can-edit no-bottom-margin details">
+						<thead>
+						<tr>
+							<th width="200px"><font color="red">*</font>项目名称</th>
+							<th width="200px">合同名称</th>
+							<th width="200px">项目编号</th>
+							<th width="200px">委托方</th>
+							<th width="200px">报告号</th>
+						</tr>
+						</thead>
+						<tbody id="workInvoiceProjectRelationList">
+						</tbody>
+					</table>
+					<script type="text/template" id="workInvoiceProjectRelationListTpl">//<!--
+                    <tr id="workInvoiceProjectRelationList{{idx}}">
+                        <td class="hide">
+                            <input id="workInvoiceProjectRelationList{{idx}}_invoiceId" name="workInvoiceProjectRelationList[{{idx}}].invoiceId" type="hidden" value="{{row.invoiceId}}"/>
+							<input id="workInvoiceProjectRelationList{{idx}}_projectId" name="workInvoiceProjectRelationList[{{idx}}].projectId" type="hidden" value="{{row.projectId}}"/>
+							<input id="workInvoiceProjectRelationList{{idx}}_delFlag" name="workInvoiceProjectRelationList[{{idx}}].delFlag" type="hidden" value="0"/>
+                        </td>
+                        <td>
+							<input id="workInvoiceProjectRelationList{{idx}}_projectName"   type="text" value="{{row.projectName}}" readonly="readonly"  class="form-control"/>
+                        </td>
+                        <td>
+							<input id="workInvoiceProjectRelationList{{idx}}_workContractName"   type="text" value="{{row.workContractName}}" readonly="readonly"  class="form-control"/>
+                        </td>
+                        <td style="text-align:center;">
+							<input id="workInvoiceProjectRelationList{{idx}}_projectNum"  type="text" value="{{row.projectNum}}" readonly="readonly"  class="form-control"/>
+                        </td>
+                        <td>
+							<input id="workInvoiceProjectRelationList{{idx}}_clientName"  type="text" value="{{row.clientName}}" readonly="readonly"  class="form-control"/>
+                        </td>
+                        <td>
+							<input id="workInvoiceProjectRelationList{{idx}}_reportDataNum"  type="text" value="{{row.reportDataNum}}" readonly="readonly"  class="form-control"/>
+                        </td>
+                    </tr>//-->
+					</script>
+					<script type="text/javascript">
+						var workInvoiceProjectRelationListRowIdx = 0, workInvoiceProjectRelationListTpl = $("#workInvoiceProjectRelationListTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+						/*if($("#id").val()){
+                            workInvoiceProjectRelationListRowIdx = ${fn:length(workInvoice.workInvoiceProjectRelationList)};
+						}*/
+						$(document).ready(function() {
+							var data = ${fns:toJson(workInvoice.workInvoiceProjectRelationList)};
+							for (var i=0; i<data.length; i++){
+								addRow1('#workInvoiceProjectRelationList', workInvoiceProjectRelationListRowIdx, workInvoiceProjectRelationListTpl, data[i])
+								workInvoiceProjectRelationListRowIdx = workInvoiceProjectRelationListRowIdx + 1;
+							}
+						});
+					</script>
+				</div>
+			</div>
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>发票详情</h2></div>
+				<%--<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>上级/本公司开票:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.ext eq '0'}">本公司开票	</c:when><c:when test="${workInvoice.ext eq '1'}">上级公司开票</c:when></c:choose>"/>
+					</div>
+				</div>--%>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票类型:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.invoiceType eq '1'}">专票</c:when><c:when test="${workInvoice.invoiceType eq '2'}">普票</c:when></c:choose>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>实际开票单位:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.client.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">纳税人识别号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.orUnicode}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">注册地址:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.address}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">电话:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.telephone}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开户银行:</label>
+					<div class="layui-input-block  ">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.bank}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">银行账号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.bankNumber}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>价税合计(元):</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<fmt:formatNumber value="${workInvoice.money}" pattern="#,#00.00"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票内容要求:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.content}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票人:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.drawerName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票时间:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="<fmt:formatDate value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label">领票时间:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="<fmt:formatDate value="${workInvoice.takeDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label"><span class="require-item">*</span>作废原因:</label>
+					<div class="layui-input-block">
+						<form:textarea path="cancellationRemark" htmlEscape="false" rows="4"  maxlength="255"  class="form-control required"/>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>附件信息</h2></div>
+				<span id="attachment_title"></span>
+				<div class="layui-item layui-col-xs12" style="padding:0 16px;">
+					<table id="upTable" class="table table-bordered table-condensed details">
+						<thead>
+						<tr>
+								<%-- <th>序号</th>--%>
+							<th>文件预览</th>
+							<th>上传人</th>
+							<th>上传时间</th>
+							<th width="200px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="file_attachment">
+						<c:forEach items="${workInvoice.workAttachments}" var = "workClientAttachment" varStatus="status">
+							<tr>
+									<%-- <td>${status.index + 1}</td>--%>
+								<c:choose>
+									<c:when test="${workInvoice.uploadMode == 2}">
+										<c:choose>
+											<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+												<td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+											</c:when>
+											<c:otherwise>
+												<c:choose>
+													<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+														<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',1)">${workClientAttachment.attachmentName}</a></td>
+													</c:when>
+													<c:otherwise>
+														<c:choose>
+															<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+																<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+															</c:when>
+															<c:otherwise>
+																<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+															</c:otherwise>
+														</c:choose>
+													</c:otherwise>
+												</c:choose>
+											</c:otherwise>
+										</c:choose>
+									</c:when>
+									<c:otherwise>
+										<c:choose>
+											<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+												<td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}"></td>
+											</c:when>
+											<c:otherwise>
+												<c:choose>
+													<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+														<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',1)">${workClientAttachment.attachmentName}</a></td>
+													</c:when>
+													<c:otherwise>
+														<c:choose>
+															<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+																<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',3)">${workClientAttachment.attachmentName}</a></td>
+															</c:when>
+															<c:otherwise>
+																<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',2)">${workClientAttachment.attachmentName}</a></td>
+															</c:otherwise>
+														</c:choose>
+													</c:otherwise>
+												</c:choose>
+											</c:otherwise>
+										</c:choose>
+									</c:otherwise>
+								</c:choose>
+								<td>${workClientAttachment.createBy.name}</td>
+								<td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
+								<td class="op-td">
+									<div class="op-btn-box" >
+											<%--附件下载删除--%>
+										<c:choose>
+											<c:when test="${workInvoice.uploadMode == 2}">
+												<c:choose>
+													<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+														<a href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',1)" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+													</c:when>
+													<c:otherwise>
+														<a href="${workClientAttachment.temporaryUrl}" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+													</c:otherwise>
+												</c:choose>
+											</c:when>
+											<c:otherwise>
+												<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent('${workClientAttachment.url}');" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+											</c:otherwise>
+										</c:choose>
+										<c:if test="${workClientAttachment.collectFlag != 1}">
+											<a href="javascript:void(0)" onclick="collectingAccessory(this,'${ctx}/projectAccessory/projectAccessory/saveCollectAccessory','${workClientAttachment.url}','${workClientAttachment.createBy.id}','${workClientAttachment.fileSize}')" class="op-btn op-btn-delete" style="background-color: #FFB800"><i class="layui-icon layui-icon-rate"></i>&nbsp;收藏</a>
+										</c:if>
+
+
+									</div>
+								</td>
+							</tr>
+						</c:forEach>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>发票明细</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container">
+					<table id="contentTable" class="table table-bordered table-condensed details">
+						<thead>
+						<tr>
+							<th><span class="require-item">*</span>发票代码</th>
+							<th><span class="require-item">*</span>发票号</th>
+							<th><span class="require-item">*</span>价税合计</th>
+							<th><span class="require-item">*</span>税率</th>
+							<th><span class="require-item">*</span>金额</th>
+							<th><span class="require-item">*</span>税额</th>
+							<%--<th><span class="require-item">*</span>累计登记金额</th>--%>
+							<th><span class="require-item">*</span>发票状态</th><%--正常--%>
+							<th><span class="require-item">*</span>被退标记</th>
+								<%--<th><span class="require-item">*</span>被退票号</th>
+                                <th><span class="require-item">*</span>开票日期</th>--%>
+						</tr>
+						</thead>
+						<tbody id="workAccountList">
+						<c:if test="${not empty workInvoice.workAccountList}">
+							<c:forEach items="${workInvoice.workAccountList}" var="workAccount" varStatus="index">
+								<tr id="workAccountList${index.index}">
+									<td title="${workAccount.code}">
+											${workAccount.code}
+									</td>
+									<td title="${workAccount.number}">
+											${workAccount.number}
+									</td>
+
+									<td title="<fmt:formatNumber value="${workAccount.totalMoney}" pattern="#,#00.00"/>">
+										<fmt:formatNumber value="${workAccount.totalMoney}" pattern="#,#00.00"/>
+									</td>
+									<td title="${workAccount.tax}">
+											${workAccount.tax}
+									</td>
+									<td title="<fmt:formatNumber value="${workAccount.taxMoney}" pattern="#,#00.00"/>">
+										<fmt:formatNumber value="${workAccount.taxMoney}" pattern="#,#00.00"/>
+									</td>
+									<td title="<fmt:formatNumber value="${workAccount.taxRate}" pattern="#,#00.00"/>">
+										<fmt:formatNumber value="${workAccount.taxRate}" pattern="#,#00.00"/>
+									</td>
+									<%--<td title="<fmt:formatNumber value="${workAccount.incomeMoney}" pattern="#,#00.00"/>">
+										<fmt:formatNumber value="${workAccount.incomeMoney}" pattern="#,#00.00"/>
+									</td>--%>
+									<td title="${workAccount.state}">
+											${workAccount.state}
+									</td>
+									<td title="${workAccount.backSign}">
+											${workAccount.backSign}
+									</td>
+										<%--<td title="${workAccount.backNumber}">
+                                                ${workAccount.backNumber}
+                                        </td>
+                                        <td title="<fmt:formatDate value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>">
+                                            <fmt:formatDate value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>
+                                        </td>--%>
+								</tr>
+							</c:forEach>
+						</c:if>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+
+</body>
+</html>

+ 684 - 0
src/main/webapp/webpage/modules/filialeWorkInvoice/filialeConditionWorkInvoiceModify.jsp

@@ -0,0 +1,684 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>发票管理</title>
+	<meta name="decorator" content="default"/>
+	<%--<script src="${ctxStatic}/layer-v2.3/laydate/laydate.js"></script>--%>
+	<style>
+		#contractTypeDoc-error{
+			top:80px;
+			left:0;
+		}
+		#workInvoiceProjectRelationList tr td{
+			padding-left: 0px;
+			padding-right: 0px;
+		}
+	</style>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+			//debugger
+			if(validateForm.form()){
+				$("#inputForm").submit();
+				return true;
+			}else {
+				parent.layer.msg("信息未填写完整!", {icon: 5});
+			}
+			return false;
+		}
+		$(document).ready(function() {
+			/*$('#money').keyup(function(){
+                var c=$(this);
+                if(/[^\d]/.test(c.val())){//替换非数字字符
+                    var temp_amount=c.val().replace(/[^\d]/g,'');
+                    $(this).val(temp_amount);
+                }
+            })*/
+			jQuery.validator.addMethod("isUscCode", function(value, element) {
+				if (this.optional(element)){
+					return true;
+				}
+				var uscCode = /^((\w{15})|(\w{18})|(\w{20}))$/;
+				return uscCode.test(value);
+			}, "请填写正确的纳税人识别号");
+
+			/* $("input[name='ext']").on('ifChecked', function(event){
+                 var radioVal = $(this).val();
+                 if(radioVal == 0){
+                     $("#td1").removeClass("hide");
+                     $("#td2").addClass("hide");
+                     $("#tr1").show()
+                 }else{
+                     $("#td1").addClass("hide");
+                     $("#td2").removeClass("hide");
+                     $("#tr1").hide()
+                 }
+             });*/
+			if("${workInvoice.ext}" == "1"){
+				$("#ext1").iCheck('check')
+			}else{
+				$("#ext").iCheck('check')
+			}
+			if("${workInvoice.invoiceType}" == "1"){
+				$("#invoiceType1").iCheck('check');
+				$(".invoicetype").show();
+			}else{
+				$("#invoiceType").iCheck('check');
+				$(".invoicetype").hide();
+			}
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+
+			$("input[name='invoiceType']").on('ifChecked', function(event){
+				var radioVal = $(this).val();
+				//专票必填
+				if(radioVal == 1){
+					$(".invoicetype").show();
+					$("#bank").attr("class","form-control required layui-input");
+					$("#bankNumber").attr("class","form-control number required layui-input");
+					$("#orUnicode").attr("class","form-control isUscCode required layui-input");
+					$("#address").attr("class","form-control required layui-input");
+					$("#telephone").attr("class","form-control isTel required layui-input");
+				}else if(radioVal == 2){
+					$(".invoicetype").hide();
+					$("#bank").attr("class","form-control layui-input");
+					$("#bankNumber").attr("class","form-control number layui-input");
+					$("#orUnicode").attr("class","form-control isUscCode layui-input");
+					$("#address").attr("class","form-control layui-input");
+					$("#telephone").attr("class","form-control isTel layui-input");
+				}
+			});
+			/*--------------*/
+
+		});
+		function setValuee(obj){
+			$.ajax({
+				type:'post',
+				url:'${ctx}/filialeWorkinvoice/filialeWorkinvoice/getWorkClientInfo',
+				data:{
+					"obj":obj
+				},
+				success:function(data){
+					var d = JSON.parse(data);
+					if(!'${workInvoice.orUnicode}'){
+						$("#orUnicode").val(d.orUnicode);
+					}
+					if(!'${workInvoice.telephone}'){
+						$("#telephone").val(d.telephone);
+					}
+					if(!'${workInvoice.address}'){
+						$("#address").val(d.registerAddress);
+					}
+					$("#ids").val(d.ids);
+				}
+			})
+		}
+		function setDp(obj){
+			$.ajax({
+				type:'post',
+				url:'${ctx}/filialeWorkinvoice/filialeWorkinvoice/getUserDp',
+				data:{
+					"obj":obj
+				},
+				success:function(data){
+					var d = JSON.parse(data);
+					$("#dp").val(d.dp);
+				}
+			})
+		}
+		function setPNumber(obj){
+			$.ajax({
+				type:'post',
+				url:'${ctx}/filialeWorkinvoice/filialeWorkinvoice/getPNumber',
+				data:{
+					"obj":obj
+				},
+				success:function(data){
+					var d = JSON.parse(data);
+					$("#pNumber").val(d.pNumber);
+					$("#cInfoName").val(d.cInfoName);
+					$("#cName").val(d.cName);
+					$("#officeName").val(d.officeName);
+					$("#officeId").val(d.officeId);
+				}
+			})
+		}
+
+		function addRow(list, idx, tpl, row){
+			var idx1 = $("#workAccountList tr").length;
+			if(list == '#workAccountList' && idx1 < 100){
+				bornTemplete(list, idx, tpl, row, idx1);
+			}
+		}
+		function bornTemplete(list, idx, tpl, row, idx1){
+			$(list).append(Mustache.render(tpl, {
+				idx: idx, delBtn: true, row: row,
+				order:idx1 + 1
+			}));
+			$(list+idx).find("select").each(function(){
+				$(this).val($(this).attr("data-value"));
+			});
+			$(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+				var ss = $(this).attr("data-value").split(',');
+				for (var i=0; i<ss.length; i++){
+					if($(this).val() == ss[i]){
+						$(this).attr("checked","checked");
+					}
+				}
+			});
+		}
+		function provinceForShort(province){
+			if(province == "北京市")
+				return "京";
+			else if(province == "天津市")
+				return "津";
+			else if(province == "重庆市")
+				return "渝";
+			else if(province == "上海市")
+				return "沪";
+			else if(province == "河北省")
+				return "冀";
+			else if(province == "山西省")
+				return "晋";
+			else if(province == "辽宁省")
+				return "辽";
+			else if(province == "吉林省")
+				return "吉";
+			else if(province == "黑龙江省")
+				return "黑";
+			else if(province == "江苏省")
+				return "苏";
+			else if(province == "浙江省")
+				return "浙";
+			else if(province == "安徽省")
+				return "皖";
+			else if(province == "福建省")
+				return "闽";
+			else if(province == "江西省")
+				return "赣";
+			else if(province == "山东省")
+				return "鲁";
+			else if(province == "河南省")
+				return "豫";
+			else if(province == "湖北省")
+				return "鄂";
+			else if(province == "湖南省")
+				return "湘";
+			else if(province == "广东省")
+				return "粤";
+			else if(province == "海南省")
+				return "琼";
+			else if(province == "四川省")
+				return "川/蜀";
+			else if(province == "贵州省")
+				return "黔/贵";
+			else if(province == "云南省")
+				return "云/滇";
+			else if(province == "陕西省")
+				return "陕/秦";
+			else if(province == "甘肃省")
+				return "甘/陇";
+			else if(province == "青海省")
+				return "青";
+			else if(province == "台湾省")
+				return "台";
+			else if(province == "内蒙古自治区")
+				return "内蒙古";
+			else if(province == "广西壮族自治区")
+				return "桂";
+			else if(province == "宁夏回族自治区")
+				return "宁";
+			else if(province == "新疆维吾尔自治区 ")
+				return "新";
+			else if(province == "西藏自治区")
+				return "藏";
+			else if(province == "香港特别行政区")
+				return "港";
+			else if(province == "澳门特别行政区")
+				return "澳";
+		}
+
+		function setVs(obj){
+			var a = $(obj).attr("id");
+			var b = a.replace('allPrice','proportion');
+			var value = obj.value;
+			var p = $("#price").val() || 0;
+			if(!p || p == 0){
+				parent.layer.msg("请先填写造价指标,且不能为零",{icon:5});
+				return;
+			}
+			var num = value/p ;
+			if(!/^\d+(\.\d{1,2})?$/.test( value )){
+				parent.layer.msg("合价必须输入数字",{icon:5});
+			}else{
+				$("#" +  b ).val(parseFloat(num.toFixed(2)));
+			}
+		}
+		function setTaxMoney(obj){
+			var a = $(obj).attr("id");
+			var b = a.replace('tax','taxMoney');
+			var t = a.replace('tax','totalMoney');
+			var tr = a.replace('tax','taxRate');
+			var value = obj.value || 0;
+			console.log("-value----"+value);
+			var tax = 1 + value/100;
+			console.log("-tax----"+tax);
+			var p = $("#" +  t ).val() || 0;//获取价税合计
+			console.log("-----"+p);
+			if(!p || p == 0){
+				parent.layer.msg("请先填写价税合计,且不能为零",{icon:5});
+				return;
+			}
+			var num = p/tax || 0;
+			console.log("-----"+num);
+			if(!/^\d+(\.\d{1,2})?$/.test( tax )){
+				parent.layer.msg("税率必须输入数字",{icon:5});
+			}else{
+				$("#" +  b ).val(parseFloat(num.toFixed(2)));
+				var taxRate = p - num;
+				$("#" +  tr ).val(parseFloat(taxRate.toFixed(2)));
+			}
+		}
+		function setV(obj){
+			var a =  $(obj).attr("id");
+			var c = "京";
+			var date=new Date;
+			var year=date.getFullYear();
+			var month=date.getMonth()+1;
+			month =(month<10 ? "0"+month:month);
+			var mydate = (year.toString()+month.toString());
+			var timestamp="["+mydate+"]";//获取固定格式年月
+			var number = c+timestamp;
+			$("#" +  a ).val(number);
+		}
+		function addRow1(list, idx, tpl, row){
+			var idx1 = $("#workInvoiceProjectRelationList tr").length;
+			if(list == '#workInvoiceProjectRelationList'){
+				bornTemplete1(list, idx, tpl, row, idx1);
+			}
+		}
+		function bornTemplete1(list, idx, tpl, row, idx1){
+			$(list).append(Mustache.render(tpl, {
+				idx: idx, delBtn: true, row: row,
+				order:idx1 + 1
+			}));
+			$(list+idx).find("select").each(function(){
+				$(this).val($(this).attr("data-value"));
+			});
+			$(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+				var ss = $(this).attr("data-value").split(',');
+				for (var i=0; i<ss.length; i++){
+					if($(this).val() == ss[i]){
+						$(this).attr("checked","checked");
+					}
+				}
+			});
+		}
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workInvoice" action="${ctx}/filialeWorkinvoice/filialeWorkinvoice/cancellationSaveAudit" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<form:hidden path="invoiceDate"/>
+			<form:hidden path="home"/>
+			<form:hidden path="act.taskId"/>
+			<form:hidden path="act.taskName"/>
+			<form:hidden path="act.taskDefKey"/>
+			<form:hidden path="act.procInsId"/>
+			<form:hidden path="act.procDefId"/>
+			<form:hidden id="flag" path="act.flag"/>
+			<form:hidden path="province" id="province"/>
+
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>基本信息</h2></div>
+				<div class="layui-table-body layui-item layui-col-xs12 form-table-container"  style="padding:0px">
+					<table id="contentTables" class="table table-bordered table-condensed can-edit no-bottom-margin details">
+						<thead>
+						<tr>
+							<th width="200px"><font color="red">*</font>项目名称</th>
+							<th width="200px">合同名称</th>
+							<th width="200px">项目编号</th>
+							<th width="200px">委托方</th>
+							<th width="200px">报告号</th>
+						</tr>
+						</thead>
+						<tbody id="workInvoiceProjectRelationList">
+						</tbody>
+					</table>
+					<script type="text/template" id="workInvoiceProjectRelationListTpl">//<!--
+                    <tr id="workInvoiceProjectRelationList{{idx}}">
+                        <td class="hide">
+                            <input id="workInvoiceProjectRelationList{{idx}}_invoiceId" name="workInvoiceProjectRelationList[{{idx}}].invoiceId" type="hidden" value="{{row.invoiceId}}"/>
+							<input id="workInvoiceProjectRelationList{{idx}}_projectId" name="workInvoiceProjectRelationList[{{idx}}].projectId" type="hidden" value="{{row.projectId}}"/>
+							<input id="workInvoiceProjectRelationList{{idx}}_delFlag" name="workInvoiceProjectRelationList[{{idx}}].delFlag" type="hidden" value="0"/>
+                        </td>
+                        <td>
+							<input id="workInvoiceProjectRelationList{{idx}}_projectName"   type="text" value="{{row.projectName}}" readonly="readonly"  class="form-control"/>
+                        </td>
+                        <td>
+							<input id="workInvoiceProjectRelationList{{idx}}_workContractName"   type="text" value="{{row.workContractName}}" readonly="readonly"  class="form-control"/>
+                        </td>
+                        <td style="text-align:center;">
+							<input id="workInvoiceProjectRelationList{{idx}}_projectNum"  type="text" value="{{row.projectNum}}" readonly="readonly"  class="form-control"/>
+                        </td>
+                        <td>
+							<input id="workInvoiceProjectRelationList{{idx}}_clientName"  type="text" value="{{row.clientName}}" readonly="readonly"  class="form-control"/>
+                        </td>
+                        <td>
+							<input id="workInvoiceProjectRelationList{{idx}}_reportDataNum"  type="text" value="{{row.reportDataNum}}" readonly="readonly"  class="form-control"/>
+                        </td>
+                    </tr>//-->
+					</script>
+					<script type="text/javascript">
+						var workInvoiceProjectRelationListRowIdx = 0, workInvoiceProjectRelationListTpl = $("#workInvoiceProjectRelationListTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+						/*if($("#id").val()){
+                            workInvoiceProjectRelationListRowIdx = ${fn:length(workInvoice.workInvoiceProjectRelationList)};
+						}*/
+						$(document).ready(function() {
+							var data = ${fns:toJson(workInvoice.workInvoiceProjectRelationList)};
+							for (var i=0; i<data.length; i++){
+								addRow1('#workInvoiceProjectRelationList', workInvoiceProjectRelationListRowIdx, workInvoiceProjectRelationListTpl, data[i])
+								workInvoiceProjectRelationListRowIdx = workInvoiceProjectRelationListRowIdx + 1;
+							}
+						});
+					</script>
+				</div>
+			</div>
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>发票详情</h2></div>
+				<%--<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>上级/本公司开票:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.ext eq '0'}">本公司开票	</c:when><c:when test="${workInvoice.ext eq '1'}">上级公司开票</c:when></c:choose>"/>
+					</div>
+				</div>--%>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票类型:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.invoiceType eq '1'}">专票</c:when><c:when test="${workInvoice.invoiceType eq '2'}">普票</c:when></c:choose>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>实际开票单位:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.client.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">纳税人识别号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.orUnicode}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">注册地址:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.address}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">电话:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.telephone}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开户银行:</label>
+					<div class="layui-input-block  ">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.bank}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">银行账号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.bankNumber}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>价税合计(元):</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<fmt:formatNumber value="${workInvoice.money}" pattern="#,#00.00"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票内容要求:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.content}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票人:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.drawerName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票时间:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="<fmt:formatDate value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label">领票时间:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="<fmt:formatDate value="${workInvoice.takeDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label"><span class="require-item">*</span>作废原因:</label>
+					<div class="layui-input-block">
+						<form:textarea path="cancellationRemark" htmlEscape="false" rows="4"  maxlength="255"  class="form-control required"/>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>附件信息</h2></div>
+				<span id="attachment_title"></span>
+				<div class="layui-item layui-col-xs12" style="padding:0 16px;">
+					<table id="upTable" class="table table-bordered table-condensed details">
+						<thead>
+						<tr>
+								<%-- <th>序号</th>--%>
+							<th>文件预览</th>
+							<th>上传人</th>
+							<th>上传时间</th>
+							<th width="200px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="file_attachment">
+						<c:forEach items="${workInvoice.workAttachments}" var = "workClientAttachment" varStatus="status">
+							<tr>
+									<%-- <td>${status.index + 1}</td>--%>
+								<c:choose>
+									<c:when test="${workInvoice.uploadMode == 2}">
+										<c:choose>
+											<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+												<td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+											</c:when>
+											<c:otherwise>
+												<c:choose>
+													<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+														<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',1)">${workClientAttachment.attachmentName}</a></td>
+													</c:when>
+													<c:otherwise>
+														<c:choose>
+															<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+																<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+															</c:when>
+															<c:otherwise>
+																<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+															</c:otherwise>
+														</c:choose>
+													</c:otherwise>
+												</c:choose>
+											</c:otherwise>
+										</c:choose>
+									</c:when>
+									<c:otherwise>
+										<c:choose>
+											<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+												<td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}"></td>
+											</c:when>
+											<c:otherwise>
+												<c:choose>
+													<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+														<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',1)">${workClientAttachment.attachmentName}</a></td>
+													</c:when>
+													<c:otherwise>
+														<c:choose>
+															<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+																<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',3)">${workClientAttachment.attachmentName}</a></td>
+															</c:when>
+															<c:otherwise>
+																<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',2)">${workClientAttachment.attachmentName}</a></td>
+															</c:otherwise>
+														</c:choose>
+													</c:otherwise>
+												</c:choose>
+											</c:otherwise>
+										</c:choose>
+									</c:otherwise>
+								</c:choose>
+								<td>${workClientAttachment.createBy.name}</td>
+								<td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
+								<td class="op-td">
+									<div class="op-btn-box" >
+											<%--附件下载删除--%>
+										<c:choose>
+											<c:when test="${workInvoice.uploadMode == 2}">
+												<c:choose>
+													<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+														<a href="${workClientAttachment.temporaryUrl}" target="_blank" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+													</c:when>
+													<c:otherwise>
+														<a href="${workClientAttachment.temporaryUrl}" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+													</c:otherwise>
+												</c:choose>
+											</c:when>
+											<c:otherwise>
+												<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent('${workClientAttachment.url}');" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+											</c:otherwise>
+										</c:choose>
+										<c:if test="${workClientAttachment.collectFlag != 1}">
+											<a href="javascript:void(0)" onclick="collectingAccessory(this,'${ctx}/projectAccessory/projectAccessory/saveCollectAccessory','${workClientAttachment.url}','${workClientAttachment.createBy.id}','${workClientAttachment.fileSize}')" class="op-btn op-btn-delete" style="background-color: #FFB800"><i class="layui-icon layui-icon-rate"></i>&nbsp;收藏</a>
+										</c:if>
+
+
+									</div>
+								</td>
+							</tr>
+						</c:forEach>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>发票明细</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container">
+					<table id="contentTable" class="table table-bordered table-condensed details">
+						<thead>
+						<tr>
+							<th><span class="require-item">*</span>发票代码</th>
+							<th><span class="require-item">*</span>发票号</th>
+							<th><span class="require-item">*</span>价税合计</th>
+							<th><span class="require-item">*</span>税率</th>
+							<th><span class="require-item">*</span>金额</th>
+							<th><span class="require-item">*</span>税额</th>
+							<%--<th><span class="require-item">*</span>累计登记金额</th>--%>
+							<th><span class="require-item">*</span>发票状态</th><%--正常--%>
+							<th><span class="require-item">*</span>被退标记</th>
+								<%--<th><span class="require-item">*</span>被退票号</th>
+                                <th><span class="require-item">*</span>开票日期</th>--%>
+						</tr>
+						</thead>
+						<tbody id="workAccountList">
+						<c:if test="${not empty workInvoice.workAccountList}">
+							<c:forEach items="${workInvoice.workAccountList}" var="workAccount" varStatus="index">
+								<tr id="workAccountList${index.index}">
+									<td title="${workAccount.code}">
+											${workAccount.code}
+									</td>
+									<td title="${workAccount.number}">
+											${workAccount.number}
+									</td>
+
+									<td title="<fmt:formatNumber value="${workAccount.totalMoney}" pattern="#,#00.00"/>">
+										<fmt:formatNumber value="${workAccount.totalMoney}" pattern="#,#00.00"/>
+									</td>
+									<td title="${workAccount.tax}">
+											${workAccount.tax}
+									</td>
+									<td title="<fmt:formatNumber value="${workAccount.taxMoney}" pattern="#,#00.00"/>">
+										<fmt:formatNumber value="${workAccount.taxMoney}" pattern="#,#00.00"/>
+									</td>
+									<td title="<fmt:formatNumber value="${workAccount.taxRate}" pattern="#,#00.00"/>">
+										<fmt:formatNumber value="${workAccount.taxRate}" pattern="#,#00.00"/>
+									</td>
+									<%--<td title="<fmt:formatNumber value="${workAccount.incomeMoney}" pattern="#,#00.00"/>">
+										<fmt:formatNumber value="${workAccount.incomeMoney}" pattern="#,#00.00"/>
+									</td>--%>
+									<td title="${workAccount.state}">
+											${workAccount.state}
+									</td>
+									<td title="${workAccount.backSign}">
+											${workAccount.backSign}
+									</td>
+										<%--<td title="${workAccount.backNumber}">
+                                                ${workAccount.backNumber}
+                                        </td>
+                                        <td title="<fmt:formatDate value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>">
+                                            <fmt:formatDate value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>
+                                        </td>--%>
+								</tr>
+							</c:forEach>
+						</c:if>
+						</tbody>
+					</table>
+				</div>
+			</div>
+
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>${projectNotifyType}审批流程</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<act:flowChart procInsId="${workInvoice.act.procInsId}"/>
+					<act:histoicFlow procInsId="${workInvoice.act.procInsId}" />
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+
+</body>
+</html>

+ 689 - 0
src/main/webapp/webpage/modules/filialeWorkInvoice/filialeWorkInvoiceAudit.jsp

@@ -0,0 +1,689 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>发票审批</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript" src="${ctxStatic}/layui/layui.js"></script>
+	<link rel='stylesheet' type="text/css" href="${ctxStatic}/layui/css/layui.css"/>
+	<style>
+		#workInvoiceProjectRelationList td{
+			padding-left: 0px;
+			padding-right: 0px;
+		}
+	</style>
+	<script type="text/javascript">
+		var validateForm;
+		var count = 0;
+		var numcount=0;//验证导入发票号是否重复
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+			if(validateForm.form()){
+				var ss= document.getElementById("iframe").contentWindow.document.getElementById("opinion").value
+				$("#opinion").val(ss);
+				if(obj == 1) {
+
+					$("#flag").val("yes");
+				}else {
+					$("#flag").val("no");
+				}
+
+
+				$("#inputForm").submit();
+				return true;
+			}
+			return false;
+		}
+		$(document).ready(function() {
+
+			layui.use('form', function () {
+				var form = layui.form;
+				form.render();
+			});
+			$("#name").focus();
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+
+			laydate.render({
+				elem: '#invoiceDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+				event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+				type : 'date'
+				, trigger: 'click'
+			});
+
+			laydate.render({
+				elem: '#takeDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+				event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+				type : 'date'
+				, trigger: 'click'
+			});
+			String.prototype.endWith=function(endStr){
+				var d=this.length-endStr.length;
+				return (d>=0&&this.lastIndexOf(endStr)==d)
+			}
+		});
+
+		function addRow(list, idx, tpl, row,flag){
+			var idx1 = $("#workAccountList tr").length;
+			if(list == '#workAccountList' && idx1 < 100){
+				bornTemplete(list, idx, tpl, row, idx1);
+				if($("#invoiceType").val()=="专票"){
+					$("#workAccountList"+idx+"_code").attr("minlength","10");
+					$("#workAccountList"+idx+"_code").attr("maxlength","10");
+				}else if($("#invoiceType").val()=="普票"){
+					$("#workAccountList"+idx+"_code").attr("minlength","12");
+					$("#workAccountList"+idx+"_code").attr("maxlength","12");
+				}
+				if (idx==0 && flag){
+					$("#workAccountList"+idx+"_totalMoney").val(row);
+				}
+			}
+		}
+		function bornTemplete(list, idx, tpl, row, idx1){
+			$(list).append(Mustache.render(tpl, {
+				idx: idx, delBtn: true, row: row,
+				order:idx1 + 1
+			}));
+			$(list+idx).find("select").each(function(){
+				$(this).val($(this).attr("data-value"));
+			});
+			$(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+				var ss = $(this).attr("data-value").split(',');
+				for (var i=0; i<ss.length; i++){
+					if($(this).val() == ss[i]){
+						$(this).attr("checked","checked");
+					}
+				}
+			});
+		}
+		function delRow(obj, prefix) {
+			count++;
+			var id = $(prefix + "_id");
+			var delFlag = $(prefix + "_delFlag");
+			if (id.val() == "") {
+				$(obj).parent().parent().remove();
+			} else if (delFlag.val() == "0") {
+				delFlag.val("1");
+				$(obj).html("&divide;").attr("title", "撤回删除");
+				$(obj).parent().parent().addClass("error");
+				$(obj).parent().parent().addClass("hide");
+			} else if (delFlag.val() == "1") {
+				delFlag.val("0");
+				$(obj).html("&times;").attr("title", "删除");
+				$(obj).parent().parent().removeClass("error");
+			}
+		}
+		function isNumber(val){
+			if(val === "" || val ==null){
+				return false;
+			}
+			var regPos = /^\d+(\.\d+)?$/; //非负浮点数
+			var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数
+			if(regPos.test(val) || regNeg.test(val)){
+				return true;
+			}else{
+				return false;
+			}
+
+		}
+		function setVs(obj){
+			var a = $(obj).attr("id");
+			var b = a.replace('allPrice','proportion');
+			var value = obj.value;
+			var p = $("#price").val() || 0;
+			if(!p || p == 0){
+				parent.layer.msg("请先填写造价指标,且不能为零",{icon:5});
+				return;
+			}
+			var num = value/p ;
+			if(!/^\d+(\.\d{1,2})?$/.test( value )){
+				parent.layer.msg("合价必须输入数字",{icon:5});
+			}else{
+				$("#" +  b ).val(parseFloat(num.toFixed(2)));
+			}
+		}
+		function setTaxMoney(obj){
+			var a = $(obj).attr("id");
+			//金额
+			var b = a.replace('tax','taxMoney');
+			//开票金额
+			var t = a.replace('tax','totalMoney');
+			//税额
+			var tr = a.replace('tax','taxRate');
+			var value = obj.value || 0;
+			if(!value){
+				parent.layer.msg("请正确填写税率",{icon:5});
+				$("#" +  b ).val("");
+				$("#" +  tr ).val("");
+				return;
+			}
+			var m = ${workInvoice.money};
+			var t2 = $("#" +  t ).val();
+			if(!/^\d+(\.\d{1,4})?$/.test( t2 )){
+				parent.layer.msg("请正确填写开票金额",{icon:5});
+				return;
+			}
+			var tax = 1 + value/100;
+			var p = $("#" +  t ).val() || 0;//获取开票金额
+			if(!p || p == 0){
+				parent.layer.msg("请先填写开票金额,且不能为零",{icon:5});
+				return;
+			}
+			var num = p/tax || 0;
+			$("#" +  b ).val(parseFloat(num.toFixed(2)));
+			var taxRate = p - num;
+			$("#" +  tr ).val(parseFloat(taxRate.toFixed(2)));
+		}
+		function setCheck(obj){
+			var aa = $(obj).attr("id");
+			//金额
+			var b = aa.replace('totalMoney','taxMoney');
+			//税额
+			var tr = aa.replace('totalMoney','taxRate');
+			//开票金额
+			var t = aa.replace('totalMoney','totalMoney');
+			var tm = $("#" +  t ).val();
+			//税率
+			var sl = aa.replace('totalMoney','tax');
+			var sc = $("#" +  sl ).val();
+			//处理百分比税率
+			var tax = 1 + sc/100;
+
+			$("#" +  b ).val("");
+			$("#" +  tr ).val("");
+			var m = ${workInvoice.money};
+			var a = obj.value;
+			var num = tm/tax || 0;
+			$("#" +  b ).val(parseFloat(num.toFixed(2)));
+			var taxRate = tm - num;
+			$("#" +  tr ).val(parseFloat(taxRate.toFixed(2)));
+			/*}*/
+		}
+		function setV(obj){
+			var a =  $(obj).attr("id");
+			var c = "京";
+			var date=new Date;
+			var year=date.getFullYear();
+			var month=date.getMonth()+1;
+			month =(month<10 ? "0"+month:month);
+			var mydate = (year.toString()+month.toString());
+			var timestamp="["+mydate+"]";//获取固定格式年月
+			var number = c+timestamp;
+			$("#" +  a ).val(number);
+		}
+		function checkSame(obj){
+			var value =obj.value;
+			var a = $(obj).attr("id");
+			var idx = a.replace('_number','');
+			var idxx = idx.replace('workAccountList','')
+			var b = a.replace('number','oldNumber');
+			var oldValue = $("#" +  b ).val();
+			var size = $("#workAccountList tr").length+count;
+			for (var i = 0;i<size;i++){
+				var _number = $("#workAccountList"+i+"_number").val();
+				var delFlag = $("#workAccountList"+i+"_delFlag").val();
+				if (_number!=undefined&& delFlag==0 && i!= idxx ){
+					if(_number == value){
+						$("#" +  a ).val("");
+						numcount++;
+						parent.layer.msg("重复的发票号,请重新输入",{icon:5});
+						return;
+					}
+				}
+			}
+			$.ajax({
+				type:'post',
+				url:'${ctx}/workinvoicedetail/workInvoiceDetail/checkSame',
+				data:{
+					"number":value,"oldNumber":oldValue
+				},
+				success:function(data){
+					if("false" == data){
+						$("#" +  a ).val("");
+						numcount++;
+						parent.layer.msg("重复的发票号,请重新输入",{icon:5});
+						return;
+					}
+				}
+			})
+		}
+		function openDialogreExcel(title,url,width,height,target){
+			if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+				width='auto';
+				height='auto';
+			}else{//如果是PC端,根据用户设置的width和height显示。
+
+			}
+			top.layer.open({
+				type: 1,
+				area: [500,300],
+				title:"导入数据",
+				skin: 'three-btns with-demo',
+				content:$("#import").html() ,
+				btn: ['导入全部','仅导入当前纳税人识别号', '关闭'],
+				btn1: function(index, layero){
+					var impType='0';
+					importExcel(impType,url)
+					top.layer.close(index);
+				},
+				btn2: function(index, layero){
+					var impType='1';
+					importExcel(impType,url)
+					top.layer.close(index);
+				},
+				btn3: function(index){
+					top.layer.close(index);
+				}
+
+
+			});
+		}
+		function importExcel(impType,url){
+			var orUnicode=$("#orUnicode").val();
+			var invoiceType=$("#invoiceType").val();
+			url=url+"?impType="+encodeURIComponent(impType)+"&orUnicode="+encodeURIComponent(orUnicode)+"&invoiceType="+encodeURIComponent(invoiceType);
+			var formData = new FormData();
+			formData.append("file",top.$("#uploadFile")[0].files[0]);
+			var obj =top.$("#uploadFile")[0].files[0];
+			if(obj==undefined){
+				parent.layer.alert('请选择上传文件',{icon:0,title:'系统提示'});
+				return;
+			}
+			var fileType = obj.name;
+			if(!fileType.endWith("xml")){
+				top.layer.alert('请上传*.xml格式的文件',{icon:0,title:'系统提示'});
+				return;
+			}
+
+			$.ajax({
+				type: 'post',
+				url:url,
+				data: formData,
+				dataType: "json",
+				cache: false,
+				processData: false,
+				contentType: false,
+			}).success(function (data) {
+				for (var i = 0; i < data.data.length; i++) {
+					addExcelRow('#workAccountList', workAccountListRowIdx, workAccountListTpl,data.data[i]);
+					if($("#invoiceType").val()=="专票"){
+						$("#workAccountList"+workAccountListRowIdx+"_code").attr("minlength","10");
+						$("#workAccountList"+workAccountListRowIdx+"_code").attr("maxlength","10");
+					}else if($("#invoiceType").val()=="普票"){
+						$("#workAccountList"+workAccountListRowIdx+"_code").attr("minlength","12");
+						$("#workAccountList"+workAccountListRowIdx+"_code").attr("maxlength","12");
+					}
+					workAccountListRowIdx=workAccountListRowIdx+1;
+				}
+				if(numcount>0){
+					top.layer.alert(data.message+" 存在发票号重复数据!",{icon:5});
+				}else{
+					top.layer.alert(data.message,{icon:5});
+				}
+
+			}).error(function () {
+				top.layer.msg("导入文件失败!");
+			});
+		}
+		function addExcelRow(list, idx, tpl, row){
+			var idx1 = $("#workAccountList tr").length;
+			bornTemplete(list, idx, tpl, row, idx1);
+			$("#workAccountList"+idx+"_number").change();
+		}
+
+		function insertTemporaryFile(tValue,fileName){
+			var list = "${workInvoice.workAttachments}";
+			var size = (list.split('url')).length-1;
+
+			var temporaryFilePath = tValue;
+			const file = new File([temporaryFilePath], fileName); // 创建File对象
+			var attachmentId = "";
+			var attachmentFlag = "115";
+			var timestamp = new Date().getTime();
+
+			var storeAs = "workInvoice";
+			var uploadPath = "http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/" + storeAs;
+			/*将这段字符串存到数据库即可*/
+			var divId = "_attachment";
+			$("#addFile" + divId).show();
+			temporaryMultitest(storeAs, file,temporaryFilePath, attachmentId, attachmentFlag, uploadPath, divId, size);
+		}
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workInvoice" action="${ctx}/filialeWorkinvoice/filialeWorkinvoice/saveAudit" method="post" class="form-horizontal layui-form">
+			<form:hidden path="id"/>
+			<form:hidden path="home"/>
+			<form:hidden path="act.taskId"/>
+			<form:hidden path="act.taskName"/>
+			<form:hidden path="act.taskDefKey"/>
+			<form:hidden path="act.procInsId"/>
+			<form:hidden path="act.procDefId"/>
+			<form:hidden id="flag" path="act.flag"/>
+			<c:set var="status" value="${workInvoice.act.status}" />
+			<input type="hidden" id="opinion" name="act.comment" value="" maxlength="255">
+			<div class="form-group layui-row first lw14">
+				<div class="form-group-label"><h2>基本信息</h2></div>
+				<div class="layui-table-body layui-item layui-col-xs12 form-table-container"  style="padding:0px">
+					<table id="contentTables" class="table table-bordered table-condensed can-edit no-bottom-margin details">
+						<thead>
+						<tr>
+							<th width="200px"><font color="red">*</font>项目名称</th>
+							<th width="200px">合同名称</th>
+							<th width="200px">项目编号</th>
+							<th width="200px">委托方</th>
+							<th width="200px">报告号</th>
+								<%--						<th width="100px">操作</th>--%>
+						</tr>
+						</thead>
+						<tbody id="workInvoiceProjectRelationList">
+						<c:forEach items="${workInvoice.workInvoiceProjectRelationList}" var="list">
+							<tr>
+								<td>
+									<input type="text" value="${list.projectName}" readonly="readonly"  class="form-control"/>
+								</td>
+								<td>
+									<input type="text" value="${list.workContractName}" readonly="readonly"  class="form-control"/>
+								</td>
+								<td style="text-align:center;">
+									<input type="text" value="${list.projectNum}" readonly="readonly"  class="form-control"/>
+								</td>
+								<td>
+									<input type="text" value="${list.clientName}" readonly="readonly"  class="form-control"/>
+								</td>
+								<td>
+									<input type="text" value="${list.reportDataNum}" readonly="readonly"  class="form-control"/>
+								</td>
+									<%--								<td class="text-center op-td" >--%>
+									<%--									{{#delBtn}}<span class="op-btn op-btn-delete" onclick="delRow(this, '#workInvoiceProjectRelationList{{idx}}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>{{/delBtn}}--%>
+									<%--								</td>--%>
+							</tr>
+						</c:forEach>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="form-group layui-row first lw14">
+				<div class="form-group-label"><h2>发票详情</h2></div>
+					<%--<div class="layui-item layui-col-sm6">
+                        <label class="layui-form-label"><span class="require-item">*</span>上级/本公司开票:</label>
+                        <div class="layui-input-block">
+                            <input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.ext eq '0'}">本公司开票	</c:when><c:when test="${workInvoice.ext eq '1'}">上级公司开票</c:when></c:choose>"/>
+                        </div>
+                    </div>--%>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票类型:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true" id="invoiceType"  class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.invoiceType eq '1'}">专票</c:when><c:when test="${workInvoice.invoiceType eq '2'}">普票</c:when></c:choose>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>实际开票单位:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.client.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">纳税人识别号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true" id="orUnicode"   class="form-control layui-input" value="${workInvoice.orUnicode}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">地址:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.address}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">电话:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.telephone}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开户银行:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.bank}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">银行账号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.bankNumber}"/>
+					</div>
+				</div>
+
+				<div class="layui-item layui-col-sm6 count2">
+					<label class="layui-form-label">姓名:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.newDrawerName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">收款类型:</label>
+					<div class="layui-input-block">
+						<input id="chargeType" htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.chargeType}" />
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票内容:</label>
+					<div class="layui-input-block">
+						<input id="billingContent" htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.billingContent}" />
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>开票金额(元):</label>
+					<div class="layui-input-block">
+						<input id="kaipiao" htmlEscape="false" readonly="true"   class="form-control layui-input" value="<fmt:formatNumber value="${workInvoice.money}" pattern="##00.00"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票内容要求:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.content}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票人:</label>
+					<div class="layui-input-block">
+						<form:input   path="drawerName" htmlEscape="false" readonly="true"  class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票时间:</label>
+					<div class="layui-input-block">
+						<input class="form-control layer-date laydate-icon layui-input laydate-icondate" readonly="true" id="invoiceDate" name="invoiceDate" value="<fmt:formatDate
+							value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>">
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">领票时间:</label>
+					<div class="layui-input-block">
+						<input placeholder="请选择领票时间" class="form-control layer-date laydate-icon layui-input laydate-icondate" readonly="true" id="takeDate" name="takeDate" value="<fmt:formatDate
+							value="${workInvoice.takeDate}" pattern="yyyy-MM-dd"/>">
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">实际开票人:</label>
+					<div class="layui-input-block  with-icon">
+						<input type="text"  readonly="true" value="${workInvoice.actualDrawerName}"  class="form-control layui-input" style="background-color: #f1f1f1" >
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">接收邮箱:</label>
+					<div class="layui-input-block  with-icon">
+						<input type="text"  readonly="true" value="${workInvoice.actualDrawerEmailAddress}"  class="form-control layui-input" style="background-color: #f1f1f1" >
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">对账人:</label>
+					<div class="layui-input-block  with-icon">
+						<input type="text"  readonly="true" value="${workInvoice.accountCheckingUserName}"  class="form-control layui-input" style="background-color: #f1f1f1" >
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">对账地区:</label>
+					<div class="layui-input-block  with-icon">
+						<input type="text"  readonly="true" value="${workInvoice.area.name}"  class="form-control layui-input" style="background-color: #f1f1f1" >
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12 with-textarea">
+					<label class="layui-form-label double-line">备注:</label>
+					<div class="layui-input-block">
+						<form:textarea path="remarks" readonly="true" htmlEscape="false" rows="4" class="form-control" style="background-color: #f1f1f1" />
+					</div>
+				</div>
+
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>附件信息</h2></div>
+				<span id="attachment_title"></span>
+				<div class="layui-item layui-col-xs12" style="padding:0 16px;">
+					<table id="upTable" class="table table-bordered table-condensed details">
+						<thead>
+						<tr>
+								<%-- <th>序号</th>--%>
+							<th>文件预览</th>
+							<th>上传人</th>
+							<th>上传时间</th>
+							<th width="200px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="file_attachment">
+						<c:forEach items="${workInvoice.workAttachments}" var = "workClientAttachment" varStatus="status">
+							<tr>
+									<%-- <td>${status.index + 1}</td>--%>
+								<c:choose>
+									<c:when test="${workInvoice.uploadMode == 2}">
+										<c:choose>
+											<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+												<td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+											</c:when>
+											<c:otherwise>
+												<c:choose>
+													<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+														<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',1)">${workClientAttachment.attachmentName}</a></td>
+													</c:when>
+													<c:otherwise>
+														<c:choose>
+															<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+																<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+															</c:when>
+															<c:otherwise>
+																<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+															</c:otherwise>
+														</c:choose>
+													</c:otherwise>
+												</c:choose>
+											</c:otherwise>
+										</c:choose>
+									</c:when>
+									<c:otherwise>
+										<c:choose>
+											<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+												<td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}"></td>
+											</c:when>
+											<c:otherwise>
+												<c:choose>
+													<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+														<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',1)">${workClientAttachment.attachmentName}</a></td>
+													</c:when>
+													<c:otherwise>
+														<c:choose>
+															<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+																<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',3)">${workClientAttachment.attachmentName}</a></td>
+															</c:when>
+															<c:otherwise>
+																<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',2)">${workClientAttachment.attachmentName}</a></td>
+															</c:otherwise>
+														</c:choose>
+													</c:otherwise>
+												</c:choose>
+											</c:otherwise>
+										</c:choose>
+									</c:otherwise>
+								</c:choose>
+								<td>${workClientAttachment.createBy.name}</td>
+								<td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
+								<td class="op-td">
+									<div class="op-btn-box" >
+											<%--附件下载删除--%>
+										<c:choose>
+											<c:when test="${workInvoice.uploadMode == 2}">
+												<c:choose>
+													<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+														<a href="${workClientAttachment.temporaryUrl}" target="_blank" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+													</c:when>
+													<c:otherwise>
+														<a href="${workClientAttachment.temporaryUrl}" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+													</c:otherwise>
+												</c:choose>
+											</c:when>
+											<c:otherwise>
+												<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent('${workClientAttachment.url}');" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+											</c:otherwise>
+										</c:choose>
+										<c:if test="${workClientAttachment.collectFlag != 1}">
+											<a href="javascript:void(0)" onclick="collectingAccessory(this,'${ctx}/projectAccessory/projectAccessory/saveCollectAccessory','${workClientAttachment.url}','${workClientAttachment.createBy.id}','${workClientAttachment.fileSize}')" class="op-btn op-btn-delete" style="background-color: #FFB800"><i class="layui-icon layui-icon-rate"></i>&nbsp;收藏</a>
+										</c:if>
+
+
+									</div>
+								</td>
+							</tr>
+						</c:forEach>
+						</tbody>
+					</table>
+				</div>
+			</div>
+
+
+
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+		<div class="form-group-label">
+			<div style="float: right"> <a href="javascript:void(0)" style='background-color: #FFB800' onclick="openDialogre('个人模板列表', '${ctx}/auditTemplate/auditTemplate/templateList?identification=${identification}&name=${identificationName}','80%', '70%','','关闭')" class="nav-btn layui-btn layui-btn-sm" ><i class="fa fa-file-excel-o"></i> 审核意见模板列表</a></div>
+			<h2>审批意见</h2>
+		</div>
+		<iframe id="iframe" src="${ctx}/auditTemplate/auditTemplate/iframeView?identification=${identification}" name="listresult" frameborder="0" align="left" width="100%" height="300" scrolling="value"></iframe>
+
+		<div class="form-group layui-row">
+			<div class="form-group-label"><h2>${projectNotifyType}审批流程</h2></div>
+			<div class="layui-item layui-col-xs12 form-table-container" >
+				<act:flowChart procInsId="${workInvoice.act.procInsId}"/>
+				<act:histoicFlow procInsId="${workInvoice.act.procInsId}" />
+			</div>
+		</div>
+	</div>
+</div>
+</body>
+</html>

+ 987 - 0
src/main/webapp/webpage/modules/filialeWorkInvoice/filialeWorkInvoiceAuditEnd.jsp

@@ -0,0 +1,987 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>发票审批</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript" src="${ctxStatic}/layui/layui.js"></script>
+	<link rel='stylesheet' type="text/css" href="${ctxStatic}/layui/css/layui.css"/>
+	<style>
+		#workInvoiceProjectRelationList td{
+			padding-left: 0px;
+			padding-right: 0px;
+		}
+	</style>
+	<script type="text/javascript">
+		var validateForm;
+        var count = 0;
+        var numcount=0;//验证导入发票号是否重复
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+			  var ss= document.getElementById("iframe").contentWindow.document.getElementById("opinion").value
+			  $("#opinion").val(ss);
+              if(obj == 1) {
+              	//非空验证
+				  var ff=true;
+				  $(".judgment").each(function(){
+					  var zhi=$(this).val();
+					  if (''==zhi || null == zhi){
+						  $(this).css("border","1px solid red")
+						  ff=false;
+					  }else{
+						  $(this).css("border","1px solid #f1f1f1")
+					  }
+				  });
+				  if (!ff){
+					  parent.layer.msg("发票号或开票金额未填写完整!", {icon: 5});
+					  return;
+				  }
+                  $("#flag").val("yes");
+              }else {
+				  $("#flag").val("no");
+              }
+              if(  obj == 1 && $("#workAccountList tr").length==0){
+                  top.layer.alert('请添加发票明细!', {icon: 0});
+                  return;
+              }
+
+              var m = ${workInvoice.money};
+              var money = "0.00";
+              //自动计算出结果并填充在相应的输入框中
+              var size = $("#workAccountList tr").length+count;
+              for (var i = 0;i<size;i++){
+                  var _totalMoney = $("#workAccountList"+i+"_totalMoney").val();
+
+                  var delFlag = $("#workAccountList"+i+"_delFlag").val();
+                  if (_totalMoney!=undefined && isNumber(_totalMoney) && delFlag==0){
+                      if(money==""){
+                          money = parseFloat(_totalMoney).toFixed(2);
+                      }else {
+                          money = (parseFloat(money) + parseFloat(_totalMoney)).toFixed(2);
+                      }
+                  }
+              }
+              if(obj == 1 && money != m ){
+                  top.layer.alert('发票明细总开票金额与主信息开票金额不等,请重新填写!', {icon: 0});
+                  return;
+              }
+
+			  $("#inputForm").submit();
+			  return true;
+		  }
+		  return false;
+		}
+		$(document).ready(function() {
+
+			//初始化截图功能子页面。
+			//$('#orgContent').attr("src","${ctx}/workinvoice/workInvoice/workInvoiceImageEdit");
+
+			layui.use('form', function () {
+				var form = layui.form;
+				form.render();
+			});
+			$("#name").focus();
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+
+            laydate.render({
+                elem: '#invoiceDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+, trigger: 'click'
+            });
+
+            laydate.render({
+                elem: '#takeDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+, trigger: 'click'
+            });
+            String.prototype.endWith=function(endStr){
+                var d=this.length-endStr.length;
+                return (d>=0&&this.lastIndexOf(endStr)==d)
+            }
+
+			var radioVal = '${workInvoice.newDrawer}';
+			//专票必填
+			if(radioVal == 1){
+				$(".count2").hide();
+				$(".count1").show();
+			}else if(radioVal == 2){
+				$(".count1").hide();
+				$(".count2").show();
+			}
+
+
+			$("#userImageBtn").click(function () {
+				top.layer.open({
+					type: 2,
+					area: ["750px", "500px"],
+					title: "上传图片",
+					btn: ['提交', '关闭'],
+					content: "${ctx}/sys/user/imageEdit", //  btn: ['确定', '关闭'],
+					yes: function (index, layero) {
+						console.log(1232131)
+						var body = top.layer.getChildFrame('body', index);
+						var inputForm = body.find('#inputForm');
+						console.log(inputForm)
+						var top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+						inputForm.attr("target", top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+						inputForm.validate();
+						if (inputForm.valid()) {
+							loading("正在提交,请稍等...");
+							inputForm.submit();
+						} else {
+							return;
+						}
+
+						top.layer.close(index);//关闭对话框。
+
+					},
+					cancel: function (index) {
+					}
+				});
+			});
+
+
+
+		});
+
+        function addRow(list, idx, tpl, row,flag){
+            var idx1 = $("#workAccountList tr").length;
+            if(list == '#workAccountList' && idx1 < 100){
+                bornTemplete(list, idx, tpl, row, idx1);
+                if($("#invoiceType").val()=="专票"){
+                    $("#workAccountList"+idx+"_code").attr("minlength","10");
+                    $("#workAccountList"+idx+"_code").attr("maxlength","10");
+                }else if($("#invoiceType").val()=="普票"){
+                    $("#workAccountList"+idx+"_code").attr("minlength","12");
+                    $("#workAccountList"+idx+"_code").attr("maxlength","12");
+                }
+                if (idx==0 && flag){
+					$("#workAccountList"+idx+"_totalMoney").val(row);
+				}
+            }
+        }
+        function bornTemplete(list, idx, tpl, row, idx1){
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row,
+                order:idx1 + 1
+            }));
+            $(list+idx).find("select").each(function(){
+                $(this).val($(this).attr("data-value"));
+            });
+            $(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+                var ss = $(this).attr("data-value").split(',');
+                for (var i=0; i<ss.length; i++){
+                    if($(this).val() == ss[i]){
+                        $(this).attr("checked","checked");
+                    }
+                }
+            });
+        }
+        function delRow(obj, prefix) {
+            count++;
+            var id = $(prefix + "_id");
+            var delFlag = $(prefix + "_delFlag");
+            if (id.val() == "") {
+                $(obj).parent().parent().remove();
+            } else if (delFlag.val() == "0") {
+                delFlag.val("1");
+                $(obj).html("&divide;").attr("title", "撤回删除");
+                $(obj).parent().parent().addClass("error");
+                $(obj).parent().parent().addClass("hide");
+            } else if (delFlag.val() == "1") {
+                delFlag.val("0");
+                $(obj).html("&times;").attr("title", "删除");
+                $(obj).parent().parent().removeClass("error");
+            }
+        }
+        function isNumber(val){
+            if(val === "" || val ==null){
+                return false;
+            }
+            var regPos = /^\d+(\.\d+)?$/; //非负浮点数
+            var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数
+            if(regPos.test(val) || regNeg.test(val)){
+                return true;
+            }else{
+                return false;
+            }
+
+        }
+        function setVs(obj){
+            var a = $(obj).attr("id");
+            var b = a.replace('allPrice','proportion');
+            var value = obj.value;
+            var p = $("#price").val() || 0;
+            if(!p || p == 0){
+                parent.layer.msg("请先填写造价指标,且不能为零",{icon:5});
+                return;
+            }
+            var num = value/p ;
+            if(!/^\d+(\.\d{1,2})?$/.test( value )){
+                parent.layer.msg("合价必须输入数字",{icon:5});
+            }else{
+                $("#" +  b ).val(parseFloat(num.toFixed(2)));
+            }
+        }
+        function setTaxMoney(obj){
+            var a = $(obj).attr("id");
+            //金额
+            var b = a.replace('tax','taxMoney');
+            //开票金额
+            var t = a.replace('tax','totalMoney');
+            //税额
+            var tr = a.replace('tax','taxRate');
+            var value = obj.value || 0;
+            if(!value){
+                parent.layer.msg("请正确填写税率",{icon:5});
+                $("#" +  b ).val("");
+                $("#" +  tr ).val("");
+                return;
+			}
+            var m = ${workInvoice.money};
+            var t2 = $("#" +  t ).val();
+            if(!/^\d+(\.\d{1,4})?$/.test( t2 )){
+                parent.layer.msg("请正确填写开票金额",{icon:5});
+                return;
+            }
+            var tax = 1 + value/100;
+            var p = $("#" +  t ).val() || 0;//获取开票金额
+            if(!p || p == 0){
+                parent.layer.msg("请先填写开票金额,且不能为零",{icon:5});
+                return;
+            }
+            var num = p/tax || 0;
+                $("#" +  b ).val(parseFloat(num.toFixed(2)));
+                var taxRate = p - num;
+                $("#" +  tr ).val(parseFloat(taxRate.toFixed(2)));
+        }
+        function setCheck(obj){
+            var aa = $(obj).attr("id");
+			//金额
+            var b = aa.replace('totalMoney','taxMoney');
+			//税额
+            var tr = aa.replace('totalMoney','taxRate');
+			//开票金额
+			var t = aa.replace('totalMoney','totalMoney');
+			var tm = $("#" +  t ).val();
+			//税率
+			var sl = aa.replace('totalMoney','tax');
+			var sc = $("#" +  sl ).val();
+			//处理百分比税率
+			var tax = 1 + sc/100;
+
+            $("#" +  b ).val("");
+            $("#" +  tr ).val("");
+            var m = ${workInvoice.money};
+            var a = obj.value;
+				var num = tm/tax || 0;
+				$("#" +  b ).val(parseFloat(num.toFixed(2)));
+				var taxRate = tm - num;
+				$("#" +  tr ).val(parseFloat(taxRate.toFixed(2)));
+			/*}*/
+        }
+        function getMoney(value,obj){
+			/*var aa = $(obj).attr("id");
+            //金额
+            var b = aa.replace('totalMoney','taxMoney');
+            console.log("b====="+b);
+            //税额
+            var tr = aa.replace('totalMoney','taxRate');
+            //开票金额
+            var t = aa.replace('totalMoney','totalMoney');
+            var tm = $("#" +  t ).val();
+            //税率
+            var sl = aa.replace('totalMoney','tax');
+            var sc = $("#" +  sl ).val();
+            //处理百分比税率
+            var tax = 1 + sc/100;
+
+            var m = ${workInvoice.money};
+            var money = "0.00";
+            //自动计算出结果并填充在相应的输入框中
+            var size = $("#workAccountList tr").length+count;
+            for (var i = 0;i<size;i++){
+                var _totalMoney = $("#workAccountList"+i+"_totalMoney").val();
+
+                var delFlag = $("#workAccountList"+i+"_delFlag").val();
+                if (_totalMoney!=undefined && isNumber(_totalMoney) && delFlag==0){
+                    if(money==""){
+                        money = parseFloat(_totalMoney).toFixed(2);
+                    }else {
+                        money = (parseFloat(money) + parseFloat(_totalMoney)).toFixed(2);
+                    }
+                }
+            }
+            if(money >m){
+                console.log("money--------"+money);
+                $("#" + aa ).val("");
+                $("#" +  b ).val("");
+                $("#" +  tr ).val("");
+                parent.layer.msg("发票明细开票金额总值大于主申请发票开票金额",{icon:5});
+                return;
+			}else{
+				var num = tm/tax || 0;
+				$("#" +  b ).val(parseFloat(num.toFixed(2)));
+				var taxRate = tm - num;
+				$("#" +  tr ).val(parseFloat(taxRate.toFixed(2)));
+			}*/
+        }
+        function setV(obj){
+            var a =  $(obj).attr("id");
+            var c = "京";
+            var date=new Date;
+            var year=date.getFullYear();
+            var month=date.getMonth()+1;
+            month =(month<10 ? "0"+month:month);
+            var mydate = (year.toString()+month.toString());
+            var timestamp="["+mydate+"]";//获取固定格式年月
+            var number = c+timestamp;
+            $("#" +  a ).val(number);
+        }
+        function checkSame(obj){
+            var value =obj.value;
+            var a = $(obj).attr("id");
+            var idx = a.replace('_number','');
+            var idxx = idx.replace('workAccountList','')
+            var b = a.replace('number','oldNumber');
+            var oldValue = $("#" +  b ).val();
+            var size = $("#workAccountList tr").length+count;
+            for (var i = 0;i<size;i++){
+                var _number = $("#workAccountList"+i+"_number").val();
+                var delFlag = $("#workAccountList"+i+"_delFlag").val();
+                if (_number!=undefined&& delFlag==0 && i!= idxx ){
+                    if(_number == value){
+                        $("#" +  a ).val("");
+                        numcount++;
+                        parent.layer.msg("重复的发票号,请重新输入",{icon:5});
+                        return;
+                    }
+                }
+            }
+                $.ajax({
+                    type:'post',
+                    url:'${ctx}/filialeWorkinvoice/filialeWorkinvoice/checkSame',
+                    data:{
+                        "number":value,"oldNumber":oldValue
+                    },
+                    success:function(data){
+                        if("false" == data){
+                            $("#" +  a ).val("");
+                            numcount++;
+                            parent.layer.msg("重复的发票号,请重新输入",{icon:5});
+                            return;
+                        }
+                    }
+                })
+        }
+        function openDialogreExcel(title,url,width,height,target){
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 1,
+                area: [500,300],
+                title:"导入数据",
+                skin: 'three-btns with-demo',
+                content:$("#import").html() ,
+                btn: ['导入全部','仅导入当前纳税人识别号', '关闭'],
+                btn1: function(index, layero){
+                    var impType='0';
+                    importExcel(impType,url)
+                    top.layer.close(index);
+                },
+                btn2: function(index, layero){
+                    var impType='1';
+                    importExcel(impType,url)
+                    top.layer.close(index);
+                },
+                btn3: function(index){
+                    top.layer.close(index);
+                }
+
+
+            });
+        }
+        function importExcel(impType,url){
+            var orUnicode=$("#orUnicode").val();
+            var invoiceType=$("#invoiceType").val();
+            url=url+"?impType="+encodeURIComponent(impType)+"&orUnicode="+encodeURIComponent(orUnicode)+"&invoiceType="+encodeURIComponent(invoiceType);
+            var formData = new FormData();
+            formData.append("file",top.$("#uploadFile")[0].files[0]);
+            var obj =top.$("#uploadFile")[0].files[0];
+            if(obj==undefined){
+                parent.layer.alert('请选择上传文件',{icon:0,title:'系统提示'});
+                return;
+            }
+            var fileType = obj.name;
+            if(!fileType.endWith("xml")){
+                top.layer.alert('请上传*.xml格式的文件',{icon:0,title:'系统提示'});
+                return;
+            }
+
+            $.ajax({
+                type: 'post',
+                url:url,
+                data: formData,
+                dataType: "json",
+                cache: false,
+                processData: false,
+                contentType: false,
+            }).success(function (data) {
+                for (var i = 0; i < data.data.length; i++) {
+                    addExcelRow('#workAccountList', workAccountListRowIdx, workAccountListTpl,data.data[i]);
+                    if($("#invoiceType").val()=="专票"){
+                        $("#workAccountList"+workAccountListRowIdx+"_code").attr("minlength","10");
+                        $("#workAccountList"+workAccountListRowIdx+"_code").attr("maxlength","10");
+					}else if($("#invoiceType").val()=="普票"){
+                        $("#workAccountList"+workAccountListRowIdx+"_code").attr("minlength","12");
+                        $("#workAccountList"+workAccountListRowIdx+"_code").attr("maxlength","12");
+					}
+                    workAccountListRowIdx=workAccountListRowIdx+1;
+                }
+                if(numcount>0){
+                    top.layer.alert(data.message+" 存在发票号重复数据!",{icon:5});
+				}else{
+                    top.layer.alert(data.message,{icon:5});
+				}
+
+            }).error(function () {
+                top.layer.msg("导入文件失败!");
+            });
+		}
+        function addExcelRow(list, idx, tpl, row){
+            var idx1 = $("#workAccountList tr").length;
+			bornTemplete(list, idx, tpl, row, idx1);
+			$("#workAccountList"+idx+"_number").change();
+        }
+
+
+		function insertTemporaryFile(tValue,fileName){
+			var list = "${workInvoice.workAttachments}";
+			var size = (list.split('url')).length-1;
+
+			var temporaryFilePath = tValue;
+			const file = new File([temporaryFilePath], fileName); // 创建File对象
+			var attachmentId = "";
+			var attachmentFlag = "115";
+			var timestamp = new Date().getTime();
+
+			var storeAs = "workInvoice";
+			var uploadPath = "http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/" + storeAs;
+			/*将这段字符串存到数据库即可*/
+			var divId = "_attachment";
+			$("#addFile" + divId).show();
+			temporaryMultitest(storeAs, file,temporaryFilePath, attachmentId, attachmentFlag, uploadPath, divId, size);
+		}
+
+
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+	<form:form id="inputForm" modelAttribute="workInvoice" action="${ctx}/filialeWorkinvoice/filialeWorkinvoice/saveAudit" method="post" class="form-horizontal layui-form">
+		<form:hidden path="id"/>
+		<form:hidden path="home"/>
+		<form:hidden path="act.taskId"/>
+		<form:hidden path="act.taskName"/>
+		<form:hidden path="act.taskDefKey"/>
+		<form:hidden path="act.procInsId"/>
+		<form:hidden path="act.procDefId"/>
+		<form:hidden id="flag" path="act.flag"/>
+		<c:set var="status" value="${workInvoice.act.status}" />
+		<input type="hidden" id="opinion" name="act.comment" value="" maxlength="255">
+		<div class="form-group layui-row first lw14">
+			<div class="form-group-label"><h2>基本信息</h2></div>
+			<div class="layui-table-body layui-item layui-col-xs12 form-table-container"  style="padding:0px">
+				<table id="contentTables" class="table table-bordered table-condensed can-edit no-bottom-margin details">
+					<thead>
+					<tr>
+						<th width="200px"><font color="red">*</font>项目名称</th>
+						<th width="200px">合同名称</th>
+						<th width="200px">项目编号</th>
+						<th width="200px">委托方</th>
+						<th width="200px">报告号</th>
+<%--						<th width="100px">操作</th>--%>
+					</tr>
+					</thead>
+					<tbody id="workInvoiceProjectRelationList">
+						<c:forEach items="${workInvoice.workInvoiceProjectRelationList}" var="list">
+							<tr>
+								<td>
+									<input type="text" value="${list.projectName}" readonly="readonly"  class="form-control"/>
+								</td>
+								<td>
+									<input type="text" value="${list.workContractName}" readonly="readonly"  class="form-control"/>
+								</td>
+								<td style="text-align:center;">
+									<input type="text" value="${list.projectNum}" readonly="readonly"  class="form-control"/>
+								</td>
+								<td>
+									<input type="text" value="${list.clientName}" readonly="readonly"  class="form-control"/>
+								</td>
+								<td>
+									<input type="text" value="${list.reportDataNum}" readonly="readonly"  class="form-control"/>
+								</td>
+<%--								<td class="text-center op-td" >--%>
+<%--									{{#delBtn}}<span class="op-btn op-btn-delete" onclick="delRow(this, '#workInvoiceProjectRelationList{{idx}}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>{{/delBtn}}--%>
+<%--								</td>--%>
+							</tr>
+						</c:forEach>
+					</tbody>
+				</table>
+			</div>
+		</div>
+		<div class="form-group layui-row first lw14">
+			<div class="form-group-label"><h2>发票详情</h2></div>
+			<%--<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>上级/本公司开票:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.ext eq '0'}">本公司开票	</c:when><c:when test="${workInvoice.ext eq '1'}">上级公司开票</c:when></c:choose>"/>
+				</div>
+			</div>--%>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item" style=" font-weight: bold;">*<c:choose><c:when test="${workInvoice.invoiceType eq '2'}">发票类型:</c:when></c:choose></span><c:choose><c:when test="${workInvoice.invoiceType eq '1'}">发票类型:</c:when></c:choose></label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true" id="invoiceType"  class="form-control layui-input" <c:choose><c:when test="${workInvoice.invoiceType eq '2'}"> style=" font-weight: bold;color: red;" </c:when></c:choose> value="<c:choose><c:when test="${workInvoice.invoiceType eq '1'}">专票</c:when><c:when test="${workInvoice.invoiceType eq '2'}">普票</c:when></c:choose>"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>开票类型:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true" id="newDrawer"  class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.newDrawer eq '1'}">企业开票</c:when><c:when test="${workInvoice.newDrawer eq '2'}">个人开票</c:when></c:choose>"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6 count1">
+				<label class="layui-form-label"><span class="require-item">*</span>实际开票单位:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.client.name}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6 count1">
+				<label class="layui-form-label">纳税人识别号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true" id="orUnicode"   class="form-control layui-input" value="${workInvoice.orUnicode}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6 count1">
+				<label class="layui-form-label">地址:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.address}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6 count1">
+				<label class="layui-form-label">电话:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.telephone}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6 count1">
+				<label class="layui-form-label">开户银行:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.bank}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6 count1">
+				<label class="layui-form-label">银行账号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.bankNumber}"/>
+				</div>
+			</div>
+
+			<div class="layui-item layui-col-sm6 count2">
+				<label class="layui-form-label">姓名:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.newDrawerName}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">收款类型:</label>
+				<div class="layui-input-block">
+					<input id="chargeType" htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.chargeType}" />
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">开票内容:</label>
+				<div class="layui-input-block">
+					<input id="billingContent" htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.billingContent}" />
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>开票金额(元):</label>
+				<div class="layui-input-block">
+					<input id="kaipiao" htmlEscape="false" readonly="true"   class="form-control layui-input" value="<fmt:formatNumber value="${workInvoice.money}" pattern="##00.00"/>"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">开票内容要求:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.content}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">开票人:</label>
+				<div class="layui-input-block">
+					<form:input   path="drawerName" htmlEscape="false" readonly="true"  class="form-control layui-input"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">开票时间:</label>
+				<div class="layui-input-block">
+					<input class="form-control layer-date laydate-icon layui-input laydate-icondate" id="invoiceDate" name="invoiceDate" value="<fmt:formatDate
+							value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>">
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">领票时间:</label>
+				<div class="layui-input-block">
+					<input placeholder="请选择领票时间" class="form-control layer-date laydate-icon layui-input laydate-icondate" id="takeDate" name="takeDate" value="<fmt:formatDate
+							value="${workInvoice.takeDate}" pattern="yyyy-MM-dd"/>">
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">实际开票人:</label>
+				<div class="layui-input-block  with-icon">
+					<input type="text"  readonly="true" value="${workInvoice.actualDrawerName}"  class="form-control layui-input" style="background-color: #f1f1f1" >
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">接收邮箱:</label>
+				<div class="layui-input-block  with-icon">
+					<input type="text"  readonly="true" value="${workInvoice.actualDrawerEmailAddress}"  class="form-control layui-input" style="background-color: #f1f1f1" >
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">对账人:</label>
+				<div class="layui-input-block  with-icon">
+					<input type="text"  readonly="true" value="${workInvoice.accountCheckingUserName}"  class="form-control layui-input" style="background-color: #f1f1f1" >
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">对账地区:</label>
+				<div class="layui-input-block  with-icon">
+					<input type="text"  readonly="true" value="${workInvoice.area.name}"  class="form-control layui-input" style="background-color: #f1f1f1" >
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm12 with-textarea">
+				<label class="layui-form-label double-line">备注:</label>
+				<div class="layui-input-block">
+					<form:textarea path="remarks" readonly="true" htmlEscape="false" rows="4" class="form-control" style="background-color: #f1f1f1" />
+				</div>
+			</div>
+
+			<div>
+
+					<%--嵌入子页面--%>
+				<%--<iframe id="orgContent" src="" style="border:1px dashed #000;" width="100%" height="450px" frameborder="0">
+				</iframe>--%>
+
+			</div>
+<%--			<div class="form-group layui-row">--%>
+<%--				<div class="form-group-label"><h2>审批意见</h2></div>--%>
+<%--				<div class="layui-item layui-col-sm8 lw6 with-textarea">--%>
+<%--					<div class="layui-input-block" style="margin-left:10px;position: relative">--%>
+<%--						<form:textarea placeholder="请输入意见:" path="act.comment" id="opinion" class="form-control" rows="4" cssStyle="height: 200px;" maxlength="127" />--%>
+<%--						<a id="clearOpinon" class="layui-btn" style="position: absolute;bottom: 10px;right: 20px;">清空</a>--%>
+<%--						<input type="file" name="upload_files" style="display: none;">--%>
+<%--					</div>--%>
+<%--				</div>--%>
+<%--				<div class="layui-item layui-col-sm4 lw6 with-textarea">--%>
+<%--					<div class="layui-input-block" style="margin-left:10px;">--%>
+<%--						<div style="padding: 5px 0px;"><input type="checkbox" lay-filter="raopinion" name="sh" value="同意" title="同意" style="cursor:pointer" class="apen"/></div>--%>
+<%--						<div style="padding: 5px 0px;"><input type="checkbox" lay-filter="raopinion" name="sh" value="不同意" title="不同意" style="cursor:pointer" class="apen"/></div>--%>
+<%--						<div style="padding: 5px 0px;"><input type="checkbox" lay-filter="raopinion" name="sh" value="请领导审核" title="请领导审核" style="cursor:pointer" class="apen"/></div>--%>
+<%--						<div style="padding: 5px 0px;">--%>
+<%--							<form:select path="act.comment" id="auditOpinion" lay-filter="opinion" lay-verify="opinion" class="form-control simple-select">--%>
+<%--								<form:option value=""/>--%>
+<%--								<form:options items="${fns:getMainDictListOnProjectAdvent('audit_opinion_template')}" itemLabel="label" itemValue="label" htmlEscape="false"/>--%>
+<%--							</form:select>--%>
+<%--						</div>--%>
+<%--					</div>--%>
+<%--				</div>--%>
+<%--			</div>--%>
+<%--			<div class="layui-item layui-col-sm12 with-textarea">--%>
+<%--				<label class="layui-form-label">审批意见:</label>--%>
+<%--				<div class="layui-input-block">--%>
+<%--					<form:textarea path="act.comment" class="form-control " rows="5" maxlength="20"/>--%>
+<%--				</div>--%>
+<%--			</div>--%>
+		</div>
+		<div class="form-group layui-row">
+			<div class="form-group-label"><h2>附件信息</h2></div>
+			<span id="attachment_title"></span>
+			<div class="layui-item layui-col-xs12" style="padding:0 16px;">
+				<table id="upTable" class="table table-bordered table-condensed details">
+					<thead>
+					<tr>
+							<%-- <th>序号</th>--%>
+						<th>文件预览</th>
+						<th>上传人</th>
+						<th>上传时间</th>
+						<th width="200px">操作</th>
+					</tr>
+					</thead>
+					<tbody id="file_attachment">
+					<c:forEach items="${workInvoice.workAttachments}" var = "workClientAttachment" varStatus="status">
+						<tr>
+								<%-- <td>${status.index + 1}</td>--%>
+							<c:choose>
+								<c:when test="${workInvoice.uploadMode == 2}">
+									<c:choose>
+										<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+											<td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+										</c:when>
+										<c:otherwise>
+											<c:choose>
+												<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+													<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',1)">${workClientAttachment.attachmentName}</a></td>
+												</c:when>
+												<c:otherwise>
+													<c:choose>
+														<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+															<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+														</c:when>
+														<c:otherwise>
+															<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+														</c:otherwise>
+													</c:choose>
+												</c:otherwise>
+											</c:choose>
+										</c:otherwise>
+									</c:choose>
+								</c:when>
+								<c:otherwise>
+									<c:choose>
+										<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+											<td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}"></td>
+										</c:when>
+										<c:otherwise>
+											<c:choose>
+												<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+													<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',1)">${workClientAttachment.attachmentName}</a></td>
+												</c:when>
+												<c:otherwise>
+													<c:choose>
+														<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+															<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',3)">${workClientAttachment.attachmentName}</a></td>
+														</c:when>
+														<c:otherwise>
+															<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',2)">${workClientAttachment.attachmentName}</a></td>
+														</c:otherwise>
+													</c:choose>
+												</c:otherwise>
+											</c:choose>
+										</c:otherwise>
+									</c:choose>
+								</c:otherwise>
+							</c:choose>
+							<td>${workClientAttachment.createBy.name}</td>
+							<td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
+							<td class="op-td">
+								<div class="op-btn-box" >
+										<%--附件下载删除--%>
+									<c:choose>
+										<c:when test="${workInvoice.uploadMode == 2}">
+											<c:choose>
+												<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+													<a href="${workClientAttachment.temporaryUrl}" target="_blank" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+												</c:when>
+												<c:otherwise>
+													<a href="${workClientAttachment.temporaryUrl}" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+												</c:otherwise>
+											</c:choose>
+										</c:when>
+										<c:otherwise>
+											<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent('${workClientAttachment.url}');" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+										</c:otherwise>
+									</c:choose>
+									<c:if test="${workClientAttachment.collectFlag != 1}">
+										<a href="javascript:void(0)" onclick="collectingAccessory(this,'${ctx}/projectAccessory/projectAccessory/saveCollectAccessory','${workClientAttachment.url}','${workClientAttachment.createBy.id}','${workClientAttachment.fileSize}')" class="op-btn op-btn-delete" style="background-color: #FFB800"><i class="layui-icon layui-icon-rate"></i>&nbsp;收藏</a>
+									</c:if>
+
+
+								</div>
+							</td>
+						</tr>
+					</c:forEach>
+					</tbody>
+				</table>
+			</div>
+		</div>
+
+		<div class="form-group layui-row">
+			<div class="form-group-label"><h2>发票明细</h2></div>
+			<div class="layui-item nav-btns">
+				<a class="nav-btn nav-btn-add" onclick="addRow('#workAccountList', workAccountListRowIdx, workAccountListTpl);workAccountListRowIdx = workAccountListRowIdx + 1;" title="新增"><i class="fa fa-plus"></i>&nbsp;新增</a>
+				<a href="javascript:void(0)" onclick="openDialogreExcel('导入数据', '${ctx}/workAccount/workAccount/import','90%','90%')" class="nav-btn nav-btn-import" ><i class="fa fa-plus"></i>&nbsp;导入</a>
+				<div id="import" class="hide" style="padding: 5px">
+					<input id="uploadFile" name="file" type="file" style="width:330px"/>导入文件不能超过5M,仅允许导入“xml”格式文件!<br/>  
+						<%--<input type="radio"  name="impType"  checked id="all" value="0">
+						<label for="all">导入全部</label>
+						<input type="radio"  name="impType" id="noAll" value="1">
+						<label for="noAll">仅导入当前纳税人识别号</label>--%>
+
+				</div>
+
+			</div>
+			<div class="layui-item layui-col-xs12 form-table-container">
+				<table id="contentTable" class="table table-bordered table-condensed can-edit">
+					<thead>
+					<tr>
+						<th>发票代码</th>
+						<th class="judgment-item"><span class="require-item">*</span>发票号</th>
+						<th class="judgment-item"><span class="require-item">*</span>开票金额</th>
+						<th width="80px">税率</th>
+						<th width="100px">金额</th>
+						<th width="100px">税额</th>
+						<%--<th width="100px">累计登记金额</th>--%>
+						<th width="80px">操作</th>
+						<%--<th><span class="require-item">*</span>发票状态</th>&lt;%&ndash;正常&ndash;%&gt;--%>
+						<%--<th><span class="require-item">*</span>被退标记</th>--%>
+						<%--<th><span class="require-item">*</span>被退票号</th>--%>
+						<%--<th><span class="require-item">*</span>开票日期</th>--%>
+					</tr>
+					</thead>
+					<tbody id="workAccountList">
+
+					</tbody>
+				</table>
+				<script type="text/template" id="workAccountListTpl">//<!--
+							<tr id="workAccountList{{idx}}">
+								<td class="hide">
+									<input id="workAccountList{{idx}}_id" name="workAccountList[{{idx}}].id" type="hidden" value="{{row.id}}"/>
+									<input id="workAccountList{{idx}}_delFlag" name="workAccountList[{{idx}}].delFlag" type="hidden" value="0"/>
+								</td>
+								<td>
+									<input id="workAccountList{{idx}}_code" name="workAccountList[{{idx}}].code" type="text" value="{{row.code}}"    class="form-control number"/>
+								 </td>
+								 <td>
+									<input id="workAccountList{{idx}}_number" name="workAccountList[{{idx}}].number" onchange="checkSame(this)" type="text" value="{{row.number}}"  minlength="8" maxlength="8"  class="form-control number judgment"/>
+									 <input type="hidden" id="workAccountList{{idx}}_oldNumber" value="{{row.number}}"/>
+								 </td>
+								<td>
+									<input id="workAccountList{{idx}}_totalMoney"  onblur="setCheck(this)"  onchange="getMoney(this.value,this)"  name="workAccountList[{{idx}}].totalMoney" type="text" value="{{row.totalMoney}}"    class="form-control number judgment"/>
+								</td>
+								<td>
+								<div class="input-group">
+									<input id="workAccountList{{idx}}_tax" onblur="setTaxMoney(this)" name="workAccountList[{{idx}}].tax" type="text" value="{{row.tax}}"    class="form-control number"/><span class="input-group-addon input-height">%</span>
+									</div>
+								</td>
+								<td>
+									<input id="workAccountList{{idx}}_taxMoney" name="workAccountList[{{idx}}].taxMoney" type="text" value="{{row.taxMoney}}"    class="form-control number"/>
+								</td>
+								<td>
+									<input id="workAccountList{{idx}}_taxRate" name="workAccountList[{{idx}}].taxRate" type="text" value="{{row.taxRate}}"    class="form-control number"/>
+								</td>
+								<%--<td>
+									<input id="workAccountList{{idx}}_incomeMoney" name="workAccountList[{{idx}}].incomeMoney" type="text" value="0"  readonly="true"  class="form-control"/>
+								</td>--%>
+
+									<input id="workAccountList{{idx}}_state" name="workAccountList[{{idx}}].state"  type="hidden" value="正常"   class="form-control"/>
+
+									<input id="workAccountList{{idx}}_backSign" name="workAccountList[{{idx}}].backSign"  type="hidden" value="正常"  readonly="true"  class="form-control"/>
+
+									<input id="workAccountList{{idx}}_backNumber" name="workAccountList[{{idx}}].backNumber"  type="hidden" value=""  readonly="true"  class="form-control "/>
+
+
+								<td class="text-center op-td">
+									{{#delBtn}}<span class="op-btn op-btn-delete" onclick="delRow(this, '#workAccountList{{idx}}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>{{/delBtn}}
+								</td>
+							</tr>//-->
+				</script>
+				<script type="text/javascript">
+					var workAccountListRowIdx = 0, workAccountListTpl = $("#workAccountListTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+					$(document).ready(function() {
+						var data = ${fns:toJson(workInvoice.workAccountList)};
+						var kaipiao=$("#kaipiao").val();
+						if (data.length==0){
+							addRow('#workAccountList', workAccountListRowIdx, workAccountListTpl, kaipiao,"true");
+							workAccountListRowIdx = workAccountListRowIdx + 1;
+						}
+						for (var i=0; i<data.length; i++){
+							addRow('#workAccountList', workAccountListRowIdx, workAccountListTpl, data[i]);
+							workAccountListRowIdx = workAccountListRowIdx + 1;
+						}
+					});
+					function f1(row) {
+						// window.parent.document.getElementById('opinion').value = row;
+						$("#opinion").val(row)
+					}
+					function openDialogre(title,url,width,height,target,buttons) {
+						if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {//如果是移动端,就使用自适应大小弹窗
+							width = 'auto';
+							height = 'auto';
+						} else {//如果是PC端,根据用户设置的width和height显示。
+						}
+						var split = buttons.split(",");
+						top.layer.open({
+							type: 2,
+							area: [width, height],
+							title: title,
+							maxmin: true, //开启最大化最小化按钮
+							skin: 'three-btns',
+							content: url,
+							btn: split,
+							btn1: function(index, layero){
+								top.layer.close(index)
+								document.getElementById('iframe').contentWindow.location.reload();
+							}
+						});
+					}
+				</script>
+			</div>
+		</div>
+
+
+		<div class="form-group layui-row page-end"></div>
+	</form:form>
+		<div class="form-group-label">
+			<div style="float: right"> <a href="javascript:void(0)" style='background-color: #FFB800' onclick="openDialogre('个人模板列表', '${ctx}/auditTemplate/auditTemplate/templateList?identification=${identification}&name=${identificationName}','80%', '70%','','关闭')" class="nav-btn layui-btn layui-btn-sm" ><i class="fa fa-file-excel-o"></i> 审核意见模板列表</a></div>
+			<h2>审批意见</h2>
+		</div>
+		<iframe id="iframe" src="${ctx}/auditTemplate/auditTemplate/iframeView?identification=${identification}" name="listresult" frameborder="0" align="left" width="100%" height="300" scrolling="value"></iframe>
+
+		<div class="form-group layui-row">
+			<div class="form-group-label"><h2>${projectNotifyType}审批流程</h2></div>
+			<div class="layui-item layui-col-xs12 form-table-container" >
+				<act:flowChart procInsId="${workInvoice.act.procInsId}"/>
+				<act:histoicFlow procInsId="${workInvoice.act.procInsId}" />
+			</div>
+		</div>
+	</div>
+</div>
+</body>
+</html>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1444 - 0
src/main/webapp/webpage/modules/filialeWorkInvoice/filialeWorkInvoiceForm.jsp


+ 951 - 0
src/main/webapp/webpage/modules/filialeWorkInvoice/filialeWorkInvoiceList.jsp

@@ -0,0 +1,951 @@
+<%@ page import="com.jeeplus.modules.sys.utils.UserUtils" %>
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+
+	<title>发票管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        <%--var Srole = "<%= UserUtils.getSelectRole().getName()%>";--%>
+
+        $(document).ready(function() {
+            // laydate.render({
+            //     elem: '#invoiceDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+            //     event: 'focus' //响应事件。如果没有传入event,则按照默认的click
+				// ,type:'datetime'
+            // });
+            //搜索框收放
+            $('#moresee').click(function(){
+                if($('#moresees').is(':visible'))
+                {
+                    $('#moresees').slideUp(0,resizeListWindow2);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-up").addClass("glyphicon glyphicon-menu-down");
+                }else{
+                    $('#moresees').slideDown(0,resizeListWindow2);
+                    $('#moresee i').removeClass("glyphicon glyphicon-menu-down").addClass("glyphicon glyphicon-menu-up");
+                }
+            });
+            laydate.render({
+                elem: '#beginContractDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+, trigger: 'click'
+            });
+            laydate.render({
+                elem: '#endContractDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+, trigger: 'click'
+            });
+            laydate.render({
+                elem: '#receiptBeginDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+, trigger: 'click'
+            });
+            laydate.render({
+                elem: '#receiptEndDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'date'
+, trigger: 'click'
+            });
+        });
+        function openDialogre(title,url,width,height,target){
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: true, //开启最大化最小化按钮
+                content: url ,
+                skin:"three-btns",
+                btn: ['送审','暂存','关闭'],
+                btn1: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(1) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                },
+                btn2:function(index,layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(2) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                    return false;
+                },
+                btn3: function(index){
+                }
+            });
+
+        }
+
+        function openDialogreplay(title,url,width,height,target){
+
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: true, //开启最大化最小化按钮
+                content: url ,
+                skin:"two-btns",
+                btn: ['送审','关闭'],
+                yes: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+
+                    if(iframeWin.contentWindow.doSubmit() ){
+                        top.layer.close(index);//关闭对话框。
+                        //setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+
+                },
+                cancel: function(index){
+                }
+            });
+        }
+
+        function receiptInvoice(title,url,width,height,target){
+
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+			top.layer.open({
+				type: 2,
+				area: [width, height],
+				title: title,
+				maxmin: true, //开启最大化最小化按钮
+				content: url ,
+				skin:"three-btns",
+				btn: ['保留','确认收款','关闭'],
+				btn1: function(index, layero){
+					var body = top.layer.getChildFrame('body', index);
+					var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+					var inputForm = body.find('#inputForm');
+					var top_iframe;
+					if(target){
+						top_iframe = target;//如果指定了iframe,则在改frame中跳转
+					}else{
+						top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+					}
+					inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+					if(iframeWin.contentWindow.doSubmit(1) ){
+						// top.layer.close(index);//关闭对话框。
+						setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+					}
+				},
+				btn2:function(index,layero){
+					var body = top.layer.getChildFrame('body', index);
+					var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+					var inputForm = body.find('#inputForm');
+					var top_iframe;
+					if(target){
+						top_iframe = target;//如果指定了iframe,则在改frame中跳转
+					}else{
+						top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+					}
+					inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+					if(iframeWin.contentWindow.doSubmit(2) ){
+						// top.layer.close(index);//关闭对话框。
+						setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+					}
+					return false;
+				},
+				btn3: function(index){
+				}
+			});
+        }
+
+        function contractOpenDialogre(title,url,width,height,target){
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: false, //开启最大化最小化按钮
+                skin:"three-btns",
+                content: url ,
+                btn: ['送审','暂存','关闭'],
+                btn1: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(1) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                },
+                btn2:function(index,layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+                    if(iframeWin.contentWindow.doSubmit(2) ){
+                        // top.layer.close(index);//关闭对话框。
+                        setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+                    return false;
+                },
+                btn3: function(index){
+                }
+            });
+
+        }
+
+		function openDialogreModify(title,url,id,width,height,target) {
+
+			if (navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)) {//如果是移动端,就使用自适应大小弹窗
+				width = 'auto';
+				height = 'auto';
+			} else {//如果是PC端,根据用户设置的width和height显示。
+
+			}
+
+			$.ajax({
+				async: false,
+				url: "${ctx}/filialeWorkinvoice/filialeWorkinvoice/getInvoiceExist?id="+id,
+				dataType: "json",
+				success: function (data) {
+					if(data.success){
+                        top.layer.open({
+                            type: 2,
+                            area: [width, height],
+                            title: title,
+                            maxmin: true, //开启最大化最小化按钮
+                            content: url ,
+                            skin:"two-btns",
+                            btn: ['送审','关闭'],
+                            yes: function(index, layero){
+                                var body = top.layer.getChildFrame('body', index);
+                                var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                                var inputForm = body.find('#inputForm');
+                                var top_iframe;
+                                if(target){
+                                    top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                                }else{
+                                    top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                                }
+                                inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+
+                                if(iframeWin.contentWindow.doSubmit() ){
+                                    top.layer.close(index);//关闭对话框。
+                                    //setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                                }
+
+                            },
+                            cancel: function(index){
+                            }
+                        });
+					}else{
+						top.layer.msg("该发票信息已删除!", {icon: 0});
+						window.location.reload();
+					}
+				}
+			});
+
+
+		}
+
+
+		//打开对话框(查看)
+		function openDialogListView(title,url,id,width,height){
+
+
+			if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+				width='auto';
+				height='auto';
+			}else{//如果是PC端,根据用户设置的width和height显示。
+
+			}
+			$.ajax({
+				async: false,
+				url: "${ctx}/filialeWorkinvoice/filialeWorkinvoice/getInvoiceExist?id="+id,
+				dataType: "json",
+				success: function (data) {
+					if(data.success){
+						top.layer.open({
+							type: 2,
+							skin: 'one-btn',
+							area: [width, height],
+							title: title,
+							maxmin: true, //开启最大化最小化按钮
+							content: url ,
+							btn: ['关闭'],
+							cancel: function(index){
+							}
+						});
+					}else{
+						top.layer.msg("该发票信息已删除!", {icon: 0});
+						window.location.reload();
+					}
+				}
+			});
+
+		}
+
+	</script>
+	<script>
+
+		function notifyDialogre(title,url,width,height,target){
+			if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+				width='auto';
+				height='auto';
+			}else{//如果是PC端,根据用户设置的width和height显示。
+
+			}
+			top.layer.open({
+				type: 2,
+				area: [width, height],
+				title: title,
+				skin:"three-btns",
+				maxmin: true, //开启最大化最小化按钮
+				content: url ,
+				btn: ['通过','驳回','关闭'],
+				btn1: function(index, layero){
+					var body = top.layer.getChildFrame('body', index);
+					var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+					var inputForm = body.find('#inputForm');
+					var top_iframe;
+					if(target){
+						top_iframe = target;//如果指定了iframe,则在改frame中跳转
+					}else{
+						top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+					}
+					inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+					if(iframeWin.contentWindow.doSubmit(1) ){
+						top.layer.close(index);//关闭对话框。
+						setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+					}
+				},
+				btn2:function(index,layero){
+					var body = top.layer.getChildFrame('body', index);
+					var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+					var inputForm = body.find('#inputForm');
+					var top_iframe;
+					if(target){
+						top_iframe = target;//如果指定了iframe,则在改frame中跳转
+					}else{
+						top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+					}
+					inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+					if(iframeWin.contentWindow.doSubmit(2) ){
+						top.layer.close(index);//关闭对话框。
+						setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+					}
+					return false;
+				},
+				btn3: function(index){
+				}
+			});
+
+		}
+		function cBlur(obj) {
+			var id = $("#accountCheckingUserId").val();
+			if(undefined != obj.value && null != obj.value && '' != obj.value){
+				$.ajax({
+					url:'${ctx}/sys/user/getUserByName?name='+obj.value,
+					type:"post",
+					success:function(data){
+						var user = data.body.data;
+						if(undefined == user || null == user || '' == user){
+							$("#accountCheckingUserId").val("");
+						}else{
+							if(data.body.data.id != id){
+								if(undefined != id && null != id && '' != id){
+									$("#accountCheckingUserId").val("");
+								}
+							}
+						}
+					}
+				});
+			}else{
+				$("#accountCheckingUserId").val("");
+			}
+
+		}
+		function blurSubmitterId(obj) {
+			var id = $("#submitterId").val();
+			if(undefined != obj.value && null != obj.value && '' != obj.value){
+				$.ajax({
+					url:'${ctx}/sys/user/getUserByName?name='+obj.value,
+					type:"post",
+					success:function(data){
+						var user = data.body.data;
+						if(undefined == user || null == user || '' == user){
+							$("#submitterId").val("");
+						}else{
+							if(data.body.data.id != id){
+								if(undefined != id && null != id && '' != id){
+									$("#submitterId").val("");
+								}
+							}
+						}
+					}
+				});
+			}else{
+				$("#submitterId").val("");
+			}
+
+		}
+		function readDetailInfo(obj,numbers) {
+			if(numbers!=undefined && numbers!=""){
+				var vals=numbers.split(",");
+				var value="";
+				for (var i=0;i<vals.length;i++){
+					value+=vals[i]+"</br>"
+				}
+				if (vals.length>0){
+					layer.tips(value, obj, {
+						tips: [3, '#000'],
+						area: ['250px', 'auto'],
+						time: 3000
+					});
+				}
+			}
+		}
+		function readProjectInfo(obj,numbers) {
+			if(numbers!=undefined && numbers!=""){
+				var vals=numbers.split(",");
+				var value="";
+				for (var i=0;i<vals.length;i++){
+					value+=vals[i]+";</br>"
+				}
+				if (vals.length>0){
+					layer.tips(value, obj, {
+						tips: [3, '#000'],
+						area: ['250px', 'auto'],
+						time: 3000
+					});
+				}
+			}
+		}
+
+	</script>
+	<style>
+		body{
+			background-color:transparent;
+			filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#26FFFFFF, endColorstr=#26FFFFFF);
+			color:#ffffff;
+			background-color:rgba(255,255,255,0);
+			height:100%;
+		}
+	</style>
+</head>
+<body>
+<div class="wrapper wrapper-content">
+	<sys:message content="${message}"/>
+	<div class="layui-row ">
+		<%--<div class="full-width fl">
+			<div class=" contentShadow shadowLTR list-form-tab" id="tabDiv">
+				<ul class="list-tabs" >
+					<li class="active"><a href="${ctx}/workinvoice/workInvoice/list">发票管理</a></li>
+					<li><a href="${ctx}/workinvoicealter/workInvoiceAlter/list">发票变更</a></li>
+				</ul>
+			</div>
+		</div>--%>
+		<div class="full-width fl">
+			<div class=" layui-row contentShadow shadowLR" id="queryDiv">
+				<form:form id="searchForm" modelAttribute="workInvoiceShow" action="${ctx}/filialeWorkinvoice/filialeWorkinvoice/" method="post" class="form-inline">
+				<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
+				<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
+				<input id="toflag" name="toflag" type="hidden" value="1"/>
+				<%--<table:sortColumn id="orderBy" name="orderBy" value="${page.orderBy}" callback="sortOrRefresh();"/><!-- 支持排序 -->--%>
+
+					<div class="commonQuery lw9">
+						<div class="layui-item query athird">
+							<label class="layui-form-label">发票号:</label>
+							<div class="layui-input-block with-icon">
+								<form:input path="widNumber" htmlEscape="false"  class=" form-control layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">开票总金额:</label>
+							<div class="layui-input-block with-icon">
+								<form:input path="money" htmlEscape="false"  class=" form-control layui-input"/>
+							</div>
+						</div>
+
+						<%--<div class="layui-item query athird">
+							<label class="layui-form-label">项目编号:</label>
+							<div class="layui-input-block">
+								<form:input path="project.projectId" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+							</div>
+						</div>
+						<div class="layui-item query athird">
+							<label class="layui-form-label">项目名称:</label>
+							<div class="layui-input-block with-icon">
+								<form:input path="project.projectName" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+							</div>
+						</div>--%>
+						<div class="layui-item athird">
+							<div class="input-group">
+								<a href="#" id="moresee"><i class="glyphicon glyphicon-menu-down"></i></a>
+								<div class="layui-btn-group search-spacing">
+									<button id="searchQuery" class="layui-btn layui-btn-sm layui-bg-blue" onclick="search()">查询</button>
+									<button id="searchReset" class="layui-btn layui-btn-sm " onclick="resetSearch()">重置</button>
+								</div>
+							</div>
+						</div>
+						<div style="    clear:both;"></div>
+					</div>
+					<div id="moresees" class="lw9" style="clear:both;display:none;">
+						<%--<div class="layui-item query athird">
+							<label class="layui-form-label">报告号名称:</label>
+							<div class="layui-input-block with-icon">
+								<form:input path="project.reportData.number" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+							</div>
+						</div>--%>
+							<div class="layui-item query athird">
+								<label class="layui-form-label">对账人:</label>
+								<div class="layui-input-block with-icon">
+									<sys:inquireselectUserNotReadolny id="accountCheckingUser" name="accountCheckingUserId" value="${workInvoice.accountCheckingUserId}" labelName="accountCheckingUserName" labelValue="${workInvoice.accountCheckingUserName}" cssStyle="background-color: #fff"
+																	  title="用户" url="/sys/office/treeDataByLoginUser?type=3" cssClass="form-control layui-input" allowClear="true" notAllowSelectParent="true"/>
+								</div>
+							</div>
+							<div class="layui-item query athird">
+								<label class="layui-form-label">对账地区:</label>
+								<div class="layui-input-block  with-icon">
+									<sys:treeselectArae id="area" name="area.id" value="${workInvoice.area.id}" labelName="area.name" labelValue="${workInvoice.area.name}"
+														cssStyle="background-color:#fff" title="区域" url="/sys/area/treeData" cssClass="form-control layui-input" allowClear="true" notAllowSelectParent="false" isAll="true"/>
+								</div>
+							</div>
+							<div class="layui-item query athird">
+								<label class="layui-form-label">发票申请编号:</label>
+								<div class="layui-input-block">
+									<form:input path="number" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+								</div>
+							</div>
+							<div class="layui-item query athird">
+								<label class="layui-form-label">开票日期:</label>
+								<div class="layui-input-block">
+									<input id="beginContractDate" name="beginContractDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group" style="background-color: #fff"
+										   value="<fmt:formatDate value="${workInvoice.beginContractDate}" pattern="yyyy-MM-dd"/>"/>
+									</input>
+									<span class="group-sep">-</span>
+									<input id="endContractDate" name="endContractDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group" style="background-color: #fff"
+										   value="<fmt:formatDate value="${workInvoice.endContractDate}" pattern="yyyy-MM-dd"/>"/>
+									</input>
+								</div>
+							</div>
+							<div class="layui-item query athird">
+								<label class="layui-form-label">经办人部门:</label>
+								<div class="layui-input-block with-icon">
+									<sys:treeselect id="officeId" name="officeId" value="${workInvoice.officeId}" labelName="officeName" labelValue="${workInvoice.officeName}" cssStyle="background-color: #fff"
+													title="部门" url="/sys/office/treeDataByLoginUser?type=2" cssClass="form-control layui-input" allowClear="true" notAllowSelectParent="true"/>
+								</div>
+							</div>
+							<div class="layui-item query athird">
+								<label class="layui-form-label">经办人:</label>
+								<div class="layui-input-block with-icon">
+									<sys:inquireselectUserNotReadolnyTow id="submitter" name="submitterId" value="${workInvoice.submitterId}" labelName="submitterName" labelValue="${workInvoice.submitterName}" cssStyle="background-color: #fff"
+																		 title="用户" url="/sys/office/treeDataByLoginUser?type=3" cssClass="form-control layui-input" allowClear="true" notAllowSelectParent="true"/>
+								</div>
+							</div>
+
+							<div class="layui-item query athird">
+								<label class="layui-form-label">收款日期:</label>
+								<div class="layui-input-block">
+									<input id="receiptBeginDate" name="receiptBeginDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group" style="background-color: #fff"
+										   value="<fmt:formatDate value="${workInvoice.receiptBeginDate}" pattern="yyyy-MM-dd"/>"/>
+									</input>
+									<span class="group-sep">-</span>
+									<input id="receiptEndDate" name="receiptEndDate" type="text" readonly="readonly" maxlength="20" class="laydate-icondate form-control layer-date layui-input laydate-icon query-group" style="background-color: #fff"
+										   value="<fmt:formatDate value="${workInvoice.receiptEndDate}" pattern="yyyy-MM-dd"/>"/>
+									</input>
+								</div>
+							</div>
+
+							<div class="layui-item query athird">
+								<label class="layui-form-label">开票单位:</label>
+								<div class="layui-input-block with-icon">
+									<form:input path="client.name" htmlEscape="false"  class=" form-control layui-input"/>
+								</div>
+							</div>
+							<div class="layui-item query athird">
+								<label class="layui-form-label">是否收款:</label>
+								<div class="layui-input-block with-icon">
+									<select id="receiptMoney" name="receiptMoney" class="form-control simple-select">
+										<option value=""></option>
+										<option value="0" <c:if test="${workInvoiceShow.receiptMoney=='0'}">selected</c:if>>否</option>
+										<option value="2" <c:if test="${workInvoiceShow.receiptMoney=='2'}">selected</c:if>>部分收款</option>
+										<option value="1" <c:if test="${workInvoiceShow.receiptMoney=='1'}">selected</c:if>>是</option>
+									</select>
+								</div>
+							</div>
+							<div class="layui-item query athird">
+								<label class="layui-form-label">发票类型:</label>
+								<div class="layui-input-block with-icon">
+									<form:select path="invoiceType" class="form-control simple-select">
+										<form:option value="" label=""/>
+										<form:options items="${fns:getMainDictList('invoice_type')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+									</form:select>
+								</div>
+							</div>
+							<div class="layui-item query athird">
+								<label class="layui-form-label">状态:</label>
+								<div class="layui-input-block with-icon">
+									<form:select path="invoiceState" class="form-control simple-select">
+										<form:option value="" label=""/>
+										<form:options items="${fns:getDictList('invoice_audit_state')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+									</form:select>
+								</div>
+							</div>
+							<div class="layui-item query athird">
+								<label class="layui-form-label">收款类型:</label>
+								<div class="layui-input-block with-icon">
+									<form:select path="chargeType" class="form-control simple-select">
+										<form:option value="" label=""/>
+										<form:options items="${fns:getMainDictList('receipt_type')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+									</form:select>
+								</div>
+							</div>
+							<div class="layui-item query athird">
+								<label class="layui-form-label">开票内容:</label>
+								<div class="layui-input-block with-icon">
+									<form:select path="billingContent" class="form-control simple-select">
+										<form:option value="" label=""/>
+										<form:options items="${fns:getMainDictList('billing_content')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+									</form:select>
+								</div>
+							</div>
+
+							<div class="layui-item query athird">
+								<label class="layui-form-label">项目名称:</label>
+								<div class="layui-input-block with-icon">
+									<form:input path="projectName" htmlEscape="false"  class=" form-control layui-input"/>
+								</div>
+							</div>
+							<div class="layui-item query athird">
+								<label class="layui-form-label">报告号:</label>
+								<div class="layui-input-block with-icon">
+									<form:input path="reportNumber" htmlEscape="false"  class=" form-control layui-input"/>
+								</div>
+							</div>
+					</div>
+				</form:form>
+			</div>
+		</div>
+		<div class="full-width fl">
+			<div class=" contentShadow shadowLBR layui-form contentDetails">
+				<div class="nav-btns">
+					<div class="layui-btn-group" style="float: left">
+						<shiro:hasPermission name="filialeWorkInvoice:filialeWorkInvoice:add">
+							<button class="layui-btn layui-btn-sm layui-bg-blue" title="发票管理" onclick="openDialogre('新增发票信息','${ctx}/filialeWorkinvoice/filialeWorkinvoice/form','95%','95%')">&nbsp;添加</button>
+						</shiro:hasPermission>
+						<shiro:hasPermission name="filialeWorkinvoice:filialeWorkinvoice:export">
+							<table:exportExcel url="${ctx}/filialeWorkinvoice/filialeWorkinvoice/export"></table:exportExcel><!-- 导出按钮 -->
+						</shiro:hasPermission>
+						<button class="layui-btn layui-btn-sm layui-bg-green" data-toggle="tooltip" data-placement="left" onclick="sortOrRefresh()" title="刷新"> 刷新</button>
+						<div class=" layui-btn-sm" style="float: right;width: 300px">
+							<span style="color: #999999">金额汇总(开票金额):${sumMoney}(元)</span>
+						</div>
+					</div>
+
+
+					<div style="clear: both;"></div>
+				</div>
+				<table class="oa-table layui-table" id="contentTable"></table>
+
+				<!-- 分页代码 -->
+				<table:page page="${page}"></table:page>
+				<div style="clear: both;"></div>
+			</div>
+		</div>
+	</div>
+    <div id="changewidth"></div>
+</div>
+<script src="${ctxStatic}/layer-v2.3/layui/layui.all.js" charset="utf-8"></script>
+<script>
+    layui.use('table', function(){
+        layui.table.render({
+            limit:${ page.pageSize }
+            ,elem: '#contentTable'
+            ,page: false
+            ,cols: [[
+				{field:'index',align:'center', title: '序号',width:40}
+				,{field:'projName',align:'center', title: '项目名称', minWidth:160,templet:function(d){
+						if(1 == d.showView && d.showView != undefined){
+							return "<a class=\"attention-info\" title=\"" + d.projName + "\" href=\"javascript:void(0);\" onclick=\"openDialogView('查看项目', '${ctx}/filialeWorkinvoice/filialeWorkinvoice/projectview?id=" + d.id +"','95%', '95%')\">" + d.projName + "</a>";
+						}else{
+							return "<span title='"+ d.projName +"'>" +d.projName+ "</span>";
+						}
+						<%--return "<a class=\"attention-info\" title=\"" + d.projName + "\" href=\"javascript:void(0);\" onclick=\"openDialogView('查看项目', '${ctx}/ruralProject/ruralProjectRecords/view?id=" + d.projectId +"','95%', '95%')\">" + d.projName + "</a>";--%>
+					}}
+				,{field:'invoiceNum',align:'center', sort:true,title: '发票申请编号', minWidth:130,templet:function(d){
+						return "<a class=\"attention-info\" title=\""+ d.invoiceNum +"\"href=\"javascript:void(0);\" onclick=\"openDialogListView('查看发票信息', '${ctx}/filialeWorkinvoice/filialeWorkinvoice/form?id=" + d.id + "&tabId=1','"+ d.id +"','95%', '95%')\">" + d.invoiceNum + "</a>";
+					}}
+				,{field:'widNumber',align:'center', title: '发票号',  width:90,templet:function(d){
+						return "<span title='"+ d.widNumber +"'>" + d.widNumber + "</span>";
+					}}
+				,{field:'clientName', align:'center',title: '开票单位', minWidth:160,templet:function(d){
+						return "<span title='"+ d.clientName +"'>" + d.clientName + "</span>";
+					}}
+				,{field:'responsibleName', align:'center',title: '经办人', minWidth:80,templet:function(d){
+						return "<span title='"+ d.responsibleName +"'>" + d.responsibleName + "</span>";
+					}}
+				,{field:'officeName', align:'center',title: '经办单位',width:80,templet:function(d){
+						return "<span title='"+ d.officeName +"'>" + d.officeName + "</span>";
+					}}
+				,{field:'money',align:'center', title: '开票总金额(元)',  width:130,templet:function(d){
+						return "<span title='"+ d.money +"'>" + d.money + "</span>";
+					}}
+				,{field:'widTotalMoney',align:'center', title: '发票金额(元)',  width:120,templet:function(d){
+						return "<span title='"+ d.widTotalMoney +"'>" + d.widTotalMoney + "</span>";
+					}}
+				,{field:'billingContent',align:'center', title: '开票内容',  width:90,templet:function(d){
+						return "<span title='"+ d.billingContent +"'>" + d.billingContent + "</span>";
+					}}
+				,{field:'chargeType',align:'center', title: '收款类型',  width:90,templet:function(d){
+						return "<span title='"+ d.chargeType +"'>" + d.chargeType + "</span>";
+					}}
+				,{field:'invoiceType',align:'center', title: '发票类型',  width:90,templet:function(d){
+						return "<span title='"+ d.invoiceType +"'>" + d.invoiceType + "</span>";
+					}}
+
+				,{field:'invoiceDate',align:'center', sort:true,title: '开票日期',  width:90}
+				,{field:'receiptMoneyDate',align:'center', sort:true,title: '收款日期',  width:90}
+				,{field:'receiptMoney',align:'center', title: '是否收款',  width:90,templet:function(d){
+						if("部分收款" === d.receiptMoney || "是" === d.receiptMoney)
+							var xml = "<a class=\"status-label status-label-signed\" title=\""+ d.invoiceNum +"\"href=\"javascript:void(0);\" onclick=\"openDialogListView('查看发票信息', '${ctx}/filialeWorkinvoice/filialeWorkinvoice/form?id=" + d.id + "&tabId=1','"+ d.id +"','95%', '95%')\">" + d.receiptMoney + "</a>";
+
+						else
+							var xml = "<span style=\"cursor:default;\" class=\"status-label status-label-" + d.receiptMoney + "\" >" + d.receiptMoney + "</span>";
+						return xml;
+					}}
+				,{field:'cancellation',align:'center', title: '是否作废',  width:80}
+                ,{align:'center', title: '状态', fixed: 'right', width:70,templet:function(d){
+                        <%--var st = getAuditState(d.status);--%>
+
+                        <%--var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/workinvoice/workInvoice/getProcessOne?id=" + d.id + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";--%>
+                        <%--return xml;--%>
+                        var st = getWorkInvoiceAuditState(d.status);
+                        if(st.action)
+                            var xml = "<span onclick=\"openDialogListView('发票流程追踪', '${ctx}/filialeWorkinvoice/filialeWorkinvoice/getProcessOne?id=" + d.id + "','"+ d.id +"','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                        else
+                            var xml = "<span style=\"cursor:default;\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
+                        return xml;
+                    }}
+                ,{field:'op',align:'center',title:"操作",fixed: 'right',width:130,templet:function(d){
+                        ////对操作进行初始化
+                        var xml="<div class=\"layui-btn-group\">";
+
+						/*if(d.notifyFlag != undefined && d.notifyFlag !=null && "" != d.notifyFlag && d.notifyFlag == 1)
+						{
+							xml+="<button onclick=\"notifyDialogre('发票审批', '${ctx}/workprojectnotify/workProjectNotify/form?id=" + d.notifyId +"&home=invoice','95%', '95%')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 审批</button>";
+						}*/
+                        if(d.canedit1 != undefined && d.canedit1 =="1")
+                        {
+                            xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogre('修改发票', '${ctx}/filialeWorkinvoice/filialeWorkinvoice/form?id=" + d.id + "','95%','95%')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改</a>";
+                        }
+                        if(d.canedit2 != undefined && d.canedit2 =="1")
+                        {
+                            xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogreModify('修改发票', '${ctx}/filialeWorkinvoice/filialeWorkinvoice/form?id=" + d.id + "&tabId=3','"+ d.id +"','95%','95%')\" class=\"layui-btn layui-btn-xs layui-bg-green\" > 修改</a>";
+                        }
+                        if(d.canedit3 != undefined && d.canedit3 =="1")
+                        {
+                            xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogreplay('重新申请发票', '${ctx}/filialeWorkinvoice/filialeWorkinvoice/form?id=" + d.id + "&tabId=4','95%','95%')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 修改</a>";
+                        }
+                        if(d.candelete != undefined && d.candelete =="1")
+                        {
+                            xml += "<a href=\"${ctx}/filialeWorkinvoice/filialeWorkinvoice/delete?id=" + d.id + "\" onclick=\"return confirmx('确认要删除该发票记录吗?', this.href)\"   class=\"layui-btn layui-btn-xs layui-bg-red\"> 删除</a>";
+                        }
+                        if(d.cancancel != undefined && d.cancancel =="1")
+                        {
+                            xml += "<a href=\"${ctx}/filialeWorkinvoice/filialeWorkinvoice/cancelInvalidate?id="+ d.id +"\" onclick=\"return confirmx('确认要强制撤回?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 撤回</a>";
+                        }
+                        /*if(d.canalter != undefined && d.canalter =="1")
+                        {
+                            xml += "<a href=\"javascript:void(0)\" onclick=\"contractOpenDialogre('变更发票管理', '${ctx}/filialeWorkinvoice/filialeWorkinvoice/alterForm?id="+ d.id +"','95%','95%')\" class=\"op-btn op-btn-revert\" ><i class=\"fa fa-edit\"></i> 变更</a>";
+                        }*/
+
+						if(d.financeFlag != undefined && d.financeFlag =="1")
+						{
+							xml +="<a href=\"javascript:void(0)\" onclick=\"receiptInvoice('发票收款', '${ctx}/filialeWorkinvoice/filialeWorkinvoice/receiptForm?id=" + d.id + "','95%','95%')\" class=\"layui-btn layui-btn-xs  layui-bg-blue\" > 收款</a>";
+							xml+="<a href=\"${ctx}/filialeWorkinvoice/filialeWorkinvoice/saveAffirmReceipt?id=" + d.id + "\" onclick=\"return confirmx('是否确认收款?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-orange\"> 确认收款</a>";
+						}
+						if(d.cancellationFlag != undefined && d.cancellationFlag =="1")
+						{
+							xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogreplay('作废发票', '${ctx}/filialeWorkinvoice/filialeWorkinvoice/cancellationForm?id=" + d.id + "&tabId=3','95%','95%')\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 作废</a>";
+						}
+						if(d.conditionCanedit != undefined && d.conditionCanedit =="1")
+						{
+							xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogreplay('作废修改发票', '${ctx}/filialeWorkinvoice/filialeWorkinvoice/cancellationForm?id=" + d.id + "&tabId=3','95%','95%')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 修改</a>";
+						}
+						if(d.conditionCanedit3 != undefined && d.conditionCanedit3 =="1")
+						{
+							xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogreplay('重新申请发票', '${ctx}/filialeWorkinvoice/filialeWorkinvoice/cancellationForm?id=" + d.id + "&tabId=4','95%','95%')\" class=\"layui-btn layui-btn-xs  layui-bg-green\" > 修改</a>";
+						}
+						if(d.conditionCandelete != undefined && d.conditionCandelete =="1")
+						{
+							xml += "<a href=\"${ctx}/filialeWorkinvoice/filialeWorkinvoice/cancellationDelete?id=" + d.id + "\" onclick=\"return confirmx('确认要删除该发票作废记录吗?', this.href)\"   class=\"layui-btn layui-btn-xs layui-bg-red\"> 删除</a>";
+						}
+						if(d.conditionCancancel != undefined && d.conditionCancancel =="1")
+						{
+							xml += "<a href=\"${ctx}/filialeWorkinvoice/filialeWorkinvoice/conditionCancelInvalidate?id="+ d.id +"\" onclick=\"return confirmx('确认要强制撤回?', this.href)\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 作废撤回</a>";
+						}
+
+						if(d.adminFlag != undefined && d.adminFlag =="1")
+						{
+							xml += "<a href=\"${ctx}/filialeWorkinvoice/filialeWorkinvoice/delete?id=" + d.id + "\" onclick=\"return confirmx('确认要删除该发票记录吗?', this.href)\"   class=\"layui-btn layui-btn-xs layui-bg-red\"> 删除</a>";
+						}
+						xml+="</div>"
+                        return xml;
+
+                    }}
+            ]]
+            ,data: [
+                <c:if test="${ not empty page.list}">
+                <c:forEach items="${page.list}" var="workInvoice" varStatus="index"><c:set var="Srole" scope="session" value="<%= UserUtils.getSelectRole().get(0).getEnname()%>"/>
+                <c:if test="${index.index != 0}">,</c:if>
+                {
+                    "index":"${index.index+1}"
+                    ,"id":"${workInvoice.id}"
+                    ,"invoiceNum":"${workInvoice.number}"
+                    ,"chargeType":"${fns:getMainDictLabels(workInvoice.chargeType,',','receipt_type', '')}"
+                    ,"billingContent":"${fns:getMainDictLabels(workInvoice.billingContent,',','billing_content', '')}"
+                    ,"invoiceType":"${workInvoice.invoiceTypeStr}"
+                    ,"projectId":"${workInvoice.project.id}"
+                    ,"projName":"${workInvoice.projectName}"
+                    ,"clientName":"${workInvoice.client.name}"
+                    ,"officeName":"${workInvoice.office.name}"
+                    ,"responsibleName":"${workInvoice.createBy.name}"
+                    ,"receiptMoney":"${workInvoice.receiptMoney}"
+                    ,"status":"${workInvoice.invoiceState}"
+					,"notifyFlag":"${workInvoice.notifyFlag}"
+					,"notifyId":"${workInvoice.notifyId}"
+					,"widNumber":"${workInvoice.widNumber}"
+					,"widTotalMoney":"${workInvoice.widTotalMoney}"
+					,"workAccountList":"${workInvoice.workAccountList}"
+					,"workAccountListStr":${fns:toJson(workInvoice.workAccountList)}
+                    ,"money":"<fmt:formatNumber value="${workInvoice.money}" pattern="##0.00"/>"
+                    ,"invoiceDate":"<fmt:formatDate value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>"
+                    ,"receiptMoneyDate":"<fmt:formatDate value="${workInvoice.receiptMoneyDate}" pattern="yyyy-MM-dd"/>"
+                    <c:if test="${workInvoice.invoiceState == 1 && fns:getUser().id == workInvoice.createBy.id}"><shiro:hasPermission name="filialeWorkInvoice:filialeWorkInvoice:edit">,"canedit1":"1"</shiro:hasPermission></c:if><%--暂存-修改--%>
+                    <c:if test="${workInvoice.invoiceState == '4' && fns:getUser().id == workInvoice.createBy.id}">,"canedit2":"1"</c:if><%--驳回--修改--%>
+                    <c:if test="${workInvoice.invoiceState == '9' && fns:getUser().id == workInvoice.createBy.id}">,"conditionCanedit":"1"</c:if><%--驳回--修改--%>
+                    <c:if test="${workInvoice.invoiceState == '11' && fns:getUser().id == workInvoice.createBy.id}">,"conditionCanedit3":"1"</c:if><%--作废撤回--修改--%>
+                    <c:if test="${workInvoice.invoiceState == '3' && fns:getUser().id == workInvoice.createBy.id}">,"canedit3":"1"</c:if><%--撤回--修改--%>
+                    <c:if test="${fns:getUser().id == workInvoice.createBy.id}"><c:if test="${workInvoice.invoiceState == '1' or workInvoice.invoiceState == '3' or workInvoice.invoiceState == '4'}"><shiro:hasPermission name="filialeWorkInvoice:filialeWorkInvoice:del">,"candelete":"1"</shiro:hasPermission></c:if></c:if>
+                    <c:if test="${fns:getUser().id == workInvoice.createBy.id}"><c:if test="${workInvoice.invoiceState == '9' || workInvoice.invoiceState == '11' }">,"conditionCandelete":"1"</c:if></c:if>
+                    <c:if test="${workInvoice.invoiceState == '2' && fns:getUser().id == workInvoice.createBy.id}">,"cancancel":"1"</c:if>
+                    <c:if test="${workInvoice.invoiceState == '6' && fns:getUser().id == workInvoice.createBy.id}">,"conditionCancancel":"1"</c:if>
+					<c:if test="${workInvoice.invoiceState == '5' && fns:getUser().id == workInvoice.createBy.id}">,"cancellationFlag":"1"</c:if>
+
+
+					<shiro:hasPermission name="filialeWorkInvoice:filialeWorkInvoice:alteredit">
+                    <c:if test="${workInvoice.invoiceState == '5'}">,"canalter":"1"</c:if>
+                    </shiro:hasPermission>
+					,"cancellation":<c:choose>
+							<c:when test="${workInvoice.invoiceState == '7'}">"是"</c:when>
+					<c:otherwise>"否"</c:otherwise>
+					</c:choose>
+					<shiro:hasPermission name="ruralProject:ruralProjectView:filialeWorkInvoiceView">
+					,"showView":1
+					</shiro:hasPermission>
+					<shiro:hasPermission name="filialeWorkInvoice:filialeWorkInvoice:receipt">
+					,"financeFlag":
+							<c:choose>
+							<c:when test="${workInvoice.invoiceState == 5 && workInvoice.receiptMoney != '是'}">"1"</c:when>
+					<c:otherwise>"0"</c:otherwise>
+					</c:choose>
+					,"moneyReceiptFlag":
+							<c:choose>
+							<c:when test="${workInvoice.invoiceState == 5 && workInvoice.receiptMoney == '是'}">"1"</c:when>
+					<c:otherwise>"0"</c:otherwise>
+					</c:choose>
+					</shiro:hasPermission>
+<%--					<shiro:hasPermission name="filialeWorkInvoice:filialeWorkInvoice:invalid">--%>
+<%--						,"cancellationFlag":--%>
+<%--							<c:choose>--%>
+<%--								<c:when test="${workInvoice.invoiceState == 5}">"1"</c:when>--%>
+<%--								<c:otherwise>"0"</c:otherwise>--%>
+<%--						</c:choose>--%>
+<%--					</shiro:hasPermission>--%>
+<%--					<shiro:hasPermission name="filialeWorkInvoice:filialeWorkInvoice:adminDel">--%>
+<%--						,"adminFlag":--%>
+<%--							<c:choose>--%>
+<%--								<c:when test="${workInvoice.invoiceState == 5}">"1"</c:when>--%>
+<%--								<c:otherwise>"0"</c:otherwise>--%>
+<%--						</c:choose>--%>
+<%--					</shiro:hasPermission>--%>
+                }
+                </c:forEach>
+                </c:if>
+            ]
+            // ,even: true
+            // ,height: 315
+        });
+
+    })
+
+    resizeListTable();/*消除由于有竖向滚动条造成table出现横向滚动条*/
+</script>
+<script>
+    resizeListWindow2();
+    $(window).resize(function(){
+        resizeListWindow2();
+    });
+</script>
+
+</body>
+</html>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1195 - 0
src/main/webapp/webpage/modules/filialeWorkInvoice/filialeWorkInvoiceModify.jsp


+ 102 - 0
src/main/webapp/webpage/modules/filialeWorkInvoice/filialeWorkInvoiceProjectView.jsp

@@ -0,0 +1,102 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>发票管理</title>
+	<meta name="decorator" content="default"/>
+	<style>
+		#workInvoiceProjectRelationList td{
+			padding-left: 0px;
+			padding-right: 0px;
+		}
+	</style>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+			  $("#inputForm").submit();
+			  return true;
+		  }
+
+		  return false;
+		}
+		$(document).ready(function() {
+			$("#name").focus();
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+		});
+	</script>
+</head>
+<body >
+<div class="single-form view-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workInvoice" action="${ctx}/filialeWorkinvoice/filialeWorkinvoice/saveAudit" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+		<form:hidden path="act.taskId"/>
+		<form:hidden path="act.taskName"/>
+		<form:hidden path="act.taskDefKey"/>
+		<form:hidden path="act.procInsId"/>
+		<form:hidden path="act.procDefId"/>
+		<form:hidden id="flag" path="act.flag"/>
+
+			<div class="form-group layui-row first lw14">
+				<div class="form-group-label"><h2>发票项目信息</h2></div>
+				<div class="layui-table-body layui-item layui-col-xs12 form-table-container"  style="padding:0px">
+					<table id="contentTables" class="table table-bordered table-condensed can-edit no-bottom-margin details">
+						<thead>
+						<tr>
+							<th width="200px"><font color="red">*</font>项目名称</th>
+							<th width="200px">合同名称</th>
+							<th width="200px">项目编号</th>
+							<th width="200px">委托方</th>
+							<th width="200px">报告号</th>
+								<%--						<th width="100px">操作</th>--%>
+						</tr>
+						</thead>
+						<tbody id="workInvoiceProjectRelationList">
+						<c:forEach items="${workInvoice.workInvoiceProjectRelationList}" var="list">
+							<tr>
+								<td>
+									<a onclick="openDialogView('查看项目', '${ctx}/ruralProject/ruralProjectView/view?id=${list.projectId}','95%', '95%')">
+									<input type="text" value="${list.projectName}" readonly="readonly"  class="form-control"/></a>
+								</td>
+								<td>
+									<input type="text" value="${list.workContractName}" readonly="readonly"  class="form-control"/>
+								</td>
+								<td style="text-align:center;">
+									<input type="text" value="${list.projectNum}" readonly="readonly"  class="form-control"/>
+								</td>
+								<td>
+									<input type="text" value="${list.clientName}" readonly="readonly"  class="form-control"/>
+								</td>
+								<td>
+									<input type="text" value="${list.reportDataNum}" readonly="readonly"  class="form-control"/>
+								</td>
+									<%--								<td class="text-center op-td" >--%>
+									<%--									{{#delBtn}}<span class="op-btn op-btn-delete" onclick="delRow(this, '#workInvoiceProjectRelationList{{idx}}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>{{/delBtn}}--%>
+									<%--								</td>--%>
+							</tr>
+						</c:forEach>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 689 - 0
src/main/webapp/webpage/modules/filialeWorkInvoice/filialeWorkInvoiceReceiptForm.jsp

@@ -0,0 +1,689 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>发票管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript" src="${ctxStatic}/layui/layui.js"></script>
+	<link rel='stylesheet' type="text/css" href="${ctxStatic}/layui/css/layui.css"/>
+	<script src="${ctxStatic}/common/html/js/script.js"></script>
+	<style>
+		td input{
+			margin-left:0px !important;
+			height: 42px !important;
+		}
+		#receiptTable td{
+			padding-left: 0px;
+			padding-right: 0px;
+		}
+		#workInvoiceProjectRelationList td{
+			padding-left: 0px;
+			padding-right: 0px;
+		}
+	</style>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+			  if(obj == 2){
+				  var length = $("#workReceiptList tr").length;
+				  var invoiceMoneyStr = $("#invoiceMoney").val();
+				  invoiceMoneyStr = invoiceMoneyStr.replace(/\,/g, "");
+				  var invoiceMoney = parseFloat(invoiceMoneyStr);
+				  if(length==0){
+					  parent.layer.msg('请录入收款信息',{icon:5});
+					  return false;
+				  }else{
+					  var moneys = 0;
+					  for(var i=0; i<length; i++) {
+						  //获取每一行的汇款金额
+						  var money = parseFloat(workReceiptList.rows[i].cells[2].getElementsByTagName("INPUT")[0].value);
+						  //计算所有汇款综合
+						  moneys = moneys+money;
+					  }
+				  }
+				  var flags=judgment();
+				  if (flags){
+					  if(moneys<invoiceMoney){
+						  layer.confirm('收款金额小于发票金额,确定收款吗?', {
+							  btn: ['确定', '关闭'],
+							  btn1: function(index, layero){
+								  var flags=judgment();
+								  if (flags){
+									  $("#inputForm").attr("action","${ctx}/filialeWorkinvoice/filialeWorkinvoice/saveAffirmReceipt");
+								  }else{
+									  return flags;
+								  }
+								  $("#inputForm").submit();
+								  top.layer.close(index);//关闭对话框。
+								  //关闭iframe页面
+								  var index = parent.layer.getFrameIndex(window.name); //获取窗口索引
+								  parent.layer.close(index);
+							  },btn2: function(index){
+							  }
+						  });
+					  }else if(moneys>invoiceMoney){
+						  parent.layer.msg('收款金额不得大于开票金额',{icon:5});
+						  return false;
+					  }else if(moneys == invoiceMoney){
+						  var flags=judgment();
+						  if (flags){
+							  $("#inputForm").attr("action","${ctx}/filialeWorkinvoice/filialeWorkinvoice/saveAffirmReceipt");
+						  }else{
+							  return flags;
+						  }
+						  $("#inputForm").submit();
+						  top.layer.close();//关闭对话框。
+						  //关闭iframe页面
+						  var index = parent.layer.getFrameIndex(window.name); //获取窗口索引
+						  parent.layer.close(index);
+					  }
+				  }else{
+					  return flags;
+				  }
+			  }else{
+			  	if(moneys > invoiceMoney){
+					parent.layer.msg('收款金额不能大于开票金额',{icon:5});
+					return false;
+				}
+				$("#inputForm").attr("action","${ctx}/filialeWorkinvoice/filialeWorkinvoice/saveReceipt");
+				  $("#inputForm").submit();
+				  return true;
+			  }
+		  }
+		}
+		$(document).ready(function() {
+			$("#name").focus();
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+
+			//方法一使用id选择器进行计算。
+			//获取输入的数字
+			//自动计算出结果并填充在相应的输入框中
+			var proceedsMoney = '${workInvoice.proceedsMoney}'
+			if(null == proceedsMoney || undefined == proceedsMoney || '' == proceedsMoney){
+				proceedsMoney = "0.00"
+			}
+			$("#proceedsMoneys").val(parseFloat(proceedsMoney).toFixed(2));
+
+			// 计算剩余应收款金额
+			// 获取开票金额
+			var money = '${workInvoice.money}'
+			var noProceedsMoneys = (parseFloat(money) - parseFloat(proceedsMoney)).toFixed(2);
+
+			$("#noProceedsMoneys").val(noProceedsMoneys);
+
+
+			laydate.render({
+				elem: '#receiptDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+				event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+				type : 'date'
+				, trigger: 'click'
+			});
+		});
+
+		function addRow1(list, idx, tpl, row){
+			var idx1 = $("#workInvoiceProjectRelationList tr").length;
+			if(list == '#workInvoiceProjectRelationList'){
+				bornTemplete1(list, idx, tpl, row, idx1);
+			}
+		}
+		function bornTemplete1(list, idx, tpl, row, idx1){
+			$(list).append(Mustache.render(tpl, {
+				idx: idx, delBtn: true, row: row,
+				order:idx1 + 1
+			}));
+			$(list+idx).find("select").each(function(){
+				$(this).val($(this).attr("data-value"));
+			});
+			$(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+				var ss = $(this).attr("data-value").split(',');
+				for (var i=0; i<ss.length; i++){
+					if($(this).val() == ss[i]){
+						$(this).attr("checked","checked");
+					}
+				}
+			});
+		}
+
+		function addRow(list, idx, tpl, row){
+			var idx1 = $("#workReceiptList tr").length;
+			bornTemplete(list, idx, tpl, row, idx1);
+		}
+
+		function bornTemplete(list, idx, tpl, row, idx1){
+			$(list).append(Mustache.render(tpl, {
+				idx: idx, delBtn: true, row: row,
+				order:idx1 + 1
+			}));
+			$(list+idx).find("select").each(function(){
+				$(this).val($(this).attr("data-value"));
+			});
+			$(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+				var ss = $(this).attr("data-value").split(',');
+				for (var i=0; i<ss.length; i++){
+					if($(this).val() == ss[i]){
+						$(this).attr("checked","checked");
+					}
+				}
+			});
+
+			laydate.render({
+				elem : (list+idx+"_receiptDate"),
+				event: 'focus',
+				type : 'date'
+				, trigger: 'click',
+				trigger: 'click'
+			});
+		}
+		function delRow(obj, prefix){
+			var id = $(prefix+"_id");
+			var delFlag = $(prefix+"_delFlag");
+			if (id.val() == ""){
+				$(obj).parent().parent().remove();
+			}else if(delFlag.val() == "0"){
+				delFlag.val("1");
+				$(obj).html("&divide;").attr("title", "撤回删除");
+				$(obj).parent().parent().addClass("error");
+				$(obj).parent().parent().addClass("hide");
+			}else if(delFlag.val() == "1"){
+				delFlag.val("0");
+				$(obj).html("&times;").attr("title", "删除");
+				$(obj).parent().parent().removeClass("error");
+			}
+
+		}
+
+		function isNumber(val){
+			if(val === "" || val ==null){
+				return false;
+			}
+			var regPos = /^\d+(\.\d+)?$/; //非负浮点数
+			var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数
+			if(regPos.test(val) || regNeg.test(val)){
+				return true;
+			}else{
+				return false;
+			}
+		}
+
+		function getProceedsMoneys(obj){
+
+			obj.value = obj.value.replace(/[^\d.]/g,""); //清除"数字"和"."以外的字符
+			obj.value = obj.value.replace(/^\./g,""); //验证第一个字符是数字
+			obj.value = obj.value.replace(/\.{2,}/g,"."); //只保留第一个, 清除多余的
+			obj.value = obj.value.replace(".","$#$").replace(/\./g,"").replace("$#$",".");
+			obj.value = obj.value.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3'); //只能输入两个小数
+
+			var proceedsMoneys = "0.00";
+			//方法一使用id选择器进行计算。
+			//获取输入的数字
+			//自动计算出结果并填充在相应的输入框中
+			var size = $("#workReceiptList tr").length;
+			for (var i = 0;i<size;i++){
+				var workReceiptMoney = $("#workReceiptList"+i+"_money").val();
+				var delFlag = $("#workReceiptList"+i+"_delFlag").val();
+				if (workReceiptMoney!=undefined && isNumber(workReceiptMoney) && delFlag==0){
+					if(proceedsMoneys==""){
+						proceedsMoneys = parseFloat(workReceiptMoney).toFixed(2);
+					}else {
+						proceedsMoneys = (parseFloat(proceedsMoneys) + parseFloat(workReceiptMoney)).toFixed(2);
+					}
+				}
+			}
+			$("#proceedsMoneys").val(proceedsMoneys);
+
+			// 计算剩余应收款金额
+			// 获取开票金额
+			var money = '${workInvoice.money}'
+			console.log(parseFloat(money))
+			console.log(parseFloat(proceedsMoneys))
+			console.log(parseFloat(money) - parseFloat(proceedsMoneys))
+			var noProceedsMoneys = (parseFloat(money) - parseFloat(proceedsMoneys)).toFixed(2);
+
+			$("#noProceedsMoneys").val(noProceedsMoneys);
+
+		}
+	</script>
+</head>
+<body >
+<div class="single-form view-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workInvoice" action="${ctx}/filialeWorkinvoice/filialeWorkinvoice/saveReceipt" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+
+			<div class="form-group layui-row first lw14">
+				<div class="form-group-label"><h2>基本信息</h2></div>
+				<div class="layui-table-body layui-item layui-col-xs12 form-table-container"  style="padding:0px">
+					<table id="contentTables" class="table table-bordered table-condensed can-edit no-bottom-margin details">
+						<thead>
+						<tr>
+							<th width="200px"><font color="red">*</font>项目名称</th>
+							<th width="200px">合同名称</th>
+							<th width="200px">项目编号</th>
+							<th width="200px">委托方</th>
+							<th width="200px">报告号</th>
+						</tr>
+						</thead>
+						<tbody id="workInvoiceProjectRelationList">
+						</tbody>
+					</table>
+					<script type="text/template" id="workInvoiceProjectRelationListTpl">//<!--
+                    <tr id="workInvoiceProjectRelationList{{idx}}">
+                        <td class="hide">
+                            <input id="workInvoiceProjectRelationList{{idx}}_invoiceId" name="workInvoiceProjectRelationList[{{idx}}].invoiceId" type="hidden" value="{{row.invoiceId}}"/>
+                            <input id="workInvoiceProjectRelationList{{idx}}_projectId" name="workInvoiceProjectRelationList[{{idx}}].projectId" type="hidden" value="{{row.projectId}}"/>
+							<input id="workInvoiceProjectRelationList{{idx}}_delFlag" name="workInvoiceProjectRelationList[{{idx}}].delFlag" type="hidden" value="0"/>
+                        </td>
+                        <td>
+							<input id="workInvoiceProjectRelationList{{idx}}_projectName"   type="text" value="{{row.projectName}}" readonly="readonly"  class="form-control"/>
+                        </td>
+                        <td>
+							<input id="workInvoiceProjectRelationList{{idx}}_workContractName"   type="text" value="{{row.workContractName}}" readonly="readonly"  class="form-control"/>
+                        </td>
+                        <td style="text-align:center;">
+							<input id="workInvoiceProjectRelationList{{idx}}_projectNum"  type="text" value="{{row.projectNum}}" readonly="readonly"  class="form-control"/>
+                        </td>
+                        <td>
+							<input id="workInvoiceProjectRelationList{{idx}}_clientName"  type="text" value="{{row.clientName}}" readonly="readonly"  class="form-control"/>
+                        </td>
+                        <td>
+							<input id="workInvoiceProjectRelationList{{idx}}_reportDataNum"  type="text" value="{{row.reportDataNum}}" readonly="readonly"  class="form-control"/>
+                        </td>
+                    </tr>//-->
+					</script>
+					<script type="text/javascript">
+						var workInvoiceProjectRelationListRowIdx = 0, workInvoiceProjectRelationListTpl = $("#workInvoiceProjectRelationListTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+						/*if($("#id").val()){
+							workInvoiceProjectRelationListRowIdx = ${fn:length(workInvoice.workInvoiceProjectRelationList)};
+						}*/
+						$(document).ready(function() {
+							var data = ${fns:toJson(workInvoice.workInvoiceProjectRelationList)};
+							for (var i=0; i<data.length; i++){
+								addRow1('#workInvoiceProjectRelationList', workInvoiceProjectRelationListRowIdx, workInvoiceProjectRelationListTpl, data[i])
+								workInvoiceProjectRelationListRowIdx = workInvoiceProjectRelationListRowIdx + 1;
+							}
+						});
+					</script>
+				</div>
+			</div>
+			<div class="form-group layui-row first lw14">
+				<div class="form-group-label"><h2>发票详情</h2></div>
+				<%--<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>上级/本公司开票:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.ext eq '0'}">本公司开票	</c:when><c:when test="${workInvoice.ext eq '1'}">上级公司开票</c:when></c:choose>"/>
+					</div>
+				</div>--%>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票类型:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true" style="background-color: #f1f1f1"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.invoiceType eq '1'}">专票</c:when><c:when test="${workInvoice.invoiceType eq '2'}">普票</c:when></c:choose>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票申请编号:</label>
+					<div class="layui-input-block">
+						<div class="input-group">
+							<input htmlEscape="false" readonly="true"  style="background-color: #f1f1f1"  class="form-control layui-input" value="${workInvoice.number}"/>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>实际开票单位:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true" style="background-color: #f1f1f1"  class="form-control layui-input" value="${workInvoice.client.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">纳税人识别号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true" style="background-color: #f1f1f1"  class="form-control layui-input" value="${workInvoice.orUnicode}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">地址:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true" style="background-color: #f1f1f1"  class="form-control layui-input" value="${workInvoice.address}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">电话:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true" style="background-color: #f1f1f1"  class="form-control layui-input" value="${workInvoice.telephone}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开户银行:</label>
+					<div class="layui-input-block  ">
+						<input htmlEscape="false" readonly="true" style="background-color: #f1f1f1"  class="form-control layui-input" value="${workInvoice.bank}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">银行账号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true" style="background-color: #f1f1f1"  class="form-control layui-input" value="${workInvoice.bankNumber}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>开票金额(元):</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true" style="background-color: #f1f1f1" id="invoiceMoney" class="form-control layui-input" value="<fmt:formatNumber value="${workInvoice.money}" pattern="##00.00"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票内容要求:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true" style="background-color: #f1f1f1"  class="form-control layui-input" value="${workInvoice.content}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票人:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true" style="background-color: #f1f1f1"  class="form-control layui-input" value="${workInvoice.drawerName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票时间:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" style="background-color: #f1f1f1" class="form-control layui-input" value="<fmt:formatDate value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">实际开票人:</label>
+					<div class="layui-input-block  with-icon">
+						<input type="text"  readonly="true" value="${workInvoice.actualDrawerName}"  class="form-control layui-input" style="background-color: #f1f1f1" >
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">对账人:</label>
+					<div class="layui-input-block  with-icon">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="${workInvoice.accountCheckingUserName}" style="background-color: #f1f1f1"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label">领票时间:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" style="background-color: #f1f1f1" class="form-control layui-input" value="<fmt:formatDate value="${workInvoice.takeDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>附件信息</h2></div>
+				<span id="attachment_title"></span>
+				<div class="layui-item layui-col-xs12" style="padding:0 16px;">
+					<table id="upTable" class="table table-bordered table-condensed details">
+						<thead>
+						<tr>
+								<%-- <th>序号</th>--%>
+							<th>文件预览</th>
+							<th>上传人</th>
+							<th>上传时间</th>
+							<th width="200px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="file_attachment">
+						<c:forEach items="${workInvoice.workAttachments}" var = "workClientAttachment" varStatus="status">
+							<tr>
+									<%-- <td>${status.index + 1}</td>--%>
+								<c:choose>
+									<c:when test="${workInvoice.uploadMode == 2}">
+										<c:choose>
+											<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+												<td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+											</c:when>
+											<c:otherwise>
+												<c:choose>
+													<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+														<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',1)">${workClientAttachment.attachmentName}</a></td>
+													</c:when>
+													<c:otherwise>
+														<c:choose>
+															<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+																<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+															</c:when>
+															<c:otherwise>
+																<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+															</c:otherwise>
+														</c:choose>
+													</c:otherwise>
+												</c:choose>
+											</c:otherwise>
+										</c:choose>
+									</c:when>
+									<c:otherwise>
+										<c:choose>
+											<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+												<td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}"></td>
+											</c:when>
+											<c:otherwise>
+												<c:choose>
+													<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+														<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',1)">${workClientAttachment.attachmentName}</a></td>
+													</c:when>
+													<c:otherwise>
+														<c:choose>
+															<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+																<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',3)">${workClientAttachment.attachmentName}</a></td>
+															</c:when>
+															<c:otherwise>
+																<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',2)">${workClientAttachment.attachmentName}</a></td>
+															</c:otherwise>
+														</c:choose>
+													</c:otherwise>
+												</c:choose>
+											</c:otherwise>
+										</c:choose>
+									</c:otherwise>
+								</c:choose>
+								<td>${workClientAttachment.createBy.name}</td>
+								<td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
+								<td class="op-td">
+									<div class="op-btn-box" >
+											<%--附件下载删除--%>
+										<c:choose>
+											<c:when test="${workInvoice.uploadMode == 2}">
+												<c:choose>
+													<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+														<a href="${workClientAttachment.temporaryUrl}" target="_blank" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+													</c:when>
+													<c:otherwise>
+														<a href="${workClientAttachment.temporaryUrl}" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+													</c:otherwise>
+												</c:choose>
+											</c:when>
+											<c:otherwise>
+												<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent('${workClientAttachment.url}');" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+											</c:otherwise>
+										</c:choose>
+										<c:if test="${workClientAttachment.collectFlag != 1}">
+											<a href="javascript:void(0)" onclick="collectingAccessory(this,'${ctx}/projectAccessory/projectAccessory/saveCollectAccessory','${workClientAttachment.url}','${workClientAttachment.createBy.id}','${workClientAttachment.fileSize}')" class="op-btn op-btn-delete" style="background-color: #FFB800"><i class="layui-icon layui-icon-rate"></i>&nbsp;收藏</a>
+										</c:if>
+
+
+									</div>
+								</td>
+							</tr>
+						</c:forEach>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>发票明细</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container">
+					<table id="contentTable" class="table table-bordered table-condensed details">
+						<thead>
+						<tr>
+							<th>发票代码</th>
+							<th>发票号</th>
+							<th>开票金额</th>
+							<th>税率</th>
+							<th>金额</th>
+							<th>税额</th>
+							<%--<th>累计登记金额</th>--%>
+							<th>发票状态</th><%--正常--%>
+							<th>被退标记</th>
+							<%--<th><span class="require-item">*</span>被退票号</th>
+							<th><span class="require-item">*</span>开票日期</th>--%>
+						</tr>
+						</thead>
+						<tbody id="workAccountList">
+						<c:if test="${not empty workInvoice.workAccountList}">
+						<c:forEach items="${workInvoice.workAccountList}" var="workAccount" varStatus="index">
+							<tr id="workAccountList${index.index}">
+								<td title="${workAccount.code}">
+										${workAccount.code}
+								</td>
+								<td title="${workAccount.number}">
+										${workAccount.number}
+								</td>
+
+								<td title="<fmt:formatNumber value="${workAccount.totalMoney}" pattern="##00.00"/>">
+									<fmt:formatNumber value="${workAccount.totalMoney}" pattern="##00.00"/>
+								</td>
+								<td title="${workAccount.tax}">
+										${workAccount.tax}
+								</td>
+								<td title="<fmt:formatNumber value="${workAccount.taxMoney}" pattern="##00.00"/>">
+									<fmt:formatNumber value="${workAccount.taxMoney}" pattern="##00.00"/>
+								</td>
+								<td title="<fmt:formatNumber value="${workAccount.taxRate}" pattern="##00.00"/>">
+									<fmt:formatNumber value="${workAccount.taxRate}" pattern="##00.00"/>
+								</td>
+								<%--<td title="<fmt:formatNumber value="${workAccount.incomeMoney}" pattern="##00.00"/>">
+									<fmt:formatNumber value="${workAccount.incomeMoney}" pattern="##00.00"/>
+								</td>--%>
+								<td title="${workAccount.state}">
+										${workAccount.state}
+								</td>
+								<td title="${workAccount.backSign}">
+										${workAccount.backSign}
+								</td>
+								<%--<td title="${workAccount.backNumber}">
+										${workAccount.backNumber}
+								</td>
+								<td title="<fmt:formatDate value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>">
+									<fmt:formatDate value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>
+								</td>--%>
+							</tr>
+						</c:forEach>
+						</c:if>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>收款明细</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container">
+					<div class="layui-item nav-btns" style="padding-left:0px;">
+						<a class="nav-btn nav-btn-add"
+						   onclick="addRow('#workReceiptList', workClientBankRowIdx, workClientBankTpl);workClientBankRowIdx = workClientBankRowIdx + 1;"
+						   title="新增"><i class="fa fa-plus"></i> 新增</a>
+					</div>
+					<table id="receiptTable" class="table table-bordered table-condensed details" style="margin-bottom: 0px">
+						<thead>
+						<tr>
+							<th><span class="require-item">*</span>汇款单位</th>
+
+							<th><span class="require-item">*</span>汇款金额</th>
+							<th width="160px"><span class="require-item">*</span>汇款时间</th>
+							<th width="100px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="workReceiptList">
+						</tbody>
+					</table>
+					<table id="proceedsMoneysTable" class="table table-bordered table-condensed can-edit no-bottom-margin details">
+						<thead>
+						<tr style="border: 0px">
+							<td style="vertical-align:middle;text-align: center;"><label><font color="red">*</font>总收款费用(元):</label></td>
+							<td style="border: 0px">
+								<input htmlEscape="false" style="border: 0px; vertical-align:middle;text-align: center; font-weight: bold;" id="proceedsMoneys" name="proceedsMoneys" readonly="true" class="form-control layui-input" value="${workInvoice.proceedsMoney}"/>
+							</td>
+							<td width="160px"></td>
+							<td width="100px"></td>
+						</tr>
+						</thead>
+					</table>
+					<table id="noProceedsMoneysTable" class="table table-bordered table-condensed can-edit no-bottom-margin details">
+						<thead>
+						<tr style="border: 0px">
+							<td style="vertical-align:middle;text-align: center;"><label><font color="red">*</font>剩余应收款费用(元):</label></td>
+							<td style="border: 0px">
+								<input htmlEscape="false" style="border: 0px; vertical-align:middle;text-align: center; font-weight: bold;" id="noProceedsMoneys" name="noProceedsMoneys" readonly="true" class="form-control layui-input" value=""/>
+							</td>
+							<td width="160px"></td>
+							<td width="100px"></td>
+						</tr>
+						</thead>
+					</table>
+					<script type="text/template" id="workClientBankTpl">//<!--
+                                <tr id="workReceiptList{{idx}}">
+                                    <td class="hide">
+                                        <input id="workReceiptList{{idx}}_id" name="workReceiptList[{{idx}}].id" type="hidden" value="{{row.id}}"/>
+                                        <input id="workReceiptList{{idx}}_delFlag" name="workReceiptList[{{idx}}].delFlag" type="hidden" value="0"/>
+                                    </td>
+                                    <td>
+                                        <input id="workReceiptList{{idx}}_companyName" placeholder="请输入汇款单位" name="workReceiptList[{{idx}}].companyName" value="{{row.companyName}}" style="text-align: center" class="form-control judgment "/>
+                                    </td>
+                                    <td>
+                                        <input id="workReceiptList{{idx}}_money" name="workReceiptList[{{idx}}].money" placeholder="请输入汇款金额" value="{{row.money}}" onchange="getProceedsMoneys(this)" style="text-align: center" class="form-control number judgment"/>
+                                    </td>
+
+                                    <td>
+                                        <input lay-verify="date" readonly="true" placeholder="yyyy-MM-dd" autocomplete="off" id="workReceiptList{{idx}}_receiptDate" name="workReceiptList[{{idx}}].receiptDate" type="text" value="{{row.receiptDate}}" style="text-align: center" class="form-control judgment datetime required"/>
+                                    </td>
+
+                                    <td class="text-center op-td" width="10">
+                                        {{#delBtn}}<span class="op-btn op-btn-delete" onclick="delRow(this, '#workReceiptList{{idx}}')" title="删除"><i class="fa fa-trash"></i>&nbsp;删除</span>{{/delBtn}}
+                                    </td>
+                                </tr>//-->
+					</script>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+<script type="text/javascript">
+	var workClientBankRowIdx = 0,
+			workClientBankTpl = $("#workClientBankTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g, "");
+	$(document).ready(function () {
+		var dataBank = ${fns:toJson(workInvoice.workReceiptList)};
+		for (var i = 0; i < dataBank.length; i++) {
+			addRow('#workReceiptList', workClientBankRowIdx, workClientBankTpl, dataBank[i]);
+			workClientBankRowIdx = workClientBankRowIdx + 1;
+		}
+	});
+
+</script>
+</body>
+</html>

+ 493 - 0
src/main/webapp/webpage/modules/filialeWorkInvoice/filialeWorkInvoiceView.jsp

@@ -0,0 +1,493 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>发票管理</title>
+	<meta name="decorator" content="default"/>
+	<style>
+		#workInvoiceProjectRelationList td{
+			padding-left: 0px;
+			padding-right: 0px;
+		}
+	</style>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+			  $("#inputForm").submit();
+			  return true;
+		  }
+
+		  return false;
+		}
+		$(document).ready(function() {
+
+			var radioVal = '${workInvoice.newDrawer}';
+			//专票必填
+			if(radioVal == 1){
+				$(".count2").hide();
+				$(".count1").show();
+			}else if(radioVal == 2){
+				$(".count1").hide();
+				$(".count2").show();
+			}
+
+			$("#name").focus();
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+		});
+	</script>
+</head>
+<body >
+<div class="single-form view-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workInvoice" action="" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+		<form:hidden path="act.taskId"/>
+		<form:hidden path="act.taskName"/>
+		<form:hidden path="act.taskDefKey"/>
+		<form:hidden path="act.procInsId"/>
+		<form:hidden path="act.procDefId"/>
+		<form:hidden id="flag" path="act.flag"/>
+
+			<div class="form-group layui-row first lw14">
+				<div class="form-group-label"><h2>基本信息</h2></div>
+				<div class="layui-table-body layui-item layui-col-xs12 form-table-container"  style="padding:0px">
+					<table id="contentTables" class="table table-bordered table-condensed can-edit no-bottom-margin details">
+						<thead>
+						<tr>
+							<th width="200px"><font color="red">*</font>项目名称</th>
+							<th width="200px">合同名称</th>
+							<th width="200px">项目编号</th>
+							<th width="200px">委托方</th>
+							<th width="200px">报告号</th>
+								<%--						<th width="100px">操作</th>--%>
+						</tr>
+						</thead>
+						<tbody id="workInvoiceProjectRelationList">
+						<c:forEach items="${workInvoice.workInvoiceProjectRelationList}" var="list">
+							<tr>
+								<td>
+									<input type="text" value="${list.projectName}" readonly="readonly"  class="form-control"/>
+								</td>
+								<td>
+									<input type="text" value="${list.workContractName}" readonly="readonly"  class="form-control"/>
+								</td>
+								<td style="text-align:center;">
+									<input type="text" value="${list.projectNum}" readonly="readonly"  class="form-control"/>
+								</td>
+								<td>
+									<input type="text" value="${list.clientName}" readonly="readonly"  class="form-control"/>
+								</td>
+								<td>
+									<input type="text" value="${list.reportDataNum}" readonly="readonly"  class="form-control"/>
+								</td>
+									<%--								<td class="text-center op-td" >--%>
+									<%--									{{#delBtn}}<span class="op-btn op-btn-delete" onclick="delRow(this, '#workInvoiceProjectRelationList{{idx}}')" title="删除"><i class="glyphicon glyphicon-remove"></i>&nbsp;删除</span>{{/delBtn}}--%>
+									<%--								</td>--%>
+							</tr>
+						</c:forEach>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="form-group layui-row first lw14">
+				<div class="form-group-label"><h2>发票详情</h2></div>
+				<%--<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>上级/本公司开票:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.ext eq '0'}">本公司开票	</c:when><c:when test="${workInvoice.ext eq '1'}">上级公司开票</c:when></c:choose>"/>
+					</div>
+				</div>--%>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票类型:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true" style="background-color: #f1f1f1"  class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.invoiceType eq '1'}">专票</c:when><c:when test="${workInvoice.invoiceType eq '2'}">普票</c:when></c:choose>"/>
+					</div>
+				</div>
+
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票类型:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"  style="background-color: #f1f1f1" id="newDrawer"  class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.newDrawer eq '1'}">企业开票</c:when><c:when test="${workInvoice.newDrawer eq '2'}">个人开票</c:when></c:choose>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 count1">
+					<label class="layui-form-label"><span class="require-item">*</span>实际开票单位:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true" style="background-color: #f1f1f1"  class="form-control layui-input" value="${workInvoice.client.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 count1">
+					<label class="layui-form-label">纳税人识别号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true" style="background-color: #f1f1f1"  class="form-control layui-input" value="${workInvoice.orUnicode}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 count1">
+					<label class="layui-form-label">注册地址:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true" style="background-color: #f1f1f1"  class="form-control layui-input" value="${workInvoice.address}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 count1">
+					<label class="layui-form-label">电话:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true" style="background-color: #f1f1f1"  class="form-control layui-input" value="${workInvoice.telephone}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 count1">
+					<label class="layui-form-label">开户银行:</label>
+					<div class="layui-input-block  ">
+						<input htmlEscape="false" readonly="true" style="background-color: #f1f1f1"  class="form-control layui-input" value="${workInvoice.bank}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6 count1">
+					<label class="layui-form-label">银行账号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true" style="background-color: #f1f1f1" class="form-control layui-input" value="${workInvoice.bankNumber}"/>
+					</div>
+				</div>
+
+				<div class="layui-item layui-col-sm6 count2">
+					<label class="layui-form-label">姓名:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   style="background-color: #f1f1f1" class="form-control layui-input" value="${workInvoice.newDrawerName}"/>
+					</div>
+				</div>
+
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">收款类型:</label>
+					<div class="layui-input-block">
+						<input id="chargeType" htmlEscape="false" readonly="true" style="background-color: #f1f1f1"  class="form-control layui-input" value="${workInvoice.chargeType}" />
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票内容:</label>
+					<div class="layui-input-block">
+						<input id="billingContent" htmlEscape="false" readonly="true"  style="background-color: #f1f1f1" class="form-control layui-input" value="${workInvoice.billingContent}" />
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>开票金额(元):</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true" style="background-color: #f1f1f1"  class="form-control layui-input" value="<fmt:formatNumber value="${workInvoice.money}" pattern="##00.00"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票内容要求:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true" style="background-color: #f1f1f1"  class="form-control layui-input" value="${workInvoice.content}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票人:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true" style="background-color: #f1f1f1"  class="form-control layui-input" value="${workInvoice.drawerName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票时间:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" style="background-color: #f1f1f1" class="form-control layui-input" value="<fmt:formatDate value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">实际开票人:</label>
+					<div class="layui-input-block  with-icon">
+						<input type="text"  readonly="true" value="${workInvoice.actualDrawerName}"  class="form-control layui-input" style="background-color: #f1f1f1" >
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">接收邮箱:</label>
+					<div class="layui-input-block  with-icon">
+						<input type="text"  readonly="true" value="${workInvoice.actualDrawerEmailAddress}"  class="form-control layui-input" style="background-color: #f1f1f1" >
+					</div>
+				</div>
+
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">对账人:</label>
+					<div class="layui-input-block  with-icon">
+						<input type="text"  readonly="true" value="${workInvoice.accountCheckingUserName}"  class="form-control layui-input" style="background-color: #f1f1f1" >
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">对账地区:</label>
+					<div class="layui-input-block  with-icon">
+						<input type="text"  readonly="true" value="${workInvoice.area.name}"  class="form-control layui-input" style="background-color: #f1f1f1" >
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">领票时间:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" style="background-color: #f1f1f1" class="form-control layui-input" value="<fmt:formatDate value="${workInvoice.takeDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12 with-textarea">
+					<label class="layui-form-label double-line">备注:</label>
+					<div class="layui-input-block">
+						<form:textarea path="remarks" readonly="true" htmlEscape="false" rows="4" class="form-control" style="background-color: #f1f1f1" />
+					</div>
+				</div>
+
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>附件信息</h2></div>
+				<span id="attachment_title"></span>
+				<div class="layui-item layui-col-xs12" style="padding:0 16px;">
+					<table id="upTable" class="table table-bordered table-condensed details">
+						<thead>
+						<tr>
+								<%-- <th>序号</th>--%>
+							<th>文件预览</th>
+							<th>上传人</th>
+							<th>上传时间</th>
+							<th width="200px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="file_attachment">
+						<c:forEach items="${workInvoice.workAttachments}" var = "workClientAttachment" varStatus="status">
+							<tr>
+									<%-- <td>${status.index + 1}</td>--%>
+								<c:choose>
+									<c:when test="${workInvoice.uploadMode == 2}">
+										<c:choose>
+											<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+												<td><img src="${workClientAttachment.temporaryUrl}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.temporaryUrl}','90%','90%')" alt="${workClientAttachment.attachmentName}">
+											</c:when>
+											<c:otherwise>
+												<c:choose>
+													<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+														<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',1)">${workClientAttachment.attachmentName}</a></td>
+													</c:when>
+													<c:otherwise>
+														<c:choose>
+															<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+																<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',3)">${workClientAttachment.attachmentName}</a></td>
+															</c:when>
+															<c:otherwise>
+																<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.temporaryUrl}',2)">${workClientAttachment.attachmentName}</a></td>
+															</c:otherwise>
+														</c:choose>
+													</c:otherwise>
+												</c:choose>
+											</c:otherwise>
+										</c:choose>
+									</c:when>
+									<c:otherwise>
+										<c:choose>
+											<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+												<td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}"></td>
+											</c:when>
+											<c:otherwise>
+												<c:choose>
+													<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+														<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',1)">${workClientAttachment.attachmentName}</a></td>
+													</c:when>
+													<c:otherwise>
+														<c:choose>
+															<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'rar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'zip')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jar')
+                                                       or fn:containsIgnoreCase(workClientAttachment.attachmentName,'7z')}">
+																<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',3)">${workClientAttachment.attachmentName}</a></td>
+															</c:when>
+															<c:otherwise>
+																<td><a class="attention-info" href="javascript:void(0)" onclick="openPreview('${workClientAttachment.url}',2)">${workClientAttachment.attachmentName}</a></td>
+															</c:otherwise>
+														</c:choose>
+													</c:otherwise>
+												</c:choose>
+											</c:otherwise>
+										</c:choose>
+									</c:otherwise>
+								</c:choose>
+								<td>${workClientAttachment.createBy.name}</td>
+								<td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
+								<td class="op-td">
+									<div class="op-btn-box" >
+											<%--附件下载删除--%>
+										<c:choose>
+											<c:when test="${workInvoice.uploadMode == 2}">
+												<c:choose>
+													<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+														<a href="${workClientAttachment.temporaryUrl}" target="_blank" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+													</c:when>
+													<c:otherwise>
+														<a href="${workClientAttachment.temporaryUrl}" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+													</c:otherwise>
+												</c:choose>
+											</c:when>
+											<c:otherwise>
+												<a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent('${workClientAttachment.url}');" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+											</c:otherwise>
+										</c:choose>
+										<c:if test="${workClientAttachment.collectFlag != 1}">
+											<a href="javascript:void(0)" onclick="collectingAccessory(this,'${ctx}/projectAccessory/projectAccessory/saveCollectAccessory','${workClientAttachment.url}','${workClientAttachment.createBy.id}','${workClientAttachment.fileSize}')" class="op-btn op-btn-delete" style="background-color: #FFB800"><i class="layui-icon layui-icon-rate"></i>&nbsp;收藏</a>
+										</c:if>
+
+
+									</div>
+								</td>
+							</tr>
+						</c:forEach>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>发票明细</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container">
+					<table id="contentTable" class="table table-bordered table-condensed details">
+						<thead>
+						<tr>
+							<th>发票代码</th>
+							<th><span class="require-item">*</span>发票号</th>
+							<th><span class="require-item">*</span>开票金额</th>
+							<th>税率</th>
+							<th>金额</th>
+							<th>税额</th>
+							<%--<th>累计登记金额</th>--%>
+							<th>发票状态</th><%--正常--%>
+							<th>被退标记</th>
+							<%--<th><span class="require-item">*</span>被退票号</th>
+							<th><span class="require-item">*</span>开票日期</th>--%>
+						</tr>
+						</thead>
+						<tbody id="workAccountList">
+						<c:if test="${not empty workInvoice.workAccountList}">
+						<c:forEach items="${workInvoice.workAccountList}" var="workAccount" varStatus="index">
+							<tr id="workAccountList${index.index}">
+								<td title="${workAccount.code}">
+										${workAccount.code}
+								</td>
+								<td title="${workAccount.number}">
+										${workAccount.number}
+								</td>
+
+								<td title="<fmt:formatNumber value="${workAccount.totalMoney}" pattern="##00.00"/>">
+									<fmt:formatNumber value="${workAccount.totalMoney}" pattern="##00.00"/>
+								</td>
+								<td title="${workAccount.tax}">
+										${workAccount.tax}
+								</td>
+								<td title="<fmt:formatNumber value="${workAccount.taxMoney}" pattern="#,#00.00"/>">
+									<fmt:formatNumber value="${workAccount.taxMoney}" pattern="##00.00"/>
+								</td>
+								<td title="<fmt:formatNumber value="${workAccount.taxRate}" pattern="#,#00.00"/>">
+									<fmt:formatNumber value="${workAccount.taxRate}" pattern="##00.00"/>
+								</td>
+								<%--<td title="<fmt:formatNumber value="${workAccount.incomeMoney}" pattern="#,#00.00"/>">
+									<fmt:formatNumber value="${workAccount.incomeMoney}" pattern="##00.00"/>
+								</td>--%>
+								<td title="${workAccount.state}">
+										${workAccount.state}
+								</td>
+								<td title="${workAccount.backSign}">
+										${workAccount.backSign}
+								</td>
+								<%--<td title="${workAccount.backNumber}">
+										${workAccount.backNumber}
+								</td>
+								<td title="<fmt:formatDate value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>">
+									<fmt:formatDate value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>
+								</td>--%>
+							</tr>
+						</c:forEach>
+						</c:if>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+			<div class="form-group-label"><h2>收款明细</h2></div>
+			<div class="layui-item layui-col-xs12 form-table-container">
+				<table id="receiptTable" class="table table-bordered table-condensed details" style="margin-bottom: 0px">
+					<thead>
+					<tr>
+						<th><span class="require-item">*</span>汇款单位</th>
+						<th><span class="require-item">*</span>汇款金额</th>
+						<th width="160px"><span class="require-item">*</span>汇款时间</th>
+					</tr>
+					</thead>
+					<tbody id="workReceiptList">
+					<c:if test="${not empty workInvoice.workReceiptList}">
+						<c:forEach items="${workInvoice.workReceiptList}" var="receipt" varStatus="index">
+							<tr id="workAccountList${index.index}">
+								<td title="${receipt.companyName}">
+										${receipt.companyName}
+								</td>
+
+								<td title="<fmt:formatNumber value="${receipt.money}" pattern="#,#00.00"/>">
+									<fmt:formatNumber value="${receipt.money}" pattern="#,#00.00"/>
+								</td>
+								<td title="${receipt.receiptDate}">
+										${receipt.receiptDate}
+								</td>
+							</tr>
+						</c:forEach>
+					</c:if>
+					</tbody>
+				</table>
+				<table id="proceedsMoneysTable" class="table table-bordered table-condensed can-edit no-bottom-margin details">
+					<thead>
+					<tr style="border: 0px">
+						<td style="vertical-align:middle;text-align: center;"><label><font color="red">*</font>总收款费用(元):</label></td>
+						<td style="border: 0px;vertical-align:middle;text-align: center;">
+								${workInvoice.proceedsMoney}
+						</td>
+						<td width="160px"></td>
+					</tr>
+					</thead>
+				</table>
+				<table id="noProceedsMoneysTable" class="table table-bordered table-condensed can-edit no-bottom-margin details">
+					<thead>
+					<tr style="border: 0px">
+						<td style="vertical-align:middle;text-align: center;"><label><font color="red">*</font>剩余应收款费用(元):</label></td>
+						<td style="border: 0px;vertical-align:middle;text-align: center;">
+								${workInvoice.noProceedsMoney}
+						</td>
+						<td width="160px"></td>
+					</tr>
+					</thead>
+				</table>
+
+			</div>
+		</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>${projectNotifyType}审批流程</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container" >
+					<act:flowChart procInsId="${workInvoice.act.procInsId}"/>
+					<act:histoicFlow procInsId="${workInvoice.act.procInsId}" />
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 5 - 5
src/main/webapp/webpage/modules/workinvoice/workInvoiceAllForm.jsp

@@ -1188,7 +1188,7 @@
 					</div>
 				</div>
 			</div>
-			<div class="form-group layui-row">
+			<%--<div class="form-group layui-row">
 				<div class="form-group-label"><h2>附件信息</h2></div>
 				<div class="layui-item nav-btns">
 					<a id="attachment_btn" class="nav-btn nav-btn-add" title="添加附件"><i class="fa fa-plus"></i>&nbsp;添加附件</a>
@@ -1211,7 +1211,7 @@
 					<table id="upTable" class="table table-bordered table-condensed details">
 						<thead>
 						<tr>
-								<%-- <th>序号</th>--%>
+								&lt;%&ndash; <th>序号</th>&ndash;%&gt;
 							<th>文件预览</th>
 							<th>上传人</th>
 							<th>上传时间</th>
@@ -1221,7 +1221,7 @@
 						<tbody id="file_attachment">
 						<c:forEach items="${workInvoice.workAttachments}" var = "workClientAttachment" varStatus="status">
 							<tr>
-									<%-- <td>${status.index + 1}</td>--%>
+									&lt;%&ndash; <td>${status.index + 1}</td>&ndash;%&gt;
 								<c:choose>
 									<c:when test="${workInvoice.uploadMode == 2}">
 										<c:choose>
@@ -1290,7 +1290,7 @@
 								<td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
 								<td class="op-td">
 									<div class="op-btn-box" >
-											<%--附件下载删除--%>
+											&lt;%&ndash;附件下载删除&ndash;%&gt;
 										<c:choose>
 											<c:when test="${workInvoice.uploadMode == 2}">
 												<c:choose>
@@ -1320,7 +1320,7 @@
 						</tbody>
 					</table>
 				</div>
-			</div>
+			</div>--%>
 			<div class="form-group layui-row">
 				<div class="form-group-label"><h2>发票明细</h2></div>
 				<div class="layui-item layui-col-xs12 form-table-container">

+ 5 - 5
src/main/webapp/webpage/modules/workinvoice/workInvoiceAllModify.jsp

@@ -1076,7 +1076,7 @@
 					</div>
 				</div>
 			</div>
-			<div class="form-group layui-row">
+			<%--<div class="form-group layui-row">
 				<div class="form-group-label"><h2>附件信息</h2></div>
 				<div class="layui-item nav-btns">
 					<a id="attachment_btn" class="nav-btn nav-btn-add" title="添加附件"><i class="fa fa-plus"></i>&nbsp;添加附件</a>
@@ -1099,7 +1099,7 @@
 					<table id="upTable" class="table table-bordered table-condensed details">
 						<thead>
 						<tr>
-								<%-- <th>序号</th>--%>
+								&lt;%&ndash; <th>序号</th>&ndash;%&gt;
 							<th>文件预览</th>
 							<th>上传人</th>
 							<th>上传时间</th>
@@ -1109,7 +1109,7 @@
 						<tbody id="file_attachment">
 						<c:forEach items="${workInvoice.workAttachments}" var = "workClientAttachment" varStatus="status">
 							<tr>
-									<%-- <td>${status.index + 1}</td>--%>
+									&lt;%&ndash; <td>${status.index + 1}</td>&ndash;%&gt;
 								<c:choose>
 									<c:when test="${workInvoice.uploadMode == 2}">
 										<c:choose>
@@ -1178,7 +1178,7 @@
 								<td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
 								<td class="op-td">
 									<div class="op-btn-box" >
-											<%--附件下载删除--%>
+											&lt;%&ndash;附件下载删除&ndash;%&gt;
 										<c:choose>
 											<c:when test="${workInvoice.uploadMode == 2}">
 												<c:choose>
@@ -1208,7 +1208,7 @@
 						</tbody>
 					</table>
 				</div>
-			</div>
+			</div>--%>
 			<div class="form-group layui-row">
 				<div class="form-group-label"><h2>发票明细</h2></div>
 				<div class="layui-item layui-col-xs12 form-table-container">

+ 5 - 5
src/main/webapp/webpage/modules/workinvoice/workInvoiceAllTwoForm.jsp

@@ -1155,7 +1155,7 @@
 					</div>
 				</div>
 			</div>
-			<div class="form-group layui-row">
+			<%--<div class="form-group layui-row">
 				<div class="form-group-label"><h2>附件信息</h2></div>
 				<div class="layui-item nav-btns">
 					<a id="attachment_btn" class="nav-btn nav-btn-add" title="添加附件"><i class="fa fa-plus"></i>&nbsp;添加附件</a>
@@ -1178,7 +1178,7 @@
 					<table id="upTable" class="table table-bordered table-condensed details">
 						<thead>
 						<tr>
-								<%-- <th>序号</th>--%>
+								&lt;%&ndash; <th>序号</th>&ndash;%&gt;
 							<th>文件预览</th>
 							<th>上传人</th>
 							<th>上传时间</th>
@@ -1188,7 +1188,7 @@
 						<tbody id="file_attachment">
 						<c:forEach items="${workInvoice.workAttachments}" var = "workClientAttachment" varStatus="status">
 							<tr>
-									<%-- <td>${status.index + 1}</td>--%>
+									&lt;%&ndash; <td>${status.index + 1}</td>&ndash;%&gt;
 								<c:choose>
 									<c:when test="${workInvoice.uploadMode == 2}">
 										<c:choose>
@@ -1257,7 +1257,7 @@
 								<td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
 								<td class="op-td">
 									<div class="op-btn-box" >
-											<%--附件下载删除--%>
+											&lt;%&ndash;附件下载删除&ndash;%&gt;
 										<c:choose>
 											<c:when test="${workInvoice.uploadMode == 2}">
 												<c:choose>
@@ -1287,7 +1287,7 @@
 						</tbody>
 					</table>
 				</div>
-			</div>
+			</div>--%>
 			<div class="form-group layui-row">
 				<div class="form-group-label"><h2>发票明细</h2></div>
 				<div class="layui-item layui-col-xs12 form-table-container">

+ 2 - 2
src/main/webapp/webpage/modules/workinvoice/workInvoiceAuditEnd.jsp

@@ -718,8 +718,8 @@
 			<div>
 
 					<%--嵌入子页面--%>
-				<iframe id="orgContent" src="" style="border:1px dashed #000;" width="100%" height="450px" frameborder="0">
-				</iframe>
+				<%--<iframe id="orgContent" src="" style="border:1px dashed #000;" width="100%" height="450px" frameborder="0">
+				</iframe>--%>
 
 			</div>
 <%--			<div class="form-group layui-row">--%>

+ 5 - 5
src/main/webapp/webpage/modules/workinvoice/workInvoiceExamineModify.jsp

@@ -905,7 +905,7 @@
 					</div>
 				</div>
 			</div>
-			<div class="form-group layui-row">
+			<%--<div class="form-group layui-row">
 				<div class="form-group-label"><h2>附件信息</h2></div>
 				<div class="layui-item nav-btns">
 					<a id="attachment_btn" class="nav-btn nav-btn-add" title="添加附件"><i class="fa fa-plus"></i>&nbsp;添加附件</a>
@@ -928,7 +928,7 @@
 					<table id="upTable" class="table table-bordered table-condensed details">
 						<thead>
 						<tr>
-								<%-- <th>序号</th>--%>
+								&lt;%&ndash; <th>序号</th>&ndash;%&gt;
 							<th>文件预览</th>
 							<th>上传人</th>
 							<th>上传时间</th>
@@ -938,7 +938,7 @@
 						<tbody id="file_attachment">
 						<c:forEach items="${workInvoice.workAttachments}" var = "workClientAttachment" varStatus="status">
 							<tr>
-									<%-- <td>${status.index + 1}</td>--%>
+									&lt;%&ndash; <td>${status.index + 1}</td>&ndash;%&gt;
 								<c:choose>
 									<c:when test="${workInvoice.uploadMode == 2}">
 										<c:choose>
@@ -1007,7 +1007,7 @@
 								<td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
 								<td class="op-td">
 									<div class="op-btn-box" >
-											<%--附件下载删除--%>
+											&lt;%&ndash;附件下载删除&ndash;%&gt;
 										<c:choose>
 											<c:when test="${workInvoice.uploadMode == 2}">
 												<c:choose>
@@ -1037,7 +1037,7 @@
 						</tbody>
 					</table>
 				</div>
-			</div>
+			</div>--%>
 			<div class="form-group layui-row">
 				<div class="form-group-label"><h2>发票明细</h2></div>
 				<div class="layui-item layui-col-xs12 form-table-container">

+ 2 - 2
src/main/webapp/webpage/modules/workinvoice/workInvoiceNotProjectAuditEnd.jsp

@@ -700,8 +700,8 @@
 			<div>
 
 					<%--嵌入子页面--%>
-				<iframe id="orgContent" src="" style="border:1px dashed #000;" width="100%" height="450px" frameborder="0">
-				</iframe>
+				<%--<iframe id="orgContent" src="" style="border:1px dashed #000;" width="100%" height="450px" frameborder="0">
+				</iframe>--%>
 
 			</div>
 		</div>

+ 5 - 5
src/main/webapp/webpage/modules/workinvoice/workInvoiceNotProjectModify.jsp

@@ -1062,7 +1062,7 @@
 					</div>
 				</div>
 			</div>
-			<div class="form-group layui-row">
+			<%--<div class="form-group layui-row">
 				<div class="form-group-label"><h2>附件信息</h2></div>
 				<div class="layui-item nav-btns">
 					<a id="attachment_btn" class="nav-btn nav-btn-add" title="添加附件"><i class="fa fa-plus"></i>&nbsp;添加附件</a>
@@ -1085,7 +1085,7 @@
 					<table id="upTable" class="table table-bordered table-condensed details">
 						<thead>
 						<tr>
-								<%-- <th>序号</th>--%>
+								&lt;%&ndash; <th>序号</th>&ndash;%&gt;
 							<th>文件预览</th>
 							<th>上传人</th>
 							<th>上传时间</th>
@@ -1095,7 +1095,7 @@
 						<tbody id="file_attachment">
 						<c:forEach items="${workInvoice.workAttachments}" var = "workClientAttachment" varStatus="status">
 							<tr>
-									<%-- <td>${status.index + 1}</td>--%>
+									&lt;%&ndash; <td>${status.index + 1}</td>&ndash;%&gt;
 								<c:choose>
 									<c:when test="${workInvoice.uploadMode == 2}">
 										<c:choose>
@@ -1164,7 +1164,7 @@
 								<td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
 								<td class="op-td">
 									<div class="op-btn-box" >
-											<%--附件下载删除--%>
+											&lt;%&ndash;附件下载删除&ndash;%&gt;
 										<c:choose>
 											<c:when test="${workInvoice.uploadMode == 2}">
 												<c:choose>
@@ -1194,7 +1194,7 @@
 						</tbody>
 					</table>
 				</div>
-			</div>
+			</div>--%>
 			<div class="form-group layui-row">
 				<div class="form-group-label"><h2>发票明细</h2></div>
 				<div class="layui-item layui-col-xs12 form-table-container">

+ 14 - 14
src/main/webapp/webpage/modules/workinvoice/workInvoiceTwoForm.jsp

@@ -1253,7 +1253,7 @@
 				</iframe>
 
 			</div>--%>
-			<div class="form-group layui-row">
+			<%--<div class="form-group layui-row">
 				<div class="form-group-label"><h2>附件信息</h2></div>
 				<div class="layui-item nav-btns">
 					<a id="attachment_btn" class="nav-btn nav-btn-add" title="添加附件"><i class="fa fa-plus"></i>&nbsp;添加附件</a>
@@ -1276,7 +1276,7 @@
 					<table id="upTable" class="table table-bordered table-condensed details">
 						<thead>
 						<tr>
-								<%-- <th>序号</th>--%>
+								&lt;%&ndash; <th>序号</th>&ndash;%&gt;
 							<th>文件预览</th>
 							<th>上传人</th>
 							<th>上传时间</th>
@@ -1286,7 +1286,7 @@
 						<tbody id="file_attachment">
 						<c:forEach items="${workInvoice.workAttachments}" var = "workClientAttachment" varStatus="status">
 							<tr>
-									<%-- <td>${status.index + 1}</td>--%>
+									&lt;%&ndash; <td>${status.index + 1}</td>&ndash;%&gt;
 								<c:choose>
 									<c:when test="${workInvoice.uploadMode == 2}">
 										<c:choose>
@@ -1355,7 +1355,7 @@
 								<td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
 								<td class="op-td">
 									<div class="op-btn-box" >
-											<%--附件下载删除--%>
+											&lt;%&ndash;附件下载删除&ndash;%&gt;
 										<c:choose>
 											<c:when test="${workInvoice.uploadMode == 2}">
 												<c:choose>
@@ -1385,7 +1385,7 @@
 						</tbody>
 					</table>
 				</div>
-			</div>
+			</div>--%>
 
 			<div class="form-group layui-row">
 				<div class="form-group-label"><h2>发票明细</h2></div>
@@ -1413,35 +1413,35 @@
                                             <input id="workAccountList{{idx}}_delFlag" name="workAccountList[{{idx}}].delFlag" type="hidden" value="0"/>
                                         </td>
                                     	<td>
-                                        	<input id="workAccountList{{idx}}_code" name="workAccountList[{{idx}}].code" type="text" value="{{row.code}}"    class="form-control judgment"/>
+                                        	<input id="workAccountList{{idx}}_code" name="workAccountList[{{idx}}].code" type="text" value="{{row.code}}"    class="form-control "/>
                                    		 </td>
                                     	 <td>
-                                        	<input id="workAccountList{{idx}}_number" name="workAccountList[{{idx}}].number" type="text" value="{{row.number}}"    class="form-control judgment"/>
+                                        	<input id="workAccountList{{idx}}_number" name="workAccountList[{{idx}}].number" type="text" value="{{row.number}}"    class="form-control "/>
                                    		 </td>
                                     	<td>
-                                            <input id="workAccountList{{idx}}_totalMoney"  name="workAccountList[{{idx}}].totalMoney" type="text" value="{{row.totalMoney}}"    class="form-control judgment"/>
+                                            <input id="workAccountList{{idx}}_totalMoney"  name="workAccountList[{{idx}}].totalMoney" type="text" value="{{row.totalMoney}}"    class="form-control "/>
                                         </td>
                                         <td>
                                         <div class="input-group">
-                                            <input id="workAccountList{{idx}}_tax" onblur="setTaxMoney(this)" name="workAccountList[{{idx}}].tax" type="text" value="{{row.tax}}"    class="form-control number judgment"/><span class="input-group-addon">%</span>
+                                            <input id="workAccountList{{idx}}_tax" onblur="setTaxMoney(this)" name="workAccountList[{{idx}}].tax" type="text" value="{{row.tax}}"    class="form-control number "/><span class="input-group-addon">%</span>
                                             </div>
 
                                         </td>
                                         <td>
-                                            <input id="workAccountList{{idx}}_taxMoney" name="workAccountList[{{idx}}].taxMoney" type="text" value="{{row.taxMoney}}"    class="form-control judgment"/>
+                                            <input id="workAccountList{{idx}}_taxMoney" name="workAccountList[{{idx}}].taxMoney" type="text" value="{{row.taxMoney}}"    class="form-control "/>
                                         </td>
 										<td>
-                                            <input id="workAccountList{{idx}}_taxRate" name="workAccountList[{{idx}}].taxRate" type="text" value="{{row.taxRate}}"    class="form-control judgment"/>
+                                            <input id="workAccountList{{idx}}_taxRate" name="workAccountList[{{idx}}].taxRate" type="text" value="{{row.taxRate}}"    class="form-control "/>
                                         </td>
                                         <%--<td>
-                                            <input id="workAccountList{{idx}}_incomeMoney" name="workAccountList[{{idx}}].incomeMoney" type="text" value="0"  readonly="true"  class="form-control judgment"/>
+                                            <input id="workAccountList{{idx}}_incomeMoney" name="workAccountList[{{idx}}].incomeMoney" type="text" value="0"  readonly="true"  class="form-control "/>
                                         </td>--%>
 
                                             <input id="workAccountList{{idx}}_state" name="workAccountList[{{idx}}].state"  type="hidden" value="正常"   class="form-control"/>
 
-                                            <input id="workAccountList{{idx}}_backSign" name="workAccountList[{{idx}}].backSign"  type="hidden" value="正常"  readonly="true"  class="form-control judgment"/>
+                                            <input id="workAccountList{{idx}}_backSign" name="workAccountList[{{idx}}].backSign"  type="hidden" value="正常"  readonly="true"  class="form-control "/>
 
-                                            <input id="workAccountList{{idx}}_backNumber" name="workAccountList[{{idx}}].backNumber"  type="hidden" value=""  readonly="true"  class="form-control judgment"/>
+                                            <input id="workAccountList{{idx}}_backNumber" name="workAccountList[{{idx}}].backNumber"  type="hidden" value=""  readonly="true"  class="form-control "/>
 
 
                                         <td class="text-center op-td">

+ 51 - 2
src/main/webapp/webpage/modules/workinvoice/workInvoiceTwoList.jsp

@@ -144,6 +144,45 @@
             });
         }
 
+        function openElectronicInvoiceDialogreplay(title,url,width,height,target){
+
+            if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
+                width='auto';
+                height='auto';
+            }else{//如果是PC端,根据用户设置的width和height显示。
+
+            }
+            top.layer.open({
+                type: 2,
+                area: [width, height],
+                title: title,
+                maxmin: true, //开启最大化最小化按钮
+                content: url ,
+                skin:"two-btns",
+                btn: ['提交','关闭'],
+                yes: function(index, layero){
+                    var body = top.layer.getChildFrame('body', index);
+                    var iframeWin = layero.find('iframe')[0]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
+                    var inputForm = body.find('#inputForm');
+                    var top_iframe;
+                    if(target){
+                        top_iframe = target;//如果指定了iframe,则在改frame中跳转
+                    }else{
+                        top_iframe = top.getActiveTab().attr("name");//获取当前active的tab的iframe
+                    }
+                    inputForm.attr("target",top_iframe);//表单提交成功后,从服务器返回的url在当前tab中展示
+
+                    if(iframeWin.contentWindow.doSubmit() ){
+                        top.layer.close(index);//关闭对话框。
+                        //setTimeout(function(){top.layer.close(index)}, 100);//延时0.1秒,对应360 7.1版本bug
+                    }
+
+                },
+                cancel: function(index){
+                }
+            });
+        }
+
         function receiptInvoice(title,url,width,height,target){
 
             if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){//如果是移动端,就使用自适应大小弹窗
@@ -773,7 +812,15 @@
 						return xml;
 					}}
 				,{field:'cancellation',align:'center', title: '是否作废',  width:80}
-                ,{align:'center', title: '状态', fixed: 'right', width:70,templet:function(d){
+				,{field:'electronicInvoiceFlag',align:'center',fixed: 'right', title: '电子发票状态',  width:90,templet:function(d){
+						if("1" === d.electronicInvoiceFlag)
+							var xml = "<a class=\"status-label status-label-signed\" title=\"已上传\"href=\"javascript:void(0);\" onclick=\"openDialogListView('查看发票信息', '${ctx}/workinvoiceAll/workInvoiceAll/form?id=" + d.id + "&tabId=1','"+ d.id +"','95%', '95%')\">已上传</a>";
+
+						else
+							var xml = "<span style=\"cursor:default;\" class=\"status-label status-label-" + '未上传' + "\" >未上传</span>";
+						return xml;
+					}}
+                ,{align:'center', title: '审核状态', fixed: 'right', width:70,templet:function(d){
                         <%--var st = getAuditState(d.status);--%>
 
                         <%--var xml = "<span onclick=\"openDialogView('流程追踪', '${ctx}/workinvoice/workInvoice/getProcessOne?id=" + d.id + "','95%','95%')\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";--%>
@@ -785,7 +832,7 @@
                             var xml = "<span style=\"cursor:default;\" class=\"status-label status-label-" + st.label + "\" >" + st.status + "</span>";
                         return xml;
                     }}
-                ,{field:'op',align:'center',title:"操作",fixed: 'right',width:130,templet:function(d){
+                ,{field:'op',align:'center',title:"操作",fixed: 'right',width:140,templet:function(d){
                         ////对操作进行初始化
                         var xml="<div class=\"layui-btn-group\">";
 
@@ -824,6 +871,7 @@
 						}
 						if(d.cancellationFlag != undefined && d.cancellationFlag =="1")
 						{
+							xml +="<a href=\"javascript:void(0)\" onclick=\"openElectronicInvoiceDialogreplay('上传电子发票', '${ctx}/workinvoiceTwo/workinvoiceTwo/electronicInvoiceForm?id=" + d.id + "','95%','95%')\" class=\"layui-btn layui-btn-xs layui-bg-blue\" > 上传电子发票</a>";
 							xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogreplay('作废发票', '${ctx}/workinvoiceTwo/workinvoiceTwo/cancellationForm?id=" + d.id + "&tabId=3','95%','95%')\" class=\"layui-btn layui-btn-xs layui-bg-red\" > 作废</a>";
 						}
 						if(d.conditionCanedit != undefined && d.conditionCanedit =="1")
@@ -875,6 +923,7 @@
 					,"widNumber":"${workInvoice.widNumber}"
 					,"widTotalMoney":"${workInvoice.widTotalMoney}"
 					,"workAccountList":"${workInvoice.workAccountList}"
+					,"electronicInvoiceFlag":"${workInvoice.electronicInvoiceFlag}"
 					,"workAccountListStr":${fns:toJson(workInvoice.workAccountList)}
                     ,"money":"<fmt:formatNumber value="${workInvoice.money}" pattern="##0.00"/>"
                     ,"invoiceDate":"<fmt:formatDate value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>"

+ 5 - 5
src/main/webapp/webpage/modules/workinvoice/workInvoiceTwoModify.jsp

@@ -1086,7 +1086,7 @@
 					</div>
 				</div>
 			</div>
-			<div class="form-group layui-row">
+			<%--<div class="form-group layui-row">
 				<div class="form-group-label"><h2>附件信息</h2></div>
 				<div class="layui-item nav-btns">
 					<a id="attachment_btn" class="nav-btn nav-btn-add" title="添加附件"><i class="fa fa-plus"></i>&nbsp;添加附件</a>
@@ -1109,7 +1109,7 @@
 					<table id="upTable" class="table table-bordered table-condensed details">
 						<thead>
 						<tr>
-								<%-- <th>序号</th>--%>
+								&lt;%&ndash; <th>序号</th>&ndash;%&gt;
 							<th>文件预览</th>
 							<th>上传人</th>
 							<th>上传时间</th>
@@ -1119,7 +1119,7 @@
 						<tbody id="file_attachment">
 						<c:forEach items="${workInvoice.workAttachments}" var = "workClientAttachment" varStatus="status">
 							<tr>
-									<%-- <td>${status.index + 1}</td>--%>
+									&lt;%&ndash; <td>${status.index + 1}</td>&ndash;%&gt;
 								<c:choose>
 									<c:when test="${workInvoice.uploadMode == 2}">
 										<c:choose>
@@ -1188,7 +1188,7 @@
 								<td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
 								<td class="op-td">
 									<div class="op-btn-box" >
-											<%--附件下载删除--%>
+											&lt;%&ndash;附件下载删除&ndash;%&gt;
 										<c:choose>
 											<c:when test="${workInvoice.uploadMode == 2}">
 												<c:choose>
@@ -1218,7 +1218,7 @@
 						</tbody>
 					</table>
 				</div>
-			</div>
+			</div>--%>
 			<div class="form-group layui-row">
 				<div class="form-group-label"><h2>发票明细</h2></div>
 				<div class="layui-item layui-col-xs12 form-table-container">

+ 1 - 1
src/main/webapp/webpage/modules/workinvoice/workInvoiceView.jsp

@@ -245,7 +245,7 @@
 
 			</div>
 			<div class="form-group layui-row">
-				<div class="form-group-label"><h2>附件信息</h2></div>
+				<div class="form-group-label"><h2>电子发票附件信息</h2></div>
 				<span id="attachment_title"></span>
 				<div class="layui-item layui-col-xs12" style="padding:0 16px;">
 					<table id="upTable" class="table table-bordered table-condensed details">

+ 19 - 8
src/main/webapp/webpage/modules/workreimbursement/new/workReimbursementElectronicInvoiceReimbursementModifyApply.jsp

@@ -139,6 +139,17 @@
                 parent.layer.msg("请添加报销详情!", {icon: 5});
                 return false;
             }
+            //判断报销类型是否为电子报销
+            var reimbursementType=$('input:radio[name="reimbursementType"]:checked').val();
+
+            if(reimbursementType == '1'){
+                var list = "${workReimbursement.workAttachmentInvoiceReimbursements}";
+                var files = $("#attachment_file_InvoiceReimbursement")[0].files;
+                if(files.length == 0){
+                    parent.layer.msg("请上传电子发票xml文件!", {icon: 5});
+                    flags= false;
+                }
+            }
 
             var electronicInvoiceArr = $("#reimbursementElectronicInvoiceVATTaxes tr:visible");
             if(electronicInvoiceArr.length>0){
@@ -146,7 +157,7 @@
                 var countFlag = 0;
                 var list = "${workReimbursement.workAttachments}";
                 var size = (list.split('url')).length-1;
-                var files = $("#attachment_file")[0].files;
+                /*var files = $("#attachment_file")[0].files;
                 for(var i = 0;i<files.length;i++) {
                     var file = files[i];
                     //如果文件以xml文件结尾,则需要将该文件上传到后台进行数据处理后返回数据
@@ -172,7 +183,7 @@
                 if(!flag){
                     parent.layer.msg("已填写电子发票信息,请上传对应发票的xml文件!", {icon: 5});
                     flags= false;
-                }
+                }*/
                 /*if(countFlag < electronicInvoiceArr.length){
                     parent.layer.msg("填写电子发票数据量与上传发票xml文件数量不符,请重新上传!", {icon: 5});
                     flags= false;
@@ -545,9 +556,9 @@
                                             $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(3).find("input").eq(0).val(data.InvoiceNumber);
                                             $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(4).find("input").eq(0).val(data.BasicInformationRequestTime);
                                             $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(5).find("input").eq(0).val(data.BuyerInformationBuyerName);
-                                            $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(6).find("input").eq(0).val(data.IssuItemInformationAmount);
-                                            $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(7).find("input").eq(0).val(data.IssuItemInformationComTaxAm);
-                                            $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(8).find("input").eq(0).val(data.IssuItemInformationTotaltaxIncludedAmount);
+                                            $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(6).find("input").eq(0).val(data.BasicInformationTotalAmWithoutTax);
+                                            $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(7).find("input").eq(0).val(data.BasicInformationTotalTaxAm);
+                                            $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(8).find("input").eq(0).val(data.BasicInformationTotalTaxincludedAmount);
                                             $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(9).find("input").eq(0).val("");
                                         }
                                     }
@@ -562,9 +573,9 @@
                                         $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(3).find("input").eq(0).val(data.InvoiceNumber);
                                         $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(4).find("input").eq(0).val(data.BasicInformationRequestTime);
                                         $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(5).find("input").eq(0).val(data.BuyerInformationBuyerName);
-                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(6).find("input").eq(0).val(data.IssuItemInformationAmount);
-                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(7).find("input").eq(0).val(data.IssuItemInformationComTaxAm);
-                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(8).find("input").eq(0).val(data.IssuItemInformationTotaltaxIncludedAmount);
+                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(6).find("input").eq(0).val(data.BasicInformationTotalAmWithoutTax);
+                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(7).find("input").eq(0).val(data.BasicInformationTotalTaxAm);
+                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(8).find("input").eq(0).val(data.BasicInformationTotalTaxincludedAmount);
                                         $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(9).find("input").eq(0).val("");
 
                                         reimbursementElectronicInvoiceVATTaxesRowIdx = reimbursementElectronicInvoiceVATTaxesRowIdx + 1;

+ 19 - 8
src/main/webapp/webpage/modules/workreimbursement/new/workReimbursementNewFormAdd.jsp

@@ -139,6 +139,17 @@
                     parent.layer.msg("请添加报销详情!", {icon: 5});
                     flags= false;
                 }
+                //判断报销类型是否为电子报销
+                var reimbursementType=$('input:radio[name="reimbursementType"]:checked').val();
+
+                if(reimbursementType == '1'){
+                    var list = "${workReimbursement.workAttachmentInvoiceReimbursements}";
+                    var files = $("#attachment_file_InvoiceReimbursement")[0].files;
+                    if(files.length == 0){
+                        parent.layer.msg("请上传电子发票xml文件!", {icon: 5});
+                        flags= false;
+                    }
+                }
 
                 var electronicInvoiceArr = $("#reimbursementElectronicInvoiceVATTaxes tr:visible");
                 if(electronicInvoiceArr.length>0){
@@ -146,7 +157,7 @@
                     var countFlag = 0;
                     var list = "${workReimbursement.workAttachments}";
                     var size = (list.split('url')).length-1;
-                    var files = $("#attachment_file")[0].files;
+                    /*var files = $("#attachment_file")[0].files;
                     for(var i = 0;i<files.length;i++) {
                         var file = files[i];
                         //如果文件以xml文件结尾,则需要将该文件上传到后台进行数据处理后返回数据
@@ -172,7 +183,7 @@
                     if(!flag){
                         parent.layer.msg("已填写电子发票信息,请上传对应发票的xml文件!", {icon: 5});
                         flags= false;
-                    }
+                    }*/
                     /*if(countFlag < electronicInvoiceArr.length){
                         parent.layer.msg("填写电子发票数据量与上传发票xml文件数量不符,请重新上传!", {icon: 5});
                         flags= false;
@@ -480,9 +491,9 @@
                                             $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(3).find("input").eq(0).val(data.InvoiceNumber);
                                             $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(4).find("input").eq(0).val(data.BasicInformationRequestTime);
                                             $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(5).find("input").eq(0).val(data.BuyerInformationBuyerName);
-                                            $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(6).find("input").eq(0).val(data.IssuItemInformationAmount);
-                                            $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(7).find("input").eq(0).val(data.IssuItemInformationComTaxAm);
-                                            $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(8).find("input").eq(0).val(data.IssuItemInformationTotaltaxIncludedAmount);
+                                            $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(6).find("input").eq(0).val(data.BasicInformationTotalAmWithoutTax);
+                                            $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(7).find("input").eq(0).val(data.BasicInformationTotalTaxAm);
+                                            $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(8).find("input").eq(0).val(data.BasicInformationTotalTaxincludedAmount);
                                             $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(9).find("input").eq(0).val("");
                                         }
                                     }
@@ -497,9 +508,9 @@
                                         $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(3).find("input").eq(0).val(data.InvoiceNumber);
                                         $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(4).find("input").eq(0).val(data.BasicInformationRequestTime);
                                         $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(5).find("input").eq(0).val(data.BuyerInformationBuyerName);
-                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(6).find("input").eq(0).val(data.IssuItemInformationAmount);
-                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(7).find("input").eq(0).val(data.IssuItemInformationComTaxAm);
-                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(8).find("input").eq(0).val(data.IssuItemInformationTotaltaxIncludedAmount);
+                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(6).find("input").eq(0).val(data.BasicInformationTotalAmWithoutTax);
+                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(7).find("input").eq(0).val(data.BasicInformationTotalTaxAm);
+                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(8).find("input").eq(0).val(data.BasicInformationTotalTaxincludedAmount);
                                         $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(9).find("input").eq(0).val("");
 
                                         reimbursementElectronicInvoiceVATTaxesRowIdx = reimbursementElectronicInvoiceVATTaxesRowIdx + 1;

+ 17 - 6
src/main/webapp/webpage/modules/workreimbursement/new/workReimbursementNewModifyApply.jsp

@@ -144,6 +144,17 @@
                 parent.layer.msg("请添加报销详情!", {icon: 5});
                 return false;
             }
+            //判断报销类型是否为电子报销
+            var reimbursementType=$('input:radio[name="reimbursementType"]:checked').val();
+
+            if(reimbursementType == '1'){
+                var list = "${workReimbursement.workAttachmentInvoiceReimbursements}";
+                var files = $("#attachment_file_InvoiceReimbursement")[0].files;
+                if(files.length == 0){
+                    parent.layer.msg("请上传电子发票xml文件!", {icon: 5});
+                    flags= false;
+                }
+            }
 
             /*var electronicInvoiceArr = $("#reimbursementElectronicInvoiceVATTaxes tr:visible");
             if(electronicInvoiceArr.length>0){
@@ -555,9 +566,9 @@
                                         $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(3).find("input").eq(0).val(data.InvoiceNumber);
                                         $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(4).find("input").eq(0).val(data.IssueTime);
                                         $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(5).find("input").eq(0).val(data.SellerInformationSellerName);
-                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(6).find("input").eq(0).val(data.IssuItemInformationAmount);
-                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(7).find("input").eq(0).val(data.IssuItemInformationComTaxAm);
-                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(8).find("input").eq(0).val(data.IssuItemInformationTotaltaxIncludedAmount);
+                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(6).find("input").eq(0).val(data.BasicInformationTotalAmWithoutTax);
+                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(7).find("input").eq(0).val(data.BasicInformationTotalTaxAm);
+                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(8).find("input").eq(0).val(data.BasicInformationTotalTaxincludedAmount);
                                         $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(9).find("input").eq(0).val("");
                                         $("#reimbursementElectronicInvoiceVATTaxes" + i + "_delFlag").val("0")
                                         $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).show();
@@ -575,9 +586,9 @@
                                     $("#reimbursementElectronicInvoiceVATTaxes tr").eq(trlen).find("td").eq(3).find("input").eq(0).val(data.InvoiceNumber);
                                     $("#reimbursementElectronicInvoiceVATTaxes tr").eq(trlen).find("td").eq(4).find("input").eq(0).val(data.IssueTime);
                                     $("#reimbursementElectronicInvoiceVATTaxes tr").eq(trlen).find("td").eq(5).find("input").eq(0).val(data.SellerInformationSellerName);
-                                    $("#reimbursementElectronicInvoiceVATTaxes tr").eq(trlen).find("td").eq(6).find("input").eq(0).val(data.IssuItemInformationAmount);
-                                    $("#reimbursementElectronicInvoiceVATTaxes tr").eq(trlen).find("td").eq(7).find("input").eq(0).val(data.IssuItemInformationComTaxAm);
-                                    $("#reimbursementElectronicInvoiceVATTaxes tr").eq(trlen).find("td").eq(8).find("input").eq(0).val(data.IssuItemInformationTotaltaxIncludedAmount);
+                                    $("#reimbursementElectronicInvoiceVATTaxes tr").eq(trlen).find("td").eq(6).find("input").eq(0).val(data.BasicInformationTotalAmWithoutTax);
+                                    $("#reimbursementElectronicInvoiceVATTaxes tr").eq(trlen).find("td").eq(7).find("input").eq(0).val(data.BasicInformationTotalTaxAm);
+                                    $("#reimbursementElectronicInvoiceVATTaxes tr").eq(trlen).find("td").eq(8).find("input").eq(0).val(data.BasicInformationTotalTaxincludedAmount);
                                     $("#reimbursementElectronicInvoiceVATTaxes tr").eq(trlen).find("td").eq(9).find("input").eq(0).val("");
 
                                     reimbursementElectronicInvoiceVATTaxesRowIdx = reimbursementElectronicInvoiceVATTaxesRowIdx + 1;

+ 17 - 6
src/main/webapp/webpage/modules/workreimbursement/workReimbursementFormAdd.jsp

@@ -177,6 +177,17 @@
                     flags= false;
                 }
 
+                //判断报销类型是否为电子报销
+                var reimbursementType=$('input:radio[name="reimbursementType"]:checked').val();
+
+                if(reimbursementType == '1'){
+                    var list = "${workReimbursement.workAttachmentInvoiceReimbursements}";
+                    var files = $("#attachment_file_InvoiceReimbursement")[0].files;
+                    if(files.length == 0){
+                        parent.layer.msg("请上传电子发票xml文件!", {icon: 5});
+                        flags= false;
+                    }
+                }
                 var electronicInvoiceArr = $("#reimbursementElectronicInvoiceVATTaxes tr:visible");
                 for (let i = 0; i <electronicInvoiceArr.length ; i++) {
                     $('#reimbursementElectronicInvoiceVATTaxes' + i + '_invoiceType').attr("disabled",false);
@@ -578,9 +589,9 @@
                                             $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(3).find("input").eq(0).val(data.InvoiceNumber);
                                             $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(4).find("input").eq(0).val(data.IssueTime);
                                             $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(5).find("input").eq(0).val(data.SellerInformationSellerName);
-                                            $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(6).find("input").eq(0).val(data.IssuItemInformationAmount);
-                                            $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(7).find("input").eq(0).val(data.IssuItemInformationComTaxAm);
-                                            $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(8).find("input").eq(0).val(data.IssuItemInformationTotaltaxIncludedAmount);
+                                            $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(6).find("input").eq(0).val(data.BasicInformationTotalAmWithoutTax);
+                                            $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(7).find("input").eq(0).val(data.BasicInformationTotalTaxAm);
+                                            $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(8).find("input").eq(0).val(data.BasicInformationTotalTaxincludedAmount);
                                             $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(9).find("input").eq(0).val("");
                                             $("#reimbursementElectronicInvoiceVATTaxes" + i + "_delFlag").val("0")
                                             $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).show();
@@ -598,9 +609,9 @@
                                         $("#reimbursementElectronicInvoiceVATTaxes tr").eq(trlen).find("td").eq(3).find("input").eq(0).val(data.InvoiceNumber);
                                         $("#reimbursementElectronicInvoiceVATTaxes tr").eq(trlen).find("td").eq(4).find("input").eq(0).val(data.IssueTime);
                                         $("#reimbursementElectronicInvoiceVATTaxes tr").eq(trlen).find("td").eq(5).find("input").eq(0).val(data.SellerInformationSellerName);
-                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(trlen).find("td").eq(6).find("input").eq(0).val(data.IssuItemInformationAmount);
-                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(trlen).find("td").eq(7).find("input").eq(0).val(data.IssuItemInformationComTaxAm);
-                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(trlen).find("td").eq(8).find("input").eq(0).val(data.IssuItemInformationTotaltaxIncludedAmount);
+                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(trlen).find("td").eq(6).find("input").eq(0).val(data.BasicInformationTotalAmWithoutTax);
+                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(trlen).find("td").eq(7).find("input").eq(0).val(data.BasicInformationTotalTaxAm);
+                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(trlen).find("td").eq(8).find("input").eq(0).val(data.BasicInformationTotalTaxincludedAmount);
                                         $("#reimbursementElectronicInvoiceVATTaxes tr").eq(trlen).find("td").eq(9).find("input").eq(0).val("");
 
                                         reimbursementElectronicInvoiceVATTaxesRowIdx = reimbursementElectronicInvoiceVATTaxesRowIdx + 1;

+ 18 - 8
src/main/webapp/webpage/modules/workreimbursement/workReimbursementModifyApply.jsp

@@ -139,14 +139,24 @@
                 parent.layer.msg("请添加报销详情!", {icon: 5});
                 return false;
             }
+            //判断报销类型是否为电子报销
+            var reimbursementType=$('input:radio[name="reimbursementType"]:checked').val();
 
+            if(reimbursementType == '1'){
+                var list = "${workReimbursement.workAttachmentInvoiceReimbursements}";
+                var files = $("#attachment_file_InvoiceReimbursement")[0].files;
+                if(files.length == 0){
+                    parent.layer.msg("请上传电子发票xml文件!", {icon: 5});
+                    flags= false;
+                }
+            }
             var electronicInvoiceArr = $("#reimbursementElectronicInvoiceVATTaxes tr:visible");
             if(electronicInvoiceArr.length>0){
                 var flag = false;
                 var countFlag = 0;
                 var list = "${workReimbursement.workAttachments}";
                 var size = (list.split('url')).length-1;
-                var files = $("#attachment_file")[0].files;
+                /*var files = $("#attachment_file")[0].files;
                 for(var i = 0;i<files.length;i++) {
                     var file = files[i];
                     //如果文件以xml文件结尾,则需要将该文件上传到后台进行数据处理后返回数据
@@ -172,7 +182,7 @@
                 if(!flag){
                     parent.layer.msg("已填写电子发票信息,请上传对应发票的xml文件!", {icon: 5});
                     flags= false;
-                }
+                }*/
                 /*if(countFlag < electronicInvoiceArr.length){
                     parent.layer.msg("填写电子发票数据量与上传发票xml文件数量不符,请重新上传!", {icon: 5});
                     flags= false;
@@ -540,9 +550,9 @@
                                             $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(3).find("input").eq(0).val(data.InvoiceNumber);
                                             $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(4).find("input").eq(0).val(data.BasicInformationRequestTime);
                                             $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(5).find("input").eq(0).val(data.BuyerInformationBuyerName);
-                                            $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(6).find("input").eq(0).val(data.IssuItemInformationAmount);
-                                            $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(7).find("input").eq(0).val(data.IssuItemInformationComTaxAm);
-                                            $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(8).find("input").eq(0).val(data.IssuItemInformationTotaltaxIncludedAmount);
+                                            $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(6).find("input").eq(0).val(data.BasicInformationTotalAmWithoutTax);
+                                            $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(7).find("input").eq(0).val(data.BasicInformationTotalTaxAm);
+                                            $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(8).find("input").eq(0).val(data.BasicInformationTotalTaxincludedAmount);
                                             $("#reimbursementElectronicInvoiceVATTaxes tr").eq(i).find("td").eq(9).find("input").eq(0).val("");
                                         }
                                     }
@@ -557,9 +567,9 @@
                                         $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(3).find("input").eq(0).val(data.InvoiceNumber);
                                         $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(4).find("input").eq(0).val(data.BasicInformationRequestTime);
                                         $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(5).find("input").eq(0).val(data.BuyerInformationBuyerName);
-                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(6).find("input").eq(0).val(data.IssuItemInformationAmount);
-                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(7).find("input").eq(0).val(data.IssuItemInformationComTaxAm);
-                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(8).find("input").eq(0).val(data.IssuItemInformationTotaltaxIncludedAmount);
+                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(6).find("input").eq(0).val(data.BasicInformationTotalAmWithoutTax);
+                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(7).find("input").eq(0).val(data.BasicInformationTotalTaxAm);
+                                        $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(8).find("input").eq(0).val(data.BasicInformationTotalTaxincludedAmount);
                                         $("#reimbursementElectronicInvoiceVATTaxes tr").eq(reimbursementElectronicInvoiceVATTaxesRowIdx).find("td").eq(9).find("input").eq(0).val("");
 
                                         reimbursementElectronicInvoiceVATTaxesRowIdx = reimbursementElectronicInvoiceVATTaxesRowIdx + 1;