package com.ld.igds.m.service;
|
|
import com.bstek.bdf2.core.orm.hibernate.HibernateDao;
|
import com.bstek.dorado.data.entity.EntityUtils;
|
import com.bstek.dorado.data.provider.Page;
|
import com.ld.igds.check.dto.CheckItemData;
|
import com.ld.igds.check.mapper.CheckStandardMapper;
|
import com.ld.igds.constant.RedisConst;
|
import com.ld.igds.models.MQuality;
|
import com.ld.igds.util.ContextUtil;
|
import com.ld.igds.util.DateUtil;
|
import com.ld.igds.util.RedisUtil;
|
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.time.DateFormatUtils;
|
import org.hibernate.Session;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
|
import java.util.*;
|
|
/**
|
* @author chen
|
*/
|
@Component
|
public class HQualityManageService extends HibernateDao {
|
@Autowired
|
private RedisUtil redisUtil;
|
@Autowired
|
private CheckStandardMapper checkStandardMapper;
|
|
|
public void listQuality(Page<MQuality> page, Map<String, Object> param) throws Exception {
|
String hql = " from " + MQuality.class.getName()
|
+ " where companyId =:companyId and deptId =:deptId";
|
|
Map<String, Object> args = new HashMap<String, Object>();
|
args.put("companyId", ContextUtil.getCompanyId());
|
args.put("deptId", ContextUtil.subDeptId(null));
|
|
if (null != param) {
|
String str = (String) param.get("depotId");
|
if (StringUtils.isNotEmpty(str)) {
|
hql += " and depotId =:depotId";
|
args.put("depotId", str);
|
}
|
|
str = (String) param.get("type");
|
if (StringUtils.isNotEmpty(str)) {
|
hql += " and type =:type";
|
args.put("type", str);
|
}
|
|
|
Date date = (Date) param.get("start");
|
if (null != date) {
|
hql += " and time >=:start";
|
args.put("start", DateUtil.getCurZero(date));
|
}
|
|
date = (Date) param.get("end");
|
if (null != date) {
|
hql += " and time <=:end";
|
args.put("end", DateUtil.getNextZero(date));
|
}
|
}
|
String count = "select count(*) " + hql;
|
|
hql += " order by depotId";
|
|
this.pagingQuery(page, hql, count, args);
|
}
|
|
/**
|
* 获取仓库最新一条质检数据
|
*
|
* @param depotId
|
* @return
|
* @throws Exception
|
*/
|
public MQuality getLastData(String depotId) {
|
if (StringUtils.isEmpty(depotId)) {
|
return null;
|
}
|
String hql = " from " + MQuality.class.getName()
|
+ " where companyId =:companyId ";
|
Map<String, Object> args = new HashMap<String, Object>();
|
args.put("companyId", ContextUtil.getCompanyId());
|
|
hql += " and depotId =:depotId";
|
args.put("depotId", depotId);
|
hql += " order by time DESC";
|
List<MQuality> list = this.query(hql, args);
|
if (list != null && list.size() > 0) {
|
MQuality quality = list.get(0);
|
quality.setCheckItems(checkStandardMapper.getCheckItemById(quality.getId(), ContextUtil.getCompanyId()));
|
return list.get(0);
|
}
|
return null;
|
}
|
|
/**
|
* 从缓存获取当前仓库的最新一条质检数据
|
*
|
* @param depotId
|
* @return
|
* @throws Exception
|
*/
|
public MQuality getCacheLastData(String depotId) {
|
if (StringUtils.isEmpty(depotId)) {
|
return null;
|
}
|
MQuality quality = (MQuality) redisUtil.get(RedisConst.buildKey(ContextUtil.getCompanyId(), RedisConst.KEY_DEPOT_QUALITY, depotId));
|
if (quality == null) {
|
quality = this.getLastData(depotId);
|
if (quality != null) {
|
redisUtil.set(RedisConst.buildKey(ContextUtil.getCompanyId(), RedisConst.KEY_DEPOT_QUALITY, depotId), quality, 60 * 60 * 24);
|
}
|
}
|
return quality;
|
}
|
|
public void saveQuality(String id, MQuality data) {
|
if (null == data.getCompanyId()) {
|
data.setCompanyId(ContextUtil.getCompanyId());
|
}
|
if (null == data.getDeptId()) {
|
data.setDeptId(ContextUtil.subDeptId(null));
|
}
|
if (null != data.getZblb() && "" != data.getZblb() && "null" != data.getZblb()) {
|
String[] str = data.getZblb().split("#");
|
//防止在更新操作时再次存入相同的数据
|
Set<String> metrics = new HashSet<>();
|
for (int i = 0; i < str.length; i++) {
|
metrics.add(str[i].substring(0, 1));
|
}
|
String value = "";
|
for (String s : metrics) {
|
value = value + s + "#";
|
}
|
data.setZblb(value.substring(0, value.length() - 1));
|
}
|
Session session = this.getSessionFactory().openSession();
|
data.setUpdateTime(new Date());
|
try {
|
if (null == data.getId()) {
|
data.setId(id);
|
}
|
session.saveOrUpdate(data);
|
redisUtil.del(RedisConst.buildKey(ContextUtil.getDefaultCompanyId(), RedisConst.KEY_DEPOT_QUALITY, data.getDepotId()));
|
MQuality newData;
|
if (EntityUtils.isEntity(data)) {
|
newData = new MQuality();
|
BeanUtils.copyProperties(data, newData, new String[]{"checkItems"});
|
} else {
|
newData = data;
|
}
|
|
redisUtil.set(RedisConst.buildKey(ContextUtil.getDefaultCompanyId(), RedisConst.KEY_DEPOT_QUALITY, data.getDepotId()), newData, 60 * 60 * 24);
|
} catch (Exception e) {
|
e.printStackTrace();
|
} finally {
|
session.flush();
|
session.close();
|
}
|
}
|
|
public String delQuality(MQuality data) {
|
Session session = this.getSessionFactory().openSession();
|
try {
|
if (null != data.getId()) {
|
session.delete(data);
|
CheckItemData checkItemData = new CheckItemData();
|
checkItemData.setCompanyId(ContextUtil.getCompanyId());
|
checkItemData.setCheckId(data.getId());
|
checkStandardMapper.delCheckItemByParam(checkItemData);
|
redisUtil.del(RedisConst.buildKey(ContextUtil.getCompanyId(), RedisConst.KEY_DEPOT_QUALITY, data.getDepotId()));
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
} finally {
|
session.flush();
|
session.close();
|
}
|
return null;
|
}
|
|
/**
|
* 获取当前检验时间最后一个ID
|
*
|
* @param time
|
* @return
|
* @throws Exception
|
*/
|
public String getIdByTime(Date time) {
|
int num = 10001;
|
String hql = " from " + MQuality.class.getName()
|
+ " where companyId =:companyId ";
|
Map<String, Object> args = new HashMap<String, Object>();
|
args.put("companyId", ContextUtil.getCompanyId());
|
|
hql += " and time >=:start";
|
args.put("start", DateUtil.getCurZero(time));
|
hql += " and time <:end";
|
args.put("end", DateUtil.getNextZero(time));
|
|
hql += " order by id DESC";
|
List<MQuality> list = this.query(hql, args);
|
if (list != null && list.size() > 0) {
|
// String lastId = list.get(0).getId();
|
// num += Integer.parseInt(lastId.subst
|
// ring(lastId.length() - 5));
|
num += Integer.valueOf(list.get(0).getId().substring(11));
|
}
|
// String strNum = String.valueOf(num);
|
// if (strNum.length() == 1) {
|
// strNum = "1000" + strNum;
|
// }
|
// if (strNum.length() == 2) {
|
// strNum = "100" + strNum;
|
// }
|
// if (strNum.length() == 3) {
|
// strNum = "10" + strNum;
|
// }
|
// if (strNum.length() == 4) {
|
// strNum = "1" + strNum;
|
// }
|
return DateFormatUtils.format(time, "yyyyMMdd") + String.valueOf(num).substring(1);
|
}
|
|
public CheckItemData getCheckItem(String checkId) {
|
CheckItemData itemData = new CheckItemData();
|
if ("".equals(checkId)) {
|
itemData.setPerWet(0.0);
|
itemData.setPerImpurity(0.0);
|
return itemData;
|
}
|
itemData.setCompanyId(ContextUtil.getCompanyId());
|
itemData.setCheckId(checkId);
|
itemData.setStandardId("C01");
|
List<CheckItemData> itemData1 = checkStandardMapper.getCheckItemByParam(itemData);
|
if (!itemData1.isEmpty()) {
|
String perWet = itemData1.get(0).getValue();
|
if (StringUtils.isNotEmpty(perWet)) {
|
itemData.setPerWet(Double.parseDouble(perWet));
|
} else {
|
itemData.setPerWet(0.0);
|
}
|
}
|
|
itemData.setStandardId("C02");
|
List<CheckItemData> itemData2 = checkStandardMapper.getCheckItemByParam(itemData);
|
if (!itemData2.isEmpty()) {
|
String perImpurity = itemData2.get(0).getValue();
|
if (StringUtils.isNotEmpty(perImpurity)) {
|
itemData.setPerImpurity(Double.parseDouble(perImpurity));
|
} else {
|
itemData.setPerImpurity(0.0);
|
}
|
}
|
|
return itemData;
|
}
|
|
}
|