InboundPurchaseService.java 68 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329
  1. package com.dk.mdm.service.ivt.inbound;
  2. import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
  3. import com.dk.common.exception.BaseBusinessException;
  4. import com.dk.common.infrastructure.annotaiton.Pagination;
  5. import com.dk.common.infrastructure.constant.Constant;
  6. import com.dk.common.infrastructure.enums.ErrorCodeEnum;
  7. import com.dk.common.mapper.BaseMapper;
  8. import com.dk.common.model.pojo.PageList;
  9. import com.dk.common.model.vo.AnnexVO;
  10. import com.dk.common.response.ResponseCodeEnum;
  11. import com.dk.common.response.ResponseResultUtil;
  12. import com.dk.common.response.ResponseResultVO;
  13. import com.dk.common.service.BaseService;
  14. import com.dk.mdm.infrastructure.convert.ivt.InboundConvert;
  15. import com.dk.mdm.infrastructure.convert.ivt.InboundItemConvert;
  16. import com.dk.mdm.mapper.common.CommonMapper;
  17. import com.dk.mdm.mapper.ivt.InboundItemMapper;
  18. import com.dk.mdm.mapper.ivt.InboundMapper;
  19. import com.dk.mdm.mapper.pur.PurchaseItemMapper;
  20. import com.dk.mdm.mapper.pur.PurchaseMapper;
  21. import com.dk.mdm.model.pojo.ivt.Inbound;
  22. import com.dk.mdm.model.pojo.ivt.InboundItem;
  23. import com.dk.mdm.model.pojo.pur.Purchase;
  24. import com.dk.mdm.model.pojo.pur.PurchaseItem;
  25. import com.dk.mdm.model.query.ivt.InboundItemQuery;
  26. import com.dk.mdm.model.query.ivt.InboundQuery;
  27. import com.dk.mdm.model.response.ivt.InboundItemResponse;
  28. import com.dk.mdm.model.response.ivt.InboundResponse;
  29. import com.dk.mdm.model.response.pur.PurchaseItemResponse;
  30. import com.dk.mdm.model.response.pur.PurchaseResponse;
  31. import com.dk.mdm.model.vo.ivt.InboundItemVO;
  32. import com.dk.mdm.model.vo.ivt.InboundVO;
  33. import com.dk.mdm.service.common.CommonService;
  34. import com.dk.mdm.service.ivt.inventory.InventoryService;
  35. import com.dk.mdm.service.mac.AccountService;
  36. import org.springframework.beans.factory.annotation.Autowired;
  37. import org.springframework.stereotype.Service;
  38. import org.springframework.transaction.annotation.Transactional;
  39. import java.math.BigDecimal;
  40. import java.time.LocalDate;
  41. import java.util.HashMap;
  42. import java.util.List;
  43. import java.util.Map;
  44. import java.util.UUID;
  45. /**
  46. * @author : 寇珊珊
  47. * @desc : 采购入库业务层
  48. * @date : 2024/3/7 14:11
  49. */
  50. @Service
  51. public class InboundPurchaseService extends BaseService<Inbound> {
  52. @Override
  53. public BaseMapper<Inbound> getRepository() {
  54. return inboundMapper;
  55. }
  56. @Autowired
  57. private InboundMapper inboundMapper;
  58. @Autowired
  59. private InboundConvert inboundConvert;
  60. @Autowired
  61. private InboundItemMapper inboundItemMapper;
  62. @Autowired
  63. private InboundItemConvert inboundItemConvert;
  64. @Autowired
  65. private PurchaseMapper purchaseMapper;
  66. @Autowired
  67. private PurchaseItemMapper purchaseItemMapper;
  68. @Autowired
  69. private CommonService commonService;
  70. @Autowired
  71. private CommonMapper commonMapper;
  72. @Autowired
  73. private InventoryService inventoryService;
  74. @Autowired
  75. private AccountService accountService;
  76. /**
  77. * @desc : 条件查询
  78. * @date : 2024/3/7 14:12
  79. * @author : 寇珊珊
  80. */
  81. @Pagination
  82. public ResponseResultVO<PageList<InboundResponse>> selectByCond(InboundQuery inboundQuery) {
  83. return super.mergeListWithCount(inboundQuery, inboundMapper.selectByCond(inboundQuery),
  84. inboundMapper.countByCond(inboundQuery));
  85. }
  86. /**
  87. * @desc : 查询明细
  88. * @date : 2024/3/9 15:43
  89. * @author : 寇珊珊
  90. */
  91. @Pagination
  92. public ResponseResultVO<Map<String, Object>> selectPurchaseInboundItemInfoById(String id) {
  93. Map<String, Object> result = new HashMap<>();
  94. // 商品明细
  95. List<InboundItemResponse> inboundItemResponses = inboundItemMapper.selectByCond(new InboundItemQuery().setIntoId(id));
  96. result.put("itemList", inboundItemResponses);
  97. // 收款
  98. // 附件
  99. return ResponseResultUtil.success(result);
  100. }
  101. /**
  102. * @desc : 查询入库价
  103. * @date : 2024/7/1 11:29
  104. * @author : 寇珊珊
  105. */
  106. @Transactional(rollbackFor = {Exception.class})
  107. public InboundItemResponse selectPriceInto(InboundItemVO inboundItemVO) {
  108. List<InboundItemResponse> inboundItemResponses = inboundItemMapper.selectPriceInto(new InboundItemQuery().setSkuId(inboundItemVO.getSkuId())
  109. .setNonStdCode(inboundItemVO.getNonStdCode())
  110. .setWhId(inboundItemVO.getWhId()));
  111. if (inboundItemResponses != null && inboundItemResponses.size() > 0) {
  112. return inboundItemResponses.get(0);
  113. }
  114. return null;
  115. }
  116. /**
  117. * @desc : 采购入库新建
  118. * @date : 2024/3/7 14:13
  119. * 入库中数量/金额 已入库数量/金额 由调用方传入
  120. * @author : 寇珊珊
  121. */
  122. @Transactional(rollbackFor = {Exception.class})
  123. public ResponseResultVO<?> purchaseInboundInsert(InboundVO inboundVO) {
  124. //region 校验明细
  125. if (inboundVO.getItemList().size() == 0) {
  126. throw new BaseBusinessException(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
  127. ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getMessage());
  128. }
  129. //endregion
  130. //region 查询当前入库明细中是否存在未空或者0的入库价,如果存在去库存流水差最近一条有价格的数据赋值到当前明细
  131. Boolean priceIntoFlag = false;
  132. for (InboundItemVO inboundItemVO : inboundVO.getItemList()) {
  133. if(inboundItemVO.getCostPrice() == null || inboundItemVO.getCostPrice().compareTo(BigDecimal.ZERO)==0){
  134. priceIntoFlag = true;
  135. //查询库存批次最近一条入库价
  136. InboundItemResponse inboundItemResponse = this.selectPriceInto(inboundItemVO);
  137. inboundItemVO.setPriceInto(inboundItemResponse != null ? inboundItemResponse.getPriceInto() : BigDecimal.ZERO);
  138. inboundItemVO.setIntoingAmt(inboundItemResponse != null ? inboundItemResponse.getPriceInto().multiply(inboundItemVO.getIntoingQty()).setScale(2, BigDecimal.ROUND_HALF_UP) : BigDecimal.ZERO);
  139. inboundItemVO.setCostPrice(inboundItemResponse != null ? inboundItemResponse.getCostPrice() : BigDecimal.ZERO);
  140. inboundItemVO.setCostAmt(inboundItemResponse != null ? inboundItemResponse.getCostPrice().multiply(inboundItemVO.getIntoingQty()).setScale(2, BigDecimal.ROUND_HALF_UP) : BigDecimal.ZERO);
  141. }
  142. }
  143. if(priceIntoFlag){
  144. BigDecimal intoingAmt = inboundVO.getItemList().stream().map(InboundItemVO::getIntoingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
  145. inboundVO.setIntoingAmt(intoingAmt);
  146. }
  147. //endregion
  148. //region 查询当前公司的系统参数 自动办理信息 并赋值
  149. Map<String, Object> map = new HashMap<>();
  150. map.put("cpId", inboundVO.getCpId());
  151. map.put("code", Constant.SystemConstant.IVT_001.getValue());
  152. //自动办理标识
  153. String flgHandleSetting = commonMapper.getSettingValue(map);
  154. //自动办理标识为1 自动办理入库
  155. if (Constant.FlgAutoHandleStringType.ONE.getValue().equals(flgHandleSetting)) {
  156. inboundVO.setFlgAutoHandle(Constant.FlgAutoHandle.TRUE.getValue());
  157. }
  158. //endregion
  159. //region 总单
  160. //获取 id/单号
  161. Map<String, Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.PURCASEINBOUND.getName(), false);
  162. inboundVO.setIntoId(codeMap.get("outId").toString()).
  163. setIntoNo(codeMap.get("outNote").toString());
  164. //入库类型
  165. inboundVO.setIntoType(Constant.IntoType.SALE.getName());
  166. //自动入库标识
  167. if (inboundVO.getFlgAutoHandle()) {
  168. //已入库
  169. inboundVO.setIntoStatus(Constant.IntoStatus.YIRUKU.getName());
  170. //入库日期
  171. inboundVO.setIntoDate( inboundVO.getIntoDate()==null ? LocalDate.now() : inboundVO.getIntoDate() );
  172. } else {
  173. //入库中
  174. inboundVO.setIntoStatus(Constant.IntoStatus.RUKUZHONG.getName());
  175. }
  176. //入库状态等于已入库 更新合计入库数量/金额 = 入库中数量/入库中金额
  177. if (Constant.IntoStatus.YIRUKU.getName().equals(inboundVO.getIntoStatus())) {
  178. inboundVO.setIntoQty(inboundVO.getIntoingQty())
  179. .setIntoAmt(inboundVO.getIntoingAmt())
  180. .setIntoingQty(BigDecimal.ZERO)
  181. .setIntoingAmt(BigDecimal.ZERO)
  182. ;
  183. } else {
  184. inboundVO.setIntoQty(BigDecimal.ZERO)
  185. .setIntoAmt(BigDecimal.ZERO)
  186. ;
  187. }
  188. //实体转换
  189. Inbound inbound = inboundConvert.convertToPo(inboundVO);
  190. inboundMapper.insert(inbound);
  191. //endregion
  192. //region 采购总单
  193. if (inboundVO.getFromId() != null) {
  194. //赋值(这里重写了更新方法,数量在更新方法中有数据库院士数量+本次数量)
  195. Purchase purchaseUpdate = new Purchase();
  196. purchaseUpdate.setPurId(inboundVO.getFromId());
  197. //根据id查询
  198. PurchaseResponse purchaseResponse = purchaseMapper.selectById(inboundVO.getFromId());
  199. //已入库
  200. if (Constant.IntoStatus.YIRUKU.getName().equals(inboundVO.getIntoStatus())) {
  201. purchaseUpdate.setIntoingQty(BigDecimal.ZERO);
  202. purchaseUpdate.setIntoingAmt(BigDecimal.ZERO);
  203. purchaseUpdate.setIntoQty(inboundVO.getIntoQty());
  204. purchaseUpdate.setIntoAmt(inboundVO.getIntoAmt());
  205. }
  206. //入库中
  207. else {
  208. purchaseUpdate.setIntoingQty(inboundVO.getIntoingQty());
  209. purchaseUpdate.setIntoingAmt(inboundVO.getIntoingAmt());
  210. purchaseUpdate.setIntoQty(BigDecimal.ZERO);
  211. purchaseUpdate.setIntoAmt(BigDecimal.ZERO);
  212. }
  213. //入库状态
  214. String intoStatus = this.setIntoStatus(purchaseResponse.getIntoingQty().add(purchaseUpdate.getIntoingQty()),
  215. purchaseResponse.getIntoQty().add(purchaseUpdate.getIntoQty()), purchaseResponse.getSumQuantity());
  216. purchaseUpdate.setIntoStatus(intoStatus);
  217. //修改
  218. int countRow = purchaseMapper.updateById(purchaseUpdate);
  219. //数量超出
  220. if (countRow == 0) {
  221. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
  222. }
  223. }
  224. //endregion
  225. //region 明细
  226. for (InboundItemVO inboundItemVO : inboundVO.getItemList()) {
  227. //region 将库存需要的参数赋值
  228. inboundItemVO.setInventoryType(Constant.InventoryType.INBOUND.getName());
  229. inboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.PURCHASE_ORDER.getValue());
  230. inboundItemVO.setAddOrEditFlag(true);
  231. //endregion
  232. //总单id
  233. inboundItemVO.setIntoId(inboundVO.getIntoId());
  234. //入库类型
  235. inboundItemVO.setIntoType(inboundVO.getIntoType());
  236. //入库状态等于已入库 更新合计入库数量/金额 = 入库中数量/入库中金额
  237. if (Constant.IntoStatus.YIRUKU.getName().equals(inboundVO.getIntoStatus())) {
  238. inboundItemVO
  239. .setIntoQty(inboundItemVO.getIntoingQty())
  240. .setIntoAmt(inboundItemVO.getIntoingAmt())
  241. .setIntoingQty(BigDecimal.ZERO)
  242. .setIntoingAmt(BigDecimal.ZERO)
  243. .setCostPrice(inboundItemVO.getPriceInto())
  244. .setCostAmt(inboundItemVO.getIntoQty().multiply(inboundItemVO.getPriceInto()).setScale(2, BigDecimal.ROUND_HALF_UP))
  245. ;
  246. } else {
  247. inboundItemVO
  248. .setIntoQty(BigDecimal.ZERO)
  249. .setIntoAmt(BigDecimal.ZERO);
  250. }
  251. //入库状态
  252. inboundItemVO.setIntoStatus(inboundVO.getIntoStatus());
  253. //实体转换
  254. InboundItem inboundItem = inboundItemConvert.convertToPo(inboundItemVO);
  255. inboundItemMapper.insert(inboundItem);
  256. inboundItemVO.setItemId(inboundItem.getItemId());
  257. //endregion
  258. //region 采购明细
  259. if (inboundItemVO.getFromItemId() != null) {
  260. //赋值(这里重写了更新方法,数量在更新方法中有数据库院士数量+本次数量)
  261. PurchaseItem purchaseItem = new PurchaseItem();
  262. purchaseItem.setItemId(inboundItemVO.getFromItemId());
  263. //根据id查询
  264. PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(inboundItemVO.getFromItemId());
  265. //已入库
  266. if (Constant.IntoStatus.YIRUKU.getName().equals(inboundVO.getIntoStatus())) {
  267. purchaseItem.setIntoingQty(BigDecimal.ZERO);
  268. purchaseItem.setIntoingAmt(BigDecimal.ZERO);
  269. purchaseItem.setIntoQty(inboundItemVO.getIntoQty());
  270. purchaseItem.setIntoAmt(inboundItemVO.getIntoAmt());
  271. }
  272. //入库中
  273. else {
  274. purchaseItem.setIntoingQty(inboundItemVO.getIntoingQty());
  275. purchaseItem.setIntoingAmt(inboundItemVO.getIntoingAmt());
  276. purchaseItem.setIntoQty(BigDecimal.ZERO);
  277. purchaseItem.setIntoAmt(BigDecimal.ZERO);
  278. }
  279. //入库状态
  280. String intoStatus = this.setIntoStatus(purchaseItemResponse.getIntoingQty().add(purchaseItem.getIntoingQty()),
  281. purchaseItemResponse.getIntoQty().add(purchaseItem.getIntoQty()), purchaseItemResponse.getItemQty());
  282. purchaseItem.setIntoStatus(intoStatus);
  283. int countRow = purchaseItemMapper.updateById(purchaseItem);
  284. //数量超出
  285. if (countRow == 0) {
  286. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
  287. }
  288. }
  289. //endregion
  290. }
  291. //endregion
  292. //region 入账
  293. if (Constant.IntoStatus.YIRUKU.getName().equals(inboundVO.getIntoStatus())) {
  294. accountService.accPayable(inboundVO.getIntoId(), Constant.InventoryDocCode.INTOBOUND.getTableName());
  295. }
  296. //endregion
  297. //region 库存
  298. if (Constant.IntoStatus.YIRUKU.getName().equals(inboundVO.getIntoStatus())) {
  299. Map<String, Object> invMap = new HashMap<>();
  300. invMap.put("intoDetail", inboundVO.getItemList());
  301. inventoryService.operatingInventoryInformation(invMap);
  302. }
  303. //endregion
  304. return ResponseResultUtil.success(inboundVO);
  305. }
  306. /**
  307. * @desc : 采购入库编辑
  308. * @date : 2024/3/25 16:25
  309. * @author : 寇珊珊
  310. */
  311. @Transactional(rollbackFor = {Exception.class})
  312. public ResponseResultVO<?> purchaseInboundUpdate(InboundVO inboundVO) {
  313. //region 小编辑
  314. if (!inboundVO.getLimitEdit()) {
  315. Inbound inbound = new Inbound();
  316. inbound.setIntoId(inboundVO.getIntoId());
  317. inbound.setRemarks(inboundVO.getRemarks());
  318. inbound.setAnnexPaths(inboundVO.getAnnexPaths());
  319. inboundMapper.update(inbound,
  320. new UpdateWrapper<Inbound>().lambda()
  321. .eq(Inbound::getIntoId, UUID.fromString(inbound.getIntoId()))
  322. );
  323. for (InboundItemVO inboundItemVO : inboundVO.getItemList()) {
  324. InboundItem inboundItem = new InboundItem();
  325. inboundItem.setItemId(inboundItemVO.getItemId());
  326. if (inboundItemVO.getRemarks() != null && inboundItemVO.getRemarks() != "") {
  327. inboundItem.setRemarks(inboundItemVO.getRemarks());
  328. inboundItemMapper.update(inboundItem,
  329. new UpdateWrapper<InboundItem>().lambda()
  330. .eq(InboundItem::getItemId, UUID.fromString(inboundItem.getItemId()))
  331. );
  332. }
  333. }
  334. }
  335. //endregion
  336. //region 大编辑
  337. else {
  338. //region 根据id查询 此条入库单的数据还未更改前的数据
  339. InboundResponse inboundResponse = inboundMapper.selectById(inboundVO.getIntoId());
  340. BigDecimal sumQty = inboundVO.getItemList().stream().map(InboundItemVO::getIntoingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
  341. BigDecimal sumAmt = inboundVO.getItemList().stream().map(InboundItemVO::getIntoingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
  342. //endregion
  343. //region 已入库编辑
  344. if (Constant.IntoStatus.YIRUKU.getName().equals(inboundResponse.getIntoStatus())) {
  345. //region 退账
  346. if (inboundVO.getReceivableId() != null) {
  347. accountService.reversePayable(inboundVO.getIntoId(), Constant.InventoryDocCode.INTOBOUND.getTableName());
  348. }
  349. //endregion
  350. //region 修改明细
  351. List<InboundItemVO> itemList = inboundVO.getItemList();
  352. for (InboundItemVO inboundItemVO : itemList) {
  353. //根据id查询
  354. InboundItemResponse inboundItemResponse = inboundItemMapper.selectById(inboundItemVO.getItemId());
  355. //region 编辑明细 赋值
  356. if (inboundItemVO.getItemId() != null) {
  357. //region 将库存需要的参数赋值
  358. inboundItemVO.setInventoryType(Constant.InventoryType.INBOUND.getName());
  359. inboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.PURCHASE_ORDER.getValue());
  360. //编辑之前的数
  361. inboundItemVO.setQtyBeforeUpdate(inboundItemResponse.getIntoQty());
  362. inboundItemVO.setAmtBeforeUpdate(inboundItemResponse.getIntoAmt());
  363. //编辑之后的数
  364. inboundItemVO.setIntoQty(inboundItemVO.getIntoingQty());
  365. inboundItemVO.setIntoAmt(inboundItemVO.getIntoingAmt());
  366. inboundItemVO.setAddOrEditFlag(false);
  367. //endregion
  368. InboundItem inboundItem = new InboundItem();
  369. inboundItem.setItemId(inboundItemVO.getItemId());
  370. inboundItem.setIntoQty(inboundItemVO.getIntoingQty());
  371. inboundItem.setIntoAmt(inboundItemVO.getIntoingAmt());
  372. inboundItem.setCostPrice(inboundItemVO.getPriceInto());
  373. inboundItem.setCostAmt(inboundItemVO.getIntoQty().multiply(inboundItemVO.getPriceInto()).setScale(6, BigDecimal.ROUND_HALF_UP));
  374. //修改
  375. inboundItemMapper.update(inboundItem,
  376. new UpdateWrapper<InboundItem>().lambda()
  377. .eq(InboundItem::getItemId, UUID.fromString(inboundItem.getItemId()))
  378. );
  379. }
  380. //endregion
  381. //region 新建明细
  382. else {
  383. inboundItemVO
  384. .setIntoQty(inboundItemVO.getIntoingQty())
  385. .setIntoAmt(inboundItemVO.getIntoingAmt())
  386. .setIntoingQty(BigDecimal.ZERO)
  387. .setIntoingAmt(BigDecimal.ZERO)
  388. .setCostPrice(inboundItemVO.getPriceInto())
  389. .setCostAmt(inboundItemVO.getOutQty().multiply(inboundItemVO.getPriceInto()).setScale(2, BigDecimal.ROUND_HALF_UP))
  390. ;
  391. inboundItemVO.setIntoId(inboundVO.getIntoId());
  392. //入库状态
  393. inboundItemVO.setIntoStatus(inboundVO.getIntoStatus());
  394. inboundItemVO.setIntoType(Constant.IntoType.SALE.getName());
  395. //实体转换
  396. InboundItem inboundItem = inboundItemConvert.convertToPo(inboundItemVO);
  397. inboundItemMapper.insert(inboundItem);
  398. inboundItemVO.setItemId(inboundItem.getItemId());
  399. //region 将库存需要的参数赋值
  400. inboundItemVO.setInventoryType(Constant.InventoryType.INBOUND.getName());
  401. inboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.PURCHASE_ORDER.getValue());
  402. inboundItemVO.setIntoQty(inboundItemVO.getIntoQty());
  403. inboundItemVO.setIntoAmt(inboundItemVO.getIntoAmt());
  404. inboundItemVO.setAddOrEditFlag(true);
  405. //endregion
  406. }
  407. //endregion
  408. //region 销售明细
  409. if (inboundItemVO.getFromItemId() != null) {
  410. //根据id查询
  411. PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(inboundItemVO.getFromItemId());
  412. PurchaseItem purchaseItem = new PurchaseItem();
  413. purchaseItem.setItemId(inboundItemVO.getFromItemId());
  414. purchaseItem.setIntoQty(inboundItemResponse.getIntoQty().negate().add(inboundItemVO.getIntoingQty()));
  415. purchaseItem.setIntoAmt(inboundItemResponse.getIntoAmt().negate().add(inboundItemVO.getIntoingAmt()));
  416. //入库状态
  417. String intoStatus = this.setIntoStatus(purchaseItemResponse.getIntoingQty(),
  418. purchaseItemResponse.getIntoQty().add(purchaseItem.getIntoQty()), purchaseItemResponse.getItemQty());
  419. purchaseItem.setIntoStatus(intoStatus);
  420. int countRow = purchaseItemMapper.updateById(purchaseItem);
  421. //数量超出
  422. if (countRow == 0) {
  423. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
  424. }
  425. }
  426. //endregion
  427. }
  428. //endregion
  429. //region 删除明细
  430. BigDecimal delIntoQty = BigDecimal.ZERO;
  431. BigDecimal delIntoAmt = BigDecimal.ZERO;
  432. if (inboundVO.getDeleteItemList() != null && inboundVO.getDeleteItemList().size() > 0) {
  433. delIntoQty = inboundVO.getDeleteItemList().stream().map(InboundItemVO::getIntoQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
  434. delIntoAmt = inboundVO.getDeleteItemList().stream().map(InboundItemVO::getIntoAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
  435. for (InboundItemVO inboundItemVO : inboundVO.getDeleteItemList()) {
  436. if (inboundItemVO.getItemId() != null) {
  437. //region 将库存需要的参数赋值
  438. inboundItemVO.setInventoryType(Constant.InventoryType.INBOUND.getName());
  439. inboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.PURCHASE_ORDER.getValue());
  440. inboundItemVO.setIntoQty(inboundItemVO.getIntoQty());
  441. inboundItemVO.setIntoAmt(inboundItemVO.getIntoAmt());
  442. //endregion
  443. InboundItem inboundItem = inboundItemConvert.convertToPo(inboundItemVO);
  444. inboundItem.setFlgValid(false);
  445. //修改
  446. inboundItemMapper.update(inboundItem,
  447. new UpdateWrapper<InboundItem>().lambda()
  448. .eq(InboundItem::getItemId, UUID.fromString(inboundItem.getItemId()))
  449. );
  450. }
  451. //region 销售明细
  452. if (inboundItemVO.getFromItemId() != null) {
  453. //根据id查询
  454. PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(inboundItemVO.getFromItemId());
  455. PurchaseItem purchaseItem = new PurchaseItem();
  456. purchaseItem.setItemId(inboundItemVO.getFromItemId());
  457. purchaseItem.setIntoQty(inboundItemVO.getIntoQty().negate());
  458. purchaseItem.setIntoAmt(inboundItemVO.getIntoAmt().negate());
  459. purchaseItem.setIntoingQty(inboundItemVO.getIntoQty());
  460. purchaseItem.setIntoingAmt(inboundItemVO.getIntoAmt());
  461. //入库状态
  462. String intoStatus = this.setIntoStatus(purchaseItemResponse.getIntoingQty().add(purchaseItem.getIntoingQty()),
  463. purchaseItemResponse.getIntoQty().add(purchaseItem.getIntoQty()), purchaseItemResponse.getItemQty());
  464. purchaseItem.setIntoStatus(intoStatus);
  465. int countRow = purchaseItemMapper.updateById(purchaseItem);
  466. //数量超出
  467. if (countRow == 0) {
  468. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
  469. }
  470. }
  471. //endregion
  472. }
  473. }
  474. //endregion
  475. //region 修改入库总单
  476. Inbound inbound = new Inbound();
  477. inbound.setIntoId(inboundVO.getIntoId());
  478. inbound.setIntoQty(sumQty);
  479. inbound.setIntoAmt(sumAmt);
  480. //修改
  481. inboundMapper.update(inbound,
  482. new UpdateWrapper<Inbound>().lambda().eq(Inbound::getIntoId, UUID.fromString(inbound.getIntoId()))
  483. );
  484. //endregion
  485. //region 修改销售总单
  486. if (inboundVO.getFromId() != null) {
  487. //根据id查询
  488. PurchaseResponse purchaseResponse = purchaseMapper.selectById(inboundVO.getFromId());
  489. Purchase purchase = new Purchase();
  490. purchase.setPurId(inboundVO.getFromId());
  491. purchase.setIntoQty(inboundResponse.getIntoQty().negate().add(sumQty).subtract(delIntoQty));
  492. purchase.setIntoAmt(inboundResponse.getIntoAmt().negate().add(sumAmt).subtract(delIntoAmt));
  493. purchase.setIntoingQty(delIntoQty);
  494. purchase.setIntoingAmt(delIntoAmt);
  495. //入库状态
  496. String intoStatus = this.setIntoStatus(purchaseResponse.getIntoingQty().add(purchase.getIntoingQty()),
  497. purchaseResponse.getIntoQty().add(purchase.getIntoQty()), purchaseResponse.getSumQuantity());
  498. purchase.setIntoStatus(intoStatus);
  499. //修改
  500. int countRow = purchaseMapper.updateById(purchase);
  501. //数量超出
  502. if (countRow == 0) {
  503. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
  504. }
  505. //endregion
  506. }
  507. //endregion
  508. //region 入账
  509. if (inboundVO.getReceivableId() != null) {
  510. accountService.accPayable(inboundVO.getIntoId(), Constant.InventoryDocCode.INTOBOUND.getTableName());
  511. }
  512. //endregion
  513. //region 调用库存
  514. Map<String, Object> map = new HashMap<>();
  515. map.put("intoDetail", inboundVO.getItemList());
  516. map.put("delIntoDetail", inboundVO.getDeleteItemList());
  517. inventoryService.operatingInventoryInformation(map);
  518. //endregion
  519. }
  520. else{
  521. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.FLG_HANDLE_SETTING_NOT_ENABLED_INTO.getMessage());
  522. }
  523. //endregion
  524. //region 入库中编辑
  525. if (Constant.IntoStatus.RUKUZHONG.getName().equals(inboundResponse.getIntoStatus()) ||
  526. Constant.IntoStatus.DAIRUKU.getName().equals(inboundResponse.getIntoStatus())) {
  527. //region 修改明细
  528. List<InboundItemVO> itemList = inboundVO.getItemList();
  529. for (InboundItemVO inboundItemVO : itemList) {
  530. //根据id查询 获取到还未进行修改的数据
  531. InboundItemResponse inboundItemResponse = inboundItemMapper.selectById(inboundItemVO.getItemId());
  532. //region 编辑明细
  533. if (inboundItemVO.getItemId() != null) {
  534. InboundItem inboundItem = new InboundItem();
  535. inboundItem.setItemId(inboundItemVO.getItemId());
  536. inboundItem.setIntoingQty(inboundItemVO.getIntoingQty());
  537. inboundItem.setIntoingAmt(inboundItemVO.getIntoingAmt());
  538. //修改
  539. inboundItemMapper.update(inboundItem,
  540. new UpdateWrapper<InboundItem>().lambda()
  541. .eq(InboundItem::getItemId, UUID.fromString(inboundItem.getItemId()))
  542. );
  543. }
  544. //endregion
  545. //region 新建明细
  546. else {
  547. inboundItemVO
  548. .setIntoQty(BigDecimal.ZERO)
  549. .setIntoAmt(BigDecimal.ZERO)
  550. .setCostPrice(inboundItemVO.getPriceInto())
  551. .setCostAmt(inboundItemVO.getIntoingQty().multiply(inboundItemVO.getPriceInto()).setScale(2, BigDecimal.ROUND_HALF_UP))
  552. ;
  553. inboundItemVO.setIntoId(inboundVO.getIntoId());
  554. //入库状态
  555. inboundItemVO.setIntoStatus(inboundVO.getIntoStatus());
  556. inboundItemVO.setIntoType(Constant.IntoType.SALE.getName());
  557. //实体转换
  558. InboundItem inboundItem = inboundItemConvert.convertToPo(inboundItemVO);
  559. inboundItemMapper.insert(inboundItem);
  560. inboundItemVO.setItemId(inboundItem.getItemId());
  561. }
  562. //endregion
  563. //region 销售明细
  564. if (inboundItemVO.getFromItemId() != null) {
  565. //根据id查询
  566. PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(inboundItemVO.getFromItemId());
  567. PurchaseItem purchaseItem = new PurchaseItem();
  568. purchaseItem.setItemId(inboundItemVO.getFromItemId());
  569. //本次修改几个传几个(负数) sql中是原数据+本次修改数据
  570. purchaseItem.setIntoingQty(inboundItemResponse.getIntoingQty().negate().add(inboundItemVO.getIntoingQty()));
  571. purchaseItem.setIntoingAmt(inboundItemResponse.getIntoingAmt().negate().add(inboundItemVO.getIntoingAmt()));
  572. //入库状态
  573. String intoStatus = this.setIntoStatus(purchaseItemResponse.getIntoingQty().add(purchaseItem.getIntoingQty()),
  574. purchaseItemResponse.getIntoQty().add(purchaseItem.getIntoQty()), purchaseItemResponse.getItemQty());
  575. purchaseItem.setIntoStatus(intoStatus);
  576. int countRow = purchaseItemMapper.updateById(purchaseItem);
  577. //数量超出
  578. if (countRow == 0) {
  579. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
  580. }
  581. }
  582. //endregion
  583. }
  584. //endregion
  585. //region 删除明细
  586. BigDecimal delIntoQty = BigDecimal.ZERO;
  587. BigDecimal delIntoAmt = BigDecimal.ZERO;
  588. if (inboundVO.getDeleteItemList() != null && inboundVO.getDeleteItemList().size() > 0) {
  589. delIntoQty = inboundVO.getDeleteItemList().stream().map(InboundItemVO::getIntoingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
  590. delIntoAmt = inboundVO.getDeleteItemList().stream().map(InboundItemVO::getIntoingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
  591. for (InboundItemVO inboundItemVO : inboundVO.getDeleteItemList()) {
  592. //region 明细
  593. if (inboundItemVO.getItemId() != null) {
  594. InboundItem inboundItem = inboundItemConvert.convertToPo(inboundItemVO);
  595. inboundItem.setFlgValid(false);
  596. //修改
  597. inboundItemMapper.update(inboundItem,
  598. new UpdateWrapper<InboundItem>().lambda()
  599. .eq(InboundItem::getItemId, UUID.fromString(inboundItem.getItemId()))
  600. );
  601. }
  602. //endregion
  603. //region 销售明细
  604. if (inboundItemVO.getFromItemId() != null) {
  605. //根据id查询
  606. PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(inboundItemVO.getFromItemId());
  607. PurchaseItem purchaseItem = new PurchaseItem();
  608. purchaseItem.setItemId(inboundItemVO.getFromItemId());
  609. purchaseItem.setIntoingQty(inboundItemVO.getIntoingQty().negate());
  610. purchaseItem.setIntoingAmt(inboundItemVO.getIntoingAmt().negate());
  611. //入库状态
  612. String intoStatus = this.setIntoStatus(purchaseItemResponse.getIntoingQty().add(purchaseItem.getIntoingQty()),
  613. purchaseItemResponse.getIntoQty(), purchaseItemResponse.getItemQty());
  614. purchaseItem.setIntoStatus(intoStatus);
  615. int countRow = purchaseItemMapper.updateById(purchaseItem);
  616. //数量超出
  617. if (countRow == 0) {
  618. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
  619. }
  620. }
  621. //endregion
  622. }
  623. }
  624. //endregion
  625. //region 修改入库总单
  626. Inbound inbound = new Inbound();
  627. inbound.setIntoId(inboundVO.getIntoId());
  628. inbound.setIntoingQty(sumQty);
  629. inbound.setIntoingAmt(sumAmt);
  630. //修改
  631. inboundMapper.update(inbound,
  632. new UpdateWrapper<Inbound>().lambda().eq(Inbound::getIntoId, UUID.fromString(inbound.getIntoId()))
  633. );
  634. //endregion
  635. //region 修改采购总单
  636. if (inboundVO.getFromId() != null) {
  637. //根据id查询
  638. PurchaseResponse purchaseResponse = purchaseMapper.selectById(inboundVO.getFromId());
  639. Purchase purchase = new Purchase();
  640. purchase.setPurId(inboundVO.getFromId());
  641. purchase.setIntoingQty(inboundResponse.getIntoingQty().negate().add(sumQty).subtract(delIntoQty));
  642. purchase.setIntoingAmt(inboundResponse.getIntoingAmt().negate().add(sumAmt).subtract(delIntoAmt));
  643. //入库状态
  644. String intoStatus = this.setIntoStatus(purchaseResponse.getIntoingQty().add(purchase.getIntoingQty()),
  645. purchaseResponse.getIntoQty(), purchaseResponse.getSumQuantity());
  646. purchase.setIntoStatus(intoStatus);
  647. //修改
  648. int countRow = purchaseMapper.updateById(purchase);
  649. //数量超出
  650. if (countRow == 0) {
  651. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
  652. }
  653. }
  654. //endregion
  655. }
  656. else{
  657. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.FLG_HANDLE_SETTING_NOT_ENABLED_INTO.getMessage());
  658. }
  659. //endregion
  660. }
  661. //endregion
  662. return ResponseResultUtil.success(inboundVO);
  663. }
  664. /**
  665. * @desc : 采购入库作废
  666. * @date : 2024/3/26 9:24
  667. * @author : 寇珊珊
  668. */
  669. @Transactional(rollbackFor = {Exception.class})
  670. public ResponseResultVO<?> purchaseInboundRepeal(String intoId) {
  671. //region 查询总单 查询明细
  672. //根据id查询 此条入库单的数据还未更改前的数据
  673. InboundResponse inboundResponse = inboundMapper.selectById(intoId);
  674. //根据总单id查询
  675. List<InboundItemResponse> inboundItemResponseList = inboundItemMapper.selectByCond(new InboundItemQuery().setIntoId(inboundResponse.getIntoId()));
  676. //endregion
  677. //region 已入库作废
  678. if (Constant.IntoStatus.YIRUKU.getName().equals(inboundResponse.getIntoStatus())) {
  679. //region 退账
  680. if (inboundResponse.getReceivableId() != null) {
  681. accountService.reversePayable(inboundResponse.getIntoId(), Constant.InventoryDocCode.INTOBOUND.getTableName());
  682. }
  683. //endregion
  684. //region 修改明细
  685. for (InboundItemResponse inboundItemResponse : inboundItemResponseList) {
  686. //region 将库存需要的参数赋值
  687. inboundItemResponse.setInventoryType(Constant.InventoryType.INBOUND.getName());
  688. inboundItemResponse.setInventoryDocCode(Constant.InventoryDocCode.PURCHASE_ORDER.getValue());
  689. inboundItemResponse.setIntoQty(inboundItemResponse.getIntoQty().negate());
  690. inboundItemResponse.setIntoAmt(inboundItemResponse.getIntoAmt().negate());
  691. //endregion
  692. //region 编辑明细 赋值 赋值明细 防止作废的单据查不到明细 故注掉下面代码
  693. // InboundItem inboundItem = new InboundItem();
  694. // inboundItem.setItemId(inboundItemResponse.getItemId());
  695. // inboundItem.setFlgValid(false);
  696. // //修改
  697. // inboundItemMapper.update(inboundItem,
  698. // new UpdateWrapper<InboundItem>().lambda()
  699. // .eq(InboundItem::getItemId, UUID.fromString(inboundItem.getItemId()))
  700. // );
  701. //endregion
  702. //region 销售明细
  703. if (inboundItemResponse.getFromItemId() != null) {
  704. //根据id查询
  705. PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(inboundItemResponse.getFromItemId());
  706. PurchaseItem purchaseItem = new PurchaseItem();
  707. purchaseItem.setItemId(inboundItemResponse.getFromItemId());
  708. purchaseItem.setIntoQty(inboundItemResponse.getIntoQty().negate());
  709. purchaseItem.setIntoAmt(inboundItemResponse.getIntoAmt().negate());
  710. //入库状态
  711. String intoStatus = this.setIntoStatus(purchaseItemResponse.getIntoingQty(),
  712. purchaseItemResponse.getIntoQty().add(purchaseItem.getIntoQty()), purchaseItemResponse.getItemQty());
  713. purchaseItem.setIntoStatus(intoStatus);
  714. int countRow = purchaseItemMapper.updateById(purchaseItem);
  715. //数量超出
  716. if (countRow == 0) {
  717. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
  718. }
  719. }
  720. //endregion
  721. }
  722. //endregion
  723. //region 修改入库总单
  724. Inbound inbound = new Inbound();
  725. inbound.setIntoId(inboundResponse.getIntoId());
  726. inbound.setFlgValid(false);
  727. //修改
  728. inboundMapper.update(inbound,
  729. new UpdateWrapper<Inbound>().lambda().eq(Inbound::getIntoId, UUID.fromString(inbound.getIntoId()))
  730. );
  731. //endregion
  732. //region 修改销售总单
  733. if (inboundResponse.getFromId() != null) {
  734. //根据id查询
  735. PurchaseResponse purchaseResponse = purchaseMapper.selectById(inboundResponse.getFromId());
  736. Purchase purchase = new Purchase();
  737. purchase.setPurId(inboundResponse.getFromId());
  738. purchase.setIntoQty(inboundResponse.getIntoQty().negate());
  739. purchase.setIntoAmt(inboundResponse.getIntoAmt().negate());
  740. //入库状态
  741. String intoStatus = this.setIntoStatus(purchaseResponse.getIntoingQty(),
  742. purchaseResponse.getIntoQty().add(purchase.getIntoQty()), purchaseResponse.getSumQuantity());
  743. purchase.setIntoStatus(intoStatus);
  744. //修改
  745. int countRow = purchaseMapper.updateById(purchase);
  746. //数量超出
  747. if (countRow == 0) {
  748. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
  749. }
  750. }
  751. //endregion
  752. //region 入账
  753. if (inboundResponse.getReceivableId() != null) {
  754. accountService.accPayable(inboundResponse.getIntoId(), Constant.InventoryDocCode.INTOBOUND.getTableName());
  755. }
  756. //endregion
  757. //region 调用库存
  758. Map<String, Object> map = new HashMap<>();
  759. map.put("delIntoDetail", inboundItemResponseList);
  760. inventoryService.operatingInventoryInformation(map);
  761. //endregion
  762. }
  763. //endregion
  764. //region 入库中、待入库作废
  765. if (Constant.IntoStatus.RUKUZHONG.getName().equals(inboundResponse.getIntoStatus()) ||
  766. Constant.IntoStatus.DAIRUKU.getName().equals(inboundResponse.getIntoStatus())) {
  767. //region 修改明细
  768. for (InboundItemResponse inboundItemResponse : inboundItemResponseList) {
  769. //region 编辑明细 赋值
  770. InboundItem inboundItem = new InboundItem();
  771. inboundItem.setItemId(inboundItemResponse.getItemId());
  772. inboundItem.setIntoingQty(BigDecimal.ZERO);
  773. inboundItem.setIntoingAmt(BigDecimal.ZERO);
  774. // inboundItem.setFlgValid(false);
  775. //修改
  776. inboundItemMapper.update(inboundItem,
  777. new UpdateWrapper<InboundItem>().lambda()
  778. .eq(InboundItem::getItemId, UUID.fromString(inboundItem.getItemId()))
  779. );
  780. //endregion
  781. //region 销售明细
  782. if (inboundItemResponse.getFromItemId() != null) {
  783. //根据id查询
  784. PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(inboundItemResponse.getFromItemId());
  785. PurchaseItem purchaseItem = new PurchaseItem();
  786. purchaseItem.setItemId(inboundItemResponse.getFromItemId());
  787. purchaseItem.setIntoingQty(inboundItemResponse.getIntoingQty().negate());
  788. purchaseItem.setIntoingAmt(inboundItemResponse.getIntoingAmt().negate());
  789. //入库状态
  790. String intoStatus = this.setIntoStatus(purchaseItemResponse.getIntoingQty().add(purchaseItem.getIntoingQty()),
  791. purchaseItemResponse.getIntoQty(), purchaseItemResponse.getItemQty());
  792. purchaseItem.setIntoStatus(intoStatus);
  793. int countRow = purchaseItemMapper.updateById(purchaseItem);
  794. //数量超出
  795. if (countRow == 0) {
  796. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
  797. }
  798. }
  799. //endregion
  800. }
  801. //endregion
  802. //region 修改入库总单
  803. Inbound inbound = new Inbound();
  804. inbound.setIntoId(inboundResponse.getIntoId());
  805. inbound.setIntoingQty(BigDecimal.ZERO);
  806. inbound.setIntoAmt(BigDecimal.ZERO);
  807. inbound.setFlgValid(false);
  808. //修改
  809. inboundMapper.update(inbound,
  810. new UpdateWrapper<Inbound>().lambda().eq(Inbound::getIntoId, UUID.fromString(inbound.getIntoId()))
  811. );
  812. //endregion
  813. //region 修改销售总单
  814. if (inboundResponse.getFromId() != null) {
  815. //根据id查询
  816. PurchaseResponse purchaseResponse = purchaseMapper.selectById(inboundResponse.getFromId());
  817. Purchase purchase = new Purchase();
  818. purchase.setPurId(inboundResponse.getFromId());
  819. purchase.setIntoingQty(inboundResponse.getIntoingQty().negate());
  820. purchase.setIntoingAmt(inboundResponse.getIntoingAmt().negate());
  821. //入库状态
  822. String intoStatus = this.setIntoStatus(purchaseResponse.getIntoingQty().add(purchase.getIntoingQty()),
  823. purchaseResponse.getIntoQty(), purchaseResponse.getSumQuantity());
  824. purchase.setIntoStatus(intoStatus);
  825. //修改
  826. int countRow = purchaseMapper.updateById(purchase);
  827. //数量超出
  828. if (countRow == 0) {
  829. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
  830. }
  831. }
  832. //endregion
  833. }
  834. //endregion
  835. return ResponseResultUtil.success();
  836. }
  837. /**
  838. * @desc : 采购入库办理
  839. * @date : 2024/3/7 15:47
  840. * @author : 寇珊珊
  841. */
  842. @Transactional(rollbackFor = {Exception.class})
  843. public ResponseResultVO<?> purchaseHandleInbound(InboundVO inboundVO) {
  844. //region 根据id查询 此条入库单的数据还未更改前的数据
  845. InboundResponse inboundResponse = inboundMapper.selectById(inboundVO.getIntoId());
  846. //endregion
  847. //region 退账
  848. if (inboundResponse.getReceivableId() != null) {
  849. accountService.reversePayable(inboundResponse.getIntoId(), Constant.InventoryDocCode.INTOBOUND.getTableName());
  850. }
  851. //endregion
  852. //region 编辑明细
  853. //校验明细
  854. if (inboundVO.getItemList().size() == 0) {
  855. throw new BaseBusinessException(ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getCode(),
  856. ErrorCodeEnum.INBOUND_ITEM_NOT_EXIST.getMessage());
  857. }
  858. for (InboundItemVO inboundItemVO : inboundVO.getItemList()) {
  859. //入库明细根据id查询
  860. InboundItemResponse inboundItemResponse = inboundItemMapper.selectById(inboundItemVO.getItemId());
  861. //region 校验数量是否超出
  862. if (inboundItemVO.getIntoingQty().compareTo(inboundItemResponse.getIntoingQty()) > 0) {
  863. throw new BaseBusinessException(ErrorCodeEnum.CANNOT_EXCEED_THE_QUANTITY_IN_THE_OUTBOUND_SHIPMENT.getCode(),
  864. ErrorCodeEnum.CANNOT_EXCEED_THE_QUANTITY_IN_THE_OUTBOUND_SHIPMENT.getMessage());
  865. }
  866. //endregion
  867. //region 编辑明细
  868. if (inboundItemVO.getItemId() != null) {
  869. inboundItemVO
  870. .setIntoQty(inboundItemResponse.getIntoQty().add(inboundItemVO.getIntoingQty()))
  871. .setIntoAmt(inboundItemResponse.getIntoAmt().add(inboundItemVO.getIntoingAmt()))
  872. .setIntoingQty(BigDecimal.ZERO)
  873. .setIntoingAmt(BigDecimal.ZERO)
  874. .setCostPrice(inboundItemVO.getPriceInto())
  875. .setCostAmt(inboundItemVO.getIntoQty().multiply(inboundItemVO.getPriceInto()).setScale(2, BigDecimal.ROUND_HALF_UP))
  876. ;
  877. //入库状态
  878. String intoStatus = this.setIntoStatus(inboundItemVO.getIntoingQty(), inboundItemVO.getIntoQty());
  879. inboundItemVO.setIntoStatus(intoStatus);
  880. //实体转换
  881. InboundItem inboundItem = inboundItemConvert.convertToPo(inboundItemVO);
  882. //修改
  883. inboundItemMapper.update(inboundItem,
  884. new UpdateWrapper<InboundItem>().lambda()
  885. .eq(InboundItem::getItemId, UUID.fromString(inboundItem.getItemId()))
  886. );
  887. //region 将库存需要的参数赋值
  888. inboundItemVO.setInventoryType(Constant.InventoryType.INBOUND.getName());
  889. inboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.PURCHASE_ORDER.getValue());
  890. //编辑之前的数
  891. if(inboundItemResponse.getIntoQty().compareTo(BigDecimal.ZERO)>0) {
  892. inboundItemVO.setQtyBeforeUpdate(inboundItemResponse.getIntoQty());
  893. inboundItemVO.setAmtBeforeUpdate(inboundItemResponse.getIntoAmt());
  894. }
  895. inboundItemVO.setAddOrEditFlag(true);
  896. //endregion
  897. }
  898. //endregion
  899. //region 新建明细
  900. else {
  901. inboundItemVO
  902. .setIntoQty(inboundItemVO.getIntoingQty())
  903. .setIntoAmt(inboundItemVO.getIntoingAmt())
  904. .setIntoId(inboundVO.getIntoId())
  905. .setCostPrice(inboundItemVO.getPriceInto())
  906. .setCostAmt(inboundItemVO.getIntoQty().multiply(inboundItemVO.getPriceInto()).setScale(2, BigDecimal.ROUND_HALF_UP))
  907. .setIntoType(Constant.IntoType.SALE.getName())
  908. .setIntoingQty(BigDecimal.ZERO)
  909. .setIntoingAmt(BigDecimal.ZERO)
  910. ;
  911. //入库状态
  912. String intoStatus = this.setIntoStatus(inboundItemVO.getIntoingQty(), inboundItemVO.getIntoQty());
  913. inboundItemVO.setIntoStatus(intoStatus);
  914. //实体转换
  915. InboundItem inboundItem = inboundItemConvert.convertToPo(inboundItemVO);
  916. //新建
  917. inboundItemMapper.insert(inboundItem);
  918. inboundItemVO.setItemId(inboundItem.getItemId());
  919. //region 将库存需要的参数赋值
  920. inboundItemVO.setInventoryType(Constant.InventoryType.INBOUND.getName());
  921. inboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.PURCHASE_ORDER.getValue());
  922. inboundItemVO.setAddOrEditFlag(true);
  923. //endregion
  924. }
  925. //endregion
  926. //region 采购明细
  927. if(inboundItemVO.getFromItemId()!=null){
  928. //根据id查询
  929. PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(inboundItemVO.getFromItemId());
  930. //赋值(这里重写了更新方法,数量在更新方法中有数据库院士数量+本次数量)
  931. PurchaseItem purchaseItem = new PurchaseItem();
  932. purchaseItem.setItemId(inboundItemVO.getFromItemId());
  933. purchaseItem.setIntoingQty(inboundItemVO.getIntoQty().negate());
  934. purchaseItem.setIntoingAmt(inboundItemVO.getIntoAmt().negate());
  935. purchaseItem.setIntoQty(inboundItemVO.getIntoQty());
  936. purchaseItem.setIntoAmt(inboundItemVO.getIntoAmt());
  937. //入库状态
  938. String purItemIntoStatus = this.setIntoStatus(purchaseItemResponse.getIntoingQty().add(purchaseItem.getIntoingQty()),
  939. purchaseItemResponse.getIntoQty().add(purchaseItem.getIntoQty()), purchaseItemResponse.getItemQty());
  940. purchaseItem.setIntoStatus(purItemIntoStatus);
  941. int countRow = purchaseItemMapper.updateById(purchaseItem);
  942. //数量超出
  943. if (countRow == 0) {
  944. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
  945. }
  946. }
  947. //endregion
  948. }
  949. //endregion
  950. //region 删除明细
  951. BigDecimal delIntoingQty = BigDecimal.ZERO;
  952. BigDecimal delIntoingAmt = BigDecimal.ZERO;
  953. BigDecimal delIntoQty = BigDecimal.ZERO;
  954. BigDecimal delIntoAmt = BigDecimal.ZERO;
  955. if (inboundVO.getDeleteItemList() != null && inboundVO.getDeleteItemList().size() > 0) {
  956. delIntoingQty = inboundVO.getDeleteItemList().stream().map(InboundItemVO::getIntoingQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
  957. delIntoingAmt = inboundVO.getDeleteItemList().stream().map(InboundItemVO::getIntoingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
  958. delIntoQty = inboundVO.getDeleteItemList().stream().map(InboundItemVO::getIntoQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
  959. delIntoAmt = inboundVO.getDeleteItemList().stream().map(InboundItemVO::getIntoingAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
  960. for (InboundItemVO inboundItemVO : inboundVO.getDeleteItemList()) {
  961. if (inboundItemVO.getItemId() != null) {
  962. //region 将库存需要的参数赋值
  963. inboundItemVO.setInventoryType(Constant.InventoryType.INBOUND.getName());
  964. inboundItemVO.setInventoryDocCode(Constant.InventoryDocCode.PURCHASE_ORDER.getValue());
  965. //endregion
  966. InboundItem inboundItem = inboundItemConvert.convertToPo(inboundItemVO);
  967. inboundItem.setFlgValid(false);
  968. //修改
  969. inboundItemMapper.update(inboundItem,
  970. new UpdateWrapper<InboundItem>().lambda()
  971. .eq(InboundItem::getItemId, UUID.fromString(inboundItem.getItemId()))
  972. );
  973. }
  974. //region 采购
  975. if (inboundItemVO.getFromItemId() != null) {
  976. //region 采购订单明细
  977. //赋值(这里重写了更新方法,数量在更新方法中有数据库院士数量+本次数量)
  978. PurchaseItem purchaseItem = new PurchaseItem();
  979. purchaseItem.setItemId(inboundItemVO.getFromItemId());
  980. purchaseItem.setIntoingQty(inboundItemVO.getIntoingQty().negate());
  981. purchaseItem.setIntoingAmt(inboundItemVO.getIntoingAmt().negate());
  982. purchaseItem.setIntoQty(inboundItemVO.getIntoQty().negate());
  983. purchaseItem.setIntoAmt(inboundItemVO.getIntoAmt().negate());
  984. //根据id查询
  985. PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(inboundItemVO.getFromItemId());
  986. //入库状态
  987. String intoStatus = this.setIntoStatus(purchaseItemResponse.getIntoingQty().add(purchaseItem.getIntoingQty()),
  988. purchaseItemResponse.getIntoQty().add(purchaseItem.getIntoQty()), purchaseItemResponse.getItemQty());
  989. purchaseItem.setIntoStatus(intoStatus);
  990. int countRow = purchaseItemMapper.updateById(purchaseItem);
  991. //数量超出
  992. if (countRow == 0) {
  993. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
  994. }
  995. //endregion
  996. }
  997. //endregion
  998. }
  999. }
  1000. //endregion
  1001. //region 编辑总单
  1002. BigDecimal sumIntoQty = inboundVO.getItemList().stream().map(InboundItemVO::getIntoQty).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(6, BigDecimal.ROUND_HALF_UP);
  1003. BigDecimal sumIntoAmt = inboundVO.getItemList().stream().map(InboundItemVO::getIntoAmt).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, BigDecimal.ROUND_HALF_UP);
  1004. inboundVO.setIntoQty(sumIntoQty);
  1005. inboundVO.setIntoAmt(sumIntoAmt);
  1006. inboundVO.setIntoingQty(BigDecimal.ZERO);
  1007. inboundVO.setIntoingAmt(BigDecimal.ZERO);
  1008. //入库状态
  1009. String intoStatus = this.setIntoStatus(inboundVO.getIntoingQty(), inboundVO.getIntoQty());
  1010. inboundVO.setIntoStatus(intoStatus);
  1011. //实体转换
  1012. Inbound inbound = inboundConvert.convertToPo(inboundVO);
  1013. //修改
  1014. inboundMapper.update(inbound,
  1015. new UpdateWrapper<Inbound>().lambda().eq(Inbound::getIntoId, UUID.fromString(inbound.getIntoId()))
  1016. );
  1017. //endregion
  1018. //region 修改采购订单
  1019. if (inboundVO.getFromId() != null) {
  1020. //赋值(这里重写了更新方法,数量在更新方法中有数据库院士数量+本次数量)
  1021. Purchase purchase = new Purchase();
  1022. purchase.setPurId(inboundVO.getFromId());
  1023. purchase.setIntoQty(sumIntoQty.subtract(delIntoQty));
  1024. purchase.setIntoAmt(sumIntoAmt.subtract(delIntoAmt));
  1025. purchase.setIntoingQty((inboundResponse.getIntoingQty().add(delIntoingQty)).negate());
  1026. purchase.setIntoingAmt((inboundResponse.getIntoingAmt().add(delIntoingAmt)).negate());
  1027. //根据id查询
  1028. PurchaseResponse purchaseResponse = purchaseMapper.selectById(inboundVO.getFromId());
  1029. //入库状态
  1030. String purIntoStatus = this.setIntoStatus(purchaseResponse.getIntoingQty().add(purchase.getIntoingQty()),
  1031. purchaseResponse.getIntoQty().add(purchase.getIntoQty()), purchaseResponse.getSumQuantity());
  1032. purchase.setIntoStatus(purIntoStatus);
  1033. //修改
  1034. int countRow = purchaseMapper.updateById(purchase);
  1035. //数量超出
  1036. if (countRow == 0) {
  1037. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
  1038. }
  1039. }
  1040. //endregion
  1041. //region 入账
  1042. accountService.accPayable(inboundVO.getIntoId(), Constant.InventoryDocCode.INTOBOUND.getTableName());
  1043. //endregion
  1044. //region 调用库存
  1045. Map<String, Object> map = new HashMap<>();
  1046. map.put("intoDetail", inboundVO.getItemList());
  1047. map.put("delIntoDetail", inboundVO.getDeleteItemList());
  1048. inventoryService.operatingInventoryInformation(map);
  1049. //endregion
  1050. return ResponseResultUtil.success(inboundVO);
  1051. }
  1052. /**
  1053. * @desc : 采购入库撤销
  1054. * @date : 2024/3/7 17:06
  1055. * @author : 寇珊珊
  1056. */
  1057. @Transactional(rollbackFor = {Exception.class})
  1058. public ResponseResultVO<?> purchaseInboundCancel(InboundVO inboundVO) {
  1059. //region 查询入库总单数据信息
  1060. InboundResponse inboundResponse = inboundMapper.selectById(inboundVO.getIntoId());
  1061. //endregion
  1062. //region 退账
  1063. if (inboundResponse.getReceivableId() != null) {
  1064. accountService.reversePayable(inboundVO.getIntoId(), Constant.InventoryDocCode.INTOBOUND.getTableName());
  1065. }
  1066. //endregion
  1067. //region 修改订单数据信息
  1068. if (inboundResponse.getFromId() != null) {
  1069. //根据id查询
  1070. PurchaseResponse purchaseResponse = purchaseMapper.selectById(inboundVO.getFromId());
  1071. //赋值 (这里重写了更新方法,数量在更新方法中有数据库院士数量+本次数量)
  1072. Purchase purchase = new Purchase();
  1073. purchase.setPurId(inboundResponse.getFromId());
  1074. purchase.setIntoQty(inboundResponse.getIntoQty().negate());
  1075. purchase.setIntoAmt(inboundResponse.getIntoAmt().negate());
  1076. purchase.setIntoingQty(inboundResponse.getIntoQty());
  1077. purchase.setIntoingAmt(inboundResponse.getIntoAmt());
  1078. //入库状态
  1079. String intoStatus = this.setIntoStatus(purchaseResponse.getIntoingQty().add(purchase.getIntoingQty()),
  1080. purchaseResponse.getIntoQty().add(purchase.getIntoQty()), purchaseResponse.getSumQuantity());
  1081. purchase.setIntoStatus(intoStatus);
  1082. int countRow = purchaseMapper.updateById(purchase);
  1083. //数量超出
  1084. if (countRow == 0) {
  1085. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
  1086. }
  1087. }
  1088. //endregion
  1089. //region 修改总单数据信息
  1090. Inbound inbound = new Inbound();
  1091. inbound.setIntoId(inboundVO.getIntoId());
  1092. inbound.setIntoDate(null);
  1093. inbound.setIntoStatus(Constant.IntoStatus.RUKUZHONG.getName());
  1094. inbound.setIntoingQty(inboundResponse.getIntoingQty().add(inboundResponse.getIntoQty()));
  1095. inbound.setIntoingAmt(inboundResponse.getIntoingAmt().add(inboundResponse.getIntoAmt()));
  1096. inbound.setIntoQty(BigDecimal.ZERO);
  1097. inbound.setIntoAmt(BigDecimal.ZERO);
  1098. //修改
  1099. inboundMapper.update(inbound,
  1100. new UpdateWrapper<Inbound>().lambda()
  1101. .eq(Inbound::getIntoId, UUID.fromString(inbound.getIntoId()))
  1102. );
  1103. //endregion
  1104. //region 明细数据
  1105. //根据总单id查明细
  1106. List<InboundItemResponse> inboundItemResponseList = inboundItemMapper.selectByCond(new InboundItemQuery().setIntoId(inbound.getIntoId()));
  1107. for (InboundItemResponse inboundItemResponse : inboundItemResponseList) {
  1108. //region 修改采购明细数据信息
  1109. if (inboundItemResponse.getFromItemId() != null) {
  1110. //根据id查询
  1111. PurchaseItemResponse purchaseItemResponse = purchaseItemMapper.selectById(inboundItemResponse.getFromItemId());
  1112. //赋值 (这里重写了更新方法,数量在更新方法中有数据库院士数量+本次数量)
  1113. PurchaseItem purchaseItem = new PurchaseItem();
  1114. purchaseItem.setItemId(inboundItemResponse.getFromItemId());
  1115. purchaseItem.setIntoQty(inboundItemResponse.getIntoQty().negate());
  1116. purchaseItem.setIntoAmt(inboundItemResponse.getIntoAmt().negate());
  1117. purchaseItem.setIntoingQty(inboundItemResponse.getIntoQty());
  1118. purchaseItem.setIntoingAmt(inboundItemResponse.getIntoAmt());
  1119. //入库状态
  1120. String intoStatus = this.setIntoStatus(purchaseItemResponse.getIntoingQty().add(purchaseItem.getIntoingQty()),
  1121. purchaseItemResponse.getIntoQty().add(purchaseItem.getIntoQty()), purchaseItemResponse.getItemQty());
  1122. purchaseItem.setIntoStatus(intoStatus);
  1123. //修改
  1124. int countRow = purchaseItemMapper.updateById(purchaseItem);
  1125. //数量超出
  1126. if (countRow == 0) {
  1127. throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.INVENTORY_QUANTITY_EXCEEDED.getMessage());
  1128. }
  1129. }
  1130. //endregion
  1131. //region修改入库明细信息
  1132. InboundItem inboundItem = new InboundItem();
  1133. //region 将库存需要的参数赋值
  1134. inboundItemResponse.setInventoryType(Constant.InventoryType.INBOUND.getName());
  1135. inboundItemResponse.setInventoryDocCode(Constant.InventoryDocCode.PURCHASE_ORDER.getValue());
  1136. inboundItemResponse.setIntoQty(inboundItemResponse.getIntoQty().negate());
  1137. inboundItemResponse.setIntoAmt(inboundItemResponse.getIntoAmt().negate());
  1138. //endregion
  1139. inboundItem
  1140. .setIntoId(inbound.getIntoId())
  1141. .setIntoStatus(Constant.IntoStatus.RUKUZHONG.getName())
  1142. .setIntoingQty(inboundItemResponse.getIntoingQty().add(inboundItemResponse.getIntoQty()))
  1143. .setIntoingAmt(inboundItemResponse.getIntoingAmt().add(inboundItemResponse.getIntoAmt()))
  1144. .setIntoQty(BigDecimal.ZERO)
  1145. .setIntoAmt(BigDecimal.ZERO)
  1146. .setCostPrice(BigDecimal.ZERO)
  1147. .setCostAmt(BigDecimal.ZERO)
  1148. .setItemId(inboundItemResponse.getItemId());
  1149. //入库状态
  1150. String intoStatus = this.setIntoStatus(inboundItem.getIntoingQty(), inboundItem.getIntoQty());
  1151. inboundItem.setIntoStatus(intoStatus);
  1152. //修改
  1153. inboundItemMapper.update(inboundItem,
  1154. new UpdateWrapper<InboundItem>().lambda()
  1155. .eq(InboundItem::getItemId, UUID.fromString(inboundItem.getItemId()))
  1156. );
  1157. //endregion
  1158. }
  1159. //endregion
  1160. //region 调用库存
  1161. Map<String, Object> map = new HashMap<>();
  1162. map.put("delIntoDetail", inboundItemResponseList);
  1163. inventoryService.operatingInventoryInformation(map);
  1164. //endregion
  1165. return ResponseResultUtil.success();
  1166. }
  1167. /**
  1168. * @desc : 入库状态通用(目前本页面)
  1169. * @date : 2024/3/9 8:59
  1170. * @author : 寇珊珊
  1171. */
  1172. @Transactional(rollbackFor = {Exception.class})
  1173. public String setIntoStatus(BigDecimal intoingQty, BigDecimal intoQty) {
  1174. //入库状态
  1175. String intoStatus = null;
  1176. //已入库数量>0 入库中数量>0
  1177. if (intoQty.compareTo(BigDecimal.ZERO) >= 0 && intoingQty.compareTo(BigDecimal.ZERO) > 0) {
  1178. //入库中
  1179. intoStatus = Constant.IntoStatus.RUKUZHONG.getName();
  1180. }
  1181. //已入库数量=0 入库中数量=0
  1182. else if (intoQty.compareTo(BigDecimal.ZERO) == 0 && intoingQty.compareTo(BigDecimal.ZERO) == 0) {
  1183. //待入库
  1184. intoStatus = Constant.IntoStatus.DAIRUKU.getName();
  1185. }
  1186. //已入库数量>0 入库中数量=0
  1187. else if (intoQty.compareTo(BigDecimal.ZERO) > 0 && intoingQty.compareTo(BigDecimal.ZERO) == 0) {
  1188. //已入库
  1189. intoStatus = Constant.IntoStatus.YIRUKU.getName();
  1190. }
  1191. return intoStatus;
  1192. }
  1193. /**
  1194. * @desc : 上游单据入库状态通用(目前本页面)
  1195. * @date : 2024/4/1 17:14
  1196. * @author : 寇珊珊
  1197. */
  1198. @Transactional(rollbackFor = {Exception.class})
  1199. public String setIntoStatus(BigDecimal intoingQty, BigDecimal intoQty, BigDecimal sumQty) {
  1200. //入库状态
  1201. String intoStatus = null;
  1202. //入库中+已入库 小于 总数 并且 入库中数量 等于订单总数量
  1203. if (intoingQty.compareTo(sumQty) <= 0 && intoingQty.add(intoQty).compareTo(sumQty) <= 0) {
  1204. //入库中
  1205. intoStatus = Constant.IntoStatus.RUKUZHONG.getName();
  1206. }
  1207. //已入库数量=0 入库中数量=0
  1208. else if (intoQty.compareTo(BigDecimal.ZERO) == 0 && intoingQty.compareTo(BigDecimal.ZERO) == 0) {
  1209. //待入库
  1210. intoStatus = Constant.IntoStatus.DAIRUKU.getName();
  1211. }
  1212. //入库中+已入库 等于 总数 并且 入库中数量 小于等于订单总数量
  1213. else if (intoingQty.compareTo(sumQty) < 0 && intoingQty.add(intoQty).compareTo(sumQty) == 0) {
  1214. //已入库
  1215. intoStatus = Constant.IntoStatus.YIRUKU.getName();
  1216. }
  1217. return intoStatus;
  1218. }
  1219. }