package thyyxxk.webserver.controller.medicine;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import thyyxxk.webserver.config.auth.PassToken;
import thyyxxk.webserver.entity.ResultVo;
import thyyxxk.webserver.entity.medicine.YpPartYljg;
import thyyxxk.webserver.entity.medicine.YpTableYljg;
import thyyxxk.webserver.entity.medicine.YpTopYljg;
import thyyxxk.webserver.service.medicine.YpTaoBaoService;

import java.util.Map;

/**
 * @ClassName YpCodgController
 * @Author hsh
 * @Date 2025/5/21 0021 14:50
 * @Version 1.0
 * @Description 药品淘宝应用接口
 **/
@RestController
@RequestMapping("/ypTaobao")
public class YpTaoBaoController {

    private final YpTaoBaoService ypTaoBaoService;

    public YpTaoBaoController(YpTaoBaoService ypTaoBaoService) {
        this.ypTaoBaoService = ypTaoBaoService;
    }

    /**
     * @Description 通过追溯码查询对应的上游企业出库单的单据号
     * @Author hsh
     * @param code 追溯码
     * @return map
     * @Date 2025/5/21 0021 15:11
     */
    @PassToken
    @GetMapping("/queryUpBillCode")
    public ResultVo<Map<String,Object>> queryUpBillCode(@RequestParam("code") String code){
        return ypTaoBaoService.queryUpBillCode(code);
    }

    /**
     * @Description 单码关联关系查询(查询大包装码对应的子码信息；注意：入参的大包装码必须在本企业的码上放心平台上传入库单后再调用本接口，才会返回子码信息)
     * @Author hsh
     * @param code 追溯码,多个码需要逗号拼接，最大10个码
     * @param desRefEntId 目标企业唯一标识（为哪个企业查询，一般与入参ref_ent_id一样）
     * @return map
     * @Date 2025/5/21 0021 16:26
     */
    @PassToken
    @GetMapping( "/queryRelation")
    public ResultVo<Map<String,Object>> queryRelation(@RequestParam("code") String code, @RequestParam("desRefEntId") String desRefEntId){
        return ypTaoBaoService.queryRelation(code, desRefEntId);
    }

    /**
     * @Description 通过企业名得到唯一标识ref_ent_id及企业ent_id
     * @Author hsh
     * @param entName 公司名称(全称)
     * @return map
     * @Date 2025/5/21 0021 16:56
     */
    @PassToken
    @GetMapping("/queryGetEntInfo")
    public ResultVo<Map<String,Object>> queryGetEntInfo(@RequestParam("entName") String entName){
        return ypTaoBaoService.queryGetEntInfo(entName);
    }
    
    /**
     * @Description 根据追溯码查询码信息
     * @Author hsh
     * @param codes 码列表(多个用","拼接，数量不能太多在1000个以下)
     * @return map
     * @Date 2025/5/21 0021 16:59
     */
    @PassToken
    @GetMapping( "/queryCodeDetail")
    public ResultVo<Map<String,Object>> queryCodeDetail(@RequestParam("codes") String codes){
        return ypTaoBaoService.queryCodeDetail(codes);
    }
    
    /**
     * @Description 医疗机构查询本企业上游企业出库单据信息
     * @Author hsh
     * @param yljg TOP平台医药机构查询入参实体类
     * @return map
     * @Date 2025/5/21 0021 17:41
     */
    @PassToken
    @PostMapping("/queryYljgListUpOut")
    public ResultVo<Map<String,Object>> queryYljgListUpOut(@RequestBody YpTopYljg yljg){
        return ypTaoBaoService.queryYljgListUpOut(yljg);
    }

    /**
     * @Description 查询上游出库单明细(带追溯码信息)
     * @Author hsh
     * @param billCode 单据编码
     * @param fromRefUserId 发货企业renEntId
     * @param toRefUserId 收货企业refEntId
     * @return map
     * @Date 2025/5/21 0021 17:50
     */
    @PassToken
    @GetMapping( "/queryYljgListUpOutDetail")
    public ResultVo<Map<String,Object>> queryYljgListUpOutDetail(@RequestParam("billCode") String billCode,
                                                       @RequestParam("fromRefUserId") String fromRefUserId,
                                                       @RequestParam("toRefUserId") String toRefUserId){
        return ypTaoBaoService.queryYljgListUpOutDetail(billCode, fromRefUserId, toRefUserId);
    }

    /**
     * @Description 根据企业唯一标识查看企业详细信息
     * @Author hsh
     * @param destRefEntId 准备要查询的企业唯一标识（返回该唯一标识企业的详细信息）
     * @return map
     * @Date 2025/5/21 0021 18:14
     */
    @PassToken
    @GetMapping( "/queryGetByRefEntId")
    public ResultVo<Map<String,Object>> queryGetByRefEntId(@RequestParam("destRefEntId") String destRefEntId){
        return ypTaoBaoService.queryGetByRefEntId(destRefEntId);
    }

    /**
     * @Description 查询药品目录信息
     * @Author hsh
     * @param yljg 药品信息
     * @return map
     * @Date 2025/5/21 0021 19:56
     */
    @PassToken
    @PostMapping( "/queryYljgDrugTable")
    public ResultVo<Map<String,Object>> queryYljgDrugTable(@RequestBody YpTableYljg yljg){
        return ypTaoBaoService.queryYljgDrugTable(yljg);
    }

    /**
     * @Description 查询药品信息
     * @Author hsh
     * @param yljg 药品信息
     * @return map
     * @Date 2025/5/21 0021 19:58
     */
    @PassToken
    @PostMapping( "/queryGetDrugList")
    public ResultVo<Map<String,Object>> queryGetDrugList(@RequestBody YpTableYljg yljg){
        return ypTaoBaoService.queryGetDrugList(yljg);
    }

    /**
     * @Description 查询往来单位列表
     * @Author hsh
     * @param yljg 往来单位查询实体类
     * @return map
     * @Date 2025/5/22 0022 11:48
     */
    @PassToken
    @PostMapping("/queryListParts")
    public ResultVo<Map<String,Object>> queryListParts(@RequestBody YpPartYljg yljg){
        return ypTaoBaoService.queryListParts(yljg);
    }

    @PassToken
    @PostMapping("/uploadinoutbill")
    public ResultVo<Map<String,Object>> uploadinoutbill(@RequestParam String fromEndId, @RequestParam String traceCodes){
        return ypTaoBaoService.uploadinoutbill(fromEndId, traceCodes);
    }

    /**
     * 通过大包装（箱）追溯码查询大包装里的小追溯码
     * @param parentCode
     * @return
     */
    @PassToken
    @GetMapping("/getCodeByParent")
    public ResultVo<Map<String,Object>> getCodeByParent(@RequestParam String parentCode){
        return ypTaoBaoService.getCodeByParent(parentCode);
    }

}
