package cn.ksource.web.facade.bpbj; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Stack; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import cn.ksource.beans.CMDB_CI_CATEGORY; import cn.ksource.beans.GG_RECORD; import cn.ksource.beans.SC_WORKFLOW_RELEASE; import cn.ksource.beans.SPARE_PART; import cn.ksource.beans.SPARE_PART_APPLY; import cn.ksource.beans.SPARE_PART_DELIVERY; import cn.ksource.beans.SPARE_PART_STORAGE; import cn.ksource.beans.WORKFLOW_BASE; import cn.ksource.beans.WORKFLOW_NODE; import cn.ksource.core.dao.BaseDao; import cn.ksource.core.dao.SqlParameter; import cn.ksource.core.page.PageInfo; import cn.ksource.core.util.AjaxUtil; import cn.ksource.core.util.ConvertUtil; import cn.ksource.core.util.DateUtil; import cn.ksource.core.util.JsonUtil; import cn.ksource.core.util.OrderCodeUtil; import cn.ksource.core.util.StringUtil; import cn.ksource.core.util.TwoDimensionCode; import cn.ksource.core.web.SysInfoMsg; import cn.ksource.core.web.WebUtil; import cn.ksource.core.workflow.NodeDealEntity; import cn.ksource.core.workflow.NodeFinishEntity; import cn.ksource.core.workflow.WorkflowBusinessService; import cn.ksource.core.workflow.WorkflowCoreService; import cn.ksource.web.Constants; import cn.ksource.web.entity.WorkFlowSupportEntity; import cn.ksource.web.service.WorkOrderCodeService; import cn.ksource.web.service.record.RecordService; import cn.ksource.web.service.workFlowSupport.WorkFlowSupportService; @Service("DeliveryAuditingFacade") public class DeliveryAuditingFacadeImpl implements DeliveryAuditingFacade { @Resource private BaseDao baseDao; @Autowired private WorkflowBusinessService workflowBusinessService; @Autowired private WorkOrderCodeService workOrderCodeService; @Autowired private WorkFlowSupportService workFlowSupportService; @Autowired private RecordService recordService; @Resource private WorkflowCoreService workflowCoreService; /** * 出库申请列表信息 * @return */ @Override public List getStockList() { return baseDao.queryForList(" select * from SPARE_PART where STATE=1 "); } /** * 出库申请列表信息 * @param pageInfo * @param params * @return */ @Override public PageInfo getDeliveryListData(Map params,PageInfo pageInfo) { StringBuilder sql = new StringBuilder(); Map paramMap = new HashMap(); sql.append("SELECT DISTINCT\n" + " D.*, (\n" + " SELECT\n" + " ORDER_CODE\n" + " FROM\n" + " SPARE_PART_APPLY\n" + " WHERE\n" + " ID = D.APPLY_ORDER_ID\n" + " ) ORDER_CODE_A\n" + "FROM\n" + " SPARE_PART_DELIVERY D\n" + "LEFT JOIN WORKFLOW_NODE ON WORKFLOW_NODE.FLOWID = D.FLOW_ID\n" + "WHERE\n" + " (\n" + " WORKFLOW_NODE.FLOWSTATE = '1'\n" + " OR D.state IN ('3', '4')\n" + " )\n" + "AND D.state IN ('2', '3', '4')\n" + "AND WORKFLOW_NODE.CURRENT_DEALER_ID = :userId" ); String order_code=params.get("order_code"); String order_name=params.get("order_name"); String state=params.get("state"); String start_time=params.get("start_time"); String end_time=params.get("end_time"); String userId=params.get("userId"); paramMap.put("userId", userId); String customer_id=params.get("customer_id"); String order_code_A=params.get("order_code_A"); //关联工单 if (StringUtil.isNotBlank(order_code_A)) { sql.append(" and D.APPLY_ORDER_ID in(select id from SPARE_PART_APPLY where order_code like :order_code_A) "); paramMap.put("order_code_A", "%"+order_code_A.trim()+"%"); } //出库类型KEY String delivery_type_keys=params.get("delivery_type_keys"); if (StringUtil.notEmpty(delivery_type_keys)) { String[] keys = delivery_type_keys.split(","); if (keys.length == 1) { sql.append(" AND D.DELIVERY_TYPE_KEY = :delivery_type_key"); paramMap.put("delivery_type_key", keys[0]); } else { sql.append(" AND D.DELIVERY_TYPE_KEY IN ("); for (int i = 0; i < keys.length; i++) { sql.append(" :pri" + i); sql.append(","); paramMap.put("pri" + i, keys[i]); } sql.deleteCharAt(sql.lastIndexOf(",")); sql.append(")"); } } //工单编号 if (StringUtil.isNotBlank(order_code)) { sql.append(" and order_code like :order_code "); paramMap.put("order_code","%"+ order_code.trim()+"%"); } //工单名称 if (StringUtil.isNotBlank(order_name)) { sql.append(" and order_name like :order_name "); paramMap.put("order_name", "%"+order_name.trim()+"%"); } //工单状态 if (StringUtil.isNotBlank(state)) { sql.append(" and state=:state "); paramMap.put("state", state); } //开始时间 if(StringUtil.isNotBlank(start_time)){ sql.append(" AND gmt_create>=:start_time"); paramMap.put("start_time", start_time+"000000"); } //结束时间 if(StringUtil.isNotBlank(end_time)){ sql.append(" and gmt_create<=:end_time"); paramMap.put("end_time", end_time+"235959"); } sql.append(" order by state asc,gmt_create desc "); return baseDao.queryforSplitPageInfo(pageInfo,sql.toString(), paramMap); } /** * 出库申请列表数量信息 * @param pageInfo * @param params * @return */ @Override public int getDeliveryListCount(Map params) { StringBuilder sql = new StringBuilder(); Map paramMap = new HashMap(); sql.append("SELECT DISTINCT\n" + " COUNT(D.ID) \n" + "FROM\n" + " SPARE_PART_DELIVERY D\n" + "LEFT JOIN WORKFLOW_NODE ON WORKFLOW_NODE.FLOWID = D.FLOW_ID\n" + "WHERE\n" + " (\n" + " WORKFLOW_NODE.FLOWSTATE = '1'\n" + " OR D.state IN ('3', '4')\n" + " )\n" + "AND D.state IN ('2', '3', '4')\n" + "AND WORKFLOW_NODE.CURRENT_DEALER_ID = :userId" ); String order_code=params.get("order_code"); String order_name=params.get("order_name"); String state=params.get("state"); String start_time=params.get("start_time"); String end_time=params.get("end_time"); String userId=params.get("userId"); paramMap.put("userId", userId); String customer_id=params.get("customer_id"); String order_code_A=params.get("order_code_A"); //关联工单 if (StringUtil.isNotBlank(order_code_A)) { sql.append(" and D.APPLY_ORDER_ID in(select id from SPARE_PART_APPLY where order_code like :order_code_A) "); paramMap.put("order_code_A", "%"+order_code_A.trim()+"%"); } //出库类型KEY String delivery_type_keys=params.get("delivery_type_keys"); if (StringUtil.notEmpty(delivery_type_keys)) { String[] keys = delivery_type_keys.split(","); if (keys.length == 1) { sql.append(" AND D.DELIVERY_TYPE_KEY = :delivery_type_key"); paramMap.put("delivery_type_key", keys[0]); } else { sql.append(" AND D.DELIVERY_TYPE_KEY IN ("); for (int i = 0; i < keys.length; i++) { sql.append(" :pri" + i); sql.append(","); paramMap.put("pri" + i, keys[i]); } sql.deleteCharAt(sql.lastIndexOf(",")); sql.append(")"); } } //工单编号 if (StringUtil.isNotBlank(order_code)) { sql.append(" and order_code like :order_code "); paramMap.put("order_code","%"+ order_code.trim()+"%"); } //工单名称 if (StringUtil.isNotBlank(order_name)) { sql.append(" and order_name like :order_name "); paramMap.put("order_name", "%"+order_name.trim()+"%"); } //工单状态 if (StringUtil.isNotBlank(state)) { sql.append(" and state=:state "); paramMap.put("state", state); } //开始时间 if(StringUtil.isNotBlank(start_time)){ sql.append(" AND gmt_create>=:start_time"); paramMap.put("start_time", start_time+"000000"); } //结束时间 if(StringUtil.isNotBlank(end_time)){ sql.append(" and gmt_create<=:end_time"); paramMap.put("end_time", end_time+"235959"); } sql.append(" order by gmt_create desc "); int count = baseDao.queryForInteger(sql.toString(), paramMap); return count; } /** * 提交申请入库 * @param request * @return */ @Override public String doApproveAssign(HttpServletRequest request) { Map user = WebUtil.getLoginUser(request).getLoginUser(); String userid=user.get("ID").toString(); String usernameString=user.get("ZSXM").toString(); String orderId = request.getParameter("orderId"); String bz= request.getParameter("note"); String note_key= request.getParameter("note_key"); String note_val= request.getParameter("note_val"); String jg= request.getParameter("isNext"); String sqlString="SELECT\n" + " WORKFLOW_BASE.id flowid,\n" + " WORKFLOW_NODE.CURRENT_DEALER_ID userid,\n" + " WORKFLOW_NODE.CURRENT_DEALER_NAME username,\n" + " WORKFLOW_NODE.ID nodeid\n" + "FROM\n" + " WORKFLOW_BASE,\n" + " WORKFLOW_NODE\n" + "WHERE\n" + " WORKFLOW_BASE.BUSINESS_ID =:business_id\n" + "AND WORKFLOW_BASE.id = WORKFLOW_NODE.FLOWID\n" + "AND WORKFLOW_NODE.FLOWSTATE = 1 and WORKFLOW_NODE.CURRENT_DEALER_ID=:userid"; Map paramMap = new HashMap(); paramMap.put("business_id",orderId); paramMap.put("userid",userid); List queryForList = baseDao.queryForList(sqlString, paramMap); paramMap.put("orderId", orderId); if(queryForList!=null && queryForList.size()>0){ //提交 String FlowId=queryForList.get(0).get("flowid").toString(); String NodeId=queryForList.get(0).get("nodeid").toString(); String UserName=queryForList.get(0).get("username").toString(); String Userid=queryForList.get(0).get("userid").toString(); WorkFlowSupportEntity support = new WorkFlowSupportEntity(); support.setOrderId(orderId); support.setNodeId(NodeId); support.setUserName(UserName); support.setUserId(Userid); support.setFlowId(FlowId); support.setWorkFlowType(Constants.WORKFLOW_BASE_BUSINESS_TYPE_CKLC); support.setNote(bz); SysInfoMsg msg = workFlowSupportService.doOrderFlow(support); WORKFLOW_BASE base = new WORKFLOW_BASE(support.getFlowId()).getInstanceById(); WORKFLOW_NODE node = new WORKFLOW_NODE(support.getNodeId()).getInstanceById(); node.setNote_key(note_key); node.setNote_val(note_val); node.setAnswer_time(DateUtil.getCurrentDate14()); node.update(); //结束审批,更新流程实例表状态 workflowCoreService.finishWorkFlow(base); //更新业务表状态 SPARE_PART_DELIVERY spare_part_delivery = new SPARE_PART_DELIVERY(orderId).getInstanceById(); if(jg.equals("1")){ spare_part_delivery.setState(Constants.SPARE_PART_DELIVERY_STATE_T); String apply_entity="update SPARE_PART_APPLY_ENTITY set STATE='2' where DELIVERY_ORDER_ID=:orderId and STATE=1"; paramMap.put("orderId", orderId); baseDao.execute(apply_entity, paramMap); }else{ spare_part_delivery.setState(Constants.SPARE_PART_DELIVERY_STATE_N); } spare_part_delivery.update(); //更新申请单状态 String apply_order_id=spare_part_delivery.getApply_order_id(); if(StringUtil.isNotBlank(apply_order_id)){ SPARE_PART_APPLY spare_part_apply=new SPARE_PART_APPLY(apply_order_id).getInstanceById(); if(jg.equals("1")){ spare_part_apply.setState(Constants.SPARE_PART_APPLY_STATE_Q); }else{ spare_part_apply.setState(Constants.SPARE_PART_APPLY_STATE_N); } spare_part_apply.update(); } //更新备件表成功状态设为已出库,失败设为正常 String sqlString2="select * from SPARE_PART_APPLY_ENTITY where DELIVERY_ORDER_ID=:orderId and STATE=2 "; List apply_entity_list=baseDao.queryForList(sqlString2, paramMap); if(apply_entity_list!=null && apply_entity_list.size()>0){ for(Map spare:apply_entity_list){ String entity_id=ConvertUtil.obj2StrBlank(spare.get("entity_id")); String spare_part="update SPARE_PART set STATE=:state where id=:entity_id"; if(jg.equals("1")){ paramMap.put("state", Constants.SPARE_PART_STATE_C); }else{ paramMap.put("state", Constants.SPARE_PART_STATE_Z); } paramMap.put("entity_id", entity_id); baseDao.execute(spare_part, paramMap); } } } return ""; } /** * 审核不同意数据字典 * @param params * @return */ @Override public List getNoteKeyList(){ StringBuilder sql = new StringBuilder(); sql.append("SELECT\n" + " id,categoryname name\n" + "FROM\n" + " CONFIG_DATA_DICTIONARY_CATEGORY\n" + "WHERE\n" + " parentid IN (\n" + " SELECT\n" + " id\n" + " FROM\n" + " CONFIG_DATA_DICTIONARY_CATEGORY\n" + " WHERE\n" + " categorykey = 'RKSH_REFUSE'\n" + " ) "); return baseDao.queryForList(sql.toString()); } }