package com.vincent.rsf.server.api.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.vincent.rsf.framework.common.Cools;
|
import com.vincent.rsf.framework.common.R;
|
import com.vincent.rsf.framework.exception.CoolException;
|
import com.vincent.rsf.server.api.controller.params.ReceiptParams;
|
import com.vincent.rsf.server.api.entity.dto.ReceiptDetlsDto;
|
import com.vincent.rsf.server.api.service.MobileService;
|
import com.vincent.rsf.server.common.config.ConfigProperties;
|
import com.vincent.rsf.server.common.security.JwtSubject;
|
import com.vincent.rsf.server.common.utils.JwtUtil;
|
import com.vincent.rsf.server.manager.entity.*;
|
import com.vincent.rsf.server.manager.mapper.*;
|
import com.vincent.rsf.server.manager.service.WarehouseAreasItemService;
|
import com.vincent.rsf.server.system.constant.CodeRes;
|
import com.vincent.rsf.server.system.controller.param.LoginParam;
|
import com.vincent.rsf.server.system.controller.result.LoginResult;
|
import com.vincent.rsf.server.system.entity.Tenant;
|
import com.vincent.rsf.server.system.entity.User;
|
import com.vincent.rsf.server.system.entity.UserLogin;
|
import com.vincent.rsf.server.system.mapper.TenantMapper;
|
import com.vincent.rsf.server.system.mapper.UserMapper;
|
import com.vincent.rsf.server.system.service.UserLoginService;
|
import org.apache.tika.utils.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
import java.util.*;
|
|
/**
|
* @author Ryan
|
* @version 1.0
|
* @title MobileServiceImpl
|
* @description
|
* @create 2025/3/10 08:07
|
*/
|
@Service
|
public class MobileServiceImpl implements MobileService {
|
|
@Value("${super.pwd}")
|
private String superPwd;
|
@Resource
|
private ConfigProperties configProperties;
|
@Autowired
|
private TenantMapper tenantService;
|
@Autowired
|
private UserMapper userService;
|
@Autowired
|
private UserLoginService userLoginService;
|
|
@Autowired
|
private WarehouseAreasItemService warehouseAreasItemService;
|
@Resource
|
private AsnOrderItemMapper asnOrderItemMapper;
|
@Resource
|
private MatnrMapper matnrMapper;
|
@Resource
|
private QlyInspectMapper qlyInspectMapper;
|
@Resource
|
private StockItemMapper stockItemMapper;
|
@Resource
|
private PurchaseItemMapper purchaseItemMapper;
|
|
|
/**
|
* @author Ryan
|
* @description 手持PDA登录接口
|
* @params LoginParam param, HttpServletRequest request
|
* @return
|
* @time 2025/3/10 15:36
|
*/
|
@Override
|
public R login(LoginParam param, HttpServletRequest request) {
|
User user = userService.selectByUsernameWithoutTenant(param.getUsername(), null);
|
if (param.getUsername().equals("super") && param.getPassword().equals(Cools.md5(superPwd))) {
|
Map<String, Object> res = new HashMap<>();
|
res.put("username", param.getUsername());
|
res.put("token", JwtUtil.buildToken(new JwtSubject(param.getUsername(), user.getTenantId()),
|
configProperties.getTokenExpireTime(), configProperties.getTokenKey()));
|
return R.ok(res);
|
}
|
|
if (Cools.isEmpty(user)) {
|
return R.parse(CodeRes.USER_10001);
|
}
|
if (user.getStatus() != 1) {
|
return R.parse(CodeRes.USER_10002);
|
}
|
if (!user.getPassword().equals(param.getPassword())) {
|
return R.parse(CodeRes.USER_10003);
|
}
|
|
String accessToken = JwtUtil.buildToken(new JwtSubject(param.getUsername(), user.getTenantId()),
|
configProperties.getTokenExpireTime(), configProperties.getTokenKey());
|
userLoginService.saveAsync(user.getId(), accessToken, UserLogin.TYPE_LOGIN, user.getTenantId(), null, request);
|
Tenant tenant = tenantService.selectById(user.getTenantId());
|
return R.ok("Sign In Success").add(new LoginResult(accessToken, user, tenant.getName()));
|
}
|
|
/**
|
* @author Ryan
|
* @description 扫码获取收货明细
|
* @param barcode
|
* @return
|
* @time 2025/3/10 15:37
|
*/
|
@Override
|
public R getOrderByCode(String barcode) {
|
if (StringUtils.isEmpty(barcode)) {
|
return R.error("标签码不能为空!!");
|
}
|
ReceiptDetlsDto detlsDto = new ReceiptDetlsDto();
|
AsnOrderItem asnOrderItem = asnOrderItemMapper.selectOne(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getBarcode, barcode));
|
if (Objects.isNull(asnOrderItem)) {
|
throw new CoolException("单据明细不存在!!");
|
}
|
detlsDto.setAsnCode(asnOrderItem.getAsnCode())
|
.setMatnk(asnOrderItem.getMatnk())
|
.setBarcode(asnOrderItem.getBarcode())
|
.setPoCode(asnOrderItem.getPoCode())
|
.setPurQty(asnOrderItem.getAnfme())
|
.setSplrBatch(asnOrderItem.getSplrBatch());
|
|
Matnr matnr = matnrMapper.selectById(asnOrderItem.getMatnrId());
|
if (Objects.isNull(matnr)) {
|
throw new CoolException("数据错误:当前物料不存在!!");
|
}
|
//SET 物料最大存放数量
|
detlsDto.setMaxQty(matnr.getMaxQty())
|
.setMatnrId(matnr.getId())
|
.setStockUnit(matnr.getStockUnit());
|
QlyInspect inspect = qlyInspectMapper.selectOne(new LambdaQueryWrapper<QlyInspect>()
|
.eq(QlyInspect::getAsnItemId, asnOrderItem.getId()).eq(QlyInspect::getPoItemId, asnOrderItem.getPoDetlId()));
|
//set 质检结果
|
detlsDto.setInspect(inspect.getStatus$());
|
//获取当前库存信息
|
StockItem stockItem = stockItemMapper.selectOne(new LambdaQueryWrapper<StockItem>()
|
.eq(StockItem::getAsnItemId, asnOrderItem.getId())
|
.eq(StockItem::getMatnrId, asnOrderItem.getMatnrId()));
|
//SET 当前库存数量
|
if (Objects.isNull(stockItem)) {
|
detlsDto.setStockQty(0.0);
|
} else {
|
detlsDto.setStockQty(stockItem.getQty() + stockItem.getWorkQty());
|
}
|
|
//获取采购单明细信息
|
PurchaseItem purchaseItem = purchaseItemMapper.selectOne(new LambdaQueryWrapper<PurchaseItem>().eq(PurchaseItem::getId, asnOrderItem.getPoDetlId()));
|
//SET 平台行号
|
detlsDto.setPlatformId(purchaseItem.getPlatItemId());
|
|
return R.ok(detlsDto);
|
}
|
|
/**
|
* @author Ryan
|
* @description 收货至收货区
|
* @param params
|
* @return
|
* @time 2025/3/10 15:41
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public R receiptToWarehouse(ReceiptParams params) {
|
if (params.getReceipts().isEmpty()) {
|
throw new CoolException("收货明细不能为空!!");
|
}
|
if (Objects.isNull(params.getWhAreaId())) {
|
throw new CoolException("库区标识不能为空!!");
|
}
|
WarehouseAreasItem areasItem = warehouseAreasItemService.getOne(new LambdaQueryWrapper<WarehouseAreasItem>().eq(WarehouseAreasItem::getAreaId, params.getWhAreaId()));
|
List<ReceiptDetlsDto> receipts = params.getReceipts();
|
List<WarehouseAreasItem> allOrders = new ArrayList<>();
|
receipts.forEach(dto -> {
|
Matnr matnr = matnrMapper.selectById(dto.getMatnrId());
|
if (Objects.isNull(matnr)) {
|
throw new CoolException("数据错误:当前物料不存在!!");
|
}
|
WarehouseAreasItem item = new WarehouseAreasItem();
|
item.setBarcode(dto.getBarcode())
|
.setAreaName(areasItem.getAreaName())
|
.setAreaId(areasItem.getAreaId())
|
.setStockUnit(dto.getStockUnit())
|
//TODO 编码规则生成批次 (物料号+日期)
|
.setBatch(null)
|
.setAnfme(dto.getReceiptQty())
|
.setSplrBtch(dto.getSplrBatch())
|
.setMatnrCode(matnr.getCode())
|
.setMatnrId(matnr.getId())
|
.setMatnrName(matnr.getName())
|
//TODO 入库单位换算
|
.setUnit(dto.getStockUnit())
|
.setStockUnit(dto.getStockUnit())
|
.setWeight(matnr.getWeight())
|
.setShipperId(matnr.getShipperId());
|
//TODO 供应商标识未设置
|
|
allOrders.add(item);
|
});
|
|
if (!warehouseAreasItemService.saveBatch(allOrders)) {
|
throw new CoolException("收货失败!!");
|
}
|
|
return R.ok("操作成功");
|
}
|
}
|