注释 #3

Merged
pzobk9anl merged 3 commits from lzh into qwer 1 month ago

@ -19,12 +19,10 @@ import com.xmomen.module.receipt.mapper.ReceivingCodeRequestMapper;
public class ReceivingCodeRequestController { public class ReceivingCodeRequestController {
@Autowired @Autowired
MybatisDao mybatisDao; MybatisDao mybatisDao;
/** /*
*
* @param id */
* @return
*/
@RequestMapping(value = "/receivingCodeRequest", method = RequestMethod.GET) @RequestMapping(value = "/receivingCodeRequest", method = RequestMethod.GET)
@Log(actionName = "查询收货码请求") @Log(actionName = "查询收货码请求")
public Page<TbReceivingCodeRequest> getExpressList(@RequestParam(value = "limit") Integer limit, public Page<TbReceivingCodeRequest> getExpressList(@RequestParam(value = "limit") Integer limit,
@ -38,6 +36,7 @@ public class ReceivingCodeRequestController {
map.put("keyword", keyword); map.put("keyword", keyword);
map.put("requestTimeStart", requestTimeStart); map.put("requestTimeStart", requestTimeStart);
map.put("requestTimeEnd", requestTimeEnd); map.put("requestTimeEnd", requestTimeEnd);
// 调用mybatisDao的selectPage方法传入ReceivingCodeRequestMapperNameSpace + "getReceivingCodeRequestList"作为参数map作为参数limit和offset作为参数
return (Page<TbReceivingCodeRequest>) mybatisDao.selectPage(ReceivingCodeRequestMapper.ReceivingCodeRequestMapperNameSpace + "getReceivingCodeRequestList", map, limit, offset); return (Page<TbReceivingCodeRequest>) mybatisDao.selectPage(ReceivingCodeRequestMapper.ReceivingCodeRequestMapperNameSpace + "getReceivingCodeRequestList", map, limit, offset);
} }

@ -22,9 +22,7 @@ import com.xmomen.module.receipt.model.ReturnOrderModel;
import com.xmomen.module.receipt.model.ReturnOrderQuery; import com.xmomen.module.receipt.model.ReturnOrderQuery;
import com.xmomen.module.receipt.service.ReturnOrderService; import com.xmomen.module.receipt.service.ReturnOrderService;
/**
* Created by Jeng on 2016/3/30.
*/
@RestController @RestController
public class ReturnOrderController { public class ReturnOrderController {
@ -34,13 +32,8 @@ public class ReturnOrderController {
@Autowired @Autowired
MybatisDao mybatisDao; MybatisDao mybatisDao;
/**
* 退 // 查询退货订单列表
* @param limit
* @param offset
* @param keyword
* @return
*/
@RequestMapping(value = "/returnOrder", method = RequestMethod.GET) @RequestMapping(value = "/returnOrder", method = RequestMethod.GET)
@Log(actionName = "查询退货订单列表") @Log(actionName = "查询退货订单列表")
public Page<ReturnOrderModel> getUserList(@RequestParam(value = "limit") Integer limit, public Page<ReturnOrderModel> getUserList(@RequestParam(value = "limit") Integer limit,
@ -50,29 +43,22 @@ public class ReturnOrderController {
@RequestParam(value = "returnTimeStart",required = false) String returnTimeStart, @RequestParam(value = "returnTimeStart",required = false) String returnTimeStart,
@RequestParam(value = "returnTimeEnd",required = false) String returnTimeEnd @RequestParam(value = "returnTimeEnd",required = false) String returnTimeEnd
){ ){
// 创建退货订单查询对象
ReturnOrderQuery orderQuery = new ReturnOrderQuery(); ReturnOrderQuery orderQuery = new ReturnOrderQuery();
orderQuery.setKeyword(keyword); orderQuery.setKeyword(keyword);
// 如果退货时间开始不为空,则设置退货时间开始
if(StringUtilsExt.isNotBlank(returnTimeStart)){ if(StringUtilsExt.isNotBlank(returnTimeStart)){
orderQuery.setReturnTimeStart(returnTimeStart); orderQuery.setReturnTimeStart(returnTimeStart);
} }
// 如果退货时间结束不为空,则设置退货时间结束
if(StringUtilsExt.isNotBlank(returnTimeEnd)){ if(StringUtilsExt.isNotBlank(returnTimeEnd)){
orderQuery.setReturnTimeEnd(returnTimeEnd); orderQuery.setReturnTimeEnd(returnTimeEnd);
} }
//客服经理过滤 如果有客服组权限则不过滤 }
// if(SecurityUtils.getSubject().hasRole(AppConstants.CUSTOMER_MANAGER_PERMISSION_CODE) && !SecurityUtils.getSubject().hasRole(AppConstants.CUSTOMER_PERMISSION_CODE)){ // 调用退货订单服务,获取退货订单列表
// Integer userId = (Integer) SecurityUtils.getSubject().getSession().getAttribute(AppConstants.SESSION_USER_ID_KEY);
// orderQuery.setCreateUserId(userId);
// }
return returnOrderService.getReturnOrderList(orderQuery, limit, offset); return returnOrderService.getReturnOrderList(orderQuery, limit, offset);
} }
/**
* 退
* @param limit
* @param offset
* @param orderNo
* @return
*/
@RequestMapping(value = "/returnOrder/{id}/item", method = RequestMethod.GET) @RequestMapping(value = "/returnOrder/{id}/item", method = RequestMethod.GET)
@Log(actionName = "查询退货订单商品列表") @Log(actionName = "查询退货订单商品列表")
public Page<TbReturnOrderItem> getUserList(@RequestParam(value = "limit") Integer limit, public Page<TbReturnOrderItem> getUserList(@RequestParam(value = "limit") Integer limit,
@ -83,12 +69,7 @@ public class ReturnOrderController {
return mybatisDao.selectPageByModel(returnOrderItem, limit, offset); return mybatisDao.selectPageByModel(returnOrderItem, limit, offset);
} }
/**
* 退
* @param orderNo
* @param statusCd
* @return
*/
@RequestMapping(value = "/returnOrder/{id}/audit", method = RequestMethod.POST) @RequestMapping(value = "/returnOrder/{id}/audit", method = RequestMethod.POST)
@Log(actionName = "审核退货订单") @Log(actionName = "审核退货订单")
public void auditReturnOrder(@PathVariable(value = "id") Integer id, public void auditReturnOrder(@PathVariable(value = "id") Integer id,
@ -96,20 +77,16 @@ public class ReturnOrderController {
this.returnOrderService.auditReturnOrder(id,statusCd); this.returnOrderService.auditReturnOrder(id,statusCd);
} }
/**
* 退 // 调用退货订单服务,审核退货订单
* @param boxNo
*/
@RequestMapping(value ="/returnOrder/returnOrderShouhuo",method = RequestMethod.PUT) @RequestMapping(value ="/returnOrder/returnOrderShouhuo",method = RequestMethod.PUT)
@Log(actionName = "退货收货扫描操作") @Log(actionName = "退货收货扫描操作")
public ReturnOrderModel returnOrderShouhuo(@RequestParam(value = "boxNo")String boxNo){ public ReturnOrderModel returnOrderShouhuo(@RequestParam(value = "boxNo")String boxNo){
return this.returnOrderService.returnOrderShouhuo(boxNo); return this.returnOrderService.returnOrderShouhuo(boxNo);
} }
/**
* 退 // 调用退货订单服务,退货收货扫描操作
* @param boxNo
*/
@RequestMapping(value ="/returnOrder/shouhuo",method = RequestMethod.PUT) @RequestMapping(value ="/returnOrder/shouhuo",method = RequestMethod.PUT)
@Log(actionName = "退货收货操作") @Log(actionName = "退货收货操作")
public void orderNo(@RequestParam(value = "orderNo")String orderNo){ public void orderNo(@RequestParam(value = "orderNo")String orderNo){

@ -12,34 +12,27 @@ import javax.persistence.Version;
@Entity @Entity
@Table(name = "tb_receiving_code_request") @Table(name = "tb_receiving_code_request")
public class TbReceivingCodeRequest extends BaseMybatisModel { public class TbReceivingCodeRequest extends BaseMybatisModel {
/**
* // 主键ID
*/
private Integer id; private Integer id;
/** // 订单号
*
*/
private String orderNo; private String orderNo;
/**
* // 请求用户
*/
private String requestUser; private String requestUser;
/**
* // 请求时间
*/
private Date requestTime; private Date requestTime;
/**
* // 请求电话
*/
private String requestPhone; private String requestPhone;
/**
* // 请求快递ID
*/
private Integer requestExpressId; private Integer requestExpressId;
@Column(name = "id") @Column(name = "id")

@ -5,47 +5,60 @@ import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
// 定义一个名为TbReceivingCodeRequestExample的类继承自BaseMybatisExample
public class TbReceivingCodeRequestExample extends BaseMybatisExample { public class TbReceivingCodeRequestExample extends BaseMybatisExample {
// 定义一个orderByClause变量用于存储排序字段
protected String orderByClause; protected String orderByClause;
// 定义一个distinct变量用于存储是否去重
protected boolean distinct; protected boolean distinct;
// 定义一个oredCriteria变量用于存储查询条件
protected List<Criteria> oredCriteria; protected List<Criteria> oredCriteria;
// 构造函数初始化oredCriteria
public TbReceivingCodeRequestExample() { public TbReceivingCodeRequestExample() {
oredCriteria = new ArrayList<Criteria>(); oredCriteria = new ArrayList<Criteria>();
} }
// 设置orderByClause的值
public void setOrderByClause(String orderByClause) { public void setOrderByClause(String orderByClause) {
this.orderByClause = orderByClause; this.orderByClause = orderByClause;
} }
// 获取orderByClause的值
public String getOrderByClause() { public String getOrderByClause() {
return orderByClause; return orderByClause;
} }
// 设置distinct的值
public void setDistinct(boolean distinct) { public void setDistinct(boolean distinct) {
this.distinct = distinct; this.distinct = distinct;
} }
// 获取distinct的值
public boolean isDistinct() { public boolean isDistinct() {
return distinct; return distinct;
} }
// 获取oredCriteria的值
public List<Criteria> getOredCriteria() { public List<Criteria> getOredCriteria() {
return oredCriteria; return oredCriteria;
} }
// 添加一个查询条件
public void or(Criteria criteria) { public void or(Criteria criteria) {
oredCriteria.add(criteria); oredCriteria.add(criteria);
} }
// 创建一个查询条件
public Criteria or() { public Criteria or() {
Criteria criteria = createCriteriaInternal(); Criteria criteria = createCriteriaInternal();
oredCriteria.add(criteria); oredCriteria.add(criteria);
return criteria; return criteria;
} }
// 创建一个查询条件
public Criteria createCriteria() { public Criteria createCriteria() {
Criteria criteria = createCriteriaInternal(); Criteria criteria = createCriteriaInternal();
if (oredCriteria.size() == 0) { if (oredCriteria.size() == 0) {
@ -54,37 +67,46 @@ public class TbReceivingCodeRequestExample extends BaseMybatisExample {
return criteria; return criteria;
} }
// 创建一个查询条件
protected Criteria createCriteriaInternal() { protected Criteria createCriteriaInternal() {
Criteria criteria = new Criteria(); Criteria criteria = new Criteria();
return criteria; return criteria;
} }
// 清空查询条件
public void clear() { public void clear() {
oredCriteria.clear(); oredCriteria.clear();
orderByClause = null; orderByClause = null;
distinct = false; distinct = false;
} }
// 定义一个内部类GeneratedCriteria用于存储查询条件
protected abstract static class GeneratedCriteria { protected abstract static class GeneratedCriteria {
// 定义一个criteria变量用于存储查询条件
protected List<Criterion> criteria; protected List<Criterion> criteria;
// 构造函数初始化criteria
protected GeneratedCriteria() { protected GeneratedCriteria() {
super(); super();
criteria = new ArrayList<Criterion>(); criteria = new ArrayList<Criterion>();
} }
// 判断查询条件是否有效
public boolean isValid() { public boolean isValid() {
return criteria.size() > 0; return criteria.size() > 0;
} }
// 获取所有查询条件
public List<Criterion> getAllCriteria() { public List<Criterion> getAllCriteria() {
return criteria; return criteria;
} }
// 获取查询条件
public List<Criterion> getCriteria() { public List<Criterion> getCriteria() {
return criteria; return criteria;
} }
// 添加一个查询条件
protected void addCriterion(String condition) { protected void addCriterion(String condition) {
if (condition == null) { if (condition == null) {
throw new RuntimeException("Value for condition cannot be null"); throw new RuntimeException("Value for condition cannot be null");
@ -92,6 +114,7 @@ public class TbReceivingCodeRequestExample extends BaseMybatisExample {
criteria.add(new Criterion(condition)); criteria.add(new Criterion(condition));
} }
// 添加一个查询条件
protected void addCriterion(String condition, Object value, String property) { protected void addCriterion(String condition, Object value, String property) {
if (value == null) { if (value == null) {
throw new RuntimeException("Value for " + property + " cannot be null"); throw new RuntimeException("Value for " + property + " cannot be null");
@ -99,6 +122,7 @@ public class TbReceivingCodeRequestExample extends BaseMybatisExample {
criteria.add(new Criterion(condition, value)); criteria.add(new Criterion(condition, value));
} }
// 添加一个查询条件
protected void addCriterion(String condition, Object value1, Object value2, String property) { protected void addCriterion(String condition, Object value1, Object value2, String property) {
if (value1 == null || value2 == null) { if (value1 == null || value2 == null) {
throw new RuntimeException("Between values for " + property + " cannot be null"); throw new RuntimeException("Between values for " + property + " cannot be null");
@ -106,366 +130,439 @@ public class TbReceivingCodeRequestExample extends BaseMybatisExample {
criteria.add(new Criterion(condition, value1, value2)); criteria.add(new Criterion(condition, value1, value2));
} }
// 判断id是否为空
public Criteria andIdIsNull() { public Criteria andIdIsNull() {
addCriterion("id is null"); addCriterion("id is null");
return (Criteria) this; return (Criteria) this;
} }
// 判断id是否不为空
public Criteria andIdIsNotNull() { public Criteria andIdIsNotNull() {
addCriterion("id is not null"); addCriterion("id is not null");
return (Criteria) this; return (Criteria) this;
} }
// 判断id是否等于某个值
public Criteria andIdEqualTo(Integer value) { public Criteria andIdEqualTo(Integer value) {
addCriterion("id =", value, "id"); addCriterion("id =", value, "id");
return (Criteria) this; return (Criteria) this;
} }
// 判断id是否不等于某个值
public Criteria andIdNotEqualTo(Integer value) { public Criteria andIdNotEqualTo(Integer value) {
addCriterion("id <>", value, "id"); addCriterion("id <>", value, "id");
return (Criteria) this; return (Criteria) this;
} }
// 判断id是否大于某个值
public Criteria andIdGreaterThan(Integer value) { public Criteria andIdGreaterThan(Integer value) {
addCriterion("id >", value, "id"); addCriterion("id >", value, "id");
return (Criteria) this; return (Criteria) this;
} }
// 判断id是否大于等于某个值
public Criteria andIdGreaterThanOrEqualTo(Integer value) { public Criteria andIdGreaterThanOrEqualTo(Integer value) {
addCriterion("id >=", value, "id"); addCriterion("id >=", value, "id");
return (Criteria) this; return (Criteria) this;
} }
// 判断id是否小于某个值
public Criteria andIdLessThan(Integer value) { public Criteria andIdLessThan(Integer value) {
addCriterion("id <", value, "id"); addCriterion("id <", value, "id");
return (Criteria) this; return (Criteria) this;
} }
// 判断id是否小于等于某个值
public Criteria andIdLessThanOrEqualTo(Integer value) { public Criteria andIdLessThanOrEqualTo(Integer value) {
addCriterion("id <=", value, "id"); addCriterion("id <=", value, "id");
return (Criteria) this; return (Criteria) this;
} }
// 判断id是否在某个范围内
public Criteria andIdIn(List<Integer> values) { public Criteria andIdIn(List<Integer> values) {
addCriterion("id in", values, "id"); addCriterion("id in", values, "id");
return (Criteria) this; return (Criteria) this;
} }
// 判断id是否不在某个范围内
public Criteria andIdNotIn(List<Integer> values) { public Criteria andIdNotIn(List<Integer> values) {
addCriterion("id not in", values, "id"); addCriterion("id not in", values, "id");
return (Criteria) this; return (Criteria) this;
} }
// 判断id是否在某个范围内
public Criteria andIdBetween(Integer value1, Integer value2) { public Criteria andIdBetween(Integer value1, Integer value2) {
addCriterion("id between", value1, value2, "id"); addCriterion("id between", value1, value2, "id");
return (Criteria) this; return (Criteria) this;
} }
// 判断id是否不在某个范围内
public Criteria andIdNotBetween(Integer value1, Integer value2) { public Criteria andIdNotBetween(Integer value1, Integer value2) {
addCriterion("id not between", value1, value2, "id"); addCriterion("id not between", value1, value2, "id");
return (Criteria) this; return (Criteria) this;
} }
// 判断orderNo是否为空
public Criteria andOrderNoIsNull() { public Criteria andOrderNoIsNull() {
addCriterion("order_no is null"); addCriterion("order_no is null");
return (Criteria) this; return (Criteria) this;
} }
// 判断orderNo是否不为空
public Criteria andOrderNoIsNotNull() { public Criteria andOrderNoIsNotNull() {
addCriterion("order_no is not null"); addCriterion("order_no is not null");
return (Criteria) this; return (Criteria) this;
} }
// 判断orderNo是否等于某个值
public Criteria andOrderNoEqualTo(String value) { public Criteria andOrderNoEqualTo(String value) {
addCriterion("order_no =", value, "orderNo"); addCriterion("order_no =", value, "orderNo");
return (Criteria) this; return (Criteria) this;
} }
// 判断orderNo是否不等于某个值
public Criteria andOrderNoNotEqualTo(String value) { public Criteria andOrderNoNotEqualTo(String value) {
addCriterion("order_no <>", value, "orderNo"); addCriterion("order_no <>", value, "orderNo");
return (Criteria) this; return (Criteria) this;
} }
// 判断orderNo是否大于某个值
public Criteria andOrderNoGreaterThan(String value) { public Criteria andOrderNoGreaterThan(String value) {
addCriterion("order_no >", value, "orderNo"); addCriterion("order_no >", value, "orderNo");
return (Criteria) this; return (Criteria) this;
} }
// 判断orderNo是否大于等于某个值
public Criteria andOrderNoGreaterThanOrEqualTo(String value) { public Criteria andOrderNoGreaterThanOrEqualTo(String value) {
addCriterion("order_no >=", value, "orderNo"); addCriterion("order_no >=", value, "orderNo");
return (Criteria) this; return (Criteria) this;
} }
// 判断orderNo是否小于某个值
public Criteria andOrderNoLessThan(String value) { public Criteria andOrderNoLessThan(String value) {
addCriterion("order_no <", value, "orderNo"); addCriterion("order_no <", value, "orderNo");
return (Criteria) this; return (Criteria) this;
} }
// 判断orderNo是否小于等于某个值
public Criteria andOrderNoLessThanOrEqualTo(String value) { public Criteria andOrderNoLessThanOrEqualTo(String value) {
addCriterion("order_no <=", value, "orderNo"); addCriterion("order_no <=", value, "orderNo");
return (Criteria) this; return (Criteria) this;
} }
// 判断orderNo是否包含某个值
public Criteria andOrderNoLike(String value) { public Criteria andOrderNoLike(String value) {
addCriterion("order_no like", value, "orderNo"); addCriterion("order_no like", value, "orderNo");
return (Criteria) this; return (Criteria) this;
} }
// 判断orderNo是否不包含某个值
public Criteria andOrderNoNotLike(String value) { public Criteria andOrderNoNotLike(String value) {
addCriterion("order_no not like", value, "orderNo"); addCriterion("order_no not like", value, "orderNo");
return (Criteria) this; return (Criteria) this;
} }
// 判断orderNo是否在某个范围内
public Criteria andOrderNoIn(List<String> values) { public Criteria andOrderNoIn(List<String> values) {
addCriterion("order_no in", values, "orderNo"); addCriterion("order_no in", values, "orderNo");
return (Criteria) this; return (Criteria) this;
} }
// 判断orderNo是否不在某个范围内
public Criteria andOrderNoNotIn(List<String> values) { public Criteria andOrderNoNotIn(List<String> values) {
addCriterion("order_no not in", values, "orderNo"); addCriterion("order_no not in", values, "orderNo");
return (Criteria) this; return (Criteria) this;
} }
// 判断orderNo是否在某个范围内
public Criteria andOrderNoBetween(String value1, String value2) { public Criteria andOrderNoBetween(String value1, String value2) {
addCriterion("order_no between", value1, value2, "orderNo"); addCriterion("order_no between", value1, value2, "orderNo");
return (Criteria) this; return (Criteria) this;
} }
// 判断orderNo是否不在某个范围内
public Criteria andOrderNoNotBetween(String value1, String value2) { public Criteria andOrderNoNotBetween(String value1, String value2) {
addCriterion("order_no not between", value1, value2, "orderNo"); addCriterion("order_no not between", value1, value2, "orderNo");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestUser是否为空
public Criteria andRequestUserIsNull() { public Criteria andRequestUserIsNull() {
addCriterion("request_user is null"); addCriterion("request_user is null");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestUser是否不为空
public Criteria andRequestUserIsNotNull() { public Criteria andRequestUserIsNotNull() {
addCriterion("request_user is not null"); addCriterion("request_user is not null");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestUser是否等于某个值
public Criteria andRequestUserEqualTo(String value) { public Criteria andRequestUserEqualTo(String value) {
addCriterion("request_user =", value, "requestUser"); addCriterion("request_user =", value, "requestUser");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestUser是否不等于某个值
public Criteria andRequestUserNotEqualTo(String value) { public Criteria andRequestUserNotEqualTo(String value) {
addCriterion("request_user <>", value, "requestUser"); addCriterion("request_user <>", value, "requestUser");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestUser是否大于某个值
public Criteria andRequestUserGreaterThan(String value) { public Criteria andRequestUserGreaterThan(String value) {
addCriterion("request_user >", value, "requestUser"); addCriterion("request_user >", value, "requestUser");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestUser是否大于等于某个值
public Criteria andRequestUserGreaterThanOrEqualTo(String value) { public Criteria andRequestUserGreaterThanOrEqualTo(String value) {
addCriterion("request_user >=", value, "requestUser"); addCriterion("request_user >=", value, "requestUser");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestUser是否小于某个值
public Criteria andRequestUserLessThan(String value) { public Criteria andRequestUserLessThan(String value) {
addCriterion("request_user <", value, "requestUser"); addCriterion("request_user <", value, "requestUser");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestUser是否小于等于某个值
public Criteria andRequestUserLessThanOrEqualTo(String value) { public Criteria andRequestUserLessThanOrEqualTo(String value) {
addCriterion("request_user <=", value, "requestUser"); addCriterion("request_user <=", value, "requestUser");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestUser是否包含某个值
public Criteria andRequestUserLike(String value) { public Criteria andRequestUserLike(String value) {
addCriterion("request_user like", value, "requestUser"); addCriterion("request_user like", value, "requestUser");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestUser是否不包含某个值
public Criteria andRequestUserNotLike(String value) { public Criteria andRequestUserNotLike(String value) {
addCriterion("request_user not like", value, "requestUser"); addCriterion("request_user not like", value, "requestUser");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestUser是否在某个范围内
public Criteria andRequestUserIn(List<String> values) { public Criteria andRequestUserIn(List<String> values) {
addCriterion("request_user in", values, "requestUser"); addCriterion("request_user in", values, "requestUser");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestUser是否不在某个范围内
public Criteria andRequestUserNotIn(List<String> values) { public Criteria andRequestUserNotIn(List<String> values) {
addCriterion("request_user not in", values, "requestUser"); addCriterion("request_user not in", values, "requestUser");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestUser是否在某个范围内
public Criteria andRequestUserBetween(String value1, String value2) { public Criteria andRequestUserBetween(String value1, String value2) {
addCriterion("request_user between", value1, value2, "requestUser"); addCriterion("request_user between", value1, value2, "requestUser");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestUser是否不在某个范围内
public Criteria andRequestUserNotBetween(String value1, String value2) { public Criteria andRequestUserNotBetween(String value1, String value2) {
addCriterion("request_user not between", value1, value2, "requestUser"); addCriterion("request_user not between", value1, value2, "requestUser");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestTime是否为空
public Criteria andRequestTimeIsNull() { public Criteria andRequestTimeIsNull() {
addCriterion("request_time is null"); addCriterion("request_time is null");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestTime是否不为空
public Criteria andRequestTimeIsNotNull() { public Criteria andRequestTimeIsNotNull() {
addCriterion("request_time is not null"); addCriterion("request_time is not null");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestTime是否等于某个值
public Criteria andRequestTimeEqualTo(Date value) { public Criteria andRequestTimeEqualTo(Date value) {
addCriterion("request_time =", value, "requestTime"); addCriterion("request_time =", value, "requestTime");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestTime是否不等于某个值
public Criteria andRequestTimeNotEqualTo(Date value) { public Criteria andRequestTimeNotEqualTo(Date value) {
addCriterion("request_time <>", value, "requestTime"); addCriterion("request_time <>", value, "requestTime");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestTime是否大于某个值
public Criteria andRequestTimeGreaterThan(Date value) { public Criteria andRequestTimeGreaterThan(Date value) {
addCriterion("request_time >", value, "requestTime"); addCriterion("request_time >", value, "requestTime");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestTime是否大于等于某个值
public Criteria andRequestTimeGreaterThanOrEqualTo(Date value) { public Criteria andRequestTimeGreaterThanOrEqualTo(Date value) {
addCriterion("request_time >=", value, "requestTime"); addCriterion("request_time >=", value, "requestTime");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestTime是否小于某个值
public Criteria andRequestTimeLessThan(Date value) { public Criteria andRequestTimeLessThan(Date value) {
addCriterion("request_time <", value, "requestTime"); addCriterion("request_time <", value, "requestTime");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestTime是否小于等于某个值
public Criteria andRequestTimeLessThanOrEqualTo(Date value) { public Criteria andRequestTimeLessThanOrEqualTo(Date value) {
addCriterion("request_time <=", value, "requestTime"); addCriterion("request_time <=", value, "requestTime");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestTime是否在某个范围内
public Criteria andRequestTimeIn(List<Date> values) { public Criteria andRequestTimeIn(List<Date> values) {
addCriterion("request_time in", values, "requestTime"); addCriterion("request_time in", values, "requestTime");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestTime是否不在某个范围内
public Criteria andRequestTimeNotIn(List<Date> values) { public Criteria andRequestTimeNotIn(List<Date> values) {
addCriterion("request_time not in", values, "requestTime"); addCriterion("request_time not in", values, "requestTime");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestTime是否在某个范围内
public Criteria andRequestTimeBetween(Date value1, Date value2) { public Criteria andRequestTimeBetween(Date value1, Date value2) {
addCriterion("request_time between", value1, value2, "requestTime"); addCriterion("request_time between", value1, value2, "requestTime");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestTime是否不在某个范围内
public Criteria andRequestTimeNotBetween(Date value1, Date value2) { public Criteria andRequestTimeNotBetween(Date value1, Date value2) {
addCriterion("request_time not between", value1, value2, "requestTime"); addCriterion("request_time not between", value1, value2, "requestTime");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestPhone是否为空
public Criteria andRequestPhoneIsNull() { public Criteria andRequestPhoneIsNull() {
addCriterion("request_phone is null"); addCriterion("request_phone is null");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestPhone是否不为空
public Criteria andRequestPhoneIsNotNull() { public Criteria andRequestPhoneIsNotNull() {
addCriterion("request_phone is not null"); addCriterion("request_phone is not null");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestPhone是否等于某个值
public Criteria andRequestPhoneEqualTo(String value) { public Criteria andRequestPhoneEqualTo(String value) {
addCriterion("request_phone =", value, "requestPhone"); addCriterion("request_phone =", value, "requestPhone");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestPhone是否不等于某个值
public Criteria andRequestPhoneNotEqualTo(String value) { public Criteria andRequestPhoneNotEqualTo(String value) {
addCriterion("request_phone <>", value, "requestPhone"); addCriterion("request_phone <>", value, "requestPhone");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestPhone是否大于某个值
public Criteria andRequestPhoneGreaterThan(String value) { public Criteria andRequestPhoneGreaterThan(String value) {
addCriterion("request_phone >", value, "requestPhone"); addCriterion("request_phone >", value, "requestPhone");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestPhone是否大于等于某个值
public Criteria andRequestPhoneGreaterThanOrEqualTo(String value) { public Criteria andRequestPhoneGreaterThanOrEqualTo(String value) {
addCriterion("request_phone >=", value, "requestPhone"); addCriterion("request_phone >=", value, "requestPhone");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestPhone是否小于某个值
public Criteria andRequestPhoneLessThan(String value) { public Criteria andRequestPhoneLessThan(String value) {
addCriterion("request_phone <", value, "requestPhone"); addCriterion("request_phone <", value, "requestPhone");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestPhone是否小于等于某个值
public Criteria andRequestPhoneLessThanOrEqualTo(String value) { public Criteria andRequestPhoneLessThanOrEqualTo(String value) {
addCriterion("request_phone <=", value, "requestPhone"); addCriterion("request_phone <=", value, "requestPhone");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestPhone是否包含某个值
public Criteria andRequestPhoneLike(String value) { public Criteria andRequestPhoneLike(String value) {
addCriterion("request_phone like", value, "requestPhone"); addCriterion("request_phone like", value, "requestPhone");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestPhone是否不包含某个值
public Criteria andRequestPhoneNotLike(String value) { public Criteria andRequestPhoneNotLike(String value) {
addCriterion("request_phone not like", value, "requestPhone"); addCriterion("request_phone not like", value, "requestPhone");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestPhone是否在某个范围内
public Criteria andRequestPhoneIn(List<String> values) { public Criteria andRequestPhoneIn(List<String> values) {
addCriterion("request_phone in", values, "requestPhone"); addCriterion("request_phone in", values, "requestPhone");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestPhone是否不在某个范围内
public Criteria andRequestPhoneNotIn(List<String> values) { public Criteria andRequestPhoneNotIn(List<String> values) {
addCriterion("request_phone not in", values, "requestPhone"); addCriterion("request_phone not in", values, "requestPhone");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestPhone是否在某个范围内
public Criteria andRequestPhoneBetween(String value1, String value2) { public Criteria andRequestPhoneBetween(String value1, String value2) {
addCriterion("request_phone between", value1, value2, "requestPhone"); addCriterion("request_phone between", value1, value2, "requestPhone");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestPhone是否不在某个范围内
public Criteria andRequestPhoneNotBetween(String value1, String value2) { public Criteria andRequestPhoneNotBetween(String value1, String value2) {
addCriterion("request_phone not between", value1, value2, "requestPhone"); addCriterion("request_phone not between", value1, value2, "requestPhone");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestExpressId是否为空
public Criteria andRequestExpressIdIsNull() { public Criteria andRequestExpressIdIsNull() {
addCriterion("request_express_id is null"); addCriterion("request_express_id is null");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestExpressId是否不为空
public Criteria andRequestExpressIdIsNotNull() { public Criteria andRequestExpressIdIsNotNull() {
addCriterion("request_express_id is not null"); addCriterion("request_express_id is not null");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestExpressId是否等于某个值
public Criteria andRequestExpressIdEqualTo(Integer value) { public Criteria andRequestExpressIdEqualTo(Integer value) {
addCriterion("request_express_id =", value, "requestExpressId"); addCriterion("request_express_id =", value, "requestExpressId");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestExpressId是否不等于某个值
public Criteria andRequestExpressIdNotEqualTo(Integer value) { public Criteria andRequestExpressIdNotEqualTo(Integer value) {
addCriterion("request_express_id <>", value, "requestExpressId"); addCriterion("request_express_id <>", value, "requestExpressId");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestExpressId是否大于某个值
public Criteria andRequestExpressIdGreaterThan(Integer value) { public Criteria andRequestExpressIdGreaterThan(Integer value) {
addCriterion("request_express_id >", value, "requestExpressId"); addCriterion("request_express_id >", value, "requestExpressId");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestExpressId是否大于等于某个值
public Criteria andRequestExpressIdGreaterThanOrEqualTo(Integer value) { public Criteria andRequestExpressIdGreaterThanOrEqualTo(Integer value) {
addCriterion("request_express_id >=", value, "requestExpressId"); addCriterion("request_express_id >=", value, "requestExpressId");
return (Criteria) this; return (Criteria) this;
} }
// 判断requestExpressId是否小于某个值
public Criteria andRequestExpressIdLessThan(Integer value) { public Criteria andRequestExpressIdLessThan(Integer value) {
addCriterion("request_express_id <", value, "requestExpressId"); addCriterion("request_express_id <", value, "requestExpressId");
return (Criteria) this; return (Criteria) this;

@ -5,12 +5,17 @@ import com.xmomen.module.receipt.entity.TbReceivingCodeRequest;
import com.xmomen.module.receipt.entity.TbReceivingCodeRequestExample; import com.xmomen.module.receipt.entity.TbReceivingCodeRequestExample;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
// TbReceivingCodeRequestMapper接口继承MybatisMapper
public interface TbReceivingCodeRequestMapper extends MybatisMapper { public interface TbReceivingCodeRequestMapper extends MybatisMapper {
// 根据example统计TbReceivingCodeRequest的数量
int countByExample(TbReceivingCodeRequestExample example); int countByExample(TbReceivingCodeRequestExample example);
// 根据example删除TbReceivingCodeRequest
int deleteByExample(TbReceivingCodeRequestExample example); int deleteByExample(TbReceivingCodeRequestExample example);
// 插入TbReceivingCodeRequest
int insertSelective(TbReceivingCodeRequest record); int insertSelective(TbReceivingCodeRequest record);
// 根据example更新TbReceivingCodeRequest
int updateByExampleSelective(@Param("record") TbReceivingCodeRequest record, @Param("example") TbReceivingCodeRequestExample example); int updateByExampleSelective(@Param("record") TbReceivingCodeRequest record, @Param("example") TbReceivingCodeRequestExample example);
} }

@ -1,6 +1,8 @@
package com.xmomen.module.receipt.mapper; package com.xmomen.module.receipt.mapper;
// 定义一个接口ReceivingCodeRequestMapper
public interface ReceivingCodeRequestMapper { public interface ReceivingCodeRequestMapper {
// 定义一个常量ReceivingCodeRequestMapperNameSpace值为"com.xmomen.module.receipt.mapper.ReceivingCodeRequestMapper."
public static final String ReceivingCodeRequestMapperNameSpace = "com.xmomen.module.receipt.mapper.ReceivingCodeRequestMapper."; public static final String ReceivingCodeRequestMapperNameSpace = "com.xmomen.module.receipt.mapper.ReceivingCodeRequestMapper.";
} }

@ -14,13 +14,16 @@
left join tb_order_ref receiving_code on receiving_code.order_no = main.order_no and receiving_code.ref_type = 'SHOU_HUO_NO' left join tb_order_ref receiving_code on receiving_code.order_no = main.order_no and receiving_code.ref_type = 'SHOU_HUO_NO'
left join tb_order tborder on tborder.order_no = main.order_no left join tb_order tborder on tborder.order_no = main.order_no
<where> <where>
<!-- 根据关键字查询 -->
<if test="keyword"> <if test="keyword">
AND main.request_phone LIKE CONCAT('%', #{keyword}, '%') AND main.request_phone LIKE CONCAT('%', #{keyword}, '%')
or main.request_user LIKE CONCAT('%', #{keyword}, '%') or main.request_user LIKE CONCAT('%', #{keyword}, '%')
</if> </if>
<!-- 根据订单号查询 -->
<if test="orderNo"> <if test="orderNo">
AND main.order_no LIKE CONCAT('%', #{orderNo}, '%') AND main.order_no LIKE CONCAT('%', #{orderNo}, '%')
</if> </if>
<!-- 根据请求时间查询 -->
<if test="requestTimeStart"> <if test="requestTimeStart">
<![CDATA[ <![CDATA[
AND DATE_FORMAT(main.request_time ,'%Y-%m-%d')>= #{requestTimeStart} AND DATE_FORMAT(main.request_time ,'%Y-%m-%d')>= #{requestTimeStart}

@ -1,9 +1,9 @@
package com.xmomen.module.receipt.mapper; package com.xmomen.module.receipt.mapper;
/**
* Created by Jeng on 16/4/13. // 定义一个接口,用于操作退货订单
*/
public interface ReturnOrderMapper { public interface ReturnOrderMapper {
// 定义一个常量,用于命名空间
public static final String RETURN_ORDER_MAPPER_NAMESPACE = "com.xmomen.module.receipt.mapper.ReturnOrderMapper."; public static final String RETURN_ORDER_MAPPER_NAMESPACE = "com.xmomen.module.receipt.mapper.ReturnOrderMapper.";
} }

@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.xmomen.module.receipt.mapper.ReturnOrderMapper" > <mapper namespace="com.xmomen.module.receipt.mapper.ReturnOrderMapper" >
<!-- 查询退货单列表 -->
<!-- 查询订单 -->
<select id="getReturnOrderList" resultType="com.xmomen.module.receipt.model.ReturnOrderModel" parameterType="com.xmomen.module.receipt.model.ReturnOrderQuery"> <select id="getReturnOrderList" resultType="com.xmomen.module.receipt.model.ReturnOrderModel" parameterType="com.xmomen.module.receipt.model.ReturnOrderQuery">
select select
main.return_time, main.return_time,

@ -6,43 +6,32 @@ import lombok.Data;
public @Data class ReceivingCodeRequestModel { public @Data class ReceivingCodeRequestModel {
/**
* // 主键ID
*/
private Integer id; private Integer id;
/**
* // 订单号
*/
private String orderNo; private String orderNo;
/**
* // 请求用户
*/
private String requestUser; private String requestUser;
/** // 请求时间
*
*/
private Date requestTime; private Date requestTime;
/** // 请求电话
*
*/
private String requestPhone; private String requestPhone;
/** // 快递公司名称
*
*/
private String expressName; private String expressName;
/**
* // 收货码
*/
private String receivingCode; private String receivingCode;
/**
* // 收货人姓名
*/
private String consigneeName; private String consigneeName;
} }

@ -4,9 +4,13 @@ import java.io.Serializable;
import lombok.Data; import lombok.Data;
// 返回项模型类
public @Data class ReturnItemModel implements Serializable { public @Data class ReturnItemModel implements Serializable {
// 项目代码
private String itemCode; private String itemCode;
// 项目数量
private Integer itemNumber; private Integer itemNumber;
// 项目名称
private String itemName; private String itemName;
} }

@ -15,173 +15,130 @@ import com.xmomen.module.order.model.PackingModel;
*/ */
public @Data class ReturnOrderModel implements Serializable { public @Data class ReturnOrderModel implements Serializable {
/**
* ID // 返回订单ID
*/
private Integer id; private Integer id;
/**
* 退id // 订单ID
*/
private Integer returnOrderId; private Integer returnOrderId;
/**
* // 订单类型
*/
private Integer orderType; private Integer orderType;
/**
* // 订单类型描述
*/
private String orderTypeDesc; private String orderTypeDesc;
/**
* 1-2-3-4- // 订单来源
*/
private Integer orderSource; private Integer orderSource;
/**
* // 订单来源描述
*/
private String orderSourceDesc; private String orderSourceDesc;
/** // 支付方式
*
*/
private Integer paymentMode; private Integer paymentMode;
/**
* // 支付方式描述
*/
private String paymentModeDesc; private String paymentModeDesc;
/**
* // 订单号
*/
private String orderNo; private String orderNo;
/**
* // 订单状态
*/
private String orderStatus; private String orderStatus;
/**
* // 包装任务用户名
*/
private String packingTaskUsername; private String packingTaskUsername;
/**
* ID // 包装任务用户ID
*/
private Integer packingTaskUserId; private Integer packingTaskUserId;
/**
* // 包装任务状态
*/
private Integer packingTaskStatus; private Integer packingTaskStatus;
/**
* // 包装任务状态描述
*/
private String packingTaskStatusDesc; private String packingTaskStatusDesc;
/** // 包装任务创建时间
*
*/
private Date packingTaskCreateTime; private Date packingTaskCreateTime;
/**
* // 包装任务开始时间
*/
private Date packingTaskStartTime; private Date packingTaskStartTime;
/**
* // 包装任务结束时间
*/
private Date packingTaskEndTime; private Date packingTaskEndTime;
/**
* // 订单状态描述
*/
private String orderStatusDesc; private String orderStatusDesc;
/**
* // 收货人电话
*/
private String consigneePhone; private String consigneePhone;
/**
* // 收货人姓名
*/
private String consigneeName; private String consigneeName;
/**
* // 收货人地址
*/
private String consigneeAddress; private String consigneeAddress;
/**
* 1-2- // 运输方式
*/
private Integer transportMode; private Integer transportMode;
/**
* // 备注
*/
private String remark; private String remark;
/**
* // 折扣价格
*/
private BigDecimal discountPrice; private BigDecimal discountPrice;
/**
* // 总金额
*/
private BigDecimal totalAmount; private BigDecimal totalAmount;
/** // 创建时间
*
*/
private Date createTime; private Date createTime;
/** // 创建用户的ID
* ID
*/
private Integer createUserId; private Integer createUserId;
// 用户创建者
private String createUser; private String createUser;
/**
*
*/
private Date appointmentTime; private Date appointmentTime;
/**
*
*/
private String couponNumber; private String couponNumber;
/**
*
*/
private String expressName; private String expressName;
private Integer despatchExpressId; private Integer despatchExpressId;
/**
*
*/
private String managerName; private String managerName;
/**
*
*/
private String companyName; private String companyName;
private String batchNo; private String batchNo;
/**
*
*/
private Integer otherPaymentMode; private Integer otherPaymentMode;
private String otherPaymentModeDesc; private String otherPaymentModeDesc;
@ -190,44 +147,44 @@ public @Data class ReturnOrderModel implements Serializable {
private String receivingCode; private String receivingCode;
// 订单项列表
private List<TbReturnOrderItem> itemList; private List<TbReturnOrderItem> itemList;
// 返回时间
private Date returnTime; private Date returnTime;
// 返回状态
private String returnStatus; private String returnStatus;
// 返回状态描述
private String returnStatusDesc; private String returnStatusDesc;
/**
* 0-1- // 审核状态
*/
private Integer auditStatus; private Integer auditStatus;
/**
* // 审核日期
*/
private Date auditDate; private Date auditDate;
/**
* // 审核用户ID
*/
private Integer auditUserId; private Integer auditUserId;
// 审核用户名
private String auditUserName; private String auditUserName;
/**
* // 商品取货日期
*/
private Date takeGoodsDate; private Date takeGoodsDate;
/**
* // 用户取货ID
*/
private Integer takeGoodsUserId; private Integer takeGoodsUserId;
// 商品领取人姓名
private String takeGoodsUserName; private String takeGoodsUserName;
/**
* // 顾客取货电话
*/
private String takeGoodsPhone; private String takeGoodsPhone;
} }

@ -5,21 +5,32 @@ import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
/**
*/
public @Data public @Data
class ReturnOrderQuery implements Serializable { class ReturnOrderQuery implements Serializable {
// 返回订单ID
private Integer id; private Integer id;
// 订单号
private String orderNo; private String orderNo;
// 返回时间开始
private String returnTimeStart; private String returnTimeStart;
// 返回时间结束
private String returnTimeEnd; private String returnTimeEnd;
// 关键字
private String keyword; private String keyword;
// 返回状态
private String returnStatus; private String returnStatus;
// 管理员ID
private String managerId; private String managerId;
// 收货人姓名
private String consigneeName; private String consigneeName;
// 是否无显示取消
private int hasNoShowCancel; private int hasNoShowCancel;
// 是否显示发货
private int showDespatch; private int showDespatch;
// 创建用户ID
private int createUserId; private int createUserId;
// 发货快递ID
private int despatchExpressId; private int despatchExpressId;
} }

@ -1,352 +1,364 @@
package com.xmomen.module.receipt.service; package com.xmomen.module.receipt.service;
// 声明该Java类所在的包路径com.xmomen.module.receipt.service表示该类位于名为service的包中
// 这个包是com.xmomen.module.receipt包的子包
import java.math.BigDecimal; import java.math.BigDecimal;
// 导入用于精确的十进制运算的类
import java.util.Date; import java.util.Date;
// 导入表示日期和时间的类
import java.util.HashMap; import java.util.HashMap;
// 导入一种键值对存储的数据结构类
import java.util.List; import java.util.List;
// 导入用于表示有序的元素集合的接口
import java.util.Map; import java.util.Map;
// 导入用于表示键值对的映射关系的接口
import com.xmomen.framework.exception.BusinessException; import com.xmomen.framework.exception.BusinessException;
// 导入自定义的业务异常类
import com.xmomen.module.base.entity.CdItem; import com.xmomen.module.base.entity.CdItem;
// 导入基础模块中的商品实体类
import com.xmomen.module.order.entity.*; import com.xmomen.module.order.entity.*;
// 导入订单模块的所有实体类
import com.xmomen.module.stock.service.StockService; import com.xmomen.module.stock.service.StockService;
// 导入库存服务类
import org.apache.shiro.SecurityUtils; import org.apache.shiro.SecurityUtils;
// 导入Apache Shiro框架中用于处理安全相关操作的工具类
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
// 导入Spring框架用于自动装配依赖的注解
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
// 导入Spring框架用于标记服务类的注解
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
// 导入Spring框架用于声明事务的注解
import com.xmomen.framework.mybatis.dao.MybatisDao; import com.xmomen.framework.mybatis.dao.MybatisDao;
// 导入自定义的MyBatis数据访问对象类
import com.xmomen.framework.mybatis.page.Page; import com.xmomen.framework.mybatis.page.Page;
// 导入用于分页操作的类
import com.xmomen.framework.utils.AssertExt; import com.xmomen.framework.utils.AssertExt;
// 导入自定义的断言工具类
import com.xmomen.framework.utils.StringUtilsExt; import com.xmomen.framework.utils.StringUtilsExt;
// 导入自定义的字符串工具类
import com.xmomen.module.base.constant.AppConstants; import com.xmomen.module.base.constant.AppConstants;
// 导入应用程序的常量类
import com.xmomen.module.base.entity.CdExpress; import com.xmomen.module.base.entity.CdExpress;
// 导入基础模块中的快递实体类
import com.xmomen.module.base.service.ItemService; import com.xmomen.module.base.service.ItemService;
// 导入商品服务类
import com.xmomen.module.order.mapper.OrderMapper; import com.xmomen.module.order.mapper.OrderMapper;
// 导入订单模块的Mapper接口
import com.xmomen.module.order.model.ReturnOrder; import com.xmomen.module.order.model.ReturnOrder;
// 导入订单模块的退货订单模型类
import com.xmomen.module.receipt.mapper.ReturnOrderMapper; import com.xmomen.module.receipt.mapper.ReturnOrderMapper;
// 导入退货订单模块的Mapper接口
import com.xmomen.module.receipt.model.ReturnOrderModel; import com.xmomen.module.receipt.model.ReturnOrderModel;
// 导入退货订单模块的模型类
import com.xmomen.module.receipt.model.ReturnOrderQuery; import com.xmomen.module.receipt.model.ReturnOrderQuery;
// 导入退货订单模块的查询条件类
import com.xmomen.module.wx.model.AjaxResult; import com.xmomen.module.wx.model.AjaxResult;
// 导入微信模块的Ajax结果模型类
/**
* Created by Jeng on 16/4/5.
*/
@Service @Service
// 使用@Service注解将ReturnOrderService类标记为一个Spring服务类
public class ReturnOrderService { public class ReturnOrderService {
@Autowired @Autowired
// 使用@Autowired注解自动装配MybatisDao类型的对象
MybatisDao mybatisDao; MybatisDao mybatisDao;
@Autowired @Autowired
// 使用@Autowired注解自动装配ItemService类型的对象
ItemService itemService; ItemService itemService;
@Autowired @Autowired
// 使用@Autowired注解自动装配StockService类型的对象
StockService stockService; StockService stockService;
/** // 获取退货订单列表
*
*
* @param orderQuery
* @param limit
* @param offset
* @return
*/
public Page<ReturnOrderModel> getReturnOrderList( public Page<ReturnOrderModel> getReturnOrderList(
ReturnOrderQuery orderQuery, Integer limit, Integer offset) { ReturnOrderQuery orderQuery, Integer limit, Integer offset) {
// 该方法用于获取退货订单列表并进行分页接受查询条件对象orderQuery以及分页参数limit和offset
return (Page<ReturnOrderModel>) mybatisDao.selectPage( return (Page<ReturnOrderModel>) mybatisDao.selectPage(
ReturnOrderMapper.RETURN_ORDER_MAPPER_NAMESPACE ReturnOrderMapper.RETURN_ORDER_MAPPER_NAMESPACE
+ "getReturnOrderList", orderQuery, limit, offset); + "getReturnOrderList", orderQuery, limit, offset);
// 调用mybatisDao的selectPage方法通过ReturnOrderMapper的命名空间和方法名执行查询返回分页结果
} }
/** // 获取退货订单列表
*
*
* @param orderQuery
* @return
*/
public List<ReturnOrderModel> getReturnOrderList(ReturnOrderQuery orderQuery) { public List<ReturnOrderModel> getReturnOrderList(ReturnOrderQuery orderQuery) {
// 这是一个重载的方法用于获取退货订单列表不进行分页接受查询条件对象orderQuery
return mybatisDao.getSqlSessionTemplate().selectList( return mybatisDao.getSqlSessionTemplate().selectList(
ReturnOrderMapper.RETURN_ORDER_MAPPER_NAMESPACE ReturnOrderMapper.RETURN_ORDER_MAPPER_NAMESPACE
+ "getReturnOrderList", orderQuery); + "getReturnOrderList", orderQuery);
// 调用mybatisDao的getSqlSessionTemplate方法获取SqlSessionTemplate
// 然后通过ReturnOrderMapper的命名空间和方法名执行查询返回结果列表
} }
/** // 拒绝收货
*
*
* @param orderNo
* @param phone
* @return
*/
@Transactional @Transactional
// 使用@Transactional注解声明该方法在一个事务中执行
public AjaxResult noShouhuo(String orderNo, String phone, int expressId) { public AjaxResult noShouhuo(String orderNo, String phone, int expressId) {
// 该方法用于处理拒绝收货的业务逻辑接受订单号orderNo、联系电话phone和快递员ID expressId返回AjaxResult对象
AjaxResult ajaxResult = new AjaxResult(); AjaxResult ajaxResult = new AjaxResult();
// 创建一个新的AjaxResult对象用于封装返回给前端的结果信息
// 判断订单状态 // 判断订单状态
TbReturnOrderExample tbOrderExample = new TbReturnOrderExample(); TbReturnOrderExample tbOrderExample = new TbReturnOrderExample();
// 创建一个TbReturnOrderExample对象用于构建查询条件
tbOrderExample.createCriteria().andOrderNoEqualTo(orderNo); tbOrderExample.createCriteria().andOrderNoEqualTo(orderNo);
// 添加订单号等于orderNo的条件
TbReturnOrder tbReturnOrder = mybatisDao TbReturnOrder tbReturnOrder = mybatisDao
.selectOneByExample(tbOrderExample); .selectOneByExample(tbOrderExample);
// 调用mybatisDao的selectOneByExample方法查询符合条件的单个TbReturnOrder对象以判断订单状态
if (tbReturnOrder != null) { if (tbReturnOrder != null) {
ajaxResult.setMessage("订单不能拒绝,请联系客服人员。"); ajaxResult.setMessage("订单不能拒绝,请联系客服人员。");
// 如果订单已存在某种状态设置ajaxResult的消息
ajaxResult.setResult(0); ajaxResult.setResult(0);
// 设置ajaxResult的结果码为0
return ajaxResult; return ajaxResult;
// 返回ajaxResult对象
} }
tbReturnOrder = new TbReturnOrder(); tbReturnOrder = new TbReturnOrder();
// 创建一个新的TbReturnOrder对象
tbReturnOrder.setOrderNo(orderNo); tbReturnOrder.setOrderNo(orderNo);
// 设置订单号
// 退货运输中 // 退货运输中
tbReturnOrder.setReturnStatus(14); tbReturnOrder.setReturnStatus(14);
// 设置退货状态为“退货运输中”状态码14
tbReturnOrder.setTakeGoodsDate(mybatisDao.getSysdate()); tbReturnOrder.setTakeGoodsDate(mybatisDao.getSysdate());
// 设置取货日期为系统当前日期
tbReturnOrder.setTakeGoodsPhone(phone); tbReturnOrder.setTakeGoodsPhone(phone);
// 设置取货联系电话
tbReturnOrder.setTakeGoodsUserId(expressId); tbReturnOrder.setTakeGoodsUserId(expressId);
// 设置取货的快递员用户ID
tbReturnOrder.setReturnTime(mybatisDao.getSysdate()); tbReturnOrder.setReturnTime(mybatisDao.getSysdate());
// 设置退货时间为系统当前日期
tbReturnOrder = mybatisDao.insertByModel(tbReturnOrder); tbReturnOrder = mybatisDao.insertByModel(tbReturnOrder);
// 调用mybatisDao的insertByModel方法插入新的退货订单记录并返回插入后的对象
TbOrderItem orderItemDb = new TbOrderItem(); TbOrderItem orderItemDb = new TbOrderItem();
// 创建一个TbOrderItem对象
orderItemDb.setOrderNo(orderNo); orderItemDb.setOrderNo(orderNo);
// 设置订单号
List<TbOrderItem> returnOrderItems = mybatisDao List<TbOrderItem> returnOrderItems = mybatisDao
.selectByModel(orderItemDb); .selectByModel(orderItemDb);
// 调用mybatisDao的selectByModel方法查询该订单下的所有订单商品项
BigDecimal returnTotalAmount = BigDecimal.ZERO; BigDecimal returnTotalAmount = BigDecimal.ZERO;
// 创建一个BigDecimal对象用于记录退货总金额并初始化为0
for (TbOrderItem orderItem : returnOrderItems) { for (TbOrderItem orderItem : returnOrderItems) {
// 遍历订单商品项列表
TbReturnOrderItem returnOrderItem = new TbReturnOrderItem(); TbReturnOrderItem returnOrderItem = new TbReturnOrderItem();
// 创建一个新的TbReturnOrderItem对象
returnOrderItem.setItemCode(orderItem.getItemCode()); returnOrderItem.setItemCode(orderItem.getItemCode());
// 设置商品编码
returnOrderItem.setReturnOrderId(tbReturnOrder.getId()); returnOrderItem.setReturnOrderId(tbReturnOrder.getId());
// 设置退货订单ID
returnOrderItem.setItemNumber(orderItem.getItemQty().intValue()); returnOrderItem.setItemNumber(orderItem.getItemQty().intValue());
// 设置商品数量
returnOrderItem.setItemName(orderItem.getItemName()); returnOrderItem.setItemName(orderItem.getItemName());
// 设置商品名称
returnOrderItem.setIsNeed(1); returnOrderItem.setIsNeed(1);
// 设置是否需要这里值为1表示需要
mybatisDao.insert(returnOrderItem); mybatisDao.insert(returnOrderItem);
// 插入退货订单商品项记录
//金额相加 //金额相加
returnTotalAmount = returnTotalAmount.add(orderItem.getItemPrice().multiply(orderItem.getItemQty())); returnTotalAmount = returnTotalAmount.add(orderItem.getItemPrice().multiply(orderItem.getItemQty()));
// 将当前商品项的金额(单价乘以数量)累加到退货总金额中
} }
//退款金额 //退款金额
tbReturnOrder.setReturnTotalAmount(returnTotalAmount); tbReturnOrder.setReturnTotalAmount(returnTotalAmount);
// 设置退货订单的退款总金额
// 更新原订单状态 // 更新原订单状态
TbOrderExample orderExample = new TbOrderExample(); TbOrderExample orderExample = new TbOrderExample();
// 创建一个TbOrderExample对象用于构建查询条件
orderExample.createCriteria().andOrderNoEqualTo(orderNo); orderExample.createCriteria().andOrderNoEqualTo(orderNo);
// 添加订单号等于orderNo的条件
TbOrder order = new TbOrder(); TbOrder order = new TbOrder();
// 创建一个新的TbOrder对象
//是拒绝收货 //是拒绝收货
order.setIsReject(1); order.setIsReject(1);
// 设置订单为拒绝收货状态值为1表示拒绝
// 退货运输中 // 退货运输中
order.setOrderStatus("14"); order.setOrderStatus("14");
// 设置订单状态为“退货运输中”状态码14
mybatisDao.updateOneByExampleSelective(order, orderExample); mybatisDao.updateOneByExampleSelective(order, orderExample);
// 调用mybatisDao的updateOneByExampleSelective方法更新原订单的状态
ajaxResult.setMessage("订单已拒收,请及时送回仓库。"); ajaxResult.setMessage("订单已拒收,请及时送回仓库。");
// 设置ajaxResult的消息
ajaxResult.setResult(1); ajaxResult.setResult(1);
// 设置ajaxResult的结果码为1
return ajaxResult; return ajaxResult;
// 返回ajaxResult对象
} }
/**
* 退
*
* @param orderNo
* @param itemIds
* @return
*/
@Transactional @Transactional
// 使用@Transactional注解声明该方法在一个事务中执行
public AjaxResult returnOrder(String orderNo, String itemIds) { public AjaxResult returnOrder(String orderNo, String itemIds) {
// 该方法用于处理退货申请的业务逻辑接受订单号orderNo和商品ID字符串itemIds返回AjaxResult对象
AjaxResult ajaxResult = new AjaxResult(); AjaxResult ajaxResult = new AjaxResult();
// 创建一个新的AjaxResult对象用于封装返回给前端的结果信息
// 判断订单状态 // 判断订单状态
TbReturnOrderExample tbOrderExample = new TbReturnOrderExample(); TbReturnOrderExample tbOrderExample = new TbReturnOrderExample();
// 创建一个TbReturnOrderExample对象用于构建查询条件
tbOrderExample.createCriteria().andOrderNoEqualTo(orderNo); tbOrderExample.createCriteria().andOrderNoEqualTo(orderNo);
// 添加订单号等于orderNo的条件
TbReturnOrder tbReturnOrder = mybatisDao TbReturnOrder tbReturnOrder = mybatisDao
.selectOneByExample(tbOrderExample); .selectOneByExample(tbOrderExample);
// 调用mybatisDao的selectOneByExample方法查询符合条件的单个TbReturnOrder对象以判断订单状态
if (tbReturnOrder != null) { if (tbReturnOrder != null) {
ajaxResult.setMessage("订单不能退货,请联系客服人员。"); ajaxResult.setMessage("订单不能退货,请联系客服人员。");
// 如果订单已存在某种状态设置ajaxResult的消息
ajaxResult.setResult(0); ajaxResult.setResult(0);
// 设置ajaxResult的结果码为0
return ajaxResult; return ajaxResult;
// 返回ajaxResult对象
} }
tbReturnOrder = new TbReturnOrder(); tbReturnOrder = new TbReturnOrder();
// 创建一个新的TbReturnOrder对象
tbReturnOrder.setOrderNo(orderNo); tbReturnOrder.setOrderNo(orderNo);
// 设置订单号
tbReturnOrder.setReturnStatus(10);// 申请退货 tbReturnOrder.setReturnStatus(10);// 申请退货
// 设置退货状态为“申请退货”状态码10
tbReturnOrder.setReturnTime(mybatisDao.getSysdate()); tbReturnOrder.setReturnTime(mybatisDao.getSysdate());
// 设置退货时间为系统当前日期
tbReturnOrder = mybatisDao.insertByModel(tbReturnOrder); tbReturnOrder = mybatisDao.insertByModel(tbReturnOrder);
// 调用mybatisDao的insertByModel方法插入新的退货订单记录并返回插入后的对象
BigDecimal returnTotalAmount = BigDecimal.ZERO; BigDecimal returnTotalAmount = BigDecimal.ZERO;
// 创建一个BigDecimal对象用于记录退货总金额并初始化为0
for (String itemId : itemIds.split(",")) { for (String itemId : itemIds.split(",")) {
// 遍历商品ID字符串以逗号分割
if (StringUtilsExt.isEmpty(itemId)) { if (StringUtilsExt.isEmpty(itemId)) {
continue; continue;
// 如果商品ID为空跳过本次循环
} }
TbReturnOrderItem returnOrderItem = new TbReturnOrderItem(); TbReturnOrderItem returnOrderItem = new TbReturnOrderItem();
// 创建一个新的TbReturnOrderItem对象
TbOrderItem orderItem = this.mybatisDao.selectByPrimaryKey( TbOrderItem orderItem = this.mybatisDao.selectByPrimaryKey(
TbOrderItem.class, Integer.parseInt(itemId)); TbOrderItem.class, Integer.parseInt(itemId));
// 根据商品ID查询对应的订单商品项
returnOrderItem.setItemCode(orderItem.getItemCode()); returnOrderItem.setItemCode(orderItem.getItemCode());
// 设置商品编码
returnOrderItem.setReturnOrderId(tbReturnOrder.getId()); returnOrderItem.setReturnOrderId(tbReturnOrder.getId());
// 设置退货订单ID
returnOrderItem.setItemNumber(orderItem.getItemQty().intValue()); returnOrderItem.setItemNumber(orderItem.getItemQty().intValue());
// 设置商品数量
returnOrderItem.setItemName(orderItem.getItemName()); returnOrderItem.setItemName(orderItem.getItemName());
// 设置商品名称
returnOrderItem.setIsNeed(1); returnOrderItem.setIsNeed(1);
// 设置是否需要这里值为1表示需要
mybatisDao.insert(returnOrderItem); mybatisDao.insert(returnOrderItem);
// 插入退货订单商品项记录
//金额相加 //金额相加
returnTotalAmount = returnTotalAmount.add(orderItem.getItemPrice().multiply(orderItem.getItemQty())); returnTotalAmount = returnTotalAmount.add(orderItem.getItemPrice().multiply(orderItem.getItemQty()));
// 将当前商品项的金额(单价乘以数量)累加到退货总金额中
} }
//退款金额 //退款金额
tbReturnOrder.setReturnTotalAmount(returnTotalAmount); tbReturnOrder.setReturnTotalAmount(returnTotalAmount);
// 设置退货订单的退款总金额
mybatisDao.update(tbReturnOrder); mybatisDao.update(tbReturnOrder);
// 调用mybatisDao的update方法更新退货订单记录
// 更新原订单状态 // 更新原订单状态
TbOrderExample orderExample = new TbOrderExample(); TbOrderExample orderExample = new TbOrderExample();
// 创建一个TbOrderExample对象用于构建查询条件
orderExample.createCriteria().andOrderNoEqualTo(orderNo); orderExample.createCriteria().andOrderNoEqualTo(orderNo);
// 添加订单号等于orderNo的条件
TbOrder order = new TbOrder(); TbOrder order = new TbOrder();
// 创建一个新的TbOrder对象
order.setOrderStatus("10");// 申请退货 order.setOrderStatus("10");// 申请退货
// 设置订单状态为“申请退货”状态码10
mybatisDao.updateOneByExampleSelective(order, orderExample); mybatisDao.updateOneByExampleSelective(order, orderExample);
// 调用mybatisDao的updateOneByExampleSelective方法更新原订单的状态
ajaxResult.setMessage("退货申请提交成功,请等待客服审核。"); ajaxResult.setMessage("退货申请提交成功,请等待客服审核。");
// 设置ajaxResult的消息
ajaxResult.setResult(1); ajaxResult.setResult(1);
// 设置ajaxResult的结果码为1
return ajaxResult; return ajaxResult;
// 返回ajaxResult对象
} }
/**
* 退
*
* @param orderNo
* @param phone
* @param expressId
* @return
*/
@Transactional @Transactional
// 使用@Transactional注解声明该方法在一个事务中执行
public AjaxResult shouhuoReturn(String orderNo, String phone, int expressId) { public AjaxResult shouhuoReturn(String orderNo, String phone, int expressId) {
// 该方法用于处理退货收货的业务逻辑接受订单号orderNo、联系电话phone和快递员ID expressId返回AjaxResult对象
AjaxResult ajaxResult = new AjaxResult(); AjaxResult ajaxResult = new AjaxResult();
// 创建一个新的AjaxResult对象用于封装返回给前端的结果信息
// 判断订单状态 // 判断订单状态
TbReturnOrderExample tbOrderExample = new TbReturnOrderExample(); TbReturnOrderExample tbOrderExample = new TbReturnOrderExample();
// 创建一个TbReturnOrderExample对象用于构建查询条件
tbOrderExample.createCriteria().andOrderNoEqualTo(orderNo); tbOrderExample.createCriteria().andOrderNoEqualTo(orderNo);
// 添加订单号等于orderNo的条件
TbReturnOrder tbReturnOrder = mybatisDao TbReturnOrder tbReturnOrder = mybatisDao
.selectOneByExample(tbOrderExample); .selectOneByExample(tbOrderExample);
// 调用mybatisDao的selectOneByExample方法查询符合条件的单个TbReturnOrder对象以判断订单状态
if (tbReturnOrder.getReturnStatus() != 11) { if (tbReturnOrder.getReturnStatus() != 11) {
ajaxResult.setMessage("订单状态不为退货中,不能收货,请联系客服人员。"); ajaxResult.setMessage("订单状态不为退货中,不能收货,请联系客服人员。");
// 如果订单的退货状态不是“退货中”状态码11设置ajaxResult的消息
ajaxResult.setResult(0); ajaxResult.setResult(0);
// 设置ajaxResult的结果码为0
return ajaxResult; return ajaxResult;
// 返回ajaxResult对象
} }
tbReturnOrder.setReturnStatus(14);// 退货运输中 tbReturnOrder.setReturnStatus(14);// 退货运输中
// 设置退货订单的状态为“退货运输中”状态码14
tbReturnOrder.setTakeGoodsDate(mybatisDao.getSysdate()); tbReturnOrder.setTakeGoodsDate(mybatisDao.getSysdate());
// 设置取货日期为系统当前日期
tbReturnOrder.setTakeGoodsPhone(phone); tbReturnOrder.setTakeGoodsPhone(phone);
// 设置取货联系电话
tbReturnOrder.setTakeGoodsUserId(expressId); tbReturnOrder.setTakeGoodsUserId(expressId);
// 设置取货的快递员用户ID
mybatisDao.update(tbReturnOrder); mybatisDao.update(tbReturnOrder);
// 调用mybatisDao的update方法更新退货订单记录
// 更新原订单状态 // 更新原订单状态
TbOrderExample orderExample = new TbOrderExample(); TbOrderExample orderExample = new TbOrderExample();
// 创建一个TbOrderExample对象用于构建查询条件
orderExample.createCriteria().andOrderNoEqualTo(orderNo); orderExample.createCriteria().andOrderNoEqualTo(orderNo);
// 添加订单号等于orderNo的条件
TbOrder order = new TbOrder(); TbOrder order = new TbOrder();
// 创建一个新的TbOrder对象
order.setOrderStatus("14");// 退货运输中 order.setOrderStatus("14");// 退货运输中
// 设置订单状态为“退货运输中”状态码14
mybatisDao.updateOneByExampleSelective(order, orderExample); mybatisDao.updateOneByExampleSelective(order, orderExample);
// 调用mybatisDao的updateOneByExampleSelective方法更新原订单的状态
ajaxResult.setMessage("退货订单收货成功,请尽快送回仓库。"); ajaxResult.setMessage("退货订单收货成功,请尽快送回仓库。");
// 设置ajaxResult的消息
ajaxResult.setResult(0); ajaxResult.setResult(0);
// 设置ajaxResult的结果码为0
return ajaxResult; return ajaxResult;
// 返回ajaxResult对象
} }
/**
* 退
*
* @param id
* @param statusCd
*/
@Transactional @Transactional
// 使用@Transactional注解声明该方法在一个事务中执行
public void auditReturnOrder(int id, int statusCd) { public void auditReturnOrder(int id, int statusCd) {
// 该方法用于审核退货订单接受退货订单ID id和审核状态码statusCd
TbReturnOrder returnOrder = this.mybatisDao.selectByPrimaryKey( TbReturnOrder returnOrder = this.mybatisDao.selectByPrimaryKey(
TbReturnOrder.class, id); TbReturnOrder.class, id);
// 根据退货订单ID查询对应的TbReturnOrder对象
returnOrder.setAuditStatus(statusCd); returnOrder.setAuditStatus(statusCd);
// 设置审核状态
returnOrder.setAuditDate(mybatisDao.getSysdate()); returnOrder.setAuditDate(mybatisDao.getSysdate());
// 设置审核日期为系统当前日期
if (statusCd == 1) { if (statusCd == 1) {
// 如果审核状态码为1表示通过审核
// 退货中 // 退货中
returnOrder.setReturnStatus(11); returnOrder.setReturnStatus(11);
Integer userId = (Integer) SecurityUtils.getSubject().getSession() // 设置退货订单的状态为“退货中”状态码1
.getAttribute(AppConstants.SESSION_USER_ID_KEY);
returnOrder.setAuditUserId(userId);
this.mybatisDao.save(returnOrder);
// 更新原订单状态
TbOrderExample orderExample = new TbOrderExample();
orderExample.createCriteria().andOrderNoEqualTo(
returnOrder.getOrderNo());
TbOrder order = new TbOrder();
// 退货中
order.setOrderStatus("11");
mybatisDao.updateOneByExampleSelective(order, orderExample);
}
else {
// 拒绝退货
returnOrder.setReturnStatus(16);
Integer userId = (Integer) SecurityUtils.getSubject().getSession()
.getAttribute(AppConstants.SESSION_USER_ID_KEY);
returnOrder.setAuditUserId(userId);
this.mybatisDao.save(returnOrder);
// 更新原订单状态
TbOrderExample orderExample = new TbOrderExample();
orderExample.createCriteria().andOrderNoEqualTo(
returnOrder.getOrderNo());
TbOrder order = new TbOrder();
// 拒绝退货
order.setOrderStatus("16");
mybatisDao.updateOneByExampleSelective(order, orderExample);
}
}
/**
* 退
*
* @param boxNo
*/
@Transactional
public ReturnOrderModel returnOrderShouhuo(String boxNo) {
// 通过箱号查找订单号
TbOrderRelation tbOrderRelation = new TbOrderRelation();
tbOrderRelation.setRefType(OrderMapper.ORDER_PACKING_RELATION_CODE);
tbOrderRelation.setRefValue(boxNo);
tbOrderRelation = mybatisDao.selectOneByModel(tbOrderRelation);
AssertExt.notNull(tbOrderRelation, "扫描的箱号不存在!请确认。");
TbOrder order = new TbOrder();
order.setOrderNo(tbOrderRelation.getOrderNo());
order = mybatisDao.selectOneByModel(order);
AssertExt.notNull(order, "订单不存在!");
String orderStatus = order.getOrderStatus();
AssertExt.isTrue(orderStatus.equals("14"), "订单状态不是退货运输中,不能收货!");
TbReturnOrder returnOrder = new TbReturnOrder();
returnOrder.setOrderNo(order.getOrderNo());
returnOrder = mybatisDao.selectOneByModel(returnOrder);
ReturnOrderModel returnOrderModel = new ReturnOrderModel();
TbReturnOrderItem returnOrderItem = new TbReturnOrderItem();
returnOrderItem.setReturnOrderId(returnOrder.getId());
List<TbReturnOrderItem> returnOrderItemList = this.mybatisDao
.selectByModel(returnOrderItem);
returnOrderModel.setItemList(returnOrderItemList);
returnOrderModel.setOrderNo(order.getOrderNo());
return returnOrderModel;
}
/**
* 退
*
* @param orderNo
*/
@Transactional
public void shouhuo(String orderNo) throws BusinessException {
TbOrder order = new TbOrder();
order.setOrderNo(orderNo);
order = mybatisDao.selectOneByModel(order);
AssertExt.notNull(order, "订单不存在!");
String orderStatus = order.getOrderStatus();
AssertExt.isTrue(orderStatus.equals("14"), "订单状态不是退货运输中,不能收货!");
order.setOrderStatus("15");
mybatisDao.update(order);
TbReturnOrder returnOrder = new TbReturnOrder();
returnOrder.setOrderNo(order.getOrderNo());
returnOrder = mybatisDao.selectOneByModel(returnOrder);
returnOrder.setReturnStatus(15);
mybatisDao.update(returnOrder);
//查询订单的退货商品信息
TbReturnOrderItemExample tbReturnOrderItemExample = new TbReturnOrderItemExample();
tbReturnOrderItemExample.createCriteria().andReturnOrderIdEqualTo(returnOrder.getId());
List<TbReturnOrderItem> tbReturnOrderItems = mybatisDao.selectByExample(tbReturnOrderItemExample);
for (TbReturnOrderItem tbReturnOrderItem : tbReturnOrderItems) {
//需要的退回库存
if (tbReturnOrderItem.getIsNeed() == 1) {
CdItem cdItem = new CdItem();
cdItem.setItemCode(tbReturnOrderItem.getItemCode());
cdItem = mybatisDao.selectOneByModel(cdItem);
stockService.changeStockNum(cdItem.getId(), tbReturnOrderItem.getItemNumber().intValue(), returnOrder.getId(), "订单退货退回商品", 3);
}
}
// 卡类订单进行退款
if (order.getOrderType() == 1) {
}
}
}

@ -17,22 +17,44 @@ public
@Data @Data
class ExpressReport implements Serializable { class ExpressReport implements Serializable {
// 物流公司
// 物流公司
@Excel(name = "物流公司") @Excel(name = "物流公司")
// 订单号
private String expressName; private String expressName;
// 订单号
// 总箱数
@Excel(name = "订单号", width = 20) @Excel(name = "订单号", width = 20)
private String orderNo; private String orderNo;
// 出库时间
// 总箱数
@Excel(name = "总箱数") @Excel(name = "总箱数")
// 收货时间
private int totalBoxNum; private int totalBoxNum;
// 出库时间
// 二次配送
@Excel(name = "出库时间", width = 20, exportFormat = "yyyy-MM-dd HH:mm:ss") @Excel(name = "出库时间", width = 20, exportFormat = "yyyy-MM-dd HH:mm:ss")
// 收货时间
// 正常配送
private Date outDate; private Date outDate;
@Excel(name = "收货时间", width = 20, exportFormat = "yyyy-MM-dd HH:mm:ss") @Excel(name = "收货时间", width = 20, exportFormat = "yyyy-MM-dd HH:mm:ss")
// 异常配送
// 二次配送
// 正常配送
// 物流代收款
private Date shouHuoDate; private Date shouHuoDate;
@Excel(name = "二次配送", type = 10) @Excel(name = "二次配送", type = 10)
// 损失承担
// 异常配送
private int isTwoSend; private int isTwoSend;
// 物流代收款
// 是否拒收
@Excel(name = "正常配送", type = 10) @Excel(name = "正常配送", type = 10)
// 损失承担
private int isNormal; private int isNormal;
@Excel(name = "异常配送", type = 10) @Excel(name = "异常配送", type = 10)
private int isNoNormal; private int isNoNormal;
// 是否拒收
@Excel(name = "物流代收款", width = 15, type = 10) @Excel(name = "物流代收款", width = 15, type = 10)
private double expressAmount; private double expressAmount;
@Excel(name = "损失承担", type = 10) @Excel(name = "损失承担", type = 10)

@ -11,53 +11,57 @@ import java.io.Serializable;
public public
@Data @Data
class FinanceReport implements Serializable { class FinanceReport implements Serializable {
//公司ID
private int cdCompanyId; private int cdCompanyId;
//客户经理
@Excel(name = "客户经理") @Excel(name = "客户经理")
private String managerName; private String managerName;
//单位/个人
@Excel(name = "单位/个人") @Excel(name = "单位/个人")
private String companyName; private String companyName;
//用户ID
private int cdUserId; private int cdUserId;
//总张数 //总张数(预付款)
@Excel(name = "总张数(预付款)", type = 10) @Excel(name = "总张数(预付款)", type = 10)
private int beforeCouponCount; private int beforeCouponCount;
//总金额 //总金额(预付款)
@Excel(name = "总金额(预付款)", type = 10) @Excel(name = "总金额(预付款)", type = 10)
private double beforeTotalValue; private double beforeTotalValue;
//充值金额 //充值金额(预付款)
@Excel(name = "充值金额(预付款)", type = 10) @Excel(name = "充值金额(预付款)", type = 10)
private double beforeTotalRechargeValue; private double beforeTotalRechargeValue;
//已付 //已付(预付款)
@Excel(name = "已付(预付款)", type = 10) @Excel(name = "已付(预付款)", type = 10)
private double beforeTotalYesValue; private double beforeTotalYesValue;
// 未付 // 未付(预付款)
@Excel(name = "未付(预付款)", type = 10) @Excel(name = "未付(预付款)", type = 10)
private double beforeTotalNoValue; private double beforeTotalNoValue;
// 余额 // 余额(预付款)
@Excel(name = "余额(预付款)", type = 10) @Excel(name = "余额(预付款)", type = 10)
private double beforeUserTotalValue; private double beforeUserTotalValue;
// 回馈总金额 // 回馈总金额(预付款)
@Excel(name = "回馈总金额(预付款)", type = 10) @Excel(name = "回馈总金额(预付款)", type = 10)
private double beforeGiftTotalValue; private double beforeGiftTotalValue;
// 回馈剩余金额 // 回馈剩余金额(预付款)
@Excel(name = "回馈剩余金额(预付款)", type = 10) @Excel(name = "回馈剩余金额(预付款)", type = 10)
private double beforeGiftUserTotalValue; private double beforeGiftUserTotalValue;
// 总张数 // 总张数(后付款)
@Excel(name = "总张数(后付款)", type = 10) @Excel(name = "总张数(后付款)", type = 10)
private int afterCouponCount; private int afterCouponCount;
// 总金额 // 总金额(后付款)
@Excel(name = "总金额(后付款)", type = 10) @Excel(name = "总金额(后付款)", type = 10)
private double afterTotalValue; private double afterTotalValue;
// 充值金额 // 充值金额(后付款)
@Excel(name = "充值金额(后付款)", type = 10) @Excel(name = "充值金额(后付款)", type = 10)
private double afterTotalRechargeValue; private double afterTotalRechargeValue;
// 已付 // 已付(后付款)
@Excel(name = "已付(后付款)", type = 10) @Excel(name = "已付(后付款)", type = 10)
private double afterTotalYesValue; private double afterTotalYesValue;
// 未付 // 未付(后付款)
@Excel(name = "未付(后付款)", type = 10) @Excel(name = "未付(后付款)", type = 10)
private double afterTotalNoValue; private double afterTotalNoValue;
// 余额 // 余额(后付款)
@Excel(name = "余额(后付款)", type = 10) @Excel(name = "余额(后付款)", type = 10)
private double afterUserTotalValue; private double afterUserTotalValue;
// 回馈总金额(后付款) // 回馈总金额(后付款)
@ -78,12 +82,16 @@ class FinanceReport implements Serializable {
//回馈总金额 //回馈总金额
@Excel(name = "回馈总金额", type = 10) @Excel(name = "回馈总金额", type = 10)
private double giftOrderTotal; private double giftOrderTotal;
//客户经理代收
@Excel(name = "客户经理代收", type = 10) @Excel(name = "客户经理代收", type = 10)
private double managerAmount; private double managerAmount;
//POS
@Excel(name = "POS", type = 10) @Excel(name = "POS", type = 10)
private double posAmount; private double posAmount;
//转账
@Excel(name = "转账", type = 10) @Excel(name = "转账", type = 10)
private double zhuanAmount; private double zhuanAmount;
//物流代收
@Excel(name = "物流代收", type = 10) @Excel(name = "物流代收", type = 10)
private double expressAmount; private double expressAmount;
} }

@ -16,33 +16,49 @@ import java.util.Date;
public @Data public @Data
class OrderDeliveryReport implements Serializable { class OrderDeliveryReport implements Serializable {
// 下单日期
@Excel(name = "下单日期" , exportFormat="yyyy-MM-dd", importFormat = "yyyy-MM-dd") @Excel(name = "下单日期" , exportFormat="yyyy-MM-dd", importFormat = "yyyy-MM-dd")
private Date createTime; private Date createTime;
// 订单号
@Excel(name = "订单号",width = 20) @Excel(name = "订单号",width = 20)
private String orderNo; private String orderNo;
// 快递商
@Excel(name="快递商") @Excel(name="快递商")
private String expressName; private String expressName;
// 收货人姓名
@Excel(name = "收货人姓名",width = 15) @Excel(name = "收货人姓名",width = 15)
private String consigneeName; private String consigneeName;
// 收货人电话
@Excel(name = "收货人电话",width = 15) @Excel(name = "收货人电话",width = 15)
private String consigneePhone; private String consigneePhone;
// 收货人地址
@Excel(name = "收货人地址",width = 30) @Excel(name = "收货人地址",width = 30)
private String consigneeAddress; private String consigneeAddress;
// 金额
@Excel(name = "金额") @Excel(name = "金额")
private double totalAmount; private double totalAmount;
// 付款方式
@Excel(name = "付款方式") @Excel(name = "付款方式")
private String paymentModeDesc; private String paymentModeDesc;
// 付款金额
@Excel(name = "付款金额",type = 10) @Excel(name = "付款金额",type = 10)
private double payAmount; private double payAmount;
// 附加付款方式
@Excel(name = "附加付款方式") @Excel(name = "附加付款方式")
private String otherPaymentModeDesc; private String otherPaymentModeDesc;
// 附加付款金额
@Excel(name = "附加付款金额",type = 10) @Excel(name = "附加付款金额",type = 10)
private double otherPayAmount; private double otherPayAmount;
// 送货日期
@Excel(name = "送货日期" , exportFormat="yyyy-MM-dd", importFormat = "yyyy-MM-dd") @Excel(name = "送货日期" , exportFormat="yyyy-MM-dd", importFormat = "yyyy-MM-dd")
private Date appointmentTime; private Date appointmentTime;
// 备注
@Excel(name = "备注",width = 30) @Excel(name = "备注",width = 30)
private String remark; private String remark;
// 订单状态描述
private String orderStatusDesc; private String orderStatusDesc;
// 总箱数
private int totalBoxNum; private int totalBoxNum;
// 快递扫描箱数
private int expressScanBoxNum; private int expressScanBoxNum;
} }

@ -17,45 +17,67 @@ public
@Data @Data
class OrderReport implements Serializable { class OrderReport implements Serializable {
// 支付方式
private String paymentMode; private String paymentMode;
// 支付金额
private double payAmount; private double payAmount;
// 其他支付方式
private String otherPaymentMode; private String otherPaymentMode;
// 其他支付金额
private double otherPayAmount; private double otherPayAmount;
// 订单类型
@Excel(name = "订单类型") @Excel(name = "订单类型")
private String orderType; private String orderType;
// 订单号
@Excel(name = "订单号", width = 20) @Excel(name = "订单号", width = 20)
private String orderNo; private String orderNo;
// 客户姓名
@Excel(name = "客户姓名") @Excel(name = "客户姓名")
private String consigneeName; private String consigneeName;
// 电话
@Excel(name = "电话", width = 15) @Excel(name = "电话", width = 15)
private String consigneePhone; private String consigneePhone;
// 单位/个人
@Excel(name = "单位/个人") @Excel(name = "单位/个人")
private String companyName; private String companyName;
// 客户经理
@Excel(name = "客户经理") @Excel(name = "客户经理")
private String managerName; private String managerName;
// 物流公司
@Excel(name = "物流公司") @Excel(name = "物流公司")
private String expressName; private String expressName;
// 总金额
@Excel(name = "总金额") @Excel(name = "总金额")
private double totalAmount; private double totalAmount;
// 折扣金额
@Excel(name = "折扣金额") @Excel(name = "折扣金额")
private double discountPrice; private double discountPrice;
// 客户经理代收
@Excel(name = "客户经理代收", width = 15, type = 10) @Excel(name = "客户经理代收", width = 15, type = 10)
private double managerAmount; private double managerAmount;
// 物流代收
@Excel(name = "物流代收", type = 10) @Excel(name = "物流代收", type = 10)
private double expressAmount; private double expressAmount;
// 卡类扣款
@Excel(name = "卡类扣款", type = 10) @Excel(name = "卡类扣款", type = 10)
private double couponAmount; private double couponAmount;
// 券类扣款
@Excel(name = "券类扣款", type = 10) @Excel(name = "券类扣款", type = 10)
private double quanAmount; private double quanAmount;
// 刷POS
@Excel(name = "刷POS", type = 10) @Excel(name = "刷POS", type = 10)
private double posAmount; private double posAmount;
// 转账
@Excel(name = "转账", type = 10) @Excel(name = "转账", type = 10)
private double zhuanZhanAmount; private double zhuanZhanAmount;
// 其它
@Excel(name = "其它", type = 10) @Excel(name = "其它", type = 10)
private double otherAmount; private double otherAmount;
// 回馈
@Excel(name = "回馈", type = 10) @Excel(name = "回馈", type = 10)
private double huiKuiAmount; private double huiKuiAmount;
// 退货金额
@Excel(name = "退货金额", type = 10) @Excel(name = "退货金额", type = 10)
private double returnTotalAmount; private double returnTotalAmount;
} }

@ -5,11 +5,16 @@ import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
/** /**
*
*/ */
public @Data public @Data
class ReportQuery implements Serializable { class ReportQuery implements Serializable {
// 开始时间
private String beginTime; private String beginTime;
// 结束时间
private String endTime; private String endTime;
// 管理员ID
private Integer managerId; private Integer managerId;
// 公司ID
private Integer companyId; private Integer companyId;
} }

@ -5,14 +5,14 @@ import org.jeecgframework.poi.excel.annotation.Excel;
import java.io.Serializable; import java.io.Serializable;
/**
*
*/
public public
@Data @Data
class StockDailyReport implements Serializable { class StockDailyReport implements Serializable {
// 商品名称
@Excel(name = "商品名称") @Excel(name = "商品名称")
private String itemName; private String itemName;
// 商品编码
@Excel(name = "商品编码") @Excel(name = "商品编码")
private String itemCode; private String itemCode;
/** /**

@ -41,9 +41,13 @@ public class ReportOrderService {
* @return * @return
*/ */
public List<OrderReport> getOrderReportList(ReportQuery reportQuery) { public List<OrderReport> getOrderReportList(ReportQuery reportQuery) {
//查询订单报表
List<OrderReport> orderReportList = mybatisDao.getSqlSessionTemplate().selectList(ReportOrderMapper.REPORT_ORDER_MAPPER_NAMESPACE + "getReportOrderList", reportQuery); List<OrderReport> orderReportList = mybatisDao.getSqlSessionTemplate().selectList(ReportOrderMapper.REPORT_ORDER_MAPPER_NAMESPACE + "getReportOrderList", reportQuery);
//遍历订单报表
for (OrderReport orderReport : orderReportList) { for (OrderReport orderReport : orderReportList) {
//判断付款方式
if ("0".equals(orderReport.getPaymentMode())) { if ("0".equals(orderReport.getPaymentMode())) {
//如果是汇款
orderReport.setHuiKuiAmount(orderReport.getPayAmount()); orderReport.setHuiKuiAmount(orderReport.getPayAmount());
} }
if ("1".equals(orderReport.getPaymentMode())) { if ("1".equals(orderReport.getPaymentMode())) {

@ -1,38 +1,66 @@
package com.xmomen.module.resource.api; package com.xmomen.module.resource.api;
/**
* DfsException RuntimeExceptionDFS
*/
public class DfsException extends RuntimeException { public class DfsException extends RuntimeException {
// 序列化版本号,用于确保在反序列化时类的版本一致性
private static final long serialVersionUID = 1497374765949093902L; private static final long serialVersionUID = 1497374765949093902L;
/** /**
* IOException 100 *
* FileNotFoundException 200 *
* Exception from DFS (example: from FastDFS, MyException) 300 * - IOException 100
* OtherException 400 * - FileNotFoundException 200
* - DFS FastDFS MyException 300
* - 400
*/ */
private String code; private String code;
// 异常的详细描述信息
private String message; private String message;
/**
* DfsException
* @param code
* @param message
*/
public DfsException(String code, String message) { public DfsException(String code, String message) {
this.code = code; this.code = code;
this.message = message; this.message = message;
} }
/**
*
* @return
*/
public String getCode() { public String getCode() {
return code; return code;
} }
/**
*
* @param code
*/
public void setCode(String code) { public void setCode(String code) {
this.code = code; this.code = code;
} }
/**
*
* @return
*/
public String getMessage() { public String getMessage() {
return message; return message;
} }
/**
*
* @param message
*/
public void setMessage(String message) { public void setMessage(String message) {
this.message = message; this.message = message;
} }
} }

@ -2,32 +2,45 @@ package com.xmomen.module.resource.api;
import java.util.Map; import java.util.Map;
/**
* DfsFile DFS
*
*/
public class DfsFile { public class DfsFile {
/** /**
* file data *
*
*/ */
private byte[] data; private byte[] data;
/** /**
* key,not used in FastDfs *
* FastDFS 使
*/ */
private String key; private String key;
/** /**
* metadata for file *
*
*
*/ */
private Map<String, String> metadata; private Map<String, String> metadata;
/**
*
* DfsFile null
*/
public DfsFile() { public DfsFile() {
} }
/** /**
* constructor with data, key and metadata * DfsFile
* *
* @param key key,not used in FastDfs * @param key FastDFS 使
* @param data file data * @param data
* @param metadata metadata for file * @param metadata
*/ */
public DfsFile(String key, byte[] data, Map<String, String> metadata) { public DfsFile(String key, byte[] data, Map<String, String> metadata) {
this.key = key; this.key = key;
@ -35,28 +48,58 @@ public class DfsFile {
this.metadata = metadata; this.metadata = metadata;
} }
/**
*
*
* @return
*/
public byte[] getData() { public byte[] getData() {
return data; return data;
} }
/**
*
*
* @param data
*/
public void setData(byte[] data) { public void setData(byte[] data) {
this.data = data; this.data = data;
} }
/**
*
*
* @return
*/
public String getKey() { public String getKey() {
return key; return key;
} }
/**
*
*
* @param key
*/
public void setKey(String key) { public void setKey(String key) {
this.key = key; this.key = key;
} }
/**
*
*
* @return
*/
public Map<String, String> getMetadata() { public Map<String, String> getMetadata() {
return metadata; return metadata;
} }
/**
*
*
* @param metadata
*/
public void setMetadata(Map<String, String> metadata) { public void setMetadata(Map<String, String> metadata) {
this.metadata = metadata; this.metadata = metadata;
} }
} }

@ -1,45 +1,74 @@
package com.xmomen.module.resource.api; package com.xmomen.module.resource.api;
/**
* DfsPath DFS
* HTTP 访
*/
public class DfsPath { public class DfsPath {
/** /**
* whole url, just like http://.../bucketName/remotePath * HTTP 访 http://.../bucketName/remotePath。
* 访
*/ */
private String httpPath; private String httpPath;
/** /**
* file path on storage server *
*
*/ */
private String remotePath; private String remotePath;
/**
* DfsPath null
*/
public DfsPath() { public DfsPath() {
} }
/** /**
* Constructor with httpPath and remotePath * HTTP DfsPath
* *
* @param httpPath * @param httpPath HTTP 访
* @param remotePath * @param remotePath
*/ */
public DfsPath(String httpPath, String remotePath) { public DfsPath(String httpPath, String remotePath) {
this.httpPath = httpPath; this.httpPath = httpPath;
this.remotePath = remotePath; this.remotePath = remotePath;
} }
/**
* HTTP 访
*
* @return HTTP 访
*/
public String getHttpPath() { public String getHttpPath() {
return httpPath; return httpPath;
} }
/**
* HTTP 访
*
* @param httpPath HTTP 访
*/
public void setHttpPath(String httpPath) { public void setHttpPath(String httpPath) {
this.httpPath = httpPath; this.httpPath = httpPath;
} }
/**
*
*
* @return
*/
public String getRemotePath() { public String getRemotePath() {
return remotePath; return remotePath;
} }
/**
*
*
* @param remotePath
*/
public void setRemotePath(String remotePath) { public void setRemotePath(String remotePath) {
this.remotePath = remotePath; this.remotePath = remotePath;
} }
} }

@ -4,7 +4,9 @@ import java.io.File;
public class DfsSdk { public class DfsSdk {
// 根据dfsType和bucketName获取DfsService实例
public static DfsService getDfsInstance(String dfsType, String bucketName) { public static DfsService getDfsInstance(String dfsType, String bucketName) {
// 如果dfsType为FastDFS则获取FastDfsService实例
if ("FastDFS".equalsIgnoreCase(dfsType)) { if ("FastDFS".equalsIgnoreCase(dfsType)) {
DfsService dfsService = FastDfsService.getInstance(bucketName); DfsService dfsService = FastDfsService.getInstance(bucketName);
return dfsService; return dfsService;
@ -12,6 +14,7 @@ public class DfsSdk {
return null; return null;
} }
// 默认获取FastDFS的DfsService实例
public static DfsService getDfsInstance() { public static DfsService getDfsInstance() {
return getDfsInstance("FastDFS", "group1"); return getDfsInstance("FastDFS", "group1");
} }

@ -4,73 +4,91 @@ import java.io.File;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
/**
* DfsService DFS
*
*/
public interface DfsService { public interface DfsService {
/** /**
* Upload file to file system. *
* *
* @param filePath local file path * @param filePath
* @param key Key * @param key
* @param metadata metadata for the file * @param metadata
* @return DfsPath object or null if fail * @return DFS DfsPath null
*/ */
public DfsPath putObject(String filePath, String key, Map<String, String> metadata); public DfsPath putObject(String filePath, String key, Map<String, String> metadata);
/** /**
* Upload file to file system * File
* *
* @param file file * @param file
* @param key Key * @param key
* @param metadata metadata for the file * @param metadata
* @return DfsPath object or null if fail * @return DFS DfsPath null
*/ */
public DfsPath putObject(File file, String key, Map<String, String> metadata); public DfsPath putObject(File file, String key, Map<String, String> metadata);
/** /**
* Upload file to file system *
* *
* @param bytes file * @param bytes
* @param key Key * @param key
* @param metadata metadata for the file * @param metadata
* @param extName ext name of file * @param extName
* @return DfsPath object or null if fail * @return DFS DfsPath null
*/ */
public DfsPath putObject(byte[] bytes, String key, Map<String, String> metadata, String extName); public DfsPath putObject(byte[] bytes, String key, Map<String, String> metadata, String extName);
/** /**
* Get file from file system with remotePath *
* *
* @param remotePath remote file path on file system * @param remotePath
* @param key Key * @param key
* @return DfsPath object or null if fail * @return DfsFile null
*/ */
public DfsFile getObject(String remotePath, String key); public DfsFile getObject(String remotePath, String key);
/** /**
* Delete the file on file system *
* *
* @param remotePath remote file path on file system * @param remotePath
* @param key Key * @param key
* @return true||false * @return true false
*/ */
public boolean deleteObject(String remotePath, String key); public boolean deleteObject(String remotePath, String key);
/** /**
* Get the list of the file on file system *
* *
* @return List<DfsFile> * @return DfsFile
*/ */
public List<DfsFile> listObjects(); public List<DfsFile> listObjects();
/** /**
* Get the whole url * HTTP 访
* *
* @param remotePath * @param remotePath
* @return whole url * @return HTTP 访访
*/ */
public String getHttpPath(String remotePath); public String getHttpPath(String remotePath);
/**
* DMS HTTP 访
* DMS
*
* @param dmsFilePath DMS
* @return HTTP 访
*/
public String getDmsHttpPath(String dmsFilePath); public String getDmsHttpPath(String dmsFilePath);
/**
*
*
*
* @param type
* @return
*/
public String getDefaultPath(String type); public String getDefaultPath(String type);
} }

@ -19,58 +19,77 @@ import org.csource.fastdfs.StorageServer;
import org.csource.fastdfs.TrackerClient; import org.csource.fastdfs.TrackerClient;
import org.csource.fastdfs.TrackerServer; import org.csource.fastdfs.TrackerServer;
/**
* FastDfsService DfsService FastDFS
* FastDFS
*/
public class FastDfsService implements DfsService { public class FastDfsService implements DfsService {
// 单例实例
private static FastDfsService instance = null; private static FastDfsService instance = null;
// 基础 URL用于构建文件的完整 HTTP 访问路径
private String baseUrl = ""; private String baseUrl = "";
// DMS 基础 URL用于构建 DMS 文件的完整 HTTP 访问路径
private String dmsBaseUrl = ""; private String dmsBaseUrl = "";
// 默认图片 URL
private String defaultPicUrl = ""; private String defaultPicUrl = "";
//private static Logger logger = Logger.getLogger(FastDfsService.class.getName()); // 配置文件中基础 URL 的键名
private static String BASE_URL = "httpBaseUrl"; private static String BASE_URL = "httpBaseUrl";
// 配置文件中 DMS 基础 URL 的键名
private static String DMS_BASE_URL = "dmsBaseUrl"; private static String DMS_BASE_URL = "dmsBaseUrl";
// 配置文件中默认图片 URL 的键名
private static String DEFAULT_PIC_URL = "defaultPicUrl"; private static String DEFAULT_PIC_URL = "defaultPicUrl";
// FastDFS 键名,用于元数据中存储文件的唯一标识
private static String FAST_DFS_KEY = "FastDfsKey"; private static String FAST_DFS_KEY = "FastDfsKey";
/** /**
* bucket name *
*/ */
private final String bucketName; private final String bucketName;
/** /**
* constructor with bucketName * FastDfsService
* FastDFS
* *
* @param bucketName bucket name * @param bucketName
*/ */
private FastDfsService(String bucketName) { private FastDfsService(String bucketName) {
this.bucketName = bucketName; this.bucketName = bucketName;
String configFilePath = null; String configFilePath = null;
try {
configFilePath = FastDfsService.class.getResource("/").toURI().getPath() + "fdfs_client.conf";
} catch (URISyntaxException e1) {
Exception e = new Exception("Cann't found fdfs_client.conf file under " + FastDfsService.class.getResource("/"));
handleException(e);
}
try { try {
// 获取 FastDFS 配置文件的路径
configFilePath = FastDfsService.class.getResource("/").toURI().getPath() + "fdfs_client.conf";
} catch (URISyntaxException e1) {
// 若无法找到配置文件,抛出异常并处理
Exception e = new Exception("Cann't found fdfs_client.conf file under " + FastDfsService.class.getResource("/"));
handleException(e);
}
try {
// 初始化 FastDFS 客户端全局配置
ClientGlobal.init(configFilePath); ClientGlobal.init(configFilePath);
// 读取配置文件
IniFileReader reader = new IniFileReader(configFilePath); IniFileReader reader = new IniFileReader(configFilePath);
// 设置基础 URL
setBaseUrl(reader.getStrValue(BASE_URL)); setBaseUrl(reader.getStrValue(BASE_URL));
// 设置 DMS 基础 URL
setDmsBaseUrl(reader.getStrValue(DMS_BASE_URL)); setDmsBaseUrl(reader.getStrValue(DMS_BASE_URL));
// 设置默认图片 URL
setDefaultPicUrl(reader.getStrValue(DEFAULT_PIC_URL)); setDefaultPicUrl(reader.getStrValue(DEFAULT_PIC_URL));
} catch (Exception e) { } catch (Exception e) {
// 处理初始化过程中出现的异常
handleException(e); handleException(e);
} }
} }
/** /**
* Get instance of FastDfsService, for Singleton * FastDfsService
* @param bucketName bucket name * 线
* @return instance of FastDfsService *
* @param bucketName
* @return FastDfsService
*/ */
public static synchronized FastDfsService getInstance(String bucketName) { public static synchronized FastDfsService getInstance(String bucketName) {
if (null == instance) { if (null == instance) {
@ -80,11 +99,11 @@ public class FastDfsService implements DfsService {
} }
/** /**
* Delete file on file system. *
* *
* @param remotePath remote file path * @param remotePath
* @param key Key, not used in FastDFS * @param key FastDFS 使
* @return true|false * @return true false
*/ */
@Override @Override
public boolean deleteObject(String remotePath, String key) { public boolean deleteObject(String remotePath, String key) {
@ -92,21 +111,28 @@ public class FastDfsService implements DfsService {
TrackerClient trackerClient = new TrackerClient(); TrackerClient trackerClient = new TrackerClient();
TrackerServer trackerServer = null; TrackerServer trackerServer = null;
try { try {
// 获取 Tracker 服务器连接
trackerServer = trackerClient.getConnection(); trackerServer = trackerClient.getConnection();
// 创建存储客户端
StorageClient storageClient = new StorageClient(trackerServer, null); StorageClient storageClient = new StorageClient(trackerServer, null);
// 调用 FastDFS API 删除文件
result = storageClient.delete_file(bucketName, remotePath); result = storageClient.delete_file(bucketName, remotePath);
} catch(Exception e) { } catch (Exception e) {
// 处理删除过程中出现的异常
handleException(e); handleException(e);
} finally { } finally {
if (null != trackerServer) { if (null != trackerServer) {
try { try {
// 关闭 Tracker 服务器连接
trackerServer.close(); trackerServer.close();
} catch (Exception e) { } catch (Exception e) {
// 处理关闭连接时出现的异常
handleException(e); handleException(e);
} }
} }
} }
if (0 != result) { if (0 != result) {
// 删除失败,记录日志并返回 false
//logger.info("delete faild, the faild code is: " + result); //logger.info("delete faild, the faild code is: " + result);
return false; return false;
} }
@ -114,26 +140,33 @@ public class FastDfsService implements DfsService {
} }
/** /**
* Find the whole url * HTTP 访
* *
* @param remotePath remote path * @param remotePath
* @return the whole url * @return HTTP 访
*/ */
@Override @Override
public String getHttpPath(String remotePath) { public String getHttpPath(String remotePath) {
return baseUrl + "/" + bucketName + "/" + remotePath; return baseUrl + "/" + bucketName + "/" + remotePath;
} }
/**
* DMS HTTP 访
*
* @param dmsFilePath DMS
* @return DMS HTTP 访
*/
@Override @Override
public String getDmsHttpPath(String dmsFilePath) { public String getDmsHttpPath(String dmsFilePath) {
return dmsBaseUrl + dmsFilePath; return dmsBaseUrl + dmsFilePath;
} }
/** /**
* Get the file, and return DfsFile object *
* *
* @param remotePath remote path * @param remotePath
* @param key Key, not used in FastDFS, can be null * @param key FastDFS 使 null
* @return DfsFile object or null if fail * @return DfsFile null
*/ */
@Override @Override
public DfsFile getObject(String remotePath, String key) { public DfsFile getObject(String remotePath, String key) {
@ -141,59 +174,75 @@ public class FastDfsService implements DfsService {
TrackerServer trackerServer = null; TrackerServer trackerServer = null;
StorageServer storageServer = null; StorageServer storageServer = null;
try { try {
// 获取 Tracker 服务器连接
trackerServer = trackerClient.getConnection(); trackerServer = trackerClient.getConnection();
// 获取存储服务器
storageServer = trackerClient.getFetchStorage(trackerServer, bucketName, remotePath); storageServer = trackerClient.getFetchStorage(trackerServer, bucketName, remotePath);
// 创建存储客户端
StorageClient storageClient = new StorageClient(trackerServer, storageServer); StorageClient storageClient = new StorageClient(trackerServer, storageServer);
// 下载文件
byte[] bytes = storageClient.download_file(this.bucketName, remotePath); byte[] bytes = storageClient.download_file(this.bucketName, remotePath);
if (null != bytes) { if (null != bytes) {
// 获取文件的元数据
NameValuePair[] value_pairs = storageClient.get_metadata(bucketName, remotePath); NameValuePair[] value_pairs = storageClient.get_metadata(bucketName, remotePath);
Map<String, String> metadata = new HashMap<String, String>(); Map<String, String> metadata = new HashMap<String, String>();
for (int i = 0; i < value_pairs.length; i++) { for (int i = 0; i < value_pairs.length; i++) {
// 将元数据存储到 Map 中
metadata.put(value_pairs[i].getName(), value_pairs[i].getValue()); metadata.put(value_pairs[i].getName(), value_pairs[i].getValue());
} }
// 创建 DfsFile 对象
DfsFile dfsFile = new DfsFile(metadata.get(FAST_DFS_KEY), bytes, metadata); DfsFile dfsFile = new DfsFile(metadata.get(FAST_DFS_KEY), bytes, metadata);
return dfsFile; return dfsFile;
} }
} catch (Exception e){ } catch (Exception e) {
// 处理获取文件过程中出现的异常
handleException(e); handleException(e);
} finally { } finally {
if (null != storageServer) { if (null != storageServer) {
try { try {
// 关闭存储服务器连接
storageServer.close(); storageServer.close();
} catch (Exception e) { } catch (Exception e) {
// 处理关闭连接时出现的异常
handleException(e); handleException(e);
} }
} }
if (null != trackerServer) { if (null != trackerServer) {
try { try {
// 关闭 Tracker 服务器连接
trackerServer.close(); trackerServer.close();
} catch (Exception e) { } catch (Exception e) {
// 处理关闭连接时出现的异常
handleException(e); handleException(e);
} }
} }
} }
// 获取文件失败,记录日志并返回 null
//logger.info("Get object failed, get null object"); //logger.info("Get object failed, get null object");
return null; return null;
} }
/** /**
* Get the file list of file system. *
* Not implement at the moment, because FastDFS API not support. * FastDFS API
*
* @return null
*/ */
@Override @Override
public List<DfsFile> listObjects() { public List<DfsFile> listObjects() {
//to do // 待实现
//Because fastDFS api do not support list object method. // 因为 FastDFS API 不支持列出对象的方法
return null; return null;
} }
/** /**
* Upload the file to file system by file path *
* File putObject(File file, String key, Map<String, String> metadata)
* *
* @param filePath local file path. * @param filePath
* @param key Key, not used in FastDFS, can be null * @param key FastDFS 使 null
* @param metadata metadata for file, can be null * @param metadata null
* @return DfsFile object or null if fail * @return DfsPath null
*/ */
@Override @Override
public DfsPath putObject(String filePath, String key, Map<String, String> metadata) { public DfsPath putObject(String filePath, String key, Map<String, String> metadata) {
@ -202,13 +251,13 @@ public class FastDfsService implements DfsService {
} }
/** /**
* Upload the file to file system by bytes *
* *
* @param bytes bytes * @param bytes
* @param key Key, not used in FastDFS * @param key FastDFS 使
* @param metadata metadata for file, can be null * @param metadata null
* @param extName extName for file, can be null * @param extName null
* @return DfsPath object or null if fail * @return DfsPath null
*/ */
@Override @Override
public DfsPath putObject(byte[] bytes, String key, Map<String, String> metadata, String extName) { public DfsPath putObject(byte[] bytes, String key, Map<String, String> metadata, String extName) {
@ -216,147 +265,215 @@ public class FastDfsService implements DfsService {
TrackerServer trackerServer = null; TrackerServer trackerServer = null;
StorageServer storageServer = null; StorageServer storageServer = null;
try { try {
// 获取 Tracker 服务器连接
trackerServer = trackerClient.getConnection(); trackerServer = trackerClient.getConnection();
// 获取存储服务器列表
StorageServer[] storageServers = trackerClient.getStoreStorages(trackerServer, bucketName); StorageServer[] storageServers = trackerClient.getStoreStorages(trackerServer, bucketName);
if (null != storageServers) { if (null != storageServers) {
// 选择第一个存储服务器
storageServer = storageServers[0]; storageServer = storageServers[0];
// 创建存储客户端
StorageClient storageClient = new StorageClient(trackerServer, storageServer); StorageClient storageClient = new StorageClient(trackerServer, storageServer);
NameValuePair[] meta_list; NameValuePair[] meta_list;
int i = 0; int i = 0;
if (null == metadata) { if (null == metadata) {
// 若元数据为空,创建一个包含一个元素的元数据数组
meta_list = new NameValuePair[1]; meta_list = new NameValuePair[1];
} else { } else {
// 若元数据不为空,创建一个包含元数据和 FastDFS 键的数组
meta_list = new NameValuePair[metadata.size() + 1]; meta_list = new NameValuePair[metadata.size() + 1];
for (Map.Entry<String, String> entry : metadata.entrySet()) { for (Map.Entry<String, String> entry : metadata.entrySet()) {
meta_list[i++] = new NameValuePair(entry.getKey(), entry.getValue()); meta_list[i++] = new NameValuePair(entry.getKey(), entry.getValue());
} }
} }
// 添加 FastDFS 键到元数据数组
meta_list[i] = new NameValuePair(FAST_DFS_KEY, key); meta_list[i] = new NameValuePair(FAST_DFS_KEY, key);
// 调用 FastDFS API 上传文件
String[] results = storageClient.upload_file(bytes, extName, meta_list); String[] results = storageClient.upload_file(bytes, extName, meta_list);
if (null == results) { if (null == results) {
// 上传失败,记录日志并返回 null
//logger.info("upload file fail, error codes: " + storageClient.getErrorCode()); //logger.info("upload file fail, error codes: " + storageClient.getErrorCode());
return null; return null;
} else { } else {
// 获取远程文件名
String remote_fileName = results[1]; String remote_fileName = results[1];
// 构建文件的完整 HTTP 访问路径
String httpPath = this.getHttpPath(remote_fileName); String httpPath = this.getHttpPath(remote_fileName);
// 创建 DfsPath 对象
DfsPath dfsPath = new DfsPath(httpPath, remote_fileName); DfsPath dfsPath = new DfsPath(httpPath, remote_fileName);
return dfsPath; return dfsPath;
} }
} }
} catch (Exception e) { } catch (Exception e) {
// 处理上传过程中出现的异常
handleException(e); handleException(e);
} finally { } finally {
if (null != storageServer) { if (null != storageServer) {
try { try {
// 关闭存储服务器连接
storageServer.close(); storageServer.close();
} catch (Exception e) { } catch (Exception e) {
// 处理关闭连接时出现的异常
handleException(e); handleException(e);
} }
} }
if (null != trackerServer) { if (null != trackerServer) {
try { try {
// 关闭 Tracker 服务器连接
trackerServer.close(); trackerServer.close();
} catch (Exception e) { } catch (Exception e) {
// 处理关闭连接时出现的异常
handleException(e); handleException(e);
} }
} }
} }
// 上传失败,记录日志并返回 null
//logger.info("Upload file faild, because can not get storage servers!"); //logger.info("Upload file faild, because can not get storage servers!");
return null; return null;
} }
/** /**
* Upload the file to file system *
* putObject(byte[] bytes, String key, Map<String, String> metadata, String extName)
* *
* @param file file * @param file
* @param key Key, not used in FastDFS, can be null * @param key FastDFS 使 null
* @param metadata metadata for file , can be null * @param metadata null
* @return DfsPath object or null if fail * @return DfsPath null
*/ */
@Override @Override
public DfsPath putObject(File file, String key, Map<String, String> metadata) { public DfsPath putObject(File file, String key, Map<String, String> metadata) {
FileInputStream in = null; FileInputStream in = null;
byte[] file_buff = null; byte[] file_buff = null;
try { try {
// 打开文件输入流
in = new FileInputStream(file); in = new FileInputStream(file);
if (null != in) { if (null != in) {
// 获取文件长度
int len = in.available(); int len = in.available();
// 创建字节数组
file_buff = new byte[len]; file_buff = new byte[len];
// 读取文件内容到字节数组
in.read(file_buff); in.read(file_buff);
} }
} catch (Exception e) { } catch (Exception e) {
// 处理读取文件过程中出现的异常
handleException(e); handleException(e);
} finally { } finally {
if (null != in) { if (null != in) {
try { try {
// 关闭文件输入流
in.close(); in.close();
} catch (Exception e) { } catch (Exception e) {
// 处理关闭流时出现的异常
handleException(e); handleException(e);
} }
} }
} }
String file_ext_name = ""; String file_ext_name = "";
if (file.getName().lastIndexOf(".") > 0) { if (file.getName().lastIndexOf(".") > 0) {
// 获取文件扩展名
file_ext_name = file.getName().substring(file.getName().lastIndexOf(".") + 1); file_ext_name = file.getName().substring(file.getName().lastIndexOf(".") + 1);
} }
// 调用 putObject(byte[] bytes, String key, Map<String, String> metadata, String extName) 方法上传文件
return putObject(file_buff, key, metadata, file_ext_name); return putObject(file_buff, key, metadata, file_ext_name);
} }
/**
* URL
*
* @return URL
*/
public String getBaseUrl() { public String getBaseUrl() {
return baseUrl; return baseUrl;
} }
/**
* URL
*
* @param baseUrl URL
*/
private void setBaseUrl(String baseUrl) { private void setBaseUrl(String baseUrl) {
this.baseUrl = baseUrl; this.baseUrl = baseUrl;
} }
/**
* DMS URL
*
* @return DMS URL
*/
public String getDmsBaseUrl() { public String getDmsBaseUrl() {
return dmsBaseUrl; return dmsBaseUrl;
} }
/**
* DMS URL
*
* @param dmsBaseUrl DMS URL
*/
public void setDmsBaseUrl(String dmsBaseUrl) { public void setDmsBaseUrl(String dmsBaseUrl) {
this.dmsBaseUrl = dmsBaseUrl; this.dmsBaseUrl = dmsBaseUrl;
} }
/**
* URL
*
* @return URL
*/
public String getDefaultPicUrl() { public String getDefaultPicUrl() {
return defaultPicUrl; return defaultPicUrl;
} }
/**
* URL
*
* @param defaultPicUrl URL
*/
public void setDefaultPicUrl(String defaultPicUrl) { public void setDefaultPicUrl(String defaultPicUrl) {
this.defaultPicUrl = defaultPicUrl; this.defaultPicUrl = defaultPicUrl;
} }
/** /**
* Handle Exception *
* @param e exception * DfsException
*
* @param e
*/ */
private void handleException(Exception e) { private void handleException(Exception e) {
if (e instanceof IOException) { if (e instanceof IOException) {
// 处理 IOException抛出 DfsException错误码为 100
//logger.error("Exception occured : DFSException code: 100," + " exception message :" + e.getMessage()); //logger.error("Exception occured : DFSException code: 100," + " exception message :" + e.getMessage());
throw new DfsException("100", e.getMessage()); throw new DfsException("100", e.getMessage());
} else if (e instanceof FileNotFoundException) { } else if (e instanceof FileNotFoundException) {
// 处理 FileNotFoundException抛出 DfsException错误码为 200
//logger.error("Exception occured : DFSException code: 200," + " exception message : file not found." + e.getMessage()); //logger.error("Exception occured : DFSException code: 200," + " exception message : file not found." + e.getMessage());
throw new DfsException("200", e.getMessage()); throw new DfsException("200", e.getMessage());
} else if (e instanceof MyException) { } else if (e instanceof MyException) {
// 处理 MyException抛出 DfsException错误码为 300
//logger.error("Exception occured : DFSException code: 300," + " exception message :" + e.getMessage()); //logger.error("Exception occured : DFSException code: 300," + " exception message :" + e.getMessage());
throw new DfsException("300", e.getMessage()); throw new DfsException("300", e.getMessage());
} else if (e instanceof Exception) { } else if (e instanceof Exception) {
// 处理其他异常,抛出 DfsException错误码为 400
//logger.error("Exception occured : DFSException code: 400," + " exception message :" + e.getMessage()); //logger.error("Exception occured : DFSException code: 400," + " exception message :" + e.getMessage());
throw new DfsException("400", e.getMessage()); throw new DfsException("400", e.getMessage());
} }
} }
@Override /**
public String getDefaultPath(String type) { *
if("PICTURE".equalsIgnoreCase(type)) { * "PICTURE" URL URL
return defaultPicUrl; *
} * @param type
return defaultPicUrl; * @return
} */
@Override
public String getDefaultPath(String type) {
if ("PICTURE".equalsIgnoreCase(type)) {
return defaultPicUrl;
} }
return defaultPicUrl;
}
}

@ -1,130 +1,203 @@
// 声明该类所在的包,此包为资源控制器相关的包
package com.xmomen.module.resource.controller; package com.xmomen.module.resource.controller;
// 导入自定义框架中的业务异常类,用于处理业务逻辑中出现的异常
import com.xmomen.framework.exception.BusinessException; import com.xmomen.framework.exception.BusinessException;
// 导入自定义框架中 MyBatis 分页相关的 Page 类,用于处理分页查询结果
import com.xmomen.framework.mybatis.page.Page; import com.xmomen.framework.mybatis.page.Page;
// 导入自定义模块中的日志注解,用于记录操作日志
import com.xmomen.module.logger.Log; import com.xmomen.module.logger.Log;
// 导入资源查询模型类,用于封装资源查询的条件
import com.xmomen.module.resource.model.ResourceQuery; import com.xmomen.module.resource.model.ResourceQuery;
// 导入资源数据模型类,用于封装资源的相关数据
import com.xmomen.module.resource.model.ResourceModel; import com.xmomen.module.resource.model.ResourceModel;
// 导入资源服务类,该类包含资源相关的业务逻辑
import com.xmomen.module.resource.service.ResourceService; import com.xmomen.module.resource.service.ResourceService;
// 导入 Apache Commons IO 工具类,用于处理输入输出流
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
// 导入 Jeecg 框架中 Excel 导入工具类,用于从 Excel 文件中导入数据
import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.ExcelImportUtil;
// 导入 Jeecg 框架中 Excel 导出参数类,用于配置 Excel 导出的参数
import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.ExportParams;
// 导入 Jeecg 框架中 Excel 导入参数类,用于配置 Excel 导入的参数
import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.entity.ImportParams;
// 导入 Jeecg 框架中 Excel 导入结果类,用于封装 Excel 导入的结果
import org.jeecgframework.poi.excel.entity.result.ExcelImportResult; import org.jeecgframework.poi.excel.entity.result.ExcelImportResult;
// 导入 Jeecg 框架中普通 Excel 常量类,包含一些 Excel 操作的常量
import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants;
// 导入 Jeecg 框架中 Excel 导入异常类,用于处理 Excel 导入过程中出现的异常
import org.jeecgframework.poi.exception.excel.ExcelImportException; import org.jeecgframework.poi.exception.excel.ExcelImportException;
// 导入 Spring 框架中的自动装配注解,用于自动注入依赖的 Bean
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
// 导入 Spring 框架中的模型映射类,用于在控制器和视图之间传递数据
import org.springframework.ui.ModelMap; import org.springframework.ui.ModelMap;
// 导入 Spring 框架中的数据绑定结果类,用于处理数据绑定过程中的错误信息
import org.springframework.validation.BindingResult; import org.springframework.validation.BindingResult;
// 导入 Spring 框架中的请求映射相关注解,用于处理 HTTP 请求
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
// 导入 Spring 框架中用于处理多部分文件上传的类
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
// 导入 Spring 框架中的模型和视图类,用于返回包含模型数据和视图名称的对象
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
// 导入 JSR-303 验证框架中的有效注解,用于对请求参数进行验证
import javax.validation.Valid; import javax.validation.Valid;
// 导入 Java 序列化接口,用于支持对象的序列化和反序列化
import java.io.Serializable; import java.io.Serializable;
// 导入 Java 输入输出异常类,用于处理输入输出操作中出现的异常
import java.io.IOException; import java.io.IOException;
// 导入 Java 输入流类,用于读取数据
import java.io.InputStream; import java.io.InputStream;
// 导入 Java 列表接口,用于存储多个元素
import java.util.List; import java.util.List;
/** /**
* HTTP
*
* @author tanxinzheng * @author tanxinzheng
* @version 1.0.0 * @version 1.0.0
* @date 2017-4-10 23:26:20 * @date 2017-4-10 23:26:20
*/ */
// 标记该类为 RESTful 风格的控制器,会自动将方法返回值转换为 JSON 格式
@RestController @RestController
// 定义该控制器处理的请求路径前缀为 /resource
@RequestMapping(value = "/resource") @RequestMapping(value = "/resource")
public class ResourceController { public class ResourceController {
// 使用自动装配注解将 ResourceService 注入到当前类中,用于调用资源相关的业务逻辑
@Autowired @Autowired
ResourceService resourceService; ResourceService resourceService;
/** /**
* *
* *
* @param limit * @param limit
* @param offset * @param offset
* @param id * @param id
* @param ids * @param entityType
* @param excludeIds * @param entityId ID
* @return Page<ResourceModel> * @param ids
* @param excludeIds
* @return
*/ */
// 映射 HTTP GET 请求到该方法
@RequestMapping(method = RequestMethod.GET) @RequestMapping(method = RequestMethod.GET)
// 使用日志注解记录该操作的名称为查询资源目录列表
@Log(actionName = "查询资源目录列表") @Log(actionName = "查询资源目录列表")
public Page<ResourceModel> getResourceList(@RequestParam(value = "limit") Integer limit, public Page<ResourceModel> getResourceList(
@RequestParam(value = "offset") Integer offset, // 从请求参数中获取每页结果数
@RequestParam(value = "id", required = false) String id, @RequestParam(value = "limit") Integer limit,
@RequestParam(value = "entityType", required = false) String entityType, // 从请求参数中获取页码
@RequestParam(value = "entityId", required = false) String entityId, @RequestParam(value = "offset") Integer offset,
@RequestParam(value = "ids", required = false) String[] ids, // 从请求参数中获取资源主键,该参数可选
@RequestParam(value = "excludeIds", required = false) String[] excludeIds) { @RequestParam(value = "id", required = false) String id,
// 从请求参数中获取资源所属的实体类型,该参数可选
@RequestParam(value = "entityType", required = false) String entityType,
// 从请求参数中获取资源所属的实体 ID该参数可选
@RequestParam(value = "entityId", required = false) String entityId,
// 从请求参数中获取资源主键数组,该参数可选
@RequestParam(value = "ids", required = false) String[] ids,
// 从请求参数中获取不包含的资源主键数组,该参数可选
@RequestParam(value = "excludeIds", required = false) String[] excludeIds) {
// 创建资源查询对象
ResourceQuery resourceQuery = new ResourceQuery(); ResourceQuery resourceQuery = new ResourceQuery();
// 设置查询条件:资源主键
resourceQuery.setId(id); resourceQuery.setId(id);
// 设置查询条件:不包含的资源主键数组
resourceQuery.setExcludeIds(excludeIds); resourceQuery.setExcludeIds(excludeIds);
// 设置查询条件:资源主键数组
resourceQuery.setIds(ids); resourceQuery.setIds(ids);
// 设置查询条件:资源所属的实体类型
resourceQuery.setEntityType(entityType); resourceQuery.setEntityType(entityType);
// 设置查询条件:资源所属的实体 ID
resourceQuery.setEntityId(entityId); resourceQuery.setEntityId(entityId);
// 调用资源服务的方法,根据分页信息和查询条件获取资源目录分页数据
return resourceService.getResourceModelPage(limit, offset, resourceQuery); return resourceService.getResourceModelPage(limit, offset, resourceQuery);
} }
/** /**
* *
* *
* @param id * @param id
* @return ResourceModel * @return
*/ */
// 映射形如 /resource/{id} 的 HTTP GET 请求到该方法
@RequestMapping(value = "/{id}", method = RequestMethod.GET) @RequestMapping(value = "/{id}", method = RequestMethod.GET)
// 使用日志注解记录该操作的名称为查询资源目录
@Log(actionName = "查询资源目录") @Log(actionName = "查询资源目录")
public ResourceModel getResourceById(@PathVariable(value = "id") String id) { public ResourceModel getResourceById(
// 从路径中获取资源主键
@PathVariable(value = "id") String id) {
// 调用资源服务的方法,根据主键获取单个资源目录的数据
return resourceService.getOneResourceModel(id); return resourceService.getOneResourceModel(id);
} }
/** /**
* *
* *
* @param resourceModel * @param resourceModel
* @return ResourceModel * @return
*/ */
// 映射 HTTP POST 请求到该方法
@RequestMapping(method = RequestMethod.POST) @RequestMapping(method = RequestMethod.POST)
// 使用日志注解记录该操作的名称为新增资源目录
@Log(actionName = "新增资源目录") @Log(actionName = "新增资源目录")
public ResourceModel createResource(@RequestBody @Valid ResourceModel resourceModel) { public ResourceModel createResource(
// 从请求体中获取新增资源目录的数据,并进行数据验证
@RequestBody @Valid ResourceModel resourceModel) {
// 调用资源服务的方法,创建新的资源目录
return resourceService.createResource(resourceModel); return resourceService.createResource(resourceModel);
} }
/** /**
* *
* *
* @param id * @param id
* @param resourceModel * @param resourceModel
*/ */
// 映射形如 /resource/{id} 的 HTTP PUT 请求到该方法
@RequestMapping(value = "/{id}", method = RequestMethod.PUT) @RequestMapping(value = "/{id}", method = RequestMethod.PUT)
// 使用日志注解记录该操作的名称为更新资源目录
@Log(actionName = "更新资源目录") @Log(actionName = "更新资源目录")
public void updateResource(@PathVariable(value = "id") String id, public void updateResource(
@RequestBody @Valid ResourceModel resourceModel) { // 从路径中获取要更新的资源主键
@PathVariable(value = "id") String id,
// 从请求体中获取更新后的资源目录数据,并进行数据验证
@RequestBody @Valid ResourceModel resourceModel) {
// 调用资源服务的方法,更新资源目录信息
resourceService.updateResource(resourceModel); resourceService.updateResource(resourceModel);
} }
/** /**
* *
* *
* @param id * @param id
*/ */
// 映射形如 /resource/{id} 的 HTTP DELETE 请求到该方法
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE) @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
// 使用日志注解记录该操作的名称为删除单个资源目录
@Log(actionName = "删除单个资源目录") @Log(actionName = "删除单个资源目录")
public void deleteResource(@PathVariable(value = "id") String id) { public void deleteResource(
// 从路径中获取要删除的资源主键
@PathVariable(value = "id") String id) {
// 调用资源服务的方法,删除指定主键的资源目录
resourceService.deleteResource(id); resourceService.deleteResource(id);
} }
/** /**
* *
* *
* @param ids * @param ids
*/ */
// 映射 HTTP DELETE 请求到该方法
@RequestMapping(method = RequestMethod.DELETE) @RequestMapping(method = RequestMethod.DELETE)
// 使用日志注解记录该操作的名称为批量删除资源目录
@Log(actionName = "批量删除资源目录") @Log(actionName = "批量删除资源目录")
public void deleteResources(@RequestParam(value = "ids") String[] ids) { public void deleteResources(
// 从请求参数中获取要删除的资源主键数组
@RequestParam(value = "ids") String[] ids) {
// 调用资源服务的方法,批量删除指定主键的资源目录
resourceService.deleteResource(ids); resourceService.deleteResource(ids);
} }
}
}

@ -1,4 +1,4 @@
package com.xmomen.module.resource.entity; Xpackage com.xmomen.module.resource.entity;
import com.xmomen.framework.mybatis.model.BaseMybatisModel; import com.xmomen.framework.mybatis.model.BaseMybatisModel;
import javax.persistence.Column; import javax.persistence.Column;

@ -1,7 +1,15 @@
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.xmomen.module.resource.entity.mapper.ResourceMapper" > <?xml version="1.0" encoding="UTF-8"?>
<resultMap id="BaseResultMap" type="com.xmomen.module.resource.entity.Resource" > <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xmomen.module.resource.entity.mapper.ResourceMapper">
<!--
定义结果映射,将数据库查询结果映射到 Java 对象。
id: 结果映射的唯一标识。
type: 要映射的 Java 实体类的全限定名。
-->
<resultMap id="BaseResultMap" type="com.xmomen.module.resource.entity.Resource">
<!-- 映射数据库表中的主键列到实体类的属性 -->
<id column="ID" property="id" jdbcType="VARCHAR" /> <id column="ID" property="id" jdbcType="VARCHAR" />
<result column="ENTITY_TYPE" property="entityType" jdbcType="VARCHAR" /> <result column="ENTITY_TYPE" property="entityType" jdbcType="VARCHAR" />
<result column="ENTITY_ID" property="entityId" jdbcType="VARCHAR" /> <result column="ENTITY_ID" property="entityId" jdbcType="VARCHAR" />
@ -9,25 +17,37 @@
<result column="RESOURCE_TYPE" property="resourceType" jdbcType="VARCHAR" /> <result column="RESOURCE_TYPE" property="resourceType" jdbcType="VARCHAR" />
<result column="IS_DEFAULT" property="isDefault" jdbcType="INTEGER" /> <result column="IS_DEFAULT" property="isDefault" jdbcType="INTEGER" />
</resultMap> </resultMap>
<sql id="Example_Where_Clause" >
<where > <!--
<foreach collection="oredCriteria" item="criteria" separator="or" > 定义 SQL 片段,用于生成 WHERE 子句。
<if test="criteria.valid" > 此片段根据传入的查询条件动态生成 WHERE 子句,支持多种条件类型(无值、单值、范围值、列表值)。
<trim prefix="(" suffix=")" prefixOverrides="and" > -->
<foreach collection="criteria.criteria" item="criterion" > <sql id="Example_Where_Clause">
<choose > <where>
<when test="criterion.noValue" > <!-- 遍历所有的查询条件组 -->
<foreach collection="oredCriteria" item="criteria" separator="or">
<if test="criteria.valid">
<!-- 去除开头多余的 "and" -->
<trim prefix="(" suffix=")" prefixOverrides="and">
<!-- 遍历每个查询条件组中的具体条件 -->
<foreach collection="criteria.criteria" item="criterion">
<choose>
<!-- 处理无值条件 -->
<when test="criterion.noValue">
and ${criterion.condition} and ${criterion.condition}
</when> </when>
<when test="criterion.singleValue" > <!-- 处理单值条件 -->
<when test="criterion.singleValue">
and ${criterion.condition} #{criterion.value} and ${criterion.condition} #{criterion.value}
</when> </when>
<when test="criterion.betweenValue" > <!-- 处理范围值条件 -->
<when test="criterion.betweenValue">
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when> </when>
<when test="criterion.listValue" > <!-- 处理列表值条件 -->
<when test="criterion.listValue">
and ${criterion.condition} and ${criterion.condition}
<foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," > <foreach collection="criterion.value" item="listItem" open="(" close=")" separator=",">
#{listItem} #{listItem}
</foreach> </foreach>
</when> </when>
@ -38,25 +58,30 @@
</foreach> </foreach>
</where> </where>
</sql> </sql>
<sql id="Update_By_Example_Where_Clause" >
<where > <!--
<foreach collection="example.oredCriteria" item="criteria" separator="or" > 定义 SQL 片段,用于生成 UPDATE 语句的 WHERE 子句。
<if test="criteria.valid" > 逻辑与 Example_Where_Clause 类似,用于根据条件更新数据。
<trim prefix="(" suffix=")" prefixOverrides="and" > -->
<foreach collection="criteria.criteria" item="criterion" > <sql id="Update_By_Example_Where_Clause">
<choose > <where>
<when test="criterion.noValue" > <foreach collection="example.oredCriteria" item="criteria" separator="or">
<if test="criteria.valid">
<trim prefix="(" suffix=")" prefixOverrides="and">
<foreach collection="criteria.criteria" item="criterion">
<choose>
<when test="criterion.noValue">
and ${criterion.condition} and ${criterion.condition}
</when> </when>
<when test="criterion.singleValue" > <when test="criterion.singleValue">
and ${criterion.condition} #{criterion.value} and ${criterion.condition} #{criterion.value}
</when> </when>
<when test="criterion.betweenValue" > <when test="criterion.betweenValue">
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue} and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when> </when>
<when test="criterion.listValue" > <when test="criterion.listValue">
and ${criterion.condition} and ${criterion.condition}
<foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," > <foreach collection="criterion.value" item="listItem" open="(" close=")" separator=",">
#{listItem} #{listItem}
</foreach> </foreach>
</when> </when>
@ -67,100 +92,148 @@
</foreach> </foreach>
</where> </where>
</sql> </sql>
<sql id="Base_Column_List" >
<!-- 定义 SQL 片段,列出表中的基本列名 -->
<sql id="Base_Column_List">
ID, ENTITY_TYPE, ENTITY_ID, PATH, RESOURCE_TYPE, IS_DEFAULT ID, ENTITY_TYPE, ENTITY_ID, PATH, RESOURCE_TYPE, IS_DEFAULT
</sql> </sql>
<select id="selectByExample" resultMap="BaseResultMap" parameterType="com.xmomen.module.resource.entity.ResourceExample" >
<!--
定义查询语句,根据条件查询资源数据。
id: 语句的唯一标识。
resultMap: 引用前面定义的结果映射,用于将查询结果映射到实体类。
parameterType: 传入的参数类型,这里是查询条件对象。
-->
<select id="selectByExample" resultMap="BaseResultMap" parameterType="com.xmomen.module.resource.entity.ResourceExample">
select select
<if test="distinct" > <!-- 如果需要去重,添加 distinct 关键字 -->
<if test="distinct">
distinct distinct
</if> </if>
<!-- 引入基本列名片段 -->
<include refid="Base_Column_List" /> <include refid="Base_Column_List" />
from cd_resource from cd_resource
<if test="_parameter != null" > <!-- 如果传入了查询参数,引入 WHERE 子句片段 -->
<if test="_parameter != null">
<include refid="Example_Where_Clause" /> <include refid="Example_Where_Clause" />
</if> </if>
<if test="orderByClause != null" > <!-- 如果有排序条件,添加排序子句 -->
<if test="orderByClause != null">
order by ${orderByClause} order by ${orderByClause}
</if> </if>
</select> </select>
<delete id="deleteByExample" parameterType="com.xmomen.module.resource.entity.ResourceExample" >
<!--
定义删除语句,根据条件删除资源数据。
id: 语句的唯一标识。
parameterType: 传入的参数类型,这里是查询条件对象。
-->
<delete id="deleteByExample" parameterType="com.xmomen.module.resource.entity.ResourceExample">
delete from cd_resource delete from cd_resource
<if test="_parameter != null" > <!-- 如果传入了查询参数,引入 WHERE 子句片段 -->
<if test="_parameter != null">
<include refid="Example_Where_Clause" /> <include refid="Example_Where_Clause" />
</if> </if>
</delete> </delete>
<insert id="insertSelective" parameterType="com.xmomen.module.resource.entity.Resource" useGeneratedKeys="true" keyProperty="id" keyColumn="ID" >
<selectKey resultType="java.lang.String" keyProperty="id" order="BEFORE" > <!--
定义插入语句,选择性插入资源数据(只插入非空字段)。
id: 语句的唯一标识。
parameterType: 传入的参数类型,这里是要插入的实体类对象。
useGeneratedKeys: 是否使用数据库生成的主键。
keyProperty: 实体类中表示主键的属性名。
keyColumn: 数据库表中主键列的名称。
-->
<insert id="insertSelective" parameterType="com.xmomen.module.resource.entity.Resource" useGeneratedKeys="true" keyProperty="id" keyColumn="ID">
<!-- 在插入前生成主键值,这里使用 UUID 并去除连字符 -->
<selectKey resultType="java.lang.String" keyProperty="id" order="BEFORE">
SELECT replace(UUID(),'-','') SELECT replace(UUID(),'-','')
</selectKey> </selectKey>
insert into cd_resource insert into cd_resource
<trim prefix="(" suffix=")" suffixOverrides="," > <!-- 动态生成插入的列名,只包含非空字段 -->
<trim prefix="(" suffix=")" suffixOverrides=",">
ID, ID,
<if test="entityType != null" > <if test="entityType != null">
ENTITY_TYPE, ENTITY_TYPE,
</if> </if>
<if test="entityId != null" > <if test="entityId != null">
ENTITY_ID, ENTITY_ID,
</if> </if>
<if test="path != null" > <if test="path != null">
PATH, PATH,
</if> </if>
<if test="resourceType != null" > <if test="resourceType != null">
RESOURCE_TYPE, RESOURCE_TYPE,
</if> </if>
<if test="isDefault != null" > <if test="isDefault != null">
IS_DEFAULT, IS_DEFAULT,
</if> </if>
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides="," > <!-- 动态生成插入的值,只包含非空字段 -->
<trim prefix="values (" suffix=")" suffixOverrides=",">
#{id,jdbcType=VARCHAR}, #{id,jdbcType=VARCHAR},
<if test="entityType != null" > <if test="entityType != null">
#{entityType,jdbcType=VARCHAR}, #{entityType,jdbcType=VARCHAR},
</if> </if>
<if test="entityId != null" > <if test="entityId != null">
#{entityId,jdbcType=VARCHAR}, #{entityId,jdbcType=VARCHAR},
</if> </if>
<if test="path != null" > <if test="path != null">
#{path,jdbcType=VARCHAR}, #{path,jdbcType=VARCHAR},
</if> </if>
<if test="resourceType != null" > <if test="resourceType != null">
#{resourceType,jdbcType=VARCHAR}, #{resourceType,jdbcType=VARCHAR},
</if> </if>
<if test="isDefault != null" > <if test="isDefault != null">
#{isDefault,jdbcType=INTEGER}, #{isDefault,jdbcType=INTEGER},
</if> </if>
</trim> </trim>
</insert> </insert>
<select id="countByExample" parameterType="com.xmomen.module.resource.entity.ResourceExample" resultType="java.lang.Integer" >
<!--
定义统计语句,根据条件统计资源数据的数量。
id: 语句的唯一标识。
parameterType: 传入的参数类型,这里是查询条件对象。
resultType: 返回的结果类型,这里是整数类型。
-->
<select id="countByExample" parameterType="com.xmomen.module.resource.entity.ResourceExample" resultType="java.lang.Integer">
select count(*) from cd_resource select count(*) from cd_resource
<if test="_parameter != null" > <!-- 如果传入了查询参数,引入 WHERE 子句片段 -->
<if test="_parameter != null">
<include refid="Example_Where_Clause" /> <include refid="Example_Where_Clause" />
</if> </if>
</select> </select>
<update id="updateByExampleSelective" parameterType="map" >
<!--
定义更新语句,根据条件选择性更新资源数据(只更新非空字段)。
id: 语句的唯一标识。
parameterType: 传入的参数类型,这里是一个包含实体类对象和查询条件的 Map。
-->
<update id="updateByExampleSelective" parameterType="map">
update cd_resource update cd_resource
<set > <!-- 动态生成 SET 子句,只包含非空字段 -->
<if test="record.id != null" > <set>
<if test="record.id != null">
ID = #{record.id,jdbcType=VARCHAR}, ID = #{record.id,jdbcType=VARCHAR},
</if> </if>
<if test="record.entityType != null" > <if test="record.entityType != null">
ENTITY_TYPE = #{record.entityType,jdbcType=VARCHAR}, ENTITY_TYPE = #{record.entityType,jdbcType=VARCHAR},
</if> </if>
<if test="record.entityId != null" > <if test="record.entityId != null">
ENTITY_ID = #{record.entityId,jdbcType=VARCHAR}, ENTITY_ID = #{record.entityId,jdbcType=VARCHAR},
</if> </if>
<if test="record.path != null" > <if test="record.path != null">
PATH = #{record.path,jdbcType=VARCHAR}, PATH = #{record.path,jdbcType=VARCHAR},
</if> </if>
<if test="record.resourceType != null" > <if test="record.resourceType != null">
RESOURCE_TYPE = #{record.resourceType,jdbcType=VARCHAR}, RESOURCE_TYPE = #{record.resourceType,jdbcType=VARCHAR},
</if> </if>
<if test="record.isDefault != null" > <if test="record.isDefault != null">
IS_DEFAULT = #{record.isDefault,jdbcType=INTEGER}, IS_DEFAULT = #{record.isDefault,jdbcType=INTEGER},
</if> </if>
</set> </set>
<if test="_parameter != null" > <!-- 如果传入了查询参数,引入 UPDATE 的 WHERE 子句片段 -->
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" /> <include refid="Update_By_Example_Where_Clause" />
</if> </if>
</update> </update>

@ -1,11 +1,3 @@
/**
* Copyright (C) 2008 Happy Fish / YuQing
*
* FastDFS Java Client may be copied only under the terms of the GNU Lesser
* General Public License (LGPL).
* Please visit the FastDFS Home Page http://www.csource.org/ for more detail.
**/
package org.csource.fastdfs; package org.csource.fastdfs;
import java.net.*; import java.net.*;
@ -13,11 +5,6 @@ import java.io.*;
import java.net.*; import java.net.*;
import org.csource.common.*; import org.csource.common.*;
/**
* Global variables
* @author Happy Fish / YuQing
* @version Version 1.11
*/
public class ClientGlobal public class ClientGlobal
{ {
public static int g_connect_timeout; //millisecond public static int g_connect_timeout; //millisecond
@ -27,18 +14,14 @@ public class ClientGlobal
public static boolean g_anti_steal_token; //if anti-steal token public static boolean g_anti_steal_token; //if anti-steal token
public static String g_secret_key; //generage token secret key public static String g_secret_key; //generage token secret key
public static TrackerGroup g_tracker_group; public static TrackerGroup g_tracker_group;
public static final int DEFAULT_CONNECT_TIMEOUT = 5; //second public static final int DEFAULT_CONNECT_TIMEOUT = 5; //second
public static final int DEFAULT_NETWORK_TIMEOUT = 30; //second public static final int DEFAULT_NETWORK_TIMEOUT = 30; //second
private ClientGlobal() private ClientGlobal()
{ {
} }
/** // 初始化ClientGlobal
* load global variables
* @param conf_filename config filename
*/
public static void init(String conf_filename) throws FileNotFoundException, IOException, MyException public static void init(String conf_filename) throws FileNotFoundException, IOException, MyException
{ {
IniFileReader iniReader; IniFileReader iniReader;
@ -47,6 +30,7 @@ public class ClientGlobal
iniReader = new IniFileReader(conf_filename); iniReader = new IniFileReader(conf_filename);
// 读取连接超时时间
g_connect_timeout = iniReader.getIntValue("connect_timeout", DEFAULT_CONNECT_TIMEOUT); g_connect_timeout = iniReader.getIntValue("connect_timeout", DEFAULT_CONNECT_TIMEOUT);
if (g_connect_timeout < 0) if (g_connect_timeout < 0)
{ {
@ -54,6 +38,7 @@ public class ClientGlobal
} }
g_connect_timeout *= 1000; //millisecond g_connect_timeout *= 1000; //millisecond
// 读取网络超时时间
g_network_timeout = iniReader.getIntValue("network_timeout", DEFAULT_NETWORK_TIMEOUT); g_network_timeout = iniReader.getIntValue("network_timeout", DEFAULT_NETWORK_TIMEOUT);
if (g_network_timeout < 0) if (g_network_timeout < 0)
{ {
@ -61,18 +46,21 @@ public class ClientGlobal
} }
g_network_timeout *= 1000; //millisecond g_network_timeout *= 1000; //millisecond
// 读取字符集
g_charset = iniReader.getStrValue("charset"); g_charset = iniReader.getStrValue("charset");
if (g_charset == null || g_charset.length() == 0) if (g_charset == null || g_charset.length() == 0)
{ {
g_charset = "ISO8859-1"; g_charset = "ISO8859-1";
} }
// 读取tracker服务器地址
szTrackerServers = iniReader.getValues("tracker_server"); szTrackerServers = iniReader.getValues("tracker_server");
if (szTrackerServers == null) if (szTrackerServers == null)
{ {
throw new MyException("item \"tracker_server\" in " + conf_filename + " not found"); throw new MyException("item \"tracker_server\" in " + conf_filename + " not found");
} }
// 将tracker服务器地址转换为InetSocketAddress数组
InetSocketAddress[] tracker_servers = new InetSocketAddress[szTrackerServers.length]; InetSocketAddress[] tracker_servers = new InetSocketAddress[szTrackerServers.length];
for (int i=0; i<szTrackerServers.length; i++) for (int i=0; i<szTrackerServers.length; i++)
{ {
@ -86,20 +74,18 @@ public class ClientGlobal
} }
g_tracker_group = new TrackerGroup(tracker_servers); g_tracker_group = new TrackerGroup(tracker_servers);
// 读取tracker服务器HTTP端口
g_tracker_http_port = iniReader.getIntValue("http.tracker_http_port", 80); g_tracker_http_port = iniReader.getIntValue("http.tracker_http_port", 80);
// 读取是否启用反盗链
g_anti_steal_token = iniReader.getBoolValue("http.anti_steal_token", false); g_anti_steal_token = iniReader.getBoolValue("http.anti_steal_token", false);
if (g_anti_steal_token) if (g_anti_steal_token)
{ {
// 读取反盗链密钥
g_secret_key = iniReader.getStrValue("http.secret_key"); g_secret_key = iniReader.getStrValue("http.secret_key");
} }
} }
/** // 根据IP地址和端口获取Socket
* construct Socket object
* @param ip_addr ip address or hostname
* @param port port number
* @return connected Socket object
*/
public static Socket getSocket(String ip_addr, int port) throws IOException public static Socket getSocket(String ip_addr, int port) throws IOException
{ {
Socket sock = new Socket(); Socket sock = new Socket();
@ -107,12 +93,8 @@ public class ClientGlobal
sock.connect(new InetSocketAddress(ip_addr, port), ClientGlobal.g_connect_timeout); sock.connect(new InetSocketAddress(ip_addr, port), ClientGlobal.g_connect_timeout);
return sock; return sock;
} }
/** // 根据InetSocketAddress获取Socket
* construct Socket object
* @param addr InetSocketAddress object, including ip address and port
* @return connected Socket object
*/
public static Socket getSocket(InetSocketAddress addr) throws IOException public static Socket getSocket(InetSocketAddress addr) throws IOException
{ {
Socket sock = new Socket(); Socket sock = new Socket();
@ -121,76 +103,91 @@ public class ClientGlobal
return sock; return sock;
} }
// 获取连接超时时间
public static int getG_connect_timeout() public static int getG_connect_timeout()
{ {
return g_connect_timeout; return g_connect_timeout;
} }
// 设置连接超时时间
public static void setG_connect_timeout(int connect_timeout) public static void setG_connect_timeout(int connect_timeout)
{ {
ClientGlobal.g_connect_timeout = connect_timeout; ClientGlobal.g_connect_timeout = connect_timeout;
} }
// 获取网络超时时间
public static int getG_network_timeout() public static int getG_network_timeout()
{ {
return g_network_timeout; return g_network_timeout;
} }
// 设置网络超时时间
public static void setG_network_timeout(int network_timeout) public static void setG_network_timeout(int network_timeout)
{ {
ClientGlobal.g_network_timeout = network_timeout; ClientGlobal.g_network_timeout = network_timeout;
} }
// 获取字符集
public static String getG_charset() public static String getG_charset()
{ {
return g_charset; return g_charset;
} }
// 设置字符集
public static void setG_charset(String charset) public static void setG_charset(String charset)
{ {
ClientGlobal.g_charset = charset; ClientGlobal.g_charset = charset;
} }
// 获取tracker服务器HTTP端口
public static int getG_tracker_http_port() public static int getG_tracker_http_port()
{ {
return g_tracker_http_port; return g_tracker_http_port;
} }
// 设置tracker服务器HTTP端口
public static void setG_tracker_http_port(int tracker_http_port) public static void setG_tracker_http_port(int tracker_http_port)
{ {
ClientGlobal.g_tracker_http_port = tracker_http_port; ClientGlobal.g_tracker_http_port = tracker_http_port;
} }
// 获取是否启用反盗链
public static boolean getG_anti_steal_token() public static boolean getG_anti_steal_token()
{ {
return g_anti_steal_token; return g_anti_steal_token;
} }
// 获取是否启用反盗链
public static boolean isG_anti_steal_token() public static boolean isG_anti_steal_token()
{ {
return g_anti_steal_token; return g_anti_steal_token;
} }
// 设置是否启用反盗链
public static void setG_anti_steal_token(boolean anti_steal_token) public static void setG_anti_steal_token(boolean anti_steal_token)
{ {
ClientGlobal.g_anti_steal_token = anti_steal_token; ClientGlobal.g_anti_steal_token = anti_steal_token;
} }
// 获取反盗链密钥
public static String getG_secret_key() public static String getG_secret_key()
{ {
return g_secret_key; return g_secret_key;
} }
// 设置反盗链密钥
public static void setG_secret_key(String secret_key) public static void setG_secret_key(String secret_key)
{ {
ClientGlobal.g_secret_key = secret_key; ClientGlobal.g_secret_key = secret_key;
} }
// 获取tracker服务器组
public static TrackerGroup getG_tracker_group() public static TrackerGroup getG_tracker_group()
{ {
return g_tracker_group; return g_tracker_group;
} }
// 设置tracker服务器组
public static void setG_tracker_group(TrackerGroup tracker_group) public static void setG_tracker_group(TrackerGroup tracker_group)
{ {
ClientGlobal.g_tracker_group = tracker_group; ClientGlobal.g_tracker_group = tracker_group;

@ -4,33 +4,26 @@ import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import org.csource.fastdfs.DownloadCallback; import org.csource.fastdfs.DownloadCallback;
/**
* Download file by stream (download callback class)
* @author zhouzezhong & Happy Fish / YuQing
* @version Version 1.11
*/
public class DownloadStream implements DownloadCallback public class DownloadStream implements DownloadCallback
{ {
// 定义输出流
private OutputStream out; private OutputStream out;
// 定义当前字节
private long currentBytes = 0; private long currentBytes = 0;
// 构造函数,传入输出流
public DownloadStream(OutputStream out) public DownloadStream(OutputStream out)
{ {
super(); super();
this.out = out; this.out = out;
} }
/**
* recv file content callback function, may be called more than once when the file downloaded
* @param fileSize file size
* @param data data buff
* @param bytes data bytes
* @return 0 success, return none zero(errno) if fail
*/
public int recv(long fileSize, byte[] data, int bytes) public int recv(long fileSize, byte[] data, int bytes)
{ {
try try
{ {
// 将数据写入输出流
out.write(data, 0, bytes); out.write(data, 0, bytes);
} }
catch(IOException ex) catch(IOException ex)
@ -39,7 +32,9 @@ public class DownloadStream implements DownloadCallback
return -1; return -1;
} }
// 更新当前字节
currentBytes += bytes; currentBytes += bytes;
// 如果当前字节等于文件大小,则重置当前字节
if (this.currentBytes == fileSize) if (this.currentBytes == fileSize)
{ {
this.currentBytes = 0; this.currentBytes = 0;

@ -5,12 +5,14 @@
<title>Swagger UI</title> <title>Swagger UI</title>
<link rel="icon" type="image/png" href="images/favicon-32x32.png" sizes="32x32" /> <link rel="icon" type="image/png" href="images/favicon-32x32.png" sizes="32x32" />
<link rel="icon" type="image/png" href="images/favicon-16x16.png" sizes="16x16" /> <link rel="icon" type="image/png" href="images/favicon-16x16.png" sizes="16x16" />
<!-- 引入样式文件 -->
<link href='css/typography.css' media='screen' rel='stylesheet' type='text/css'/> <link href='css/typography.css' media='screen' rel='stylesheet' type='text/css'/>
<link href='css/reset.css' media='screen' rel='stylesheet' type='text/css'/> <link href='css/reset.css' media='screen' rel='stylesheet' type='text/css'/>
<link href='css/screen.css' media='screen' rel='stylesheet' type='text/css'/> <link href='css/screen.css' media='screen' rel='stylesheet' type='text/css'/>
<link href='css/reset.css' media='print' rel='stylesheet' type='text/css'/> <link href='css/reset.css' media='print' rel='stylesheet' type='text/css'/>
<link href='css/print.css' media='print' rel='stylesheet' type='text/css'/> <link href='css/print.css' media='print' rel='stylesheet' type='text/css'/>
<!-- 引入脚本文件 -->
<script src='lib/object-assign-pollyfill.js' type='text/javascript'></script> <script src='lib/object-assign-pollyfill.js' type='text/javascript'></script>
<script src='lib/jquery-1.8.0.min.js' type='text/javascript'></script> <script src='lib/jquery-1.8.0.min.js' type='text/javascript'></script>
<script src='lib/jquery.slideto.min.js' type='text/javascript'></script> <script src='lib/jquery.slideto.min.js' type='text/javascript'></script>
@ -33,6 +35,7 @@
<script type="text/javascript"> <script type="text/javascript">
$(function () { $(function () {
// 获取url参数
var url = window.location.search.match(/url=([^&]+)/); var url = window.location.search.match(/url=([^&]+)/);
if (url && url.length > 1) { if (url && url.length > 1) {
url = decodeURIComponent(url[1]); url = decodeURIComponent(url[1]);
@ -40,6 +43,7 @@
url = "/api-docs/"; url = "/api-docs/";
} }
// 配置highlight.js
hljs.configure({ hljs.configure({
highlightSizeThreshold: 5000 highlightSizeThreshold: 5000
}); });
@ -53,6 +57,7 @@
dom_id: "swagger-ui-container", dom_id: "swagger-ui-container",
supportedSubmitMethods: ['get', 'post', 'put', 'delete', 'patch'], supportedSubmitMethods: ['get', 'post', 'put', 'delete', 'patch'],
onComplete: function(swaggerApi, swaggerUi){ onComplete: function(swaggerApi, swaggerUi){
// 初始化OAuth
if(typeof initOAuth == "function") { if(typeof initOAuth == "function") {
initOAuth({ initOAuth({
clientId: "your-client-id", clientId: "your-client-id",
@ -64,6 +69,7 @@
}); });
} }
// 翻译
if(window.SwaggerTranslator) { if(window.SwaggerTranslator) {
window.SwaggerTranslator.translate(); window.SwaggerTranslator.translate();
} }

Loading…
Cancel
Save