MesMaterialKcLogService.java 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. package com.jeesite.modules.mes.service;
  2. import java.util.List;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.context.annotation.Lazy;
  5. import org.springframework.stereotype.Service;
  6. import org.springframework.transaction.annotation.Transactional;
  7. import com.jeesite.common.entity.Page;
  8. import com.jeesite.common.lang.StringUtils;
  9. import com.jeesite.common.mybatis.mapper.query.QueryType;
  10. import com.jeesite.common.service.CrudService;
  11. import com.jeesite.modules.mes.entity.MesMaterialKcLog;
  12. import com.jeesite.modules.mes.dao.MesMaterialKcLogDao;
  13. /**
  14. * 来料库存记录表Service
  15. * @author mes
  16. * @version 2024-04-10
  17. */
  18. @Service
  19. public class MesMaterialKcLogService extends CrudService<MesMaterialKcLogDao, MesMaterialKcLog> {
  20. @Autowired
  21. private MesMaterialKcLogDao mesMaterialKcLogDao;
  22. @Autowired
  23. @Lazy
  24. private MesMaterialKcTotalService mesMaterialKcTotalService;
  25. /**
  26. * 获取单条数据
  27. * @param mesMaterialKcLog
  28. * @return
  29. */
  30. @Override
  31. public MesMaterialKcLog get(MesMaterialKcLog mesMaterialKcLog) {
  32. return super.get(mesMaterialKcLog);
  33. }
  34. public MesMaterialKcLog findInfo(MesMaterialKcLog mesMaterialKcLog) {
  35. return mesMaterialKcLogDao.findInfo(mesMaterialKcLog);
  36. }
  37. public MesMaterialKcLog findByErpPickLine(String pickBillNo, String lineKey) {
  38. if (StringUtils.isBlank(pickBillNo) || StringUtils.isBlank(lineKey)) {
  39. return null;
  40. }
  41. MesMaterialKcLog query = new MesMaterialKcLog();
  42. query.getSqlMap().getWhere().and("erp_pick_bill_no", QueryType.EQ, pickBillNo.trim());
  43. query.getSqlMap().getWhere().and("erp_pick_line_key", QueryType.EQ, lineKey.trim());
  44. return mesMaterialKcLogDao.findInfo(query);
  45. }
  46. /**
  47. * 查询分页数据
  48. * @param mesMaterialKcLog 查询条件
  49. * @param mesMaterialKcLog.page 分页对象
  50. * @return
  51. */
  52. @Override
  53. public Page<MesMaterialKcLog> findPage(MesMaterialKcLog mesMaterialKcLog) {
  54. applySourceTypeFilter(mesMaterialKcLog);
  55. return super.findPage(mesMaterialKcLog);
  56. }
  57. /**
  58. * 来源筛选:ERP_PICK 按 source_type;RK 按有入库单关联的历史来料记录。
  59. */
  60. private void applySourceTypeFilter(MesMaterialKcLog mesMaterialKcLog) {
  61. if (mesMaterialKcLog == null) {
  62. return;
  63. }
  64. String sourceType = mesMaterialKcLog.getSourceType();
  65. if (StringUtils.isBlank(sourceType)) {
  66. return;
  67. }
  68. if (MesMaterialKcLog.SOURCE_TYPE_RK.equals(sourceType)) {
  69. mesMaterialKcLog.setSourceType(null);
  70. mesMaterialKcLog.getSqlMap().getWhere().and("rk_record_id", QueryType.IS_NOT_NULL, null);
  71. mesMaterialKcLog.getSqlMap().getWhere().and("rk_record_id", QueryType.NE, "");
  72. return;
  73. }
  74. if (MesMaterialKcLog.SOURCE_TYPE_ERP_PICK.equals(sourceType)) {
  75. mesMaterialKcLog.getSqlMap().getWhere().and("source_type", QueryType.EQ, sourceType);
  76. mesMaterialKcLog.setSourceType(null);
  77. }
  78. }
  79. /**
  80. * 查询列表数据
  81. * @param mesMaterialKcLog
  82. * @return
  83. */
  84. @Override
  85. public List<MesMaterialKcLog> findList(MesMaterialKcLog mesMaterialKcLog) {
  86. return super.findList(mesMaterialKcLog);
  87. }
  88. /**
  89. * 保存数据(插入或更新),并按数量变化同步物料总库存
  90. * @param mesMaterialKcLog
  91. */
  92. @Override
  93. @Transactional
  94. public void save(MesMaterialKcLog mesMaterialKcLog) {
  95. long oldNums = 0L;
  96. String oldMaterialId = null;
  97. boolean isNew = mesMaterialKcLog == null || mesMaterialKcLog.getIsNewRecord();
  98. if (!isNew && mesMaterialKcLog != null && StringUtils.isNotBlank(mesMaterialKcLog.getId())) {
  99. MesMaterialKcLog old = super.get(mesMaterialKcLog.getId());
  100. if (old != null) {
  101. oldNums = old.getNums() == null ? 0L : old.getNums();
  102. oldMaterialId = old.getMaterialId();
  103. } else {
  104. isNew = true;
  105. }
  106. }
  107. super.save(mesMaterialKcLog);
  108. if (mesMaterialKcLog == null) {
  109. return;
  110. }
  111. long newNums = mesMaterialKcLog.getNums() == null ? 0L : mesMaterialKcLog.getNums();
  112. String newMaterialId = mesMaterialKcLog.getMaterialId();
  113. syncKcTotal(oldMaterialId, oldNums, newMaterialId, newNums, isNew);
  114. }
  115. /**
  116. * 更新状态
  117. * @param mesMaterialKcLog
  118. */
  119. @Override
  120. @Transactional
  121. public void updateStatus(MesMaterialKcLog mesMaterialKcLog) {
  122. super.updateStatus(mesMaterialKcLog);
  123. }
  124. /**
  125. * 删除数据,并扣减物料总库存
  126. * @param mesMaterialKcLog
  127. */
  128. @Override
  129. @Transactional
  130. public void delete(MesMaterialKcLog mesMaterialKcLog) {
  131. MesMaterialKcLog old = null;
  132. if (mesMaterialKcLog != null && StringUtils.isNotBlank(mesMaterialKcLog.getId())) {
  133. old = super.get(mesMaterialKcLog.getId());
  134. }
  135. super.delete(mesMaterialKcLog);
  136. if (old != null) {
  137. long oldNums = old.getNums() == null ? 0L : old.getNums();
  138. mesMaterialKcTotalService.adjustBy(old.getMaterialId(), -oldNums);
  139. }
  140. }
  141. /**
  142. * 同步物料总库存:新增按新数量增加;更新按差值调整;物料变更时先减旧再加新。
  143. */
  144. private void syncKcTotal(String oldMaterialId, long oldNums, String newMaterialId, long newNums, boolean isNew) {
  145. if (isNew) {
  146. mesMaterialKcTotalService.adjustBy(newMaterialId, newNums);
  147. return;
  148. }
  149. boolean materialChanged = StringUtils.isNotBlank(oldMaterialId)
  150. && StringUtils.isNotBlank(newMaterialId)
  151. && !oldMaterialId.equals(newMaterialId);
  152. if (materialChanged) {
  153. mesMaterialKcTotalService.adjustBy(oldMaterialId, -oldNums);
  154. mesMaterialKcTotalService.adjustBy(newMaterialId, newNums);
  155. return;
  156. }
  157. String materialId = StringUtils.isNotBlank(newMaterialId) ? newMaterialId : oldMaterialId;
  158. mesMaterialKcTotalService.adjustBy(materialId, newNums - oldNums);
  159. }
  160. }