Преглед на файлове

发票功能调整,添加红冲、被红冲、全部、非红冲查询筛选项

徐滕 преди 2 седмици
родител
ревизия
c837300c59
променени са 17 файла, в които са добавени 997 реда и са изтрити 489 реда
  1. 3 1
      src/main/java/com/jeeplus/modules/SysMenuDictRelation/web/SysMenuDictRelationController.java
  2. 14 14
      src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectMessageNewService.java
  3. 4 4
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectSignatureCallBackController.java
  4. 26 2
      src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectViewController.java
  5. 28 0
      src/main/java/com/jeeplus/modules/workinvoice/entity/WorkInvoice.java
  6. 12 1
      src/main/java/com/jeeplus/modules/workinvoice/service/OMS/InvoiceDownloadService.java
  7. 0 2
      src/main/java/com/jeeplus/modules/workinvoice/service/OMS/OMSDisposeService.java
  8. 12 1
      src/main/java/com/jeeplus/modules/workinvoice/service/OMS/RedInvoiceDownloadService.java
  9. 2 2
      src/main/java/com/jeeplus/modules/workinvoice/service/WorkInvoiceService.java
  10. 416 269
      src/main/resources/mappings/modules/workinvoice/WorkInvoiceDao.xml
  11. 6 1
      src/main/webapp/WEB-INF/tags/table/approvalSealAttachment.tag
  12. 162 0
      src/main/webapp/webpage/modules/ruralprojectrecords/view/reportView.jsp
  13. 47 20
      src/main/webapp/webpage/modules/workinvoice/workInvoiceAllList.jsp
  14. 175 147
      src/main/webapp/webpage/modules/workinvoice/workInvoiceAllTwoList.jsp
  15. 20 0
      src/main/webapp/webpage/modules/workinvoice/workInvoiceNotProjectAuditEnd.jsp
  16. 38 11
      src/main/webapp/webpage/modules/workinvoice/workInvoiceTwoList.jsp
  17. 32 14
      src/main/webapp/webpage/modules/workprojectnotify/workProjectNotifyShowList.jsp

+ 3 - 1
src/main/java/com/jeeplus/modules/SysMenuDictRelation/web/SysMenuDictRelationController.java

@@ -124,7 +124,9 @@ public class SysMenuDictRelationController extends BaseController {
     @RequestMapping(value = "getNotifyDictValuesByPermission")
     @ResponseBody
     public List<Map<String, Object>> getNotifyDictValuesByPermission() {
-        return sysMenuDictRelationService.findNotifyDictValuesByCurrentUser();
+        List<Map<String, Object>> notifyDictValuesByCurrentUser = sysMenuDictRelationService.findNotifyDictValuesByCurrentUser();
+        System.out.println("notifyDictValuesByCurrentUserSize: " + notifyDictValuesByCurrentUser.size());
+        return notifyDictValuesByCurrentUser;
     }
 }
 

+ 14 - 14
src/main/java/com/jeeplus/modules/ruralprojectrecords/service/RuralProjectMessageNewService.java

@@ -819,8 +819,8 @@ public class RuralProjectMessageNewService extends CrudService<RuralProjectMessa
         }
         ProjectRecords projectRecords = dao.getRuralProjectRecords(projectReportData.getProject().getId());
         Office recordsOffice =officeService.get(projectRecords.getOffice());
-        String title = "项目【"+projectRecords.getProjectName()+"】报告审定(内)签章待审批";
-        String str =  "项目【"+projectRecords.getProjectName()+"】报告审定(内)签章待审批";
+        String title = "项目【"+projectRecords.getProjectName()+"】报告审定(内)待审批";
+        String str =  "项目【"+projectRecords.getProjectName()+"】报告审定(内)待审批";
         // 用来设置启动流程的人员ID,引擎会自动把用户ID保存到activiti:initiator中
         identityService.setAuthenticatedUserId(user.getId());
         // 启动流程
@@ -1806,11 +1806,11 @@ public class RuralProjectMessageNewService extends CrudService<RuralProjectMessa
             }else{
                 if ("yes".equals(flag)) {
 
-                    String titleStr = "项目【"+projectRecords.getProjectName()+"】报告审定(内)签章审批通过";
-                    String content = "项目【"+projectRecords.getProjectName()+"】报告审定(内)签章审批通过";
+                    String titleStr = "项目【"+projectRecords.getProjectName()+"】报告审定(内)审批通过";
+                    String content = "项目【"+projectRecords.getProjectName()+"】报告审定(内)审批通过";
                     if(StringUtils.isNotBlank(projectReportData.getNumber())){
-                        titleStr = "报告号:"+projectReportData.getNumber()+"。项目【"+projectRecords.getProjectName()+"】报告审定(内)签章审批通过";
-                        content = "报告号:"+projectReportData.getNumber()+"。项目【"+projectRecords.getProjectName()+"】报告审定(内)签章审批通过";
+                        titleStr = "报告号:"+projectReportData.getNumber()+"。项目【"+projectRecords.getProjectName()+"】报告审定(内)审批通过";
+                        content = "报告号:"+projectReportData.getNumber()+"。项目【"+projectRecords.getProjectName()+"】报告审定(内)审批通过";
                     }
                     str =  "报告名称:"+projectReportData.getName()+",工作内容类型:"+ WorkContentTypeController.getContentTypeName(projectReportData.getType(),"")+",项目所属部门:"+recordsOffice.getName();
                     projectReportData.setStatus("5");
@@ -1899,11 +1899,11 @@ public class RuralProjectMessageNewService extends CrudService<RuralProjectMessa
 
             } else {
                 if (!"yes".equals(flag)) {//报告驳回待办提醒
-                    title = "项目【"+ projectRecords.getProjectName()+"】新增报告审定(内)签章被驳回";
-                    str = "项目【"+ projectRecords.getProjectName()+"】新增报告审定(内)签章被驳回,请选择重新申请或删除报告";
+                    title = "项目【"+ projectRecords.getProjectName()+"】新增报告审定(内)被驳回";
+                    str = "项目【"+ projectRecords.getProjectName()+"】新增报告审定(内)被驳回,请选择重新申请或删除报告";
                     if(StringUtils.isNotBlank(projectReportData.getNumber())){
-                        title = "报告号:"+projectReportData.getNumber()+"。项目【"+projectRecords.getProjectName()+"】新增报告审定(内)签章被驳回";
-                        str = "报告号:"+projectReportData.getNumber()+"。项目【"+projectRecords.getProjectName()+"】新增报告审定(内)签章被驳回,请选择重新申请或删除报告";
+                        title = "报告号:"+projectReportData.getNumber()+"。项目【"+projectRecords.getProjectName()+"】新增报告审定(内)被驳回";
+                        str = "报告号:"+projectReportData.getNumber()+"。项目【"+projectRecords.getProjectName()+"】新增报告审定(内)被驳回,请选择重新申请或删除报告";
                     }
                     WorkProjectNotify notify = new WorkProjectNotify();
                     notify.setNotifyId(projectReportData.getId());
@@ -1922,11 +1922,11 @@ public class RuralProjectMessageNewService extends CrudService<RuralProjectMessa
                     users.add( projectReportData.getCreateBy());
                 } else {
                     if (com.jeeplus.common.utils.StringUtils.isNotBlank(enname)) {//驳回重新申请待办信息
-                        str = "项目【"+ projectRecords.getProjectName()+"】报告审定(内)签章待审批";
-                        title = "项目【"+ projectRecords.getProjectName()+"】报告审定(内)签章待审批";
+                        str = "项目【"+ projectRecords.getProjectName()+"】报告审定(内)待审批";
+                        title = "项目【"+ projectRecords.getProjectName()+"】报告审定(内)待审批";
                         if(StringUtils.isNotBlank(projectReportData.getNumber())){
-                            title = "报告号:"+projectReportData.getNumber()+"。项目【"+projectRecords.getProjectName()+"】报告审定(内)签章待审批";
-                            str = "报告号:"+projectReportData.getNumber()+"。项目【"+projectRecords.getProjectName()+"】报告审定(内)签章待审批";
+                            title = "报告号:"+projectReportData.getNumber()+"。项目【"+projectRecords.getProjectName()+"】报告审定(内)待审批";
+                            str = "报告号:"+projectReportData.getNumber()+"。项目【"+projectRecords.getProjectName()+"】报告审定(内)待审批";
                         }
                         WorkProjectNotify notify = new WorkProjectNotify();
                         notify.setNotifyId(projectReportData.getId());

+ 4 - 4
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectSignatureCallBackController.java

@@ -1112,8 +1112,8 @@ public class RuralProjectSignatureCallBackController extends BaseController {
         ProjectReportData projectReportData = projectReportDataService.getReportDataByProjectId(records.getId());
         //如果没有返回contractId 则进行数据暂存处理
         if(StringUtils.isBlank(presignCallBack.getContractId())){
-            String title = "报告号【"+projectReportData.getNumber()+"】审定(内)签章失败。请重新签章";
-            String content = "报告号【"+projectReportData.getNumber()+"】审定(内)签章失败。请重新签章";
+            String title = "报告号【"+projectReportData.getNumber()+"】审定(内)失败。请重新签章";
+            String content = "报告号【"+projectReportData.getNumber()+"】审定(内)失败。请重新签章";
             if ("yes".equals(projectReportData.getAct().getFlag())) {
                 WorkProjectNotify notify = new WorkProjectNotify();
                 notify.setNotifyId(projectReportData.getId());
@@ -1153,8 +1153,8 @@ public class RuralProjectSignatureCallBackController extends BaseController {
         //修改签章对应信息文件
         projectReportDataService.updateJudgementSignatureInfo(records);
         //发送通知
-        String title = "报告号【"+projectReportData.getNumber()+"】审定(内)签章审批登记完成";
-        String content = "报告号【"+projectReportData.getNumber()+"】审定(内)签章审批登记完成,项目编号:"+records.getProjectId();
+        String title = "报告号【"+projectReportData.getNumber()+"】审定(内)审批登记完成";
+        String content = "报告号【"+projectReportData.getNumber()+"】审定(内)审批登记完成,项目编号:"+records.getProjectId();
         WorkProjectNotify notify = new WorkProjectNotify();
         notify.setNotifyId(projectReportData.getId());
         //查询是否已经进行发送通知,没有发送则进行发送,否则  直接跳过

+ 26 - 2
src/main/java/com/jeeplus/modules/ruralprojectrecords/web/RuralProjectViewController.java

@@ -7,7 +7,6 @@ import com.jeeplus.common.utils.Collections3;
 import com.jeeplus.common.utils.MyBeanUtils;
 import com.jeeplus.common.utils.StringUtils;
 import com.jeeplus.common.web.BaseController;
-import com.jeeplus.modules.act.entity.Act;
 import com.jeeplus.modules.act.service.ActTaskService;
 import com.jeeplus.modules.alterinfo.entity.AlterInfo;
 import com.jeeplus.modules.alterinfo.service.AlterInfoService;
@@ -30,7 +29,9 @@ import com.jeeplus.modules.ruralprojectrecords.service.RuralProjectRecordsServic
 import com.jeeplus.modules.ruralprojectrecords.service.SubProjectInfoService;
 import com.jeeplus.modules.sys.entity.MainDictDetail;
 import com.jeeplus.modules.sys.entity.User;
+import com.jeeplus.modules.sys.entity.Workattachment;
 import com.jeeplus.modules.sys.service.UserService;
+import com.jeeplus.modules.sys.service.WorkattachmentService;
 import com.jeeplus.modules.sys.utils.DictUtils;
 import com.jeeplus.modules.sys.utils.UserUtils;
 import com.jeeplus.modules.workbidproject.entity.WorkBidProject;
@@ -44,7 +45,6 @@ import com.jeeplus.modules.workprojectnotify.entity.WorkProjectNotify;
 import com.jeeplus.modules.workprojectnotify.service.WorkProjectNotifyService;
 import com.jeeplus.modules.workreview.entity.WorkReviewAudit;
 import com.jeeplus.modules.workreview.service.WorkReviewStandardService;
-import com.jeeplus.modules.workstaff.entity.WorkStaffBasicInfo;
 import com.jeeplus.modules.workstaff.entity.WorkStaffCertificate;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -113,6 +113,8 @@ public class RuralProjectViewController extends BaseController {
     private ProjectFilingBatchService projectFilingBatchService;
     @Autowired
     protected WorkProjectNotifyService workProjectNotifyService;
+    @Autowired
+    private WorkattachmentService workattachmentService;
     /**
      * 项目查看
      * 传参:项目id
@@ -564,6 +566,28 @@ public class RuralProjectViewController extends BaseController {
         ruralProjectRecords.setBzshbUserList(auditUserList);
         //查询项目是否时案例项目
         ruralProjectRecords = projectRecordsService.getCaseBaseByProjectId(ruralProjectRecords);
+
+
+
+        if (null != ruralProjectRecords && null != ruralProjectRecords.getAttachmentProjectSort() && StringUtils.isNotBlank(ruralProjectRecords.getAttachmentProjectSort())) {
+            if ("8".equals(ruralProjectRecords.getAttachmentProjectSort())) {
+                //根据项目id和附件类型的
+                Workattachment workClientAttachment = new Workattachment();
+                workClientAttachment.setAttachmentFlag("105");
+                workClientAttachment.setAttachmentId(ruralProjectRecords.getId());
+                workClientAttachment.setProjectId(ruralProjectRecords.getId());
+                workClientAttachment.setDivIdType("_judgement");
+                List<Workattachment> fileList = workattachmentService.findList(workClientAttachment);
+                workattachmentService.attachmentManageOnUrl(fileList);
+                projectcontent.setWorkAttachments(fileList);
+
+            }
+            model.addAttribute("attachmentProjectSort", ruralProjectRecords.getAttachmentProjectSort());
+        } else {
+            model.addAttribute("attachmentProjectSort", "");
+        }
+
+
         //查询报告签发
         ProjectReportDataTwo projectReportDataTwo =projectReportDataTwoService.findTwoByProjectId(projectcontentinfo1.getProject().getId());
         model.addAttribute("processInstanceId",projectReportData.getProcessInstanceId());

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

@@ -129,7 +129,9 @@ public class WorkInvoice extends ActEntity<WorkInvoice> {
 
 	private Integer redInvoiceFlag; //是否红字发票
 	private String redInvoiceRelevancyId;	//红字发票关联其他发票id
+	private String byRedInvoiceRelevancyId;	//被红冲的发票id
 	private String redInvoiceRelevancyNumber;	//红字发票关联其他发票编号
+	private String byRedInvoiceRelevancyNumber;	//被红冲的发票编号
 	private Integer redIsOmsBilling;	//红字发票是否是接口开票(1:是,0:不是)
 	private Integer relatedInvoice;	//是否关联发票
 	private String situationDetail;	//情况说明
@@ -166,6 +168,8 @@ public class WorkInvoice extends ActEntity<WorkInvoice> {
 	private Integer isOmsBilling;//是否接口开票(1:是,0:不是)
 	private Date uncollectedInformDate;//未收款通知时间
 
+	private Integer isRedFlush;//是否红冲
+
 
 
 	public String getIsSzCloud() {
@@ -1174,4 +1178,28 @@ public class WorkInvoice extends ActEntity<WorkInvoice> {
 	public void setUncollectedInformDate(Date uncollectedInformDate) {
 		this.uncollectedInformDate = uncollectedInformDate;
 	}
+
+	public Integer getIsRedFlush() {
+		return isRedFlush;
+	}
+
+	public void setIsRedFlush(Integer isRedFlush) {
+		this.isRedFlush = isRedFlush;
+	}
+
+	public String getByRedInvoiceRelevancyId() {
+		return byRedInvoiceRelevancyId;
+	}
+
+	public void setByRedInvoiceRelevancyId(String byRedInvoiceRelevancyId) {
+		this.byRedInvoiceRelevancyId = byRedInvoiceRelevancyId;
+	}
+
+	public String getByRedInvoiceRelevancyNumber() {
+		return byRedInvoiceRelevancyNumber;
+	}
+
+	public void setByRedInvoiceRelevancyNumber(String byRedInvoiceRelevancyNumber) {
+		this.byRedInvoiceRelevancyNumber = byRedInvoiceRelevancyNumber;
+	}
 }

+ 12 - 1
src/main/java/com/jeeplus/modules/workinvoice/service/OMS/InvoiceDownloadService.java

@@ -182,7 +182,18 @@ public class InvoiceDownloadService {
                     || "0007".equals(resultDownInfo.getResult().getCode())
                     || "0008".equals(resultDownInfo.getResult().getCode())
                 )){
-                    omsDisposeService.handleInvoiceRetryAllFail(accessToken, workInvoiceId, "发票信息获取失败,失败原因:" + resultDownInfo.getResult().getMessage(), informType);
+                    omsDisposeService.handleInvoiceRetryAllFail(accessToken, workInvoiceId, "发票信息获取失败,失败原因:" + resultDownInfo.getResult().getCode() + ";" + resultDownInfo.getResult().getMessage(), informType);
+                    //需要删除Redis中的数据
+                    Jedis jedis = null;
+                    try {
+                        jedis = JedisUtils.getResource();
+                        String redisKey = "OMS_invoice_download:" + workInvoiceId;
+                        jedis.del(redisKey);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    } finally {
+                        if (jedis != null) jedis.close();
+                    }
                 }
             }
 

+ 0 - 2
src/main/java/com/jeeplus/modules/workinvoice/service/OMS/OMSDisposeService.java

@@ -1,7 +1,6 @@
 package com.jeeplus.modules.workinvoice.service.OMS;
 
 import com.alibaba.fastjson.JSON;
-import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.jeeplus.common.config.Global;
 import com.jeeplus.common.utils.JedisUtils;
@@ -24,7 +23,6 @@ import org.springframework.transaction.annotation.Transactional;
 import redis.clients.jedis.Jedis;
 
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 

+ 12 - 1
src/main/java/com/jeeplus/modules/workinvoice/service/OMS/RedInvoiceDownloadService.java

@@ -12,7 +12,6 @@ import com.jeeplus.modules.workinvoice.service.WorkInvoiceService;
 import com.jeeplus.modules.workinvoice.utils.HttpPostJsonUtil;
 import com.jeeplus.modules.workinvoice.utils.OMSNationUtil;
 import com.jeeplus.modules.workinvoicedetail.dao.WorkInvoiceDetailDao;
-import com.jeeplus.modules.workinvoicedetail.entity.WorkInvoiceDetail;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
@@ -189,6 +188,18 @@ public class RedInvoiceDownloadService {
                         || "0008".equals(resultDownInfo.getResult().getCode())
                 )){
                     omsDisposeService.handleInvoiceRetryAllFail(accessToken, workInvoiceId, "发票信息获取失败,失败原因:" + resultDownInfo.getResult().getMessage(), informType);
+
+                    //需要删除Redis中的数据
+                    Jedis jedis = null;
+                    try {
+                        jedis = JedisUtils.getResource();
+                        String redisKey = "OMS_invoice_download:" + workInvoiceId;
+                        jedis.del(redisKey);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    } finally {
+                        if (jedis != null) jedis.close();
+                    }
                 }
             }
 

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

@@ -3941,7 +3941,7 @@ public class WorkInvoiceService extends CrudService<WorkInvoiceDao, WorkInvoice>
 				//需要修改本次通知的时间,方便7天之后再次通知
 				workInvoice.setUncollectedInformDate(new Date());
 				workInvoiceDao.updateUncollectedInformDate(workInvoice);
-				//需要给发票发起人发送短信通知
+				/*//需要给发票发起人发送短信通知
 				User user = UserUtils.get(workInvoice.getCreateBy().getId());
 				HashMap<String, Object> hashMap = ALiYunSmsUtil.updateUncollectedInformSms(user.getName(), user.getMobile(), workInvoice.getNumber());
 
@@ -3967,7 +3967,7 @@ public class WorkInvoiceService extends CrudService<WorkInvoiceDao, WorkInvoice>
 					workOssNoteInformInfo.setMessage(message);
 				}
 				workOssNoteInformInfoService.saveRecord(workOssNoteInformInfo);
-
+*/
 			}
 
 		}

+ 416 - 269
src/main/resources/mappings/modules/workinvoice/WorkInvoiceDao.xml

@@ -533,6 +533,19 @@
 		,sa.name as "accountCheckingArea"
 		,ifnull(( SELECT wir.receipt_date FROM work_invoice_receipt wir WHERE wir.invoice_id = a.id ORDER BY wir.receipt_date DESC LIMIT 1 ),a.receipt_money_date) AS "receiptMoneyDate",
 		ifnull((select sum(wir.money) from work_invoice_receipt wir where wir.invoice_id = a.id ),0) as "receiptMoneyD"
+
+		,(SELECT wi.id
+		FROM work_invoice wi
+		WHERE wi.red_invoice_relevancy_id = a.id
+		AND wi.del_flag = 0
+		LIMIT 1) AS byRedInvoiceRelevancyId
+
+		,(SELECT wi.number
+		FROM work_invoice wi
+		WHERE wi.red_invoice_relevancy_id = a.id
+		AND wi.del_flag = 0
+		LIMIT 1) AS byRedInvoiceRelevancyNumber
+
 		FROM work_invoice a
 		LEFT JOIN sys_user su ON su.id = a.create_by
 		LEFT JOIN work_client_info w ON  w.id = a.client_id
@@ -544,6 +557,48 @@
 		LEFT join sys_office so on so.id = a.office_id
 		LEFT JOIN sys_user sua ON sua.id = a.account_checking_user_id
 		left join sys_area sa on sa.id = a.area_id
+		<if test="isRedFlush != null">
+			<!-- 1:只红冲数据 -->
+			<if test="isRedFlush == 1">
+				INNER JOIN (
+				SELECT DISTINCT id
+				FROM work_invoice
+				WHERE money LIKE '%-%'
+				) AS temp_inv ON a.id = temp_inv.id
+			</if>
+
+			<!-- 2:只被红冲数据 -->
+			<if test="isRedFlush == 2">
+				INNER JOIN (
+				SELECT DISTINCT red_invoice_relevancy_id
+				FROM work_invoice
+				WHERE money LIKE '%-%'
+				AND red_invoice_relevancy_id IS NOT NULL
+				) AS temp_invoice ON a.id = temp_invoice.red_invoice_relevancy_id
+			</if>
+
+			<!-- 3:全部(红冲 + 被红冲)-->
+			<if test="isRedFlush == 3">
+				INNER JOIN (
+				SELECT DISTINCT id AS invoice_id
+				FROM work_invoice
+				WHERE money LIKE '%-%'
+				UNION
+				SELECT DISTINCT red_invoice_relevancy_id AS invoice_id
+				FROM work_invoice
+				WHERE money LIKE '%-%'
+				AND red_invoice_relevancy_id IS NOT NULL
+				) AS temp_all ON a.id = temp_all.invoice_id
+			</if>
+
+			<!-- 0:正常数据 → 这是唯一正确版 -->
+			<if test="isRedFlush == 0">
+				LEFT JOIN work_invoice wi_refused
+				ON wi_refused.red_invoice_relevancy_id = a.id
+				AND wi_refused.money LIKE '%-%'
+				AND wi_refused.del_flag = 0
+			</if>
+		</if>
 		<where>
 			a.del_flag = #{DEL_FLAG_NORMAL}
 
@@ -615,6 +670,12 @@
 				AND a.invoice_date &lt;= #{endContractDate}
 			</if>
 
+			<!-- 0:正常数据 → 这是唯一正确版 -->
+			<if test="isRedFlush == 0">
+				AND a.money NOT LIKE '%-%'
+				AND wi_refused.id IS NULL
+			</if>
+
 			<if test="receiptBeginDate != null and receiptBeginDate != ''">
 				AND date_format(a.receipt_money_date,'%Y-%m-%d') &gt;= date_format(#{receiptBeginDate},'%Y-%m-%d')
 			</if>
@@ -1252,6 +1313,48 @@
 		LEFT join sys_office so on so.id = a.office_id
 		LEFT join sys_area sa on sa.id = a.area_id
 		left join work_invoice_receipt wir on wir.invoice_id = a.id
+		<if test="isRedFlush != null">
+			<!-- 1:只红冲数据 -->
+			<if test="isRedFlush == 1">
+				INNER JOIN (
+				SELECT DISTINCT id
+				FROM work_invoice
+				WHERE money LIKE '%-%'
+				) AS temp_inv ON a.id = temp_inv.id
+			</if>
+
+			<!-- 2:只被红冲数据 -->
+			<if test="isRedFlush == 2">
+				INNER JOIN (
+				SELECT DISTINCT red_invoice_relevancy_id
+				FROM work_invoice
+				WHERE money LIKE '%-%'
+				AND red_invoice_relevancy_id IS NOT NULL
+				) AS temp_invoice ON a.id = temp_invoice.red_invoice_relevancy_id
+			</if>
+
+			<!-- 3:全部(红冲 + 被红冲)-->
+			<if test="isRedFlush == 3">
+				INNER JOIN (
+				SELECT DISTINCT id AS invoice_id
+				FROM work_invoice
+				WHERE money LIKE '%-%'
+				UNION
+				SELECT DISTINCT red_invoice_relevancy_id AS invoice_id
+				FROM work_invoice
+				WHERE money LIKE '%-%'
+				AND red_invoice_relevancy_id IS NOT NULL
+				) AS temp_all ON a.id = temp_all.invoice_id
+			</if>
+
+			<!-- 0:正常数据 → 这是唯一正确版 -->
+			<if test="isRedFlush == 0">
+				LEFT JOIN work_invoice wi_refused
+				ON wi_refused.red_invoice_relevancy_id = a.id
+				AND wi_refused.money LIKE '%-%'
+				AND wi_refused.del_flag = 0
+			</if>
+		</if>
 		<where>
 			a.del_flag = #{DEL_FLAG_NORMAL}
 			<if test="widNumber != null and widNumber != ''">
@@ -1330,6 +1433,12 @@
 			<if test="billingContent != null and billingContent != ''">
 				AND a.billing_content = #{billingContent}
 			</if>
+
+			<!-- 0:正常数据 → 这是唯一正确版 -->
+			<if test="isRedFlush == 0">
+				AND a.money NOT LIKE '%-%'
+				AND wi_refused.id IS NULL
+			</if>
 			<if test="projectName != null and projectName != ''">
 				AND rpr.project_name LIKE
 				<if test="dbName == 'oracle'">'%'||#{projectName}||'%'</if>
@@ -1359,242 +1468,333 @@
 		</choose>
 	</select>
 
-<select id="getSumMoney" resultType="java.lang.String" >
-	select format(sum(x.money),2) as sumMoney
-	FROM (
+	<select id="getSumMoney" resultType="java.lang.String" >
+		select format(sum(x.money),2) as sumMoney
+		FROM (
 		SELECT
-			distinct (a.id) AS "id",a.money
-			FROM work_invoice a
-	LEFT JOIN sys_user su ON su.id = a.create_by
-	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 project_report_data prd ON  p.id = prd.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
-	left join work_invoice_project_relation wipr on a.id = wipr.invoice_id
-	left join rural_project_records rprs on wipr.project_id = rprs.id
-	left join rural_project_records rpr on rpr.id = wipr.project_id
-	left join project_report_data prds on rpr.id = prds.project_id
-	left join work_invoice_detail wid on a.id = wid.invoice_id
-	LEFT JOIN sys_user sua ON sua.id = a.account_checking_user_id
-	left join sys_area sa on sa.id = a.area_id
-	<where>
-		a.del_flag = #{DEL_FLAG_NORMAL}
-			and a.invoice_state !=4
-		<if test="number != null and number != ''">
-			AND a.number LIKE
-			<if test="dbName == 'oracle'">'%'||#{number}||'%'</if>
-			<if test="dbName == 'mssql'">'%'+#{number}+'%'</if>
-			<if test="dbName == 'mysql'">concat('%',#{number},'%')</if>
-		</if>
-		<if test="invoiceState != null and invoiceState != ''">
-			AND (a.invoice_state = #{invoiceState} or a.cancellation_state = #{invoiceState})
-		</if>
-		<if test="beginContractDate != null and endContractDate != null and beginContractDate != '' and endContractDate != ''">
-			AND a.invoice_date BETWEEN #{beginContractDate} AND #{endContractDate}
-		</if>
+		distinct a.id AS id, a.money
+		FROM work_invoice a
 
-		<if test="receiptBeginDate != null and receiptBeginDate != ''">
-			AND date_format(a.receipt_money_date,'%Y-%m-%d') &gt;= date_format(#{receiptBeginDate},'%Y-%m-%d')
-		</if>
-		<if test="receiptEndDate != null and receiptEndDate != ''">
-			AND date_format(a.receipt_money_date,'%Y-%m-%d') &lt;= date_format(#{receiptEndDate},'%Y-%m-%d')
+		<!-- 用到提交人才 JOIN -->
+		<if test="(submitterId != null and submitterId != '') or (submitterName != null and submitterName != '')">
+			LEFT JOIN sys_user su ON su.id = a.create_by
 		</if>
 
-		<if test="client != null and client.id != null and client.id != ''">
-			AND a.client_id = #{client.id}
+		<!-- 用到客户信息才 JOIN -->
+		<if test="(client != null and client.id != null and client.id != '')
+               or (client != null and client.name != null and client.name != '')">
+			LEFT JOIN work_client_info w ON w.id = a.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>
+
+		<!-- 用到项目才 JOIN -->
+		<if test="(project != null and project.id != null and project.id != '')
+               or (project != null and project.projectId != null and project.projectId != '')
+               or (project != null and project.projectName != null and project.projectName != '')">
+			LEFT JOIN rural_project_records p ON p.id = a.project_id
 		</if>
+
+		<!-- 用到项目报告编号才 JOIN -->
 		<if test="project != null and project.reportData != null and project.reportData.number != null and project.reportData.number != ''">
-			AND prd.number LIKE
-			<if test="dbName == 'oracle'">'%'||#{project.reportData.number}||'%'</if>
-			<if test="dbName == 'mssql'">'%'+#{project.reportData.number}+'%'</if>
-			<if test="dbName == 'mysql'">concat('%',#{project.reportData.number},'%')</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="officeId != null and officeId != ''">
-            AND so.id  = #{officeId}
-        </if>-->
-		<if test="moneyStr != null and moneyStr != ''">
-			AND a.money LIKE
-			<if test="dbName == 'oracle'">'%'||#{moneyStr}||'%'</if>
-			<if test="dbName == 'mssql'">'%'+#{moneyStr}+'%'</if>
-			<if test="dbName == 'mysql'">concat('%',#{moneyStr},'%')</if>
-		</if>
-		<!--<if test="submitterId != null and submitterId != ''">
-            AND a.create_by = #{submitterId}
-        </if>-->
-		<if test="(submitterId != null and submitterId != '') or (submitterName != null and submitterName != '')">
-			AND (a.create_by = #{submitterId} or su.name like concat('%',#{submitterName},'%'))
-		</if>
-		<if test="receiptMoney != null and receiptMoney != ''">
-			AND a.receipt_money = #{receiptMoney}
-		</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="officeIdList!=null and officeIdList.size!=0">
-			and a.office_id in
-			<foreach collection="officeIdList" item="officeId" separator="," open="(" close=")">
-				#{officeId}
-			</foreach>
-		</if>
-		<if test="redNotStatusList!=null and redNotStatusList.size!=0">
-			and a.invoice_state not in
-			<foreach collection="redNotStatusList" item="status" separator="," open="(" close=")">
-				#{status}
-			</foreach>
+			LEFT JOIN project_report_data prd ON p.id = prd.project_id
 		</if>
+
+		<!-- 合同表 WHERE 没用到,直接删除 -->
+		<!-- left JOIN work_contract_info ci on ci.id = p.contract_id -->
+
+		<!-- 用到机构名称才 JOIN -->
 		<if test="officeId == '' and officeName!=null and officeName!=''">
-			AND o.name like concat('%',#{officeName},'%')
-		</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}
+			JOIN sys_office o ON o.id = a.office_id
 		</if>
-		<if test="isInvoice != null and isInvoice != ''">
-			AND a.is_invoice = #{isInvoice}
-		</if>
-		<if test="isCharge != null and isCharge != ''">
-			AND a.is_charge = #{isCharge}
+
+		-- 公司表必须 JOIN
+		JOIN sys_office s ON s.id = a.company_id
+
+		<!-- 重复表,删除:LEFT join sys_office so on so.id = a.office_id -->
+
+		<!-- 用到 projectName / reportNumber 才关联 -->
+		<if test="projectName != null and projectName != '' or reportNumber != null and reportNumber != ''">
+			left join work_invoice_project_relation wipr on a.id = wipr.invoice_id
+			left join rural_project_records rpr on rpr.id = wipr.project_id
+			left join project_report_data prds on rpr.id = prds.project_id
 		</if>
-		<if test="isInvalid != null and isInvalid != ''">
-			AND a.is_invalid = #{isInvalid}
+
+		<!-- 用到 widNumber 才关联明细 -->
+		<if test="widNumber != null and widNumber != ''">
+			left join work_invoice_detail wid on a.id = wid.invoice_id
 		</if>
-		<if test="billingContent != null and billingContent != ''">
-			AND a.billing_content = #{billingContent}
+
+		<!-- 用到对账用户才关联 -->
+		<if test="(accountCheckingUserId != null and accountCheckingUserId != '') or (accountCheckingUserName != null and accountCheckingUserName != '')">
+			LEFT JOIN sys_user sua ON sua.id = a.account_checking_user_id
 		</if>
+
+		<!-- 用到区域才关联 -->
 		<if test="area != null and area.id != null and area.id != ''">
-			AND (a.area_parent_id LIKE
-			<if test="dbName == 'oracle'">'%'||#{area.id}||'%'</if>
-			<if test="dbName == 'mssql'">'%'+#{area.id}+'%'</if>
-			<if test="dbName == 'mysql'">concat('%',#{area.id},'%')</if>
-			or a.area_id = #{area.id}
-			)
+			left join sys_area sa on sa.id = a.area_id
 		</if>
-		<if test="(accountCheckingUserId != null and accountCheckingUserId != '') or (accountCheckingUserName != null and accountCheckingUserName != '')">
-			AND (a.account_checking_user_id = #{accountCheckingUserId} or sua.name like concat('%',#{accountCheckingUserName},'%'))
+
+		<!-- 红冲逻辑不变 -->
+		<if test="isRedFlush != null">
+			<if test="isRedFlush == 1">
+				INNER JOIN (
+				SELECT DISTINCT id
+				FROM work_invoice
+				WHERE money LIKE '%-%'
+				) AS temp_inv ON a.id = temp_inv.id
+			</if>
+			<if test="isRedFlush == 2">
+				INNER JOIN (
+				SELECT DISTINCT red_invoice_relevancy_id
+				FROM work_invoice
+				WHERE money LIKE '%-%'
+				AND red_invoice_relevancy_id IS NOT NULL
+				) AS temp_invoice ON a.id = temp_invoice.red_invoice_relevancy_id
+			</if>
+			<if test="isRedFlush == 3">
+				INNER JOIN (
+				SELECT DISTINCT id AS invoice_id
+				FROM work_invoice
+				WHERE money LIKE '%-%'
+				UNION
+				SELECT DISTINCT red_invoice_relevancy_id AS invoice_id
+				FROM work_invoice
+				WHERE money LIKE '%-%'
+				AND red_invoice_relevancy_id IS NOT NULL
+				) AS temp_all ON a.id = temp_all.invoice_id
+			</if>
+			<if test="isRedFlush == 0">
+				LEFT JOIN work_invoice wi_refused
+				ON wi_refused.red_invoice_relevancy_id = a.id
+				AND wi_refused.money LIKE '%-%'
+				AND wi_refused.del_flag = 0
+			</if>
 		</if>
-		<if test="widNumber != null and widNumber != ''">
-			AND wid.number LIKE
-			<if test="dbName == 'oracle'">'%'||#{widNumber}||'%'</if>
-			<if test="dbName == 'mssql'">'%'+#{widNumber}+'%'</if>
-			<if test="dbName == 'mysql'">concat('%',#{widNumber},'%')</if>
+
+		<where>
+			a.del_flag = #{DEL_FLAG_NORMAL}
+			and a.invoice_state !=4
+
+			<if test="number != null and number != ''">
+				AND a.number LIKE concat('%',#{number},'%')
+			</if>
+			<if test="invoiceState != null and invoiceState != ''">
+				AND (a.invoice_state = #{invoiceState} or a.cancellation_state = #{invoiceState})
+			</if>
+			<if test="beginContractDate != null and endContractDate != null and beginContractDate != '' and endContractDate != ''">
+				AND a.invoice_date BETWEEN #{beginContractDate} AND #{endContractDate}
+			</if>
+			<if test="receiptBeginDate != null and receiptBeginDate != ''">
+				AND date_format(a.receipt_money_date,'%Y-%m-%d') &gt;= date_format(#{receiptBeginDate},'%Y-%m-%d')
+			</if>
+			<if test="receiptEndDate != null and receiptEndDate != ''">
+				AND date_format(a.receipt_money_date,'%Y-%m-%d') &lt;= date_format(#{receiptEndDate},'%Y-%m-%d')
+			</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 concat('%',#{project.projectId},'%')
+			</if>
+			<if test="project != null and project.projectName != null and project.projectName != ''">
+				AND p.project_name LIKE concat('%',#{project.projectName},'%')
+			</if>
+			<if test="project != null and project.reportData != null and project.reportData.number != null and project.reportData.number != ''">
+				AND prd.number LIKE concat('%',#{project.reportData.number},'%')
+			</if>
+			<if test="client != null and client.name != null and client.name != ''">
+				AND w.name LIKE concat('%',#{client.name},'%')
+			</if>
+			<if test="moneyStr != null and moneyStr != ''">
+				AND a.money LIKE concat('%',#{moneyStr},'%')
+			</if>
+			<if test="(submitterId != null and submitterId != '') or (submitterName != null and submitterName != '')">
+				AND (a.create_by = #{submitterId} or su.name like concat('%',#{submitterName},'%'))
+			</if>
+			<if test="receiptMoney != null and receiptMoney != ''">
+				AND a.receipt_money = #{receiptMoney}
+			</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="isRedFlush == 0">
+				AND a.money NOT LIKE '%-%'
+				AND wi_refused.id IS NULL
+			</if>
+			<if test="officeIdList!=null and officeIdList.size!=0">
+				and a.office_id in
+				<foreach collection="officeIdList" item="officeId" separator="," open="(" close=")">
+					#{officeId}
+				</foreach>
+			</if>
+			<if test="redNotStatusList!=null and redNotStatusList.size!=0">
+				and a.invoice_state not in
+				<foreach collection="redNotStatusList" item="status" separator="," open="(" close=")">
+					#{status}
+				</foreach>
+			</if>
+			<if test="officeId == '' and officeName!=null and officeName!=''">
+				AND o.name like concat('%',#{officeName},'%')
+			</if>
+			<if test="invoiceNumber != null and invoiceNumber != ''">
+				AND a.invoice_number LIKE concat('%',#{invoiceNumber},'%')
+			</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>
+			<if test="billingContent != null and billingContent != ''">
+				AND a.billing_content = #{billingContent}
+			</if>
+			<if test="area != null and area.id != null and area.id != ''">
+				AND (a.area_parent_id LIKE concat('%',#{area.id},'%') or a.area_id = #{area.id})
+			</if>
+			<if test="(accountCheckingUserId != null and accountCheckingUserId != '') or (accountCheckingUserName != null and accountCheckingUserName != '')">
+				AND (a.account_checking_user_id = #{accountCheckingUserId} or sua.name like concat('%',#{accountCheckingUserName},'%'))
+			</if>
+			<if test="widNumber != null and widNumber != ''">
+				AND wid.number LIKE concat('%',#{widNumber},'%')
+			</if>
+			<if test="newDrawerId != null and newDrawerId != ''">
+				and new_drawer_id like concat('%',#{newDrawerId},'%')
+			</if>
+			<if test="newDrawer != null and newDrawer != ''">
+				and new_drawer like concat('%',#{newDrawer},'%')
+			</if>
+			<if test="projectName != null and projectName != ''">
+				and (wipr.details like concat('%',#{projectName},'%') or rpr.project_name like concat('%',#{projectName},'%'))
+			</if>
+			<if test="reportNumber != null and reportNumber != ''">
+				and prds.number like concat('%',#{reportNumber},'%')
+			</if>
+
+			${sqlMap.dsf}
+		</where>
+		) as x
+	</select>
+
+	<select id="queryCount" resultType="int" >
+		SELECT count(a.id)
+		FROM work_invoice a
+
+		<!-- 只有用到 su.name 才关联 sys_user -->
+		<if test="(submitterId != null and submitterId != '') or (submitterName != null and submitterName != '')">
+			LEFT JOIN sys_user su ON su.id = a.create_by
 		</if>
-		<if test="newDrawerId != null and newDrawerId != ''">
-			and new_drawer_id like
-			<if test="dbName == 'oracle'">'%'||#{newDrawerId}||'%'</if>
-			<if test="dbName == 'mssql'">'%'+#{newDrawerId}+'%'</if>
-			<if test="dbName == 'mysql'">concat('%',#{newDrawerId},'%')</if>
+
+		<!-- 只有用到客户名称/ID 才关联 work_client_info -->
+		<if test="(client != null and client.id != null and client.id != '')
+               or (client != null and client.name != null and client.name != '')">
+			LEFT JOIN work_client_info w ON w.id = a.client_id
 		</if>
-		<if test="newDrawer != null and newDrawer != ''">
-			and new_drawer like
-			<if test="dbName == 'oracle'">'%'||#{newDrawer}||'%'</if>
-			<if test="dbName == 'mssql'">'%'+#{newDrawer}+'%'</if>
-			<if test="dbName == 'mysql'">concat('%',#{newDrawer},'%')</if>
+
+		<!-- 只有用到项目相关条件才关联 rural_project_records -->
+		<if test="(project != null and project.id != null and project.id != '')
+               or (project != null and project.projectId != null and project.projectId != '')
+               or (project != null and project.projectName != null and project.projectName != '')">
+			LEFT JOIN rural_project_records p ON p.id = a.project_id
 		</if>
-		<if test="projectName != null and projectName != ''">
-			and (wipr.details like
-			<if test="dbName == 'oracle'">'%'||#{projectName}||'%'</if>
-			<if test="dbName == 'mssql'">'%'+#{projectName}+'%'</if>
-			<if test="dbName == 'mysql'">concat('%',#{projectName},'%')</if>
-			or rpr.project_name like
-			<if test="dbName == 'oracle'">'%'||#{projectName}||'%'</if>
-			<if test="dbName == 'mssql'">'%'+#{projectName}+'%'</if>
-			<if test="dbName == 'mysql'">concat('%',#{projectName},'%')</if>
-			)
+
+		<!-- 只有用到 project.reportData.number 才关联 project_report_data -->
+		<if test="project != null and project.reportData != null and project.reportData.number != null and project.reportData.number != ''">
+			LEFT JOIN project_report_data prd ON p.id = prd.project_id
 		</if>
-		<if test="reportNumber != null and reportNumber != ''">
-			and prds.number like
-			<if test="dbName == 'oracle'">'%'||#{reportNumber}||'%'</if>
-			<if test="dbName == 'mssql'">'%'+#{reportNumber}+'%'</if>
-			<if test="dbName == 'mysql'">concat('%',#{reportNumber},'%')</if>
+
+		<!-- 只有用到合同才关联(你这里没用到,直接删掉) -->
+		<!-- left JOIN work_contract_info ci on ci.id = p.contract_id -->
+
+		<!-- 只有用到 officeName 才关联 sys_office o -->
+		<if test="officeId == '' and officeName!=null and officeName!=''">
+			JOIN sys_office o ON o.id = a.office_id
 		</if>
 
+		<!-- 公司固定关联 -->
+		JOIN sys_office s ON s.id = a.company_id
 
-		${sqlMap.dsf}
-	</where>
-	) as x
-	</select>
+		<!-- 重复关联,删掉 LEFT join sys_office so on so.id = a.office_id -->
 
-	<select id="queryCount" resultType="int" >
+		<!-- 只有用到对账用户才关联 sys_user sua -->
+		<if test="(accountCheckingUserId != null and accountCheckingUserId != '') or (accountCheckingUserName != null and accountCheckingUserName != '')">
+			LEFT JOIN sys_user sua ON sua.id = a.account_checking_user_id
+		</if>
+
+		<!-- 红冲逻辑保持不变 -->
+		<if test="isRedFlush != null">
+			<if test="isRedFlush == 1">
+				INNER JOIN (
+				SELECT DISTINCT id
+				FROM work_invoice
+				WHERE money LIKE '%-%'
+				) AS temp_inv ON a.id = temp_inv.id
+			</if>
+			<if test="isRedFlush == 2">
+				INNER JOIN (
+				SELECT DISTINCT red_invoice_relevancy_id
+				FROM work_invoice
+				WHERE money LIKE '%-%'
+				AND red_invoice_relevancy_id IS NOT NULL
+				) AS temp_invoice ON a.id = temp_invoice.red_invoice_relevancy_id
+			</if>
+			<if test="isRedFlush == 3">
+				INNER JOIN (
+				SELECT DISTINCT id AS invoice_id
+				FROM work_invoice
+				WHERE money LIKE '%-%'
+				UNION
+				SELECT DISTINCT red_invoice_relevancy_id AS invoice_id
+				FROM work_invoice
+				WHERE money LIKE '%-%'
+				AND red_invoice_relevancy_id IS NOT NULL
+				) AS temp_all ON a.id = temp_all.invoice_id
+			</if>
+			<if test="isRedFlush == 0">
+				LEFT JOIN work_invoice wi_refused
+				ON wi_refused.red_invoice_relevancy_id = a.id
+				AND wi_refused.money LIKE '%-%'
+				AND wi_refused.del_flag = 0
+			</if>
+		</if>
 
-		SELECT count((a.id))
-		FROM work_invoice a
-		LEFT JOIN sys_user su ON su.id = a.create_by
-		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 project_report_data prd ON  p.id = prd.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
-		LEFT JOIN sys_user sua ON sua.id = a.account_checking_user_id
-<!--		<if test="client != null and client.name != null and client.name != ''">-->
-<!--			LEFT JOIN work_client_info w ON  w.id = a.client_id-->
-<!--		</if>-->
-<!--		LEFT JOIN rural_project_records p ON  p.id = a.project_id-->
-<!--		LEFT join sys_office so on so.id = a.office_id-->
-<!--		left join project_report_data prd on p.id = prd.project_id-->
 		<where>
 			a.del_flag = #{DEL_FLAG_NORMAL}
+
 			<if test="widNumber != null and widNumber != ''">
 				AND EXISTS (
 				SELECT 1
 				FROM work_invoice_detail wid
-				<where>
-					a.id = wid.invoice_id
-
-					AND wid.number LIKE
-					<if test="dbName == 'oracle'">'%'||#{widNumber}||'%'</if>
-					<if test="dbName == 'mssql'">'%'+#{widNumber}+'%'</if>
-					<if test="dbName == 'mysql'">concat('%',#{widNumber},'%')</if>
-				</where>
+				WHERE a.id = wid.invoice_id
+				AND wid.number LIKE concat('%',#{widNumber},'%')
 				)
 			</if>
 
-			<!-- 核心优化1:projectName 过滤(替换原有左连接逻辑) -->
+			<if test="isRedFlush == 0">
+				AND a.money NOT LIKE '%-%'
+				AND wi_refused.id IS NULL
+			</if>
+
+			<!-- 下面所有 where 条件保持不变 -->
 			<if test="projectName != null and projectName != ''">
 				AND EXISTS (
 				SELECT 1
@@ -1602,20 +1802,12 @@
 				LEFT JOIN rural_project_records rpr ON wipr.project_id = rpr.id
 				WHERE a.id = wipr.invoice_id
 				AND (
-				wipr.details LIKE
-				<if test="dbName == 'oracle'">'%'||#{projectName}||'%'</if>
-				<if test="dbName == 'mssql'">'%'+#{projectName}+'%'</if>
-				<if test="dbName == 'mysql'">concat('%',#{projectName},'%')</if>
+				wipr.details LIKE concat('%',#{projectName},'%')
 				OR
-				rpr.project_name LIKE
-				<if test="dbName == 'oracle'">'%'||#{projectName}||'%'</if>
-				<if test="dbName == 'mssql'">'%'+#{projectName}+'%'</if>
-				<if test="dbName == 'mysql'">concat('%',#{projectName},'%')</if>
+				rpr.project_name LIKE concat('%',#{projectName},'%')
 				)
 				)
 			</if>
-
-			<!-- 核心优化2:reportNumber 过滤(替换原有左连接逻辑) -->
 			<if test="reportNumber != null and reportNumber != ''">
 				AND EXISTS (
 				SELECT 1
@@ -1623,18 +1815,11 @@
 				LEFT JOIN rural_project_records rpr ON wipr.project_id = rpr.id
 				LEFT JOIN project_report_data prds ON rpr.id = prds.project_id
 				WHERE a.id = wipr.invoice_id
-				AND prds.number LIKE
-				<if test="dbName == 'oracle'">'%'||#{reportNumber}||'%'</if>
-				<if test="dbName == 'mssql'">'%'+#{reportNumber}+'%'</if>
-				<if test="dbName == 'mysql'">concat('%',#{reportNumber},'%')</if>
+				AND prds.number LIKE concat('%',#{reportNumber},'%')
 				)
 			</if>
-
 			<if test="number != null and number != ''">
-				AND a.number LIKE
-				<if test="dbName == 'oracle'">'%'||#{number}||'%'</if>
-				<if test="dbName == 'mssql'">'%'+#{number}+'%'</if>
-				<if test="dbName == 'mysql'">concat('%',#{number},'%')</if>
+				AND a.number LIKE concat('%',#{number},'%')
 			</if>
 			<if test="invoiceState != null and invoiceState != ''">
 				AND (a.invoice_state = #{invoiceState} or a.cancellation_state = #{invoiceState})
@@ -1645,14 +1830,12 @@
 			<if test="endContractDate != null">
 				AND a.invoice_date &lt;= #{endContractDate}
 			</if>
-
 			<if test="receiptBeginDate != null and receiptBeginDate != ''">
 				AND date_format(a.receipt_money_date,'%Y-%m-%d') &gt;= date_format(#{receiptBeginDate},'%Y-%m-%d')
 			</if>
 			<if test="receiptEndDate != null and receiptEndDate != ''">
 				AND date_format(a.receipt_money_date,'%Y-%m-%d') &lt;= date_format(#{receiptEndDate},'%Y-%m-%d')
 			</if>
-
 			<if test="client != null and client.id != null and client.id != ''">
 				AND a.client_id = #{client.id}
 			</if>
@@ -1660,39 +1843,23 @@
 				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>
+				AND p.project_id LIKE concat('%',#{project.projectId},'%')
 			</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>
+				AND p.project_name LIKE concat('%',#{project.projectName},'%')
 			</if>
 			<if test="project != null and project.reportData != null and project.reportData.number != null and project.reportData.number != ''">
-				AND prd.number LIKE
-				<if test="dbName == 'oracle'">'%'||#{project.reportData.number}||'%'</if>
-				<if test="dbName == 'mssql'">'%'+#{project.reportData.number}+'%'</if>
-				<if test="dbName == 'mysql'">concat('%',#{project.reportData.number},'%')</if>
+				AND prd.number LIKE concat('%',#{project.reportData.number},'%')
 			</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>
+				AND w.name LIKE concat('%',#{client.name},'%')
 			</if>
-			<!--<if test="officeId != null and officeId != ''">
-				AND so.id  = #{officeId}
-			</if>-->
 			<if test="officeIdList!=null and officeIdList.size!=0">
 				and a.office_id in
 				<foreach collection="officeIdList" item="officeId" separator="," open="(" close=")">
 					#{officeId}
 				</foreach>
 			</if>
-
 			<if test="redNotStatusList!=null and redNotStatusList.size!=0">
 				and a.invoice_state not in
 				<foreach collection="redNotStatusList" item="status" separator="," open="(" close=")">
@@ -1702,9 +1869,6 @@
 			<if test="officeId == '' and officeName!=null and officeName!=''">
 				AND o.name like concat('%',#{officeName},'%')
 			</if>
-			<!--<if test="submitterId != null and submitterId != ''">
-				AND a.create_by = #{submitterId}
-			</if>-->
 			<if test="(submitterId != null and submitterId != '') or (submitterName != null and submitterName != '')">
 				AND (a.create_by = #{submitterId} or su.name like concat('%',#{submitterName},'%'))
 			</if>
@@ -1712,10 +1876,7 @@
 				AND a.receipt_money = #{receiptMoney}
 			</if>
 			<if test="moneyStr != null and moneyStr != ''">
-				AND a.money LIKE
-				<if test="dbName == 'oracle'">'%'||#{moneyStr}||'%'</if>
-				<if test="dbName == 'mssql'">'%'+#{moneyStr}+'%'</if>
-				<if test="dbName == 'mysql'">concat('%',#{moneyStr},'%')</if>
+				AND a.money LIKE concat('%',#{moneyStr},'%')
 			</if>
 			<if test="invoiceType != null and invoiceType != ''">
 				AND a.invoice_type = #{invoiceType}
@@ -1739,10 +1900,7 @@
 				AND a.billing_content = #{billingContent}
 			</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>
+				AND a.invoice_number LIKE concat('%',#{invoiceNumber},'%')
 			</if>
 			<if test="invoiceDate != null and invoiceDate != ''">
 				AND a.invoice_date = #{invoiceDate}
@@ -1757,30 +1915,19 @@
 				AND a.is_invalid = #{isInvalid}
 			</if>
 			<if test="area != null and area.id != null and area.id != ''">
-				AND (a.area_parent_id LIKE
-				<if test="dbName == 'oracle'">'%'||#{area.id}||'%'</if>
-				<if test="dbName == 'mssql'">'%'+#{area.id}+'%'</if>
-				<if test="dbName == 'mysql'">concat('%',#{area.id},'%')</if>
-				or a.area_id = #{area.id}
-				)
+				AND (a.area_parent_id LIKE concat('%',#{area.id},'%') or a.area_id = #{area.id})
 			</if>
 			<if test="(accountCheckingUserId != null and accountCheckingUserId != '') or (accountCheckingUserName != null and accountCheckingUserName != '')">
 				AND (a.account_checking_user_id = #{accountCheckingUserId} or sua.name like concat('%',#{accountCheckingUserName},'%'))
 			</if>
-
 			<if test="isOmsBilling != null">
 				AND a.is_oms_billing = #{isOmsBilling}
 			</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>
+
+		<!-- count 不需要排序,直接去掉,提升性能 -->
+		<!-- ORDER BY 去掉 -->
 	</select>
 	<select id="queryMapCount" resultType="int" >
 		SELECT count(1)

+ 6 - 1
src/main/webapp/WEB-INF/tags/table/approvalSealAttachment.tag

@@ -17,6 +17,7 @@
 <%@ attribute name="showOperateBtn" type="java.lang.Boolean" description="是否显示操作按钮(添加/下载)"%>
 <%@ attribute name="attachmentFlag" type="java.lang.String" description="附件标识" %>
 <%@ attribute name="storeAs" type="java.lang.String" description="存储路径标识" %>
+<%@ attribute name="showOperateArea" type="java.lang.Boolean" description="是否显示操作按钮区域(添加附件和选择资料库)" %>
 
 <%-- 2. 初始化默认值(参数未传时使用) --%>
 <c:set var="ctx" value="${pageContext.request.contextPath}" />
@@ -29,6 +30,7 @@
 <c:set var="defShowOperateBtn" value="true" />
 <c:set var="defaultAttachmentFlag" value="6" />
 <c:set var="defaultStoreAs" value="wrkReimbursement" />
+<c:set var="defaultShowOperateArea" value="true" />
 
 <%-- 3. 处理参数默认值(为空时赋值默认值) --%>
 <c:if test="${empty title}"><c:set var="title" value="${defTitle}" /></c:if>
@@ -39,6 +41,7 @@
 <c:if test="${empty showOperateBtn}"><c:set var="showOperateBtn" value="${defShowOperateBtn}" /></c:if>
 <c:if test="${empty attachmentFlag}"><c:set var="attachmentFlag" value="${defaultAttachmentFlag}" /></c:if>
 <c:if test="${empty storeAs}"><c:set var="storeAs" value="${defaultStoreAs}" /></c:if>
+<c:if test="${empty showOperateArea}"><c:set var="showOperateArea" value="${defaultShowOperateArea}" /></c:if>
 
 <%-- 4. 组件核心HTML结构 --%>
 <div class="form-group layui-row">
@@ -46,6 +49,7 @@
     <div class="form-group-label"><h2>${title}</h2></div>
 
     <%-- 操作按钮区域(添加附件+下载模板) --%>
+<c:if test="${showOperateArea}">
     <c:if test="${showOperateBtn}">
         <div class="layui-item nav-btns">
                 <%-- 添加附件按钮 --%>
@@ -56,6 +60,7 @@
             ${templateUrl}
         </div>
     </c:if>
+</c:if>
 
     <%-- 上传进度条(默认隐藏) --%>
     <div id="addFile_${baseId}" style="display: none" class="upload-progress">
@@ -283,7 +288,7 @@
                                 <i class="fa fa-download"></i>&nbsp;下载
                             </a>
 
-                            <c:if test="${showOperateBtn}">
+                            <c:if test="${showOperateBtn and showOperateArea}">
                                 <%-- 删除按钮 --%>
                                 <a href="javascript:void(0)"
                                    onclick="deleteFileFromAliyun(this,'${pageContext.request.contextPath}${fns:getAdminPath()}/sys/workattachment/deleteFileFromAliyun?url=${workClientAttachment.url}&id=${workClientAttachment.id}&type=2','addFile_${baseId}','_${baseId}')"

+ 162 - 0
src/main/webapp/webpage/modules/ruralprojectrecords/view/reportView.jsp

@@ -532,6 +532,168 @@
 					</div>
 				</div>
 			</div>
+
+			<c:if test="${projectRecords.attachmentProjectSort == 8 && not empty projectcontentinfo.workAttachments}">
+
+
+				<div class="form-group layui-row">
+					<div class="form-group-label"><h2>审定单签章附件信息</h2></div>
+					<div class="layui-item layui-col-xs12" style="padding:0 16px;">
+						<table id="listAttachment" class="table table-bordered table-condensed details">
+							<thead>
+							<tr>
+									<%-- <th>序号</th>--%>
+								<th>文件预览</th>
+								<th>上传人</th>
+								<th>上传时间</th>
+								<th width="180px">操作</th>
+							</tr>
+							</thead>
+							<tbody id="file_attachment_judgement">
+							<c:forEach items="${projectcontentinfo.workAttachments}" var = "workClientAttachment" varStatus="status">
+								<tr>
+										<%-- <td>${status.index + 1}</td>--%>
+									<c:choose>
+										<c:when test="${projectcontentinfo.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="preview('预览','${workClientAttachment.temporaryUrl}','90%','90%','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}">
+												</c:when>
+												<c:otherwise>
+													<c:choose>
+														<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+															<td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%','1')">${workClientAttachment.attachmentName}</a></td>
+														</c:when>
+														<c:otherwise>
+															<c:choose>
+																<c:when test="${workReimbursement.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}">
+																		</c:when>
+																		<c:otherwise>
+																			<c:choose>
+																				<c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+																					<td><a 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>
+														</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" >
+											<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:if test="${workClientAttachment.createBy.id eq fns:getUser().id}">--%>
+												<%--														<a href="javascript:void(0)" onclick="deleteFileFromAliyun(this,'${ctx}/sys/workattachment/deleteFileFromAliyun?url=${workClientAttachment.url}&id=${workClientAttachment.id}&type=2','addFile_attachment','_attachment')" class="op-btn op-btn-delete" ><i class="fa fa-trash"></i>&nbsp;删除</a>--%>
+												<%--													</c:if>--%>
+											<c:if test="${not empty projectRecords.qualitySignatureContractId}">
+												<a href="javascript:location.href='${ctx}/ruralProject/signatureCallBack/downLoadJudgementReportAttach?contractId='+'${projectRecords.qualitySignatureContractId}'" class="op-btn  op-btn-download layui-bg-orange">审定单签章下载</a>
+											</c:if>
+										</div>
+									</td>
+								</tr>
+							</c:forEach>
+							</tbody>
+						</table>
+					</div>
+				</div>
+
+
+			</c:if>
+
 			<c:if test="${projectRecords.submitMoney==2 || (projectRecords.submitMoney==1 && (0==projectRecords.emergencyProject || null==projectRecords.emergencyProject))}">
 				<div>
 					<div class="form-group-label">

+ 47 - 20
src/main/webapp/webpage/modules/workinvoice/workInvoiceAllList.jsp

@@ -463,33 +463,40 @@
 				<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">
+					<div class="commonQuery lw6">
+						<div class="layui-item query athird" style="width: 25%">
 							<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">
+						<div class="layui-item query athird" style="width: 25%">
 							<label class="layui-form-label">开票总金额:</label>
 							<div class="layui-input-block with-icon">
 								<form:input path="moneyStr" htmlEscape="false"  class=" form-control layui-input"/>
 							</div>
 						</div>
 
-						<%--<div class="layui-item query athird">
-							<label class="layui-form-label">项目编号:</label>
+						<div class="layui-item query athird " style="width: 25%">
+							<label class="layui-form-label" style="line-height:20px">发票申请编号:</label>
 							<div class="layui-input-block">
-								<form:input path="project.projectId" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+								<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 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="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" style="width: 25%">
 							<div class="input-group">
 								<a href="#" id="moresee"><i class="glyphicon glyphicon-menu-down"></i></a>
 								<div class="layui-btn-group search-spacing">
@@ -522,12 +529,6 @@
 									</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"
@@ -645,6 +646,20 @@
 							</div>
 						</div>
 
+								<div class="layui-item query athird">
+									<label class="layui-form-label">是否红冲:</label>
+									<div class="layui-input-block with-icon">
+										<select id="isRedFlush" name="isRedFlush" class="form-control simple-select">
+											<option value=""></option>
+											<option value="1" <c:if test="${workInvoiceShow.isRedFlush=='1'}">selected</c:if>>红冲</option>
+											<option value="2" <c:if test="${workInvoiceShow.isRedFlush=='2'}">selected</c:if>>被红冲</option>
+											<option value="3" <c:if test="${workInvoiceShow.isRedFlush=='3'}">selected</c:if>>全部</option>
+											<option value="0" <c:if test="${workInvoiceShow.isRedFlush=='0'}">selected</c:if>>否</option>
+										</select>
+									</div>
+								</div>
+
+
 
 					</div>
 				</form:form>
@@ -746,12 +761,20 @@
 				,{field:'accountCheckingArea',align:'center', sort:true,title: '对账地区',  width:90}
 				,{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){
+				,{field:'receiptMoney',align:'center', title: '是否收款',  width:135,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}/workinvoiceAll/workInvoiceAll/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>";
+
+
+						if(d.redInvoiceRelevancyId != undefined && d.redInvoiceRelevancyId != '')
+							xml += "<a class=\"status-label status-label-signed\" title=\"红冲开票编号:"+ d.redInvoiceRelevancyNumber +"\"href=\"javascript:void(0);\" onclick=\"openDialogListView('查看发票信息', '${ctx}/workinvoiceAll/workInvoiceAll/form?id=" + d.redInvoiceRelevancyId + "&tabId=1','"+ d.redInvoiceRelevancyId +"','95%', '95%')\">红冲</a>";
+
+						if(d.byRedInvoiceRelevancyId != undefined && d.byRedInvoiceRelevancyId != '')
+							xml += "<a class=\"status-label status-label-signed\" title=\"被红冲开票编号:"+ d.byRedInvoiceRelevancyNumber +"\"href=\"javascript:void(0);\" onclick=\"openDialogListView('查看发票信息', '${ctx}/workinvoiceAll/workInvoiceAll/form?id=" + d.byRedInvoiceRelevancyId + "&tabId=1','"+ d.byRedInvoiceRelevancyId +"','95%', '95%')\">被红冲</a>";
+
 						return xml;
 					}}
 				/*,{field:'cancellation',align:'center', title: '是否作废',  width:80}*/
@@ -927,6 +950,10 @@
 					,"omsAttachmentUrl": "${workInvoice.omsAttachmentUrl}"
 					,
 					"isSzCloud": "${workInvoice.isSzCloud}"
+					,"redInvoiceRelevancyId": "${workInvoice.redInvoiceRelevancyId}"
+					,"redInvoiceRelevancyNumber": "${workInvoice.redInvoiceRelevancyNumber}"
+					,"byRedInvoiceRelevancyId": "${workInvoice.byRedInvoiceRelevancyId}"
+					,"byRedInvoiceRelevancyNumber": "${workInvoice.byRedInvoiceRelevancyNumber}"
 					,
 					"money": "<fmt:formatNumber value="${workInvoice.money}" pattern="##0.00"/>"
 					,

+ 175 - 147
src/main/webapp/webpage/modules/workinvoice/workInvoiceAllTwoList.jsp

@@ -548,33 +548,40 @@
 				<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">
+					<div class="commonQuery lw6">
+						<div class="layui-item query athird" style="width: 25%">
 							<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">
+						<div class="layui-item query athird" style="width: 25%">
 							<label class="layui-form-label">开票总金额:</label>
 							<div class="layui-input-block with-icon">
 								<form:input path="moneyStr" htmlEscape="false"  class=" form-control layui-input"/>
 							</div>
 						</div>
 
-						<%--<div class="layui-item query athird">
-							<label class="layui-form-label">项目编号:</label>
+						<div class="layui-item query athird " style="width: 25%">
+							<label class="layui-form-label" style="line-height:20px">发票申请编号:</label>
 							<div class="layui-input-block">
-								<form:input path="project.projectId" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
+								<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 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="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" style="width: 25%">
 							<div class="input-group">
 								<a href="#" id="moresee"><i class="glyphicon glyphicon-menu-down"></i></a>
 								<div class="layui-btn-group search-spacing">
@@ -592,142 +599,151 @@
                                     <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/treeDataAll?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/treeDataAll?type=6" cssClass="form-control layui-input" allowInput="true" 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/treeDataAll?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:inquireselectUserNotReadolny id="accountCheckingUser" name="accountCheckingUserId" value="${workInvoice.accountCheckingUserId}" labelName="accountCheckingUserName" labelValue="${workInvoice.accountCheckingUserName}" cssStyle="background-color: #fff"
+																  title="用户" url="/sys/office/treeDataAll?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">
+								<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/treeDataAll?type=6" cssClass="form-control layui-input" allowInput="true" 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/treeDataAll?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">
+								<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 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 class="layui-item query athird">
+							<label class="layui-form-label">是否接口开票:</label>
+							<div class="layui-input-block with-icon">
+								<select id="isOmsBilling" name="isOmsBilling" class="form-control simple-select">
+									<option value=""></option>
+									<option value="0" <c:if test="${workInvoiceShow.isOmsBilling=='0'}">selected</c:if>>是</option>
+									<option value="1" <c:if test="${workInvoiceShow.isOmsBilling=='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">
+								<select id="isRedFlush" name="isRedFlush" class="form-control simple-select">
+									<option value=""></option>
+									<option value="1" <c:if test="${workInvoiceShow.isRedFlush=='1'}">selected</c:if>>红冲</option>
+									<option value="2" <c:if test="${workInvoiceShow.isRedFlush=='2'}">selected</c:if>>被红冲</option>
+									<option value="3" <c:if test="${workInvoiceShow.isRedFlush=='3'}">selected</c:if>>全部</option>
+									<option value="0" <c:if test="${workInvoiceShow.isRedFlush=='0'}">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">
-										<select id="isOmsBilling" name="isOmsBilling" class="form-control simple-select">
-											<option value=""></option>
-											<option value="0" <c:if test="${workInvoiceShow.isOmsBilling=='0'}">selected</c:if>>是</option>
-											<option value="1" <c:if test="${workInvoiceShow.isOmsBilling=='1'}">selected</c:if>>否</option>
-										</select>
-									</div>
-								</div>
 					</div>
 				</form:form>
 			</div>
@@ -821,12 +837,20 @@
 				,{field:'accountCheckingArea',align:'center', sort:true,title: '对账地区',  width:90}
 				,{field:'invoiceDate',align:'center', title: '开票日期',  width:90}
 				,{field:'receiptMoneyDate',align:'center', title: '收款日期',  width:90}
-				,{field:'receiptMoney',align:'center', title: '是否收款',  width:90,templet:function(d){
+				,{field:'receiptMoney',align:'center', title: '是否收款',  width:135,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}/workinvoiceAll/workInvoiceAll/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>";
+
+
+						if(d.redInvoiceRelevancyId != undefined && d.redInvoiceRelevancyId != '')
+							xml += "<a class=\"status-label status-label-signed\" title=\"红冲开票编号:"+ d.redInvoiceRelevancyNumber +"\"href=\"javascript:void(0);\" onclick=\"openDialogListView('查看发票信息', '${ctx}/workinvoiceAll/workInvoiceAll/form?id=" + d.redInvoiceRelevancyId + "&tabId=1','"+ d.redInvoiceRelevancyId +"','95%', '95%')\">红冲</a>";
+
+						if(d.byRedInvoiceRelevancyId != undefined && d.byRedInvoiceRelevancyId != '')
+							xml += "<a class=\"status-label status-label-signed\" title=\"被红冲开票编号:"+ d.byRedInvoiceRelevancyNumber +"\"href=\"javascript:void(0);\" onclick=\"openDialogListView('查看发票信息', '${ctx}/workinvoiceAll/workInvoiceAll/form?id=" + d.byRedInvoiceRelevancyId + "&tabId=1','"+ d.byRedInvoiceRelevancyId +"','95%', '95%')\">被红冲</a>";
+
 						return xml;
 					}}
 				/*,{field:'cancellation',align:'center', title: '是否作废',  width:80}*/
@@ -976,6 +1000,10 @@
 					,"omsAttachmentUrl": "${workInvoice.omsAttachmentUrl}"
 					,
 					"workAccountListStr":${fns:toJson(workInvoice.workAccountList)}
+					,"redInvoiceRelevancyId": "${workInvoice.redInvoiceRelevancyId}"
+					,"redInvoiceRelevancyNumber": "${workInvoice.redInvoiceRelevancyNumber}"
+					,"byRedInvoiceRelevancyId": "${workInvoice.byRedInvoiceRelevancyId}"
+					,"byRedInvoiceRelevancyNumber": "${workInvoice.byRedInvoiceRelevancyNumber}"
 					,
 					"money": "<fmt:formatNumber value="${workInvoice.money}" pattern="##0.00"/>"
 					,

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

@@ -71,6 +71,12 @@
 				  if(undefined == redInvoiceFlag || null == redInvoiceFlag || '' == redInvoiceFlag || redInvoiceFlag == "0"){
 					  // 非红票分支:无任何校验(发票号+表格)
 					  var isOmsBilling = $('input:radio[name="isOmsBilling"]:checked').val();// 红冲原因值
+					  console.log("isOmsBilling", isOmsBilling)
+					  // 先删除旧的,避免重复
+					  $("input[name='isOmsBilling'][type='hidden']").remove();
+
+					  // 动态创建隐藏域,塞到表单里
+					  $("#inputForm").append("<input type='hidden' name='isOmsBilling' value='"+isOmsBilling+"'>");
 					  if (relatedInvoice === "0") {
 						  needCheckTable = true;
 					  }
@@ -104,6 +110,15 @@
 						  }
 					  }
 				  }else{
+
+					  var isOmsBilling = $('input:radio[name="isOmsBilling"]:checked').val();// 红冲原因值
+					  console.log("isOmsBilling", isOmsBilling)
+					  // 先删除旧的,避免重复
+					  $("input[name='isOmsBilling'][type='hidden']").remove();
+
+					  // 动态创建隐藏域,塞到表单里
+					  $("#inputForm").append("<input type='hidden' name='isOmsBilling' value='"+isOmsBilling+"'>");
+
 					  // 红票分支:初始化变量
 					  var redIsOmsBilling = $("#redIsOmsBilling").val();// 被红冲的票是不是经过接口开出来的(如果不是,则需要手动进行开票)
 					  var relatedInvoice = $('input:radio[name="relatedInvoice"]:checked').val();// 红冲原因值
@@ -227,6 +242,9 @@
 					radioList[i].parentNode.classList.add("layui-disabled");
 				}
 			}
+			// ==================== 新加这段 同步值到隐藏域 ====================
+			var realVal = $('input[name=isOmsBilling]:checked').val();
+			$('#hide_isOmsBilling').val(realVal);
 
 
 
@@ -879,6 +897,8 @@
 				<div class="layui-input-block">
 					<input type="radio" name="isOmsBilling" lay-filter="isOmsBillingRadio" title="是" value="1">
 					<input type="radio" name="isOmsBilling" lay-filter="isOmsBillingRadio" title="否" value="0">
+					<!-- 加这一行 👇 关键 -->
+					<input type="hidden" name="isOmsBilling" id="hide_isOmsBilling">
 				</div>
 			</div>
 			<%--<div class="layui-item layui-col-sm12">

+ 38 - 11
src/main/webapp/webpage/modules/workinvoice/workInvoiceTwoList.jsp

@@ -591,20 +591,27 @@
 					<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">
+					<div class="commonQuery lw6">
+						<div class="layui-item query athird" style="width: 25%">
 							<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">
+						<div class="layui-item query athird" style="width: 25%">
 							<label class="layui-form-label">开票总金额:</label>
 							<div class="layui-input-block with-icon">
 								<form:input path="moneyStr" htmlEscape="false"  class=" form-control layui-input"/>
 							</div>
 						</div>
 
+						<div class="layui-item query athird " style="width: 25%">
+							<label class="layui-form-label" style="line-height:20px">发票申请编号:</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">
@@ -617,7 +624,7 @@
                                     <form:input path="project.projectName" htmlEscape="false" maxlength="64"  class=" form-control layui-input"/>
                                 </div>
                             </div>--%>
-						<div class="layui-item athird">
+						<div class="layui-item athird" style="width: 25%">
 							<div class="input-group">
 								<a href="#" id="moresee"><i class="glyphicon glyphicon-menu-down"></i></a>
 								<div class="layui-btn-group search-spacing">
@@ -650,12 +657,6 @@
 							</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"
@@ -772,6 +773,20 @@
 								</select>
 							</div>
 						</div>
+
+						<div class="layui-item query athird">
+							<label class="layui-form-label">是否红冲:</label>
+							<div class="layui-input-block with-icon">
+								<select id="isRedFlush" name="isRedFlush" class="form-control simple-select">
+									<option value=""></option>
+									<option value="1" <c:if test="${workInvoiceShow.isRedFlush=='1'}">selected</c:if>>红冲</option>
+									<option value="2" <c:if test="${workInvoiceShow.isRedFlush=='2'}">selected</c:if>>被红冲</option>
+									<option value="3" <c:if test="${workInvoiceShow.isRedFlush=='3'}">selected</c:if>>全部</option>
+									<option value="0" <c:if test="${workInvoiceShow.isRedFlush=='0'}">selected</c:if>>否</option>
+								</select>
+							</div>
+						</div>
+
 					</div>
 				</form:form>
 			</div>
@@ -865,12 +880,20 @@
 				,{field:'accountCheckingArea',align:'center', sort:true,title: '对账地区',  width:90}
 				,{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){
+				,{field:'receiptMoney',align:'center', title: '是否收款',  width:120,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}/workinvoiceAll/workInvoiceAll/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>";
+
+
+						if(d.redInvoiceRelevancyId != undefined && d.redInvoiceRelevancyId != '')
+							xml += "<a class=\"status-label status-label-signed\" title=\"红冲开票编号:"+ d.redInvoiceRelevancyNumber +"\"href=\"javascript:void(0);\" onclick=\"openDialogListView('查看发票信息', '${ctx}/workinvoiceAll/workInvoiceAll/form?id=" + d.redInvoiceRelevancyId + "&tabId=1','"+ d.redInvoiceRelevancyId +"','95%', '95%')\">红冲</a>";
+
+						if(d.byRedInvoiceRelevancyId != undefined && d.byRedInvoiceRelevancyId != '')
+							xml += "<a class=\"status-label status-label-signed\" title=\"被红冲开票编号:"+ d.byRedInvoiceRelevancyNumber +"\"href=\"javascript:void(0);\" onclick=\"openDialogListView('查看发票信息', '${ctx}/workinvoiceAll/workInvoiceAll/form?id=" + d.byRedInvoiceRelevancyId + "&tabId=1','"+ d.byRedInvoiceRelevancyId +"','95%', '95%')\">被红冲</a>";
+
 						return xml;
 					}}
 				/*,{field:'cancellation',align:'center', title: '是否作废',  width:80}*/
@@ -1052,6 +1075,10 @@
 					"workAccountListStr":${fns:toJson(workInvoice.workAccountList)}
 					,
 					"isSzCloud": "${workInvoice.isSzCloud}"
+					,"redInvoiceRelevancyId": "${workInvoice.redInvoiceRelevancyId}"
+					,"redInvoiceRelevancyNumber": "${workInvoice.redInvoiceRelevancyNumber}"
+					,"byRedInvoiceRelevancyId": "${workInvoice.byRedInvoiceRelevancyId}"
+					,"byRedInvoiceRelevancyNumber": "${workInvoice.byRedInvoiceRelevancyNumber}"
 					,
 					"money": "<fmt:formatNumber value="${workInvoice.money}" pattern="##0.00"/>"
 					,

+ 32 - 14
src/main/webapp/webpage/modules/workprojectnotify/workProjectNotifyShowList.jsp

@@ -7,20 +7,38 @@
 	<meta name="decorator" content="default"/>
 	<script type="text/javascript">
 		$(document).ready(function() {
-			// 按权限加载通知页面类型下拉框
-			var currentTypeVal = '${workProjectNotify.types}';
-			$.ajax({
-				url: '${ctx}/sysMenuDictRelation/getNotifyDictValuesByPermission',
-				type: 'GET',
-				success: function(data) {
-					var select = $('#types');
-					select.empty().append('<option value=""></option>');
-					$.each(data, function(i, item) {
-						var selected = (item.value == currentTypeVal) ? ' selected' : '';
-						select.append('<option value="' + item.value + '"' + selected + '>' + item.label + '</option>');
-					});
-					layui.form.render('select');
-				}
+			// 等待 layui 加载完成后再执行(关键修复)
+			layui.use(['form', 'jquery'], function(){
+				var form = layui.form;
+				var $ = layui.jquery;
+
+				// 按权限加载通知页面类型下拉框
+				var currentTypeVal = '${workProjectNotify.types}';
+
+				$.ajax({
+					url: '${ctx}/sysMenuDictRelation/getNotifyDictValuesByPermission',
+					type: 'GET',
+					// 增加超时、错误处理
+					timeout: 10000,
+					success: function(data) {
+						console.log("下拉框数据:", data);
+						var select = $('#types');
+						select.empty().append('<option value=""></option>');
+
+						$.each(data, function(i, item) {
+							var selected = (item.value == currentTypeVal) ? ' selected' : '';
+							select.append('<option value="' + item.value + '"' + selected + '>' + item.label + '</option>');
+						});
+
+						// 强制渲染(必须放在 layui.use 内部)
+						form.render('select');
+					},
+					error: function(xhr, type, errorThrown){
+						console.error("下拉框加载失败:", errorThrown);
+						// 失败也渲染一次,避免卡死
+						form.render('select');
+					}
+				});
 			});
 		});
         function openDialogre(title,url,width,height,target){