提交 4d6bead1 authored 作者: LJJ's avatar LJJ

Initial commit

上级
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CheckStyle-IDEA">
<option name="configuration">
<map>
<entry key="checkstyle-version" value="8.19" />
<entry key="copy-libs" value="false" />
<entry key="location-0" value="BUNDLED:(bundled):Sun Checks" />
<entry key="location-1" value="BUNDLED:(bundled):Google Checks" />
<entry key="scan-before-checkin" value="false" />
<entry key="scanscope" value="JavaOnly" />
<entry key="suppress-errors" value="false" />
</map>
</option>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="vms-union" />
<module name="vms-misc" />
<module name="vms-user" />
<module name="vms-wechat" />
<module name="vms-inspection" />
</profile>
</annotationProcessing>
</component>
<component name="JavacSettings">
<option name="ADDITIONAL_OPTIONS_OVERRIDE">
<module name="vms" options="-parameters" />
<module name="vms-inspection" options="-parameters" />
<module name="vms-misc" options="-parameters" />
<module name="vms-union" options="-parameters" />
<module name="vms-user" options="-parameters" />
<module name="vms-wechat" options="-parameters" />
</option>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/vms-inspection" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/vms-misc" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/vms-union" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/vms-user" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/vms-wechat" charset="UTF-8" />
</component>
</project>
\ No newline at end of file
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="JavaDoc" enabled="true" level="WARNING" enabled_by_default="true">
<option name="TOP_LEVEL_CLASS_OPTIONS">
<value>
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
<option name="REQUIRED_TAGS" value="" />
</value>
</option>
<option name="INNER_CLASS_OPTIONS">
<value>
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
<option name="REQUIRED_TAGS" value="" />
</value>
</option>
<option name="METHOD_OPTIONS">
<value>
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
<option name="REQUIRED_TAGS" value="@return@param@throws or @exception" />
</value>
</option>
<option name="FIELD_OPTIONS">
<value>
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
<option name="REQUIRED_TAGS" value="" />
</value>
</option>
<option name="IGNORE_DEPRECATED" value="false" />
<option name="IGNORE_JAVADOC_PERIOD" value="true" />
<option name="IGNORE_DUPLICATED_THROWS" value="false" />
<option name="IGNORE_POINT_TO_ITSELF" value="false" />
<option name="myAdditionalJavadocTags" value="date" />
</inspection_tool>
</profile>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>
\ No newline at end of file
差异被折叠。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zjty</groupId>
<artifactId>vms</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>vms-misc</module>
<module>vms-union</module>
<module>vms-user</module>
<module>vms-inspection</module>
<module>vms-wechat</module>
</modules>
<name>vms</name>
<description>this is a union project!</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<checkstyle.config.location>check-style.xml</checkstyle.config.location>
</properties>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>23.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<configLocation>${checkstyle.config.location}</configLocation>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>vms</artifactId>
<groupId>com.zjty</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>vms-inspection</artifactId>
<dependencies>
<dependency>
<groupId>com.zjty</groupId>
<artifactId>vms-misc</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.zjty.vms.inspection;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-01
*/
@SpringBootApplication
public class InspectionApp {
public static void main(String[] args) {
SpringApplication.run(InspectionApp.class, args);
}
}
package com.zjty.vms.inspection.subject.controller;
import com.sun.javafx.image.PixelUtils;
import com.zjty.vms.inspection.subject.entity.domain.Event;
import com.zjty.vms.inspection.subject.entity.vo.EventCreateVo;
import com.zjty.vms.inspection.subject.entity.vo.FindVo;
import com.zjty.vms.inspection.subject.service.EventService;
import com.zjty.vms.misc.config.AutoDocument;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.security.PublicKey;
import java.util.List;
import java.util.Map;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-01
*/
@RestController
@RequestMapping("/vms")
@AutoDocument
@Api(tags = "举报模块")
public class EventController {
@Autowired
private EventService eventService;
@ApiOperation(value = "创建举报事件")
@PostMapping("/event")
public ResponseEntity<Event> addEvent(
@RequestBody @ApiParam(name = "创建事件对象")
EventCreateVo eventCreateVo) {
Event event = eventService.startEvent(eventCreateVo);
return ResponseEntity.ok(event);
}
@PutMapping("sgCheck")
@ApiOperation(value = "安保人员确认已联系")
public ResponseEntity<Event> sgCheck(@RequestParam @ApiParam(name = "事件uuid") String uuid,
@RequestParam @ApiParam(name = "安保人员id") String sgId) {
return ResponseEntity.ok(eventService.sgCheck(uuid, sgId));
}
@PutMapping("ownerCt")
@ApiOperation(value = "业主继续举报")
public ResponseEntity<Event> ownerCon(@RequestParam @ApiParam(name = "事件uuid") String uuid) {
return ResponseEntity.ok(eventService.ownerChangeStatus(uuid));
}
@PutMapping("delEvent")
@ApiOperation(value = "业主或安保人员完结事件")
public ResponseEntity<Event> changeStatus(@RequestParam @ApiParam(name = "事件uuid") String uuid,
@RequestParam @ApiParam(name = "对象,0_业主,1_安保") Integer obj) {
return ResponseEntity.ok(eventService.finishEvent(uuid, obj));
}
@GetMapping("tsFind")
@ApiOperation(value = "业主查询事件接口")
public ResponseEntity<FindVo<List<Event>>> ownerFind(@RequestParam(value = "tsId") @ApiParam(name = "tsId") String tsId,
@RequestParam(value = "page", defaultValue = "1") @ApiParam(name = "page") Integer page,
@RequestParam(value = "size", defaultValue = "10") @ApiParam(name = "size") Integer size) {
page = page - 1;
return ResponseEntity.ok(eventService.findAllByOwner(tsId, page, size));
}
@GetMapping("sgFind")
@ApiOperation(value = "安保人员查询事件接口")
public ResponseEntity<FindVo<List<Event>>> ownerFind(@RequestParam(value = "page", defaultValue = "1") @ApiParam(name = "page") Integer page,
@RequestParam(value = "size", defaultValue = "10") @ApiParam(name = "size") Integer size) {
page = page - 1;
return ResponseEntity.ok(eventService.findAllBySg(page, size));
}
}
package com.zjty.vms.inspection.subject.controller;
import com.zjty.vms.misc.config.AutoDocument;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.UUID;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-03
*/
@RestController
@RequestMapping("/file")
@AutoDocument
@Api(tags = "上传下载模块")
public class FileController {
@PostMapping("/upload")
@ApiOperation(value = "上传文件")
public String fileUpload(MultipartFile file) throws IllegalStateException, IOException {
if (file.getSize() == 0) {
return "";
}
System.err.println("文件是否为空 : " + file.isEmpty());
System.err.println("文件的大小为 :" + file.getSize());
System.err.println("文件的媒体类型为 : " + file.getContentType());
System.err.println("文件的名字: " + file.getName());
System.err.println("文件的originName为: " + file.getOriginalFilename());
final UUID uuid = UUID.randomUUID();
File newFile = new File("/Users/ljj/data/file/" + uuid);
file.transferTo(newFile);
return uuid.toString();
}
@PostMapping("/download")
@ApiOperation(value = "下载文件")
public boolean download(HttpServletResponse res,
@RequestParam(value = "fileId")@ApiParam(name = "文件id") String fileId) throws IOException {
File file = new File("/Users/ljj/data/file/" + fileId);
String fileName = "bg1.png";
res.setHeader("Content-Disposition", "attachment;filename=" + fileName);
byte[] buff = new byte[1024];
BufferedInputStream bis = null;
OutputStream os = null;
try {
os = res.getOutputStream();
bis = new BufferedInputStream(new FileInputStream(file));
int i = bis.read(buff);
while (i != -1) {
os.write(buff, 0, buff.length);
os.flush();
i = bis.read(buff);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
System.out.println("success");
return false;
}
}
package com.zjty.vms.inspection.subject.dao;
import com.zjty.vms.inspection.subject.entity.domain.Event;
import org.springframework.data.domain.Page;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.awt.print.Pageable;
import java.util.List;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-01
*/
public interface EventDao extends JpaRepository<Event, String>, JpaSpecificationExecutor<Event> {
}
package com.zjty.vms.inspection.subject.dao;
import com.zjty.vms.inspection.subject.entity.domain.EventImage;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-01
*/
public interface EventImageDao extends JpaRepository<EventImage, String> {
}
package com.zjty.vms.inspection.subject.entity.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.zjty.vms.misc.config.AutoDocument;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-01
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@AutoDocument
@ApiModel(value = "举报事件", description = "一个举报事件")
@Table(name = "vms_event")
public class Event {
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
@ApiModelProperty(value = "主键id",example = "3eee-eqwe-qwe-123")
private String uuid;
@ApiModelProperty(value = "举报事件名称",example = "事件名称")
private String name;
@ApiModelProperty(value = "图片id,以英文,分割",example = "1,2,3,4")
private String image;
@ApiModelProperty(value = "投诉人Id",example = "asdads")
private String tsId;
@ApiModelProperty(value = "被举报人Id",example = "asdads")
private String reportedId;
@ApiModelProperty(value = "被举报车牌号",example = "浙A88888")
private String numberPlate;
@ApiModelProperty(value = "车位号",example = "A101")
private String parkingSpace;
@ApiModelProperty(value = "处理保安id",example = "asdasd")
private String sgId;
@ApiModelProperty(value = "是否电话,通知0_未通知,1_已通知",example = "0")
private Integer isPhoneNotification;
@ApiModelProperty(value = "电话通知时间",example = "2001-01-01 00:00:00")
private Date phoneNotificationTime;
@ApiModelProperty(value = "是否推送了公众号0_未通知,1_已通知",example = "0")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Integer isForwardNews;
@ApiModelProperty(value = "公众号推送通知时间",example = "2001-01-01 00:00:00")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date forwardNewsTime;
@ApiModelProperty(value = "继续举报时间,若无继续举报,则为空(即将事件状态变为1时需传入这个字段)",example = "2001-01-01 00:00:00")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date continueToReportTime;
@ApiModelProperty(value = "事件状态,0_未处理,1_需人工处理,2_完结",example = "0")
private Integer status = 0;
@ApiModelProperty(value = "事件完结时间",example = "2001-01-01 00:00:00")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date finishEventTime;
@ApiModelProperty(value = "0_业主完结,1_保安完结",example = "0")
private Integer finishEventObj;
@ApiModelProperty(value = "事件生成时间",example = "2001-01-01 00:00:00")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
}
package com.zjty.vms.inspection.subject.entity.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.zjty.vms.misc.config.AutoDocument;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-01
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@AutoDocument
@ApiModel(value = "图片库", description = "用于存储图片")
@Table(name = "vms_image")
public class EventImage {
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
@ApiModelProperty(value = "主键id",example = "3eee-eqwe-qwe-123")
private String uuid;
@ApiModelProperty(value = "图片路径",example = "3eee-eqwe-qwe-123")
private String path;
@ApiModelProperty(value = "图片创建时间",example = "2001-01-01 00:00:00")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
}
package com.zjty.vms.inspection.subject.entity.vo;
import com.zjty.vms.misc.config.AutoDocument;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-01
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@AutoDocument
@ApiModel(value = "生成事件", description = "生成事件时需要传入的对象")
@Table(name = "vms_event")
public class EventCreateVo {
@ApiModelProperty(value = "举报事件名称",example = "事件名称")
private String name;
@ApiModelProperty(value = "图片id,以英文,分割",example = "1,2,3,4")
private String image;
@ApiModelProperty(value = "投诉人Id",example = "asdads")
private String tsId;
@ApiModelProperty(value = "被举报车牌号",example = "浙A88888")
private String numberPlate;
@ApiModelProperty(value = "车位号",example = "A101")
private String parkingSpace;
}
package com.zjty.vms.inspection.subject.entity.vo;
import com.zjty.vms.misc.config.AutoDocument;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import sun.jvm.hotspot.debugger.Page;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-02
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@AutoDocument
@ApiModel(value = "生成事件", description = "生成事件时需要传入的对象")
public class FindVo<T> {
@ApiModelProperty(value = "总数",example = "100")
private Long total;
@ApiModelProperty(value = "页数",example = "1")
private Integer page;
@ApiModelProperty(value = "每页",example = "10")
private Integer size;
@ApiModelProperty(value = "数据内容",example = "数据内容")
private T data;
}
package com.zjty.vms.inspection.subject.service;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-01
*/
public interface EventImageService {
}
package com.zjty.vms.inspection.subject.service;
import com.zjty.vms.inspection.subject.entity.domain.Event;
import com.zjty.vms.inspection.subject.entity.vo.EventCreateVo;
import com.zjty.vms.inspection.subject.entity.vo.FindVo;
import java.util.List;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-01
*/
public interface EventService {
/**
* 生成一个举报事件
*
* @param eventCreateVo ecvo
* @return obj
*/
Event startEvent(EventCreateVo eventCreateVo);
/**
* 安保人员确认,电话通知后确认
*
* @param uuid 事件uuid
* @param sgId 安保人员ID
* @return obj
*/
Event sgCheck(String uuid, String sgId);
/**
* 业主继续反馈,举报
*
* @param uuid 事件主键id
* @return
*/
Event ownerChangeStatus(String uuid);
/**
* 完结事件
*
* @param uuid 事件id
* @param obj 0_业主,1_安保
* @return obj
*/
Event finishEvent(String uuid, Integer obj);
/**
*业主查询事件接口
* @param tsId 业主id
* @param page page
* @param size size
* @return obj
*/
FindVo<List<Event>> findAllByOwner(String tsId, Integer page, Integer size);
FindVo<List<Event>> findAllBySg(Integer page, Integer size);
}
package com.zjty.vms.inspection.subject.service.impl;
import com.zjty.vms.inspection.subject.service.EventImageService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-01
*/
@Service
@Slf4j
public class EventImageServiceImpl implements EventImageService {
}
package com.zjty.vms.inspection.subject.service.impl;
import com.zjty.vms.inspection.subject.dao.EventDao;
import com.zjty.vms.inspection.subject.entity.domain.Event;
import com.zjty.vms.inspection.subject.entity.vo.EventCreateVo;
import com.zjty.vms.inspection.subject.entity.vo.FindVo;
import com.zjty.vms.inspection.subject.service.EventService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.util.Date;
import java.util.List;
import java.util.Optional;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-01
*/
@Service
@Slf4j
public class EventServiceImpl implements EventService {
@Autowired
private EventDao eventDao;
@Override
public Event startEvent(EventCreateVo eventCreateVo) {
String reportedId = "";
//todo 1.根据车牌查找是否有这个人 2.推送订阅消息
Event build = Event.builder()
.image(eventCreateVo.getImage())
.name(eventCreateVo.getName())
.tsId(eventCreateVo.getTsId())
.numberPlate(eventCreateVo.getNumberPlate())
.parkingSpace(eventCreateVo.getParkingSpace())
.createTime(new Date())
//被举报人id
.reportedId(reportedId)
.isPhoneNotification(0)
.isForwardNews(0)
.status(0)
.build();
return eventDao.save(build);
}
@Override
public Event sgCheck(String uuid, String sgId) {
Optional<Event> one = eventDao.findById(uuid);
if (one.isPresent()) {
Event event = one.get();
event.setIsPhoneNotification(1);
event.setPhoneNotificationTime(new Date());
return eventDao.save(event);
} else {
return new Event();
}
}
@Override
public Event ownerChangeStatus(String uuid) {
final Optional<Event> one = eventDao.findById(uuid);
if (one.isPresent()) {
Event event = one.get();
event.setStatus(1);
event.setContinueToReportTime(new Date());
return eventDao.save(event);
} else {
return new Event();
}
}
@Override
public Event finishEvent(String uuid, Integer obj) {
final Optional<Event> one = eventDao.findById(uuid);
if (!one.isPresent()) {
return new Event();
}
Event event = one.get();
event.setStatus(2);
event.setFinishEventTime(new Date());
event.setFinishEventObj(obj);
return eventDao.save(event);
}
@Override
public FindVo<List<Event>> findAllByOwner(String tsId, Integer page, Integer size) {
Specification<Event> contactSpecification = new Specification<Event>() {
@Override
public Predicate toPredicate(Root<Event> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
Predicate predicate = criteriaBuilder.equal(root.get("tsId"), tsId);
return criteriaBuilder.and(predicate);
}
};
Pageable pageable = PageRequest.of(page, size, Sort.Direction.DESC, "createTime");
final Page<Event> all = eventDao.findAll(contactSpecification, pageable);
return new FindVo<>(all.getTotalElements(), page, size, all.getContent());
}
@Override
public FindVo<List<Event>> findAllBySg(Integer page, Integer size) {
Pageable pageable = PageRequest.of(page, size, Sort.Direction.DESC, "createTime");
final Page<Event> all = eventDao.findAll(pageable);
return new FindVo<List<Event>>(all.getTotalElements(), page, size, all.getContent());
}
}
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4" />
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>vms</artifactId>
<groupId>com.zjty</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>vms-misc</artifactId>
<properties>
<swagger.version>2.9.0</swagger.version>
</properties>
<dependencies>
<!--swagger2 enable dependency-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>com.github.caspar-chen</groupId>
<artifactId>swagger-ui-layer</artifactId>
<version>0.0.4</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-bean-validators</artifactId>
<version>${swagger.version}</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.zjty.vms.misc.config;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-04-26
*/
@Target({TYPE, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Documented
public @interface AutoDocument {
String value() default "";
}
package com.zjty.vms.misc.config;
import com.google.common.collect.Sets;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-04-26
*/
@Configuration
@EnableSwagger2
public class Swagger2Config {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.produces(Sets.newHashSet("application/json"))
.consumes(Sets.newHashSet("application/json"))
.protocols(Sets.newHashSet("http","https"))
.apiInfo(apiInfo())
.forCodeGeneration(true)
.useDefaultResponseMessages(true)
// .globalResponseMessage(RequestMethod.GET, getResMsg())
.select()
// 指定controller存放的目录路径
.apis(RequestHandlerSelectors.withClassAnnotation(AutoDocument.class))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
// 文档标题
.title("机动车管理系统接口文档")
// 文档描述
.description("机动车管理系统的接口文档与测试页面")
.termsOfServiceUrl("git地址待更新")
.version("v1")
.contact(new Contact("efs", "git", "ty@example.com"))
.build();
}
// private ArrayList<ResponseMessage> getResMsg() {
// return newArrayList(new ResponseMessageBuilder()
// .code(500)
// .message("服务器内部发生了某种错误")
// .responseModel(new ModelRef("Error"))
// .build(),
// new ResponseMessageBuilder()
// .code(404)
// .message("用户发出的请求针对的是不存在的记录,服务器没有进行操作")
// .responseModel(new ModelRef("Exception"))
// .build(),
// new ResponseMessageBuilder()
// .code(406)
// .message("用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)")
// .responseModel(new ModelRef("Exception"))
// .build(),
// new ResponseMessageBuilder()
// .code(501)
// .message("不支持的HTTP请求,请检查HTTP TYPE与资源路径是否正确")
// .responseModel(new ModelRef("Exception"))
// .build());
// }
}
package com.zjty.vms.misc.config;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-05-29
*/
public class WechatAppConfig {
public static final String APP_ID = "wx44b039ae19434b36";
private static final String APP_SECRET = "1030a6aef6cfe8b5543e5e5ba043dca3";
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>vms</artifactId>
<groupId>com.zjty</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>vms-union</artifactId>
<dependencies>
<dependency>
<groupId>com.zjty</groupId>
<artifactId>vms-wechat</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.zjty</groupId>
<artifactId>vms-user</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<dependency>
<groupId>com.zjty</groupId>
<artifactId>vms-inspection</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.zjty.vms.union;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-05-28
*/
@SpringBootApplication(scanBasePackages = {
"com.zjty.vms.union",
"com.zjty.vms.user",
"com.zjty.vms.wechat",
"com.zjty.vms.inspection"
})
@EnableSwagger2
public class UnionApp {
public static void main(String[] args) {
SpringApplication.run(UnionApp.class, args);
}
}
# server port
server.port=8082
##连接中心数据库数据库mysql
spring.datasource.url=jdbc:mysql://localhost:3306/vms?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=ljj123456
# spring.jpa.properties.hibernate.format_sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=false
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.open-in-view=true
# server port
server.port=8082
##连接中心数据库数据库mysql
spring.datasource.url=jdbc:mysql://localhost:3306/vms?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=ljj123456
# spring.jpa.properties.hibernate.format_sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=false
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.open-in-view=true
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>vms</artifactId>
<groupId>com.zjty</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>vms-user</artifactId>
<dependencies>
<dependency>
<groupId>com.zjty</groupId>
<artifactId>vms-misc</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.zjty</groupId>
<artifactId>vms-wechat</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.zjty.vms.user;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-05-28
*/
@SpringBootApplication(scanBasePackages = {
"com.zjty.vms.user",
"com.zjty.vms.misc",
"com.zjty.vms.wechat"
})
@EnableSwagger2
public class UserApp {
public static void main(String[] args) {
SpringApplication.run(UserApp.class, args);
}
}
package com.zjty.vms.user.subject.controller;
import com.zjty.vms.misc.config.AutoDocument;
import com.zjty.vms.user.subject.entity.BusinessOwner;
import com.zjty.vms.user.subject.service.BusinessOwnerService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-01
*/
@RestController
@RequestMapping("/vms")
@AutoDocument
@Api(tags = "业主信息模块")
public class BusinessOwnerController {
@Autowired
private BusinessOwnerService businessOwnerService;
@GetMapping("/bo")
public ResponseEntity getByOpenId(@RequestParam(value = "openId") String openId) {
return ResponseEntity.ok(businessOwnerService.findByOpenId(openId));
}
@PostMapping("/bo")
private ResponseEntity<BusinessOwner> saveOne(@RequestBody @ApiParam(name = "业主对象") BusinessOwner businessOwner) {
return ResponseEntity.ok(businessOwnerService.save(businessOwner));
}
}
package com.zjty.vms.user.subject.controller;
import com.zjty.vms.misc.config.AutoDocument;
import com.zjty.vms.user.subject.dao.CarDao;
import com.zjty.vms.user.subject.entity.Car;
import com.zjty.vms.user.subject.service.CarService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-02
*/
@RequestMapping("/vms")
@RestController
@AutoDocument
@Api(tags = "车辆车位模块")
public class CarController {
@Autowired
private CarService carService;
@GetMapping("car/num")
@ApiOperation(value = "根据车牌查")
public ResponseEntity<Car> findByCarNum(@RequestParam(name = "numberPlate") String numberPlate) {
return ResponseEntity.ok(carService.findByCarNum(numberPlate));
}
@GetMapping("car/tel")
@ApiOperation(value = "根据电话查")
public ResponseEntity<List<Car>> findByTel(@RequestParam(name = "tel") String tel) {
return ResponseEntity.ok(carService.findByPhone(tel));
}
@ApiOperation(value = "保存一个车辆信息")
@PostMapping("car")
public ResponseEntity<Car> saveOne(@RequestBody@ApiParam(name = "车辆")Car car) {
return ResponseEntity.ok(carService.saveOne(car));
}
@ApiOperation(value = "根据停车位查车")
@GetMapping("car/space")
public ResponseEntity<List<Car>> findByParkingSpace(@RequestParam(name = "parkingSpace") String parkingSpace) {
return ResponseEntity.ok(carService.findByParkingSpace(parkingSpace));
}
@ApiOperation(value = "根据id删除车辆信息")
@DeleteMapping("car")
public ResponseEntity deleteCar(@RequestParam(name = "uuid") String uuid) {
carService.deleteCar(uuid);
return ResponseEntity.ok("ok");
}
}
\ No newline at end of file
package com.zjty.vms.user.subject.controller;
import com.zjty.vms.misc.config.AutoDocument;
import com.zjty.vms.user.subject.entity.Role;
import com.zjty.vms.user.subject.service.RoleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.persistence.Id;
import java.util.ArrayList;
import java.util.List;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-01
*/
@RestController
@RequestMapping("/vms")
@AutoDocument
@Api(tags = "人员权限模块")
public class RoleController {
@Autowired
private RoleService roleService;
@GetMapping("/role")
public ResponseEntity<Role> getOne(@RequestParam(value = "roleId") Integer roleId) {
return ResponseEntity.status(200).body(roleService.getById(roleId));
}
@GetMapping("/allRoles")
public ResponseEntity<List<Role>> getRoles(@RequestParam(value = "ids")@ApiParam(name = "ids,,分割",example = "1,2,3") String ids) {
final String[] str = ids.split(",");
List<Integer> list = new ArrayList<>();
for (String s : str) {
list.add(Integer.parseInt(s));
}
return ResponseEntity.status(200).body(roleService.findByIds(list));
}
@PostMapping
public ResponseEntity<Role> saveOne(@RequestBody@ApiParam(name = "权限") Role role) {
return ResponseEntity.status(200).body(roleService.save(role));
}
}
package com.zjty.vms.user.subject.controller;
import com.zjty.vms.misc.config.AutoDocument;
import com.zjty.vms.user.subject.entity.AppUser;
import com.zjty.vms.user.subject.service.AppUserService;
import com.zjty.vms.wechat.subject.service.WeChatApiService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-01
*/
@RestController
@RequestMapping("/vms")
@AutoDocument
@Api(tags = "人员基础信息模块")
public class UserController {
@Autowired
private AppUserService appUserService;
@Autowired
private WeChatApiService apiService;
@ApiOperation(value = "登陆接口")
@GetMapping("login2")
public ResponseEntity<AppUser> login(@ApiParam(name = "openId")@RequestParam(value = "openId") String openId) {
return ResponseEntity.status(200).body(appUserService.findByOpenId(openId));
}
@ApiOperation(value = "获取人员基础信息")
@GetMapping("userInfo")
public ResponseEntity<AppUser> getOne(@RequestParam(value = "openId") String openId) {
return ResponseEntity.status(200).body(appUserService.findByOpenId(openId));
}
@ApiOperation(value = "保存个人基本信息")
@PostMapping("/appUser")
public ResponseEntity<AppUser> saveOne(@RequestBody@ApiParam(name = "人员基础信息") AppUser appUser) {
appUser.setUpdateTime(new Date());
AppUser user = appUserService.saveOne(appUser);
return ResponseEntity.status(200).body(user);
}
@ApiOperation(value = "根据手机号码查询人员")
@GetMapping("/user/tel")
public ResponseEntity<AppUser> findByTel(@RequestParam(value = "tel") @ApiParam(name = "手机号码") String tel) {
return ResponseEntity.ok(appUserService.findByPhone(tel));
}
}
package com.zjty.vms.user.subject.dao;
import com.zjty.vms.user.subject.entity.AppUser;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
import java.util.Optional;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-05-28
*/
public interface AppUserDao extends JpaRepository<AppUser, String> {
Optional<List<AppUser>> findByTel(String tel);
}
\ No newline at end of file
package com.zjty.vms.user.subject.dao;
import com.zjty.vms.user.subject.entity.BusinessOwner;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
import java.util.Optional;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-01
*/
public interface BusinessOwnerDao extends JpaRepository<BusinessOwner, String> {
Optional<List<BusinessOwner>> findByOpenId(String openId);
}
package com.zjty.vms.user.subject.dao;
import com.zjty.vms.user.subject.entity.Car;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.List;
import java.util.Optional;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-02
*/
public interface CarDao extends JpaRepository<Car, String>, JpaSpecificationExecutor<Car> {
Optional<Car> findTopByNumberPlate(String numberPlate);
Optional<List<Car>> findByParkingSpace(String parkingSpace);
Optional<List<Car>> findByPhone(String tel);
}
package com.zjty.vms.user.subject.dao;
import com.zjty.vms.user.subject.entity.Role;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-01
*/
public interface RoleDao extends JpaRepository<Role, Integer> {
}
package com.zjty.vms.user.subject.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.zjty.vms.misc.config.AutoDocument;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
/**
* 业主对象
*
* @author LJJ cnljj1995@gmail.com
* on 2020-05-28
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@AutoDocument
@ApiModel(value = "人员基本信息", description = "人员基本信息实体类")
@Table(name = "vms_user")
public class AppUser {
@Id
@ApiModelProperty(value = "小程序用户唯一标识,人员主键id",example = "asdasd")
private String openId;
@ApiModelProperty(value = "用户在开放平台的唯一标识符",example = "asdasd")
private String unionId;
@ApiModelProperty(value = "联系人",example = "张三")
private String name;
@ApiModelProperty(value = "联系电话",example = "15912331111")
private String tel;
@ApiModelProperty(value = "角色",example = "1,2,3,4")
private String role;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@ApiModelProperty(value = "创建时间",example = "2001-01-01 00:00:00")
private Date createTime;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@ApiModelProperty(value = "更新时间",example = "2001-01-01 00:00:00")
private Date updateTime;
}
package com.zjty.vms.user.subject.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.zjty.vms.misc.config.AutoDocument;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-01
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name = "vms_business_owner")
@AutoDocument
@ApiModel(value = "小区业主对象", description = "小区业主实体类")
public class BusinessOwner {
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
@ApiModelProperty(value = "主键id",example = "3eee-eqwe-qwe-123")
private String uuid;
@ApiModelProperty(value = "关联人员id",example = "asdasd")
private String openId;
@ApiModelProperty(value = "车牌号",example = "浙A888888")
private String numberPlate;
@ApiModelProperty(value = "门号",example = "23-1-2002")
private String room;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@ApiModelProperty(value = "更新时间",example = "2001-01-01 00:00:00")
private Date updateTime;
@ApiModelProperty(value = "创建时间",example = "2001-01-01 00:00:00")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
}
package com.zjty.vms.user.subject.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.zjty.vms.misc.config.AutoDocument;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-02
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Builder
@Table(name = "vms_car")
@AutoDocument
@ApiModel(value = "车辆对象", description = "车辆实体类")
public class Car {
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
@ApiModelProperty(value = "主键id",example = "3eee-eqwe-qwe-123")
private String uuid;
@ApiModelProperty(value = "车牌号",example = "浙A888888")
private String numberPlate;
@ApiModelProperty(value = "车位号",example = "A101")
private String parkingSpace;
@ApiModelProperty(value = "房号",example = "1-01-1001")
private String room;
@ApiModelProperty(value = "车主姓名",example = "张三")
private String carOwner;
@ApiModelProperty(value = "车主手机号",example = "15123123123")
private String phone;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@ApiModelProperty(value = "创建",example = "2001-01-01 00:00:00")
private Date createTime = new Date();
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@ApiModelProperty(value = "更新时间",example = "2001-01-01 00:00:00")
private Date updateTime = new Date();
}
package com.zjty.vms.user.subject.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-01
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name = "vms_committee")
public class Committee {
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
@ApiModelProperty(value = "主键id",example = "3eee-eqwe-qwe-123")
private String uuid;
}
package com.zjty.vms.user.subject.entity;
import com.zjty.vms.misc.config.AutoDocument;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-02
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name = "vms_parking")
@AutoDocument
@ApiModel(value = "车位", description = "车位信息实体类")
public class ParkingSpace {
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
@ApiModelProperty(value = "主键id",example = "3eee-eqwe-qwe-123")
private String uuid;
@ApiModelProperty(value = "所属房子Id",example = "3eee-eqwe-qwe-123")
private String roomId;
}
package com.zjty.vms.user.subject.entity;
import com.zjty.vms.misc.config.AutoDocument;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-01
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name = "vms_role")
@AutoDocument
@ApiModel(value = "权限表", description = "权限实体类")
public class Role {
@Id
@ApiModelProperty(value = "id",example = "1")
private Integer id;
@ApiModelProperty(value = "权限名称",example = "业主")
private String roleName = "";
@ApiModelProperty(value = "权限描述",example = "描述信息")
private String description = "";
}
package com.zjty.vms.user.subject.entity;
import com.zjty.vms.misc.config.AutoDocument;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-02
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name = "vms_room")
@AutoDocument
@ApiModel(value = "房子", description = "房子实体类")
public class Room {
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
@ApiModelProperty(value = "主键id",example = "3eee-eqwe-qwe-123")
private String uuid;
private String ownerId;
}
package com.zjty.vms.user.subject.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-01
*/
@Data
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Table(name = "vms_security_guard")
public class SecurityGuard {
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
@ApiModelProperty(value = "主键id",example = "3eee-eqwe-qwe-123")
private String uuid;
@ApiModelProperty(value = "openId",example = "3eee-eqwe-qwe-123")
private String openId;
}
package com.zjty.vms.user.subject.service;
import com.zjty.vms.user.subject.entity.AppUser;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-05-29
*/
public interface AppUserService {
/**
* 根据open ID 查找用户
* @param openId openid
* @return obj
*/
AppUser findByOpenId(String openId);
/**
* 保存用户
* @param appUser app user
* @return obj
*/
AppUser saveOne(AppUser appUser);
/**
* 根据手机号码查询
* @param tel 手机号码
* @return obj
*/
AppUser findByPhone(String tel);
}
package com.zjty.vms.user.subject.service;
import com.zjty.vms.user.subject.entity.BusinessOwner;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-01
*/
public interface BusinessOwnerService {
BusinessOwner save(BusinessOwner businessOwner);
BusinessOwner findById(String uuid);
/**
* 根据openid 查询业主
* @param openId
* @return
*/
BusinessOwner findByOpenId(String openId);
/**
* 根据车牌号码查询业务
* @param numberPlate 车牌号码
* @return 业主
*/
BusinessOwner findByCar(String numberPlate);
}
package com.zjty.vms.user.subject.service;
import com.zjty.vms.user.subject.entity.Car;
import java.util.List;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-02
*/
public interface CarService {
/**
* 根据车牌号码查询
* @param numberPlate 车牌号码
* @return car
*/
Car findByCarNum(String numberPlate);
/**
* 根据停车位查询车辆
* @param parkingSpace parking space
* @return objs
*/
List<Car> findByParkingSpace(String parkingSpace);
/**
* 根据手机查找车子
* @param tel tel
* @return objs
*/
List<Car> findByPhone(String tel);
/**
* 保存车辆信息
* @param car car
* @return car
*/
Car saveOne(Car car);
/**
* save cars
* @param cars cars
* @return cars
*/
List<Car> saveAll(List<Car> cars);
/**
* delete car
* @param id car's uuid
*/
void deleteCar(String id);
}
package com.zjty.vms.user.subject.service;
import com.zjty.vms.user.subject.entity.Role;
import java.util.List;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-01
*/
public interface RoleService {
/**
* 保存Role
* @param role role
* @return obj
*/
Role save(Role role);
/**
* 根据ID查找
* @param roleId roleId
* @return obj
*/
Role getById(Integer roleId);
/**
* 根据id查找
* @param ids id集合
* @return list
*/
List<Role> findByIds(List<Integer> ids);
}
package com.zjty.vms.user.subject.service.impl;
import com.zjty.vms.user.subject.dao.AppUserDao;
import com.zjty.vms.user.subject.entity.AppUser;
import com.zjty.vms.user.subject.service.AppUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Optional;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-05-29
*/
@Service
@Slf4j
public class AppUserServiceImpl implements AppUserService {
@Autowired
private AppUserDao appUserDao;
@Override
public AppUser findByOpenId(String openId) {
Optional<AppUser> appUser = appUserDao.findById(openId);
return appUser.orElseGet(AppUser::new);
}
@Override
public AppUser saveOne(AppUser appUser) {
appUser.setUpdateTime(new Date());
return appUserDao.save(appUser);
}
@Override
public AppUser findByPhone(String tel) {
final Optional<List<AppUser>> find = appUserDao.findByTel(tel);
if (find.isPresent() && find.get().size() == 1) {
return find.get().get(0);
} else {
return new AppUser();
}
}
}
package com.zjty.vms.user.subject.service.impl;
import com.zjty.vms.user.subject.dao.BusinessOwnerDao;
import com.zjty.vms.user.subject.entity.BusinessOwner;
import com.zjty.vms.user.subject.service.BusinessOwnerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-01
*/
@Service
@Slf4j
public class BusinessOwnerServiceImpl implements BusinessOwnerService {
@Autowired
private BusinessOwnerDao businessOwnerDao;
@Override
public BusinessOwner save(BusinessOwner businessOwner) {
businessOwner.setUpdateTime(new Date());
return businessOwnerDao.save(businessOwner);
}
@Override
public BusinessOwner findById(String uuid) {
final Optional<BusinessOwner> rs = businessOwnerDao.findById(uuid);
return rs.orElseGet(BusinessOwner::new);
}
@Override
public BusinessOwner findByOpenId(String openId) {
final Optional<List<BusinessOwner>> rs = businessOwnerDao.findByOpenId(openId);
final boolean tag = rs.isPresent();
if (tag && rs.get().size()==1) {
return rs.get().get(0);
} else {
return new BusinessOwner();
}
}
@Override
public BusinessOwner findByCar(String numberPlate) {
return null;
}
}
package com.zjty.vms.user.subject.service.impl;
import com.zjty.vms.user.subject.dao.CarDao;
import com.zjty.vms.user.subject.entity.Car;
import com.zjty.vms.user.subject.service.CarService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-02
*/
@Service
@Slf4j
public class CarServiceImpl implements CarService {
@Autowired
private CarDao carDao;
@Override
public Car findByCarNum(String numberPlate) {
final Optional<Car> topByNumberPlate = carDao.findTopByNumberPlate(numberPlate);
return topByNumberPlate.orElseGet(Car::new);
}
@Override
public List<Car> findByParkingSpace(String parkingSpace) {
final Optional<List<Car>> cars = carDao.findByParkingSpace(parkingSpace);
return cars.orElse(Collections.emptyList());
}
@Override
public List<Car> findByPhone(String tel) {
final Optional<List<Car>> rs = carDao.findByPhone(tel);
return rs.orElse(Collections.emptyList());
}
@Override
public Car saveOne(Car car) {
return carDao.save(car);
}
@Override
public List<Car> saveAll(List<Car> cars) {
return carDao.saveAll(cars);
}
@Override
public void deleteCar(String id) {
carDao.deleteById(id);
}
}
package com.zjty.vms.user.subject.service.impl;
import com.zjty.vms.user.subject.dao.RoleDao;
import com.zjty.vms.user.subject.entity.Role;
import com.zjty.vms.user.subject.service.RoleService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
/**
* @author LJJ cnljj1995@gmail.com
* on 2020-06-01
*/
@Service
@Slf4j
public class RoleServiceImpl implements RoleService {
@Autowired
private RoleDao roleDao;
@Override
public Role save(Role role) {
return roleDao.save(role);
}
@Override
public Role getById(Integer roleId) {
Optional<Role> rs = roleDao.findById(roleId);
return rs.orElseGet(Role::new);
}
@Override
public List<Role> findByIds(List<Integer> ids) {
return roleDao.findAllById(ids);
}
}
# server port
server.port=8082
##连接中心数据库数据库mysql
spring.datasource.url=jdbc:mysql://localhost:3306/vms?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=ljj123456
# spring.jpa.properties.hibernate.format_sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=false
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.open-in-view=true
# server port
server.port=8082
##连接中心数据库数据库mysql
spring.datasource.url=jdbc:mysql://localhost:3306/vms?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=ljj123456
# spring.jpa.properties.hibernate.format_sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=false
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.open-in-view=true
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论