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 net.sf.json.JSONArray; import net.sf.json.JSONObject; 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.OVERAGE_LOSS; import cn.ksource.beans.SC_WORKFLOW_RELEASE; import cn.ksource.beans.SPARE_PART; 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("StockAuditingFacade") public class StockAuditingFacadeImpl implements StockAuditingFacade { @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 getStockListData(Map params,PageInfo pageInfo) { StringBuilder sql = new StringBuilder(); Map paramMap = new HashMap(); sql.append("SELECT DISTINCT\n" + " spare_part_storage.*\n" + "FROM\n" + " spare_part_storage\n" + "LEFT JOIN WORKFLOW_NODE ON WORKFLOW_NODE.FLOWID = spare_part_storage.FLOW_ID\n" + "WHERE\n" + " (\n" + " WORKFLOW_NODE.FLOWSTATE = '1'\n" + " OR spare_part_storage.state IN ('3', '4')\n" + " )\n" + "AND spare_part_storage.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); //工单编号 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 getStockListCount(Map params) { StringBuilder sql = new StringBuilder(); Map paramMap = new HashMap(); sql.append("SELECT \n" + " COUNT(DISTINCT spare_part_storage.ID)\n" + "FROM\n" + " spare_part_storage\n" + "LEFT JOIN WORKFLOW_NODE ON WORKFLOW_NODE.FLOWID = spare_part_storage.FLOW_ID\n" + "WHERE\n" + " (\n" + " WORKFLOW_NODE.FLOWSTATE = '1'\n" + " OR spare_part_storage.state IN ('3', '4')\n" + " )\n" + "AND spare_part_storage.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); //工单编号 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); 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_STOCK); 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.setDeal_note(support.getNote()); node.setDeal_note_title(support.getUserName()+"完成了节点"); node.setDeal_result(Integer.valueOf(jg)); node.setDealtime(DateUtil.getCurrentDate14()); node.setNote_key(note_key); node.setNote_val(note_val); node.setFlowstate(3); node.setDeal_usetime(DateUtil.getMillisFormDate2Date(node.getAnswer_time(),node.getDealtime())/1000); node.setAnswer_time(DateUtil.getCurrentDate14()); node.update(); //提交节点信息 //workflowCoreService.finishNode(base, node, finishEntity); //结束审批,更新流程实例表状态 workflowCoreService.finishWorkFlow(base); //更新业务表状态 SPARE_PART_STORAGE spare_part_storage = new SPARE_PART_STORAGE(orderId).getInstanceById(); if(jg.equals("1")){ spare_part_storage.setState(Constants.SPARE_PART_STORAGE_STATE_T); String sqlString2="update SPARE_PART set STATE=:state where LINK_STORAGE_ID=:link_storage_id"; paramMap.put("state",Constants.SPARE_PART_STATE_Z); paramMap.put("link_storage_id",orderId); baseDao.execute(sqlString2, paramMap); }else{ spare_part_storage.setState(Constants.SPARE_PART_STORAGE_STATE_N); NodeDealEntity entity = new NodeDealEntity(); List userList = new ArrayList(); Map dealer = new HashMap(); dealer.put("USER_ID",base.getCreaterid()); dealer.put("USER_NAME",base.getCreatername()); dealer.put("IS_ADMIN","1"); userList.add(dealer); entity.setDealerList(userList); entity.setDealer_type(2); workflowCoreService.toNode(base,Constants.RKSQ, entity); } spare_part_storage.update(); } return ""; } /** * 审核不同意数据字典 * @param params * @return */ @Override public List getNoteKeyList(String CKSH_BTGYY){ 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 =:sjzdbs\n" + " ) "); Map paramMap = new HashMap(); paramMap.put("sjzdbs",CKSH_BTGYY); return baseDao.queryForList(sql.toString(),paramMap); } /** * 提交审核前先校验备件状态 * @param request * @return */ @Override public String getInitSparePart(HttpServletRequest request){ String orderId = request.getParameter("orderId"); String type = request.getParameter("type"); String sql=""; if(StringUtil.isNotBlank(type)){ if(type.equals("bsjy")){ OVERAGE_LOSS overage_loss=new OVERAGE_LOSS(orderId).getInstanceById(); Integer BUS_TYPE=overage_loss.getBus_type(); if(BUS_TYPE==1){ sql="SELECT\n" + " *\n" + "FROM\n" + " SPARE_PART\n" + "WHERE\n" + " id IN (\n" + " SELECT\n" + " ENTITY_ID\n" + " FROM\n" + " OVERAGE_LOSS_DETAIL\n" + " WHERE\n" + " ORDER_ID =:orderId\n" + " )\n" + "AND state != 1"; } } }else{ sql="SELECT\n" + " *\n" + "FROM\n" + " SPARE_PART\n" + "WHERE\n" + " id IN (\n" + " SELECT\n" + " ENTITY_ID\n" + " FROM\n" + " SPARE_PART_APPLY_ENTITY\n" + " WHERE\n" + " DELIVERY_ORDER_ID =:orderId\n" + " )\n" + "AND state != 1"; } Map paramMap = new HashMap(); paramMap.put("orderId",orderId); List spareList= baseDao.queryForList(sql,paramMap); Map result = new HashMap(); JSONArray jsonarray = new JSONArray(); JSONObject object=new JSONObject(); String result_String=""; List list=new ArrayList(); if(spareList!=null&spareList.size()>0){ for(Map spare_part:spareList ){ String name=ConvertUtil.obj2StrBlank(spare_part.get("name")); list.add(name); } object.put("name", list); }else{ object.put("name", "0"); } jsonarray.add(object); System.out.print(jsonarray.toString()); return jsonarray.toString(); } }