123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- package com.tld.service.impl;
- import com.tld.mapper.AskGoodsMapper;
- import com.tld.mapper.DeliveryMapper;
- import com.tld.model.*;
- import com.tld.service.DeliveryService;
- import org.redisson.api.RLock;
- import org.redisson.api.RedissonClient;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.text.SimpleDateFormat;
- import java.util.*;
- @Service
- public class DeliveryServiceImpl implements DeliveryService {
- @Autowired
- private DeliveryMapper deliveryMapper;
- @Autowired
- private AskGoodsMapper askGoodsMapper;
- //redis锁
- @Autowired
- private RedissonClient redissonClient;
- @Override
- public Map<String, Object> getDelivery(Delivery delivery) {
- Map<String, Object> map = new HashMap<>();
- try{
- List<Delivery> list = deliveryMapper.getDelivery(delivery);
- map.put("data", list);
- map.put("msg", "200");
- }catch (Exception e){
- map.put("msg", "500");
- map.put("errMsg", "服务器请求异常,请稍后再试");
- e.printStackTrace();
- }
- return map;
- }
- @Override
- public Map<String, Object> getRecommend(Delivery delivery) {
- Map<String, Object> map = new HashMap<>();
- try{
- MaterialClass materialClass = deliveryMapper.getMaterialClass(delivery.getMaterialId());
- if(materialClass == null){
- map.put("msg", "500");
- map.put("errMsg", "物料信息未录入,请联系管理员");
- return map;
- }
- if(materialClass.getPartType().equals("产成品")){
- //查询所有产成品库位
- String storageLocationCode = deliveryMapper.getStorageLocationCodeList();
- List<Inventory> list = new LinkedList<>();
- Map<String, Object> occupyMap = new HashMap<>();
- for(Inventory inventory : deliveryMapper.getInventory(storageLocationCode, delivery)){
- int occupy = deliveryMapper.getVitrual(inventory);
- if(Integer.parseInt(inventory.getAmount()) == occupy){
- list.add(inventory);
- int num = Integer.parseInt(inventory.getAmount()) - occupy;
- occupyMap.put(inventory.getStorageLocationCode(), num);
- }
- }
- map.put("data", list);
- map.put("occupyMap", occupyMap);
- } else if(materialClass.getPartType().equals("半成品")){
- String storageLocationCode = "000000,";
- List<Inventory> list = new LinkedList<>();
- Map<String, Object> occupyMap = new HashMap<>();
- for(Inventory inventory : deliveryMapper.getInventory(storageLocationCode, delivery)){
- int occupy = deliveryMapper.getVitrual(inventory);
- if(Integer.parseInt(inventory.getAmount()) > occupy){
- list.add(inventory);
- int num = Integer.parseInt(inventory.getAmount()) - occupy;
- occupyMap.put(inventory.getStorageLocationCode(), num);
- }
- }
- map.put("data", list);
- map.put("occupyMap", occupyMap);
- } else {
- }
- map.put("msg", "200");
- }catch (Exception e){
- map.put("msg", "500");
- map.put("errMsg", "服务器请求异常,请稍后再试");
- e.printStackTrace();
- }
- return map;
- }
- @Override
- public Map<String, Object> OutOfLibrary(String uniqueCode, String type, String deliveryId) {
- Map<String, Object> map = new HashMap<>();
- //redis并发锁
- RLock lock = redissonClient.getLock(uniqueCode);
- lock.lock();
- try{
- String removalCode = codeGenerateCk();
- for(AskGoods askGoods : askGoodsMapper.getAskGoodsVitrual(uniqueCode, type)){
- Inventory inventory = deliveryMapper.getInventoryHalf(askGoods);
- //如果出库库存等于虚拟表库存则删除此库存
- if(Integer.parseInt(askGoods.getNum()) == Integer.parseInt(inventory.getAmount())){
- askGoodsMapper.deleteInventory(inventory);
- } else {
- inventory.setAmount(askGoods.getNum());
- askGoodsMapper.updateInventory(inventory);
- }
- String materialId = askGoodsMapper.getMaterialId(askGoods.getWllbCode(), askGoods.getAccountSleeve());//查询物料id
- deliveryMapper.updateDelivery(materialId, askGoods.getNum(), deliveryId); //修改销售单出库数量
- //查询销售单部分信息
- Delivery delivery = new Delivery().setDeliveryId(deliveryId).setMaterialId(materialId);
- List<Delivery> list = deliveryMapper.getDelivery(delivery);
- //产成品销售流水
- Delivery delivery1 = new Delivery()
- .setMaterialCode(askGoods.getWllbCode()) //物料code
- .setOutNum(askGoods.getNum()) //出库数量
- .setUserId(askGoods.getUserId()) //用户id
- .setDeliveryId(deliveryId) //销售单id
- .setCompanyNumber(list.get(0).getCompanyNumber()) //公司编号
- .setCustomerCode(list.get(0).getCustomerCode())//客户编号
- .setStorageCode(removalCode) //出库流水
- .setWbs(list.get(0).getWbs());// wbs
- deliveryMapper.addRemovalHalf(delivery1); //流水录入
- askGoodsMapper.deleteVirtual(askGoods.getId());//删除已出虚拟表库存
- ReturRemoval returRemoval = new ReturRemoval()
- .setMaterialId(materialId)
- .setDocumentId(deliveryId)
- .setWbs(list.get(0).getWbs())
- .setNum(askGoods.getNum())
- .setEntryNumber(list.get(0).getEntryNumber())
- .setDocumentPointsId(list.get(0).getId())
- .setStorageLocationCode(askGoods.getStorageLocationCode());
- askGoodsMapper.addReturnGsRemoval(returRemoval);//新增返回gs数据子表信息
- }
- //新增销售单出库父表信息
- Delivery delivery = deliveryMapper.getDeliveryF(deliveryId);
- ReturRemoval returRemoval1 = new ReturRemoval()
- .setDocumentId(delivery.getDeliveryId())
- .setRemovalCode(removalCode)
- .setSourceType(delivery.getSourceType())
- .setMoveType(delivery.getMoveType())
- .setDeliveryType(delivery.getDeliveryType());
- askGoodsMapper.addReturnGsRemovalF(returRemoval1);//新增返回gs数据父表信息
- map.put("data", removalCode);
- map.put("msg", "200");
- }catch (Exception e){
- map.put("msg", "500");
- map.put("errMsg", "服务器请求异常,请稍后再试");
- e.printStackTrace();
- } finally {
- //释放锁
- lock.unlock();
- }
- return map;
- }
- @Override
- public Map<String, Object> getAttribute(Delivery delivery) {
- Map<String, Object> map = new HashMap<>();
- try{
- //查询所有产成品库位
- String storageLocationCode = deliveryMapper.getStorageLocationCodeList();
- List<Inventory> list = deliveryMapper.getAttribute(storageLocationCode, delivery);
- map.put("data", list);
- map.put("msg", "200");
- }catch (Exception e){
- map.put("msg", "500");
- map.put("errMsg", "服务器请求异常,请稍后再试");
- e.printStackTrace();
- }
- return map;
- }
- /**
- * 出库单生成
- * @return
- */
- public String codeGenerateCk(){
- StringBuilder stringBuilder = new StringBuilder("CK");
- Date date = new Date();
- SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
- stringBuilder.append(sdf.format(date));
- int count = askGoodsMapper.getReturnRemovalCount();
- for(int i = 0; i < 4 - (count + "").length(); i++){
- stringBuilder.append("0");
- }
- return (stringBuilder.append(count + 1)).toString();
- }
- }
|