package com.hzya.frame.plugin.cinvoice.assembler;

import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.hzya.frame.plugin.cinvoice.lexmis.entity.LexmiscivTrainticketEntity;

/**
 * @Description  200-电子发票（铁路电子客票）
 * @Author xiangerlin
 * @Date 2025/4/21 14:08
 **/
public class ElecTrainInvoiceAssembler implements ParamAssembler{

    private JSONObject jsonObject;

    public ElecTrainInvoiceAssembler(JSONObject jsonObject) {
        this.jsonObject = jsonObject;
    }

    /**
     * 组装参数
     *
     * @return
     */
    @Override
    public JSONObject assembleParam() {
        JSONObject param = new JSONObject();
        String trainInvoice = jsonObject.getString("trainInvoice");
        if (StrUtil.isNotEmpty(trainInvoice)){
            LexmiscivTrainticketEntity trainticketEntity = JSONObject.parseObject(trainInvoice, LexmiscivTrainticketEntity.class);
            if (null != trainticketEntity){
                // 1. 火车票号，必填
                param.put("hcph", trainticketEntity.getTT_CODE());
                // 2. 乘车日期，格式为 yyyy-MM-dd，必填
                param.put("ccrq", trainticketEntity.getTT_DATE());
                // 3. 乘车时间，格式为 HH:mm，非必填
                param.put("ccsj", trainticketEntity.getTT_TIME());
                // 4. 出发地，非必填
                param.put("cfd", trainticketEntity.getTT_FSTATION());
                // 5. 到达地，非必填
                param.put("ddd", trainticketEntity.getTT_TSTATION());
                // 6. 车次，非必填
                param.put("cc", trainticketEntity.getTT_NO());
                // 7. 乘车人姓名，非必填
                param.put("ccrxm", trainticketEntity.getTT_CUSTOMER());
                // 8. 身份证号，非必填
                param.put("sfzh", trainticketEntity.getTT_IDNO());
                // 9. 座位类型，非必填
                param.put("zwlx", trainticketEntity.getTT_CLASS());
                // 10. 金额，必填
                param.put("je", trainticketEntity.getTT_AMOUNT());
                // 11. 发票消费类型，非必填
                param.put("fpxflx", "");
                // 12. 序列号，非必填
                param.put("xlh", trainticketEntity.getTT_SERIALNO());
                // 13. 开票日期，格式为 yyyy-MM-dd，必填
                param.put("kprq", trainticketEntity.getTT_OUTDATE());
                // 14. 不含税金额，非必填
                param.put("bhsje", trainticketEntity.getTT_NOTAXAMOUNT());
                // 15. 税额，非必填
                param.put("se", trainticketEntity.getTT_TAXRATEAMOUNT());
                // 16. 税率，非必填
                param.put("slv", trainticketEntity.getTT_TAXRATE());
                // 17. 销方税号，非必填
                param.put("xfsh", "");
                // 18. 销方名称，非必填
                param.put("xfmc", "");
                // 19. 购方税号，非必填
                param.put("gfsh", trainticketEntity.getTT_BUYERTAXNO());
                // 20. 购方名称，非必填
                param.put("gfmc", trainticketEntity.getTT_BUYERNAME());
                // 21. 出发站拼音，非必填
                param.put("cfzpy", "");
                // 22. 到达站拼音，非必填
                param.put("ddzpy", "");
                // 23. 车厢，非必填
                param.put("cx", trainticketEntity.getTT_CARRIAGE());
                // 24. 厢位，非必填
                param.put("xw", trainticketEntity.getTT_SEAT());
                // 25. 电子客票号，非必填
                param.put("dzkph", trainticketEntity.getTT_SERIALNO());
                // 26. 发票明细信息，非必填，这里先创建一个空的 JSONArray
                JSONArray qdHcpInfosArray = new JSONArray();
                param.put("qdHcpInfos", qdHcpInfosArray);
                JSONObject qdHcpInfo = new JSONObject();
                // 27. 税收分类编码，非必填
                qdHcpInfo.put("ssflbm", "");
                // 28. 项目名称，非必填
                qdHcpInfo.put("xmmc", "");
                // 29. 规格型号，非必填
                qdHcpInfo.put("ggxh", "");
                // 30. 单位，非必填
                qdHcpInfo.put("dw", "");
                // 31. 数量，非必填
                qdHcpInfo.put("sl", "");
                // 32. 单价，非必填
                qdHcpInfo.put("dj", "");
                // 33. 金额，非必填
                qdHcpInfo.put("je", trainticketEntity.getTT_AMOUNT());
                // 34. 税率，非必填
                qdHcpInfo.put("slv", trainticketEntity.getTT_TAXRATE());
                // 35. 税额，非必填
                qdHcpInfo.put("se", trainticketEntity.getTT_TAXRATEAMOUNT());
            }
        }
        return param;
    }
}
