123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309 |
- package com.tld.service.impl;
- import com.tld.mapper.AskGoodsMapper;
- import com.tld.mapper.DeliveryMapper;
- import com.tld.mapper.DictionaryMapper;
- import com.tld.mapper.WarehousingMapper;
- 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 javax.servlet.http.HttpServletRequest;
- 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;
- //删除日志表
- @Autowired
- private DictionaryMapper dictionaryMapper;
- //入库
- @Autowired
- private WarehousingMapper warehousingMapper;
- @Override
- public Map<String, Object> getDelivery(Delivery delivery) {
- Map<String, Object> map = new HashMap<>();
- try{
- List<Delivery> list = deliveryMapper.getDelivery(delivery);
- Map<String, Object> mapVal = new HashMap<>();
- for(Delivery delivery1 : list){
- int sumScan = deliveryMapper.getScanSum(delivery1);
- mapVal.put(delivery1.getDeliveryId() + delivery1.getMaterialId(), sumScan);
- }
- map.put("data", list);
- map.put("scan", mapVal);
- 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<>();
- for(Inventory inventory : deliveryMapper.getInventory(storageLocationCode, delivery)){
- int occupy = deliveryMapper.getVitrual(inventory);
- if(occupy == 0){
- if(Double.doubleToLongBits(Double.parseDouble(inventory.getAmount())) == Double.doubleToLongBits(Double.parseDouble(delivery.getOutNum()))){
- for(Inventory inventorys : deliveryMapper.getInventory(storageLocationCode, delivery)){
- if (inventorys.getStorageLocationCode().equals(inventory.getStorageLocationCode())){
- list.add(inventorys);
- map.put("data", list);
- map.put("msg", "200");
- }
- }
- return map;
- }
- }
- }
- map.put("data", list);
- } else if(materialClass.getPartType().equals("半成品")){
- List<Inventory> list = new LinkedList<>();
- for(Inventory inventory : deliveryMapper.getInventory(delivery.getStorageLocationCode(), delivery)){
- int productNum = deliveryMapper.getProductNumVitrual(inventory);
- if(Integer.parseInt(inventory.getAmount()) < 0){
- map.put("msg", "500");
- map.put("errMsg", "库存不足");
- return map;
- } else {
- list.add(inventory);
- map.put("data", list);
- map.put("msg", "200");
- return map;
- }
- }
- } else {
- List<Inventory> list = new LinkedList<>();
- AskGoods askGoods = new AskGoods()
- .setCompanyNumber(delivery.getCompanyNumber())
- .setMaterialId(delivery.getMaterialId())
- .setWbs(delivery.getWbs());
- for(Inventory inventory : deliveryMapper.getMaterialCk(askGoods)){
- AskGoods askGoods1 = askGoodsMapper.getAsk(inventory);
- if(askGoods1 != null){
- if( Double.doubleToLongBits(Double.parseDouble(askGoods1.getNum())) != Double.doubleToLongBits(Double.parseDouble(inventory.getAmount())) ){
- list.add(inventory);
- map.put("data", list);
- map.put("msg", "200");
- return map;
- }
- } else {
- list.add(inventory);
- map.put("data", list);
- map.put("msg", "200");
- return map;
- }
- }
- }
- 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)){
- askGoods.setStorageCode(removalCode);
- askGoods.setCompanyNumber(askGoods.getAccountSleeve());
- Inventory inventory = deliveryMapper.getInventoryHalf(askGoods);
- //如果出库库存等于虚拟表库存则删除此库存
- if(Double.doubleToLongBits(Double.parseDouble(askGoods.getNum())) == Double.doubleToLongBits(Double.parseDouble(inventory.getAmount()))){
- askGoodsMapper.deleteInventory(inventory);
- } else {
- inventory.setAmount(askGoods.getNum());
- askGoodsMapper.updateInventory(inventory);
- }
- //判断物料是否录入
- MaterialClass materialClass = warehousingMapper.getMateriaIsExist(askGoods.getWllbCode());
- //查询销售单部分信息
- Delivery delivery = new Delivery().setDeliveryId(deliveryId).setMaterialId(materialClass.getTldId());
- List<Delivery> list = deliveryMapper.getDelivery(delivery);
- deliveryMapper.updateDelivery(materialClass.getTldId(), askGoods.getNum(), deliveryId); //修改销售单出库数量
- if(materialClass.getPartType().equals("产成品")){
- //产成品销售流水
- 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); //流水录入
- } else if(materialClass.getPartType().equals("原材料")){
- askGoods.setType("销售出库");
- askGoodsMapper.addRemoval(askGoods);//插入出库流水
- } else if(materialClass.getPartType().equals("半成品")){
- //半成品销售流水
- 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.addRemovalHalfProduct(delivery1); //流水录入
- }
- askGoodsMapper.deleteVirtual(askGoods.getId());//删除已出虚拟表库存
- ReturRemoval returRemoval = new ReturRemoval()
- .setMaterialId(materialClass.getTldId())
- .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 {
- //判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有
- if (lock.isLocked() && lock.isHeldByCurrentThread()) {
- //释放锁
- 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;
- }
- @Override
- public Map<String, Object> addVitrual(AskGoods askGoods) {
- Map<String, Object> map = new HashMap<>();
- try{
- int mapValScan = deliveryMapper.getDeliveryScan(askGoods);
- if(mapValScan != 0){
- map.put("msg", "500");
- map.put("errMsg", "已扫描!");
- return map;
- }
- Map<String, Object> mapVal = deliveryMapper.getScanIsNot(askGoods);
- if(Double.parseDouble(mapVal.get("amount").toString()) - Double.parseDouble(mapVal.get("vitrualNum").toString()) == 0){
- map.put("msg", "500");
- map.put("errMsg", "已全部出库");
- return map;
- }
- askGoodsMapper.addAskGoodsVitrual(askGoods);
- map.put("msg", "200");
- }catch (Exception e){
- map.put("msg", "500");
- map.put("errMsg", "服务器请求异常,请稍后再试");
- e.printStackTrace();
- }
- return map;
- }
- @Override
- public Map<String, Object> delDelivery(String id, HttpServletRequest request) {
- Map<String, Object> map = new HashMap<>();
- try {
- String userId = request.getHeader("userId");
- Map<String, Object> mapVal = deliveryMapper.getDeliverys(id);
- if(Double.parseDouble(mapVal.get("out_num").toString()) > 0){
- map.put("msg", "500");
- map.put("errMsg", "此单据已出库!");
- return map;
- }
- LogData logData = new LogData()
- .setUserId(userId)
- .setData(mapVal.toString())
- .setType("0")
- .setDocumentType("交货单");
- dictionaryMapper.addLogdata(logData);
- deliveryMapper.delDelivery(id);
- map.put("msg", "200");
- } catch (Exception e) {
- e.printStackTrace();
- map.put("msg", "500");
- map.put("errMsg", "服务器请求异常,请稍后再试");
- }
- return map;
- }
- /**
- * 出库单生成
- * @return
- */
- public String codeGenerateCk(){
- StringBuilder stringBuilder = new StringBuilder("XSCK");
- 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();
- }
- }
|