ouyj 1 месяц назад
Родитель
Сommit
290d18fb5e

+ 228 - 0
src/main/contract/com/yw/contract/client/action/ContractQueryListAction.java

@@ -0,0 +1,228 @@
+package com.yw.contract.client.action;
+
+import com.yw.contract.contract.model.ContractInfo;
+import com.yw.contract.contract.service.ContractEntryService;
+import com.yw.core.clientImpl.model.ResultVo;
+import com.yw.core.clientImpl.service.RequestAbs;
+import com.yw.core.session.AppSession;
+import com.yw.core.utils.ParameterHelper;
+import com.yw.core.utils.RegisterCodeImpl;
+import com.yw.core.utils.StringUtil;
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.context.ApplicationContext;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 从MES查询OA合同分页列表
+ */
+public class ContractQueryListAction extends RequestAbs {
+    public final String serviceId = "contract_mesContractQueryList";
+    private ApplicationContext cxt = null;
+
+    @Override
+    public String getResult() {
+        // 获取请求的参数
+        String param = getParameters();
+        JSONObject json = JSONObject.fromObject(param);
+
+        if (null == cxt) {
+            cxt = AppSession.getApplicationContext();
+        }
+
+        ResultVo rv = null;
+
+        try {
+            // 获取单位ID(必传参数)
+            String unitIdStr = json.getString("unitId");
+            
+            if (StringUtil.isEmpty(unitIdStr)) {
+                rv = new ResultVo();
+                rv.setReturnCode("-1");
+                rv.setReturnMsg("单位ID不能为空");
+                return JSONObject.fromObject(rv, config).toString();
+            }
+            
+            Long unitId = Long.valueOf(unitIdStr);
+
+            // 获取分页参数
+            int page = json.has("page") ? json.getInt("page") : 1;
+            int pageSize = json.has("pageSize") ? json.getInt("pageSize") : 10;
+
+            // 获取查询条件
+            String contractNumber = json.optString("contractNumber", ""); // 合同编号
+            String contractName = json.optString("contractName", ""); // 合同名称
+            String contractType = json.optString("contractType", ""); // 合同类型
+            String isValidStr = json.optString("isValid", ""); // 流程状态
+
+            // 验证isValid参数,只允许0、1、3
+            Integer isValid = null;
+            if (StringUtils.isNotEmpty(isValidStr)) {
+                try {
+                    isValid = Integer.parseInt(isValidStr);
+                    if (isValid != 0 && isValid != 1 && isValid != 3) {
+                        rv = new ResultVo();
+                        rv.setReturnCode("-1");
+                        rv.setReturnMsg("isValid参数只能为0、1或3");
+                        return JSONObject.fromObject(rv, config).toString();
+                    }
+                } catch (NumberFormatException e) {
+                    rv = new ResultVo();
+                    rv.setReturnCode("-1");
+                    rv.setReturnMsg("isValid参数格式错误");
+                    return JSONObject.fromObject(rv, config).toString();
+                }
+            }
+
+            ContractEntryService contractEntryService = 
+                (ContractEntryService) cxt.getBean("contractEntryService");
+
+            // 构建查询参数(参考ContractEntryAction的实现方式)
+            ParameterHelper ph = new ParameterHelper();
+            if (StringUtils.isNotEmpty(contractNumber)) {
+                ph.setParam("contract_search_number", "%" + contractNumber + "%");
+            }
+            if (StringUtils.isNotEmpty(contractName)) {
+                ph.setParam("contract_search_name", "%" + contractName + "%");
+            }
+            if (StringUtils.isNotEmpty(contractType)) {
+                ph.setParam("contract_search_type", contractType); // 精确匹配,不加%
+            }
+            if (isValid != null) {
+                ph.setParam("isValid", isValid.toString());
+            }
+
+            // 构建查询对象,将unitId放入ContractInfo中
+            ContractInfo info = new ContractInfo();
+            info.setUnit_id(unitId);
+            
+            // 调用Service查询合同列表(使用MES专用方法,默认查询isValid为0、1、3的合同)
+            List<ContractInfo> contractList = contractEntryService.mesContractEntryList(
+                String.valueOf(page - 1), 
+                String.valueOf(pageSize), 
+                ph, 
+                info
+            );
+            
+            // 查询总数
+            int total = contractEntryService.countMesContractEntry(ph, info);
+
+            // 构建返回数据(只返回列表需要的核心字段)
+            JSONArray contractArray = new JSONArray();
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            if (contractList != null && !contractList.isEmpty()) {
+                for (ContractInfo contract : contractList) {
+                    JSONObject contractJson = new JSONObject();
+                    // 基础信息
+                    contractJson.put("universalid", contract.getUniversalid());
+                    contractJson.put("contractNumber", contract.getContract_number()); // 合同编号
+                    contractJson.put("contractName", contract.getContract_name()); // 合同名称
+                    contractJson.put("contractType", contract.getContract_type()); // 合同类型
+                    contractJson.put("contractTypeName", contract.getContract_type_name()); // 合同类型名称
+                    contractJson.put("applyDate", contract.getApplyDate()); // 填报日期
+                    
+                    // 格式化日期字段
+                    if (contract.getCreateTime() != null) {
+                        contractJson.put("createTime", sdf.format(contract.getCreateTime())); // 生成时间
+                    }
+                    contractJson.put("initiator", contract.getInitiator()); // 发起人
+
+                    // 金额和日期
+                    contractJson.put("contractMoney", contract.getContract_money()); // 合同金额 
+                    /*if (contract.getContract_entrying_date() != null) {
+                        contractJson.put("contractEntryingDate", sdf.format(contract.getContract_entrying_date())); // 录入日期
+                    }*/
+
+                    // 供需方
+                    contractJson.put("firstpartyName", contract.getFirstparty_name()); // 甲方/需方名称
+                    contractJson.put("secondpartyName", contract.getSecondparty_name()); // 乙方/供方名称
+
+                    // 人员信息
+                    contractJson.put("salesmanName", contract.getSalesman_name()); // 业务员名称
+                    contractJson.put("salesmanTel", contract.getSalesmanTel()); // 经办人电话 
+                    contractJson.put("department", contract.getDepartment()); // 填报部门
+                    contractJson.put("otherContractor", contract.getOther_contractor()); // 对方联系人及电话
+
+                    
+                    // 供应商或客户
+                    contractJson.put("supplierCode", contract.getSupplierCode()); // 供应商编码
+                    contractJson.put("supplierName", contract.getSupplierName()); // 供应商名称
+                    
+                    // 项目和位置
+                    contractJson.put("projectItem", contract.getProjectItem()); // 所属项目或产品
+                    contractJson.put("usePosition", contract.getUsePosition()); // 使用位置
+                    
+                    // 流程状态
+                    contractJson.put("isValid", contract.getIsValid()); // 流程办理状态
+                    contractJson.put("processId", contract.getProcessId()); // 流水号
+                    contractJson.put("flowInsId", contract.getFlowInsId()); // 流程实例id
+                    contractJson.put("lFormInsId", contract.getlFormInsId()); // 表单实例ID
+                    
+                    // 采购相关
+                    contractJson.put("purchaseId", contract.getPurchaseId()); // 采购申请单ID
+                    contractJson.put("purchaseNumber", contract.getPurchaseNumber()); // 采购申请单编号
+                    contractJson.put("orderNumber", contract.getOrderNumber()); // 采购订单编号
+                    
+                    // 其他信息
+                    contractJson.put("contractContent", contract.getContractContent()); // 合同内容
+                    contractJson.put("otherFile", contract.getOtherFile()); // 随合同提交的其它材料
+                    contractJson.put("salesmanSign", contract.getSalesmanSign()); // 经办人签字
+                    
+                    contractArray.add(contractJson);
+                }
+            }
+
+            JSONObject resultData = new JSONObject();
+            resultData.put("total", total);
+            resultData.put("page", page);
+            resultData.put("pageSize", pageSize);
+            resultData.put("list", contractArray);
+
+            rv = new ResultVo();
+            rv.setReturnCode("1");
+            rv.setReturnMsg("success");
+            rv.setReturnParams(resultData.toString());
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            rv = new ResultVo();
+            rv.setReturnCode("-1");
+            rv.setReturnMsg("查询合同列表异常:" + e.getMessage());
+        }
+
+        return JSONObject.fromObject(rv, config).toString();
+    }
+
+    @Override
+    public String getServiceId() {
+        return serviceId;
+    }
+
+    public static void main(String[] args) throws Exception {
+        // 测试用例
+        String url = "http://localhost:8180/ynet/clientServices.do?iscrypt=1";
+        
+        // 构造测试数据
+        JSONObject testData = new JSONObject();
+        testData.put("serviceId", "contract_mesContractQueryList");
+        
+        JSONObject params = new JSONObject();
+        params.put("unitId", "405015400328302"); // 单位ID(必传)
+        params.put("page", 1); // 页码
+        params.put("pageSize", 20); // 每页条数
+        //params.put("contractNumber", "HT2026"); // 合同编号(可选)
+        //params.put("contractName", "测试"); // 合同名称(可选)
+        params.put("contractType", "2"); // 合同类型(可选,1销售合同 ,2采购合同)
+        //params.put("isValid", "1"); // 流程状态(可选,只能是0审批中、1已生效、3退回发起人)
+        
+        testData.put("params", params);
+        
+        String rs = RegisterCodeImpl.requestPage(url, testData.toString());
+        System.out.println(rs);
+    }
+}

+ 21 - 0
src/main/contract/com/yw/contract/contract/dao/ContractEntryDao.java

@@ -168,4 +168,25 @@ public interface ContractEntryDao {
 	int delByObject(Object obj) throws Exception;
 	
 	List<ContractPayment> loadPayments(String dvalue, IAppSession oasession) throws Exception;
+	
+	/**
+	 * MES合同列表查询(默认查询isValid为0、1、3的合同)
+	 * @param p
+	 * @param pSize
+	 * @param ph
+	 * @param info 包含unit_id
+	 * @return
+	 * @throws Exception
+	 */
+	List<ContractInfo> mesContractEntryList(int p, int pSize,
+			ParameterHelper ph, ContractInfo info)throws Exception;
+	
+	/**
+	 * MES合同数量统计(默认查询isValid为0、1、3的合同)
+	 * @param ph
+	 * @param info 包含unit_id
+	 * @return
+	 * @throws Exception
+	 */
+	int countMesContractEntry(ParameterHelper ph, ContractInfo info)throws Exception;
 }

+ 58 - 0
src/main/contract/com/yw/contract/contract/dao/ContractEntryDaoImpl.java

@@ -700,4 +700,62 @@ public class ContractEntryDaoImpl extends BaseDao implements ContractEntryDao {
 		return jdbcTemplate.query(sql, new Object[] { dvalue }, rowMapper);
 	}
 
+	@Override
+	public List<ContractInfo> mesContractEntryList(int p, int pSize, ParameterHelper ph, ContractInfo info) throws Exception {
+		Long unitId = info.getUnit_id();
+		StringBuffer sb = new StringBuffer("SELECT ec.universalid, ec.sign_number, ec.contract_number, ec.contract_name, ec.contract_type, ec.warranty_period, "
+				+ "ec.contract_money, ec.contract_signdate, ec.salesman, ec.duty_department, ec.duty_man, ec.payment_method, "
+				+ "ec.contract_startdate, ec.contract_enddate, ec.firstparty, ec.firstparty_name, ec.secondparty, ec.secondparty_name, "
+				+ "ec.firstparty_duty_man, ec.secondparty_duty_man, ec.contract_entrying_date, ec.contract_entrying_operator, "
+				+ "ec.contract_accessory, ec.main_accessory, ec.contract_status, ec.firstparty_table, ec.secondparty_table, "
+				+ "ec.other_contractor, ec.unit_id, ec.isdraft, ec.project_id, ec.project_name, ec.project_code, "
+				+ "ec.contract_gold, ec.contract_target, ec.au_state, ec.flow_id, ec.execute_state, "
+				+ "ec.supplier_code, ec.supplier_name, ec.l_form_ins_id, ec.l_model_id, ec.flow_ins_id, ec.is_valid, "
+				+ "ec.process_id, ec.initiator, ec.department, ec.depid, ec.apply_date, ec.creator, "
+				+ "ec.departmental_opinion, ec.deputy_general_manager_opinion, ec.audit_deputy_general_manager_opinion, "
+				+ "ec.general_manager_opinion, ec.finance_opinion, ec.chairman_opinion, ec.contract_content, "
+				+ "ec.project_item, ec.use_position, ec.create_time, ec.salesman_tel, ec.salesman_sign, ec.other_file, "
+				+ "ec.purchase_id, ec.purchase_number, ec.order_number, "
+				+ "tu1.name AS duty_man_name, tu2.name AS salesman_name, tg.GROUPNAME AS duty_department_name, ed.dname AS contract_type_name "
+				+ " FROM contract ec LEFT JOIN t_user tu1 ON ec.duty_man=tu1.UNIVERSALID " 
+				+ "LEFT JOIN t_user tu2 ON ec.salesman=tu2.UNIVERSALID "
+				+ "LEFT JOIN t_group tg ON ec.duty_department=tg.UNIVERSALID " 
+				+ "LEFT JOIN contract_data_dictionary ed ON ec.contract_type=ed.dvalue "
+				+ "AND ed.parentid = (SELECT universalid FROM contract_data_dictionary WHERE dvalue = '" + ContractConstant.CONTRACT_TYPE + "' AND group_root_id=" + unitId + ")"
+				+ " AND ed.is_valid = '1' "
+				+ "WHERE ec.contract_status='0' AND ec.isdraft = '0' AND ec.unit_id=" + unitId);
+		sb.append(whereMesListSql(ph));
+		return getPagerService().queryForObject(p, pSize, sb.toString(), info);
+	}
+
+	private Object whereMesListSql(ParameterHelper ph) {
+		StringBuffer sb = new StringBuffer();
+		if (null != ph.getParam("contract_search_number") && !"".equals(ph.getParam("contract_search_number"))) {
+			sb.append(" AND ec.contract_number LIKE '" + ph.getParam("contract_search_number") + "'");
+		}
+		if (null != ph.getParam("contract_search_name") && !"".equals(ph.getParam("contract_search_name"))) {
+			sb.append(" AND ec.contract_name LIKE '" + ph.getParam("contract_search_name") + "'");
+		}
+		if (null != ph.getParam("contract_search_type") && !"".equals(ph.getParam("contract_search_type"))) {
+			sb.append(" AND ec.contract_type = '" + ph.getParam("contract_search_type") + "'");
+		}
+		// MES接口特殊处理:默认查询isValid为0、1、3的合同
+		if (null != ph.getParam("isValid") && !"".equals(ph.getParam("isValid"))) {
+			sb.append(" AND ec.is_valid = '" + ph.getParam("isValid") + "'");
+		} else {
+			sb.append(" AND ec.is_valid IN (0, 1, 3)");
+		}
+		sb.append(" ORDER BY ec.contract_entrying_date DESC,ec.create_time DESC ");
+		return sb.toString();
+	}
+
+	@Override
+	public int countMesContractEntry(ParameterHelper ph, ContractInfo info) throws Exception {
+		Long unitId = info.getUnit_id();
+		StringBuffer sb = new StringBuffer("SELECT COUNT(*) FROM contract ec LEFT JOIN t_user tu1 ON ec.duty_man=tu1.UNIVERSALID "
+				+ " WHERE ec.contract_status='0' AND ec.isdraft = '0'  AND ec.unit_id=" + unitId);
+		sb.append(whereMesListSql(ph));
+		return jdbcTemplate.queryForObject(sb.toString(), Integer.class);
+	}
+
 }

+ 21 - 0
src/main/contract/com/yw/contract/contract/service/ContractEntryService.java

@@ -186,4 +186,25 @@ public interface ContractEntryService {
 	
 	void lockPurchaseDetailsFromContract(String formInsId) throws Exception;
 
+	/**
+	 * MES合同列表查询(默认查询isValid为0、1、3的合同)
+	 * @param p
+	 * @param pSize
+	 * @param ph
+	 * @param info 包含unit_id
+	 * @return
+	 * @throws Exception
+	 */
+	List<ContractInfo> mesContractEntryList(String p, String pSize,
+			ParameterHelper ph, ContractInfo info)throws Exception;
+	
+	/**
+	 * MES合同数量统计(默认查询isValid为0、1、3的合同)
+	 * @param ph
+	 * @param info 包含unit_id
+	 * @return
+	 * @throws Exception
+	 */
+	int countMesContractEntry(ParameterHelper ph, ContractInfo info)throws Exception;
+
 }

+ 25 - 2
src/main/contract/com/yw/contract/contract/service/ContractEntryServiceImpl.java

@@ -765,6 +765,29 @@ public class ContractEntryServiceImpl implements ContractEntryService {
 					 } 
 				 }
 			 }
-		} 
-	}  
+		}  
+	}
+
+	@Override
+	public List<ContractInfo> mesContractEntryList(String p, String pSize, ParameterHelper ph, ContractInfo info) throws Exception {
+		int n_p;
+		int n_pSize;
+		if (StringUtils.isNumeric(p)) {
+			n_p = Integer.parseInt(p);
+		} else {
+			n_p = 0;
+		}
+
+		if (StringUtils.isNumeric(pSize)) {
+			n_pSize = Integer.parseInt(pSize);
+		} else {
+			n_pSize = 20;
+		}		
+		return contractEntryDao.mesContractEntryList(n_p, n_pSize, ph, info);
+	}
+
+	@Override
+	public int countMesContractEntry(ParameterHelper ph, ContractInfo info) throws Exception {
+		return contractEntryDao.countMesContractEntry(ph, info);
+	}
 }