package com.zy.asrs.wms.asrs.controller;  
 | 
  
 | 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;  
 | 
import com.zy.asrs.common.domain.CodeRes;  
 | 
import com.zy.asrs.common.domain.enums.LoginSystemType;  
 | 
import com.zy.asrs.framework.annotations.ManagerAuth;  
 | 
import com.zy.asrs.framework.common.Cools;  
 | 
import com.zy.asrs.framework.common.R;  
 | 
import com.zy.asrs.framework.exception.CoolException;  
 | 
import com.zy.asrs.wms.asrs.entity.CacheSite;  
 | 
import com.zy.asrs.wms.asrs.entity.Order;  
 | 
import com.zy.asrs.wms.asrs.entity.WaitPakin;  
 | 
import com.zy.asrs.wms.asrs.entity.dto.OrderInfoDto;  
 | 
import com.zy.asrs.wms.asrs.entity.dto.PickSheetDetlDto;  
 | 
import com.zy.asrs.wms.asrs.entity.dto.ShippingOrderDetlDto;  
 | 
import com.zy.asrs.wms.asrs.entity.enums.OrderType;  
 | 
import com.zy.asrs.wms.asrs.entity.param.BatchMergeOrdersParam;  
 | 
import com.zy.asrs.wms.asrs.entity.param.PakinOnShelvesParams;  
 | 
import com.zy.asrs.wms.asrs.service.MobileService;  
 | 
import com.zy.asrs.wms.asrs.service.OrderService;  
 | 
import com.zy.asrs.wms.asrs.service.WaitPakinService;  
 | 
import com.zy.asrs.wms.system.controller.BaseController;  
 | 
import com.zy.asrs.wms.system.entity.Host;  
 | 
import com.zy.asrs.wms.system.entity.User;  
 | 
import com.zy.asrs.wms.system.entity.UserLogin;  
 | 
import com.zy.asrs.wms.system.service.UserLoginService;  
 | 
import com.zy.asrs.wms.system.service.UserService;  
 | 
import io.jsonwebtoken.lang.Collections;  
 | 
import io.netty.util.internal.StringUtil;  
 | 
import io.swagger.annotations.ApiOperation;  
 | 
import org.springframework.beans.factory.annotation.Autowired;  
 | 
import org.springframework.beans.factory.annotation.Value;  
 | 
import org.springframework.web.bind.annotation.*;  
 | 
  
 | 
import java.util.*;  
 | 
  
 | 
@RequestMapping("/pda")  
 | 
@RestController  
 | 
public class MobileController extends BaseController {  
 | 
  
 | 
    @Value("${super.pwd}")  
 | 
    private String superPwd;  
 | 
    @Autowired  
 | 
    private UserService userService;  
 | 
    @Autowired  
 | 
    private UserLoginService userLoginService;  
 | 
    @Autowired  
 | 
    private OrderService orderService;  
 | 
    @Autowired  
 | 
    private MobileService mobileService;  
 | 
    @Autowired  
 | 
    private WaitPakinService waitPakinService;  
 | 
  
 | 
    /**  
 | 
     * 获取用户机构  
 | 
     * @return  
 | 
     */  
 | 
    @GetMapping("/current/host")  
 | 
    public R getUserHost() {  
 | 
        List<Host> hosts = mobileService.getHosts();  
 | 
        return R.ok(hosts);  
 | 
    }  
 | 
  
 | 
    /**  
 | 
     * 入库单据--扫码获取订单明细列表  
 | 
     * @param barcode  
 | 
     * @return  
 | 
     */  
 | 
    @ApiOperation("入库单据--扫码获取订单明细列表")  
 | 
    @PostMapping("/mat/auth")  
 | 
    public R getProductForBarcode(@RequestBody Map<String, String> barcode) {  
 | 
        if (Objects.isNull(barcode)) {  
 | 
            return  R.error("参数不能为空!!");  
 | 
        }  
 | 
        if (StringUtil.isNullOrEmpty(barcode.get("barcode"))) {  
 | 
            return  R.error("条码不能为空!!");  
 | 
        }  
 | 
        Order order =  orderService.selectByBarcode(barcode.get("barcode"));  
 | 
  
 | 
        if (Objects.isNull(order)) {  
 | 
            return R.error("订单不存在!");  
 | 
        }  
 | 
  
 | 
  
 | 
  
 | 
        List<OrderInfoDto> orders = orderService.getDetlForOrderId(order.getId() , barcode.get("matnr"));  
 | 
  
 | 
        return R.ok(orders);  
 | 
    }  
 | 
  
 | 
    /**  
 | 
     * 平库上架  
 | 
     * PDA扫码入库  
 | 
     * 1. 绑定库位号与拖盘码  
 | 
     * 2. 库位置为在库状态  
 | 
     * @return  
 | 
     */  
 | 
    @PostMapping("/matnr/in/barcode")  
 | 
    public R pakinToStock(@RequestBody PakinOnShelvesParams shelvesParams) {  
 | 
        if (StringUtil.isNullOrEmpty(shelvesParams.getBarcode())) {  
 | 
            return R.error("拖盘码不能为空!!");  
 | 
        }  
 | 
        if (StringUtil.isNullOrEmpty(shelvesParams.getLoc())) {  
 | 
            return R.error("库位不能为空!!");  
 | 
        }  
 | 
        //TODO 绑定库位,添加库位明细  
 | 
        if (mobileService.pakinToStock(shelvesParams)) {  
 | 
            return R.ok("入库成功!!");  
 | 
        } else {  
 | 
            return R.error("入库失败!!");  
 | 
        }  
 | 
  
 | 
    }  
 | 
  
 | 
    /**  
 | 
     * 获取拖盘码绑定商品  
 | 
     * @return  
 | 
     */  
 | 
    @GetMapping("/barcode/matnr/{code}")  
 | 
    public R getAllGoods(@PathVariable String code) {  
 | 
        if (StringUtil.isNullOrEmpty(code)) {  
 | 
            return R.error("托盘码不能为空!!");  
 | 
        }  
 | 
  
 | 
        String str = code.trim();  
 | 
        // CUT库条码T开头,截取后10位  
 | 
        if (str.charAt(0) == 'T') {  
 | 
            code = str.substring(str.length() - 10);  
 | 
        }  
 | 
  
 | 
        List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, code));  
 | 
  
 | 
        return R.ok(waitPakins);  
 | 
    }  
 | 
  
 | 
  
 | 
    @GetMapping("/login.action")  
 | 
    @ManagerAuth(value = ManagerAuth.Auth.NONE, memo = "登录")  
 | 
    public R loginAction(String username, String password, Boolean wms) {  
 | 
        if (username.equals("super") && password.equals(Cools.md5(superPwd))) {  
 | 
            Map<String, Object> res = new HashMap<>();  
 | 
            res.put("username", username);  
 | 
            res.put("token", Cools.enToken(System.currentTimeMillis() + username, superPwd));  
 | 
            return R.ok(res);  
 | 
        }  
 | 
        LambdaQueryWrapper<User> userWrapper = new LambdaQueryWrapper<>();  
 | 
        userWrapper.eq(User::getUsername, username);  
 | 
        User user = userService.getOne(userWrapper);  
 | 
        if (Cools.isEmpty(user)) {  
 | 
            return R.parse(CodeRes.USER_10001);  
 | 
        }  
 | 
        if (user.getStatus() != 1) {  
 | 
            return R.parse(CodeRes.USER_10002);  
 | 
        }  
 | 
        if (!user.getPassword().equals(password)) {  
 | 
            return R.parse(CodeRes.USER_10003);  
 | 
        }  
 | 
        String system = null;//登陆系统  
 | 
        if (Objects.isNull(wms) || wms) {  
 | 
            system = String.valueOf(LoginSystemType.WMS);  
 | 
        }else {  
 | 
            system = String.valueOf(LoginSystemType.WCS);  
 | 
        }  
 | 
        String token = Cools.enToken(System.currentTimeMillis() + username, user.getPassword());  
 | 
        userLoginService.remove(new LambdaQueryWrapper<UserLogin>().eq(UserLogin::getUserId, user.getId()).eq(UserLogin::getSystemCode, system));  
 | 
        UserLogin userLogin = new UserLogin();  
 | 
        userLogin.setUserId(user.getId());  
 | 
        userLogin.setToken(token);  
 | 
        userLogin.setCreateTime(new Date());  
 | 
        userLogin.setSystemCode(system);  
 | 
//        if (user.getRoleId() == 2) {  
 | 
//            userLogin.setHostId(hostService.getTop1().getId());  
 | 
//        }  
 | 
        userLoginService.save(userLogin);  
 | 
        Map<String, Object> res = new HashMap<>();  
 | 
        res.put("username", user.getUsername());  
 | 
        res.put("token", token);  
 | 
        return R.ok(res);  
 | 
    }  
 | 
  
 | 
  
 | 
    /**  
 | 
     * @author Ryan  
 | 
     * @date 2025/6/25  
 | 
     * @description: 组托  
 | 
     * @version 1.0  
 | 
     */  
 | 
    @PostMapping("/comb/auth")  
 | 
    public  R combMats(@RequestBody BatchMergeOrdersParam ordersParam) {  
 | 
        if (StringUtil.isNullOrEmpty(ordersParam.getOrderNo())) {  
 | 
            return R.error("订单号不能为空!!");  
 | 
        }  
 | 
        if (StringUtil.isNullOrEmpty(ordersParam.getMergeNo())) {  
 | 
            return R.error("托盘码不能为空!!");  
 | 
        }  
 | 
        if (Collections.isEmpty(ordersParam.getOrderDetls())) {  
 | 
            return R.error("订单明细不能为空!!");  
 | 
        }  
 | 
  
 | 
        String str = ordersParam.getMergeNo().trim();  
 | 
        // CTU库条码T开头,截取后10位  
 | 
        if (str.charAt(0) == 'T') {  
 | 
            ordersParam.setMergeNo(str.substring(str.length() - 10));  
 | 
        }  
 | 
        if (str.startsWith("PK")) {  
 | 
            ordersParam.setInType(OrderType.PK_IN_ORDER.id);  
 | 
        } else {  
 | 
            ordersParam.setInType(OrderType.UTC_OUT_ORDER.id);  
 | 
        }  
 | 
       boolean result = mobileService.batchMergeOrders(ordersParam);  
 | 
        if (result) {  
 | 
            return R.ok("组托成功!!");  
 | 
        } else {  
 | 
            return R.ok("组托失败!!");  
 | 
        }  
 | 
    }  
 | 
  
 | 
    /**  
 | 
     * 获取拣货明细  
 | 
     * @return  
 | 
     */  
 | 
    @GetMapping("/pick/detl/{code}")  
 | 
    public R pickDetlByPickNo(@PathVariable String code) {  
 | 
        if (StringUtil.isNullOrEmpty(code)) {  
 | 
            return R.error("拣货单据编码不能为空!!");  
 | 
        }  
 | 
        PickSheetDetlDto pickSheetDetls =  mobileService.outFlatSheet(code);  
 | 
  
 | 
        return R.ok(pickSheetDetls);  
 | 
    }  
 | 
  
 | 
    /**  
 | 
     * 拣货单确认出库  
 | 
     * @param code  
 | 
     * @return  
 | 
     */  
 | 
    @GetMapping("/pick/confirm/{code}")  
 | 
    public R confirmOutFlatSheet(@PathVariable String code) {  
 | 
        if (StringUtil.isNullOrEmpty(code)) {  
 | 
            return R.error("拣货单据编码不能为空!!");  
 | 
        }  
 | 
        if (!mobileService.confirmFlatSheet(code)) {  
 | 
            return R.error("出库失败!!");  
 | 
        }  
 | 
        return R.ok("出库成功!!");  
 | 
    }  
 | 
  
 | 
  
 | 
    /**  
 | 
     * 获取播种位  
 | 
     * @return  
 | 
     */  
 | 
    @GetMapping("/pick/seed/locs")  
 | 
    public R seedLocs() {  
 | 
        List<CacheSite> sites = mobileService.getSeedLocs();  
 | 
        return R.ok(sites);  
 | 
    }  
 | 
  
 | 
    /**  
 | 
     * 订单绑定站点  
 | 
     * @param param  
 | 
     * @return  
 | 
     */  
 | 
    @PostMapping("/pick/seed/bind")  
 | 
    public R bindLoc(@RequestBody Map<String, Object> param) {  
 | 
        if (Objects.isNull(param)) {  
 | 
            throw new CoolException("请求参数不能为空!!");  
 | 
        }  
 | 
        if (Objects.isNull(param.get("barcode"))) {  
 | 
            throw new CoolException("播种墙容器编码不能为空");  
 | 
        }  
 | 
        if (Objects.isNull(param.get("orderNo"))) {  
 | 
            throw new CoolException("订单编号不能为空!!");  
 | 
        }  
 | 
        if (Objects.isNull(param.get("siteNo"))) {  
 | 
            throw new CoolException("播种站点不能为空!!");  
 | 
        }  
 | 
        if (Objects.isNull(param.get("type"))) {  
 | 
            throw new CoolException("参数类型不能为空!!");  
 | 
        }  
 | 
       boolean result =  mobileService.bindOrderBySite(param);  
 | 
        if (result) {  
 | 
            return R.ok("绑定成功!!");  
 | 
        } else {  
 | 
            return R.error("绑定失败!!");  
 | 
        }  
 | 
    }  
 | 
  
 | 
  
 | 
    @ApiOperation("获取库位详细")  
 | 
    @GetMapping("/flat/transfer/{barcode}")  
 | 
    public R getDetlsBycode(@PathVariable String barcode) {  
 | 
        if (Objects.isNull(barcode)) {  
 | 
            return R.error("参数不能为空!!");  
 | 
        }  
 | 
        return R.ok().add(mobileService.getDetlsByCode(barcode));  
 | 
    }  
 | 
  
 | 
  
 | 
    @ApiOperation("平板转移")  
 | 
    @PostMapping("/locs/transfer")  
 | 
    public R changeFlatBarcode(@RequestBody Map<String, String> param) {  
 | 
        if (Objects.isNull(param)) {  
 | 
            return R.error("参数不能为空!!");  
 | 
        }  
 | 
        if (Objects.isNull(param.get("barcode"))) {  
 | 
            return R.error("源库位不能为空!!");  
 | 
        }  
 | 
        if (Objects.isNull(param.get("tarCode"))) {  
 | 
            return R.error("目标库位不能为空!!");  
 | 
        }  
 | 
  
 | 
        return mobileService.transferLocs(param);  
 | 
    }  
 | 
  
 | 
    /**  
 | 
     * 获取发货订单明细  
 | 
     * @return  
 | 
     */  
 | 
    @PostMapping("/shipping/order/detl")  
 | 
    public R  getOrderDetl(@RequestBody Map<String, Object> params) {  
 | 
        if (Objects.isNull(params)) {  
 | 
            throw new CoolException("参数不能为空!!");  
 | 
        }  
 | 
        return mobileService.selectShippingDetl(params);  
 | 
    }  
 | 
  
 | 
  
 | 
    /**  
 | 
     * @author Ryan  
 | 
     * @date 2025/6/28  
 | 
     * @description: 获取推荐库位  
 | 
     * @version 1.0  
 | 
     */  
 | 
    @GetMapping("/recommend/locs")  
 | 
    public R getRecommend() {  
 | 
        return  mobileService.getRecommendLocs();  
 | 
    }  
 | 
  
 | 
  
 | 
    /**  
 | 
     * @author Ryan  
 | 
     * @date 2025/6/28  
 | 
     * @description: 查询物料信息  
 | 
     * @version 1.0  
 | 
     */  
 | 
    @GetMapping("/mats/search/{matnr}")  
 | 
    public R getMats(@PathVariable String matnr) {  
 | 
        return mobileService.getMatsByCode(matnr);  
 | 
    }  
 | 
  
 | 
  
 | 
    /**  
 | 
     * 确认发货单明细  
 | 
     * @return  
 | 
     */  
 | 
    @PostMapping("/shipping/confirm")  
 | 
    public R confirmShipping(@RequestBody List<ShippingOrderDetlDto> params) {  
 | 
        if (params.isEmpty()) {  
 | 
            throw new CoolException("发货单明细不能为空!!");  
 | 
        }  
 | 
  
 | 
        return mobileService.confirmShippingDetl(params);  
 | 
    }  
 | 
}  
 |