Commit 8dda72ca authored by 杨阳's avatar 杨阳

发货单

新增/编辑/详情接口 更新发货单状态接口
parent 55da605c
......@@ -105,7 +105,7 @@ public class PeasantHouseholdDto extends BaseDto {
private List<String> permanentAddressText;
@ApiModelProperty(value = "区域公司id")
private String regionalCompaniesSeq;
private Long regionalCompaniesSeq;
@ApiModelProperty(value = "区域公司code")
private String regionalCompaniesCode;
......@@ -126,4 +126,7 @@ public class PeasantHouseholdDto extends BaseDto {
@ApiModelProperty(value = "是否已认证(0-未认证,1-已认证)")
private Integer isCertified;
@ApiModelProperty(value = "平台userId")
private String userId;
}
package com.yeejoin.amos.boot.module.hygf.api.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import com.yeejoin.amos.boot.module.hygf.api.entity.PeasantHousehold;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
import java.util.HashMap;
import java.util.Map;
/**
*
......@@ -22,32 +19,25 @@ import java.util.List;
@ApiModel (value="PeasantHouseholdWxDto", description="微信农户登录信息")
public class PeasantHouseholdWxDto {
@ApiModelProperty
private String userState;
@ApiModelProperty (value = "token有效期")
private Long expire;
@ApiModelProperty
private AuthInfoDto authInfo;
@ApiModelProperty (value = "token")
private String token;
@ApiModelProperty (value = "用户信息")
private AgencyUserModel userInfo;
@ApiModelProperty (value = "userId")
private String userId;
@ApiModelProperty
private String userState;
@ApiModelProperty (value = "农户信息")
private PeasantHousehold peasantHousehold;
@Data
@ApiModel (value="authInfo信息", description="authInfo信息")
public static class AuthInfoDto {
@ApiModelProperty (value = "登录token")
private String token;
@ApiModelProperty (value = "用户id")
private String personId;
@ApiModelProperty
private Map<String, Object> userInfo;
@ApiModelProperty (value = "appKey")
private String appKey;
@ApiModelProperty
private Map<String, Object> authInfo;
@ApiModelProperty (value = "product")
private String product;
}
}
......@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.yeejoin.amos.boot.module.hygf.api.entity.PreparationMoneyLog;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.yeejoin.amos.boot.biz.common.dto.BaseDto;
......@@ -122,4 +123,7 @@ public class PreparationMoneyDto extends BaseDto {
@ApiModelProperty(value = "BOM清单")
private List<DocumentBomDto> documentBoms;
@ApiModelProperty(value = "单据追踪")
private List<PreparationMoneyLogDto> preparationMoneyLogs;
}
package com.yeejoin.amos.boot.module.hygf.api.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.yeejoin.amos.boot.biz.common.dto.BaseDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 发货单
*
* @author system_generator
* @date 2023-08-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value="PreparationMoneyLogDto", description="发货单追踪记录")
@JsonIgnoreProperties(ignoreUnknown = true)
public class PreparationMoneyLogDto extends BaseDto {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "货单id")
private Long preparationMoneyId;
@ApiModelProperty(value = "货单id")
private String operationContent;
}
......@@ -144,7 +144,7 @@ public class PeasantHousehold extends BaseEntity {
* 区域公司id
* */
@TableField("regional_companies_seq")
private String regionalCompaniesSeq;
private Long regionalCompaniesSeq;
/*
* 区域公司code
* */
......@@ -175,5 +175,9 @@ public class PeasantHousehold extends BaseEntity {
* */
@TableField("is_certified")
private Integer isCertified;
/*
* 平台userId
* */
@TableField("user_id")
private String userId;
}
package com.yeejoin.amos.boot.module.hygf.api.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yeejoin.amos.boot.biz.common.dto.BaseDto;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* 发货单日志记录
*
* @author system_generator
* @date 2023-08-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors (chain = true)
@TableName (value = "hygf_preparation_money_log")
public class PreparationMoneyLog extends BaseDto {
private static final long serialVersionUID = 1L;
@TableField ("preparation_money_id")
private Long preparationMoneyId;
@TableField ("operation_content")
private String operationContent;
}
package com.yeejoin.amos.boot.module.hygf.api.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.boot.module.hygf.api.entity.PreparationMoney;
import com.yeejoin.amos.boot.module.hygf.api.entity.PreparationMoneyLog;
/**
* 发货单 Mapper 接口
*
* @author system_generator
* @date 2023-08-17
*/
public interface PreparationMoneyLogMapper extends BaseMapper<PreparationMoneyLog> {
}
package com.yeejoin.amos.boot.module.hygf.api.service;
import com.yeejoin.amos.boot.module.hygf.api.dto.PreparationMoneyDto;
/**
* 发货单接口类
*
* @author system_generator
* @date 2023-08-17
*/
public interface IPreparationMoneyLogService {
}
package com.yeejoin.amos.boot.module.hygf.biz.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.boot.biz.common.controller.BaseController;
......@@ -9,39 +8,49 @@ import com.yeejoin.amos.boot.module.hygf.api.dto.MobileLoginParamDto;
import com.yeejoin.amos.boot.module.hygf.api.dto.PeasantHouseholdDto;
import com.yeejoin.amos.boot.module.hygf.api.dto.PeasantHouseholdWxDto;
import com.yeejoin.amos.boot.module.hygf.api.dto.SurveyInformationDto;
import com.yeejoin.amos.boot.module.hygf.api.entity.PeasantHousehold;
import com.yeejoin.amos.boot.module.hygf.biz.service.impl.PeasantHouseholdServiceImpl;
import com.yeejoin.amos.boot.module.hygf.biz.service.impl.SurveyInformationServiceImpl;
import com.yeejoin.amos.component.feign.model.FeignClientResult;
import com.yeejoin.amos.feign.privilege.Privilege;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import com.yeejoin.amos.feign.privilege.model.IdPasswordAuthModel;
import com.yeejoin.amos.feign.systemctl.Systemctl;
import com.yeejoin.amos.feign.systemctl.model.RegionModel;
import com.yeejoin.amos.feign.systemctl.model.SmsRecordModel;
import com.yeejoin.precontrol.common.utils.DesUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.logging.SimpleFormatter;
/**
* 农户信息
......@@ -56,13 +65,13 @@ import java.util.List;
public class PeasantHouseholdWxController extends BaseController {
@Autowired
SurveyInformationServiceImpl surveyInformationServiceImpl;
RedisUtils redisUtil;
@Autowired
PeasantHouseholdServiceImpl peasantHouseholdServiceImpl;
SurveyInformationServiceImpl surveyInformationServiceImpl;
@Autowired
RedisUtils redisUtils;
PeasantHouseholdServiceImpl peasantHouseholdServiceImpl;
private static final String regionRedis = "app_region_redis";
......@@ -74,20 +83,39 @@ public class PeasantHouseholdWxController extends BaseController {
}*/
@TycloudOperation (ApiLevel = UserType.AGENCY, needAuth = false)
@ApiOperation("获取验证码")
@GetMapping("/getAuthCode")
public ResponseModel<Boolean> getAuthCode(@RequestParam String phoneNo) {
HashMap<String, String> sendMap = new HashMap<>();
sendMap.put("mobile", phoneNo);
sendMap.put("smsType", "MOBILE_LOGIN");
FeignClientResult<SmsRecordModel> sendVerifyCodeResult = Systemctl.smsClient.sendVerifyCode(sendMap);
if (sendVerifyCodeResult.getStatus() != 200) {
if (log.isErrorEnabled()) {
log.error("调用平台发送验证码失败:{}", sendVerifyCodeResult.getDevMessage());
}
throw new BadRequest(sendVerifyCodeResult.getMessage());
}
return ResponseHelper.buildResponse(true);
}
@TycloudOperation (ApiLevel = UserType.AGENCY, needAuth = false)
@RequestMapping (value = "/login", method = RequestMethod.POST)
@ApiOperation (httpMethod = "POST", value = "微信授权登陆", notes = "微信授权登陆")
public ResponseModel<PeasantHouseholdWxDto> wxUserLogin(@ApiParam @RequestBody MobileLoginParamDto mobileLoginParam) {
peasantHouseholdServiceImpl.setPlatFormAccess();
return ResponseHelper.buildResponse(peasantHouseholdServiceImpl.wxUserLogin(mobileLoginParam));
}
@TycloudOperation (ApiLevel = UserType.AGENCY, needAuth = false)
@RequestMapping (value = "/register", method = RequestMethod.POST)
@ApiOperation (httpMethod = "POST", value = "微信农户注册", notes = "微信农户注册")
public ResponseModel<PeasantHouseholdWxDto> wxUserRegister(@ApiParam @RequestBody MobileLoginParamDto mobileLoginParam) {
public ResponseModel<PeasantHouseholdDto> wxUserRegister(@ApiParam @RequestBody MobileLoginParamDto mobileLoginParam) {
log.info("微信农户注册, 入参 => {}", JSONObject.toJSONString(mobileLoginParam));
if (null == mobileLoginParam.getPeasantHouseholdDto()) {
throw new BadRequest("农户信息不能为空");
}
AgencyUserModel userInfo = getUserInfo();
PeasantHouseholdDto model = mobileLoginParam.getPeasantHouseholdDto();
SurveyInformationDto surveyInformationDto = new SurveyInformationDto();
surveyInformationServiceImpl.createWithModel(surveyInformationDto);
......@@ -102,11 +130,11 @@ public class PeasantHouseholdWxController extends BaseController {
area = area + re.getRegionName() + "/";
}
}
model.setProjectAddressName(area.substring(0, area.length() - 2));
model.setProjectAddressName(area.length() > 2 ? area.substring(0, area.length() - 2) : area);
if ("1".equals(model.getIsPermanent())) {
model.setPermanentAddress(model.getProjectAddress());
model.setPermanentAddressDetail(model.getProjectAddressDetail());
model.setPermanentAddressName(area.substring(0, area.length() - 2));
model.setPermanentAddressName(area.length() > 2 ? area.substring(0, area.length() - 2) : area);
} else {
// 处理常住地址
String permanent = "";
......@@ -117,7 +145,7 @@ public class PeasantHouseholdWxController extends BaseController {
permanent = permanent + re.getRegionName() + "/";
}
}
model.setPermanentAddressName(permanent.substring(0, permanent.length() - 2));
model.setPermanentAddressName(permanent.length() > 2 ? permanent.substring(0, permanent.length() - 2) : permanent);
}
}
}
......@@ -125,24 +153,20 @@ public class PeasantHouseholdWxController extends BaseController {
model.setSurveyInformationId(surveyInformationDto.getSequenceNbr());
model.setSurveyOrNot(0);
model.setReview(0);
/*model.setDeveloperCode(userInfo.getCompanys().get(0).getOrgCode());
model.setDeveloperId(userInfo.getCompanys().get(0).getSequenceNbr());
model.setDeveloperName(userInfo.getOrgNamesWithoutRole());
if (StringUtils.isEmpty(model.getDeveloper())) {
model.setDeveloper(userInfo.getRealName());
}*/
if (model.getCreationTime() == null) {
model.setCreationTime(new Date());
}
model.setPeasantHouseholdNo(peasantHouseholdServiceImpl.getPeasantHouseholdNo());
model.setIsCertified(model.getIsCertified() == null ? 0 : model.getIsCertified());// 未认证
mobileLoginParam.setPeasantHouseholdDto(model);
return ResponseHelper.buildResponse(peasantHouseholdServiceImpl.wxUserRegister(mobileLoginParam));
model.setUserId(userInfo.getUserId());// 绑定平台userId
return ResponseHelper.buildResponse(peasantHouseholdServiceImpl.createWithModel(model));
}
public JSONArray getRegionName() {
JSONArray jsonArray = new JSONArray();
if (redisUtils.hasKey(regionRedis)) {
jsonArray = JSONArray.parseArray(redisUtils.get(regionRedis).toString());
if (redisUtil.hasKey(regionRedis)) {
jsonArray = JSONArray.parseArray(redisUtil.get(regionRedis).toString());
} else {
Collection<RegionModel> regionChild = new ArrayList<>();
RegionModel regionModel1 = new RegionModel();
......@@ -165,8 +189,9 @@ public class PeasantHouseholdWxController extends BaseController {
}
}
redisUtils.set(regionRedis, jsonArray);
redisUtil.set(regionRedis, jsonArray);
}
return jsonArray;
}
}
package com.yeejoin.amos.boot.module.hygf.biz.service.impl;
import com.yeejoin.amos.boot.module.hygf.api.dto.PreparationMoneyLogDto;
import com.yeejoin.amos.boot.module.hygf.api.entity.PreparationMoneyLog;
import com.yeejoin.amos.boot.module.hygf.api.mapper.PreparationMoneyLogMapper;
import com.yeejoin.amos.boot.module.hygf.api.service.IPreparationMoneyLogService;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.rdbms.service.BaseService;
/**
* 发货单日志记录服务实现类
*
* @author system_generator
* @date 2023-08-17
*/
@Service
public class PreparationMoneyLogServiceImpl extends BaseService<PreparationMoneyLogDto, PreparationMoneyLog, PreparationMoneyLogMapper> implements IPreparationMoneyLogService {
}
\ No newline at end of file
......@@ -5,11 +5,13 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yeejoin.amos.boot.module.hygf.api.Enum.PreparationMoneyEnum;
import com.yeejoin.amos.boot.module.hygf.api.dto.PeasantHouseholdDto;
import com.yeejoin.amos.boot.module.hygf.api.dto.PreparationMoneyLogDto;
import com.yeejoin.amos.boot.module.hygf.api.dto.PreparationPageDto;
import com.yeejoin.amos.boot.module.hygf.api.entity.DocumentBom;
import com.yeejoin.amos.boot.module.hygf.api.entity.DocumentStation;
import com.yeejoin.amos.boot.module.hygf.api.entity.PeasantHousehold;
import com.yeejoin.amos.boot.module.hygf.api.entity.PreparationMoney;
import com.yeejoin.amos.boot.module.hygf.api.entity.PreparationMoneyLog;
import com.yeejoin.amos.boot.module.hygf.api.entity.UnitInfo;
import com.yeejoin.amos.boot.module.hygf.api.mapper.PreparationMoneyMapper;
import com.yeejoin.amos.boot.module.hygf.api.service.IPreparationMoneyService;
......@@ -58,6 +60,8 @@ public class PreparationMoneyServiceImpl extends BaseService<PreparationMoneyDto
private AmosRequestContext amosRequestContext;
@Autowired
private UnitInfoServiceImpl unitInfoService;
@Autowired
private PreparationMoneyLogServiceImpl preparationMoneyLogService;
/**
* 分页查询
*/
......@@ -114,14 +118,25 @@ public class PreparationMoneyServiceImpl extends BaseService<PreparationMoneyDto
.eq(DocumentStation::getPreparationMoneyId, sequenceNbr))
.stream().map(DocumentStation::getStationId).collect(Collectors.toList());
List<PeasantHousehold> peasantHouseholds = (List<PeasantHousehold>) peasantHouseholdService.listByIds(peasantHouseholdIds);
preparationMoneyDto.setPowerStations(peasantHouseholds.stream().map(o -> {
PeasantHouseholdDto dto = new PeasantHouseholdDto();
BeanUtils.copyProperties(o, dto);
return dto;
}).collect(Collectors.toList()));
preparationMoneyDto.setPowerStations(peasantHouseholds.stream().map(o -> entityToDto(o)).collect(Collectors.toList()));
// 加载单据追踪数据
List<PreparationMoneyLog> preparationMoneyLogDtos = preparationMoneyLogService.list(new LambdaQueryWrapper<PreparationMoneyLog>().eq(PreparationMoneyLog::getPreparationMoneyId, sequenceNbr));
preparationMoneyDto.setPreparationMoneyLogs(preparationMoneyLogDtos.stream().map(o -> entityToDto(o)).collect(Collectors.toList()));
return preparationMoneyDto;
}
private PeasantHouseholdDto entityToDto(PeasantHousehold o) {
PeasantHouseholdDto dto = new PeasantHouseholdDto();
BeanUtils.copyProperties(o, dto);
return dto;
}
private PreparationMoneyLogDto entityToDto(PreparationMoneyLog o) {
PreparationMoneyLogDto dto = new PreparationMoneyLogDto();
BeanUtils.copyProperties(o, dto);
return dto;
}
/**
* 保存或更新发货单
*
......@@ -180,6 +195,11 @@ public class PreparationMoneyServiceImpl extends BaseService<PreparationMoneyDto
}
documentBomService.saveOrUpdateBatch(documentBoms);
documentStationService.saveOrUpdateBatch(documentStations);
// 记录操作日志
PreparationMoneyLog preparationMoneyLog = new PreparationMoneyLog();
preparationMoneyLog.setPreparationMoneyId(entity.getSequenceNbr());
preparationMoneyLog.setOperationContent(String.format("备货单保存【备货单号:%s】", entity.getOddNumbers()));
preparationMoneyLogService.save(preparationMoneyLog);
return model;
}
......@@ -210,6 +230,8 @@ public class PreparationMoneyServiceImpl extends BaseService<PreparationMoneyDto
if (preparationMoney == null) {
throw new RuntimeException("订单不存在");
}
PreparationMoneyLog preparationMoneyLog = new PreparationMoneyLog();
preparationMoneyLog.setPreparationMoneyId(preparationMoney.getSequenceNbr());
switch (operationType) {
case "RECEIPT":
// 确认收货 -> 到货状态 -> 已到货 -> 订单状态改为 已完成
......@@ -219,10 +241,12 @@ public class PreparationMoneyServiceImpl extends BaseService<PreparationMoneyDto
preparationMoney.setReceivingStatus(PreparationMoneyEnum.RECEIVING_STATUS.已到货.getName());
preparationMoney.setDocumentState(PreparationMoneyEnum.DOCUMENT_STATE.已完成.getName());
preparationMoney.setDeliveryTime(new Date());
preparationMoneyLog.setOperationContent(String.format("备货单确认收货【备货单号:%s】", preparationMoney.getOddNumbers()));
break;
case "DELIVERY":
// 发货 -> 发货状态 -> 已发货
preparationMoney.setShipmentStatus(PreparationMoneyEnum.SHIPMENT_STATUS.已发货.getName());
preparationMoneyLog.setOperationContent(String.format("备货单发货【备货单号:%s】", preparationMoney.getOddNumbers()));
break;
case "DISCARD":
// 作废
......@@ -231,10 +255,12 @@ public class PreparationMoneyServiceImpl extends BaseService<PreparationMoneyDto
throw new RuntimeException("订单已到货, 无法作废");
}
preparationMoney.setDocumentState(PreparationMoneyEnum.DOCUMENT_STATE.作废.getName());
preparationMoneyLog.setOperationContent(String.format("备货单作废【备货单号:%s】", preparationMoney.getOddNumbers()));
break;
default:
break;
}
preparationMoneyLogService.save(preparationMoneyLog);
return preparationMoneyMapper.updateById(preparationMoney) > 0;
}
......
......@@ -126,4 +126,8 @@ hygfProgram.secret=3bfd098cfdac002126e728d2dbf83c0d
# 默认微信小程序农户经销商
farmer.orgCode=86
farmer.sequenceNbr=1620981815542046722
farmer.orgNamesWithoutRole=智信能源科技有限公司
\ No newline at end of file
farmer.orgNamesWithoutRole=
farmer.roleId=1678211468450885633
# 配置接口授权用户
platform.access.loginId=hygf_platform
platform.access.password=23F8A9AE5E9CF343B0AFD49A9C44947
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment