123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454 |
- package com.tld.service.impl;
- import com.alibaba.fastjson.JSON;
- import com.tld.mapper.DictionaryMapper;
- import com.tld.mapper.InviteMapper;
- import com.tld.model.*;
- import com.tld.service.InviteService;
- import org.redisson.api.RLock;
- import org.redisson.api.RedissonClient;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import javax.servlet.http.HttpServletRequest;
- import java.text.SimpleDateFormat;
- import java.util.*;
- @Service
- public class InviteServiceImpl implements InviteService {
- @Autowired
- private InviteMapper inviteMapper;
- //redis锁
- @Autowired
- private RedissonClient redissonClient;
- @Autowired
- private DictionaryMapper dictionaryMapper;
- @Override
- public Map<String, Object> getAskGoodsfList(AskGoods askGoods) {
- Map<String, Object> map = new HashMap<>();
- try{
- List<AskGoods> list = inviteMapper.getAskGoodsfList(askGoods);
- map.put("data", list);
- map.put("msg", "200");
- }catch (Exception e){
- e.printStackTrace();
- map.put("msg", "500");
- map.put("errMsg", "失败");
- }
- return map;
- }
- @Override
- public Map<String, Object> getAskGoodsMaterial(AskGoods askGoods) {
- Map<String, Object> map = new HashMap<>();
- try{
- List<AskGoods> list = inviteMapper.getAskGoodsMaterial(askGoods);
- List<String> scanNum = new LinkedList<>();
- for(AskGoods askGoods1 : list){
- askGoods1.setUniqueCode(askGoods.getUniqueCode());
- askGoods1.setUniqueCode(askGoods.getUniqueCode());
- scanNum.add(inviteMapper.getScanNum(askGoods1));//扫描总数
- }
- map.put("scanNum", scanNum);
- map.put("data", list);
- map.put("msg", "200");
- }catch (Exception e){
- e.printStackTrace();
- map.put("msg", "500");
- map.put("errMsg", "失败");
- }
- return map;
- }
- @Override
- public Map<String, Object> getMaterialCk(AskGoods askGoods) {
- Map<String, Object> map = new HashMap<>();
- try{
- List<Inventory> list = new LinkedList<>();
- for(Inventory inventory : inviteMapper.getMaterialCk(askGoods)){
- AskGoods askGoods1 = inviteMapper.getAsk(inventory);
- if(askGoods1 != null){
- if( Double.doubleToLongBits(Double.parseDouble(askGoods1.getNum())) != Double.doubleToLongBits(Double.parseDouble(inventory.getAmount())) ){
- list.add(inventory);
- }
- } else {
- list.add(inventory);
- }
- }
- map.put("data", list);
- map.put("msg", "200");
- }catch (Exception e){
- e.printStackTrace();
- map.put("msg", "500");
- map.put("errMsg", "失败");
- }
- return map;
- }
- @Override
- @Transactional(rollbackFor = Exception.class)
- public Map<String, Object> addAskGoodsVitrual(AskGoods askGoods) {
- Map<String, Object> map = new HashMap<>();
- try{
- Map<String, Object> mapVal = inviteMapper.getScanIsNot(askGoods);
- if((Double.parseDouble(mapVal.get("inventoryNum").toString()) - Double.parseDouble(mapVal.get("virtualNum").toString())) == 0){
- map.put("msg", "500");
- map.put("errMsg", "已全部出库");
- return map;
- }
- Inventory inventory = inviteMapper.getInventory(askGoods); //库存数量
- AskGoods askGoods1 = inviteMapper.getAsknInfo(askGoods); //要货单数量
- int alreadyNum = inviteMapper.getAskInfoNumVitrual(askGoods);//已扫描总数
- int inventoryAlready = inviteMapper.getInventoryAlready(askGoods);//库存已扫描数量
- int inventorySurplus = (Integer.parseInt(inventory.getAmount()) - Integer.parseInt(inventory.getAmountLock())) - inventoryAlready; //库存剩余数量
- Double surplusNum = Double.parseDouble(askGoods1.getNum()) - Double.parseDouble(askGoods1.getOutNum()) - alreadyNum; //剩余要扫描数量
- if(surplusNum >= inventorySurplus){
- askGoods.setNum(String.valueOf(inventorySurplus));
- } else {
- askGoods.setNum(String.valueOf(surplusNum));
- }
- askGoods.setStorageLocationCode(inventory.getStorageLocationCode());//库存编号
- inviteMapper.addAskGoodsVitrual(askGoods);
- map.put("msg", "200");
- }catch (Exception e){
- e.printStackTrace();
- map.put("msg", "500");
- map.put("errMsg", "失败");
- }
- return map;
- }
- @Override
- @Transactional(rollbackFor = Exception.class)
- public Map<String, Object> OutOfLibrary(String uniqueCode, String type, String askGoodsId) {
- Map<String, Object> map = new HashMap<>();
- //redis并发锁
- RLock lock = redissonClient.getLock(uniqueCode);
- lock.lock();
- try{
- String removalCode = codeGenerateCk();
- List<AskGoods> list = inviteMapper.getVirtualUniqueCode(uniqueCode, type, askGoodsId);
- for(AskGoods askGoods : list){
- askGoods.setStorageCode(removalCode);
- askGoods.setCompanyNumber(askGoods.getAccountSleeve());
- Inventory inventory = inviteMapper.getInventory(askGoods);
- if(inventory == null){
- throw new Exception("库存不存在");
- }
- //如果出库库存等于虚拟表库存则删除此库存
- if( Double.doubleToLongBits(Double.parseDouble(askGoods.getNum())) == Double.doubleToLongBits(Double.parseDouble(inventory.getAmount())) ){
- inviteMapper.deleteInventory(inventory);
- } else {
- inventory.setAmount(askGoods.getNum());
- inviteMapper.updateInventory(inventory);
- }
- String materialId = inviteMapper.getMaterialId(askGoods.getWllbCode());//查询物料id
- AskGoods askGoods1 = inviteMapper.getAskDetailed(askGoodsId, materialId);//查询要料申请单内容
- ReturRemoval returRemoval = new ReturRemoval()
- .setMaterialId(materialId)
- .setDocumentId(askGoodsId)
- .setWbs(askGoods1.getWbs())
- .setNum(askGoods.getNum())
- .setEntryNumber(askGoods1.getEntryNumber())
- .setDocumentPointsId(askGoods1.getId())
- .setStorageLocationCode(askGoods.getStorageLocationCode());
- inviteMapper.addRemoval(askGoods);//插入出库流水
- inviteMapper.deleteVirtual(askGoods.getId());//删除已出虚拟表库存
- inviteMapper.addReturnGsRemoval(returRemoval);//新增返回gs数据子表信息
- inviteMapper.updateOutNum(askGoods.getNum(), askGoodsId, materialId);//修改出库数量
- }
- //查询要货单父级信息
- AskGoods askGoods3 = inviteMapper.getAskDetailedF(askGoodsId);
- ReturRemoval returRemoval1 = new ReturRemoval()
- .setDocumentId(askGoods3.getAskGoodsId())
- .setRemovalCode(removalCode)
- .setSourceType(askGoods3.getSourceType())
- .setMoveType(askGoods3.getMoveType());
- inviteMapper.addReturnGsRemovalF(returRemoval1);//新增返回gs数据父表信息
- map.put("data", askGoods3.getAskGoodsId());
- map.put("msg", "200");
- }catch (Exception e){
- e.printStackTrace();
- map.put("msg", "500");
- map.put("errMsg", "失败");
- } finally {
- //判断要解锁的key是否已被锁定;判断要解锁的key是否被当前线程持有
- if (lock.isLocked() && lock.isHeldByCurrentThread()) {
- //释放锁
- lock.unlock();
- }
- }
- return map;
- }
- /**
- * 半成品/产成品入库通知
- * @return
- */
- @Override
- public Map<String, Object> prodStockInNotice(List<Map<String, Object>> mapList) {
- Map<String, Object> map = new HashMap<>();
- try {
- inviteMapper.addNotice(mapList);
- //新增日志
- Access access = new Access().setType("报工单").setData(JSON.toJSONString(mapList)).setAccessType("0");
- dictionaryMapper.addAccess(access);
- map.put("status", "0000");
- map.put("msg","成功");
- }catch (Exception e){
- e.printStackTrace();
- map.put("status", "0009");
- map.put("msg", "服务器请求异常,请稍后再试");
- }
- return map;
- }
- /**
- * 交货单接口
- * @return
- */
- @Override
- public Map<String, Object> deliveryOrder(List<Map<String, Object>> mapList) {
- Map<String, Object> map = new HashMap<>();
- try {
- for (Map<String, Object> list : mapList) {
- if (list.get("operationType").toString().equals("2")){
- //查询子表数据根据交货单id
- int count = inviteMapper.getCountDelivery(list.get("deliveryOrderId").toString());
- //是否存在
- if (count == 0){
- //修改父子表信息
- inviteMapper.updDelivery(list.get("deliveryOrderId").toString());
- //添加
- inviteMapper.addDeliverys(list);
- }
- }else {
- //添加
- inviteMapper.addDeliverys(list);
- }
- }
- // inviteMapper.addDelivery(mapList);
- //新增日志
- Access access = new Access().setType("交货单").setData(JSON.toJSONString(mapList)).setAccessType("0");
- dictionaryMapper.addAccess(access);
- map.put("status", "0000");
- map.put("msg","成功");
- }catch (Exception e){
- e.printStackTrace();
- map.put("status", "0009");
- map.put("msg", "服务器请求异常,请稍后再试");
- }
- return map;
- }
- /**
- * 移库通知单
- * @return 是否成功
- */
- @Override
- public Map<String, Object> transferNotice(List<Map<String, Object>> mapList) {
- Map<String, Object> map = new HashMap<>();
- try {
- inviteMapper.addWarehouseTransfer(mapList);
- //新增日志
- Access access = new Access().setType("移库单").setData(JSON.toJSONString(mapList)).setAccessType("0");
- dictionaryMapper.addAccess(access);
- map.put("status", "0000");
- map.put("msg","成功");
- }catch (Exception e){
- e.printStackTrace();
- map.put("status", "0009");
- map.put("msg", "服务器请求异常,请稍后再试");
- }
- return map;
- }
- @Override
- @Transactional(rollbackFor = Exception.class)
- public Map<String, Object> delAskGoods(String id, HttpServletRequest request) {
- Map<String, Object> map = new HashMap<>();
- try{
- String userId = request.getHeader("userId");
- Map<String, Object> mapVal = inviteMapper.getDelAskGoods(id);
- if(Double.doubleToLongBits(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);
- inviteMapper.delAskGoods(id);
- map.put("msg","200");
- } catch (Exception e) {
- e.printStackTrace();
- map.put("msg", "500");
- map.put("errMsg", "服务器请求异常,请稍后再试");
- }
- return map;
- }
- /**
- * @Description: 其他收货/其它入库
- * @Param: List<Map<String, Object>> mapList
- * @return: Map<String, Object> map
- * @Author: XiaoChen
- * @Date: 2023/4/11
- */
- @Override
- public Map<String, Object> otherReceivingGoods(List<Map<String, Object>> mapList) {
- Map<String, Object> map = new HashMap<>();
- try {
- inviteMapper.otherReceivingGoods(mapList);
- //新增日志
- Access access = new Access().setType("其他入库").setData(JSON.toJSONString(mapList)).setAccessType("0");
- dictionaryMapper.addAccess(access);
- map.put("status", "0000");
- map.put("msg","成功");
- }catch (Exception e){
- e.printStackTrace();
- map.put("status", "0009");
- map.put("msg", "服务器请求异常,请稍后再试");
- }
- return map;
- }
- /**
- * @Description: 其它出库
- * @Param: List<Map<String, Object>> mapList
- * @return: Map<String, Object> map
- * @Author: XiaoChen
- * @Date: 2023/4/11
- */
- @Override
- public Map<String, Object> otherShipments(List<Map<String, Object>> mapList) {
- Map<String, Object> map = new HashMap<>();
- try {
- inviteMapper.otherShipments(mapList);
- //新增日志
- Access access = new Access().setType("其它出库").setData(JSON.toJSONString(mapList)).setAccessType("0");
- dictionaryMapper.addAccess(access);
- map.put("status", "0000");
- map.put("msg","成功");
- }catch (Exception e){
- e.printStackTrace();
- map.put("status", "0009");
- map.put("msg", "服务器请求异常,请稍后再试");
- }
- return map;
- }
- /**
- * @Description: 补领料申请
- * @Param: List<Map<String, Object>> mapList
- * @return: Map<String, Object> map
- * @Author: XiaoChen
- * @Date: 2023/4/11
- */
- @Override
- public Map<String, Object> sStoresRequisition(List<Map<String, Object>> mapList) {
- Map<String, Object> map = new HashMap<>();
- try {
- inviteMapper.sStoresRequisition(mapList);
- //新增日志
- Access access = new Access().setType("领料申请").setData(JSON.toJSONString(mapList)).setAccessType("0");
- dictionaryMapper.addAccess(access);
- map.put("status", "0000");
- map.put("msg","成功");
- }catch (Exception e){
- e.printStackTrace();
- map.put("status", "0009");
- map.put("msg", "服务器请求异常,请稍后再试");
- }
- 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 = inviteMapper.getReturnRemovalCount();
- for(int i = 0; i < 4 - (count + "").length(); i++){
- stringBuilder.append("0");
- }
- return (stringBuilder.append(count + 1)).toString();
- }
- /**
- * @Description: 非生产领用
- * @Param: List<Map<String,Object>> mapList
- * @return: Map<String, Object> map
- * @Author: XiaoChen
- * @Date: 2023/4/10
- */
- @Override
- @Transactional(rollbackFor = Exception.class)
- public Map<String, Object> addAskGoodsNoProd(List<Map<String,Object>> mapList) {
- Map<String, Object> map = new HashMap<>();
- try{
- List<AskGoods> askGoodsList = new LinkedList<AskGoods>();
- for(Map<String,Object> jsonMap:mapList) {
- List<Map<String, Object>> list = (List) jsonMap.get("datalist");
- for (Map<String, Object> element : list) {
- AskGoods ag = new AskGoods();
- //父表
- ag.setAskGoodsId(jsonMap.get("requestOrderId").toString());
- ag.setAskGoodsCode(jsonMap.get("requestOrderNo").toString());
- ag.setCompanyNumber(jsonMap.get("companyNo").toString());
- ag.setSqrq(jsonMap.get("applicationDate").toString());//申请日期
- ag.setDepartment(jsonMap.get("useDepartment").toString());
- ag.setSourceType(jsonMap.get("sourceType").toString());
- ag.setMoveType(jsonMap.get("moveType").toString());
- ag.setRequestTypeNumber(jsonMap.get("requestTypeNumber").toString());
- ag.setRequestTypeName(jsonMap.get("requestTypeName").toString());
- ag.setIfCommodity(jsonMap.get("ifCommodity").toString());
- //子表
- ag.setEntryNumber(element.get("entryNumber").toString());
- ag.setProductionCode(element.get("prodOrderNo").toString());//
- ag.setMaterialId(element.get("materialId").toString());
- ag.setWbs(element.get("WBS").toString());//
- ag.setMeasurementId(element.get("measUnitId").toString());
- ag.setNum(element.get("orderCount").toString());
- ag.setOutNum("0");
- ag.setAskGoodsType("0");
- askGoodsList.add(ag);
- }
- }
- for(AskGoods askGoods : askGoodsList) {
- int count = inviteMapper.getAskGoods(askGoods);
- if (count != 0) {
- inviteMapper.updateAskGoodsNum(askGoods);
- } else {
- if (inviteMapper.getAskGoodsf(askGoods) == 0) {
- inviteMapper.addAskGoodsf(askGoods);
- }
- inviteMapper.addAskGoods(askGoods);
- }
- inviteMapper.addAskGoodsLog(askGoods);
- }
- //新增日志
- Access access = new Access().setType("非生产领料信息").setData(JSON.toJSONString(mapList)).setAccessType("0");
- dictionaryMapper.addAccess(access);
- map.put("status", "0000");
- map.put("msg","成功");
- }catch (Exception e){
- e.printStackTrace();
- map.put("status", "0009");
- map.put("msg", "服务器请求异常,请稍后再试");
- }
- return map;
- }
- }
|