封装在这里,
需要可以调用 CWFClient的接口
登录时注册 authenticator
用户名和密码从这个登录入口获取
private void validateLogin(TextField name, PasswordField password) throws IOException, URISyntaxException, InterruptedException {
uri = address.getText().equals("") ? "http://localhost:8400/" : "http://" + address.getText() + "/";
userSession.setAuthenticator(new Authenticator(name.getText(), password.getText()));
ResteasyWebTarget target = client.target(uri + "wms/user/current-user").queryParam("username", name.getText(), "password", password.getText()).register(new Authenticator(name.getText(), password.getText()));
Response response = target.request().get();
if (response.getStatus() == HttpStatus.SC_OK) {
log.info("user {} ", name.getText());
Stage stage = (Stage) cancel.getScene().getWindow();
stage.close();
Parent root = FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/print.fxml")),
null, null, (clazz) -> Main.applicationContext.getBean(clazz));
Stage printStage = new Stage();
printStage.setTitle("CWF");
printStage.initStyle(StageStyle.DECORATED);
printStage.setScene(new Scene(root, 900, 800));
printStage.setResizable(false);
printStage.show();
} else {
messageLabel.setText("用户名或密码错误!");
}
}
@Data
public class UserSession {
private String username;
private String password;
private Authenticator authenticator;
private CWFClient cwfClient;
public void onLogin() {
// ResteasyClient client = (ResteasyClient) ClientBuilder.newClient().register(authenticator);
// ResteasyWebTarget target = client.target(LoginController.uri);
// CWFClient proxy = target.proxy(CWFClient.class);
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm).build();
cm.setMaxTotal(200); // Increase max total connection to 200
cm.setDefaultMaxPerRoute(20); // Increase default max connection per route to 20
ApacheHttpClient43Engine engine = new ApacheHttpClient43Engine(httpClient);
ResteasyClient client = ((ResteasyClientBuilder) ClientBuilder.newBuilder()).httpEngine(engine).build();
// ResteasyWebTarget target = client.target(FULL_PATH);
// CWFClient proxy = target.proxy(CWFClient.class);
}
}
public class Authenticator implements ClientRequestFilter {
private final String user;
private final String password;
public Authenticator(String user, String password) {
this.user = user;
this.password = password;
}
public void filter(ClientRequestContext requestContext) {
MultivaluedMap<String, Object> headers = requestContext.getHeaders();
final String basicAuthentication = getBasicAuthentication();
headers.add("Authorization", basicAuthentication);
}
private String getBasicAuthentication() {
String token = this.user + ":" + this.password;
return "Basic " +
DatatypeConverter.printBase64Binary(token.getBytes(StandardCharsets.UTF_8));
}
}
@Path("/wms")
public interface CWFClient {
@GET
@Path("virtualBox/{boxNumber}/virtualOrders")
List<VirtualOrderPrintVO> getVirtualOrdersByBoxNumber(@PathParam("boxNumber") String boxNumber);
@POST
@Path("virtualBox/virtualOrder/{orderNumber}/confirmPrint")
void confirmPrint(@PathParam("orderNumber") String orderNumber);
@GET
@Path("virtualBox/{virtualBoxCode}/summary")
VirtualBoxSummary getSummaryBoxRecord(@PathParam("virtualBoxCode") String virtualBoxCode);
}
在service里进行调用
@Log4j2
@Service
public class CWFService {
@Autowired
private UserSession userSession;
public VirtualOrder findByOrderNumber( String scan) {
// 这里进行调用
List<VirtualOrderPrintVO> vo = userSession.getCwfClient().getVirtualOrdersByBoxNumber(scan);
VirtualOrder label = new VirtualOrder();
for (VirtualOrderPrintVO printVO : vo) {
label.setBoxCode(printVO.getBoxCode());
label.setOrderNumber(printVO.getOrderNumber());
label.setPrintTime(printVO.getPrintTime());
label.setTracking(printVO.getTracking());
label.setWeight(printVO.getWeight());
label.setShippingLabelFile(printVO.getShippingLabelFile());
}
return label;
}