Browse Source

Merge remote-tracking branch 'origin/dev' into dev

# Conflicts:
#	blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/ICorpsDescClient.java
#	blade-service/blade-client/src/main/java/org/springblade/client/corps/feign/CorpsDescClient.java
lazhaoqian 3 years ago
parent
commit
eec377e961

+ 19 - 12
blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/ICorpsDescClient.java

@@ -30,17 +30,18 @@ public interface ICorpsDescClient {
 	String GET_BY_CNAME = API_PREFIX + "get_by_name";
 	String LIST_BY_NAME = API_PREFIX + "/listCorpByName";
 	String LIST_ID_BY_NAME = API_PREFIX + "/listCorpIdByName";
-	String LIST_BANK_BY_CORP_ID=API_PREFIX+"/listBankByCorpId";
-	String GET_CORPS_DESC= API_PREFIX + "/getCorpsDesc";
-	String CORPS_UPDATE= API_PREFIX + "/update";
-	String GET_COUNT= API_PREFIX + "/count";
-	String GET_FLEET_ID= API_PREFIX + "/getFleetId";
+	String LIST_BANK_BY_CORP_ID = API_PREFIX + "/listBankByCorpId";
+	String GET_CORPS_DESC = API_PREFIX + "/getCorpsDesc";
+	String CORPS_UPDATE = API_PREFIX + "/update";
+	String GET_COUNT = API_PREFIX + "/count";
+	String LIST_USERID_BY_CORP = API_PREFIX + "/getFleetId";
 	String GET_GOOD_TYPE_MESSAGE = API_PREFIX + "getGoodTypeMessage";
 
 
 
 	@PostMapping(CORPS_UPDATE)
 	R corpsUpdate(@RequestBody CorpsDesc corpsDesc);
+
 	/**
 	 * 获取CorpsDesc列表
 	 *
@@ -71,37 +72,40 @@ public interface ICorpsDescClient {
 
 	/**
 	 * 获取多选的客户信息
+	 *
 	 * @param corpIds
 	 * @return
 	 */
 	@GetMapping(GET_CORPS_MESSAGE)
-	R<List<Map<String,Object>>> getCorpsMessage(@RequestParam("corpIds") String corpIds);
+	R<List<Map<String, Object>>> getCorpsMessage(@RequestParam("corpIds") String corpIds);
+
 	/**
 	 * 根据id获取客户信息
 	 *
-	 * @param cname 客户名
+	 * @param cname    客户名
 	 * @param tenantId 租户
 	 * @return
 	 */
 	@GetMapping(GET_BY_CNAME)
-	R<CorpsDesc> getCorpByName(@RequestParam("cname") String cname,@RequestParam("tenantId") String tenantId);
+	R<CorpsDesc> getCorpByName(@RequestParam("cname") String cname, @RequestParam("tenantId") String tenantId);
 
 	@GetMapping(LIST_BY_NAME)
-	List<CorpsDesc> listCorpByName (@RequestParam("cname") String cname);
+	List<CorpsDesc> listCorpByName(@RequestParam("cname") String cname);
 
 	@GetMapping(LIST_ID_BY_NAME)
-	List<Long> listCorpIdByName (@RequestParam("cname") String cname);
+	List<Long> listCorpIdByName(@RequestParam("cname") String cname);
 
 	@GetMapping(LIST_BANK_BY_CORP_ID)
-	List<CorpsBank> listBankByCorpId (@RequestParam("corpsId") Long corpsId);
+	List<CorpsBank> listBankByCorpId(@RequestParam("corpsId") Long corpsId);
 
 	/**
 	 * 获取商品信息
+	 *
 	 * @param cname
 	 * @return
 	 */
 	@GetMapping(GET_CORPS_DESC)
-	CorpsDesc getCorpsDesc(@RequestParam("cname") String cname,@RequestParam("corpType") String corpType);
+	CorpsDesc getCorpsDesc(@RequestParam("cname") String cname, @RequestParam("corpType") String corpType);
 
 	@GetMapping(GET_COUNT)
 	int getCount();
@@ -113,4 +117,7 @@ public interface ICorpsDescClient {
 	@GetMapping(GET_GOOD_TYPE_MESSAGE)
 	List<Long> getGoodTypeMessage(@RequestParam("goodTypeId") Long goodTypeId);
 
+	@GetMapping(LIST_USERID_BY_CORP)
+	List<Long> listUserIdCorpId(@RequestParam("corpId") Long corpId);
+
 }

+ 21 - 13
blade-service-api/blade-land-api/src/main/java/org/springblade/land/entity/OrderItem.java

@@ -61,6 +61,11 @@ public class OrderItem implements Serializable {
 	@ApiModelProperty(value = "订单ID")
 	private Long orderId;
 	/**
+	 * 提单号
+	 */
+	@ApiModelProperty(value = "提单号")
+	private String billNo;
+	/**
 	 * 类型(1-委派、2-调度)
 	 */
 	@ApiModelProperty(value = "类型(1-委派、2-调度)")
@@ -164,27 +169,27 @@ public class OrderItem implements Serializable {
 	 * 应收一
 	 */
 	@ApiModelProperty(value = "应收一")
-	private String oneFeeD;
+	private BigDecimal oneFeeD;
 	/**
 	 * 应收二
 	 */
 	@ApiModelProperty(value = "应收二")
-	private String twoFeeD;
+	private BigDecimal twoFeeD;
 	/**
 	 * 应收三
 	 */
 	@ApiModelProperty(value = "应收三")
-	private String threeFeeD;
+	private BigDecimal threeFeeD;
 	/**
 	 * 应收四
 	 */
 	@ApiModelProperty(value = "应收四")
-	private String fourFeeD;
+	private BigDecimal fourFeeD;
 	/**
 	 * 应收五
 	 */
 	@ApiModelProperty(value = "应收五")
-	private String fiveFeeD;
+	private BigDecimal fiveFeeD;
 	/**
 	 * 应收费用备注
 	 */
@@ -194,27 +199,27 @@ public class OrderItem implements Serializable {
 	 * 应付一
 	 */
 	@ApiModelProperty(value = "应付一")
-	private String oneFeeC;
+	private BigDecimal oneFeeC;
 	/**
 	 * 应付二
 	 */
 	@ApiModelProperty(value = "应付二")
-	private String twoFeeC;
+	private BigDecimal twoFeeC;
 	/**
 	 * 应付三
 	 */
 	@ApiModelProperty(value = "应付三")
-	private String threeFeeC;
+	private BigDecimal threeFeeC;
 	/**
 	 * 应付四
 	 */
 	@ApiModelProperty(value = "应付四")
-	private String fourFeeC;
+	private BigDecimal fourFeeC;
 	/**
 	 * 应付五
 	 */
 	@ApiModelProperty(value = "应付五")
-	private String fiveFeeC;
+	private BigDecimal fiveFeeC;
 	/**
 	 * 应付费用备注
 	 */
@@ -337,9 +342,6 @@ public class OrderItem implements Serializable {
 	private String belongCompany;
 
 	@TableField(exist = false)
-	private String billNo;
-
-	@TableField(exist = false)
 	private String station;
 
 	@TableField(exist = false)
@@ -381,4 +383,10 @@ public class OrderItem implements Serializable {
 	@TableField(exist = false)
 	private String originalTel;
 
+	@TableField(exist = false)
+	private Long sendUserId;
+
+	@TableField(exist = false)
+	private BigDecimal profit;
+
 }

+ 2 - 0
blade-service/blade-check/src/main/java/org/springblade/check/service/impl/AuditProecessServiceImpl.java

@@ -1275,6 +1275,8 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class)
 	public void commonCheck(AuditProecess auditProecess) {
 		// 查看最新操作记录,防止重复提交
 		AuditProecess proecessTemp = baseMapper.selectById(auditProecess.getId());

+ 27 - 16
blade-service/blade-client/src/main/java/org/springblade/client/corps/feign/CorpsDescClient.java

@@ -6,8 +6,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
 import org.springblade.client.corps.assemble.mapstruct.CorpsDescMapstructMapper;
+import org.springblade.client.corps.service.ICorpsAttnService;
 import org.springblade.client.corps.service.ICorpsBankService;
 import org.springblade.client.corps.service.ICorpsDescService;
+import org.springblade.client.entity.CorpsAttn;
 import org.springblade.client.entity.CorpsBank;
 import org.springblade.client.entity.CorpsDesc;
 import org.springblade.client.feign.ICorpsDescClient;
@@ -34,12 +36,15 @@ import java.util.stream.Collectors;
 @RestController
 @AllArgsConstructor
 public class CorpsDescClient implements ICorpsDescClient {
+
 	private final ICorpsDescService service;
 
 	private final CorpsDescMapstructMapper corpsDescMapstructMapper;
 
 	private final ICorpsBankService bankService;
 
+	private final ICorpsAttnService corpsAttnService;
+
 	private final IGoodsTypeService goodsTypeService;
 
 	@Override
@@ -88,44 +93,41 @@ public class CorpsDescClient implements ICorpsDescClient {
 
 	@Override
 	public R<CorpsDesc> getCorpByName(String cname, String tenantId) {
-		return R.data(service.getCorpByName(cname,tenantId));
+		return R.data(service.getCorpByName(cname, tenantId));
 	}
 
 	@Override
 	@GetMapping(LIST_BY_NAME)
-	public List<CorpsDesc> listCorpByName(String cname)
-	{
-		LambdaQueryWrapper<CorpsDesc> corpsDescLambdaQueryWrapper=new LambdaQueryWrapper<>();
-		corpsDescLambdaQueryWrapper.eq(CorpsDesc::getIsDeleted,0);
+	public List<CorpsDesc> listCorpByName(String cname) {
+		LambdaQueryWrapper<CorpsDesc> corpsDescLambdaQueryWrapper = new LambdaQueryWrapper<>();
+		corpsDescLambdaQueryWrapper.eq(CorpsDesc::getIsDeleted, 0);
 		corpsDescLambdaQueryWrapper.eq(CorpsDesc::getTenantId, AuthUtil.getTenantId());
-		corpsDescLambdaQueryWrapper.like(CorpsDesc::getCname,cname);
+		corpsDescLambdaQueryWrapper.like(CorpsDesc::getCname, cname);
 		return service.list(corpsDescLambdaQueryWrapper);
 	}
 
 	@Override
 	@GetMapping(LIST_ID_BY_NAME)
-	public List<Long> listCorpIdByName(String cname)
-	{
-		LambdaQueryWrapper<CorpsDesc> corpsDescLambdaQueryWrapper=new LambdaQueryWrapper<>();
+	public List<Long> listCorpIdByName(String cname) {
+		LambdaQueryWrapper<CorpsDesc> corpsDescLambdaQueryWrapper = new LambdaQueryWrapper<>();
 		corpsDescLambdaQueryWrapper.select(CorpsDesc::getId);
-		corpsDescLambdaQueryWrapper.eq(CorpsDesc::getIsDeleted,0);
+		corpsDescLambdaQueryWrapper.eq(CorpsDesc::getIsDeleted, 0);
 		corpsDescLambdaQueryWrapper.eq(CorpsDesc::getTenantId, AuthUtil.getTenantId());
-		corpsDescLambdaQueryWrapper.like(CorpsDesc::getCname,cname);
+		corpsDescLambdaQueryWrapper.like(CorpsDesc::getCname, cname);
 		return service.list(corpsDescLambdaQueryWrapper).stream().map(CorpsDesc::getId).collect(Collectors.toList());
 	}
 
 	@Override
 	@GetMapping(LIST_BANK_BY_CORP_ID)
-	public List<CorpsBank> listBankByCorpId(Long corpsId)
-	{
-		LambdaQueryWrapper<CorpsBank> bankLambdaQueryWrapper=new LambdaQueryWrapper<>();
-		bankLambdaQueryWrapper.eq(CorpsBank::getPid,corpsId);
+	public List<CorpsBank> listBankByCorpId(Long corpsId) {
+		LambdaQueryWrapper<CorpsBank> bankLambdaQueryWrapper = new LambdaQueryWrapper<>();
+		bankLambdaQueryWrapper.eq(CorpsBank::getPid, corpsId);
 		return bankService.list(bankLambdaQueryWrapper);
 	}
 
 	@Override
 	@GetMapping(GET_CORPS_DESC)
-	public CorpsDesc getCorpsDesc(String cname,String corpType) {
+	public CorpsDesc getCorpsDesc(String cname, String corpType) {
 		CorpsDesc corpsDesc = new CorpsDesc();
 		corpsDesc.setCname(cname);
 		corpsDesc.setCorpType(corpType);
@@ -143,6 +145,15 @@ public class CorpsDescClient implements ICorpsDescClient {
 	}
 
 	@Override
+	public List<Long> listUserIdCorpId(Long corpId) {
+		return corpsAttnService.list(new LambdaQueryWrapper<CorpsAttn>()
+			.select(CorpsAttn::getUserId)
+			.eq(CorpsAttn::getPid, corpId)
+			.eq(CorpsAttn::getIsDeleted, 0)
+		).stream().map(CorpsAttn::getUserId).collect(Collectors.toList());
+	}
+
+	@Override
 	public List<Long> getGoodTypeMessage(Long goodTypeId) {
 		return goodsTypeService.goodTypeIdList(goodTypeId.toString());
 	}

+ 11 - 3
blade-service/blade-client/src/main/java/org/springblade/client/goods/service/impl/GoodsDescServiceImpl.java

@@ -24,6 +24,7 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.AllArgsConstructor;
+import org.springblade.client.corps.mapper.CorpsDescMapper;
 import org.springblade.client.entity.*;
 import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.client.goods.excel.GoodsExcel;
@@ -36,6 +37,7 @@ import org.springblade.core.mp.support.Condition;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -64,6 +66,7 @@ public class GoodsDescServiceImpl extends ServiceImpl<GoodsDescMapper, GoodsDesc
 	private final GoodsTypeDescMapper goodsTypeDescMapper;
 	private final GoodsFilesMapper goodsFilesMapper;
 	private final GoodsSpecificationMapper goodsSpecificationMapper;
+	private final CorpsDescMapper corpsDescMapper;
 	private final ICorpsDescClient corpsDescClient;
 
 
@@ -459,9 +462,14 @@ public class GoodsDescServiceImpl extends ServiceImpl<GoodsDescMapper, GoodsDesc
 					throw new SecurityException("请输入正确的供应商");
 				}
 				if (StringUtil.isNotBlank(e.getArtsVisionName())) {
-					R<CorpsDesc> company = corpsDescClient.getCorpByName(e.getArtsVisionName(), AuthUtil.getTenantId());
-					if (company.isSuccess() && company.getData() != null) {
-						goodsDesc.setArtsVision(String.valueOf(corpByName.getData().getId()));
+					CorpsDesc company = corpsDescMapper.selectOne(new LambdaQueryWrapper<CorpsDesc>()
+						.eq(CorpsDesc::getCname, e.getArtsVisionName())
+						.like(CorpsDesc::getCorpType, "GS")
+						.eq(CorpsDesc::getTenantId, AuthUtil.getTenantId())
+						.eq(CorpsDesc::getIsDeleted, 0)
+					);
+					if (ObjectUtil.isNotEmpty(company)) {
+						goodsDesc.setArtsVision(String.valueOf(company.getId()));
 					} else {
 						throw new SecurityException("请输入正确的所属公司");
 					}

+ 10 - 0
blade-service/blade-land/src/main/java/org/springblade/land/controller/OrderItemController.java

@@ -202,6 +202,16 @@ public class OrderItemController extends BladeController {
 	}
 
 	/**
+	 * 到厂
+	 */
+	@GetMapping("/arrival")
+	@ApiOperationSupport(order = 14)
+	@ApiOperation(value = "到厂", notes = "传入id")
+	public R arrival(Long id) {
+		return R.status(orderItemService.arrival(id));
+	}
+
+	/**
 	 * 完工
 	 */
 	@GetMapping("/finished")

+ 8 - 0
blade-service/blade-land/src/main/java/org/springblade/land/service/IOrderItemService.java

@@ -125,6 +125,14 @@ public interface IOrderItemService extends IService<OrderItem> {
 	boolean cancelAccept(Long id);
 
 	/**
+	 * 到厂
+	 *
+	 * @param id
+	 * @return
+	 */
+	boolean arrival(Long id);
+
+	/**
 	 * 完工
 	 *
 	 * @param id

+ 108 - 5
blade-service/blade-land/src/main/java/org/springblade/land/service/impl/OrderItemServiceImpl.java

@@ -27,9 +27,11 @@ import org.springblade.client.constant.LandConstant;
 import org.springblade.client.entity.CommonFile;
 import org.springblade.client.entity.CorpsDesc;
 import org.springblade.client.entity.LandDriver;
+import org.springblade.client.entity.Message;
 import org.springblade.client.feign.ICommonFileClient;
 import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.client.feign.ILandDriverClient;
+import org.springblade.client.feign.IMessageClient;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.utils.AuthUtil;
@@ -44,10 +46,12 @@ import org.springblade.land.mapper.OrderChangeMapper;
 import org.springblade.land.mapper.OrderItemMapper;
 import org.springblade.land.mapper.OrderMapper;
 import org.springblade.land.service.IOrderItemService;
+import org.springblade.land.util.MessageUtil;
 import org.springblade.land.vo.OrderItemVO;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -71,6 +75,8 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 
 	private final ICommonFileClient commonFileClient;
 
+	private final IMessageClient messageClient;
+
 	@Override
 	public IPage<OrderItemVO> selectOrderItemPage(IPage<OrderItemVO> page, OrderItemVO orderItem) {
 		return page.setRecords(baseMapper.selectOrderItemPage(page, orderItem));
@@ -79,9 +85,8 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 	@Override
 	public IPage<OrderItem> getList(OrderItem orderItem, Query query) {
 		List<Long> orderIdList = Collections.emptyList();
-		if (StringUtil.isNotBlank(orderItem.getBillNo()) || StringUtil.isNotBlank(orderItem.getGoods()) || StringUtil.isNotBlank(orderItem.getBelongCompany()) || StringUtil.isNotBlank(orderItem.getStation()) || StringUtil.isNotBlank(orderItem.getFactory())) {
+		if (StringUtil.isNotBlank(orderItem.getGoods()) || StringUtil.isNotBlank(orderItem.getBelongCompany()) || StringUtil.isNotBlank(orderItem.getStation()) || StringUtil.isNotBlank(orderItem.getFactory())) {
 			orderIdList = orderMapper.selectList(new LambdaQueryWrapper<Order>()
-				.like(StringUtil.isNotBlank(orderItem.getBillNo()), Order::getBillNo, orderItem.getBillNo())
 				.like(StringUtil.isNotBlank(orderItem.getGoods()), Order::getGoods, orderItem.getGoods())
 				.like(StringUtil.isNotBlank(orderItem.getBelongCompany()), Order::getBelongCompany, orderItem.getBelongCompany())
 				.like(StringUtil.isNotBlank(orderItem.getStation()), Order::getStation, orderItem.getStation())
@@ -106,6 +111,7 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 		}
 
 		itemQueryWrapper.in(CollectionUtil.isNotEmpty(orderIdList), OrderItem::getOrderId, orderIdList)
+			.like(StringUtil.isNotBlank(orderItem.getBillNo()), OrderItem::getBillNo, orderItem.getBillNo())
 			.like(StringUtil.isNotBlank(orderItem.getTel()), OrderItem::getTel, orderItem.getTel())
 			.like(StringUtil.isNotBlank(orderItem.getCtnNo()), OrderItem::getCtnNo, orderItem.getCtnNo())
 			.eq(ObjectUtil.isNotEmpty(orderItem.getFleetId()), OrderItem::getFleetId, orderItem.getFleetId())
@@ -121,7 +127,6 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 			Order order = orderMapper.selectById(record.getOrderId());
 			record.setOrderNo(order.getOrderNo());
 			record.setBelongCompany(order.getBelongCompany());
-			record.setBillNo(order.getBillNo());
 			record.setGoods(order.getGoods());
 			record.setStation(order.getStation());
 			record.setFactory(order.getFactory());
@@ -133,18 +138,22 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 					record.setCorpName(corp.getData().getCname());
 				}
 			}
-
 			if (ObjectUtil.isNotEmpty(record.getFleetId())) {
 				R<CorpsDesc> fleet = corpsDescClient.getCorpMessage(record.getFleetId());
 				if (fleet.isSuccess() && fleet.getData() != null) {
 					record.setFleetName(fleet.getData().getCname());
 				}
 			}
-
 			if (ObjectUtil.isNotEmpty(record.getDriverId())) {
 				LandDriver driver = landDriverClient.getDriver(record.getDriverId());
 				record.setDriverName(driver.getName());
 			}
+
+			if (orderItem.getTag() == 0) {
+				BigDecimal d = record.getLandAmountD().add(record.getOneFeeD()).add(record.getTwoFeeD()).add(record.getThreeFeeD()).add(record.getFourFeeD()).add(record.getFiveFeeD());
+				BigDecimal c = record.getLandAmountC().add(record.getOneFeeC()).add(record.getTwoFeeC()).add(record.getThreeFeeC()).add(record.getFourFeeC()).add(record.getFiveFeeC());
+				record.setProfit(d.subtract(c));
+			}
 		});
 		return pages;
 	}
@@ -190,6 +199,7 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class)
 	public OrderItem dispatch(OrderItem orderItem) {
 		OrderItem item = new OrderItem();
 		item.setId(orderItem.getId());
@@ -215,11 +225,15 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 		order.setId(data.getOrderId());
 		order.setStatus(2);
 		orderMapper.updateById(order);
+
+		sendMsgToCorp(data, "DD");
+		sendMsgToFleet(data, "DD");
 		return data;
 	}
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class)
 	public List<OrderItem> dispatchBatch(OrderItem orderItem) {
 		orderItem.getIdList().forEach(id -> {
 			OrderItem item = new OrderItem();
@@ -264,6 +278,13 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 		order.setId(orderItem.getOrderId());
 		order.setStatus(2);
 		orderMapper.updateById(order);
+
+		orderItem.getIdList().forEach(id -> {
+			OrderItem data = baseMapper.selectById(id);
+			sendMsgToCorp(data, "DD");
+			sendMsgToFleet(data, "DD");
+		});
+
 		return itemList;
 	}
 
@@ -307,6 +328,7 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class)
 	public boolean send(OrderItem orderItem) {
 		OrderItem item = new OrderItem();
 		item.setId(orderItem.getId());
@@ -322,6 +344,11 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 		baseMapper.updateById(item);
 
 		addChange(orderItem.getId(), "派车", 1);
+
+		OrderItem data = baseMapper.selectById(orderItem.getId());
+		sendMsgToCorp(data, "PC");
+		sendMsgToUser(data, "PC");
+		sendMsgToDriver(data);
 		return true;
 	}
 
@@ -346,6 +373,7 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class)
 	public boolean accept(OrderItem orderItem) {
 		OrderItem item = new OrderItem();
 		item.setId(orderItem.getId());
@@ -364,6 +392,11 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 		baseMapper.updateById(item);
 
 		addChange(orderItem.getId(), "受理", 1);
+
+		OrderItem data = baseMapper.selectById(orderItem.getId());
+		sendMsgToCorp(data, "SL");
+		sendMsgToUser(data, "SL");
+		sendMsgToFleet(data, "SL");
 		return true;
 	}
 
@@ -391,6 +424,28 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class)
+	public boolean arrival(Long id) {
+		OrderItem item = new OrderItem();
+		item.setId(id);
+		item.setStatus(5);
+		item.setRealArrivalTime(new Date());
+		item.setUpdateUser(AuthUtil.getUserId());
+		item.setUpdateTime(new Date());
+		baseMapper.updateById(item);
+
+		addChange(id, "到场", 1);
+
+		OrderItem data = baseMapper.selectById(id);
+		sendMsgToCorp(data, "DC");
+		sendMsgToUser(data, "DC");
+		sendMsgToFleet(data, "DC");
+		return true;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class)
 	public boolean finished(Long id) {
 		OrderItem item = new OrderItem();
 		item.setId(id);
@@ -401,6 +456,11 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 		baseMapper.updateById(item);
 
 		addChange(id, "完工", 1);
+
+		OrderItem data = baseMapper.selectById(id);
+		sendMsgToCorp(data, "WG");
+		sendMsgToUser(data, "WG");
+		sendMsgToFleet(data, "WG");
 		return true;
 	}
 
@@ -552,4 +612,47 @@ public class OrderItemServiceImpl extends ServiceImpl<OrderItemMapper, OrderItem
 		orderChangeMapper.insert(change);
 	}
 
+	private void sendMsgToCorp(OrderItem item, String mold) {
+		item.setSendUserId(item.getCreateUser());
+		sendMsg(MessageUtil.toCorp(item, mold));
+	}
+
+	private void sendMsgToUser(OrderItem item, String mold) {
+		Order order = orderMapper.selectById(item.getOrderId());
+		if (StringUtil.isNotBlank(order.getAdminProfiles())) {
+			List<String> idList = Arrays.asList(order.getAdminProfiles().split(","));
+			idList.forEach(id -> {
+				item.setSendUserId(Long.valueOf(id));
+				sendMsg(MessageUtil.toUser(item, mold));
+			});
+		}
+	}
+
+	private void sendMsgToFleet(OrderItem item, String mold) {
+		List<Long> fleetIdList = corpsDescClient.listUserIdCorpId(item.getFleetId());
+		if (CollectionUtil.isNotEmpty(fleetIdList)) {
+			for (Long fleetId : fleetIdList) {
+				item.setSendUserId(fleetId);
+				sendMsg(MessageUtil.toFleet(item, mold));
+			}
+		}
+	}
+
+	private void sendMsgToDriver(OrderItem item) {
+		if (ObjectUtil.isNotEmpty(item.getDriverId())) {
+			LandDriver driver = landDriverClient.getDriver(item.getDriverId());
+			if (ObjectUtil.isNotEmpty(driver) && ObjectUtil.isNotEmpty(driver.getUserId())) {
+				item.setSendUserId(driver.getUserId());
+				sendMsg(MessageUtil.toDriver(item));
+			}
+		}
+	}
+
+	private void sendMsg(Message message) {
+		R result = messageClient.save(message);
+		if (!result.isSuccess()) {
+			throw new SecurityException("发送消息失败");
+		}
+	}
+
 }

+ 23 - 10
blade-service/blade-land/src/main/java/org/springblade/land/service/impl/OrderServiceImpl.java

@@ -23,14 +23,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
 import org.springblade.client.constant.LandConstant;
-import org.springblade.client.entity.CommonFile;
-import org.springblade.client.entity.CorpsDesc;
-import org.springblade.client.entity.FeesDesc;
-import org.springblade.client.entity.LandDriver;
-import org.springblade.client.feign.ICommonFileClient;
-import org.springblade.client.feign.ICorpsDescClient;
-import org.springblade.client.feign.IFeesDescClient;
-import org.springblade.client.feign.ILandDriverClient;
+import org.springblade.client.entity.*;
+import org.springblade.client.feign.*;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.utils.AuthUtil;
@@ -39,6 +33,7 @@ import org.springblade.core.tool.utils.*;
 import org.springblade.land.entity.*;
 import org.springblade.land.mapper.*;
 import org.springblade.land.service.IOrderService;
+import org.springblade.land.util.MessageUtil;
 import org.springblade.land.vo.OrderVO;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -75,6 +70,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
 	private final ICommonFileClient commonFileClient;
 
+	private final IMessageClient messageClient;
+
 	@Override
 	public IPage<OrderVO> selectOrderPage(IPage<OrderVO> page, OrderVO order) {
 		return page.setRecords(baseMapper.selectOrderPage(page, order));
@@ -167,8 +164,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			orderIdList = orderItemMapper.selectList(new LambdaQueryWrapper<OrderItem>()
 				.select(OrderItem::getOrderId)
 				.eq(itemStatus != 999, OrderItem::getStatus, itemStatus)
-				.eq(itemStatus != 999,OrderItem::getKind, 2)
-				.eq(itemStatus == 999,OrderItem::getKind, 1)
+				.eq(itemStatus != 999, OrderItem::getKind, 2)
+				.eq(itemStatus == 999, OrderItem::getKind, 1)
 				.eq(OrderItem::getIsDeleted, 0)
 				.eq(OrderItem::getTenantId, AuthUtil.getTenantId())
 				.groupBy(OrderItem::getOrderId)
@@ -372,12 +369,14 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		order.getItemList().forEach(item -> {
 			if (ObjectUtil.isEmpty(item.getId())) {
 				item.setOrderId(orderId);
+				item.setBillNo(order.getBillNo());
 				item.setKind(1);
 				item.setTenantId(AuthUtil.getTenantId());
 				item.setCreateUser(AuthUtil.getUserId());
 				item.setCreateTime(new Date());
 				orderItemMapper.insert(item);
 			} else {
+				item.setBillNo(order.getBillNo());
 				item.setUpdateUser(AuthUtil.getUserId());
 				item.setUpdateTime(new Date());
 				orderItemMapper.updateById(item);
@@ -438,6 +437,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class)
 	public R submitOrder(Order order) {
 		List<OrderItem> orderItemList = orderItemMapper.selectList(new LambdaQueryWrapper<OrderItem>()
 			.eq(OrderItem::getOrderId, order.getId())
@@ -475,6 +475,19 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				change.setChangeTime(new Date());
 				orderChangeMapper.insert(change);
 			});
+
+			if (StringUtil.isNotBlank(order.getAdminProfiles())) {
+				List<String> idList = Arrays.asList(order.getAdminProfiles().split(","));
+				idList.forEach(id -> {
+					item.setSendUserId(Long.valueOf(id));
+					Message message = MessageUtil.toUser(item, "TJ");
+
+					R result = messageClient.save(message);
+					if (!result.isSuccess()) {
+						throw new SecurityException("发送消息失败");
+					}
+				});
+			}
 		}
 
 		Order oderTemp = new Order();

+ 109 - 0
blade-service/blade-land/src/main/java/org/springblade/land/util/MessageUtil.java

@@ -0,0 +1,109 @@
+package org.springblade.land.util;
+
+import org.springblade.client.entity.Message;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.land.entity.OrderItem;
+
+import java.util.Date;
+
+/**
+ * 消息工具类
+ *
+ * @author shz
+ */
+public class MessageUtil {
+
+	private final static String LAND_WT_URL = "/landTransportation/placeAnOrder/index";
+
+	private final static String LAND_DD_URL = "/landTransportation/dispatchingCars/index";
+
+	private final static String LAND_PC_URL = "/landTransportation/motorcadeDriver/index";
+
+	private final static String LAND_GS_URL = "/landTransportation/driver/index";
+
+	public static Message send(Long orderId, Long userId, String url, String msg) {
+		Message message = new Message();
+		message.setParameter(String.valueOf(orderId));
+		message.setUserName(AuthUtil.getUserName());
+		message.setUserId(AuthUtil.getUserId());
+		message.setToUserId(userId);
+		message.setMessageType(1);
+		message.setTenantId(AuthUtil.getTenantId());
+		message.setCreateUser(AuthUtil.getUserId());
+		message.setCreateTime(new Date());
+		message.setUrl(url);
+		message.setMessageBody(msg);
+		return message;
+	}
+
+	public static Message toCorp(OrderItem item, String mold) {
+		String msg = null;
+		if ("DD".equals(mold)) {
+			msg = "您的订单已调度,提单号:" + item.getBillNo() + ",箱型箱量:" + item.getCtnType() + "×" + item.getCtnQuantity() + "。";
+		}
+		if ("PC".equals(mold)) {
+			msg = "您的订单已派车,提单号:" + item.getBillNo() + ",箱型箱量:" + item.getCtnType() + "×" + item.getCtnQuantity() + "。";
+		}
+		if ("SL".equals(mold)) {
+			msg = "您的订单已受理,提单号:" + item.getBillNo() + ",箱型箱量:" + item.getCtnType() + "×" + item.getCtnQuantity() + "。";
+		}
+		if ("DC".equals(mold)) {
+			msg = "您的订单已到场,提单号:" + item.getBillNo() + ",箱型箱量:" + item.getCtnType() + "×" + item.getCtnQuantity() + "。";
+		}
+		if ("WG".equals(mold)) {
+			msg = "您的订单已完工,提单号:" + item.getBillNo() + ",箱型箱量:" + item.getCtnType() + "×" + item.getCtnQuantity() + "。";
+		}
+		return send(item.getOrderId(), item.getSendUserId(), LAND_WT_URL, msg);
+	}
+
+	public static Message toUser(OrderItem item, String mold) {
+		String msg = null;
+		if ("TJ".equals(mold)) {
+			msg = "您有新的订单需调度,提单号:" + item.getBillNo() + ",箱型箱量:" + item.getCtnType() + "×" + item.getCtnQuantity() + ","
+				+ "到场时间:" + item.getArrivalTime() + ",场站:" + item.getStation() + "。";
+		}
+		if ("PC".equals(mold)) {
+			msg = "已派车,提单号:" + item.getBillNo() + ",箱型箱量:" + item.getCtnType() + "×" + item.getCtnQuantity() + ","
+				+ "车队:" + item.getFleetName() + ",车号:" + item.getPlateNo() + "。";
+		}
+		if ("SL".equals(mold)) {
+			msg = "已受理,提单号:" + item.getBillNo() + ",箱型箱量:" + item.getCtnType() + "×" + item.getCtnQuantity() + ","
+				+ "车号:" + item.getPlateNo() + ",司机:" + item.getDriverName() + "。";
+		}
+		if ("DC".equals(mold)) {
+			msg = "已到场,提单号:" + item.getBillNo() + ",箱型箱量:" + item.getCtnType() + "×" + item.getCtnQuantity() + ","
+				+ "车号:" + item.getPlateNo() + ",司机:" + item.getDriverName() + ",到场时间:" + item.getRealArrivalTime() + "。";
+		}
+		if ("WG".equals(mold)) {
+			msg = "已完工,提单号:" + item.getBillNo() + ",箱型箱量:" + item.getCtnType() + "×" + item.getCtnQuantity() + "。";
+		}
+		return send(item.getOrderId(), item.getSendUserId(), LAND_DD_URL, msg);
+	}
+
+	public static Message toFleet(OrderItem item, String mold) {
+		String msg = null;
+		if ("DD".equals(mold)) {
+			msg = "您有新的订单需派车,提单号:" + item.getBillNo() + ",箱型箱量:" + item.getCtnType() + "×" + item.getCtnQuantity() + ","
+				+ "到场时间:" + item.getArrivalTime() + ",场站:" + item.getStation() + "。";
+		}
+		if ("SL".equals(mold)) {
+			msg = "已受理,提单号:" + item.getBillNo() + ",箱型箱量:" + item.getCtnType() + "×" + item.getCtnQuantity() + ","
+				+ "车号:" + item.getPlateNo() + ",司机:" + item.getDriverName() + "。";
+		}
+		if ("DC".equals(mold)) {
+			msg = "已到场,提单号:" + item.getBillNo() + ",箱型箱量:" + item.getCtnType() + "×" + item.getCtnQuantity() + ","
+				+ "车号:" + item.getPlateNo() + ",司机:" + item.getDriverName() + ",到场时间:" + item.getRealArrivalTime() + "。";
+		}
+		if ("WG".equals(mold)) {
+			msg = "已完工,提单号:" + item.getBillNo() + ",箱型箱量:" + item.getCtnType() + "×" + item.getCtnQuantity() + "。";
+		}
+		return send(item.getOrderId(), item.getSendUserId(), LAND_PC_URL, msg);
+	}
+
+	public static Message toDriver(OrderItem item) {
+		String msg = "您有新的订单需受理,提单号:" + item.getBillNo() + ",箱型箱量:" + item.getCtnType() + "×" + item.getCtnQuantity() + ","
+			+ "到场时间:" + item.getArrivalTime() + ",场站:" + item.getStation() + "。";
+		return send(item.getOrderId(), item.getSendUserId(), LAND_GS_URL, msg);
+	}
+
+}