package cn.ksource.web.facade.bpbj; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Service; import cn.ksource.beans.OVERAGE_LOSS; import cn.ksource.beans.OVERAGE_LOSS_DETAIL; import cn.ksource.core.dao.BaseDao; import cn.ksource.core.dao.SqlParameter; import cn.ksource.core.page.PageInfo; import cn.ksource.core.util.ConvertUtil; import cn.ksource.core.util.DateUtil; import cn.ksource.core.util.StringUtil; import cn.ksource.web.Constants; import cn.ksource.web.entity.WorkFlowSupportEntity; import cn.ksource.web.service.WorkOrderCodeService; import cn.ksource.web.service.workFlowSupport.WorkFlowSupportService; /** * 报损报溢 实现层 * @author zf * @date 2017年6月6日14:10:21 * */ @Service public class OverageLossFacadeImpl implements OverageLossFacade { @Resource private BaseDao baseDao; @Resource private WorkFlowSupportService workFlowSupportService; @Resource private WorkOrderCodeService workOrderCodeService; @Override public PageInfo getOverageLossListData(PageInfo pageInfo, Map params) { String sql = getOverageLossList(params); return baseDao.queryforSplitPageInfo(pageInfo, sql.toString(), params); } @Override public Integer getOverageLossListCount(Map params) { String sql ="select count(*) from ( "+getOverageLossList(params)+" ) t "; return baseDao.queryForInteger(sql,params); } private String getOverageLossList(Map params){ StringBuilder sql = new StringBuilder("select a.id,a.order_code,a.order_name,a.STATE,a.FLOW_ID,a.BUS_TYPE,a.CREATE_ID,a.CREATE_NAME,a.GMT_CREATE,a.GMT_MODIFIED from OVERAGE_LOSS a where 1=1 and state !=0"); //盘点单号 if(StringUtil.isNotBlank(params.get("gdbh"))){ sql.append(" and a.ORDER_CODE like :gdbh "); params.put("gdbh", "%" + params.get("gdbh") + "%"); } //工单名称 if(StringUtil.isNotBlank(params.get("gdmc"))){ sql.append(" and a.ORDER_NAME like :gdmc "); params.put("gdmc", "%" + params.get("gdmc") + "%"); } //业务类型 if(StringUtil.isNotBlank(params.get("ywlx"))){ sql.append(" and a.BUS_TYPE = :ywlx "); params.put("ywlx",params.get("ywlx")); } //状态 if(StringUtil.isNotBlank(params.get("state"))){ sql.append(" and a.STATE = :state "); params.put("state", params.get("state")); } //业务类型【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"); params.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(","); params.put("pri" + i, keys[i]); } sql.deleteCharAt(sql.lastIndexOf(",")); sql.append(")"); } } if (StringUtil.isNotBlank(params.get("startDate"))) { sql.append(" and a.GMT_CREATE >= :startDate "); params.put("startDate", params.get("startDate") + "000000"); } //结束时间 if (StringUtil.isNotBlank(params.get("endDate"))) { sql.append(" and a.GMT_CREATE <= :endDate "); params.put("endDate", params.get("endDate") + "666666"); } sql.append(" group by a.id,a.order_code,a.order_name,a.STATE,a.FLOW_ID,a.BUS_TYPE,a.CREATE_ID,a.CREATE_NAME,a.GMT_CREATE,a.GMT_MODIFIED" + " order by a.GMT_CREATE desc"); return sql.toString(); } @Override public Map getOverageLossInfo(String id) { SqlParameter param = new SqlParameter("id",id); StringBuilder sql = new StringBuilder(" select * from STOCK_INVENTORY where id=:id "); Map info = baseDao.queryForMap(sql.toString(), param); sql.setLength(0); sql.append(" SELECT a.ID,a.ORDER_NAME,a.STATE,b.INVENTORY_NUM,b.BOOK_NUM,b.LOSS_NUM,"+ " b.OVERAGE_NUM,a.CREATE_NAME,a.GMT_MODIFIED,b.NOTE,b.CATE_NUM,b.CATE_ID,"+ " c.CODE,c.LV1_NAME,c.LV2_NAME,c.LV3_NAME " + " from STOCK_INVENTORY a LEFT JOIN SPARE_PART_DETAIL b ON a.ID = b.INVENTORY_ORDER_ID " + " left join cmdb_ci_category c on c.id = b.CATE_ID "+ " where b.INVENTORY_ORDER_ID=:inventory_order_id "); param.put("inventory_order_id",id); List list = baseDao.queryForList(sql.toString(), param); info.put("list", list); return info; } @Override public void editOverageLoss(Map params) { String id = params.get("id"); String dealId = params.get("dealId"); String dealName = params.get("dealName"); String bz = params.get("bz"); String create_id = params.get("create_id"); String create_name = params.get("create_name"); params.put("gmt_create", DateUtil.getCurrentDate14().toString()); params.put("gmt_modified", DateUtil.getCurrentDate14().toString()); String order_code = params.get("order_code"); StringBuilder sql = new StringBuilder(); if(StringUtil.isEmpty(order_code)){ params.put("order_code",workOrderCodeService.getOverageCode() ); params.put("state", "1"); sql.append(" INSERT INTO overage_loss (id,order_code,order_name,bus_type,note,flow_id,create_id,create_name,gmt_create,gmt_modified,state) "); sql.append(" values (:id,:order_code,:order_name,:bus_type,:note,null,:create_id,:create_name,:gmt_create,:gmt_modified,:state) "); //保存报村报溢 baseDao.execute(sql.toString(), params); }else{ sql.setLength(0); sql.append(" update overage_loss set order_name= :order_name,bus_type = :bus_type,note = :note,"+ "gmt_create = :gmt_create,gmt_modified = :gmt_modified,state = :state where id = :id"); baseDao.execute(sql.toString(), params); } if(StringUtil.isNotBlank(dealId)){ List userList = new ArrayList(); Map user = new HashMap(); user.put("USER_ID", dealId); user.put("USER_NAME", dealName); user.put("IS_ADMIN", 1); userList.add(user); WorkFlowSupportEntity support = new WorkFlowSupportEntity(); support.setOrderId(id); support.setUserName(create_name); support.setUserId(create_id); support.setNote(bz); support.setWorkFlowType(Constants.WORKFLOW_BASE_BUSINESS_TYPE_BSBY); support.setNextNodeTemplateId(Constants.BSBYSH); support.setNextUserList(userList); workFlowSupportService.doOrderFlow(support); OVERAGE_LOSS overage_loss=new OVERAGE_LOSS(id).getInstanceById(); overage_loss.setState(Constants.OVERAGE_LOSS_STATE_D); overage_loss.update(); } } @Override public void editOverageDetail(Map params) { String entity_id = params.get("id"); //备件表id String partId = params.get("partId"); // params.put("entity_id",entity_id); params.put("partId", partId); StringBuilder sql = new StringBuilder(); String id = StringUtil.getUUID(); String reason_key = params.get("reason_key"); String reason = params.get("reason"); params.put("id", id); sql.append(" INSERT INTO overage_loss_detail (id,order_id,entity_id,reason,reason_key,note) "); sql.append(" values (:id,:partId,:entity_id,:reason,:reason_key,:note) "); //保存报村报溢 baseDao.execute(sql.toString(), params); } @Override public List getConfigDataPid(String pid) { String sql =("select t.ORDERNUM as code,t.CATEGORYNAME as name from CONFIG_DATA_DICTIONARY_CATEGORY t where t.PARENTID in ( select id from CONFIG_DATA_DICTIONARY_CATEGORY where categorykey = '"+pid+"') "); return baseDao.queryForList(sql); } @Override public void editOverageByPlEdit(Map params) { StringBuilder sql = new StringBuilder(); sql.append(" update overage_loss_detail set reason_key=:reason_key,reason=:reason,note=:note where id= :id"); String detailIds = params.get("id"); //获得详情id String reason_key = params.get("reason_key"); String reason = params.get("reason"); String note = params.get("note"); String [] detailAry = detailIds.split(","); List paramList = new ArrayList(); for (int i = 0; i < detailAry.length; i++) { SqlParameter p = new SqlParameter(); p.addValue("id", detailAry[i]). addValue("reason_key", reason_key). addValue("reason", reason). addValue("note", note); paramList.add(p); } baseDao.executeBatch(sql.toString(),paramList); } /** * 提交报损报溢流程 * @param param */ @Override public void sendToApprove(Map param) { List userList = new ArrayList(); Map user = new HashMap(); user.put("USER_ID", param.get("dealId")); user.put("USER_NAME", param.get("dealName")); user.put("IS_ADMIN", 1); userList.add(user); WorkFlowSupportEntity support = new WorkFlowSupportEntity(); support.setOrderId(param.get("orderId")); support.setUserName(param.get("userName")); support.setUserId("userId"); support.setNote(param.get("note")); support.setWorkFlowType(Constants.WORKFLOW_BASE_BUSINESS_TYPE_BSBY); support.setNextNodeTemplateId(Constants.BSBYSH); support.setNextUserList(userList); workFlowSupportService.doOrderFlow(support); String sql = " update OVERAGE_LOSS set state =2 where id=:orderId "; baseDao.execute(sql, param); } /** * 报损类型数据字典 * @param params * @return */ @Override public List getNoteKeyList(String categorykey){ 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 = :categorykey\n" + " ) "); Map paramMap = new HashMap(); paramMap.put("categorykey",categorykey); return baseDao.queryForList(sql.toString(),paramMap); } /** * 保存报损备件 * @param param */ @Override public void saveBsbj(HttpServletRequest request) { String orderId=request.getParameter("orderId"); String spare_part_ids=request.getParameter("spare_part_ids"); String reason_key=request.getParameter("reason_key"); String reason=request.getParameter("reason"); String note=request.getParameter("note"); String[] spare_part_id_s = spare_part_ids.split(","); for (int i = 0; i < spare_part_id_s.length; i++) { String spare_part_id= spare_part_id_s[i]; OVERAGE_LOSS_DETAIL overage_loss_detail=new OVERAGE_LOSS_DETAIL(); overage_loss_detail.setEntity_id(spare_part_id); overage_loss_detail.setOrder_id(orderId); overage_loss_detail.setNote(note); overage_loss_detail.setReason(reason); overage_loss_detail.setReason_key(reason_key); overage_loss_detail.insert(); } } /** * 报损备件信息 */ @Override public List getSpareLoseListData(HttpServletRequest request){ String orderId=request.getParameter("orderId"); StringBuilder sql = new StringBuilder(); sql.append("SELECT\n" + " ENTITY.ID,\n" + " ENTITY.REASON,\n" + " SPARE.ID SPARE_ID,\n" + " SPARE.ENTITY_NO,\n" + " SPARE.ASSET_NO,\n" + " SPARE.MODEL_NO,\n" + " SPARE.LOCATION,\n" + " SPARE. NAME,\n" + " CMDB.LV1_NAME,\n" + " CMDB.LV2_NAME,\n" + " CMDB.LV3_NAME\n" + "FROM\n" + " OVERAGE_LOSS_DETAIL ENTITY,\n" + " SPARE_PART SPARE,\n" + " CMDB_CI_CATEGORY CMDB\n" + "WHERE\n" + " ENTITY.ENTITY_ID = SPARE.id\n" + "AND CMDB.ID = SPARE.CATE_ID\n" + "AND ENTITY.ORDER_ID =:orderId" ); Map paramMap = new HashMap(); paramMap.put("orderId",orderId); return baseDao.queryForList(sql.toString(),paramMap); } /** * 保存批量更新报损类型 * @param request * @param model * @return */ @Override public void editLoseByPlEdit(Map params) { StringBuilder sql = new StringBuilder(); sql.append(" update overage_loss_detail set reason_key=:reason_key,reason=:reason,note=:note where id= :id"); String detailIds = params.get("id"); //获得详情id String reason_key = params.get("reason_key"); String reason = params.get("reason"); String note = params.get("note"); String [] detailAry = detailIds.split(","); List paramList = new ArrayList(); for (int i = 0; i < detailAry.length; i++) { SqlParameter p = new SqlParameter(); p.addValue("id", detailAry[i]). addValue("reason_key", reason_key). addValue("reason", reason). addValue("note", note); paramList.add(p); } baseDao.executeBatch(sql.toString(),paramList); } /** * 保存报损工单 * @param params */ @Override public void editLossOrder(Map params) { String id = params.get("id"); String type = params.get("type"); String dealId = params.get("dealId"); String dealName = params.get("dealName"); String bz = params.get("bz"); String order_name = params.get("order_name"); String create_id = params.get("create_id"); String create_name = params.get("create_name"); String bus_type = params.get("bus_type"); String note = params.get("note"); if(StringUtil.isNotBlank(type) && StringUtil.isNotBlank(id)){ if(type.equals("xg")){ OVERAGE_LOSS overage_loss=new OVERAGE_LOSS(id).getInstanceById(); overage_loss.setOrder_name(order_name); overage_loss.setNote(note); overage_loss.setGmt_modified(DateUtil.getCurrentDate14()); overage_loss.update(); } }else{ OVERAGE_LOSS overage_loss=new OVERAGE_LOSS(); overage_loss.setId(id); overage_loss.setBus_type(1); overage_loss.setCreate_id(create_id); overage_loss.setOrder_name(order_name); overage_loss.setCreate_name(create_name); overage_loss.setGmt_create(DateUtil.getCurrentDate14()); overage_loss.setOrder_code(workOrderCodeService.getOverageCode() ); overage_loss.setState(Constants.OVERAGE_LOSS_STATE_X); overage_loss.insert(); } if(StringUtil.isNotBlank(dealId)){ List userList = new ArrayList(); Map user = new HashMap(); user.put("USER_ID", dealId); user.put("USER_NAME", dealName); user.put("IS_ADMIN", 1); userList.add(user); WorkFlowSupportEntity support = new WorkFlowSupportEntity(); support.setOrderId(id); support.setUserName(create_name); support.setUserId(create_id); support.setNote(bz); support.setWorkFlowType(Constants.WORKFLOW_BASE_BUSINESS_TYPE_BSBY); support.setNextNodeTemplateId(Constants.BSBYSH); support.setNextUserList(userList); workFlowSupportService.doOrderFlow(support); OVERAGE_LOSS overage_loss=new OVERAGE_LOSS(id).getInstanceById(); overage_loss.setState(Constants.OVERAGE_LOSS_STATE_D); overage_loss.update(); } } /** * 查询工单下明细 */ @Override public int loseListCount(Map params) { String orderId = params.get("orderId"); String sql="select count(*) from OVERAGE_LOSS_DETAIL where ORDER_ID=:orderId"; Map paramMap = new HashMap(); paramMap.put("orderId",orderId); return baseDao.queryForInteger(sql, paramMap); } /** * 查询工单下明细是否都设置了报损原因 */ @Override public int initDelivery(Map params) { String orderId = params.get("orderId"); String sql="select * from OVERAGE_LOSS_DETAIL where ORDER_ID=:orderId "; Map paramMap = new HashMap(); paramMap.put("orderId",orderId); List list = baseDao.queryForList(sql.toString(), paramMap); if(list!=null&&list.size()>0){ for(Map cateMap:list){ String reason=ConvertUtil.obj2StrBlank(cateMap.get("reason")); if(StringUtil.isEmpty(reason)){ return 1; } } } return 0; } @Override public void editOverageStatus(Map params) { StringBuilder sql = new StringBuilder(); sql.append("update overage_loss set state = 0 where id =:id"); baseDao.execute(sql.toString(),params); } @Override public void editOverageLossEdit(Map params) { StringBuilder sql = new StringBuilder(); sql.append(" update overage_loss set order_name= :order_name,bus_type = :bus_type,note = :note,"+ "gmt_create = :gmt_create,gmt_modified = :gmt_modified,state = :state where id = :id"); baseDao.execute(sql.toString(), params); } }