package com.xzx.gc.order.controller;
|
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.convert.Convert;
|
import cn.hutool.core.date.DateUnit;
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.util.NumberUtil;
|
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONUtil;
|
import com.github.pagehelper.PageHelper;
|
import com.github.pagehelper.PageInfo;
|
import com.xzx.gc.common.Result;
|
import com.xzx.gc.common.constant.CommonEnum;
|
import com.xzx.gc.common.constant.Constants;
|
import com.xzx.gc.common.constant.OrderEnum;
|
import com.xzx.gc.common.dto.CommonDto;
|
import com.xzx.gc.common.dto.SimplePage;
|
import com.xzx.gc.common.dto.log.OperationAppLog;
|
import com.xzx.gc.common.exception.RestException;
|
import com.xzx.gc.common.request.BaseController;
|
import com.xzx.gc.common.utils.*;
|
import com.xzx.gc.entity.*;
|
import com.xzx.gc.model.JsonResult;
|
import com.xzx.gc.model.admin.PayStorageModel;
|
import com.xzx.gc.model.admin.StorageUserModel;
|
import com.xzx.gc.model.pay.MoneyAuditDto;
|
import com.xzx.gc.model.system.ConfigInfoReq;
|
import com.xzx.gc.model.system.ConfigInfoVo;
|
import com.xzx.gc.order.dto.*;
|
import com.xzx.gc.order.mapper.*;
|
import com.xzx.gc.order.service.*;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiImplicitParam;
|
import io.swagger.annotations.ApiImplicitParams;
|
import io.swagger.annotations.ApiOperation;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.validation.annotation.Validated;
|
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
import org.springframework.web.bind.annotation.RestController;
|
import tk.mybatis.mapper.entity.Example;
|
|
import javax.servlet.http.HttpServletRequest;
|
import java.math.BigDecimal;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* @author :zz
|
*/
|
@RestController
|
@Api(tags = {"入库管理"})
|
@Validated
|
@Slf4j
|
public class StorageController extends BaseController {
|
|
@Autowired
|
private OrderClockInService orderClockInService;
|
|
@Autowired
|
private CityPartnerService cityPartnerService;
|
|
@Autowired
|
private OrderStorageInfoMapper orderStorageInfoMapper;
|
|
|
@Autowired
|
private AccountService accountService;
|
|
|
@Autowired
|
private OrderClockInMapper orderClockInMapper;
|
|
@Autowired
|
private OrderBatchInfoMapper orderBatchInfoMapper;
|
|
@Autowired
|
private OrderStorageDetailMapper orderStorageDetailMapper;
|
|
@Autowired
|
private StorageService storageService;
|
|
@Autowired
|
private OrderMapper orderMapper;
|
|
|
@Autowired
|
private ConfigService configService;
|
|
@Autowired
|
private RedisUtil redisUtil;
|
|
|
|
@Autowired
|
private OtherUserMapper otherUserMapper;
|
|
@Autowired
|
private BusinessUtil businessUtil;
|
|
|
@Autowired
|
private UserService userService;
|
|
|
@PostMapping("/storage/rk/list")
|
@ApiOperation(value = "入库员新任务列表")
|
public Result<PageInfo<StorageRkResDto>> rkList(HttpServletRequest request, @RequestBody SimplePage simplePage) {
|
Result<PageInfo<StorageRkResDto>> result = new Result();
|
List<StorageRkResDto> list = new ArrayList<>();
|
OrderStorageInfo orderStorageInfo = new OrderStorageInfo();
|
orderStorageInfo.setStorageStatus(Convert.toShort(OrderEnum.入库检验中.getValue()));
|
|
String userId = getUserId(request);
|
OtherUserInfo otherUserInfo = otherUserMapper.selectByPrimaryKey(userId);
|
//仓库或打包站id
|
Integer sysorageId = null;
|
if (otherUserInfo.getUserType().equals(CommonEnum.打包员.getValue())||otherUserInfo.getUserType().equals(CommonEnum.打包站运营员.getValue())) {
|
CityPartner byuserId = cityPartnerService.findByuserId(otherUserInfo.getUserId(), OrderEnum.打包站.getValue());
|
if (byuserId != null) {
|
sysorageId = byuserId.getId();
|
orderStorageInfo.setSysStorageId(Convert.toLong(sysorageId));
|
orderStorageInfo.setSysStorageType(Convert.toShort(OrderEnum.打包站.getValue()));
|
}
|
} else if (otherUserInfo.getUserType().equals(CommonEnum.入库员.getValue())) {
|
sysorageId = Convert.toInt(otherUserInfo.getStorageId());
|
orderStorageInfo.setSysStorageType(Convert.toShort(OrderEnum.仓库.getValue()));
|
orderStorageInfo.setSysStorageId(Convert.toLong(sysorageId));
|
}
|
PageHelper.startPage(simplePage.getPageNo(), simplePage.getPageSize());
|
|
List<OrderStorageInfo> select = orderStorageInfoMapper.select(orderStorageInfo);
|
if (CollUtil.isNotEmpty(select)) {
|
for (OrderStorageInfo info : select) {
|
StorageRkResDto storageRkResDto = new StorageRkResDto();
|
BeanUtils.copyProperties(info, storageRkResDto);
|
//地称信息
|
Example example = new Example(OrderBatchInfo.class);
|
Example.Criteria criteria = example.createCriteria();
|
criteria.andEqualTo("orderId", info.getOrderId());
|
OrderBatchInfo orderBatchInfo = orderBatchInfoMapper.selectOneByExample(example);
|
if (orderBatchInfo != null) {
|
//载货打卡时间
|
storageRkResDto.setCreateTime(DateUtil.parseDateTime(orderBatchInfo.getCreateTime()).toString(DateUtils.DATE_FORMAT_HM));
|
storageRkResDto.setWeight(orderBatchInfo.getWeight());
|
|
Example example1 = new Example(OrderClockIn.class);
|
Example.Criteria criteria1 = example1.createCriteria();
|
criteria1.andEqualTo("userId", orderBatchInfo.getUserId());
|
criteria1.andCondition("substring_index(create_time,' ',1)=", StrUtil.split(orderBatchInfo.getCreateTime(), " ")[0]);
|
OrderClockIn orderClockIn = orderClockInMapper.selectOneByExample(example1);
|
if (orderClockIn != null) {
|
storageRkResDto.setEmptyWeight(orderClockIn.getWeight());
|
}
|
}
|
if (StrUtil.isBlank(storageRkResDto.getWeight())) {
|
storageRkResDto.setWeight(Convert.toStr(Constants.WEIGHT_INIT));
|
}
|
if (StrUtil.isBlank(storageRkResDto.getEmptyWeight())) {
|
storageRkResDto.setEmptyWeight(Convert.toStr(Constants.WEIGHT_INIT));
|
}
|
list.add(storageRkResDto);
|
}
|
}
|
PageInfo<StorageRkResDto> pageInfo = new PageInfo(list);
|
int i = storageService.countCompleteOrder(userId);
|
pageInfo.setNavigatePages(i);
|
result.setData(pageInfo);
|
return result;
|
}
|
|
@PostMapping("/storage/rk/detail")
|
@ApiOperation(value = "入库员新任务详情", notes = "id:入库ID")
|
public Result<RkDto> rkDetailList(HttpServletRequest request, @RequestBody CommonDto commonDto) {
|
Result<RkDto> result = new Result();
|
String storageId = commonDto.getId();
|
LogUtils.setTraceId(LogUtils.TRACE_ORDER_ID, storageId);
|
RkDto rk = new RkDto();
|
List<OrderItemDto> orderItemDtos = new ArrayList<>();
|
OrderStorageDetailInfo orderStorageDetailInfo = new OrderStorageDetailInfo();
|
orderStorageDetailInfo.setStorageId(storageId);
|
orderStorageDetailInfo.setFlag(OrderEnum.回收型.getValue());
|
List<OrderStorageDetailInfo> select = orderStorageDetailMapper.select(orderStorageDetailInfo);
|
|
//1为上门 2为定点
|
int type = 1;
|
OrderStorageInfo orderStorageInfo = orderStorageInfoMapper.selectByPrimaryKey(storageId);
|
String orderId = orderStorageInfo.getOrderId();
|
String s = orderId.split(",")[0];
|
OrderInfo orderInfo = orderMapper.selectByPrimaryKey(s);
|
Long storeId = orderInfo.getStoreId();
|
if (storeId != null) {
|
type = 2;
|
}
|
|
int usertype = 1;
|
String userId = getUserId(request);
|
OtherUserInfo otherUserInfo = otherUserMapper.selectByPrimaryKey(userId);
|
String packageId = null;
|
if (otherUserInfo.getUserType().equals(CommonEnum.打包员.getValue())||otherUserInfo.getUserType().equals(CommonEnum.打包站运营员.getValue())) {
|
usertype = 2;
|
packageId = otherUserInfo.getPartnerId();
|
}else if(otherUserInfo.getUserType().equals(CommonEnum.入库员.getValue())){
|
packageId=otherUserInfo.getStorageId();
|
}
|
//设置分类信息
|
String receiver = orderStorageInfo.getReceiver();
|
storageService.setItem(rk, orderItemDtos, select, usertype, packageId);
|
rk.setStorageUserId(userId);
|
rk.setStorageId(storageId);
|
|
//地称信息
|
BigDecimal recycleMoney = orderStorageInfo.getRecycleMoney();
|
rk.setMoney(Convert.toStr(recycleMoney));
|
Example example = new Example(OrderBatchInfo.class);
|
Example.Criteria criteria = example.createCriteria();
|
criteria.andEqualTo("orderId", orderStorageInfo.getOrderId());
|
OrderBatchInfo orderBatchInfo = orderBatchInfoMapper.selectOneByExample(example);
|
if (orderBatchInfo != null) {
|
rk.setWeight(orderBatchInfo.getWeight());
|
}
|
|
if (StrUtil.isBlank(rk.getWeight())) {
|
rk.setWeight(Convert.toStr(Constants.WEIGHT_INIT));
|
}
|
result.setData(rk);
|
return result;
|
}
|
|
@PostMapping("/storage/rk/code/detail")
|
@ApiOperation(value = "手动扫码入库新任务详情")
|
public Result<RkDto> rkCodeDetailList(HttpServletRequest request, @RequestBody CommonDto commonDto) {
|
JSONObject parse = null;
|
//回收员ID
|
String userId = "";
|
Long timestamp = null;
|
try {
|
String extra = commonDto.getExtra();
|
extra = StrUtil.removePrefix(extra, ",");
|
String decrypt = SecurityUtil.decrypt(Constants.PWD_DECRET, extra);
|
parse = JSONUtil.parseObj(decrypt);
|
userId = parse.getStr("userId");
|
// devCode = parse.getStr("devCode");
|
timestamp = parse.getLong("timestamp");
|
} catch (Exception e) {
|
ExceptionUtils.err("解码失败", e);
|
}
|
|
Date date = new Date(timestamp);
|
|
if(SpringUtil.isDev()) {
|
if (DateUtil.between(date, new Date(), DateUnit.HOUR) > 30) {
|
throw new RestException("二维码已过期");
|
}
|
}else {
|
if (DateUtil.between(date, new Date(), DateUnit.SECOND) > 30) {
|
throw new RestException("二维码已过期");
|
}
|
}
|
|
Result<RkDto> rkDtoResult=new Result<>();
|
|
//判断扫码开关是否打开 关闭的情况下是否用户入库失败三次
|
String userId1 = getUserId(request);
|
|
//入库员或打包员
|
OtherUserInfo otherUserInfo = otherUserMapper.selectByPrimaryKey(userId1);
|
//回收员所属的合伙人
|
String partnerId = otherUserMapper.selectByPrimaryKey(userId).getPartnerId();
|
|
if (otherUserInfo.getUserType().equals(CommonEnum.打包员.getValue())||otherUserInfo.getUserType().equals(CommonEnum.打包站运营员.getValue())) {
|
String packageId =otherUserInfo.getPartnerId();
|
|
/*
|
判断扫码的入库员所属的合伙人是否与回收员一致
|
*/
|
|
String packingStation = cityPartnerService.findById(Convert.toInt(packageId)).getPackingStation();
|
if(!partnerId.equals(packingStation)){
|
return Result.error(-1, "禁止扫码");
|
}
|
|
rkDtoResult = storageService.rkDetail(request, userId, 2, packageId);
|
} else {
|
ConfigInfoReq configInfoReq = new ConfigInfoReq();
|
configInfoReq.setConfigTypeCode("CODE_SCAN_RK");
|
List<ConfigInfoVo> configInfoVos = configService.configInfoQuery(configInfoReq);
|
if (CollUtil.isNotEmpty(configInfoVos) && Constants.OPEN.equals(configInfoVos.get(0).getConfigValue())) {
|
|
|
if(!partnerId.equals(otherUserInfo.getPartnerId())){
|
return Result.error(-1, "禁止扫码");
|
}
|
|
rkDtoResult = storageService.rkDetail(request, userId, 1, otherUserInfo.getStorageId());
|
} else {
|
if (orderClockInService.notClock(userId)) {
|
rkDtoResult = storageService.rkDetail(request, userId, 1, otherUserInfo.getStorageId());
|
}else {
|
//开关关闭的情况下
|
String errNum = redisUtil.hget(Constants.REDIS_ORDER_KEY + "storage:errcount", userId);
|
if (errNum != null && Convert.toInt(errNum) >= 3) {
|
rkDtoResult = storageService.rkDetail(request, userId, 1, otherUserInfo.getStorageId());
|
} else {
|
return Result.error(-1, "禁止扫码");
|
}
|
}
|
}
|
}
|
|
if(rkDtoResult.getCode()==0){
|
String mobilePhone = userService.findOtherByUserId(getUserId(request),1);
|
OperationAppLog build = OperationAppLog.builder().appPrograme(getFrontClient(request)).opreateName(mobilePhone)
|
.methodName(Constants.ORDER_MODUL_NAME).operateAction("手动扫码入库-"+rkDtoResult.getData().getStorageId()).build();
|
mqUtil.sendApp(build);
|
}
|
return rkDtoResult;
|
|
}
|
|
|
|
|
@PostMapping("/storage/rk/statistics")
|
@ApiOperation(value = "入库统计(含回收员与入库员与打包员)")
|
public Result<RkStatisticsDto> rkStatistics(HttpServletRequest request, @RequestBody RkStatisDto rkStatisDto) {
|
Result<RkStatisticsDto> res = new Result<>();
|
String userType = rkStatisDto.getUserType();
|
String userId = getUserId(request);
|
|
RkStatisticsDto rkStatisticsDto = storageService.statistics(userId, userType,rkStatisDto.getData(),rkStatisDto.getReceiver());
|
res.setData(rkStatisticsDto);
|
return res;
|
}
|
|
@PostMapping("/storage/rk")
|
@ApiOperation(value = "入库")
|
public Result rk(HttpServletRequest request, @RequestBody RkDto rkDto) {
|
rkDto.setVersion(getVersion(request));
|
//处理金额和重量
|
BigDecimal money = rkDto.getStorageMoney();
|
if (money != null && money.compareTo(BigDecimal.ZERO) != 0) {
|
String money1 = businessUtil.changeMoney(Convert.toStr(money));
|
rkDto.setStorageMoney(Convert.toBigDecimal(money1));
|
}
|
String weight = rkDto.getStorageWeight();
|
if (StrUtil.isNotBlank(weight)) {
|
String s = businessUtil.changeWeight(weight);
|
rkDto.setStorageWeight(s);
|
}
|
LogUtils.setTraceId(LogUtils.TRACE_ORDER_ID, rkDto.getStorageId());
|
storageService.rk(rkDto);
|
|
String mobilePhone = userService.findOtherByUserId(getUserId(request),1);
|
OperationAppLog build = OperationAppLog.builder().appPrograme(getFrontClient(request)).opreateName(mobilePhone)
|
.methodName(Constants.ORDER_MODUL_NAME).operateAction("入库-"+rkDto.getStorageId()).build();
|
mqUtil.sendApp(build);
|
|
return Result.success();
|
}
|
|
|
}
|