|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import com.bstek.bdf2.core.orm.hibernate.HibernateDao; | 
|---|
|  |  |  | import com.bstek.dorado.data.provider.Page; | 
|---|
|  |  |  | import com.ld.igds.constant.RedisConst; | 
|---|
|  |  |  | import com.ld.igds.inout.InoutConstant; | 
|---|
|  |  |  | import com.ld.igds.m.InoutManageUtil; | 
|---|
|  |  |  | import com.ld.igds.models.InoutStockChange; | 
|---|
|  |  |  | 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.apache.commons.lang3.time.DateUtils; | 
|---|
|  |  |  | import org.hibernate.Session; | 
|---|
|  |  |  | import org.springframework.stereotype.Service; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import javax.annotation.Resource; | 
|---|
|  |  |  | import java.util.Date; | 
|---|
|  |  |  | import java.util.HashMap; | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Service | 
|---|
|  |  |  | public class HMAtockChangeService extends HibernateDao { | 
|---|
|  |  |  | @Resource | 
|---|
|  |  |  | private RedisUtil redisUtil; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public void pageData(Page<InoutStockChange> page, Map<String, Object> param) | 
|---|
|  |  |  | throws Exception { | 
|---|
|  |  |  | String hql = " from " + InoutStockChange.class.getName() | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | String str = (String) param.get("depotId"); | 
|---|
|  |  |  | if (StringUtils.isNotEmpty(str)) { | 
|---|
|  |  |  | hql += " and depotId =:depotId"; | 
|---|
|  |  |  | args.put("depotId", str); | 
|---|
|  |  |  | hql += " and depotIdIn =:depotIdIn or depotIdOut =:depotIdOut"; | 
|---|
|  |  |  | args.put("depotIdIn", str); | 
|---|
|  |  |  | args.put("depotIdOut", str); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | data.setUpdateTime(new Date()); | 
|---|
|  |  |  | data.setUpdateUser(ContextUtil.getLoginUserCName()); | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | if (null == data.getCzbz()) { | 
|---|
|  |  |  | Map<String, Object> param = new HashMap<>(); | 
|---|
|  |  |  | param.put("dateTime", data.getChangeDate()); | 
|---|
|  |  |  | List<InoutStockChange> list = queryAll(param); | 
|---|
|  |  |  | int max = 0; | 
|---|
|  |  |  | if (list.size() != 0) { | 
|---|
|  |  |  | int num; | 
|---|
|  |  |  | for (InoutStockChange stockChange : list) { | 
|---|
|  |  |  | num = Integer.parseInt(stockChange.getId().substring(stockChange.getId().length() - 4)); | 
|---|
|  |  |  | max = Math.max(max, num); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String date = DateFormatUtils.format(new Date(), "yyyyMMdd"); | 
|---|
|  |  |  | data.setId(date + String.format("%04d", max + 1)); | 
|---|
|  |  |  | data.setCzbz("i"); | 
|---|
|  |  |  | if (null == data.getId()) { | 
|---|
|  |  |  | String id = createId(data.getChangeDate(), ContextUtil.getCompanyId()); | 
|---|
|  |  |  | data.setId(id); | 
|---|
|  |  |  | session.save(data); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | data.setCzbz("u"); | 
|---|
|  |  |  | session.update(data); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public List<InoutStockChange> queryAll(Map<String, Object> param) { | 
|---|
|  |  |  | public List<InoutStockChange> getMaxId(Map<String, Object> param) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | String hql = "from " + InoutStockChange.class.getName() + " where 1 = 1 "; | 
|---|
|  |  |  | Map<String, Object> args = new HashMap<String, Object>(); | 
|---|
|  |  |  | Date date = (Date) param.get("dateTime"); | 
|---|
|  |  |  | if (null != date) { | 
|---|
|  |  |  | hql += " and updateTime >= :startTime and updateTime < :endTime"; | 
|---|
|  |  |  | args.put("startTime", DateUtil.getCurZero(date)); | 
|---|
|  |  |  | args.put("endTime", DateUtil.getNextZero(date)); | 
|---|
|  |  |  | if (null != param) { | 
|---|
|  |  |  | String str = (String) param.get("timeKey"); | 
|---|
|  |  |  | if (StringUtils.isNotEmpty(str)) { | 
|---|
|  |  |  | hql += " and id like :timeKey"; | 
|---|
|  |  |  | args.put("timeKey", str); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | hql += " order by  updateTime desc"; | 
|---|
|  |  |  | hql += " order by  id desc "; | 
|---|
|  |  |  | return this.query(hql, args); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public String createId(Date date, String companyId) { | 
|---|
|  |  |  | // 时间戳标签 | 
|---|
|  |  |  | String timeKey = DateFormatUtils.format(date, "yyyyMMdd"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 从缓存中获取已有的组织编码 | 
|---|
|  |  |  | String cacheKey = RedisConst.buildKey(companyId, | 
|---|
|  |  |  | InoutManageUtil.CACHE_STOCK_ID); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | String cacheId = (String) redisUtil.get(cacheKey); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (null != cacheId && cacheId.indexOf(timeKey) >= 0) { | 
|---|
|  |  |  | String temp = cacheId.substring(cacheId.length() - 4); | 
|---|
|  |  |  | Integer i = Integer.valueOf(temp); | 
|---|
|  |  |  | i++; | 
|---|
|  |  |  | cacheId = timeKey + String.format("%04d", i); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | Map<String, Object> args = new HashMap<>(); | 
|---|
|  |  |  | args.put("timeKey", timeKey + "%"); | 
|---|
|  |  |  | List<InoutStockChange> result = getMaxId(args); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (null == result || result.size() == 0) { | 
|---|
|  |  |  | cacheId = timeKey + "0001"; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | String temp = result.get(0).getId(); | 
|---|
|  |  |  | // 获取最后四位 | 
|---|
|  |  |  | int i = Integer.valueOf(temp.substring(temp.length() - 4)); | 
|---|
|  |  |  | i++; | 
|---|
|  |  |  | cacheId = timeKey + String.format("%04d", i); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 更新缓存 | 
|---|
|  |  |  | redisUtil.set(cacheKey, cacheId); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return cacheId; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|