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 cn.ksource.beans.WORKFLOW_BASE; import cn.ksource.beans.WORKFLOW_NODE; import cn.ksource.core.util.ConvertUtil; import cn.ksource.core.util.DateUtil; 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.workFlowSupport.WorkFlowSupportService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import cn.ksource.core.dao.BaseDao; import cn.ksource.core.dao.SqlParameter; import cn.ksource.core.page.PageInfo; import cn.ksource.core.util.StringUtil; /** * 库存盘点 实现层 * * @author zf * @version 1.0 * @date 2017-5-31下午2:17:09 */ @Service public class StockTakingFacadeImpl implements StockTakingFacade { @Resource private BaseDao baseDao; @Resource private WorkFlowSupportService workFlowSupportService; @Resource private WorkOrderCodeService workOrderCodeService; @Autowired private WorkflowBusinessService workflowBusinessService; @Resource private WorkflowCoreService workflowCoreService; @Override public PageInfo getStockTakingListData(PageInfo pageInfo, Map params) { String sql = getStockTakingList(params); return baseDao.queryforSplitPageInfo(pageInfo, sql.toString(), params); } @Override public Integer getStockTakingListCount(Map params) { String sql = "select count(*) from ( " + getStockTakingList(params) + " ) t "; return baseDao.queryForInteger(sql, params); } private String getStockTakingList(Map params) { StringBuilder sql = new StringBuilder(" SELECT a.ID,a.ORDER_NAME,a.STATE,sum(b.INVENTORY_NUM) INVENTORY_NUM," + "sum(b.BOOK_NUM) BOOK_NUM,sum(b.LOSS_NUM) LOSS_NUM,sum(b.OVERAGE_NUM) OVERAGE_NUM," + " a.CREATE_NAME,a.GMT_CREATE,a.ORDER_CODE" + " from STOCK_INVENTORY a LEFT JOIN SPARE_PART_DETAIL b" + " ON a.ID = b.INVENTORY_ORDER_ID where 1=1 and a.STATE!=0 "); //盘点单号 if (StringUtil.isNotBlank(params.get("pddh"))) { sql.append(" and a.ORDER_CODE like :pddh "); params.put("pddh", "%" + params.get("pddh") + "%"); } //工单名称 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("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") + "235959"); } //状态 if (StringUtil.isNotBlank(params.get("state"))) { sql.append(" and a.STATE = :state "); params.put("state", params.get("state")); } sql.append(" group by a.id,a.ORDER_NAME,a.STATE,a.CREATE_NAME,a.GMT_CREATE,a.ORDER_CODE order by a.GMT_CREATE desc"); return sql.toString(); } @Override public Map getStockTakingInfo(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,b.INVENTORY_ORDER_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 sendToApprove(Map param) { String orderId=param.get("orderId"); 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",param.get("userId")); List queryForList = baseDao.queryForList(sqlString, paramMap); if(queryForList!=null && queryForList.size()>0){ String NodeId=queryForList.get(0).get("nodeid").toString(); String FlowId=queryForList.get(0).get("flowid").toString(); String UserName=queryForList.get(0).get("username").toString(); String Userid=queryForList.get(0).get("userid").toString(); NodeFinishEntity finishEntity = new NodeFinishEntity(); finishEntity.setDeal_result(0); finishEntity.setDeal_note_title(UserName+"完成了节点"); finishEntity.setDeal_note(param.get("note")); WORKFLOW_NODE node = new WORKFLOW_NODE(NodeId).getInstanceById(); WORKFLOW_BASE base=new WORKFLOW_BASE(FlowId).getInstanceById(); workflowCoreService.finishNode(base, node, finishEntity); WORKFLOW_NODE node_no = new WORKFLOW_NODE(NodeId).getInstanceById(); node_no.setAnswer_time(DateUtil.getCurrentDate14()); node_no.setDeal_note(param.get("bz")); node_no.update(); NodeDealEntity entity = new NodeDealEntity(); entity.setDealer_type(2); List userList = new ArrayList(); Map dealer = new HashMap(); dealer.put("USER_ID",param.get("dealId")); dealer.put("USER_NAME",param.get("dealName")); dealer.put("IS_ADMIN","1"); userList.add(dealer); entity.setDealerList(userList); workflowCoreService.toNode(base, Constants.PDSH, entity); }else{ List userList = new ArrayList(); Map user_map = new HashMap(); user_map.put("USER_ID", param.get("dealId")); user_map.put("USER_NAME", param.get("dealName")); user_map.put("IS_ADMIN", 1); userList.add(user_map); WorkFlowSupportEntity support = new WorkFlowSupportEntity(); support.setOrderId(param.get("orderId")); support.setUserName(param.get("userName")); support.setUserId(param.get("userId")); support.setNote(param.get("bz")); support.setWorkFlowType(Constants.WORKFLOW_BASE_BUSINESS_TYPE_KCPD); support.setNextNodeTemplateId(Constants.PDSH); support.setNextUserList(userList); workFlowSupportService.doOrderFlow(support); } String sql = " update stock_inventory set state =2 where id=:orderId "; baseDao.execute(sql, param); } @Override public PageInfo inventoryApproveListData(PageInfo pageInfo, Map params) { String sql = inventoryListSuppot(params); return baseDao.queryforSplitPageInfo(pageInfo, sql, params); } @Override public Integer inventoryApproveListCount(Map params) { String sql = "select count(*) from ( " + inventoryListSuppot(params) + " ) t "; return baseDao.queryForInteger(sql, params); } private String inventoryListSuppot(Map params) { StringBuilder sql = new StringBuilder(" select a.*,b.* from stock_inventory a,( " + " select inventory_order_id,sum(inventory_num) inventory_num,sum(book_num) book_num,sum(loss_num) loss_num,sum(overage_num) overage_num " + " from spare_part_detail b group by inventory_order_id ) b," + " workflow_base c where a.id = b.inventory_order_id and a.flow_id=c.id "); //审核 if (StringUtil.isNotBlank(params.get("approveFlag"))) { sql.append(" and a.state in (2,3,4) "); } //工单状态 if (StringUtil.isNotBlank(params.get("state"))) { sql.append(" and a.state = :state "); } //用户id if (StringUtil.isNotBlank(params.get("userId"))) { sql.append(" and c.current_dealer_id = :userId "); } //盘点单号 if (StringUtil.isNotBlank(params.get("order_code"))) { sql.append(" and a.order_code like :order_code "); params.put("order_code", "%" + params.get("order_code") + "%"); } //工单名称 if (StringUtil.isNotBlank(params.get("order_name"))) { sql.append(" and a.order_name like :order_name "); params.put("order_name", "%" + params.get("order_name") + "%"); } //开始时间 if (StringUtil.isNotBlank(params.get("start_date"))) { sql.append(" and a.gmt_create >= :start_date "); params.put("start_date", params.get("start_date") + "000000"); } //结束时间 if (StringUtil.isNotBlank(params.get("end_date"))) { sql.append(" and a.gmt_create <= :end_date "); params.put("end_date", params.get("end_date") + "235959"); } sql.append(" order by a.state asc,a.gmt_create desc "); return sql.toString(); } @Override public void doApprove(Map param) { String flowId = param.get("flowId"); StringBuilder sql = new StringBuilder(" select current_node_id from workflow_base where id = :flowId "); String nodeId = baseDao.queryForString(sql.toString(), param); String note_key= param.get("note_key"); String state= param.get("state"); String note_val= param.get("note_val"); WorkFlowSupportEntity support = new WorkFlowSupportEntity(); support.setFlowId(flowId); support.setNodeId(nodeId); support.setUserName(param.get("userName")); support.setUserId(param.get("userId")); support.setNote(param.get("note")); support.setWorkFlowType(Constants.WORKFLOW_BASE_BUSINESS_TYPE_KCPD); support.setFlowEndflag(true); workFlowSupportService.doOrderFlow(support); if(StringUtil.isNotBlank(state)){ WORKFLOW_BASE base = new WORKFLOW_BASE(flowId).getInstanceById(); WORKFLOW_NODE node = new WORKFLOW_NODE(nodeId).getInstanceById(); if(state.equals("4")){ node.setNote_key(note_key); node.setDeal_result(2); node.setNote_val(note_val); node.setAnswer_time(DateUtil.getCurrentDate14()); node.update(); NodeDealEntity entity = new NodeDealEntity(); List userList = new ArrayList(); Map dealer = new HashMap(); dealer.put("USER_ID",param.get("userId")); dealer.put("USER_NAME",param.get("userName")); dealer.put("IS_ADMIN","1"); userList.add(dealer); entity.setDealerList(userList); entity.setDealer_type(2); workflowCoreService.toNode(base,Constants.PDXZ, entity); }else{ node.setNote_key(note_key); node.setDeal_result(1); node.setNote_val(note_val); node.setAnswer_time(DateUtil.getCurrentDate14()); node.update(); } } //更新盘点工单状态 sql.setLength(0); sql.append(" update stock_inventory set state =:state where id=:orderId "); baseDao.execute(sql.toString(), param); } @Override public Map getDetail(String orderId) { Map param = new HashMap(); param.put("orderId", orderId); StringBuilder sql = new StringBuilder(" select * from stock_inventory where id = :orderId "); Map detail = baseDao.queryForMap(sql.toString(), param); //查询盘点明细 sql.setLength(0); sql.append(" select a.*,b.lv1_name,b.lv2_name,b.name from spare_part_detail a,cmdb_ci_category b where a.cate_id = b.id and a.inventory_order_id=:orderId "); List list = baseDao.queryForList(sql.toString(), param); detail.put("list", list); sql.setLength(0); sql.append(" select inventory_order_id,sum(inventory_num) inventory_num,sum(book_num) book_num,sum(loss_num) loss_num,sum(overage_num) overage_num " + " from spare_part_detail where inventory_order_id=:orderId group by inventory_order_id "); Map sumInfo = baseDao.queryForMap(sql.toString(), param); detail.put("inventory_num", ConvertUtil.obj2StrBlank(sumInfo.get("inventory_num"))); detail.put("book_num", ConvertUtil.obj2StrBlank(sumInfo.get("book_num"))); detail.put("loss_num", ConvertUtil.obj2StrBlank(sumInfo.get("loss_num"))); detail.put("overage_num", ConvertUtil.obj2StrBlank(sumInfo.get("overage_num"))); return detail; } @Override public void editStockTaking(Map params) { String id = params.get("id"); params.put("gmt_create", DateUtil.getCurrentDate14().toString()); params.put("gmt_modified", DateUtil.getCurrentDate14().toString()); params.put("order_code", workOrderCodeService.getStockTakingCode()); if (params.get("gmt_start").isEmpty()) { params.put("gmt_start", null); } if (params.get("gmt_end").isEmpty()) { params.put("gmt_end", null); } if (params.get("cycle").isEmpty()) { params.put("cycle", "0"); } StringBuilder sql = new StringBuilder(); if (StringUtil.isBlank(id)) {//新增 params.put("state", "1"); id = StringUtil.getUUID(); params.put("id", id); sql.append(" INSERT INTO stock_inventory (id,order_name,gmt_start,gmt_end,cycle,note,flow_id,create_id,create_name,gmt_create,gmt_modified,state,order_code ) "); sql.append(" values (:id,:order_name,:gmt_start,:gmt_end,:cycle,:note,:flow_id,:create_id,:create_name,:gmt_create,:gmt_modified,:state,:order_code) "); } else { sql.append(" update stock_inventory set order_name=:order_name,gmt_start=:gmt_start,gmt_end=:gmt_end,cycle=:cycle," + " note=:note,gmt_modified=:gmt_modified " + " where id=:id "); } //保存新增盘点工单 baseDao.execute(sql.toString(), params); params.put("id", id); params.put("inventory_order_id", id); baseDao.execute("delete from spare_part_detail where inventory_order_id=:id ", params); //添加供货信息 String cateIds = params.get("cate_id"); String inventory_num = params.get("inventory_num"); //盘点总数 String book_num = params.get("book_num"); String note2 = params.get("note2"); String loss_num = params.get("loss_num"); String overage_num = params.get("overage_num"); String cate_num = params.get("cate_num"); if (StringUtil.isNotBlank(cateIds)) { sql.setLength(0); sql.append(" insert into spare_part_detail (id,inventory_order_id,cate_id,inventory_num,book_num,loss_num,overage_num,cate_num,note ) "); sql.append(" values (:id,:inventory_order_id,:cate_id,:inventory_num,:book_num,:loss_num,:overage_num,:cate_num,:note2)"); List paramList = new ArrayList(); String[] cateIdAry = cateIds.split(","); String[] slNumAry = inventory_num.split(","); String[] bookNumAry = book_num.split(","); String[] note2Ary = note2.split(","); String[] lossNumAry = loss_num.split(","); String[] overageNumAry = overage_num.split(","); String[] cateNumAry = cate_num.split(","); for (int i = 0; i < cateIdAry.length; i++) { SqlParameter p = new SqlParameter(); p.addValue("id", StringUtil.getUUID()) .addValue("cate_id", cateIdAry[i]) .addValue("inventory_order_id", id) .addValue("book_num", bookNumAry[i]) .addValue("note2", note2Ary.length == 0 ? null : note2Ary[i]) .addValue("loss_num", lossNumAry[i]) .addValue("overage_num", overageNumAry[i]) .addValue("cate_num", cateNumAry[i]) .addValue("inventory_num", slNumAry[i]); paramList.add(p); } baseDao.executeBatch(sql.toString(), paramList); } else { sql.setLength(0); sql.append(" update spare_part_detail set inventory_order_id=:inventory_order_id,cate_id=:cate_id,inventory_num=:inventory_num," + "book_num=:book_num,loss_num=:loss_num,overage_num=:overage_num,cate_num=:cate_num,note=:note2 " + " where inventory_order_id= :id"); List paramList = new ArrayList(); String[] cateIdAry = cateIds.split(","); String[] slNumAry = inventory_num.split(","); String[] bookNumAry = book_num.split(","); String[] note2Ary = note2.split(","); String[] lossNumAry = loss_num.split(","); String[] overageNumAry = overage_num.split(","); String[] cateNumAry = cate_num.split(","); for (int i = 0; i < cateIdAry.length; i++) { SqlParameter p = new SqlParameter(); p.addValue("id", id) .addValue("cate_id", cateIdAry[i]) .addValue("inventory_order_id", id) .addValue("book_num", bookNumAry[i]) .addValue("note2", note2Ary[i]) .addValue("loss_num", lossNumAry[i]) .addValue("overage_num", overageNumAry[i]) .addValue("cate_num", cateNumAry[i]) .addValue("inventory_num", slNumAry[i]); paramList.add(p); } baseDao.executeBatch(sql.toString(), paramList); } //如果处理人不为空,则发送到审核环节 if(StringUtil.isNotBlank(params.get("dealId"))){ params.put("orderId", id); params.remove("id"); params.put("userId", params.get("create_id")); this.sendToApprove(params); } } @Override public void editStockStatus(String id) { String sql= "update stock_inventory set STATE = 0 where id = '"+id+"'"; baseDao.execute(sql, null); } }