Commit 6b6cb9ca by lijingjing

新建develop分支,开发分支;

parent d0e45b25
package com.patzn.cloud.service.lims.config;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
/**
* @author Meazty
*/
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
}
...@@ -21,6 +21,19 @@ public class ServiceProperties { ...@@ -21,6 +21,19 @@ public class ServiceProperties {
private String url; private String url;
private String apiUrl;
private String erpUrl;
private String erpToken;
private String wmsUrl;
private String foodUrl;
private String staticUrl;
private String provinceItemUrl;
public String getSoffice() { public String getSoffice() {
return soffice; return soffice;
...@@ -37,4 +50,64 @@ public class ServiceProperties { ...@@ -37,4 +50,64 @@ public class ServiceProperties {
public void setUrl(String url) { public void setUrl(String url) {
this.url = url; this.url = url;
} }
public String getApiUrl() {
return apiUrl;
}
public void setApiUrl(String apiUrl) {
this.apiUrl = apiUrl;
}
public String getErpUrl() {
return erpUrl;
}
public void setErpUrl(String erpUrl) {
this.erpUrl = erpUrl;
}
public String getErpToken() {
return erpToken;
}
public void setErpToken(String erpToken) {
this.erpToken = erpToken;
}
public String getWmsUrl() {
return wmsUrl;
}
public void setWmsUrl(String wmsUrl) {
this.wmsUrl = wmsUrl;
}
public String getFoodUrl() {
return foodUrl;
}
public void setFoodUrl(String foodUrl) {
this.foodUrl = foodUrl;
}
public String getStaticUrl() {
return staticUrl;
}
public void setStaticUrl(String staticUrl) {
this.staticUrl = staticUrl;
}
public String getProvinceItemUrl() {
return provinceItemUrl;
}
public void setProvinceItemUrl(String provinceItemUrl) {
this.provinceItemUrl = provinceItemUrl;
}
public String buildWmsUrl(String method) {
return this.wmsUrl + method;
}
} }
package com.patzn.cloud.service.lims.hmhj.common;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Objects;
/**
* @author Meazty
*/
@Component
public class RestTemplateUtils {
private static RestTemplate restTemplate;
public RestTemplateUtils(RestTemplate restTemplate) {
RestTemplateUtils.restTemplate = restTemplate;
}
public static String sendSimple(String url) {
return sendSimple(url, null, HttpMethod.GET, new HttpHeaders());
}
public static String sendSimple(String url, Map<String, ?> urlParam) {
return sendSimple(url, urlParam, HttpMethod.GET);
}
public static String sendSimple(String url, Map<String, ?> urlParam, HttpHeaders headers) {
return sendSimple(url, urlParam, HttpMethod.GET, headers);
}
public static String sendSimple(String url, Map<String, ?> urlParam, HttpMethod method) {
return sendSimple(url, urlParam, method, new HttpHeaders());
}
/**
* 发送简单请求,不含body
*
* @param url url
* @param urlParam 用?和&拼接在url后面的参数
* @param method 请求方式
* @param headers 请求头
* @return body
*/
public static String sendSimple(String url, Map<String, ?> urlParam, HttpMethod method, HttpHeaders headers) {
if (urlParam == null) {
urlParam = new HashMap<>(0);
}
// url参数拼接
url = handleUrlParam(url, urlParam);
HttpEntity<MultiValueMap<String, ?>> requestEntity = new HttpEntity<>(null, headers);
return restTemplate.exchange(url, method, requestEntity, String.class, urlParam).getBody();
}
public static String sendForm(String url, Map<String, ?> body) {
return sendForm(url, null, body, HttpMethod.POST, new HttpHeaders());
}
public static String sendForm(String url, Map<String, ?> urlParam, Map<String, ?> body) {
return sendForm(url, urlParam, body, HttpMethod.POST, new HttpHeaders());
}
public static String sendForm(String url, Map<String, ?> urlParam, Map<String, ?> body, HttpMethod method) {
return sendForm(url, urlParam, body, method, new HttpHeaders());
}
public static String sendForm(String url, Map<String, ?> urlParam, Map<String, ?> body,
HttpMethod method, HttpHeaders headers) {
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
return send(url, urlParam, body, method, headers);
}
public static String sendJson(String url, Map<String, ?> body) {
return sendJson(url, null, body, HttpMethod.POST, new HttpHeaders());
}
public static String sendJson(String url, Map<String, ?> urlParam, Map<String, ?> body) {
return sendJson(url, urlParam, body, HttpMethod.POST, new HttpHeaders());
}
public static String sendJson(String url, Map<String, ?> urlParam, Map<String, ?> body, HttpMethod method) {
return sendJson(url, urlParam, body, method, new HttpHeaders());
}
public static String sendJson(String url, Map<String, ?> urlParam, Map<String, ?> body,
HttpMethod method, HttpHeaders headers) {
headers.setContentType(MediaType.APPLICATION_JSON);
return send(url, urlParam, body, method, headers);
}
/**
* 复杂请求发送
*
* @param url url
* @param urlParam 用?和&拼接在url后面的参数
* @param body 请求体
* @param method 请求方式
* @param headers 请求头
* @return body
*/
public static String send(String url, Map<String, ?> urlParam, Map<String, ?> body, HttpMethod method,
HttpHeaders headers) {
if (urlParam == null) {
urlParam = new HashMap<>(0);
}
// url参数拼接
url = handleUrlParam(url, urlParam);
HttpEntity<Map<String, ?>> requestEntity = null;
if (Objects.equals(headers.getContentType(), MediaType.APPLICATION_JSON)) {
requestEntity = new HttpEntity<>(body, headers);
}
if (Objects.equals(headers.getContentType(), MediaType.APPLICATION_FORM_URLENCODED)) {
// body参数处理
MultiValueMap<String, Object> param = new LinkedMultiValueMap<>();
Iterator<? extends Map.Entry<String, ?>> iterator = body.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, ?> next = iterator.next();
param.add(next.getKey(), next.getValue());
}
requestEntity = new HttpEntity<>(param, headers);
}
return restTemplate.exchange(url, method, requestEntity, String.class, urlParam).getBody();
}
/**
* url参数拼接
*
* @param url
* @param urlParam
* @return
*/
private static String handleUrlParam(String url, Map<String, ?> urlParam) {
if (urlParam == null || urlParam.isEmpty()) {
return url;
}
Iterator<? extends Map.Entry<String, ?>> iterator = urlParam.entrySet().iterator();
StringBuilder urlBuilder = new StringBuilder(url);
urlBuilder.append("?");
while (iterator.hasNext()) {
Map.Entry<String, ?> entry = iterator.next();
urlBuilder.append(entry.getKey()).append("={").append(entry.getKey()).append("}").append("&");
}
urlBuilder.deleteCharAt(urlBuilder.length() - 1);
return urlBuilder.toString();
}
}
package com.patzn.cloud.service.lims.hmhj.common;
import com.fasterxml.jackson.core.type.TypeReference;
import com.patzn.cloud.commons.toolkit.JacksonUtils;
import com.patzn.cloud.service.hmhj.model.WmsRespResult;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Map;
/**
* @author Meazty
*/
public class WmsRequest {
private static final Logger logger = LoggerFactory.getLogger(WmsRequest.class);
public static <T> T sendJson(String url, Map<String, ?> params, TypeReference<WmsRespResult<T>> typeReference) {
try {
String resultStr = RestTemplateUtils.sendJson(url, params);
if (StringUtils.isBlank(resultStr)) {
logger.error("✦✦✦✦ WmsRequest ✦✦✦✦ sendJson ✦✦✦✈ WMS响应结果为空!");
return null;
}
WmsRespResult<T> result = JacksonUtils.readValue(resultStr, typeReference);
if (!WmsRespResult.isSuccess(result)) {
logger.error("✦✦✦✦ WmsRequest ✦✦✦✦ sendJson ✦✦✦✈ 请求WMS接口失败:{}", JacksonUtils.toJSONString(result));
return null;
}
T data = result.getData();
logger.info("✦✦✦✦ WmsRequest ✦✦✦✦ sendJson ✦✦✦✈ [url, params]: {}", JacksonUtils.toJSONString(data.toString()));
return data;
} catch (Exception e) {
logger.error("✦✦✦✦ WmsRequest ✦✦✦✦ sendJson ✦✦✦✈ 请求WMS接口异常:", e);
}
return null;
}
public static WmsRespResult sendJson(String url, Map<String, ?> params) {
try {
String resultStr = RestTemplateUtils.sendJson(url, params);
if (StringUtils.isBlank(resultStr)) {
logger.error("✦✦✦✦ WmsRequest ✦✦✦✦ sendJson ✦✦✦✈ WMS响应结果为空!");
return null;
}
WmsRespResult result = JacksonUtils.readValue(resultStr, new TypeReference<WmsRespResult>() {
});
if (!WmsRespResult.isSuccess(result)) {
logger.error("✦✦✦✦ WmsRequest ✦✦✦✦ sendJson ✦✦✦✈ 请求WMS接口失败:{}", JacksonUtils.toJSONString(result));
return null;
}
return result;
} catch (Exception e) {
logger.error("✦✦✦✦ WmsRequest ✦✦✦✦ sendJson ✦✦✦✈ 请求WMS接口异常:", e);
}
return null;
}
}
...@@ -12,18 +12,12 @@ public class HttpConst { ...@@ -12,18 +12,12 @@ public class HttpConst {
public static final String CONTENT_TYPE = "application/json"; public static final String CONTENT_TYPE = "application/json";
/** /**
* 本地:"http://api.dev.patzn.com:7000/hmhj/v1/entrust_sample_item/send_data"; * 委托编码同步接口
* 正式:"http://192.168.0.22/api/LimsData/SaveData";
* 测试:"http://192.168.0.19:5050/api/LimsData/SaveData";
*/ */
public static final String WMS_SYNC_WTBH = "/SyncWTbh";
public static final String PROD_URL = "http://192.168.0.22/api/LimsData/SaveData"; public static final String WMS_SYNC_STOCK = "/SyncStock";
public static final String TEST_URL = "http://192.168.0.19:5050/api/LimsData/SaveData";
public static final String HOME_URL = "http://api.dev.patzn.com:7000/hmhj/v1/entrust_sample_item/send_data";
public static final String WMS_SYNC_STOCK_SITUATION = "/SyncStockSituation";
/**
* GmHu6SqGdmmtY6Aup5kp1jlWenQz+vzQ6TBN6x/3dOwfNULkTNLx2/QA9Vhq1F7LEEXP6UKzFCxt99srTFd59DjGOgmrDnvVOYBgtSYbSTD2JNeRRD8AKe/v3TW9rWFtOMfGHtTkh6AxbovaSXa99tI5HUInT2wi2xwkdo9DKOQ=
*/
public static final String ERP_TOKEN = "HbMhpXBu5y7kdg26WpdEVZcx9FFqBCawe1NYr4eb3LsiYu6EOAFyh9QuE/mEtQBwzi9kZHEhMUieOp54C2CQ0UG92O0nLWSO4+V2BtWS4YeuRttZAQc3Av1NxairBQeK5eOxG+4Wn2vn/Rs+mBrCZNco39ad85hHtUwqGhjE4+k=";
} }
...@@ -5,30 +5,31 @@ import com.baomidou.kisso.annotation.Login; ...@@ -5,30 +5,31 @@ import com.baomidou.kisso.annotation.Login;
import com.patzn.cloud.commons.api.RestResult; import com.patzn.cloud.commons.api.RestResult;
import com.patzn.cloud.commons.controller.ServiceController; import com.patzn.cloud.commons.controller.ServiceController;
import com.patzn.cloud.commons.toolkit.DateUtils; import com.patzn.cloud.commons.toolkit.DateUtils;
import com.patzn.cloud.service.hmhj.dto.LedgerQueryDTO; import com.patzn.cloud.service.hmhj.dto.*;
import com.patzn.cloud.service.hmhj.dto.QueryDTO;
import com.patzn.cloud.service.hmhj.dto.RangeStatsQueryDTO;
import com.patzn.cloud.service.hmhj.dto.StatsQueryDTO;
import com.patzn.cloud.service.hmhj.entity.CenterCost; import com.patzn.cloud.service.hmhj.entity.CenterCost;
import com.patzn.cloud.service.hmhj.entity.Statistics; import com.patzn.cloud.service.hmhj.entity.Statistics;
import com.patzn.cloud.service.hmhj.vo.WmsInventory;
import com.patzn.cloud.service.lims.hmhj.service.IStatisticsService; import com.patzn.cloud.service.lims.hmhj.service.IStatisticsService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
/**
* @author Meazty
*/
@Api(tags = "统计控制器") @Api(tags = "统计控制器")
@RestController @RestController
@RequestMapping("/v1/stats") @RequestMapping("/v1/stats")
public class StatisticsController extends ServiceController { public class StatisticsController extends ServiceController {
@Autowired @Resource
private IStatisticsService statsService; private IStatisticsService statsService;
@ApiOperation("化验委托量统计") @ApiOperation("化验委托量统计")
...@@ -299,4 +300,11 @@ public class StatisticsController extends ServiceController { ...@@ -299,4 +300,11 @@ public class StatisticsController extends ServiceController {
public RestResult<CenterCost> getCenterCostData(StatsQueryDTO queryDTO) { public RestResult<CenterCost> getCenterCostData(StatsQueryDTO queryDTO) {
return success(statsService.getCenterCost(queryDTO)); return success(statsService.getCenterCost(queryDTO));
} }
@ApiOperation("获取WMS库存和出入库总数总价情况")
@Login(action = Action.Skip)
@PostMapping("/inventory")
public RestResult<List<WmsInventory>> getInventory(WmsInventoryDTO queryDTO) {
return success(statsService.getInventoryList(queryDTO));
}
} }
package com.patzn.cloud.service.lims.hmhj.controller;
import com.baomidou.mybatisplus.plugins.Page;
import com.patzn.cloud.commons.api.RestConstants;
import com.patzn.cloud.commons.api.RestResult;
import com.patzn.cloud.commons.controller.ServiceController;
import com.patzn.cloud.service.hmhj.dto.WmsStockDTO;
import com.patzn.cloud.service.hmhj.entity.WmsStock;
import com.patzn.cloud.service.lims.hmhj.service.IWmsStockService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* WMS库存 前端控制器
*
* @author meazty
* @since 2023-04-11
*/
@Api(tags = "WMS库存")
@RestController
@RequestMapping("/v1/stock")
public class WmsStockController extends ServiceController {
@Autowired
private IWmsStockService wmsStockService;
@ApiOperation("分页列表")
@ApiImplicitParams({
@ApiImplicitParam(name = RestConstants.PAGE_PAGE, value = "请求数据的页码", required = true, paramType = "query", dataTypeClass = Integer.class),
@ApiImplicitParam(name = RestConstants.PAGE_ROWS, value = "每页条数", required = true, paramType = "query", dataTypeClass = Integer.class),
})
@PostMapping("/page")
public RestResult<Page<WmsStock>> getPage(WmsStockDTO wmsStock) {
return success(wmsStockService.page(getPage(), wmsStock));
}
@ApiOperation("查询 id 信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "主键", required = true, paramType = "path", dataTypeClass = Long.class),
})
@GetMapping("/{id}")
public RestResult<WmsStock> get(@PathVariable("id") Long id) {
return success(wmsStockService.getById(id));
}
@ApiOperation("根据 id 修改信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "主键", required = true, paramType = "path", dataTypeClass = Long.class),
})
@PutMapping("/{id}")
public RestResult<Boolean> edit(@PathVariable("id") Long id, WmsStock wmsStock) {
wmsStock.setId(id);
return success(wmsStockService.updateById(wmsStock));
}
@ApiOperation("添加")
@PostMapping("/")
public RestResult<Boolean> add(WmsStock wmsStock) {
return success(wmsStockService.save(wmsStock));
}
@ApiOperation("根据 ids 删除")
@ApiImplicitParams({
@ApiImplicitParam(name = "ids", value = "主键列表", required = true, paramType = "query", allowMultiple = true, dataTypeClass = Long.class),
})
@DeleteMapping("/")
public RestResult<Boolean> delete(@RequestParam("ids") List<Long> ids) {
return success(wmsStockService.removeByIds(ids));
}
}
package com.patzn.cloud.service.lims.hmhj.controller;
import com.baomidou.kisso.annotation.Action;
import com.baomidou.kisso.annotation.Login;
import com.baomidou.mybatisplus.plugins.Page;
import com.patzn.cloud.commons.api.RestConstants;
import com.patzn.cloud.commons.api.RestResult;
import com.patzn.cloud.commons.controller.ServiceController;
import com.patzn.cloud.service.hmhj.dto.WmsStockDeliveryDTO;
import com.patzn.cloud.service.hmhj.entity.WmsStockDelivery;
import com.patzn.cloud.service.hmhj.vo.WmsStockDeliveryData;
import com.patzn.cloud.service.lims.hmhj.service.IWmsStockDeliveryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
* WMS出入库 前端控制器
*
* @author meazty
* @since 2023-04-11
*/
@Api(tags = "WMS出入库")
@RestController
@RequestMapping("/v1/stock_delivery")
public class WmsStockDeliveryController extends ServiceController {
@Resource
private IWmsStockDeliveryService wmsStockDeliveryService;
@ApiOperation("分页列表")
@ApiImplicitParams({
@ApiImplicitParam(name = RestConstants.PAGE_PAGE, value = "请求数据的页码", required = true, paramType = "query", dataTypeClass = Integer.class),
@ApiImplicitParam(name = RestConstants.PAGE_ROWS, value = "每页条数", required = true, paramType = "query", dataTypeClass = Integer.class),
})
@PostMapping("/page")
public RestResult<Page<WmsStockDelivery>> getPage(WmsStockDeliveryDTO wmsStockDelivery) {
return success(wmsStockDeliveryService.page(getPage(), wmsStockDelivery));
}
@ApiOperation("查询 id 信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "主键", required = true, paramType = "path", dataTypeClass = Long.class),
})
@GetMapping("/{id}")
public RestResult<WmsStockDelivery> get(@PathVariable("id") Long id) {
return success(wmsStockDeliveryService.getById(id));
}
@ApiOperation("根据 id 修改信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "主键", required = true, paramType = "path", dataTypeClass = Long.class),
})
@PutMapping("/{id}")
public RestResult<Boolean> edit(@PathVariable("id") Long id, WmsStockDelivery wmsStockDelivery) {
wmsStockDelivery.setId(id);
return success(wmsStockDeliveryService.updateById(wmsStockDelivery));
}
@ApiOperation("添加")
@PostMapping("/")
public RestResult<Boolean> add(WmsStockDelivery wmsStockDelivery) {
return success(wmsStockDeliveryService.save(wmsStockDelivery));
}
@ApiOperation("根据 ids 删除")
@ApiImplicitParams({
@ApiImplicitParam(name = "ids", value = "主键列表", required = true, paramType = "query", allowMultiple = true, dataTypeClass = Long.class),
})
@DeleteMapping("/")
public RestResult<Boolean> delete(@RequestParam("ids") List<Long> ids) {
return success(wmsStockDeliveryService.removeByIds(ids));
}
@ApiOperation("同步WMS出入库信息")
@Login(action = Action.Skip)
@PostMapping("/sync_stock_delivery")
public RestResult<Boolean> syncStockDelivery(@RequestBody WmsStockDeliveryData data) {
return success(wmsStockDeliveryService.syncStockDelivery(data));
}
}
package com.patzn.cloud.service.lims.hmhj.mapper;
import com.patzn.cloud.commons.mapper.BatchMapper;
import com.patzn.cloud.service.hmhj.entity.WmsStockDelivery;
/**
* <p>
* WMS出入库 Mapper 接口
* </p>
*
* @author meazty
* @since 2023-04-11
*/
public interface WmsStockDeliveryMapper extends BatchMapper<WmsStockDelivery> {
}
package com.patzn.cloud.service.lims.hmhj.mapper;
import com.patzn.cloud.service.hmhj.entity.WmsStock;
import com.patzn.cloud.commons.mapper.BatchMapper;
/**
* <p>
* WMS库存 Mapper 接口
* </p>
*
* @author meazty
* @since 2023-04-11
*/
public interface WmsStockMapper extends BatchMapper<WmsStock> {
}
...@@ -149,4 +149,6 @@ public interface IEntrustSampleService extends IBaseService<EntrustSample> { ...@@ -149,4 +149,6 @@ public interface IEntrustSampleService extends IBaseService<EntrustSample> {
Long getEntrustIdBySampleCode(String sampleCode); Long getEntrustIdBySampleCode(String sampleCode);
List<Long> getEntrustIdsBySampleCodes(List<String> sampleCodes); List<Long> getEntrustIdsBySampleCodes(List<String> sampleCodes);
void postWmsEntrustData(List<Entrust> entrustList);
} }
package com.patzn.cloud.service.lims.hmhj.service; package com.patzn.cloud.service.lims.hmhj.service;
import com.patzn.cloud.commons.service.IBaseService; import com.patzn.cloud.commons.service.IBaseService;
import com.patzn.cloud.service.hmhj.dto.LedgerQueryDTO; import com.patzn.cloud.service.hmhj.dto.*;
import com.patzn.cloud.service.hmhj.dto.QueryDTO;
import com.patzn.cloud.service.hmhj.dto.RangeStatsQueryDTO;
import com.patzn.cloud.service.hmhj.dto.StatsQueryDTO;
import com.patzn.cloud.service.hmhj.entity.CenterCost; import com.patzn.cloud.service.hmhj.entity.CenterCost;
import com.patzn.cloud.service.hmhj.entity.Statistics; import com.patzn.cloud.service.hmhj.entity.Statistics;
import com.patzn.cloud.service.hmhj.vo.WmsInventory;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -92,4 +90,6 @@ public interface IStatisticsService extends IBaseService<Statistics> { ...@@ -92,4 +90,6 @@ public interface IStatisticsService extends IBaseService<Statistics> {
Map<String, Object> getCnasCompletionQuantity(QueryDTO queryDTO); Map<String, Object> getCnasCompletionQuantity(QueryDTO queryDTO);
CenterCost getCenterCost(StatsQueryDTO queryDTO); CenterCost getCenterCost(StatsQueryDTO queryDTO);
List<WmsInventory> getInventoryList(WmsInventoryDTO queryDTO);
} }
...@@ -17,4 +17,6 @@ public interface IUserInspectionCodeService extends IBaseService<UserInspectionC ...@@ -17,4 +17,6 @@ public interface IUserInspectionCodeService extends IBaseService<UserInspectionC
Page<UserInspectionCode> page(Page<UserInspectionCode> page, UserInspectionCode sysUserInspectionCode); Page<UserInspectionCode> page(Page<UserInspectionCode> page, UserInspectionCode sysUserInspectionCode);
boolean removeByIds(List<Long> ids); boolean removeByIds(List<Long> ids);
UserInspectionCode getOne(UserInspectionCode inspectionCode);
} }
package com.patzn.cloud.service.lims.hmhj.service;
import com.baomidou.mybatisplus.plugins.Page;
import com.patzn.cloud.commons.service.IBaseService;
import com.patzn.cloud.service.hmhj.dto.WmsStockDeliveryDTO;
import com.patzn.cloud.service.hmhj.entity.WmsStockDelivery;
import com.patzn.cloud.service.hmhj.vo.WmsStockDeliveryData;
import java.util.List;
/**
* WMS出入库 服务类
*
* @author meazty
* @since 2023 -04-11
*/
public interface IWmsStockDeliveryService extends IBaseService<WmsStockDelivery> {
/**
* Page page.
*
* @param page the page
* @param wmsStockDelivery the wms stock delivery
* @return the page
*/
Page<WmsStockDelivery> page(Page<WmsStockDelivery> page, WmsStockDeliveryDTO wmsStockDelivery);
/**
* Remove by ids boolean.
*
* @param ids the ids
* @return the boolean
*/
boolean removeByIds(List<Long> ids);
/**
* Sync stock delivery boolean.
*
* @param data the data
* @return the boolean
*/
boolean syncStockDelivery(WmsStockDeliveryData data);
}
package com.patzn.cloud.service.lims.hmhj.service;
import com.baomidou.mybatisplus.plugins.Page;
import com.patzn.cloud.commons.service.IBaseService;
import com.patzn.cloud.service.hmhj.dto.WmsStockDTO;
import com.patzn.cloud.service.hmhj.entity.WmsStock;
import java.util.List;
/**
* WMS库存 服务类
*
* @author meazty
* @since 2023 -04-11
*/
public interface IWmsStockService extends IBaseService<WmsStock> {
/**
* Page page.
*
* @param page the page
* @param wmsStock the wms stock
* @return the page
*/
Page<WmsStock> page(Page<WmsStock> page, WmsStockDTO wmsStock);
void syncWmsStockData();
/**
* Remove by ids boolean.
*
* @param ids the ids
* @return the boolean
*/
boolean removeByIds(List<Long> ids);
}
...@@ -20,7 +20,7 @@ import com.patzn.cloud.commons.toolkit.*; ...@@ -20,7 +20,7 @@ import com.patzn.cloud.commons.toolkit.*;
import com.patzn.cloud.oss.starter.OssClient; import com.patzn.cloud.oss.starter.OssClient;
import com.patzn.cloud.oss.starter.OssFileResult; import com.patzn.cloud.oss.starter.OssFileResult;
import com.patzn.cloud.service.BaseEntity; import com.patzn.cloud.service.BaseEntity;
import com.patzn.cloud.service.hmhj.bean.KV; import com.patzn.cloud.service.hmhj.model.KV;
import com.patzn.cloud.service.hmhj.dto.QueryDTO; import com.patzn.cloud.service.hmhj.dto.QueryDTO;
import com.patzn.cloud.service.hmhj.dto.SampleItemDTO; import com.patzn.cloud.service.hmhj.dto.SampleItemDTO;
import com.patzn.cloud.service.hmhj.entity.*; import com.patzn.cloud.service.hmhj.entity.*;
......
...@@ -25,6 +25,7 @@ import java.util.ArrayList; ...@@ -25,6 +25,7 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.concurrent.Executor;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -53,6 +54,9 @@ public class EntrustSamplePrepareServiceImpl extends BaseServiceImpl<EntrustSamp ...@@ -53,6 +54,9 @@ public class EntrustSamplePrepareServiceImpl extends BaseServiceImpl<EntrustSamp
@Autowired @Autowired
private IEntrustRecordService entrustRecordService; private IEntrustRecordService entrustRecordService;
@Autowired
private Executor executor1;
@Override @Override
public Page<EntrustSamplePrepare> page(Page<EntrustSamplePrepare> page, EntrustSamplePrepare entrustSamplePrepare) { public Page<EntrustSamplePrepare> page(Page<EntrustSamplePrepare> page, EntrustSamplePrepare entrustSamplePrepare) {
...@@ -374,6 +378,10 @@ public class EntrustSamplePrepareServiceImpl extends BaseServiceImpl<EntrustSamp ...@@ -374,6 +378,10 @@ public class EntrustSamplePrepareServiceImpl extends BaseServiceImpl<EntrustSamp
entrustRecordService.record(new Long[]{entrust.getId()}, "样品接收", "任务分配", 0, account, "提交至任务分配"); entrustRecordService.record(new Long[]{entrust.getId()}, "样品接收", "任务分配", 0, account, "提交至任务分配");
} }
} }
// 异步推送WMS数据任务
executor1.execute(() -> {
entrustSampleService.postWmsEntrustData(entrustList);
});
return true; return true;
} }
......
...@@ -21,10 +21,14 @@ import com.patzn.cloud.oss.starter.OssClient; ...@@ -21,10 +21,14 @@ import com.patzn.cloud.oss.starter.OssClient;
import com.patzn.cloud.service.hmhj.dto.*; import com.patzn.cloud.service.hmhj.dto.*;
import com.patzn.cloud.service.hmhj.entity.*; import com.patzn.cloud.service.hmhj.entity.*;
import com.patzn.cloud.service.hmhj.enums.*; import com.patzn.cloud.service.hmhj.enums.*;
import com.patzn.cloud.service.hmhj.model.WmsRespResult;
import com.patzn.cloud.service.hmhj.vo.*; import com.patzn.cloud.service.hmhj.vo.*;
import com.patzn.cloud.service.lims.common.BeanUtils; import com.patzn.cloud.service.lims.common.BeanUtils;
import com.patzn.cloud.service.lims.common.StringHandleUtils; import com.patzn.cloud.service.lims.common.StringHandleUtils;
import com.patzn.cloud.service.lims.config.ServiceProperties;
import com.patzn.cloud.service.lims.hmhj.common.HSSFWorkbookUtil; import com.patzn.cloud.service.lims.hmhj.common.HSSFWorkbookUtil;
import com.patzn.cloud.service.lims.hmhj.common.WmsRequest;
import com.patzn.cloud.service.lims.hmhj.common.consts.HttpConst;
import com.patzn.cloud.service.lims.hmhj.mapper.EntrustSampleMapper; import com.patzn.cloud.service.lims.hmhj.mapper.EntrustSampleMapper;
import com.patzn.cloud.service.lims.hmhj.original.OriginalUtil; import com.patzn.cloud.service.lims.hmhj.original.OriginalUtil;
import com.patzn.cloud.service.lims.hmhj.service.*; import com.patzn.cloud.service.lims.hmhj.service.*;
...@@ -39,10 +43,10 @@ import org.apache.poi.xwpf.usermodel.XWPFDocument; ...@@ -39,10 +43,10 @@ import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell; import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.*; import java.io.*;
import java.math.BigDecimal; import java.math.BigDecimal;
...@@ -60,41 +64,44 @@ import java.util.stream.Collectors; ...@@ -60,41 +64,44 @@ import java.util.stream.Collectors;
@Service @Service
public class EntrustSampleServiceImpl extends BaseServiceImpl<EntrustSampleMapper, EntrustSample> implements IEntrustSampleService { public class EntrustSampleServiceImpl extends BaseServiceImpl<EntrustSampleMapper, EntrustSample> implements IEntrustSampleService {
@Autowired @Resource
private ICodeRuleService codeRuleService; private ICodeRuleService codeRuleService;
@Autowired @Resource
private IEntrustSampleRecordService entrustSampleRecordService; private IEntrustSampleRecordService entrustSampleRecordService;
@Autowired @Resource
private IEntrustReportTemplateService entrustReportTemplateService; private IEntrustReportTemplateService entrustReportTemplateService;
@Autowired @Resource
private IEntrustReportTemplateConfigService entrustReportTemplateConfigService; private IEntrustReportTemplateConfigService entrustReportTemplateConfigService;
@Autowired @Resource
private OssClient ossClient; private OssClient ossClient;
@Autowired @Resource
private IEntrustSampleItemService entrustSampleItemService; private IEntrustSampleItemService entrustSampleItemService;
@Autowired @Resource
private IEntrustSampleItemIndexService entrustSampleItemIndexService; private IEntrustSampleItemIndexService entrustSampleItemIndexService;
@Autowired @Resource
private IEntrustReportService entrustReportService; private IEntrustReportService entrustReportService;
@Autowired @Resource
private IEntrustService entrustService; private IEntrustService entrustService;
@Autowired @Resource
private IEntrustReportRelSampleService entrustReportRelSampleService; private IEntrustReportRelSampleService entrustReportRelSampleService;
@Autowired @Resource
private IContractSampleService contractSampleService; private IContractSampleService contractSampleService;
@Autowired @Resource
private IEntrustSamplePrepareService entrustSamplePrepareService; private IEntrustSamplePrepareService entrustSamplePrepareService;
@Autowired @Resource
private IContractSampleRecordService contractSampleRecordService; private IContractSampleRecordService contractSampleRecordService;
@Autowired @Resource
private IEntrustSampleBackupService entrustSampleBackupService; private IEntrustSampleBackupService entrustSampleBackupService;
@Resource
private ServiceProperties serviceProperties;
@Override @Override
public Page<EntrustSample> page(Page<EntrustSample> page, EntrustSample entrustSample) { public Page<EntrustSample> page(Page<EntrustSample> page, EntrustSample entrustSample) {
Wrapper wrapper = new EntityWrapper<>(entrustSample); Wrapper wrapper = new EntityWrapper<>(entrustSample);
...@@ -2384,6 +2391,50 @@ public class EntrustSampleServiceImpl extends BaseServiceImpl<EntrustSampleMappe ...@@ -2384,6 +2391,50 @@ public class EntrustSampleServiceImpl extends BaseServiceImpl<EntrustSampleMappe
return super.getObjs(Condition.create().setSqlSelect("distinct entrust_id").in("code", sampleCodes)); return super.getObjs(Condition.create().setSqlSelect("distinct entrust_id").in("code", sampleCodes));
} }
@Override
public void postWmsEntrustData(List<Entrust> entrustList) {
logger.info("✦✦✦✦ EntrustSampleServiceImpl ✦✦✦✦ postWmsEntrustData ✦✦✦✈ 准备推送委托数据至WMS系统!");
if (CollectionUtils.isEmpty(entrustList)) {
logger.error("✦✦✦✦ EntrustSampleServiceImpl ✦✦✦✦ postWmsEntrustData ✦✦✦✈ 委托信息为空,取消推送!");
return;
}
// 查询委托ids
List<Long> entrustIds = entrustList.stream().map(Entrust::getId).collect(Collectors.toList());
// 查询样品信息
List<EntrustSample> sampleList = list(Condition.<EntrustSample>wrapper()
.setSqlSelect("id,entrust_id,name,code,name_code")
.in("entrust_ids", entrustIds));
// 是否为空,为空返回不发送
if (CollectionUtils.isEmpty(sampleList)) {
logger.error("✦✦✦✦ EntrustSampleServiceImpl ✦✦✦✦ postWmsEntrustData ✦✦✦✈ 样品信息为空,取消发送!");
return;
}
// 以委托id分组的Map数据供发送使用
Map<Long, EntrustSample> entrustSampleMap = new LinkedHashMap<>();
// 会覆盖,不予理会
sampleList.forEach(s -> entrustSampleMap.put(s.getEntrustId(), s));
// 循环发送信息
entrustList.forEach(entrust -> {
doSendWmsEntrustData(entrust.getCode(), entrustSampleMap.get(entrust.getId()));
});
}
private void doSendWmsEntrustData(String code, EntrustSample sample) {
logger.info("✦✦✦✦ EntrustSampleServiceImpl ✦✦✦✦ doSendWmsEntrustData ✦✦✦✈ 开始推送委托数据至WMS系统!");
String url = serviceProperties.buildWmsUrl(HttpConst.WMS_SYNC_WTBH);
// 设置请求参数
Map<String, Object> map = new HashMap<>();
map.put("WTbh", code);
map.put("MaterialName", sample.getName());
map.put("MaterialCode", sample.getNameCode());
map.put("CreateDate", new Date());
WmsRespResult result = WmsRequest.sendJson(url, map);
if (Objects.nonNull(result)) {
logger.info("✦✦✦✦ EntrustSampleServiceImpl ✦✦✦✦ doSendWmsEntrustData ✦✦✦✈ 委托信息推送WMS数据成功!");
return;
}
}
private List<EntrustSampleItemIndex> getIndexList(Long sampleId) { private List<EntrustSampleItemIndex> getIndexList(Long sampleId) {
if (null == sampleId) { if (null == sampleId) {
......
...@@ -298,10 +298,7 @@ public class EntrustServiceImpl extends BaseServiceImpl<EntrustMapper, Entrust> ...@@ -298,10 +298,7 @@ public class EntrustServiceImpl extends BaseServiceImpl<EntrustMapper, Entrust>
sample.setCodeRuleType(codeTypeVal); sample.setCodeRuleType(codeTypeVal);
// 若为外委检测和三级编码,则查询质检编号 // 若为外委检测和三级编码,则查询质检编号
if (CodeTypeEnum.SAMPLE_WWJC_CODE == codeType || CodeTypeEnum.SAMPLE_YFL_CODE == codeType) { if (CodeTypeEnum.SAMPLE_WWJC_CODE == codeType || CodeTypeEnum.SAMPLE_YFL_CODE == codeType) {
List<UserInspectionCode> userInspectionCodeList = userInspectionCodeService.list(Condition.create().eq("user_id", account.getUserId()).eq("type", "ZJ").eq("deleted", 0)); inspectNo = getInspectNo(account);
if (CollectionUtils.isNotEmpty(userInspectionCodeList)) {
inspectNo = userInspectionCodeList.get(0).getNo();
}
} }
if (CodeTypeEnum.SAMPLE_YL_CODE == codeType || CodeTypeEnum.SAMPLE_DJZ_CODE == codeType) { if (CodeTypeEnum.SAMPLE_YL_CODE == codeType || CodeTypeEnum.SAMPLE_DJZ_CODE == codeType) {
...@@ -384,6 +381,11 @@ public class EntrustServiceImpl extends BaseServiceImpl<EntrustMapper, Entrust> ...@@ -384,6 +381,11 @@ public class EntrustServiceImpl extends BaseServiceImpl<EntrustMapper, Entrust>
} }
} }
private String getInspectNo(Account account) {
String inspectNo = userInspectionCodeService.getOne(new UserInspectionCode(account.getUserId(), "ZJ")).getNo();
return Optional.ofNullable(inspectNo).orElse("");
}
// 验证样品非空字段 // 验证样品非空字段
private void judgeSampleFields(EntrustSample sample, boolean isRequiredFill) { private void judgeSampleFields(EntrustSample sample, boolean isRequiredFill) {
if (isRequiredFill) { if (isRequiredFill) {
......
package com.patzn.cloud.service.lims.hmhj.service.impl; package com.patzn.cloud.service.lims.hmhj.service.impl;
import com.baomidou.mybatisplus.toolkit.CollectionUtils; import com.baomidou.mybatisplus.toolkit.CollectionUtils;
import com.fasterxml.jackson.core.type.TypeReference;
import com.patzn.cloud.commons.api.RestAssert; import com.patzn.cloud.commons.api.RestAssert;
import com.patzn.cloud.commons.service.impl.BaseServiceImpl; import com.patzn.cloud.commons.service.impl.BaseServiceImpl;
import com.patzn.cloud.commons.toolkit.JacksonUtils;
import com.patzn.cloud.commons.toolkit.MapMergeUtils; import com.patzn.cloud.commons.toolkit.MapMergeUtils;
import com.patzn.cloud.service.hmhj.dto.LedgerQueryDTO; import com.patzn.cloud.service.hmhj.dto.*;
import com.patzn.cloud.service.hmhj.dto.QueryDTO;
import com.patzn.cloud.service.hmhj.dto.RangeStatsQueryDTO;
import com.patzn.cloud.service.hmhj.dto.StatsQueryDTO;
import com.patzn.cloud.service.hmhj.entity.CenterCost; import com.patzn.cloud.service.hmhj.entity.CenterCost;
import com.patzn.cloud.service.hmhj.entity.Statistics; import com.patzn.cloud.service.hmhj.entity.Statistics;
import com.patzn.cloud.service.hmhj.model.WmsRespResult;
import com.patzn.cloud.service.hmhj.vo.DailyStatsLedgerVO; import com.patzn.cloud.service.hmhj.vo.DailyStatsLedgerVO;
import com.patzn.cloud.service.hmhj.vo.WmsInventory;
import com.patzn.cloud.service.hmhj.vo.WmsInventoryData;
import com.patzn.cloud.service.lims.common.DateKit; import com.patzn.cloud.service.lims.common.DateKit;
import com.patzn.cloud.service.lims.config.ServiceProperties;
import com.patzn.cloud.service.lims.hmhj.common.WmsRequest;
import com.patzn.cloud.service.lims.hmhj.common.consts.HttpConst;
import com.patzn.cloud.service.lims.hmhj.mapper.StatisticsMapper; import com.patzn.cloud.service.lims.hmhj.mapper.StatisticsMapper;
import com.patzn.cloud.service.lims.hmhj.service.IStatisticsService; import com.patzn.cloud.service.lims.hmhj.service.IStatisticsService;
import org.apache.commons.lang.time.DateUtils; import org.apache.commons.lang.time.DateUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/**
* @author Meazty
*/
@Service @Service
public class StatisticsServiceImpl extends BaseServiceImpl<StatisticsMapper, Statistics> implements IStatisticsService { public class StatisticsServiceImpl extends BaseServiceImpl<StatisticsMapper, Statistics> implements IStatisticsService {
...@@ -39,6 +48,9 @@ public class StatisticsServiceImpl extends BaseServiceImpl<StatisticsMapper, Sta ...@@ -39,6 +48,9 @@ public class StatisticsServiceImpl extends BaseServiceImpl<StatisticsMapper, Sta
elementMap.put("V", "钒"); elementMap.put("V", "钒");
} }
@Resource
private ServiceProperties serviceProperties;
private void handleQueryTime(QueryDTO queryDTO) { private void handleQueryTime(QueryDTO queryDTO) {
RestAssert.fail(null == queryDTO.getTimeS(), "起始时间不为空"); RestAssert.fail(null == queryDTO.getTimeS(), "起始时间不为空");
// 截至时间若为空,默认当前时间 // 截至时间若为空,默认当前时间
...@@ -258,6 +270,42 @@ public class StatisticsServiceImpl extends BaseServiceImpl<StatisticsMapper, Sta ...@@ -258,6 +270,42 @@ public class StatisticsServiceImpl extends BaseServiceImpl<StatisticsMapper, Sta
} }
@Override @Override
public List<WmsInventory> getInventoryList(WmsInventoryDTO dto) {
List<WmsInventory> dataList = new ArrayList<>();
String url = serviceProperties.buildWmsUrl(HttpConst.WMS_SYNC_STOCK_SITUATION);
// 设置请求参数
HashMap<String, Object> map = new HashMap<>(2);
if (StringUtils.isNotBlank(dto.getType())) {
map.put("Type", dto.getType());
}
if (StringUtils.isNotBlank(dto.getMaterialName())) {
map.put("MaterialName", dto.getMaterialName());
}
if (StringUtils.isNotBlank(dto.getSpecification())) {
map.put("Specification", dto.getSpecification());
}
if (StringUtils.isNotBlank(dto.getUnit())) {
map.put("Unit", dto.getUnit());
}
url = "https://mock.apifox.cn/m1/1293503-0-default/v1/stock/data";
try {
List<WmsInventoryData> inventoryList = WmsRequest.sendJson(url, map, new TypeReference<WmsRespResult<List<WmsInventoryData>>>() {
});
if (CollectionUtils.isNotEmpty(inventoryList)) {
return inventoryList.stream().map(d -> d.convert(WmsInventory.class)).collect(Collectors.toList());
}
} catch (Exception e) {
logger.error("✦✦✦✦ StatisticsServiceImpl ✦✦✦✦ getInventoryList ✦✦✦✈ 转换数据时异常:", e);
}
return dataList;
}
@Override
public Statistics getItemSamesChainQuantity(RangeStatsQueryDTO queryDTO) { public Statistics getItemSamesChainQuantity(RangeStatsQueryDTO queryDTO) {
handleSamesChainTimeRange(queryDTO); handleSamesChainTimeRange(queryDTO);
return baseMapper.selectItemSamesChainQuantity(queryDTO); return baseMapper.selectItemSamesChainQuantity(queryDTO);
...@@ -281,8 +329,6 @@ public class StatisticsServiceImpl extends BaseServiceImpl<StatisticsMapper, Sta ...@@ -281,8 +329,6 @@ public class StatisticsServiceImpl extends BaseServiceImpl<StatisticsMapper, Sta
/** /**
* 根据当前时间区域,处理其他时间区域 * 根据当前时间区域,处理其他时间区域
*
* @param queryDTO
*/ */
private void handleTimeRange(RangeStatsQueryDTO queryDTO) { private void handleTimeRange(RangeStatsQueryDTO queryDTO) {
queryDTO.setLastYearTimeS(DateUtils.addYears(queryDTO.getTimeS(), -1)); queryDTO.setLastYearTimeS(DateUtils.addYears(queryDTO.getTimeS(), -1));
...@@ -486,12 +532,4 @@ public class StatisticsServiceImpl extends BaseServiceImpl<StatisticsMapper, Sta ...@@ -486,12 +532,4 @@ public class StatisticsServiceImpl extends BaseServiceImpl<StatisticsMapper, Sta
} }
return elementMap.get(name.replace("原铝", "")); return elementMap.get(name.replace("原铝", ""));
} }
private enum StatsType {
AL_GRADE_LEDGER, // 原铝品位台账
AL_GRADE_LEDGER_STATS, // 原铝品位台账统计
AL_IMPURITY_LEDGER, // 原铝杂质台账
AL_IMPURITY_LEDGER_STATS, // 原铝杂质台账统计
AL_FE_LEDGER_STATS // 原铝含铁量统计
}
} }
package com.patzn.cloud.service.lims.hmhj.service.impl; package com.patzn.cloud.service.lims.hmhj.service.impl;
import com.baomidou.mybatisplus.mapper.Condition;
import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper; import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page; import com.baomidou.mybatisplus.plugins.Page;
...@@ -10,6 +11,8 @@ import com.patzn.cloud.service.lims.hmhj.service.IUserInspectionCodeService; ...@@ -10,6 +11,8 @@ import com.patzn.cloud.service.lims.hmhj.service.IUserInspectionCodeService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.Optional;
/** /**
* 用户质检编码基础数据 服务实现类 * 用户质检编码基础数据 服务实现类
...@@ -31,4 +34,19 @@ public class UserInspectionCodeServiceImpl extends BaseServiceImpl<UserInspectio ...@@ -31,4 +34,19 @@ public class UserInspectionCodeServiceImpl extends BaseServiceImpl<UserInspectio
public boolean removeByIds(List<Long> ids) { public boolean removeByIds(List<Long> ids) {
return baseMapper.deleteBatchIds(ids) > 0; return baseMapper.deleteBatchIds(ids) > 0;
} }
@Override
public UserInspectionCode getOne(UserInspectionCode entity) {
UserInspectionCode data = new UserInspectionCode();
if (Objects.isNull(entity)) {
return data;
}
try {
UserInspectionCode inspectionCode = baseMapper.selectOne(entity);
return Optional.ofNullable(inspectionCode).orElse(data);
} catch (Exception e) {
logger.error("获取质检编码异常:", e);
return data;
}
}
} }
package com.patzn.cloud.service.lims.hmhj.service.impl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.patzn.cloud.commons.service.impl.BaseServiceImpl;
import com.patzn.cloud.commons.toolkit.JacksonUtils;
import com.patzn.cloud.service.hmhj.dto.WmsStockDeliveryDTO;
import com.patzn.cloud.service.hmhj.entity.WmsStockDelivery;
import com.patzn.cloud.service.hmhj.vo.WmsStockDeliveryData;
import com.patzn.cloud.service.lims.hmhj.mapper.WmsStockDeliveryMapper;
import com.patzn.cloud.service.lims.hmhj.service.IWmsStockDeliveryService;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
* WMS出入库 服务实现类
*
* @author meazty
* @since 2023-04-11
*/
@Service
public class WmsStockDeliveryServiceImpl extends BaseServiceImpl<WmsStockDeliveryMapper, WmsStockDelivery> implements IWmsStockDeliveryService {
/**
* 霍煤生成的companyId
*/
private static final Long COMPANY_ID = 0L;
@Override
public Page<WmsStockDelivery> page(Page<WmsStockDelivery> page, WmsStockDeliveryDTO dto) {
Wrapper<WmsStockDelivery> wrapper = new EntityWrapper<>(new WmsStockDelivery());
if (org.apache.commons.lang3.StringUtils.isNotBlank(dto.getContainerCode())) {
wrapper.like("container_code", dto.getContainerCode());
}
if (org.apache.commons.lang3.StringUtils.isNotBlank(dto.getFromLocation())) {
wrapper.like("from_location", dto.getFromLocation());
}
if (org.apache.commons.lang3.StringUtils.isNotBlank(dto.getMaterialName())) {
wrapper.like("material_name", dto.getMaterialName());
}
if (org.apache.commons.lang3.StringUtils.isNotBlank(dto.getMaterialCode())) {
wrapper.like("material_code", dto.getMaterialCode());
}
if (org.apache.commons.lang3.StringUtils.isNotBlank(dto.getWtbh())) {
wrapper.like("wtbh", dto.getWtbh());
}
if (org.apache.commons.lang3.StringUtils.isNotBlank(dto.getSpecification())) {
wrapper.like("specification", dto.getSpecification());
}
if (org.apache.commons.lang3.StringUtils.isNotBlank(dto.getTaskType())) {
wrapper.like("task_type", dto.getTaskType());
}
if (Objects.nonNull(dto.getCompleteTimeS())) {
wrapper.ge("complete_at", dto.getCompleteTimeS());
}
if (Objects.nonNull(dto.getCompleteTimeE())) {
wrapper.le("complete_at", dto.getCompleteTimeE());
}
return this.page(page, wrapper);
}
@Override
public boolean removeByIds(List<Long> ids) {
return baseMapper.deleteBatchIds(ids) > 0;
}
@Override
public boolean syncStockDelivery(WmsStockDeliveryData data) {
logger.info("✦✦✦✦ WmsStockDeliveryServiceImpl ✦✦✦✦ syncStockDelivery ✦✦✦✈ 开始同步出入库记录!");
if (Objects.isNull(data)) {
logger.error("✦✦✦✦ WmsStockDeliveryServiceImpl ✦✦✦✦ syncStockDelivery ✦✦✦✈ 出入库信息为空,取消同步!");
return false;
}
boolean result = false;
try {
WmsStockDelivery delivery = data.convert(WmsStockDelivery.class);
delivery.setCompanyId(COMPANY_ID);
delivery.setCtime(new Date());
delivery.setUid(0L);
result = super.save(delivery);
logger.info("✦✦✦✦ WmsStockDeliveryServiceImpl ✦✦✦✦ syncStockDelivery ✦✦✦✈ 数据同步完成:{}", JacksonUtils.toJSONString(delivery));
} catch (Exception e) {
logger.error("✦✦✦✦ WmsStockDeliveryServiceImpl ✦✦✦✦ syncStockDelivery ✦✦✦✈ 类型转换失败:", e);
}
return result;
}
}
package com.patzn.cloud.service.lims.hmhj.service.impl;
import com.baomidou.mybatisplus.mapper.Condition;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.fasterxml.jackson.core.type.TypeReference;
import com.patzn.cloud.commons.service.impl.BaseServiceImpl;
import com.patzn.cloud.commons.toolkit.CollectionUtils;
import com.patzn.cloud.service.hmhj.dto.WmsStockDTO;
import com.patzn.cloud.service.hmhj.entity.WmsStock;
import com.patzn.cloud.service.hmhj.model.WmsRespResult;
import com.patzn.cloud.service.hmhj.vo.WmsStockData;
import com.patzn.cloud.service.lims.config.ServiceProperties;
import com.patzn.cloud.service.lims.hmhj.common.WmsRequest;
import com.patzn.cloud.service.lims.hmhj.common.consts.HttpConst;
import com.patzn.cloud.service.lims.hmhj.mapper.WmsStockMapper;
import com.patzn.cloud.service.lims.hmhj.service.IWmsStockService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
/**
* WMS库存 服务实现类
*
* @author meazty
* @since 2023-04-11
*/
@Service
public class WmsStockServiceImpl extends BaseServiceImpl<WmsStockMapper, WmsStock> implements IWmsStockService {
private static final String REAL_TIME_SYNC = "1";
@Resource
private ServiceProperties serviceProperties;
@Override
public Page<WmsStock> page(Page<WmsStock> page, WmsStockDTO dto) {
Wrapper<WmsStock> wrapper = new EntityWrapper<>(new WmsStock());
if (StringUtils.isNotBlank(dto.getContainerCode())) {
wrapper.like("container_code", dto.getContainerCode());
}
if (StringUtils.isNotBlank(dto.getLocationCode())) {
wrapper.like("location_code", dto.getLocationCode());
}
if (StringUtils.isNotBlank(dto.getMaterialName())) {
wrapper.like("material_name", dto.getMaterialName());
}
if (StringUtils.isNotBlank(dto.getMaterialCode())) {
wrapper.like("material_code", dto.getMaterialCode());
}
if (StringUtils.isNotBlank(dto.getWtbh())) {
wrapper.like("wtbh", dto.getWtbh());
}
if (Objects.equals(REAL_TIME_SYNC, dto.getRealTimeSync())) {
syncWmsStockData();
}
return this.page(page, wrapper);
}
@Override
public void syncWmsStockData() {
String url = serviceProperties.buildWmsUrl(HttpConst.WMS_SYNC_STOCK);
// 设置请求参数
HashMap<String, Object> map = new HashMap<>(2);
List<WmsStockData> dataList = WmsRequest.sendJson(url, map, new TypeReference<WmsRespResult<List<WmsStockData>>>() {
});
if (CollectionUtils.isEmpty(dataList)) {
logger.error("✦✦✦✦ WmsStockServiceImpl ✦✦✦✦ syncWmsStockData ✦✦✦✈ 出入库数据为空!");
return;
}
// 同步更新WMS库存数据
logger.debug("✦✦✦✦ WmsStockServiceImpl ✦✦✦✦ syncWmsStockData ✦✦✦✈ 开始同步WMS数据!");
try {
List<WmsStock> stockList = convertList(dataList);
Optional.ofNullable(stockList).ifPresent(this::saveOrUpdateBatch);
} catch (Exception e) {
logger.error("✦✦✦✦ WmsStockServiceImpl ✦✦✦✦ syncUpdateWmsStockData ✦✦✦✈ 转换数据失败:", e);
}
}
private List<WmsStock> list() {
EntityWrapper<WmsStock> wrapper = Condition.wrapper();
return list(wrapper);
}
public List<WmsStock> convertList(List<WmsStockData> list) {
if (CollectionUtils.isEmpty(list)) {
logger.error("✦✦✦✦ WmsStockServiceImpl ✦✦✦✦ convertList ✦✦✦✈ 获取WMS库存信息为空!");
return Collections.emptyList();
}
List<WmsStock> all = list();
Map<String, WmsStock> stockMap = new LinkedHashMap<>(8);
Optional.ofNullable(all).ifPresent(data -> data.forEach(d -> stockMap.put(getStockKey(d), d)));
List<WmsStock> dataList = new ArrayList<>();
list.forEach(d -> {
WmsStock stock = d.convert(WmsStock.class);
WmsStock source = stockMap.get(getStockKey(stock));
// 判断是否存在库存数据,存在设置id和委托编号
Optional.ofNullable(source).ifPresent(s -> stock.setId(s.getId()));
stock.setLastSyncTime(new Date());
dataList.add(stock);
});
return dataList;
}
private String getStockKey(WmsStock stock) {
String key = String.format("%s-%s-%s", stock.getContainerCode(), stock.getMaterialCode(), stock.getLocationCode());
logger.info("✦✦✦✦ WmsStockServiceImpl ✦✦✦✦ syncKey ✦✦✦✈ [key]: {}", key);
return key;
}
@Override
public boolean removeByIds(List<Long> ids) {
return baseMapper.deleteBatchIds(ids) > 0;
}
}
...@@ -4,10 +4,6 @@ server: ...@@ -4,10 +4,6 @@ server:
enable: false enable: false
swagger: swagger:
enable: true enable: true
service:
api-url: http://api.dev.patzn.com:7000
url: http://api.dev.patzn.com:7000
erp-url: http://192.168.0.19:5050/api/LimsData/SaveData
spring: spring:
datasource: datasource:
type: com.zaxxer.hikari.HikariDataSource type: com.zaxxer.hikari.HikariDataSource
......
...@@ -13,7 +13,7 @@ service: ...@@ -13,7 +13,7 @@ service:
province-item-url: http://60.216.97.250:8087/ province-item-url: http://60.216.97.250:8087/
soffice: /opt/libreoffice6.2/program/soffice soffice: /opt/libreoffice6.2/program/soffice
static-url: static.hmlims.com:9000 static-url: static.hmlims.com:9000
erp-url: http://192.168.0.19:5050/api/LimsData/SaveData erp-url: http://192.168.0.216:5050/api/LimsData/SaveData
erp-token: VkI+Gi2pizx9uaX+xP+nXAgJKfcBevaruxijYtXXQdU577BLv3jdoLpnQ13BZ5hdPTD90jLmvlr7ygxh18kuLdD9Ha9MdTXIxWJKbNbBn6fnrHU/9lsXBnOVyOEB1DIXW0VQniyjuobU5qolBr2Y99NTQ/l9giZlXGVXAE+1WvY= erp-token: VkI+Gi2pizx9uaX+xP+nXAgJKfcBevaruxijYtXXQdU577BLv3jdoLpnQ13BZ5hdPTD90jLmvlr7ygxh18kuLdD9Ha9MdTXIxWJKbNbBn6fnrHU/9lsXBnOVyOEB1DIXW0VQniyjuobU5qolBr2Y99NTQ/l9giZlXGVXAE+1WvY=
spring: spring:
datasource: datasource:
......
...@@ -8,6 +8,7 @@ service: ...@@ -8,6 +8,7 @@ service:
api-url: http://api.dev.patzn.com:7000 api-url: http://api.dev.patzn.com:7000
url: http://api.dev.patzn.com:7000 url: http://api.dev.patzn.com:7000
erp-url: http://192.168.0.19:5050/api/LimsData/SaveData erp-url: http://192.168.0.19:5050/api/LimsData/SaveData
erp-token: VkI+Gi2pizx9uaX+xP+nXAgJKfcBevaruxijYtXXQdU577BLv3jdoLpnQ13BZ5hdPTD90jLmvlr7ygxh18kuLdD9Ha9MdTXIxWJKbNbBn6fnrHU/9lsXBnOVyOEB1DIXW0VQniyjuobU5qolBr2Y99NTQ/l9giZlXGVXAE+1WvY=
spring: spring:
datasource: datasource:
type: com.zaxxer.hikari.HikariDataSource type: com.zaxxer.hikari.HikariDataSource
......
...@@ -6,11 +6,20 @@ server: ...@@ -6,11 +6,20 @@ server:
compression: compression:
enabled: true enabled: true
mime-types: application/json mime-types: application/json
service:
soffice: /opt/libreoffice6.2/program/soffice
url: http://api.dev.patzn.com:7000
food-url: http://food.hmlims.com:9000
static-url: static.hmlims.com:9000
province-item-url: http://60.216.97.250:8087/
api-url: http://api.dev.patzn.com:7000
erp-url: http://192.168.0.216:5050/api/LimsData/SaveData
erp-token: VkI+Gi2pizx9uaX+xP+nXAgJKfcBevaruxijYtXXQdU577BLv3jdoLpnQ13BZ5hdPTD90jLmvlr7ygxh18kuLdD9Ha9MdTXIxWJKbNbBn6fnrHU/9lsXBnOVyOEB1DIXW0VQniyjuobU5qolBr2Y99NTQ/l9giZlXGVXAE+1WvY=
wms-url: http://192.168.207.103:9001/LIMS
spring: spring:
# 环境 dev|test|pro # 环境 dev|test|pro
profiles: profiles:
active: dev active: local
application: application:
name: hmhj name: hmhj
# 模板引擎配置 # 模板引擎配置
...@@ -40,7 +49,6 @@ spring: ...@@ -40,7 +49,6 @@ spring:
max-lifetime: 1800000 #在连接池中的最长生命周期 max-lifetime: 1800000 #在连接池中的最长生命周期
connection-timeout: 600000 #超时时间 connection-timeout: 600000 #超时时间
#validation-timeout: #默认是5秒 #validation-timeout: #默认是5秒
cloud: cloud:
loadbalancer: loadbalancer:
retry: retry:
...@@ -76,7 +84,6 @@ spring: ...@@ -76,7 +84,6 @@ spring:
default-encoding: UTF-8 default-encoding: UTF-8
main: main:
allow-bean-definition-overriding: true allow-bean-definition-overriding: true
#ribbon超时设置 #ribbon超时设置
ribbon: ribbon:
OkToRetryOnAllOperations: true OkToRetryOnAllOperations: true
......
package com.patzn.cloud.service.lims.test; package com.patzn.cloud.service.lims.test;
import org.junit.platform.commons.util.StringUtils;
import org.apache.commons.lang.StringUtils;
public class IDWorkTest { public class IDWorkTest {
public static void main(String[] args) { public static void main(String[] args) {
......
package com.patzn.cloud.service.lims.test; package com.patzn.cloud.service.lims.test;
import com.alibaba.fastjson.JSONArray; import com.patzn.cloud.commons.toolkit.JacksonUtils;
import com.alibaba.fastjson.JSONObject; import com.patzn.cloud.service.hmhj.entity.WmsStock;
import com.patzn.cloud.service.hmhj.vo.CollectionVO; import com.patzn.cloud.service.hmhj.vo.WmsStockData;
public class JsonObjectTest { public class JsonObjectTest {
public static void main(String[] args) { public static void main(String[] args) {
String str = "{\"abs\":\"-0.000\",\"content\":\"-0.0007\",\"curveData\":[{\"content\":\"0.0000\",\"abs\":\"0.001\"},{\"content\":\"0.0030\",\"abs\":\"0.012\"},{\"content\":\"0.0060\",\"abs\":\"0.022\"},{\"content\":\"0.0100\",\"abs\":\"0.034\"},{\"content\":\"0.0150\",\"abs\":\"0.049\"}]}"; // language=JSON
CollectionVO collectionVO = JSONObject.parseObject(str,CollectionVO.class); String json = "{\"ContainerCode\": \"1111\",\"Wtbh\": \"2033333323\"}";
System.out.println(collectionVO);
WmsStockData stock = JacksonUtils.readValue(json, WmsStockData.class);
System.out.println(stock.getContainerCode());
System.out.println(stock.getWtbh());
} }
} }
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