| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- package com.jeesite.modules.mes.service;
- import java.util.List;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.annotation.Lazy;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import com.jeesite.common.entity.Page;
- import com.jeesite.common.lang.StringUtils;
- import com.jeesite.common.mybatis.mapper.query.QueryType;
- import com.jeesite.common.service.CrudService;
- import com.jeesite.modules.mes.entity.MesMaterialKcLog;
- import com.jeesite.modules.mes.dao.MesMaterialKcLogDao;
- /**
- * 来料库存记录表Service
- * @author mes
- * @version 2024-04-10
- */
- @Service
- public class MesMaterialKcLogService extends CrudService<MesMaterialKcLogDao, MesMaterialKcLog> {
- @Autowired
- private MesMaterialKcLogDao mesMaterialKcLogDao;
- @Autowired
- @Lazy
- private MesMaterialKcTotalService mesMaterialKcTotalService;
- /**
- * 获取单条数据
- * @param mesMaterialKcLog
- * @return
- */
- @Override
- public MesMaterialKcLog get(MesMaterialKcLog mesMaterialKcLog) {
- return super.get(mesMaterialKcLog);
- }
- public MesMaterialKcLog findInfo(MesMaterialKcLog mesMaterialKcLog) {
- return mesMaterialKcLogDao.findInfo(mesMaterialKcLog);
- }
- public MesMaterialKcLog findByErpPickLine(String pickBillNo, String lineKey) {
- if (StringUtils.isBlank(pickBillNo) || StringUtils.isBlank(lineKey)) {
- return null;
- }
- MesMaterialKcLog query = new MesMaterialKcLog();
- query.getSqlMap().getWhere().and("erp_pick_bill_no", QueryType.EQ, pickBillNo.trim());
- query.getSqlMap().getWhere().and("erp_pick_line_key", QueryType.EQ, lineKey.trim());
- return mesMaterialKcLogDao.findInfo(query);
- }
- /**
- * 查询分页数据
- * @param mesMaterialKcLog 查询条件
- * @param mesMaterialKcLog.page 分页对象
- * @return
- */
- @Override
- public Page<MesMaterialKcLog> findPage(MesMaterialKcLog mesMaterialKcLog) {
- applySourceTypeFilter(mesMaterialKcLog);
- return super.findPage(mesMaterialKcLog);
- }
- /**
- * 来源筛选:ERP_PICK 按 source_type;RK 按有入库单关联的历史来料记录。
- */
- private void applySourceTypeFilter(MesMaterialKcLog mesMaterialKcLog) {
- if (mesMaterialKcLog == null) {
- return;
- }
- String sourceType = mesMaterialKcLog.getSourceType();
- if (StringUtils.isBlank(sourceType)) {
- return;
- }
- if (MesMaterialKcLog.SOURCE_TYPE_RK.equals(sourceType)) {
- mesMaterialKcLog.setSourceType(null);
- mesMaterialKcLog.getSqlMap().getWhere().and("rk_record_id", QueryType.IS_NOT_NULL, null);
- mesMaterialKcLog.getSqlMap().getWhere().and("rk_record_id", QueryType.NE, "");
- return;
- }
- if (MesMaterialKcLog.SOURCE_TYPE_ERP_PICK.equals(sourceType)) {
- mesMaterialKcLog.getSqlMap().getWhere().and("source_type", QueryType.EQ, sourceType);
- mesMaterialKcLog.setSourceType(null);
- }
- }
-
- /**
- * 查询列表数据
- * @param mesMaterialKcLog
- * @return
- */
- @Override
- public List<MesMaterialKcLog> findList(MesMaterialKcLog mesMaterialKcLog) {
- return super.findList(mesMaterialKcLog);
- }
-
- /**
- * 保存数据(插入或更新),并按数量变化同步物料总库存
- * @param mesMaterialKcLog
- */
- @Override
- @Transactional
- public void save(MesMaterialKcLog mesMaterialKcLog) {
- long oldNums = 0L;
- String oldMaterialId = null;
- boolean isNew = mesMaterialKcLog == null || mesMaterialKcLog.getIsNewRecord();
- if (!isNew && mesMaterialKcLog != null && StringUtils.isNotBlank(mesMaterialKcLog.getId())) {
- MesMaterialKcLog old = super.get(mesMaterialKcLog.getId());
- if (old != null) {
- oldNums = old.getNums() == null ? 0L : old.getNums();
- oldMaterialId = old.getMaterialId();
- } else {
- isNew = true;
- }
- }
- super.save(mesMaterialKcLog);
- if (mesMaterialKcLog == null) {
- return;
- }
- long newNums = mesMaterialKcLog.getNums() == null ? 0L : mesMaterialKcLog.getNums();
- String newMaterialId = mesMaterialKcLog.getMaterialId();
- syncKcTotal(oldMaterialId, oldNums, newMaterialId, newNums, isNew);
- }
-
- /**
- * 更新状态
- * @param mesMaterialKcLog
- */
- @Override
- @Transactional
- public void updateStatus(MesMaterialKcLog mesMaterialKcLog) {
- super.updateStatus(mesMaterialKcLog);
- }
-
- /**
- * 删除数据,并扣减物料总库存
- * @param mesMaterialKcLog
- */
- @Override
- @Transactional
- public void delete(MesMaterialKcLog mesMaterialKcLog) {
- MesMaterialKcLog old = null;
- if (mesMaterialKcLog != null && StringUtils.isNotBlank(mesMaterialKcLog.getId())) {
- old = super.get(mesMaterialKcLog.getId());
- }
- super.delete(mesMaterialKcLog);
- if (old != null) {
- long oldNums = old.getNums() == null ? 0L : old.getNums();
- mesMaterialKcTotalService.adjustBy(old.getMaterialId(), -oldNums);
- }
- }
- /**
- * 同步物料总库存:新增按新数量增加;更新按差值调整;物料变更时先减旧再加新。
- */
- private void syncKcTotal(String oldMaterialId, long oldNums, String newMaterialId, long newNums, boolean isNew) {
- if (isNew) {
- mesMaterialKcTotalService.adjustBy(newMaterialId, newNums);
- return;
- }
- boolean materialChanged = StringUtils.isNotBlank(oldMaterialId)
- && StringUtils.isNotBlank(newMaterialId)
- && !oldMaterialId.equals(newMaterialId);
- if (materialChanged) {
- mesMaterialKcTotalService.adjustBy(oldMaterialId, -oldNums);
- mesMaterialKcTotalService.adjustBy(newMaterialId, newNums);
- return;
- }
- String materialId = StringUtils.isNotBlank(newMaterialId) ? newMaterialId : oldMaterialId;
- mesMaterialKcTotalService.adjustBy(materialId, newNums - oldNums);
- }
-
- }
|