K3TransferLogic.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. package com.zfire.mall.manager.logic.k3;
  2. import com.baomidou.mybatisplus.core.metadata.IPage;
  3. import com.baomidou.mybatisplus.core.toolkit.IdWorker;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import com.zfire.mall.manager.bean.ExcelData;
  6. import com.zfire.mall.manager.bean.admin.AdminUserCom;
  7. import com.zfire.mall.manager.bean.k3.*;
  8. import com.zfire.mall.manager.bean.pick.PickManagerBean;
  9. import com.zfire.mall.manager.commonmapper.manage.TransferMapper;
  10. import com.zfire.mall.manager.constant.KingDeeCons;
  11. import com.zfire.mall.manager.enums.ExamineStatusEnum;
  12. import com.zfire.mall.manager.exception.RemoteServiceException;
  13. import com.zfire.mall.manager.logic.common.CommonLogic;
  14. import com.zfire.mall.manager.logic.stock.StockCommonLogic;
  15. import com.zfire.mall.manager.plus.entity.*;
  16. import com.zfire.mall.manager.plus.service.*;
  17. import lombok.extern.slf4j.Slf4j;
  18. import org.apache.commons.lang3.StringUtils;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.stereotype.Service;
  21. import org.springframework.transaction.annotation.Transactional;
  22. import org.springframework.util.CollectionUtils;
  23. import java.math.BigDecimal;
  24. import java.util.*;
  25. import java.util.stream.Collectors;
  26. @Service
  27. @Slf4j
  28. public class K3TransferLogic {
  29. @Autowired
  30. K3Logic k3Logic;
  31. @Autowired
  32. KingDeeTransferService kingDeeTransferService;
  33. @Autowired
  34. KingDeeTransferItemService kingDeeTransferItemService;
  35. @Autowired
  36. TransferMapper transferMapper;
  37. @Autowired
  38. StockService stockService;
  39. @Autowired
  40. StockCommonLogic stockCommonLogic;
  41. @Autowired
  42. StockCorrespondService stockCorrespondService;
  43. @Autowired
  44. CommonLogic commonLogic;
  45. // public void allSync(String orgId, String orgNumber, String startTime, String endTime) throws Exception {
  46. // // 调用调拨单接口
  47. // RequestApiBean request = k3Logic.getInstance(orgId, orgNumber, KingDeeCons.STOCK_TRANSFER, startTime, endTime);
  48. // String filterStr = "FDocumentStatus = 'C' "+ k3Logic.supplySql("FApproveDate", request.getStartTime(), request.getEndTime());
  49. // request.setFieldKeys("FID,FBillNo,FStockOrgId.FName,FStockOutOrgId.FName,FTransferBizType,FNote,FApproverId.FName,FCancellerId.FName,FBillTypeID.FName,FDocumentStatus,FDate,FApproveDate,FCancelDate");
  50. // request.setFilterString(String.format(filterStr, orgNumber));
  51. // request.setOrderString("FID ASC");
  52. //
  53. // String[] fields = new String[]{"id","billNo","stockOrgId","stockOutOrgId","transferBizType","note","approverId","cancellerId","billType","documentStatus","fDate","approveDate","cancelDate"};
  54. // List<KingDeeTransfer> objects = k3Logic.allSync(request, fields, KingDeeTransfer.class);
  55. // syncTransferItem(orgId,orgNumber,startTime,endTime);
  56. // if (CollectionUtils.isNotEmpty(objects)) {
  57. // kingDeeTransferService.saveOrUpdateBatch(objects);
  58. // }
  59. //
  60. // }
  61. // public void syncTransferItem(String orgId, String orgNumber, String startTime, String endTime) throws Exception {
  62. // // 调用调拨单物料接口
  63. // RequestApiBean request = k3Logic.getInstance(orgId, orgNumber, KingDeeCons.STOCK_TRANSFER, startTime, endTime);
  64. // String filterStr = "FDocumentStatus = 'C' "+ k3Logic.supplySql("FApproveDate", request.getStartTime(), request.getEndTime());
  65. // request.setFieldKeys("FBillEntry_FEntryID,FID,FBillNo,FMaterialId,FMaterialId.FNumber,FMaterialName,FSrcStockId.FName,FDestStockId.FName,FQty,FOwnerId,FOwnerOutId,FModel,FBaseUnitId.FName,FConsignAmount,FConsignPrice,FSrcStockLocId,FDestStockLocId,FAuxPropId");
  66. // request.setFilterString(String.format(filterStr, orgNumber));
  67. // request.setOrderString("FID ASC");
  68. //
  69. // String[] fields = new String[]{"id","fId","billNo","materialId","materialNumber","materialName","srcStockId","destStockId","qty","ownerId","ownerOutId","model","baseUnitId","consignAmount","consignPrice","srcStockLocId","destStockLocId","auxPropId"};
  70. // List<KingDeeTransferItem> objects = k3Logic.allSync(request, fields, KingDeeTransferItem.class);
  71. // if (Objects.nonNull(objects)) {
  72. // kingDeeTransferItemService.saveOrUpdateBatch(objects);
  73. // }
  74. // }
  75. /**
  76. * 调拨单列表
  77. * @param billNo
  78. * @param materialName
  79. * @param startTime
  80. * @param endTime
  81. * @param pageNum
  82. * @param pageSize
  83. * @return
  84. */
  85. public IPage<KingTransfer> list(String billNo, String materialName, String startTime, String endTime, Integer pageNum, Integer pageSize) {
  86. return transferMapper.list(new Page<>(pageNum,pageSize),billNo,materialName,startTime,endTime);
  87. }
  88. /**
  89. * 调拨单详情
  90. * @param id
  91. * @return
  92. */
  93. public KingTransferBean detail(String id) {
  94. return transferMapper.detail(id);
  95. }
  96. /**
  97. * 调拨单导出
  98. * @param kingTransferList
  99. * @return
  100. */
  101. public ExcelData export(List<KingTransfer> kingTransferList){
  102. String[] titles = new String[]{"单据编号","单据类型","调拨类型","申请日期","单据状态",
  103. "关闭状态","物料编码","物料名称","规格型号","辅助属性","单位",
  104. "申请数量","调出仓库","调入仓库"};
  105. List<List<Object>> rows = new ArrayList<>();
  106. for (KingTransfer kingTransfer: kingTransferList) {
  107. List<Object> row = new ArrayList<>();
  108. row.add(kingTransfer.getBillNo());
  109. row.add(kingTransfer.getBillType());
  110. row.add(kingTransfer.getTransferBizType());
  111. row.add(kingTransfer.getFDate());
  112. row.add(kingTransfer.getDocumentStatus());
  113. row.add(kingTransfer.getCancelStatus());
  114. row.add(kingTransfer.getMaterialNumber());
  115. row.add(kingTransfer.getMaterialName());
  116. row.add(kingTransfer.getModel());
  117. //row.add(kingTransfer.getAuxPropId());
  118. row.add(kingTransfer.getBaseUnitId());
  119. row.add(kingTransfer.getSrcStockName());
  120. row.add(kingTransfer.getDestStockName());
  121. rows.add(row);
  122. }
  123. ExcelData excelData = new ExcelData();
  124. excelData.setRows(rows);
  125. excelData.setTitles(Arrays.asList(titles));
  126. return excelData;
  127. }
  128. public void add(KingTransferAddOrUp kingTransferAdd) {
  129. kingTransferAdd.setId(IdWorker.getIdStr());
  130. kingTransferAdd.setBillNo(kingTransferAdd.getId());
  131. kingTransferAdd.setFDate(new Date());
  132. kingTransferAdd.setCancelStatus(ExamineStatusEnum.WAIT.getKey());
  133. kingTransferAdd.insert();
  134. List<StockCorrespond> list = stockCorrespondService.lambdaQuery().list();
  135. for (KingDeeTransferItem kingDeeTransferItem : kingTransferAdd.getKingDeeTransferItems()) {
  136. kingDeeTransferItem.setBillNo(kingTransferAdd.getId());
  137. List<StockCorrespond> collect = list.stream().filter(item -> item.getId().equals(kingDeeTransferItem.getSrcStockId())).collect(Collectors.toList());
  138. List<StockCorrespond> destStock = list.stream().filter(item -> item.getId().equals(kingDeeTransferItem.getDestStockId())).collect(Collectors.toList());
  139. if (CollectionUtils.isEmpty(collect))
  140. throw new RemoteServiceException("未找到对应仓库");
  141. StockCorrespond stockCorrespond = collect.get(0);
  142. StockCorrespond stockDestCorrespond = destStock.get(0);
  143. kingDeeTransferItem.setSrcStockName(stockCorrespond.getName());
  144. kingDeeTransferItem.setDestStockName(stockDestCorrespond.getName());
  145. }
  146. kingDeeTransferItemService.saveBatch(kingTransferAdd.getKingDeeTransferItems());
  147. }
  148. public void update(KingTransferAddOrUp kingTransferAdd) {
  149. kingTransferAdd.updateById();
  150. kingDeeTransferItemService.lambdaUpdate().eq(KingDeeTransferItem::getBillNo,kingTransferAdd.getId()).remove();
  151. for (KingDeeTransferItem kingDeeTransferItem : kingTransferAdd.getKingDeeTransferItems()) {
  152. kingDeeTransferItem.setBillNo(kingTransferAdd.getId());
  153. }
  154. kingDeeTransferItemService.saveBatch(kingTransferAdd.getKingDeeTransferItems());
  155. }
  156. @Transactional(rollbackFor = Exception.class)
  157. public void examine(String billNo, String cancelStatus) {
  158. AdminUserCom adminUser = commonLogic.getAdminUser();
  159. KingDeeTransfer kingDeeTransfer = kingDeeTransferService.getById(billNo);
  160. kingDeeTransfer.setCancelStatus(cancelStatus);
  161. kingDeeTransfer.setApproveDate(new Date());
  162. kingDeeTransfer.setApproverId(adminUser.getNickName());
  163. kingDeeTransfer.updateById();
  164. if (cancelStatus.equals(ExamineStatusEnum.OK.getKey())) {
  165. List<KingDeeTransferItem> kingDeeTransferItems = kingDeeTransferItemService.lambdaQuery()
  166. .eq(KingDeeTransferItem::getBillNo, billNo).list();
  167. for (KingDeeTransferItem kingDeeTransferItem : kingDeeTransferItems) {
  168. this.stockSub(kingDeeTransfer,kingDeeTransferItem);
  169. this.stockAdd(kingDeeTransfer,kingDeeTransferItem);
  170. }
  171. }
  172. }
  173. @Transactional(rollbackFor = Exception.class)
  174. public void stockSub(KingDeeTransfer kingDeeTransfer, KingDeeTransferItem kingDeeTransferItem) {
  175. Stock stock = stockService.lambdaQuery().eq(Stock::getStockId, kingDeeTransferItem.getSrcStockId())
  176. .eq(Stock::getMaterialId, kingDeeTransferItem.getMaterialId()).last("limit 1").one();
  177. if (stock == null)
  178. throw new RemoteServiceException(kingDeeTransferItem.getMaterialName()+"该物料没有库存,不能退库");
  179. stockCommonLogic.stockAccLog("调拨调出减少库存",stock,kingDeeTransferItem.getQty(),kingDeeTransferItem.getBillNo(),false,"调拨单");
  180. stock.setStockQty(stock.getStockQty().subtract(kingDeeTransferItem.getQty()));
  181. if (stock.getStockQty().doubleValue() < 1)
  182. throw new RemoteServiceException(kingDeeTransferItem.getMaterialName()+"该物料没有库存,不能退库");
  183. stock.updateById();
  184. }
  185. @Transactional(rollbackFor = Exception.class)
  186. public void stockAdd(KingDeeTransfer kingDeeTransfer, KingDeeTransferItem kingDeeTransferItem) {
  187. Stock stock = stockService.lambdaQuery().eq(Stock::getStockId, kingDeeTransferItem.getDestStockId())
  188. .eq(Stock::getMaterialId, kingDeeTransferItem.getMaterialId()).last("limit 1").one();
  189. if (stock == null){
  190. stock = new Stock();
  191. stock.setStockQty(BigDecimal.ZERO);
  192. stock.setSyncTime(new Date());
  193. stock.setStockId(kingDeeTransferItem.getDestStockId());
  194. stock.setMaterialId(kingDeeTransferItem.getMaterialId());
  195. stock.setSupplyOrgId(kingDeeTransferItem.getSupplyOrgId());
  196. stockCommonLogic.stockAccLog("调拨调入增加库存",stock,kingDeeTransferItem.getQty(),kingDeeTransferItem.getBillNo(),true,"调拨单");
  197. stock.setStockQty(kingDeeTransferItem.getQty());
  198. stock.insert();
  199. return;
  200. }
  201. stockCommonLogic.stockAccLog("调拨调入增加库存",stock,kingDeeTransferItem.getQty(),kingDeeTransferItem.getBillNo(),true,"调拨单");
  202. stock.setStockQty(kingDeeTransferItem.getQty().add(stock.getStockQty()));
  203. stock.updateById();
  204. }
  205. }