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<String, String> params) {
|
String sql = getStockTakingList(params);
|
return baseDao.queryforSplitPageInfo(pageInfo, sql.toString(), params);
|
}
|
|
@Override
|
public Integer getStockTakingListCount(Map<String, String> params) {
|
String sql = "select count(*) from ( " + getStockTakingList(params) + " ) t ";
|
return baseDao.queryForInteger(sql, params);
|
}
|
|
|
private String getStockTakingList(Map<String, String> 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<Map> list = baseDao.queryForList(sql.toString(), param);
|
info.put("list", list);
|
|
return info;
|
}
|
|
@Override
|
public void sendToApprove(Map<String, String> 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<Map> 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<Map> userList = new ArrayList<Map>();
|
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<Map> userList = new ArrayList<Map>();
|
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<String, String> params) {
|
String sql = inventoryListSuppot(params);
|
return baseDao.queryforSplitPageInfo(pageInfo, sql, params);
|
}
|
|
@Override
|
public Integer inventoryApproveListCount(Map<String, String> params) {
|
String sql = "select count(*) from ( " + inventoryListSuppot(params) + " ) t ";
|
return baseDao.queryForInteger(sql, params);
|
}
|
|
private String inventoryListSuppot(Map<String, String> 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<String, String> 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<Map> userList = new ArrayList<Map>();
|
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<String, String> param = new HashMap<String, String>();
|
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<Map> 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<String, String> 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<SqlParameter> paramList = new ArrayList<SqlParameter>();
|
|
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<SqlParameter> paramList = new ArrayList<SqlParameter>();
|
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);
|
}
|
}
|