From cdc10eca2be8e548c6b05a0e5eb91fef38b587d1 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@63.com>
Date: 星期五, 24 九月 2021 13:39:11 +0800
Subject: [PATCH] 1
---
src/main/java/com/zy/asrs/service/impl/OutStockServiceImpl.java | 245 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 244 insertions(+), 1 deletions(-)
diff --git a/src/main/java/com/zy/asrs/service/impl/OutStockServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OutStockServiceImpl.java
index 55965d5..156a98a 100644
--- a/src/main/java/com/zy/asrs/service/impl/OutStockServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OutStockServiceImpl.java
@@ -1,18 +1,261 @@
package com.zy.asrs.service.impl;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.core.common.Cools;
+import com.core.exception.CoolException;
+import com.zy.asrs.entity.*;
+import com.zy.asrs.entity.param.StockOutParam;
import com.zy.asrs.mapper.OutStockMapper;
-import com.zy.asrs.service.OutStockService;
+import com.zy.asrs.service.*;
+import com.zy.asrs.utils.VersionUtils;
+import com.zy.common.model.LocDetlDto;
+import com.zy.common.model.OutLocDto;
+import com.zy.common.service.CommonService;
import com.zy.common.service.erp.entity.OutStockBillEntry;
+import io.swagger.models.auth.In;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import java.math.BigDecimal;
+import java.text.MessageFormat;
+import java.util.*;
+
+@Slf4j
@Service("outStockService")
public class OutStockServiceImpl extends ServiceImpl<OutStockMapper, OutStockBillEntry> implements OutStockService{
+ // 宸ヤ綔鍙风敓鎴愯鍒欓粯璁ょ被鍨�
+ private static final int DEFAULT_WORK_NO_TYPE = 0;
+ @Autowired
+ private WrkMastService wrkMastService;
+ @Autowired
+ private BasDevpService basDevpService;
+ @Autowired
+ private LocDetlService locDetlService;
+ @Autowired
+ private LocMastService locMastService;
+ @Autowired
+ private StaDescService staDescService;
+ @Autowired
+ private CommonService commonService;
+ @Autowired
+ private WrkDetlService wrkDetlService;
+ @Autowired
+ private LocNormalService locNormalService;
+ @Autowired
+ private JdbcTemplate jdbcTemplate;
+
@Override
public Page<OutStockBillEntry> queryOutStock(Page<OutStockBillEntry> page) {
page.setRecords(baseMapper.queryOutStock(page.getCondition()));
page.setTotal(baseMapper.queryOutStockCount(page.getCondition()));
return page;
}
+
+ @Override
+ public List<LocDetl> queryMatWithLoc(String fbillNo) {
+ List<OutStockBillEntry> matList = baseMapper.queryMatnrWithBillNo(fbillNo);
+ List<LocDetl> tempLocList = new ArrayList<LocDetl>();
+ List<LocDetl> locList = new ArrayList<LocDetl>();
+ for (Integer i = 0; i < matList.size(); i++) {
+ /*鑷姩鏍规嵁鐗╂枡缂栫爜閫夊彇鏈�浼樺嚭璐ч『搴忥紙鍏堣繘鍏堝嚭锛岄潬澶栬揣鐗╁厛鍑猴級*/
+ tempLocList = baseMapper.queryMatWithLoc(matList.get(i).getFnumber());
+ BigDecimal needNum = matList.get(i).getFAuxQty();
+ BigDecimal locNum = BigDecimal.ZERO;
+ if (tempLocList.size() > 0) {
+ for (Integer j = 0; j < tempLocList.size(); j ++) {
+ locNum = locNum.add(new BigDecimal(tempLocList.get(j).getAnfme()));
+ /* 璁$畻闇�瑕佺殑鏁伴噺锛岀鍚堟暟閲忓悗缁撴潫寰幆 */
+ if (needNum.compareTo(locNum) == 1) {
+ locList.add(tempLocList.get(j));
+ } else {
+ locList.add(tempLocList.get(j));
+ break;
+ }
+ }
+ }
+ }
+ return locList;
+ }
+
+ @Override
+ public Integer queryOutStockFInterID(String supplier) {
+ return baseMapper.queryOutStockFInterID(supplier);
+ }
+
+ /* 鎴愬搧澧為噺鍑哄簱 */
+ @Override
+ public boolean incrementCPakOut(Integer FInterID, String Fnumber, Double increment, String FBillNo) {
+ String sql = "update OutStockbillEntry set FAuxCommitQty = (FAuxCommitQty + {0,number,#}) where 1=1 and Fnumber = ''{1}'' and FInterID = {2,number,#}";
+ sql = MessageFormat.format(sql, increment, Fnumber, FInterID);
+ if (jdbcTemplate.update(sql) > 0) {
+ log.info("step 1 ======>> {}", sql);
+ sql = "select * from OutStockbillEntry where 1=1 and Fnumber = ''{0}'' and FInterID = {1,number,#}";
+ sql = MessageFormat.format(sql, Fnumber, FInterID);
+ List<OutStockBillEntry> select = jdbcTemplate.queryForList(sql, OutStockBillEntry.class);
+ log.info("step 2 ======>> {}", sql);
+ OutStockBillEntry outStockBillEntry = select.get(0);
+ boolean complete = false;
+ if (outStockBillEntry.getFQty().compareTo(BigDecimal.ZERO) == 1) {
+ if (outStockBillEntry.getFAuxCommitQty().compareTo(outStockBillEntry.getFQty()) > -1) {
+ complete = true;
+ }
+ } else {
+ if (outStockBillEntry.getFAuxCommitQty().compareTo(outStockBillEntry.getFAuxQty()) > -1) {
+ complete = true;
+ }
+ }
+ if (complete) {
+ if (!completeCPakOut(FBillNo)) {
+ log.error("{}鍑哄簱鍗曟爣璁板畬鎴愬け璐�", FBillNo);
+ }
+ }
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /* 鎴愬搧鍑哄簱鍗曟爣璁板畬鎴� */
+ private boolean completeCPakOut(String FBillNo){
+ String sql = "update OutStockbill set Fflag_finish = 1 where FBillNo = ''{0}''";
+ sql = MessageFormat.format(sql, FBillNo);
+ log.info("step 3 ======>> {}", sql);
+ return jdbcTemplate.update(sql) > 0;
+ }
+
+ @Override
+ @Transactional
+ public void startupFullTakeStore(StockOutParam param, Long userId) {
+ // 鐩爣绔欑偣鐘舵�佹娴�
+ BasDevp staNo = basDevpService.checkSiteStatus(param.getOutSite());
+ // 鑾峰彇搴撲綅鏄庣粏
+ List<LocDetlDto> locDetlDtos = new ArrayList<>();
+ for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) {
+ if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) {
+ LocDetl sqlParam = new LocDetl();
+ sqlParam.setLocNo(paramLocDetl.getLocNo());
+ sqlParam.setMatnr(paramLocDetl.getMatnr());
+ LocDetl one = locDetlService.selectOne(new EntityWrapper<>(sqlParam));
+ if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount()));
+ }
+ }
+ if (!locDetlDtos.isEmpty()) {
+ // 鍚姩鍑哄簱寮�濮� 101.鍑哄簱
+ stockOut(staNo, locDetlDtos, null, userId, param.getFbillNo());
+ } else {
+ throw new CoolException("搴撲綅鐗╂枡涓嶅瓨鍦�");
+ }
+ }
+
+// @Override
+ @Transactional
+ public void stockOut(BasDevp staNo, List<LocDetlDto> locDetlDtos, Integer ioType, Long userId, String fbillNo) {
+ // 鍚堝苟鍚岀被椤�
+ Set<String> locNos = new HashSet<>();
+ locDetlDtos.forEach(dto -> locNos.add(dto.getLocDetl().getLocNo()));
+ List<OutLocDto> dtos = new ArrayList<>();
+ for (String locNo : locNos) {
+ List<LocDetlDto> list = new ArrayList<>();
+ Iterator<LocDetlDto> iterator = locDetlDtos.iterator();
+ while (iterator.hasNext()) {
+ LocDetlDto dto = iterator.next();
+ if (locNo.equals(dto.getLocDetl().getLocNo())) {
+ list.add(dto);
+ iterator.remove();
+ }
+ }
+ dtos.add(new OutLocDto(locNo, list));
+ }
+ // 鐢熸垚宸ヤ綔妗�
+ for (OutLocDto dto : dtos) {
+ // 鍒ゆ柇鍏ュ嚭搴撶被鍨嬶細101.鍏ㄦ澘鍑哄簱 or 103.鎷f枡鍑哄簱
+ if (ioType == null) {
+ ioType = dto.isAll() ? 101 : 103;
+ }
+ // 鑾峰彇搴撲綅
+ LocMast locMast = locMastService.selectById(dto.getLocNo());
+ // 鑾峰彇璺緞
+ Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
+ .eq("type_no", ioType)
+ .eq("stn_no", staNo.getDevNo())
+ .eq("crn_no", locMast.getCrnNo());
+ StaDesc staDesc = staDescService.selectOne(wrapper);
+ if (Cools.isEmpty(staDesc)) {
+ throw new CoolException("鍑哄簱璺緞涓嶅瓨鍦�");
+ }
+ // 鐢熸垚宸ヤ綔鍙�
+ int workNo = commonService.getWorkNo(DEFAULT_WORK_NO_TYPE);
+ // 鐢熸垚宸ヤ綔妗�
+ WrkMast wrkMast = new WrkMast();
+ wrkMast.setWrkNo(workNo);
+ wrkMast.setIoTime(new Date());
+ wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+ wrkMast.setIoType(ioType); // 鍏ュ嚭搴撶姸鎬�
+ wrkMast.setIoPri(13D); // 浼樺厛绾э細13
+ wrkMast.setCrnNo(locMast.getCrnNo());
+ wrkMast.setSourceStaNo(staDesc.getCrnStn()); // 婧愮珯
+ wrkMast.setStaNo(staDesc.getStnNo()); // 鐩爣绔�
+ wrkMast.setSourceLocNo(dto.getLocNo()); // 婧愬簱浣�
+ wrkMast.setBarcode(locMast.getBarcode()); // 鏉$爜
+ wrkMast.setFullPlt("Y"); // 婊℃澘锛歒
+ wrkMast.setPicking("N"); // 鎷f枡
+ wrkMast.setExitMk("N"); // 閫�鍑�
+ wrkMast.setEmptyMk("N"); // 绌烘澘
+ wrkMast.setLinkMis("N");
+ wrkMast.setAppeUser(userId); // 鎿嶄綔浜哄憳鏁版嵁
+ wrkMast.setAppeTime(new Date());
+ wrkMast.setModiUser(userId);
+ wrkMast.setModiTime(new Date());
+ if (!wrkMastService.insert(wrkMast)) {
+ throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐ワ紝鍑哄簱搴撲綅鍙凤細"+dto.getLocNo());
+ }
+ // 鐢熸垚宸ヤ綔妗f槑缁�
+ for (LocDetlDto detlDto : dto.getLocDetlDtos()) {
+ // 濡傛灉涓烘崱鏂欏嚭搴撻渶瑕佸垽鏂墭鐩樼爜鏄惁涓虹┖
+ if (ioType == 103) {
+ String zpallet = detlDto.getLocDetl().getZpallet();
+ if (Cools.isEmpty(zpallet)) {
+ throw new CoolException("鎷f枡鍑哄簱蹇呴』鍚湁鎵樼洏鐮�");
+ }
+ }
+ // 鍑哄簱鏃讹紝鏁伴噺涓�0鐨勭洿鎺ュ拷鐣�
+ if (detlDto.getCount()==null || detlDto.getCount() <= 0.0D) {continue;}
+ WrkDetl wrkDetl = new WrkDetl();
+ wrkDetl.setWrkNo(workNo);
+ wrkDetl.setIoTime(new Date());
+ Double anfme = ioType==101?detlDto.getLocDetl().getAnfme():detlDto.getCount();
+ wrkDetl.setAnfme(anfme); // 鏁伴噺
+ VersionUtils.setWrkDetl(wrkDetl, detlDto.getLocDetl()); // 鐗堟湰鎺у埗
+ wrkDetl.setAppeTime(new Date());
+ wrkDetl.setAppeUser(userId);
+ wrkDetl.setModiTime(new Date());
+ wrkDetl.setModiUser(userId);
+ wrkDetl.setSupplier(fbillNo);
+ wrkDetl.setMemo(detlDto.getLocDetl().getMemo());
+ if (!wrkDetlService.insert(wrkDetl)) {
+ throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+ }
+ }
+ // 淇敼搴撲綅鐘舵��: F.鍦ㄥ簱 ====>>> R.鍑哄簱棰勭害/P.鎷f枡/鐩樼偣/骞舵澘鍑哄簱涓�
+ locMast = locMastService.selectById(dto.getLocNo());
+ if (locMast.getLocSts().equals("F")) {
+ locMast.setLocSts(ioType==101?"R":"P");
+ locMast.setModiUser(userId);
+ locMast.setModiTime(new Date());
+ if (!locMastService.updateById(locMast)) {
+ throw new CoolException("棰勭害搴撲綅鐘舵�佸け璐ワ紝搴撲綅鍙凤細"+dto.getLocNo());
+ }
+ } else {
+ throw new CoolException(dto.getLocNo() + "搴撲綅涓嶆槸鍦ㄥ簱鐘舵��");
+ }
+ }
+ // todo:luxiaotao
+ // 鍚屼竴鍒楃殑鍚屾椂鍑哄簱锛屽垯浼樺厛鍑烘祬搴撲綅
+ }
}
--
Gitblit v1.9.1