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<String, String> params,PageInfo pageInfo) {
|
StringBuilder sql = new StringBuilder();
|
Map paramMap = new HashMap();
|
|
sql.append("SELECT DISTINCT\n" +
|
" D.* \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<String, String> 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<Map> 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<Map> 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<String, String> param = new HashMap<String, String>();
|
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<Map> list = baseDao.queryForList(sql.toString(), param);
|
detail.put("list", list);
|
return detail;
|
}
|
}
|