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.Random; 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.OVERAGE_LOSS; 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("OverageLossAuditingFacade") public class OverageLossAuditingFacadeImpl implements OverageLossAuditingFacade { @Resource private BaseDao baseDao; @Autowired private WorkflowBusinessService workflowBusinessService; @Autowired private WorkOrderCodeService workOrderCodeService; @Autowired private WorkFlowSupportService workFlowSupportService; @Autowired private RecordService recordService; @Resource private WorkflowCoreService workflowCoreService; /** * 报损报溢审核列表信息 * @param pageInfo * @param params * @return */ @Override public PageInfo getOverageLossAuditingListDate(Map params,PageInfo pageInfo) { StringBuilder sql = new StringBuilder(); Map paramMap = new HashMap(); sql.append("SELECT DISTINCT\n" + " D.id,d.order_code,d.order_name,d.STATE,d.FLOW_ID,d.BUS_TYPE,d.CREATE_ID,d.CREATE_NAME,d.GMT_CREATE,d.GMT_MODIFIED \n" + "FROM\n" + " OVERAGE_LOSS 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); //业务类型【1报损 2报溢 】 String bus_types=params.get("bus_types"); if (StringUtil.notEmpty(bus_types)) { String[] keys = bus_types.split(","); if (keys.length == 1) { sql.append(" AND BUS_TYPE = :bus_type"); paramMap.put("bus_type", keys[0]); } else { sql.append(" AND BUS_TYPE 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 getOverageLossAuditingListCount(Map params) { StringBuilder sql = new StringBuilder(); Map paramMap = new HashMap(); sql.append("SELECT DISTINCT\n" + " COUNT(D.ID) \n" + "FROM\n" + " OVERAGE_LOSS 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); //业务类型【1报损 2报溢 】 String bus_types=params.get("bus_types"); if (StringUtil.notEmpty(bus_types)) { String[] keys = bus_types.split(","); if (keys.length == 1) { sql.append(" AND BUS_TYPE = :bus_type"); paramMap.put("bus_type", keys[0]); } else { sql.append(" AND BUS_TYPE 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_BSBY); 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.setDeal_result(Integer.valueOf(jg)); node.setAnswer_time(DateUtil.getCurrentDate14()); node.update(); //结束审批,更新流程实例表状态 workflowCoreService.finishWorkFlow(base); //更新业务表状态 OVERAGE_LOSS overage_loss = new OVERAGE_LOSS(orderId).getInstanceById(); if(jg.equals("1")){ overage_loss.setState(Constants.SPARE_PART_DELIVERY_STATE_T); String bus_type=String.valueOf(overage_loss.getBus_type()); if(StringUtil.isNotBlank(bus_type)){ if(bus_type.equals(String.valueOf(Constants.OVERAGE_LOSS_BUS_TYPE_BS))){ String sqlString2="update SPARE_PART set state=:state where id in(select ENTITY_ID from OVERAGE_LOSS_DETAIL where ORDER_ID=:orderId)"; paramMap.put("state", Constants.SPARE_PART_STATE_H); baseDao.execute(sqlString2, paramMap); }else{ String sqlString2="SELECT\n" + " cate. code,\n" + " cate. id cateId,\n" + " spare.id\n" + "FROM\n" + " CMDB_CI_CATEGORY cate,\n" + " SPARE_PART spare,\n" + " OVERAGE_LOSS_DETAIL over\n" + "WHERE\n" + " spare.id = over.ENTITY_ID\n" + "AND cate.id = spare.CATE_ID\n" + "AND over.ORDER_ID =:orderId"; List list = baseDao.queryForList(sqlString2, paramMap); if(list!=null && list.size()>0){ for (Map spare : list) { String spare_part_id=ConvertUtil.obj2StrBlank(spare.get("id")); String cate_id=ConvertUtil.obj2StrBlank(spare.get("cateId")); CMDB_CI_CATEGORY cmdb_ci_category_s=new CMDB_CI_CATEGORY(cate_id).getInstanceById(); String ej=cmdb_ci_category_s.getLv2_id(); String yj=cmdb_ci_category_s.getLv1_id(); String yj_code=""; String ej_code=""; if(StringUtil.isNotBlank(yj)){ CMDB_CI_CATEGORY cmdb_ci_category_y=new CMDB_CI_CATEGORY(yj).getInstanceById(); yj_code=cmdb_ci_category_y.getCode(); } if(StringUtil.isNotBlank(ej)){ CMDB_CI_CATEGORY cmdb_ci_category_e=new CMDB_CI_CATEGORY(ej).getInstanceById(); ej_code=cmdb_ci_category_e.getCode(); } String code=ConvertUtil.obj2StrBlank(spare.get("code")); //String no= String.valueOf(new Random().nextInt((999999)+1000000)); String no=String.valueOf((int)((Math.random()*9+1)*10000000)); String entity_no=yj_code+"-"+ej_code+"-"+code+"-"+no; String spare_part="update spare_part set entity_no=:entity_no ,state=:state where id=:spare_part_id"; paramMap.put("entity_no",entity_no); paramMap.put("spare_part_id",spare_part_id); paramMap.put("state",Constants.SPARE_PART_STATE_Z); baseDao.execute(spare_part, paramMap); } } } } }else{ overage_loss.setState(Constants.SPARE_PART_DELIVERY_STATE_N); } overage_loss.update(); } 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()); } /** * 详情信息 */ @Override public Map getDetail(String orderId) { Map param = new HashMap(); param.put("orderId", orderId); StringBuilder sql = new StringBuilder(" select s.* ,(select count(1) from OVERAGE_LOSS_DETAIL where ORDER_ID=:orderId) num from OVERAGE_LOSS s where id = :orderId "); Map detail = baseDao.queryForMap(sql.toString(), param); //查询报损报溢明细 sql.setLength(0); sql.append("SELECT\n" + " c.*, b.lv1_name,\n" + " b.lv2_name,\n" + " b.name lv3_name,\n" + " a.reason\n" + "FROM\n" + " overage_loss_detail a,\n" + " cmdb_ci_category b,\n" + " spare_part c\n" + "WHERE\n" + " c.cate_id = b.id\n" + "AND c.id = a.entity_id\n" + "AND a.order_id =:orderId"); List list = baseDao.queryForList(sql.toString(), param); detail.put("list", list); return detail; } }