package com.starcharge.api; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONObject; import com.ihidea.component.api.v2.BaseResponse; import com.ihidea.core.util.JSONUtilsEx; import com.starcharge.api.remote.DataSyncRemote; import com.starcharge.api.remote.OrderInformRemote; import com.starcharge.wios.auth.dao.model.Account; import com.starcharge.wios.auth.service.AccountService; import com.starcharge.wios.auth.vo.LoginInfo; import com.starcharge.wios.bo.OemBo; import com.starcharge.wios.bo.api.BaseInfo; import com.starcharge.wios.bo.api.OperateLog; import com.starcharge.wios.bo.api.ResponseMessage; import com.starcharge.wios.bo.api.WallBoxInstallLinks; import com.starcharge.wios.dao.entity.Order; import com.starcharge.wios.query.*; import com.starcharge.wios.result.WorkTaskVO; import com.starcharge.wios.service.OemService; import com.starcharge.wios.service.OrderService; import com.starcharge.wios.utils.HttpUtil; import com.starcharge.wios.vo.OemVo; import com.starcharge.wios.vo.TaskVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.compress.utils.Lists; import org.apache.commons.lang.StringUtils; import org.apache.poi.ss.formula.functions.T; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import java.nio.charset.Charset; import java.util.*; /** * 对外接口 * * @author tzx */ @RestController @RequestMapping("api2/external/") @Api(tags = "对外接口") public class OrderApi { public static final Logger logger = LoggerFactory.getLogger(OrderApi.class); @Autowired private OrderService orderService; @Autowired private DataSyncRemote dataSyncRemote; @Autowired private OemService oemService; @Autowired private AccountService accountService; @Autowired private OrderInformRemote orderInformRemote; /** * 获取token * * @param serviceCode 社会唯一编号 * @param servicePhone 手机号 * @return */ @PostMapping(value = "/getToken") @ApiOperation(value = "获取token") public BaseResponse<Object> getToken(String serviceCode, String servicePhone) { if (StringUtils.isBlank(serviceCode)) { throw new RuntimeException("社会唯一编号不能为空"); } if (StringUtils.isBlank(servicePhone)) { throw new RuntimeException("手机号不能为空"); } OemBo condition = new OemBo(); condition.setOrganizationCode(serviceCode); condition.setAccount(servicePhone); List<OemVo> list = oemService.getList(condition); if (list == null || list.isEmpty()) { throw new RuntimeException("无对应企业信息"); } String token = DigestUtils.md5Hex(serviceCode + servicePhone); OemVo oemVo = list.get(0); OemBo oem = new OemBo(); BeanUtils.copyProperties(oemVo, oem); oem.setToken(token); oemService.update(oem); return new BaseResponse<>(token); } /** * 添加订单 * * @param orderQuery * @return */ @PostMapping(value = "order/add") @ApiOperation(value = "添加订单信息") public BaseResponse<Object> orderAdd(HttpServletRequest request, OrderQuery orderQuery) { String token = request.getHeader("token"); if (StringUtils.isBlank(token)) { throw new RuntimeException("token不能为空"); } OemBo condition = new OemBo(); condition.setToken(token); List<OemVo> list = oemService.getList(condition); if (list.size() == 0) { throw new RuntimeException("token错误"); } logger.info("接收参数[orderAdd]orderQuery:{}", JSONUtilsEx.serialize(orderQuery)); Order order = new Order(); BeanUtils.copyProperties(orderQuery, order); orderService.add(order); return new BaseResponse<>(); } /** * 订单列表 * * @param request * @param orderNo * @param pageNo * @param pageSize * @return */ @PostMapping(value = "order/list") @ApiOperation(value = "订单详情") public BaseResponse<Object> orderLists(HttpServletRequest request, String orderNo, String pageNo, String pageSize) { String token = request.getHeader("token"); if (StringUtils.isBlank(token)) { throw new RuntimeException("token不能为空"); } BaseResponse<LoginInfo> loginInfo = dataSyncRemote.accountLogin("18888888888", "123456"); if (loginInfo.success()) { token = loginInfo.getData().getToken(); } /*OemBo condition = new OemBo(); condition.setToken(token); List<OemVo> oemVos = oemService.getList(condition); if (oemVos.size() == 0) { throw new RuntimeException("token错误"); }*/ logger.info("接收参数[orderLists]orderNo,pageNo,pageSize:{},{},{}", orderNo, pageNo, pageSize); List<WallBoxInstallLinks> list = Lists.newArrayList(); CamsOrderQo camsOrderQo = new CamsOrderQo(); //camsOrderQo.setId(orderNo); camsOrderQo.setPageIndex(Integer.parseInt(pageNo)); camsOrderQo.setPageSize(Integer.parseInt(pageSize)); camsOrderQo.setMenuId("1002"); camsOrderQo.setIsPaged(true); camsOrderQo.setType(1); ResponseMessage<WorkTaskVO> data = dataSyncRemote.getWorkTask(token,camsOrderQo); List<Map<String, Object>> orderList = new ArrayList<>(); if(data.getStatus()==0){ orderList = data.getData().getTaskList(); } for (Map<String,Object> order : orderList) { BaseInfo baseInfo = new BaseInfo(); WallBoxInstallLinks wallBoxInstallLinks = new WallBoxInstallLinks(); //基本信息 ResponseMessage<Map<String, Object>> orderInfoData = dataSyncRemote.getOrderInfo(token,order.get("workId").toString(),null); if(orderInfoData.getData()!=null){ Map<String, Object> orderInfo = orderInfoData.getData(); baseInfo.setSubmitInstallStatus(isNull(orderInfo.get("expandStatus"))); baseInfo.setDealer(isNull(orderInfo.get("oemAgentInfo"))); baseInfo.setModel(isNull(orderInfo.get("vehicleModel"))); baseInfo.setVin(isNull(orderInfo.get("vehicleChassisNo"))); } //勘测详情 ResponseMessage<Map<String, Object>> surveyData = dataSyncRemote.getOrderInfo(token,order.get("workId").toString(),1); if(surveyData.getData()!=null){ Map<String, Object> survey = surveyData.getData(); baseInfo.setColumnFlag(isNull(survey.get("needErectPile"))); } //首联详情 ResponseMessage<Map<String, Object>> firstData = dataSyncRemote.getConnectInfo(token,order.get("workId").toString()); if(firstData.getData()!=null){ Map<String, Object> first = firstData.getData(); baseInfo.setOuterInnerFlag(isNull(first.get("installPosition"))); baseInfo.setSubmitInstallFlag(isNull(first.get("electricExpand"))); } //安装详情 ResponseMessage<Map<String, Object>> installData = dataSyncRemote.getOrderInfo(token,order.get("workId").toString(),2); if(surveyData.getData()!=null){ Map<String, Object> install = installData.getData(); baseInfo.setCustomerRate(isNull(install.get("clientRate"))); baseInfo.setElectronWorker(isNull(install.get("installStaffName"))); baseInfo.setPileSn(isNull(install.get("wallboxNo"))); baseInfo.setLineLength(isNull(install.get("realCableMeter"))); } baseInfo.setAdditionalAmount(""); baseInfo.setStatusLabel(""); baseInfo.setRemarks(""); baseInfo.setCountOfTestRefuse(""); baseInfo.setCountOfInstallRefuse(""); baseInfo.setCloseOrderReason(""); baseInfo.setOrderNo(isNull(order.get("workId"))); baseInfo.setCarCompanyOrderNo(isNull(order.get("outOrderId"))); baseInfo.setCurrentStage(isNull(order.get("currentNode"))); baseInfo.setOrderStatus(isNull(order.get("status"))); baseInfo.setTimeoutType(isNull(order.get("overtimeType"))); baseInfo.setOrderSource(isNull(order.get("orderSource"))); baseInfo.setCreateDate(isNull(order.get("createTime"))); baseInfo.setOrderRunTime(isNull(order.get("orderPeriod"))); baseInfo.setRemainingTime(isNull(order.get("processTime"))); baseInfo.setCurrentNodeTime(isNull(order.get("currentStartTime"))); baseInfo.setCarFactory(isNull(order.get("oemName"))); baseInfo.setRegionId(isNull(order.get("area"))); baseInfo.setArea(isNull(order.get("area"))); baseInfo.setProvince(isNull(order.get("area"))); baseInfo.setCity(isNull(order.get("area"))); baseInfo.setAddress(isNull(order.get("address"))); baseInfo.setCarOwnerName(isNull(order.get("userName"))); baseInfo.setCarOwnerTel(isNull(order.get("userPhone"))); baseInfo.setPilePackage(isNull(order.get("packType"))); baseInfo.setPileBrand(isNull(order.get("wallboxModel"))); baseInfo.setBeforeSaleTestFlag(isNull(order.get("surveyBeforeSaleEnable")).equals("是")?"1":isNull(order.get("surveyBeforeSaleEnable")).equals("否")?"0":""); baseInfo.setInstallServiceCompany(isNull(order.get("installSupplierName"))); // baseInfo.setParkNo("车位号"); // baseInfo.setParkStatus("车位状态"); // baseInfo.setInvoiceDate("发票日期"); // baseInfo.setPileModel("墙盒型号"); // baseInfo.setDealerName("经销商名称"); // baseInfo.setDealerContactName("经销商联系人"); // baseInfo.setDealerContactTel("经销商联系方式"); // baseInfo.setHandlerFlag("是否需要人工派单"); // baseInfo.setInvoiceNo("发票号"); // baseInfo.setLongitude("经度"); // baseInfo.setLatitude("纬度"); // baseInfo.setMoveFlag("是否为移桩订单"); // baseInfo.setParkEnv("车位环境:地下"); wallBoxInstallLinks.setBaseInfo(baseInfo); List<OperateLog> logs = getOperateLogList(); wallBoxInstallLinks.setOperateLogList(logs); wallBoxInstallLinks.setExtentInfo(null); list.add(wallBoxInstallLinks); } return new BaseResponse<>(list); } private String isNull(Object val) { if (val == null) { return ""; } else { return val.toString(); } } /** * 获取墙盒信息 * * @param request * @param wallBoxNo * @return */ @PostMapping(value = "order/wallBoxInfo") @ApiOperation(value = "获取墙盒信息") public BaseResponse<Object> orderAdd(HttpServletRequest request, String wallBoxNo) { String token = request.getHeader("token"); if (StringUtils.isBlank(token)) { throw new RuntimeException("token不能为空"); } OemBo condition = new OemBo(); condition.setToken(token); List<OemVo> oemVos = oemService.getList(condition); if (oemVos.size() == 0) { throw new RuntimeException("token错误"); } Map<String, Object> map = new HashMap<>(); map.put("id", "CA20210902093738sh010"); map.put("installId", "CA20210902093738"); map.put("userName", "王林(李先生) "); map.put("userPhone", "13820005759"); map.put("outOrderId", "V2109020016380"); map.put("installSupplierId", 3); map.put("installSupplierName", "服务商-空灵科技"); return new BaseResponse<>(map); } private static List<OperateLog> getOperateLogList() { List<OperateLog> logs = Lists.newArrayList(); for (int b = 0; b <= 2; b++) { OperateLog operateLog = new OperateLog(); operateLog.setOperateNode("操作节点"); operateLog.setOperator("操作人"); operateLog.setStartTime("开始时间:yyyy-MM-dd HH:mm:ss"); operateLog.setEndTime("完成时间:yyyy-MM-dd HH:mm:ss"); operateLog.setResidentTime("停留时长"); operateLog.setOperateRecord("操作记录"); logs.add(operateLog); } return logs; } /** * 取消订单 * * @param orderId * @param invoiceTimeStr * @return */ @PostMapping(value = "order/cancel") @ApiOperation(value = "取消订单") public BaseResponse<Object> orderCancel(HttpServletRequest request, String orderId, String closeReason, String invoiceTimeStr) { String token = request.getHeader("token"); if (StringUtils.isBlank(token)) { throw new RuntimeException("token不能为空"); } OemBo condition = new OemBo(); condition.setToken(token); List<OemVo> oemVos = oemService.getList(condition); if (oemVos.size() == 0) { throw new RuntimeException("token错误"); } logger.info("接收参数[orderCancel]取消订单号:{}", orderId); orderService.closeOrder(orderId, closeReason); return new BaseResponse<>(); } /** * 新增维修单 * * @param request * @param repairOrderQuery * @return */ @PostMapping(value = "repairOrder/add") @ApiOperation(value = "新增维修单") public BaseResponse<Object> repairOrderAdd(HttpServletRequest request, RepairOrderQuery repairOrderQuery) { String token = request.getHeader("token"); if (StringUtils.isBlank(token)) { throw new RuntimeException("token不能为空"); } OemBo condition = new OemBo(); condition.setToken(token); List<OemVo> oemVos = oemService.getList(condition); if (oemVos.size() == 0) { throw new RuntimeException("token错误"); } logger.info("接收参数[repairOrderAdd]order:{}", JSONUtilsEx.serialize(repairOrderQuery)); // Map<String, Object> map = new HashMap<>(); // map.put("id", "CA20210902093738sh010"); // map.put("installId", "CA20210902093738"); // map.put("userName", "王林(李先生) "); // map.put("userPhone", "13820005759"); // map.put("outOrderId", "V2109020016380"); // map.put("installSupplierId", 3); // map.put("installSupplierName", "服务商-空灵科技"); return new BaseResponse<>(); } /** * 维修单列表 * * @param request * @param orderNo * @param pageNo * @param pageSize * @return */ @PostMapping(value = "repairOrder/list") @ApiOperation(value = "维修单详情") public BaseResponse<Object> repairOrderList(HttpServletRequest request, String orderNo, Integer pageNo, Integer pageSize) { String token = request.getHeader("token"); if (StringUtils.isBlank(token)) { throw new RuntimeException("token不能为空"); } OemBo condition = new OemBo(); condition.setToken(token); List<OemVo> oemVos = oemService.getList(condition); if (oemVos.size() == 0) { throw new RuntimeException("token错误"); } String ssoToken = ""; // 获取 sso-token Integer accountId = oemVos.get(0).getWbAccountId(); // ssoToken = accountService.getReTokenByAccountId(accountId); // 模拟登录 Account account = accountService.selectByPrimaryKey(accountId); BaseResponse<LoginInfo> loginInfo = dataSyncRemote.accountLogin("18888888888", "123456"); if (loginInfo.success()) { ssoToken = loginInfo.getData().getToken(); System.out.println("Token___:" + ssoToken); logger.info("接收参数[repairOrderList]orderNo,pageNo,pageSize:{},{},{}", orderNo, pageNo, pageSize); FlowQuery query = new FlowQuery(); query.setIsPaged(true); query.setPageSize(pageNo==null?1:pageNo); query.setPageIndex(pageSize==null?10:pageSize); ResponseMessage<TaskVo> obj = dataSyncRemote.toWmsSyncBill(ssoToken, query); if (obj.getStatus() == 0) { return new BaseResponse<>(obj.getData().getTaskList()); } return new BaseResponse<>(); } return new BaseResponse<>(); } /** * 维修单关闭 * * @return */ @PostMapping(value = "repairOrder/closeFlow") @ApiOperation(value = "维修单关闭") public BaseResponse<Object> closeFlow(HttpServletRequest request, String wordkerOrderId, String orderId, String endReason) { String token = request.getHeader("token"); if (StringUtils.isBlank(token)) { throw new RuntimeException("token不能为空"); } BaseResponse<LoginInfo> loginInfo = dataSyncRemote.accountLogin("18888888888", "123456"); if (loginInfo.success()) { token = loginInfo.getData().getToken(); } InstalltionEndreasonNotificationBO orderInformBO = new InstalltionEndreasonNotificationBO(); orderInformBO.setWordkerOrderId(wordkerOrderId); orderInformBO.setOrderId(orderId); orderInformBO.setEndReason(endReason); orderInformRemote.installtionEndreasonNotification(token, orderInformBO); Map<String,Object> res = new HashMap<>(); res.put("wordkerOrderId",wordkerOrderId); res.put("orderId",orderId); res.put("endReason",endReason); return new BaseResponse<>(res); } /** * 维修单关闭 * * @return */ @PostMapping(value = "repairOrder/submitFlow") @ApiOperation(value = "维修单完结") public BaseResponse<Object> submitFlow(HttpServletRequest request, String workorderId, String orderId) { String token = request.getHeader("token"); if (StringUtils.isBlank(token)) { throw new RuntimeException("token不能为空"); } BaseResponse<LoginInfo> loginInfo = dataSyncRemote.accountLogin("18888888888", "123456"); if (loginInfo.success()) { token = loginInfo.getData().getToken(); } OrderInformBO orderInformBO = new OrderInformBO(); orderInformBO.setWorkorderId(workorderId); orderInformBO.setOrderId(orderId); orderInformRemote.installtionStatusNotification(token,orderInformBO); Map<String,Object> res = new HashMap<>(); res.put("workorderId",workorderId); res.put("orderId",orderId); return new BaseResponse<>(res); } }