2、项目规范
1、前台交互,传递的对象
1、前段响应类
1、一般正常responseBean.setCode(ErrorCodeEnum.正常.code);//200
2、Result对象正常
3、一般错误
4、错误信息了,录入,code系统错误
5、错误、枚举code和desc录入
6、错误、code,message自己填充
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.duodian.admore.core.bean;
import com.duodian.admore.enums.ErrorCodeEnum;
public class ResponseBean {
private boolean success;
private Object result = "{}";
private String message = "";
private String code = "";
private String date;
private ResponseBean() {
}
public static ResponseBean buildSuccess() {
ResponseBean responseBean = new ResponseBean();
responseBean.setSuccess(true);
responseBean.setCode(ErrorCodeEnum.正常.code);//200
responseBean.setDate(System.currentTimeMillis() + "");//系统事件戳
return responseBean;
}
public static ResponseBean buildSuccess(Object result) {
ResponseBean responseBean = new ResponseBean();
responseBean.setSuccess(true);
responseBean.setCode(ErrorCodeEnum.正常.code);
responseBean.setResult(result);
responseBean.setDate(System.currentTimeMillis() + "");
return responseBean;
}
public static ResponseBean buildFailure() {
ResponseBean responseBean = new ResponseBean();
responseBean.setSuccess(false);
responseBean.setCode(ErrorCodeEnum.系统错误.code);
responseBean.setDate(System.currentTimeMillis() + "");
return responseBean;
}
public static ResponseBean buildFailure(String message) {
ResponseBean responseBean = new ResponseBean();
responseBean.setSuccess(false);
responseBean.setCode(ErrorCodeEnum.系统错误.code);
responseBean.setMessage(message);
responseBean.setDate(System.currentTimeMillis() + "");
return responseBean;
}
public static ResponseBean buildFailure(ErrorCodeEnum errorCodeEnum) {
ResponseBean responseBean = new ResponseBean();
responseBean.setSuccess(false);
responseBean.setCode(errorCodeEnum.code);
responseBean.setMessage(errorCodeEnum.desc);
responseBean.setDate(System.currentTimeMillis() + "");
return responseBean;
}
public static ResponseBean buildFailure(String code, String
message) {
ResponseBean responseBean = new ResponseBean();
responseBean.setSuccess(false);
responseBean.setCode(code);
responseBean.setMessage(message);
responseBean.setDate(System.currentTimeMillis() + "");
return responseBean;
}
get set
}
2、枚举信息类
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.duodian.admore.enums;
public enum ErrorCodeEnum {
正常("200", "访问正常"),
条件验证失败("201", "条件验证失败"),
参数解析失败("202", "参数解析失败"),
操作确认("203", "操作确认"),
逻辑错误("301", "逻辑错误"),
登录标识过期("400", "登录标识过期"),
强制升级("401", "强制升级"),
访问禁止("403", "访问禁止"),
页面丢失("404", "页面丢失"),
系统错误("500", "系统内部错误"),
未登录("204", "未登录"),
不是企业认证("205", "不是企业认证"),
UNKNOWN("999", "未知错误");
public String code;
public String desc;
private ErrorCodeEnum(String code, String
desc) {
this.code = code;
this.desc = desc;
}
public static String getDesc(String code)
{
if (code != null && !"".equals(code))
{
ErrorCodeEnum[] var1 = values();
int var2 = var1.length;
for(int var3 = 0; var3 < var2;
++var3) {
ErrorCodeEnum desc = var1[var3];
if (desc.code.equals(code))
{
return desc.desc;
}
}
return UNKNOWN.desc;
} else {
return UNKNOWN.desc;
}
}
}
1、 保存操作,
1、一般正常
2、错误信息,录入
@RequestMapping("save")
@ResponseBody
public ResponseBean save(Customer customer){
try {
customerService.saveCustomer(customer);
return ResponseBean.buildSuccess(); //一般正常
} catch (AppException e)
{
return ResponseBean.buildFailure(e.getMessage()); //将报错信息输入
}
}
2、查询操作findCustomerById(Long id)
1、result的正常返回
2、错误信息,录入
@RequestMapping("findCustomerById")
@ResponseBody
public ResponseBean findCustomerById(Long id){
try {
Customer customer = customerService.findCustomerById(id);
return ResponseBean.buildSuccess(customer);
} catch (AppException e)
{
return ResponseBean.buildFailure(e.getMessage());
}
}
3、数据字典 (用到了上面的Object 对象)
1、result的正常返回
@RequestMapping("getStatusList")
@ResponseBody
public ResponseBean getStatusList(){
try {
return ResponseBean.buildSuccess(EnumCrmUserStatus.getTypeList());
} catch (AppException e)
{
return ResponseBean.buildFailure(e.getMessage());
}
}
2、枚举如下
package com.duodian.admore.enums.customer;
import java.util.Arrays;
import java.util.List;
/**
* 类名称:EnumCrmUserType
* 类描述:crm客户来源
* 创建人:shiwei
* 修改人:
* 修改时间:2015/12/19 17:47
* 修改备注:
*
* @version 1.0.0
*/
public enum EnumCrmUserStatus {
潜在客户(1,"潜在客户"),
有意向(2,"有意向"),
失败(3,"失败"),
已成交(4,"已成交"),
老客户(5,"老客户"),
无(88,"无"),
未知(99,"未知")
;
public Integer type;
public String des;
EnumCrmUserStatus(Integer type, String des)
{
this.type = type;
this.des = des;
}
public static List<EnumCrmUserStatus> getTypeList() {
return Arrays.asList(values());
}
public Integer getType() {
return type;
}
public String getDes() {
return des;
}
public static boolean checkExist(Integer type){
if(type == null) return
false;
for (EnumCrmUserStatus value : EnumCrmUserStatus.values()){
if (value.type.compareTo(type) == 0){
return true;
}
}
return false;
}
public static EnumCrmUserStatus getEnumCashFlowType(Integer type){
if(type == null) return EnumCrmUserStatus.未知;
for (EnumCrmUserStatus value : EnumCrmUserStatus.values()){
if (value.type.compareTo(type) == 0){
return value;
}
}
return EnumCrmUserStatus.未知;
}
public static String getDes(Integer type){
if(type == null) return EnumCrmUserStatus.未知.des;
for (EnumCrmUserStatus value : EnumCrmUserStatus.values()){
if (value.type.compareTo(type) == 0){
return value.des;
}
}
return EnumCrmUserStatus.未知.des;
}
}
4、根据id删除
1、一般正常
2、信息错误录入
@RequestMapping("del")
@ResponseBody
public ResponseBean delCustomer(Long id){
try {
customerService.delCustomer(id);
return ResponseBean.buildSuccess();
} catch (AppException e)
{
return ResponseBean.buildFailure(e.getMessage());
}
}
2、删除的正确使用方式
1、正常情况下不应该从数据库表中直接删除,而是应该添加字段,让它变成不可见。(这种不可见需要再查询的时候特别 注意)
1、删除代码,
@Override
public void delContact(Long ContactId)
{
Contact Contact = ContactDAO.findOne(ContactId);
Contact.setIsVisible(Contact.DISABLE);
ContactDAO.save(Contact);
}
2、对应实体类字段
@Entity
@Table(name = "crm_contact_record")
public class Contact implements Serializable {
public static final int ENABLE = 1; //可见
public static final int DISABLE = 0; //不可见
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private Long adminId;
private Long customerId;
private String title;
private String contactName;
private Integer type;
private String content;
private Integer isVisible;
private Date contactTime;
private Date cdate;
3、自定义异常的使用
1、业务异常
/**
* Created by j.sh on 2015/5/9.
* 业务异常
*/
public class AppException extends RuntimeException {
private String code;
public AppException(String message)
{
super(message);
this.code = ErrorCodeEnum.逻辑错误.code;
}
public AppException(String code,String message)
{
super(message);
this.code = code;
}
public String getCode() {
return code;
}
public void setCode(String code)
{
this.code = code;
}
}
2、异常错误的枚举值
/**
* 类名称:ErrorCodeEnum
* 类描述:错误状态枚举值
* 创建人:qingxu
* 修改人:
* 修改时间:2015/11/5 11:27
* 修改备注:
*
* @version 1.0.0
*/
public enum ErrorCodeEnum {
正常("200","访问正常"),
条件验证失败("201","条件验证失败"),
参数解析失败("202","参数解析失败"),
操作确认("203","操作确认"),
逻辑错误("301","逻辑错误"),
登录标识过期("400","登录标识过期"),
强制升级("401","强制升级"),
访问禁止("403","访问禁止"),
页面丢失("404","页面丢失"),
系统错误("500","系统内部错误"),
未登录("204","未登录"),
不是企业认证("205","不是企业认证"),
UNKNOWN("999","未知错误")
;
public String code;
public String desc;
ErrorCodeEnum(String code, String desc)
{
this.code = code;
this.desc = desc;
}
public static String getDesc(String code){
if(code == null || "".equals(code)){
return ErrorCodeEnum.UNKNOWN.desc;
}
for(ErrorCodeEnum desc: ErrorCodeEnum.values()){
if(desc.code.equals(code)){
return desc.desc;
}
}
return ErrorCodeEnum.UNKNOWN.desc;
}
}
3、正确使用
@RequestMapping("config/loadDockedQuery")
@ResponseBody
public ResponseBean loadDockedQuery(Integer dockedType,String validate){
try {
AppsDockedConfigData data = appsDockedBufferService.loadAppsDockedConfigData(validate,dockedType);
return ResponseBean.buildSuccess(data);
} catch (AppException e)
{
return ResponseBean.buildFailure(e.getCode(),e.getMessage());
} catch (Exception e)
{
logger.error(e.getMessage(),e);
return ResponseBean.buildFailure(ErrorCodeEnum.系统错误);
}
}
4、js前端调用
$http.post(ctx + '/skin/enable', {
appId: item.trackId,
channelListsEnableValue: $scope.channelListsEnableValue
}).success(function (data, status)
{
$scope.processing = false;
if (data.success) {
toastr.success('操作成功', '提示');
$scope.skinData();
} else {
ngDialog.alert(data.message);
}
})
.error(function (data, status)
{
$scope.processing = false;
ngDialog.alert('操作失败');
});