package com.ruoyi.management.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.page.PageDTO;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.management.domain.*;
import com.ruoyi.management.domain.dto.*;
import com.ruoyi.management.domain.vo.*;
import com.ruoyi.management.mapper.ManagementGoodsMaterialsMapper;
import com.ruoyi.management.mapper.SlAuditMapper;
import com.ruoyi.management.service.*;
import com.ruoyi.management.service.impl.SlVolumeProductionZyServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.annotations.Authorization;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* 转移管理 前端控制器
*
*
* @author hjl
* @since 2024-06-25
*/
@RestController
@RequestMapping("/sl-volume-production-zygl")
@Api(value = "转移管理接口", tags = "转移管理接口", description = "转移管理接口")
public class SlVolumeProductionZyglController {
@Resource
private SlAuditMapper slAuditMapper;
@Resource
private TokenService tokenService;
@Resource
private SlVolumeProductionZyglService slVolumeProductionZyglService;
@Resource
private SlVolumeProductionZyService slVolumeProductionZyService;
@Autowired
private SlVolumeProductionRkService slVolumeProductionRkService;
@Autowired
private SlGoodsMaterialsService slGoodsMaterialsService;
@Resource
private ManagementGoodsMaterialsMapper managementGoodsMaterialsMapper;
@PostMapping("/getVolumeProductionZyglCode")
@ApiOperation(value = "获取转移管理打印二维码列表")
public R> getVolumeProductionRkgCode(@RequestBody VolumeProductionZyglCodeQuery volumeProductionRkgCodeQuery) {
tokenService.getLoginUser();
// 通过转移管理获取 转移列表 获取入库id
Page page = new Page<>(volumeProductionRkgCodeQuery.getPageCurr(), volumeProductionRkgCodeQuery.getPageSize());
LambdaQueryWrapper< SlVolumeProductionZy> wrapper1= Wrappers.lambdaQuery();
wrapper1.eq(SlVolumeProductionZy::getZyglId,volumeProductionRkgCodeQuery.getVolumeProductionZyglId());
wrapper1.eq( SlVolumeProductionZy::getDelFlag,"0");
if (volumeProductionRkgCodeQuery.getShelfId() != null){
wrapper1.eq(SlVolumeProductionZy::getShelfId,volumeProductionRkgCodeQuery.getShelfId());
}
if (volumeProductionRkgCodeQuery.getManagementNumber() != null){
wrapper1.eq(SlVolumeProductionZy::getStoreManagementNumber,volumeProductionRkgCodeQuery.getManagementNumber());
}
wrapper1.orderByDesc(SlVolumeProductionZy::getCreateTime);
Page page2 = slVolumeProductionZyService.page(page, wrapper1);
PageDTO SlGoodsShelfDTO = PageDTO.of(page2, getVolumeProductionRkgCodeVO.class);
List list2 = SlGoodsShelfDTO.getList();
for(getVolumeProductionRkgCodeVO list:list2) {
SlGoodsMaterials slGoodsMaterials = slGoodsMaterialsService.getById(list.getMaterialsId());
list.setGoodsMaterialsName(slGoodsMaterials.getGoodsMaterialsName());
list.setIsConsume(slGoodsMaterials.getIsConsume());
if (list.getScrkId() != null){
SlVolumeProductionRk byId = slVolumeProductionRkService.getById(list.getScrkId());
if (byId!=null){
Integer erwmNum = byId.getErwmNum();
list.setErwmNum(erwmNum);
}
}
}
// 将list2中的数据 如果字段erwmNum为空 优先展示在前面
list2.sort((o1, o2) -> {
if (o1.getErwmNum() == null) {
return -1;
}
if (o2.getErwmNum() == null) {
return 1;
}
return 0;
});
return R.ok(SlGoodsShelfDTO);
}
@PostMapping("/updateQrCodeNum")
@ApiOperation(value = "批量修改转移二维码生成数量")
public R updateQrCodeNum(@RequestBody UpdateZyQrCodeDTO dto) {
tokenService.getLoginUser();
for (UpdateQrCodeNumDTO updateQrCodeNumDTO : dto.getList()) {
SlVolumeProductionZy byId = slVolumeProductionZyService.getById(updateQrCodeNumDTO.getId());
if (byId == null){
continue;
}
Long scrkId = byId.getScrkId();
SlVolumeProductionRk byId1 = slVolumeProductionRkService.getById(scrkId);
if (byId1 == null){
continue;
}
byId1.setErwmNum(updateQrCodeNumDTO.getErwmNum());
if (byId1.getErwmNum()>0){
byId1.setRkModel(getLetter(updateQrCodeNumDTO.getErwmNum()));
}
slVolumeProductionRkService.updateById(byId1);
}
return R.ok();
}
public static String getLetter(int num) {
String[] str = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
// 如果num大于26 那么往后叠加对应的字母 比如27 那么就是AA
if (num > 26) {
int a = num / 26;
int b = num % 26;
if (b == 0) {
a = a - 1;
b = 26;
}
return getLetter(a) + getLetter(b);
}
return str[num - 1];
}
@PostMapping("/getVolumeProductionzZyglList")
@ApiOperation(value = "分页获取转移管理")
public R> getVolumeProductionzZyglList(@RequestBody SlVolumeProductionZyQuery slVolumeProductionZyQuery) {
tokenService.getLoginUser();
return R.ok(slVolumeProductionZyglService.getVolumeProductionzZyglList(slVolumeProductionZyQuery));
}
@PostMapping("/addsVolumeProductionzZygl")
@ApiOperation(value = "添加/修改转移管理")
public R addsVolumeProductionzZygl(@RequestBody SlVolumeProductionZyDTO slVolumeProductionZyDTO) {
tokenService.getLoginUser();
return R.ok(slVolumeProductionZyglService.addsVolumeProductionzZygl(slVolumeProductionZyDTO));
}
@PostMapping("/getVolumeProductionzZyglnfo")
@ApiOperation(value = "获取转移管理详情")
public R getVolumeProductionzZyglnfo(@RequestBody ManagementimgVolumeProductionZyQuery managementimgVolumeProductionZyQuery) {
tokenService.getLoginUser();
return R.ok(slVolumeProductionZyglService.getVolumeProductionzZyglnfo(managementimgVolumeProductionZyQuery));
}
@GetMapping("/getVolumeProductionZyglnventory/{id}")
@ApiOperation(value = "获取转移管理打印清单")
public R getVolumeProductionZyglnventory(@ApiParam(name = "id", value = "转移管理id", required = true) @PathVariable("id") String id) {
tokenService.getLoginUser();
return R.ok(slVolumeProductionZyglService.getVolumeProductionZyglnventory(id));
}
@ApiOperation("取消转移管理")
@GetMapping("/{id}")
public R> delStoreManagement(
@ApiParam(name = "id", value = "转移管理id", required = true) @PathVariable("id") Long id) {
tokenService.getLoginUser();
SlVolumeProductionZygl byId = slVolumeProductionZyglService.getById(id);
byId.setPresentState(5);
byId.setAuditStatus(7);
slVolumeProductionZyglService.updateById(byId);
LambdaQueryWrapper wrapper= Wrappers.lambdaQuery();
wrapper.eq(SlAudit::getType,3);
wrapper.eq( SlAudit::getDelFlag,0);
wrapper.eq(SlAudit::getRkId,id);
SlAudit slAudit = slAuditMapper.selectOne(wrapper);
slAudit.setState(6);
List list = slVolumeProductionZyService.list(new QueryWrapper()
.eq("zygl_id", id)
.eq("del_flag", "0"));
List collect = list.stream().map(SlVolumeProductionZy::getScrkId).collect(Collectors.toList());
// 回滚入库记录库存
for (SlVolumeProductionZy slVolumeProductionZy : list) {
SlVolumeProductionRk byId1 = slVolumeProductionRkService.getById(slVolumeProductionZy.getRkId());
byId1.setRepertoryZhai(byId1.getRepertoryZhai()+slVolumeProductionZy.getZyNum());
slVolumeProductionRkService.updateById(byId1);
// 回滚中间表记录库存
LambdaQueryWrapper wrapper2 = Wrappers.lambdaQuery();
wrapper2.eq(ManagementGoodsMaterials::getGoodsMaterialsId,slVolumeProductionZy.getMaterialsId());
wrapper2.eq(ManagementGoodsMaterials::getManagementId,byId.getBmanagementId());
wrapper2.eq(ManagementGoodsMaterials::getDelFlag, 0);
ManagementGoodsMaterials managementGoodsMaterials = managementGoodsMaterialsMapper.selectOne(wrapper2);
if (managementGoodsMaterials!=null){
Long repertorySum = managementGoodsMaterials.getRepertorySum();
Long repertoryZhai = managementGoodsMaterials.getRepertoryZhai();
Long re=repertorySum+Long.valueOf(slVolumeProductionZy.getZyNum());
Long re1=repertoryZhai+Long.valueOf(slVolumeProductionZy.getZyNum());
managementGoodsMaterials.setRepertorySum(re);
managementGoodsMaterials.setRepertoryZhai(re1);
managementGoodsMaterials.setRepertoryChu(0);
managementGoodsMaterialsMapper.updateById(managementGoodsMaterials);
}else{
ManagementGoodsMaterials managementGoodsMaterials1=new ManagementGoodsMaterials();
managementGoodsMaterials1.setManagementId(byId.getBmanagementId());
managementGoodsMaterials1.setGoodsMaterialsId(slVolumeProductionZy.getMaterialsId());
managementGoodsMaterials1.setRepertoryZhai(Long.valueOf(slVolumeProductionZy.getZyNum()));
managementGoodsMaterials1.setRepertorySum(Long.valueOf(slVolumeProductionZy.getZyNum()));
managementGoodsMaterials1.setRepertoryChu(slVolumeProductionZy.getZyNum());
managementGoodsMaterials1.setCreateTime(new Date());
managementGoodsMaterialsMapper.insert(managementGoodsMaterials1);
}
}
List list1 = slVolumeProductionRkService.list(new QueryWrapper()
.in("id",collect)
.eq("del_flag","0"));
// 删除入库记录
slVolumeProductionRkService.remove(new QueryWrapper().in("id",collect));
// 取消后删除转移记录
QueryWrapper wrapper1 = new QueryWrapper<>();
wrapper1.eq("zygl_id",id);
slVolumeProductionZyService.remove(wrapper1);
return R.ok();
}
@ApiOperation("转移管理入库")
@PostMapping("/zy")
public R> zy(@RequestBody ZyRkDTO dto) {
tokenService.getLoginUser();
slVolumeProductionZyglService.zy(dto.getCkglId(),dto.getAuthorizationUrl());
return R.ok();
}
@Autowired
private SlAuditService slAuditRecordService;
@ApiOperation("查询审核拒绝原因")
@GetMapping("/getRefuseReason")
public R> getRefuseReason(Long auditId) {
tokenService.getLoginUser();
SlAudit byId = slAuditRecordService.getById(auditId);
return R.ok(byId.getCause());
}
}