package com.zy.asrs.openapi.controller; 
 | 
  
 | 
import com.alibaba.fastjson.JSON; 
 | 
import com.alibaba.fastjson.JSONObject; 
 | 
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 
 | 
import com.zy.asrs.common.openapi.entity.HostKey; 
 | 
import com.zy.asrs.common.openapi.entity.dto.OrderListDto; 
 | 
import com.zy.asrs.common.openapi.entity.param.CreateMatParam; 
 | 
import com.zy.asrs.common.openapi.entity.param.GenerateOrderPakInParam; 
 | 
import com.zy.asrs.common.openapi.entity.param.GenerateOrderPakOutParam; 
 | 
import com.zy.asrs.common.openapi.entity.param.OrderListParam; 
 | 
import com.zy.asrs.common.openapi.service.ApiService; 
 | 
import com.zy.asrs.common.openapi.service.HostKeyService; 
 | 
import com.zy.asrs.common.web.BaseController; 
 | 
import com.zy.asrs.common.wms.entity.DocType; 
 | 
import com.zy.asrs.common.wms.entity.OrderSettle; 
 | 
import com.zy.asrs.framework.annotations.AppAuth; 
 | 
import com.zy.asrs.framework.common.BaseRes; 
 | 
import com.zy.asrs.framework.common.Cools; 
 | 
import com.zy.asrs.framework.common.R; 
 | 
import com.zy.asrs.framework.exception.CoolException; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.apache.commons.codec.digest.DigestUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.web.bind.annotation.*; 
 | 
  
 | 
import javax.servlet.http.HttpServletRequest; 
 | 
import java.util.List; 
 | 
import java.util.Map; 
 | 
  
 | 
@Slf4j 
 | 
@RestController 
 | 
@RequestMapping("/api") 
 | 
public class ApiController extends BaseController { 
 | 
  
 | 
    @Autowired 
 | 
    private HostKeyService hostKeyService; 
 | 
    @Autowired 
 | 
    private ApiService apiService; 
 | 
  
 | 
    @PostMapping("/test") 
 | 
    public R test() { 
 | 
        return R.ok(); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 生成入库订单 
 | 
     */ 
 | 
    @PostMapping("/generateOrderPakIn") 
 | 
    @AppAuth(memo = "生成入库订单") 
 | 
    public synchronized R generateOrderPakIn(@RequestHeader(required = true) String appkey, 
 | 
                                           @RequestBody GenerateOrderPakInParam param) { 
 | 
        HostKey hostKey = auth(appkey, param, true); 
 | 
        if (Cools.isEmpty(param)) { 
 | 
            return R.parse(BaseRes.PARAM); 
 | 
        } 
 | 
        if (Cools.isEmpty(param.getOrderNo())) { 
 | 
            return R.error("单据编号[orderNo]不能为空"); 
 | 
        } 
 | 
        if (Cools.isEmpty(param.getOrderType())) { 
 | 
            return R.error("单据类型[orderType]不能为空"); 
 | 
        } 
 | 
        if (Cools.isEmpty(param.getMats())) { 
 | 
            return R.error("物料[mats]不能为空"); 
 | 
        } 
 | 
        param.setHostId(hostKey.getHostId()); 
 | 
        apiService.generateOrderPakIn(param); 
 | 
        return R.ok(); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 生成出库订单 
 | 
     */ 
 | 
    @PostMapping("generateOrderPakOut") 
 | 
    @AppAuth(memo = "生成出库订单") 
 | 
    public synchronized R generateOrderPakOut(@RequestHeader(required = false) String appkey, 
 | 
                                            @RequestBody GenerateOrderPakOutParam param) { 
 | 
        HostKey hostKey = auth(appkey, param, true); 
 | 
        if (Cools.isEmpty(param)) { 
 | 
            return R.parse(BaseRes.PARAM); 
 | 
        } 
 | 
        if (Cools.isEmpty(param.getOrderNo())) { 
 | 
            return R.error("单据编号[orderNo]不能为空"); 
 | 
        } 
 | 
        if (Cools.isEmpty(param.getOrderType())) { 
 | 
            return R.error("单据类型[orderType]不能为空"); 
 | 
        } 
 | 
        if (Cools.isEmpty(param.getMats())) { 
 | 
            return R.error("物料[mats]不能为空"); 
 | 
        } 
 | 
        param.setHostId(hostKey.getHostId()); 
 | 
        apiService.generateOrderPakOut(param); 
 | 
        return R.ok(); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取订单类型 
 | 
     */ 
 | 
    @PostMapping("/getOrderType") 
 | 
    public synchronized R getOrderType(@RequestHeader(required = true) String appkey) { 
 | 
        auth(appkey, null, false); 
 | 
        List<DocType> list = apiService.getOrderType(); 
 | 
        return R.ok().add(list); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取订单状态列表 
 | 
     */ 
 | 
    @PostMapping("/getOrderStatus") 
 | 
    public synchronized R getOrderStatus(@RequestHeader(required = true) String appkey) { 
 | 
        auth(appkey, null, false); 
 | 
        List<OrderSettle> list = apiService.getOrderStatus(); 
 | 
        return R.ok().add(list); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 获取订单列表 
 | 
     */ 
 | 
    @PostMapping("/getOrderList") 
 | 
    public synchronized R getOrderList(@RequestHeader(required = true) String appkey, 
 | 
                                       @RequestBody(required = false) OrderListParam param) { 
 | 
        HostKey hostKey = auth(appkey, null, false); 
 | 
        List<OrderListDto> orderList = apiService.getOrderList(param, hostKey.getHostId()); 
 | 
        return R.ok().add(orderList); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 创建物料信息 
 | 
     */ 
 | 
    @PostMapping("/createMat") 
 | 
    public synchronized R createMat(@RequestHeader(required = true) String appkey, 
 | 
                                    @RequestBody(required = false) CreateMatParam param) { 
 | 
        HostKey hostKey = auth(appkey, param, true); 
 | 
        param.setHostId(hostKey.getHostId()); 
 | 
        int result = apiService.createMat(param); 
 | 
        return R.ok().add(result); 
 | 
    } 
 | 
  
 | 
    private HostKey auth(String appkey, Object obj, boolean signCheck) { 
 | 
        request.setAttribute("cache", obj); 
 | 
        if (Cools.isEmpty(appkey)) { 
 | 
            throw new CoolException("认证失败,请确认appKey无误!"); 
 | 
        } 
 | 
  
 | 
        HostKey hostKey = hostKeyService.getOne(new LambdaQueryWrapper<HostKey>().eq(HostKey::getAppKey, appkey)); 
 | 
        if (hostKey == null) { 
 | 
            throw new CoolException("认证失败,请确认appKey无误!"); 
 | 
        } 
 | 
  
 | 
        if (hostKey.getSignStatus() == 1 && signCheck) { 
 | 
            //需要进行签名校验 
 | 
            //创建自然排序map 
 | 
            JSONObject param = new JSONObject(true); 
 | 
            JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(obj)); 
 | 
            for (Map.Entry<String, Object> entry : jsonObject.entrySet()) { 
 | 
                if (!entry.getKey().equals("sign")) {//剔除sign 
 | 
                    param.put(entry.getKey(), entry.getValue()); 
 | 
                } 
 | 
            } 
 | 
            param.put("signKey", hostKey.getSignKey()); 
 | 
            String md5Hex = DigestUtils.md5Hex(param.toJSONString()); 
 | 
            if (!jsonObject.get("sign").toString().equals(md5Hex)) { 
 | 
                throw new CoolException("签名校验失败"); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        return hostKey; 
 | 
    } 
 | 
  
 | 
} 
 |