diff --git a/wx-applet-admin/Dockerfile b/wx-applet-admin/Dockerfile
new file mode 100644
index 0000000..c68d646
--- /dev/null
+++ b/wx-applet-admin/Dockerfile
@@ -0,0 +1,20 @@
+#FROM openjdk:8
+##adoptopenjdk/openjdk8:ubi
+#LABEL name="docker" version="1.0.0" author="wsnet" maintainer="wsnet@wsmis.com"
+#COPY target/com.haitongauto.rtosam.jar rtosam-image.jar
+#CMD ["java","-jar","rtosam-image.jar"]
+
+
+FROM openjdk:8
+#adoptopenjdk/openjdk8:ubi
+LABEL name="docker" version="1.0.0" author="wsnet" maintainer="wsnet@wsmis.com"
+COPY target/com.haitongauto.rtosam.jar rtosam-image.jar
+
+RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
+RUN echo 'Asia/Shanghai' >/etc/timezone
+EXPOSE 8083
+
+ENV PROFILES_OPTS=""
+ENV JAVA_OPTS=""
+
+ENTRYPOINT [ "sh", "-c","java $PROFILES_OPTS $JAVA_OPTS -jar rtosam-image.jar" ]
\ No newline at end of file
diff --git a/wx-applet-admin/Dockerfile.back b/wx-applet-admin/Dockerfile.back
new file mode 100644
index 0000000..e4bf506
--- /dev/null
+++ b/wx-applet-admin/Dockerfile.back
@@ -0,0 +1,5 @@
+FROM openjdk:8
+#adoptopenjdk/openjdk8:ubi
+LABEL name="docker" version="1.0.0" author="wsnet" maintainer="wsnet@wsmis.com"
+COPY target/com.haitongauto.rtosam.jar rtosam-image.jar
+CMD ["java","-jar","rtosam-image.jar"]
\ No newline at end of file
diff --git a/wx-applet-admin/pom.xml b/wx-applet-admin/pom.xml
new file mode 100644
index 0000000..42707f1
--- /dev/null
+++ b/wx-applet-admin/pom.xml
@@ -0,0 +1,247 @@
+
+
+
+ rtos-wh
+ org.example
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ wx-applet-admin
+
+
+ 1.8
+ 1.8
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+
+ org.mybatis.spring.boot
+ mybatis-spring-boot-starter
+ 2.2.2
+
+
+
+
+ org.postgresql
+ postgresql
+ 42.2.2
+
+
+ org.projectlombok
+ lombok
+ 1.18.20
+
+
+ com.alibaba
+ fastjson
+ 1.2.7
+
+
+ com.lowagie
+ itext
+ 2.0.8
+
+
+ org.apache.pdfbox
+ pdfbox
+ 2.0.19
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ 2.6.6
+
+
+
+
+ com.github.pagehelper
+ pagehelper-spring-boot-starter
+ 1.4.2
+
+
+ com.github.pagehelper
+ pagehelper
+ 5.3.0
+
+
+
+ com.bestvike
+ linq
+ 3.1.0
+
+
+
+ org.example
+ models
+ 1.0-SNAPSHOT
+
+
+ org.example
+ utils
+ 1.0-SNAPSHOT
+
+
+ org.example
+ mapper
+ 1.0-SNAPSHOT
+
+
+ org.example
+ interfaces
+ 1.0-SNAPSHOT
+
+
+
+ com.nuzar
+ nuzar-security
+ 2.6.14.10-SNAPSHOT
+
+
+
+
+
+ com.nuzar
+ rtops-openapi-client
+ 1.0-SNAPSHOT
+
+
+
+ com.nuzar
+ nuzar-security
+ 2.6.14.10-SNAPSHOT
+
+
+
+ org.springframework.security
+ spring-security-web
+ 5.6.9
+
+
+
+ org.springframework.security
+ spring-security-config
+ 5.6.9
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-oauth2-resource-server
+ 2.6.14
+
+
+
+ org.springframework.boot
+ spring-boot-starter-oauth2-client
+ 2.6.14
+
+
+
+ org.springframework.security
+ spring-security-oauth2-resource-server
+ 5.6.9
+
+
+ org.springframework.security
+ spring-security-oauth2-client
+ 5.6.9
+
+
+
+ org.springframework.security
+ spring-security-core
+ 5.6.9
+
+
+ org.springframework.cloud
+ spring-cloud-starter-bootstrap
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-loadbalancer
+
+
+
+ top.jfunc.json
+ Json-Gson
+ 1.0
+
+
+ top.jfunc.json
+ Json-Gson
+ 1.0
+
+
+ top.jfunc.json
+ Json-Gson
+ 1.0
+
+
+ org.owasp.encoder
+ encoder
+ 1.2.3
+
+
+ org.apache.commons
+ commons-text
+ 1.9
+
+
+
+
+ com.haitongauto.rtosam
+
+
+ src/main/resources
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ 2.2.2.RELEASE
+
+
+
+ repackage
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 3.2.1
+
+
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wx-applet-admin/src/main/java/com/haitongauto/rtosam/ApplicationAppletAdmin.java b/wx-applet-admin/src/main/java/com/haitongauto/rtosam/ApplicationAppletAdmin.java
new file mode 100644
index 0000000..a83bff3
--- /dev/null
+++ b/wx-applet-admin/src/main/java/com/haitongauto/rtosam/ApplicationAppletAdmin.java
@@ -0,0 +1,23 @@
+package com.haitongauto.rtosam;
+
+import com.haitongauto.rtosam.job.FileDeleteJob;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+
+@MapperScan("com.haitongauto.mapper")
+@EnableFeignClients(basePackages = {"com.haitongauto.interfaces"})
+@SpringBootApplication(scanBasePackages = {"com.haitongauto.interfaces","com.haitongauto.rtosam"})
+public class ApplicationAppletAdmin {
+ /**
+ * 启动微信小程序后台管理系统服务
+ * @param args args
+ */
+ public static void main(String[] args){
+ SpringApplication.run(ApplicationAppletAdmin.class,args);
+ //启动文件删除定时任务
+ //FileDeleteJob fileDeleteJob=new FileDeleteJob();
+ //fileDeleteJob.doFileDeleteJob();
+ }
+}
diff --git a/wx-applet-admin/src/main/java/com/haitongauto/rtosam/InterceptorConfiguration.java b/wx-applet-admin/src/main/java/com/haitongauto/rtosam/InterceptorConfiguration.java
new file mode 100644
index 0000000..e005720
--- /dev/null
+++ b/wx-applet-admin/src/main/java/com/haitongauto/rtosam/InterceptorConfiguration.java
@@ -0,0 +1,49 @@
+package com.haitongauto.rtosam;
+
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * 拦截器的属性配置
+ *
+ */
+@Configuration
+@ConditionalOnClass(WebMvcConfigurer.class)
+public class InterceptorConfiguration implements WebMvcConfigurer {
+
+ @Autowired
+ private ObjectMapper objectMapper;
+
+ @PostConstruct
+ public void EnumObjectMapper() {
+ // 解决enum不匹配问题 默认值为false
+ objectMapper.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true);
+ }
+
+ /**
+ * 权限验证过滤器
+ * @return
+ */
+ @Bean
+ public PermInterceptor permInterceptor() {
+ return new PermInterceptor();
+ }
+
+
+ @Override
+ @ConditionalOnBean(PermInterceptor.class)
+ public void addInterceptors(InterceptorRegistry registry) {
+ // 拦截器
+ InterceptorRegistration registration = registry.addInterceptor(permInterceptor());
+ }
+}
\ No newline at end of file
diff --git a/wx-applet-admin/src/main/java/com/haitongauto/rtosam/PermInterceptor.java b/wx-applet-admin/src/main/java/com/haitongauto/rtosam/PermInterceptor.java
new file mode 100644
index 0000000..48b7e43
--- /dev/null
+++ b/wx-applet-admin/src/main/java/com/haitongauto/rtosam/PermInterceptor.java
@@ -0,0 +1,116 @@
+package com.haitongauto.rtosam;
+
+import com.haitongauto.interfaces.UsersApi;
+import com.haitongauto.models.ido.login.UserInfoRes;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.BeanFactory;
+import org.springframework.util.AntPathMatcher;
+import org.springframework.web.context.support.WebApplicationContextUtils;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * 权限过滤器
+ */
+public class PermInterceptor implements HandlerInterceptor {
+ public static final String[] SWAGGER_EXCLUDE_PATHS = {"/doc.html", "/swagger-resources/**", "/webjars/**", "/v2/**", "/favicon.ico", "/swagger-ui.htmL/**", "/health/ping"};
+
+ @Override
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+ String uri = request.getRequestURI();
+ AntPathMatcher antPathMatcher = new AntPathMatcher();
+ for (String p : SWAGGER_EXCLUDE_PATHS) {
+ if (antPathMatcher.match(p, uri)) {
+ return true;
+ }
+ }
+ //判断是否登录
+ String userId = "";
+ String username = "";
+ // 小程序mini-app, 客户平台customer,app端app,pad端pad,海通后台web
+ try {
+ BeanFactory factory = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext());
+ //老系统同步新系统 没有token(直接放过)
+// if (StringUtils.equalsAny(request.getRequestURI(), "/appointment/execTruckOrderNsFin")) {
+// return true;
+// }
+ UsersApi openApi = factory.getBean(UsersApi.class);
+ UserInfoRes info = openApi.getUserInfo().getData();
+ if (StringUtils.equalsIgnoreCase(info.getMediaType(), "customer") && StringUtils.equalsAny(request.getRequestURI()
+ , "/admin/AnnouncementInfo"
+ , "/admin/QueryOperateIntroductionBySort"
+ , "/admin/AnnouncementListForCondition"
+ )) {
+ return true;
+ }
+
+ if (StringUtils.equalsIgnoreCase(info.getMediaType(), "app")
+ || StringUtils.equalsIgnoreCase(info.getMediaType(), "pad")
+ || StringUtils.equalsIgnoreCase(info.getMediaType(), "web")) {
+ return true;
+ } else if (StringUtils.equalsIgnoreCase(info.getMediaType(), "mini-app")) {
+ response.setStatus(HttpServletResponse.SC_FORBIDDEN);
+ // 可以设置响应体
+ response.getWriter().write("Access Forbidden");
+ return false;
+ } else if (StringUtils.equalsIgnoreCase(info.getMediaType(), "customer")) {
+ response.setStatus(HttpServletResponse.SC_FORBIDDEN);
+ // 可以设置响应体
+ response.getWriter().write("Access Forbidden");
+ return false;
+ } else {
+ response.setStatus(HttpServletResponse.SC_FORBIDDEN);
+ // 可以设置响应体
+ response.getWriter().write("Access Forbidden");
+ }
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+// response.setStatus(HttpServletResponse.SC_FORBIDDEN);
+// // 可以设置响应体
+// response.getWriter().write("Access Forbidden");
+// return false;
+ }
+ return true;
+
+ }
+
+ @Override
+ public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
+ // UserContext.clear();
+ }
+
+
+ /**
+ * 判断是否有权限
+ * 1.从请求头中获取token
+ *
+ * 2.通过token从redis中获取当前登录对象(object)
+ *
+ * 3.通过对象查询数据库是否存在当前对象
+ *
+ * 4.获取登录对象的登录名 判断是否是(admin或者总经理)这两个账号拥有最高权限
+ *
+ * 5.判断是否被授权,(获取临时授权时设置的开始时间,结束时间,当前时间),
+ *
+ * 获取这个三个时间的时间戳,判断当前时间是否在开始时间和结束时间之间
+ *
+ * 如果开始时间和结束时间为空的话表示当前登录对象未被临时授权,会执行后面的 4,5,6,
+ *
+ * 如果有时间,但是当前时间不在这个时间段也会执行 4,5,6
+ *
+ * 如果有时间,并且当前时间在这个时间段之中,就会直接返回true
+ *
+ * 6.从请求头中获取当前接口的地址,
+ *
+ * 7.通过当前登录对象的id查询权限
+ *
+ * 8.判断当前登录对象的权限中是否包含当前接口的地址,如果包含,允许当前登录对象访问,如果不包含,则不允许当前登录人访问
+ * ————————————————
+ * 版权声明:本文为CSDN博主「原你是阳光(#`O′)」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
+ * 原文链接:https://blog.csdn.net/weixin_58696998/article/details/124663181
+ * @param request
+ * @return
+ */
+}
diff --git a/wx-applet-admin/src/main/java/com/haitongauto/rtosam/api/HeathCheckController.java b/wx-applet-admin/src/main/java/com/haitongauto/rtosam/api/HeathCheckController.java
new file mode 100644
index 0000000..64729ed
--- /dev/null
+++ b/wx-applet-admin/src/main/java/com/haitongauto/rtosam/api/HeathCheckController.java
@@ -0,0 +1,16 @@
+package com.haitongauto.rtosam.api;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/health")
+public class HeathCheckController {
+
+ @GetMapping("/ping")
+ public String ping() {
+ return "pong";
+ }
+
+}
\ No newline at end of file
diff --git a/wx-applet-admin/src/main/java/com/haitongauto/rtosam/api/admin/AnnouncementAdminController.java b/wx-applet-admin/src/main/java/com/haitongauto/rtosam/api/admin/AnnouncementAdminController.java
new file mode 100644
index 0000000..02b39d6
--- /dev/null
+++ b/wx-applet-admin/src/main/java/com/haitongauto/rtosam/api/admin/AnnouncementAdminController.java
@@ -0,0 +1,270 @@
+package com.haitongauto.rtosam.api.admin;
+
+import com.haitongauto.models.dto.AnnouncementsDto;
+import com.haitongauto.models.pojo.Announcement;
+import com.haitongauto.rtosam.service.admin.AnnouncementAdminService;
+import com.haitongauto.rtosam.service.admin.ResponseService;
+import com.haitongauto.rtosam.service.base.AnnouncementService;
+import com.haitongauto.models.dto.Pages;
+import com.github.pagehelper.PageInfo;
+import com.haitongauto.utils.StringHelper;
+import org.apache.commons.lang3.StringEscapeUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.*;
+
+
+/**
+ * 后台管理接口:公告管理
+ */
+@RestController
+@RequestMapping("/admin")
+public class AnnouncementAdminController {
+ @Autowired
+ ResponseService response;
+ @Autowired
+ AnnouncementAdminService announcementAdminService;
+ @Autowired
+ AnnouncementService announcementService;
+
+ /**
+ * 发布人员(作者)去重列表
+ *
+ * @return 返回去重后的作者列表
+ */
+ @RequestMapping("/getAuthorList")
+ public String getAuthorList() {
+ // 获取去重后的发布人(作者/操作员)列表数据
+ List authorList = announcementAdminService.getAuthorList();
+ //判断请求是否成功
+ Boolean bl = authorList != null;
+ //创建返回数据data
+ Map data = new HashMap<>();
+ data.put("AuthorList", authorList);
+ //添加到返回对象
+ //返回
+ return response.getResponseData(bl, data);
+ }
+
+ /**
+ * 根据特定条件查询历史公告
+ *
+ * @param tilKeywords:标题关键字
+ * @param releaseDate:发布日期范围(YYYY-MM-DD - YYYY-MM-DD)备注:日期范围分隔符" - "必须两边留一个空格
+ * @param sort:类别(1-小程序,2-客服平台)
+ * @param authors:作者/发布人/操作员 return 返回历史公告列表数据
+ */
+ @RequestMapping("/AnnouncementListForCondition")
+ public String announcementListForCondition(String tilKeywords, String releaseDate, Integer sort, String authors, Pages pages) {
+ //拆分日期范围
+ String dateStart = null;
+ String dateEnd = null;
+ if (releaseDate != null && !releaseDate.isEmpty()) {
+ String[] dates = releaseDate.split("\\|");
+ if (dates.length > 0) {
+ dateStart = dates[0];
+ dateEnd = dates[0];
+ if (dates.length == 2) {
+ dateEnd = dates[1];
+ }
+ }
+ }
+ //解析分页参数
+ Integer pageNum = (pages != null && pages.getPageNum() != null && pages.getPageNum() > 0) ? pages.getPageNum() : 1;
+ Integer pageSize = (pages != null && pages.getPageSize() != null && pages.getPageSize() > 0) ? pages.getPageSize() : 10;
+
+ //调用Service分页方法,获取分页数据对象 PageInfo
+ PageInfo pagesInfo = announcementAdminService.AnnouncementListForCondition(tilKeywords, dateStart, dateEnd, sort, authors, pageNum, pageSize);
+
+ //读取分页结果
+ Integer pageCount = pagesInfo.getPages(); //总页数
+ long recordTotal = pagesInfo.getTotal(); //记录总数
+ List myList = pagesInfo.getList(); //当前页的列表数据
+
+ List announcementsDtoList = new ArrayList<>();
+ if (myList != null && myList.size() > 0) {
+ //当前页的列表数据
+ announcementsDtoList = announcementAdminService.AnnouncementListConvert(myList);
+
+ }
+ //分页数据添加到pages
+ assert pages != null;
+ pages.setPageCount(pageCount);
+ pages.setRecordTotal(recordTotal);
+
+ //判断请求是否成功
+ Boolean bl = myList != null;
+ //创建返回数据data
+ Map data = new HashMap<>();
+ data.put("AnnouncementsList", announcementsDtoList);
+ data.put("Pages", pages);
+ //添加到返回对象
+ //返回
+ return response.getResponseDataJavaJson(bl, data);
+ }
+
+ /**
+ * 根据特定条件查询历史公告
+ * return 返回历史公告列表数据
+ */
+ @RequestMapping("/AnnouncementListForWeek")
+ public String AnnouncementListForWeek() {
+ List myList = announcementAdminService.AnnouncementListForWeek();
+ //判断请求是否成功
+ Boolean bl = true;
+ //创建返回数据data
+ Map data = new HashMap<>();
+ data.put("AnnouncementsList", myList);
+ //添加到返回对象
+ return response.getResponseDataJavaJson(bl, data);
+ }
+
+ /**
+ * 公告详情
+ *
+ * @param announcement_id : 公告id
+ * @return 公告详情
+ */
+ @RequestMapping("/AnnouncementInfo")
+ public String announcementInfo(@RequestParam("announcement_id") String announcement_id) {
+ String msg = "";
+ if (announcement_id == null || announcement_id.isEmpty()) {
+ msg = "公告id不能为空";
+ //判断请求是否成功
+ Boolean bl = false;
+ //创建返回数据
+ Map data = new HashMap<>();
+ //返回
+ return response.getResponseData(bl, data, msg);
+ }
+ Announcement announcements = announcementService.getById(announcement_id);
+ AnnouncementsDto announcementsDto = new AnnouncementsDto();
+ if (announcements != null) {
+ announcementsDto.setId(announcements.getId());
+ announcementsDto.setTitle(announcements.getTitle());
+ announcementsDto.setSort(announcements.getSort());
+ if (announcements.getSort() != null) {
+ switch (announcements.getSort()) {
+ case 1:
+ announcementsDto.setSort_name("小程序");
+ break;
+ case 2:
+ announcementsDto.setSort_name("客服平台");
+ break;
+ }
+ }
+ announcementsDto.setAbstracts(announcements.getAbstracts());
+ String content = announcements.getAnnouncement();
+ if (content != null && !content.isEmpty()) {
+ String decodedHtml = StringEscapeUtils.unescapeHtml4(content);
+ announcementsDto.setAnnouncement(decodedHtml);
+ announcementsDto.setAnnouncement_text(StringHelper.getTxtByHtml(decodedHtml));
+ }
+ announcementsDto.setAuthor(announcements.getAuthor());
+ announcementsDto.setReading_volume(announcements.getReading_volume());
+ if (announcements.getCreate_time() != null) {
+ announcementsDto.setCreate_time(announcements.getCreate_time());
+ }
+ if (announcements.getUpdate_time() != null) {
+ announcementsDto.setUpdate_time(announcements.getUpdate_time());
+ }
+ announcementsDto.setIs_del(announcements.getIs_del());
+ }
+ //判断请求是否成功
+ Boolean bl = announcements != null;
+ //创建返回数据data
+ Map data = new HashMap<>();
+ data.put("Announcements", announcementsDto);
+ //添加到返回对象
+ //返回
+ return response.getResponseData(bl, data);
+ }
+
+ /**
+ * 保存修改
+ *
+ * @param announcement 公告
+ * @return 保存修改结果
+ */
+ @RequestMapping("/AnnouncementUpdate")
+ public String announcementUpdate(Announcement announcement) {
+ String announcementStr = announcement.getAnnouncement();
+ if (announcementStr != null && !announcementStr.isEmpty()) {
+ //对参数值进行 XSS 过滤
+ //String encodedValue = ESAPI.encoder().encodeForHTML(announcementStr);
+ //String safeComment = Encode.forHtml(announcementStr);
+ //announcement.setAnnouncement(safeComment);
+ }
+ announcement.setIs_del(0);
+ Integer x = announcementService.update(announcement);
+ //判断请求是否成功
+ Boolean bl = x != null && x > 0;
+ //创建返回数据data
+ Map data = new HashMap<>();
+ data.put("result", x);
+ //添加到返回对象
+ //返回
+ return response.getResponseData(bl, data);
+ }
+
+ /**
+ * 新增发布
+ *
+ * @param announcement 公告
+ * @return 返回公告插入结果
+ */
+ @RequestMapping("/AnnouncementsInsert")
+ public String announcementsInsert(Announcement announcement) {
+ String announcementStr = announcement.getAnnouncement();
+ if (announcementStr != null && !announcementStr.isEmpty()) {
+ //String safeComment = Encode.forHtml(announcementStr);
+ //announcement.setAnnouncement(safeComment);
+ }
+ announcement.setIs_del(0);
+ announcement.setReading_volume(0);
+ String id = announcementService.insert(announcement);
+ //判断请求是否成功
+ Boolean bl = id != null && !id.isEmpty();
+ //创建返回数据data
+ Map data = new HashMap<>();
+ data.put("result", id);
+ //添加到返回对象
+ //返回
+ return response.getResponseData(bl, data);
+ }
+
+ /**
+ * 删除一条公告
+ *
+ * @param announcement_id 公告id
+ * @return 返回删除一条公告结果
+ */
+ @RequestMapping("/AnnouncementDel")
+ public String announcementDel(@RequestParam("announcement_id") String announcement_id) {
+ String msg = "";
+ if (announcement_id == null || announcement_id.isEmpty()) {
+ msg = "公告id不能为空";
+ //判断请求是否成功
+ Boolean bl = false;
+ //创建返回数据
+ Map data = new HashMap<>();
+ //返回
+ return response.getResponseData(bl, data, msg);
+ }
+ Integer x = announcementService.logicDel(announcement_id);
+
+ //判断请求是否成功
+ Boolean bl = x != null;
+ //创建返回数据data
+ Map data = new HashMap<>();
+ data.put("result", x);
+ //添加到返回对象
+ //返回
+ return response.getResponseData(bl, data);
+ }
+
+
+}
diff --git a/wx-applet-admin/src/main/java/com/haitongauto/rtosam/api/admin/AppointmentAdminController.java b/wx-applet-admin/src/main/java/com/haitongauto/rtosam/api/admin/AppointmentAdminController.java
new file mode 100644
index 0000000..53cb16f
--- /dev/null
+++ b/wx-applet-admin/src/main/java/com/haitongauto/rtosam/api/admin/AppointmentAdminController.java
@@ -0,0 +1,275 @@
+package com.haitongauto.rtosam.api.admin;
+
+import com.bestvike.linq.Linq;
+import com.github.pagehelper.PageInfo;
+import com.haitongauto.interfaces.DicInterface;
+import com.haitongauto.interfaces.PortAreaInterface;
+import com.haitongauto.models.dto.AppointmentQueryExl;
+import com.haitongauto.models.dto.DicDto;
+import com.haitongauto.models.pojo.*;
+import com.haitongauto.rtosam.service.admin.AppointmentAdminService;
+import com.haitongauto.rtosam.service.admin.ResponseService;
+import com.haitongauto.rtosam.service.base.AppointmentService;
+import com.haitongauto.models.dto.AppointmentQuery;
+import com.haitongauto.models.dto.Pages;
+
+import com.haitongauto.rtosam.service.base.UsersService;
+import com.haitongauto.utils.FileDownloadUtil;
+import com.haitongauto.utils.FormatDateTime;
+import com.haitongauto.utils.excel.ExcelGenerateHelper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.InputStream;
+import java.util.*;
+
+/**
+ * 后台管理接口:车辆预约
+ */
+@RestController
+@RequestMapping("/admin")
+public class AppointmentAdminController {
+ @Autowired
+ ResponseService response;
+ @Autowired
+ AppointmentAdminService appointmentAdminService;
+ @Autowired
+ AppointmentService appointmentService;
+ @Autowired
+ UsersService usersService;
+ @Autowired
+ DicInterface dicInterface;
+ @Autowired
+ PortAreaInterface portAreaInterface;
+
+ /**
+ * 车辆预约:通过港区、司机关键字、预约时间范围、进港类型、状态(1-已预约,0-已取消)、运输方式(0-自开/1-板车运输)单独或组合查询
+ *
+ * @param port_area_id:港区id
+ * @param keywords:关键字(姓名、手机号、板车号)
+ * @param start_date:时间范围开始
+ * @param end_date:时间范围结束
+ * @param enter_type:进港类型(1-外贸出口,2-外贸进口,2-整车物流,3-特保区出口,4-特保区进口,5-内贸出口,6-内贸进口)
+ * @param appointment_state:预约状态(0-已取消,1-已预约)
+ * @param transport_type:运输方式(0-自开/1-板车运)
+ * @param pages:分页参数(pagesNum:当前页码,pagesSize:每页记录条数)
+ * @return 返回条件查询分页预约信息
+ */
+ @RequestMapping("/AppointmentListForCondition")
+ public String appointmentListForCondition(String users_id, String port_area_id, String keywords, String start_date, String end_date, String enter_type, Integer appointment_state, String transport_type, Pages pages) {
+ //解析分页参数
+ Integer pageNum = (pages != null && pages.getPageNum() != null && pages.getPageNum() > 0) ? pages.getPageNum() : 1;
+ Integer pageSize = (pages != null && pages.getPageSize() != null && pages.getPageSize() > 0) ? pages.getPageSize() : 10;
+
+ //调用Service分页方法,获取分页数据对象 PageInfo
+ PageInfo pageInfo = appointmentAdminService.AppointmentListForCondition(users_id, port_area_id, keywords, start_date, end_date, enter_type, appointment_state, transport_type, pageNum, pageSize);
+
+ //读取分页结果
+ Integer pageCount = pageInfo.getPages(); //总页数
+ long recordTotal = pageInfo.getTotal(); //记录总数
+ List myList = pageInfo.getList(); //当前页的列表数据
+ List AppointmentList = new ArrayList<>();
+ if (pageNum <= pageCount) {
+ //转换为列表显示数据
+ AppointmentList = appointmentAdminService.AppointmentListConvert(myList);
+ }
+
+ //分页数据添加到pages
+ assert pages != null;
+ pages.setPageCount(pageCount);
+ pages.setRecordTotal(recordTotal);
+
+ //判断请求是否成功
+ Boolean bl = myList != null;
+ //创建返回数据data
+ Map data = new HashMap<>();
+ data.put("AppointmentList", AppointmentList);
+ data.put("Pages", pages);
+ //添加到返回对象
+ return response.getResponseDataJavaJson(bl, data);
+ }
+
+ /**
+ * 获取指定预约的货物明细
+ *
+ * @param appointment_id 预约id
+ * @return 返回预约的货物明细
+ */
+ @RequestMapping("/appointmentGoodsDetail")
+ public String appointmentGoodsDetail(@RequestParam("appointment_id") String appointment_id) {
+ String msg = "";
+ if (appointment_id == null || appointment_id.isEmpty()) {
+ msg = "预约id不能为空";
+ //判断请求是否成功
+ Boolean bl = false;
+ //创建返回数据
+ Map data = new HashMap<>();
+ //返回
+ return response.getResponseData(bl, data, msg);
+ }
+ Appointment appointment = appointmentService.getById(appointment_id);
+ //1-司机信息
+ Map