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 page, Map param) throws Exception { String hql = " from " + MQuality.class.getName() + " where companyId =:companyId and deptId =:deptId"; Map args = new HashMap(); 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 args = new HashMap(); args.put("companyId", ContextUtil.getCompanyId()); hql += " and depotId =:depotId"; args.put("depotId", depotId); hql += " order by time DESC"; List 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 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 args = new HashMap(); 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 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 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 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; } }