修改客户到超市距离

dev
lisai17@sina.com 2020-08-25 23:39:09 +08:00
parent 27123ba0b6
commit d8d13563b8
14 changed files with 482 additions and 37 deletions

View File

@ -0,0 +1,14 @@
package com.cowr.model;
import com.cowr.model.base.BaseSupermarketCustomerDistance;
/**
* Generated by COWR Tue Aug 25 17:27:08 CST 2020
* TableName: supermarket_customer_distance
* Remarks: -
* PrimaryKey: supermarket_id,customer_id
*/
@SuppressWarnings("serial")
public class SupermarketCustomerDistance extends BaseSupermarketCustomerDistance<SupermarketCustomerDistance> {
public static final SupermarketCustomerDistance dao = new SupermarketCustomerDistance().dao();
}

View File

@ -25,6 +25,8 @@ public class _MappingKit {
arp.addMapping("product", "id", Product.class);
// Composite Primary Key order: supermarket_id,customer_receiver_id
arp.addMapping("supermarket_receiver_distance", "supermarket_id,customer_receiver_id", SupermarketReceiverDistance.class);
// Composite Primary Key order: supermarket_id,customer_id
arp.addMapping("supermarket_customer_distance", "supermarket_id,customer_id", SupermarketCustomerDistance.class);
arp.addMapping("transport_company", "id", TransportCompany.class);
// Composite Primary Key order: supermarket_id,sandfarm_id
arp.addMapping("supermarket_sandfarm_distance", "supermarket_id,sandfarm_id", SupermarketSandfarmDistance.class);

View File

@ -0,0 +1,90 @@
package com.cowr.model.base;
import com.cowr.common.base.BaseModel;
import com.jfinal.plugin.activerecord.IBean;
import com.alibaba.fastjson.annotation.JSONField;
/**
* Generated by COWR Tue Aug 25 17:27:08 CST 2020
* TableName: supermarket_customer_distance
* Remarks: -
* PrimaryKey: supermarket_id,customer_id
*/
@SuppressWarnings("serial")
public abstract class BaseSupermarketCustomerDistance<M extends BaseSupermarketCustomerDistance<M>> extends BaseModel<M> implements IBean {
public static final String tablename = "supermarket_customer_distance";
@JSONField(serialize=false)
public String getTablename(){
return tablename;
}
/**
* name: supermarket_id
* type: INT(10)
* isNullable: NO
* isPrimaryKey: YES
* defaultValue:
* @param supermarketId id
*/
@JSONField(name="supermarket_id")
public void setSupermarketId(Integer supermarketId) {
set("supermarket_id", supermarketId);
}
/**
* @return supermarket_id id
*/
@JSONField(name="supermarket_id")
public Integer getSupermarketId() {
return getInt("supermarket_id");
}
/**
* name: customer_id
* type: INT(10)
* isNullable: NO
* isPrimaryKey: YES
* defaultValue:
* @param customerId id
*/
@JSONField(name="customer_id")
public void setCustomerId(Integer customerId) {
set("customer_id", customerId);
}
/**
* @return customer_id id
*/
@JSONField(name="customer_id")
public Integer getCustomerId() {
return getInt("customer_id");
}
/**
* name: distance
* type: DECIMAL(12,2)
* isNullable: YES
* isPrimaryKey: NO
* defaultValue:
* @param distance
*/
@JSONField(name="distance")
public void setDistance(java.math.BigDecimal distance) {
set("distance", distance);
}
/**
* @return distance
*/
@JSONField(name="distance")
public java.math.BigDecimal getDistance() {
return get("distance");
}
}

View File

@ -42,9 +42,12 @@ public class CustomerValidator extends CrudParamValidator {
}
validateString("memo", 0, 256, "memo", "memo 长度 0~256");
validateString("receiver_name", 1, 128, "receiver_name", "receiver_name 长度 1~128");
validateString("receiver_address", 1, 256, "receiver_address", "receiver_address 长度 0~256");
validateRegex("receiver_phone", StrUtil.regphone, "receiver_phone", "receiver_phone 必须为手机号格式");
validateString("receiver_name", 0, 128, "receiver_name", "receiver_name 长度 1~128");
validateString("receiver_address", 0, 256, "receiver_address", "receiver_address 长度 0~256");
if (StrKit.notBlank(c.get("receiver_phone"))) {
validateRegex("receiver_phone", StrUtil.regphone, "receiver_phone", "receiver_phone 必须为手机号格式");
}
// 使用 model 更新时model 不能只有主键有值
// 这里用 getActionMethodName 写死,判断是 update 时,才做验证

View File

@ -0,0 +1,26 @@
package com.cowr.ssjygl.supermarket.customerdistance;
import com.cowr.common.validator.CrudParamValidator;
import com.cowr.common.view.Result;
import com.jfinal.core.Controller;
/**
* Generated by COWR Tue Aug 25 17:27:14 CST 2020
* TableName: supermarket_customer_distance
* Remarks: -
* PrimaryKey: supermarket_id,customer_id
*/
public class SupermarketCustomerDistancePKValidator extends CrudParamValidator {
@Override
protected void validate(Controller c) {
validateRequired("supermarket_id", "supermarket_id", "supermarket_id 必填");
validateInteger("supermarket_id", 1, 2147483647, "supermarket_id", "supermarket_id 范围 1~2147483647");
validateRequired("customer_id", "customer_id", "customer_id 必填");
validateInteger("customer_id", 1, 2147483647, "customer_id", "customer_id 范围 1~2147483647");
}
protected void handleError(Controller c) {
c.renderJson(Result.failed(getErrmsg()));
}
}

View File

@ -0,0 +1,104 @@
package com.cowr.ssjygl.supermarket.customerdistance;
import com.cowr.common.base.BaseService;
import com.cowr.common.view.PageParam;
import com.cowr.model.Supermarket;
import com.jfinal.kit.StrKit;
import com.jfinal.log.Log;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.Record;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
* Generated by COWR Tue Aug 25 17:27:14 CST 2020
* TableName: supermarket_customer_distance
* Remarks: -
* PrimaryKey: supermarket_id,customer_id
*/
public class SupermarketCustomerDistanceService extends BaseService {
public static final SupermarketCustomerDistanceService me = new SupermarketCustomerDistanceService();
private static Log log = Log.getLog(SupermarketCustomerDistanceService.class);
public BigDecimal getDistance(Integer supermarket_id, Integer customer_id) {
try {
BigDecimal dis = Db.queryBigDecimal("select distance from supermarket_customer_distance " +
" where supermarket_id = ? and customer_id = ?", supermarket_id, customer_id);
if (dis == null) {
return new BigDecimal(0);
}
return dis;
} catch (Exception e) {
log.error(e.getMessage(), e);
return new BigDecimal(0);
}
}
/**
*
*
* @param pp
* @param customer_id
* @return
*/
public Record findAllSupermarket(PageParam pp, Integer customer_id, String customer_name) {
List<Supermarket> cols = Supermarket.dao.find("select id, name, name2 from supermarket where del = 0");
String selectsql = "select t.*, sr.supermarket_id, sr.distance ";
String fromsql = " from customer t\n" +
" left join (\n" +
" select a.customer_id, group_concat(a.supermarket_id) supermarket_id, group_concat(a.distance) distance " +
" from supermarket_customer_distance a\n" +
" group by a.customer_id\n" +
" ) sr on sr.customer_id = t.id \n" +
" where 1=1 ";
List<Object> paraList = new ArrayList<>();
if (customer_id != null) {
fromsql += " and t.id = ? \n";
paraList.add(customer_id);
}
if (StrKit.notBlank(customer_name)) {
fromsql += " and t.name like ? \n";
paraList.add("%" + customer_name + "%");
}
String totalRowSql = "select count(*) " + fromsql;
String findSql = selectsql + fromsql;
Page<Record> page = Db.paginateByFullSql(pp.getPage(), pp.getSize(), totalRowSql, findSql, paraList.toArray());
List<Record> list = page.getList();
for (Record record : list) {
if (record.get("supermarket_id") != null) {
String supermarket_arr = record.getStr("supermarket_id");
String distance_arr = record.getStr("distance");
String[] sups = supermarket_arr.split(",");
String[] diss = distance_arr.split(",");
if (sups.length != diss.length) {
log.error("findAllSupermarket 数据错误");
continue;
}
for (int i = 0; i < sups.length; i++) {
String id = sups[i];
record.set("supermarket_id_" + id, diss[i]);
}
}
}
Record out = new Record();
out.set("cols", cols);
out.set("page", page);
return out;
}
}

View File

@ -0,0 +1,34 @@
package com.cowr.ssjygl.supermarket.customerdistance;
import com.jfinal.core.Controller;
import com.cowr.common.validator.CrudParamValidator;
import com.cowr.common.view.Result;
import com.cowr.model.SupermarketCustomerDistance;
/**
* Generated by COWR Tue Aug 25 17:27:14 CST 2020
* TableName: supermarket_customer_distance
* Remarks: -
* PrimaryKey: supermarket_id,customer_id
*/
public class SupermarketCustomerDistanceValidator extends CrudParamValidator {
@Override
protected void validate(Controller c) {
validateRequired("supermarket_id", "supermarket_id", "supermarket_id 必填");
validateInteger("supermarket_id", 1, 2147483647, "supermarket_id", "supermarket_id 范围 1~2147483647");
validateRequired("customer_id", "customer_id", "customer_id 必填");
validateInteger("customer_id", 1, 2147483647, "customer_id", "customer_id 范围 1~2147483647");
validateBigDecimal("distance", new java.math.BigDecimal(0), new java.math.BigDecimal(9.9999999999E10), "distance", "distance 范围 0~9.9999999999E10");
// 使用 model 更新时model 不能只有主键有值
// 这里用 getActionMethodName 写死,判断是 update 时,才做验证
// 如果确实是需要将主键外的字段置为 null可以在代码生成后删掉这段
if ("edit".equals(getActionMethodName())) {
validateUpdateModel(SupermarketCustomerDistance.class, "", true); // 忽略不在model中的字段
}
}
protected void handleError(Controller c) {
c.renderJson(Result.failed(getErrmsg()));
}
}

View File

@ -30,6 +30,7 @@ public class Main {
"customer",
"customer_receiver",
"supermarket_receiver_distance",
"supermarket_customer_distance",
"customer_contact",
"prepay_customer",
"prepay_detail",

View File

@ -32,6 +32,7 @@ import com.cowr.local.ssjygl.product.ProductController;
import com.cowr.local.ssjygl.purchase.PurchaseController;
import com.cowr.local.ssjygl.sandfarm.SandfarmController;
import com.cowr.local.ssjygl.supermarket.SupermarketController;
import com.cowr.local.ssjygl.supermarket.customerdistance.SupermarketCustomerDistanceController;
import com.cowr.local.ssjygl.supermarket.receiverdistance.SupermarketReceiverDistanceController;
import com.cowr.local.ssjygl.supermarket.sandfarmdistance.SupermarketSandfarmDistanceController;
import com.cowr.local.ssjygl.supermarket.stock.StockController;
@ -169,6 +170,7 @@ public class Config extends JFinalConfig {
me.add("/supermarket", SupermarketController.class);
me.add("/supermarket/ssd", SupermarketSandfarmDistanceController.class);
me.add("/supermarket/srd", SupermarketReceiverDistanceController.class);
me.add("/supermarket/scd", SupermarketCustomerDistanceController.class);
me.add("/purchase", PurchaseController.class);
me.add("/product", ProductController.class);
me.add("/stock", StockController.class);

View File

@ -0,0 +1,21 @@
package com.cowr.local.ssjygl.supermarket.customerdistance;
import com.cowr.common.view.PageParam;
import com.cowr.common.view.Result;
import com.cowr.ssjygl.supermarket.customerdistance.SupermarketCustomerDistanceService;
import com.jfinal.core.Controller;
public class SupermarketCustomerDistanceController extends Controller {
public void get(){
Integer customer_id = getInt("customer_id");
Integer supermarket_id = getInt("supermarket_id");
renderJson(Result.success(SupermarketCustomerDistanceService.me.getDistance(supermarket_id, customer_id)));
}
public void findAllSupermarket() {
PageParam pp = getBean(PageParam.class, "", true);
Integer customer_id = getInt("customer_id");
String customer_name = get("customer_name");
renderJson(Result.object(SupermarketCustomerDistanceService.me.findAllSupermarket(pp, customer_id, customer_name)));
}
}

View File

@ -1,6 +1,5 @@
package com.cowr.service.ssjygl.customer;
import com.cowr.common.base.BaseModel;
import com.cowr.common.enums.Enums;
import com.cowr.common.view.Result;
import com.cowr.model.Customer;
@ -10,6 +9,7 @@ import com.cowr.model.Sysuser;
import com.cowr.service.ssjygl.base.BaseSyncService;
import com.cowr.service.ssjygl.synctask.SyncTaskService;
import com.cowr.ssjygl.modifylog.ModifyLogService;
import com.jfinal.kit.StrKit;
import com.jfinal.log.Log;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.IAtom;
@ -43,21 +43,29 @@ public class CustomerSyncService extends BaseSyncService {
if (!ret) {
return false;
}
CustomerReceiver receiver = new CustomerReceiver();
receiver.setCustomerId(model.getId());
receiver.setName(receiver_name);
receiver.setPhone(receiver_phone);
receiver.setAddress(receiver_address);
SyncTask synctask = new SyncTask();
synctask.addSaveData(model);
synctask.addSaveData(receiver);
return receiver.save()
&& SyncTaskService.me.save(synctask)
&& ModifyLogService.me.save(model, null, Enums.DataOpType.SAVE.getId(), sysuser)
&& ModifyLogService.me.save(receiver, null, Enums.DataOpType.SAVE.getId(), sysuser);
if(StrKit.notBlank(receiver_name, receiver_phone, receiver_address)){
CustomerReceiver receiver = new CustomerReceiver();
receiver.setCustomerId(model.getId());
receiver.setName(receiver_name);
receiver.setPhone(receiver_phone);
receiver.setAddress(receiver_address);
synctask.addSaveData(receiver);
ret = receiver.save()
&& ModifyLogService.me.save(receiver, null, Enums.DataOpType.SAVE.getId(), sysuser);
if(!ret){
return false;
}
}
synctask.addSaveData(model);
return SyncTaskService.me.save(synctask)
&& ModifyLogService.me.save(model, null, Enums.DataOpType.SAVE.getId(), sysuser);
} catch (Exception e) {
log.error(e.getMessage(), e);
return false;
@ -133,32 +141,37 @@ public class CustomerSyncService extends BaseSyncService {
return false;
}
CustomerReceiver receiver = CustomerReceiver.dao.findFirst(
"select * from customer_receiver t where t.customer_id = ? limit 1", model.getId());
SyncTask synctask = new SyncTask();
synctask.addUpdateData(model);
if (receiver == null) {
receiver = new CustomerReceiver();
receiver.setCustomerId(model.getId());
receiver.setName(receiver_name);
receiver.setPhone(receiver_phone);
receiver.setAddress(receiver_address);
synctask.addSaveData(receiver);
if(StrKit.notBlank(receiver_name, receiver_phone, receiver_address)) {
CustomerReceiver receiver = CustomerReceiver.dao.findFirst(
"select * from customer_receiver t where t.customer_id = ? limit 1", model.getId());
ret = receiver.save();
} else {
receiver.setName(receiver_name);
receiver.setPhone(receiver_phone);
receiver.setAddress(receiver_address);
synctask.addUpdateData(receiver);
if (receiver == null) {
receiver = new CustomerReceiver();
receiver.setCustomerId(model.getId());
receiver.setName(receiver_name);
receiver.setPhone(receiver_phone);
receiver.setAddress(receiver_address);
synctask.addSaveData(receiver);
ret = receiver.update();
}
ret = receiver.save()
&& ModifyLogService.me.save(receiver, null, Enums.DataOpType.SAVE.getId(), sysuser);
} else {
CustomerReceiver oldreceiver = receiver.clone();
receiver.setName(receiver_name);
receiver.setPhone(receiver_phone);
receiver.setAddress(receiver_address);
synctask.addUpdateData(receiver);
if (!ret) {
return false;
ret = receiver.update()
&& ModifyLogService.me.save(receiver, oldreceiver, Enums.DataOpType.UPDATE.getId(), sysuser);
}
if (!ret) {
return false;
}
}
return SyncTaskService.me.save(new SyncTask().addUpdateData(oldobj))

View File

@ -28,6 +28,7 @@ import com.cowr.service.ssjygl.purchase.PurchaseController;
import com.cowr.service.ssjygl.sandfarm.SandfarmController;
import com.cowr.service.ssjygl.supermarket.SupermarketController;
import com.cowr.service.ssjygl.supermarket.SupermarketSyncService;
import com.cowr.service.ssjygl.supermarket.customerdistance.SupermarketCustomerDistanceController;
import com.cowr.service.ssjygl.supermarket.receiverdistance.SupermarketReceiverDistanceController;
import com.cowr.service.ssjygl.supermarket.sandfarmdistance.SupermarketSandfarmDistanceController;
import com.cowr.service.ssjygl.supermarket.stock.StockController;
@ -139,6 +140,7 @@ public class Config extends JFinalConfig {
me.add("/supermarket", SupermarketController.class);
me.add("/supermarket/ssd", SupermarketSandfarmDistanceController.class);
me.add("/supermarket/srd", SupermarketReceiverDistanceController.class);
me.add("/supermarket/scd", SupermarketCustomerDistanceController.class);
me.add("/purchase", PurchaseController.class);
me.add("/product", ProductController.class);
me.add("/stock", StockController.class);

View File

@ -0,0 +1,66 @@
package com.cowr.service.ssjygl.supermarket.customerdistance;
import com.cowr.common.base.BaseController;
import com.cowr.common.view.PageParam;
import com.cowr.common.view.Result;
import com.cowr.model.Sysuser;
import com.cowr.service.ssjygl.system.sysuser.SysuserSyncService;
import com.cowr.ssjygl.supermarket.customerdistance.SupermarketCustomerDistanceService;
import com.cowr.ssjygl.supermarket.customerdistance.SupermarketCustomerDistanceValidator;
import com.jfinal.aop.Before;
public class SupermarketCustomerDistanceController extends BaseController {
public void get(){
Integer customer_id = getInt("customer_id");
Integer supermarket_id = getInt("supermarket_id");
renderJson(Result.success(SupermarketCustomerDistanceService.me.getDistance(supermarket_id, customer_id)));
}
public void findAllSupermarket() {
PageParam pp = getBean(PageParam.class, "", true);
Integer customer_id = getInt("customer_id");
String customer_name = get("customer_name");
renderJson(Result.object(SupermarketCustomerDistanceService.me.findAllSupermarket(pp, customer_id, customer_name)));
}
/**
* supermarket_receiver_distance
*/
@Before(SupermarketCustomerDistanceValidator.class)
public void save(){
Sysuser tokenuser = SysuserSyncService.me.getSysuserByToken(get("token"));
if (tokenuser == null) {
renderJson(Result.noauth());
return;
}
int customer_id = getInt("customer_id");
int supermarket_id = getInt("supermarket_id");
double distance = getParaToDouble("distance");
renderJson(SupermarketCustomerDistanceSyncService.me.save(customer_id, supermarket_id, distance, tokenuser));
}
/**
* supermarket_receiver_distance
*/
@Before(SupermarketCustomerDistanceValidator.class)
public void edit(){
Sysuser tokenuser = SysuserSyncService.me.getSysuserByToken(get("token"));
if (tokenuser == null) {
renderJson(Result.noauth());
return;
}
int customer_id = getInt("customer_id");
int supermarket_id = getInt("supermarket_id");
double distance = getParaToDouble("distance");
renderJson(SupermarketCustomerDistanceSyncService.me.update(customer_id, supermarket_id, distance, tokenuser));
}
}

View File

@ -0,0 +1,67 @@
package com.cowr.service.ssjygl.supermarket.customerdistance;
import com.cowr.common.view.Result;
import com.cowr.model.*;
import com.cowr.service.ssjygl.base.BaseSyncService;
import com.cowr.service.ssjygl.main.SvrCacheData;
import java.math.BigDecimal;
public class SupermarketCustomerDistanceSyncService extends BaseSyncService {
public static SupermarketCustomerDistanceSyncService me = new SupermarketCustomerDistanceSyncService();
public Result save(int customer_id, int supermarket_id, double distance, Sysuser sysuser){
Supermarket supermarket = SvrCacheData.SUP_CACHE.get(supermarket_id);
if(supermarket == null){
return Result.failed("未找到对应砂站信息");
}
Customer customer = Customer.dao.findById(customer_id);
if(customer == null){
return Result.failed("未找到对应的客户信息");
}
SupermarketCustomerDistance model = new SupermarketCustomerDistance();
model.setCustomerId(customer_id);
model.setSupermarketId(supermarket_id);
model.setDistance(new BigDecimal(distance));
return super.save(model, sysuser);
}
public Result update(int customer_id, int supermarket_id, double distance, Sysuser sysuser){
Supermarket supermarket = SvrCacheData.SUP_CACHE.get(supermarket_id);
if(supermarket == null){
return Result.failed("未找到对应砂站信息");
}
Customer customer = Customer.dao.findById(customer_id);
if(customer == null){
return Result.failed("未找到对应的客户信息");
}
SupermarketCustomerDistance model = SupermarketCustomerDistance.dao.findFirst(
"select * from supermarket_customer_distance t \n" +
" where t.customer_id = ? and t.supermarket_id = ? limit 1", customer_id, supermarket_id);
if(model == null){
model = new SupermarketCustomerDistance();
model.setCustomerId(customer_id);
model.setSupermarketId(supermarket_id);
model.setDistance(new BigDecimal(distance));
return super.save(model, sysuser);
}else{
if(model.getDistance().compareTo(new BigDecimal(distance)) == 0){
return Result.success("距离没有变化,不更新");
}
model.setDistance(new BigDecimal(distance));
return super.update(model, sysuser);
}
}
}